#include "scan.h"
#include "env.h"
#include "open.h"
#include "stralloc.h"

int ucspitls(void)
{
  unsigned long fd;
  char *fdstr;
   
  if (!(fdstr=env_get("SSLCTLFD")))
    return 0;
  if (!scan_ulong(fdstr,&fd))
    return 0;
  if (write((int)fd, "Y", 1) < 1)
    return 0;
 
  if (!(fdstr=env_get("SSLREADFD")))
    return 0;
  if (!scan_ulong(fdstr,&fd))
    return 0;
  if (dup2((int)fd,0) == -1)
    return 0;
 
  if (!(fdstr=env_get("SSLWRITEFD")))
    return 0; 
  if (!scan_ulong(fdstr,&fd))
    return 0;
  if (dup2((int)fd,1) == -1)
    return 0;
 
  return 1;
}

int ucspitlsinfo(void)
{
  unsigned long fd;
  char *fdstr;
  char envbuf[8192];
  char *x;
  int j;

  stralloc ssl_env = { 0 };
  stralloc ssl_parm = { 0 };
  stralloc ssl_value = { 0 };

  if (!(fdstr=env_get("SSLCTLFD")))
    return 0;
  if (!scan_ulong(fdstr,&fd))
    return 0;

  while ((j=read(fd,envbuf,8192)) >0 ) {
    stralloc_catb(&ssl_env,envbuf,j);
      if (ssl_env.len >= 2 && ssl_env.s[ssl_env.len-2]==0 && ssl_env.s[ssl_env.len-1]==0)
        break;
  }
  if (j < 0)
    die_nomem();

  x = ssl_env.s; 

  for (j=0;j < ssl_env.len-1;++j) {
    if ( *x != '=' ) {
      if(!stralloc_catb(&ssl_parm,x,1)) die_nomem();
      x++; }
    else {
      if (!stralloc_0(&ssl_parm)) die_nomem();
      x++;

      for (;j < ssl_env.len-j-1;++j) {
        if ( *x != '\0' ) {
          if(!stralloc_catb(&ssl_value,x,1)) die_nomem();
          x++; }
        else {
          if (!stralloc_0(&ssl_value)) die_nomem();
          x++;
          if(!env_put2(ssl_parm.s,ssl_value.s)) die_nomem();
          ssl_parm.len = 0; 
          ssl_value.len = 0;
          break; 
        }
      }
    }
  }
  return j;
}


syntax highlighted by Code2HTML, v. 0.9.1