diff --git a/src/fdlib.c b/src/fdlib.c
index 7395872c64b0a27520812778fd1c2f9cd63a73be..c58a4cd9147f957f3d1fd1f63ab6a49c3900a856 100644
--- a/src/fdlib.c
+++ b/src/fdlib.c
@@ -456,7 +456,7 @@ FD fd_dup2(FD from, FD to)
   return to;
 }
 
-#endif
+#endif /* HAVE_WINSOCK_H */
 
 #if 0
 
@@ -496,7 +496,7 @@ void *fd_mapper_get(struct fd_mapper *x, FD fd)
 {
   return x->data[fd];
 }
-#else
+#else /* FD_LINEAR */
 struct fd_mapper_data
 {
   FD x;
@@ -560,1141 +560,9 @@ void *fd_mapper_get(struct fd_mapper *x, FD fd)
   }
   return x->data[hval].data;
 }
-#endif
+#endif /* FD_LINEAR */
 
 
-#if 0
-struct fd_data_hash
-{
-  FD fd;
-  int key;
-  struct fd_data_hash *next;
-  void *data;
-};
-
-#define FD_DATA_PER_BLOCK 255
-
-struct fd_data_hash_block
-{
-  struct fd_data_hash_block *next;
-  struct fd_data_hash data[FD_DATA_PER_BLOCk];
-};
-
-static int keynum=0;
-static unsigned int num_stored_keys=0;
-static unsigned int hash_size=0;
-static struct fd_data_hash *free_blocks=0;
-static struct fd_data_hash **htable=0;
-static fd_data_hash_block *hash_blocks=0;
-
-int get_fd_data_key(void)
-{
-  return ++keynum;
-}
-
-void store_fd_data(FD fd, int key, void *data)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(last=htable[e];p=*last;last=&p->next)
-  {
-    if(p->fd == fd && p->key == key)
-    {
-      if(data)
-      {
-	p->data=data;
-      }else{
-	*last=p->next;
-	p->next=free_blocks;
-	free_blocks=p;
-	num_stored_keys--;
-      }
-      return;
-    }
-  }
-  if(!data) return;
-
-  num_stored_keys++;
-
-  if(num_stored_keys * 2 >= hash_size)
-  {
-    /* time to rehash */
-    unsigned int h;
-    unsigned int old_hsize=hash_size;
-    unsigned fd_data_hash **old_htable=htable;
-    if(!hash_size)
-      hash_size=127;
-    else
-      hash_size*=3;
-
-    htable=(struct fd_data_hash **)xalloc(hash_size * sizeof(struct fd_data_hash *));
-    
-    for(h=0;h<old_hsize;h++)
-    {
-      for(last=old_htable+e;p=*last;last=&p->next)
-	store_fd_data(p->fd, p->key, p->data);
-      *last=free_blocks;
-      free_blocks=old_htable[h];
-    }
-    if(old_htable)
-      free((char *)old_htable);
-  }
-
-
-  if(!free_blocks)
-  {
-    struct fd_data_hash_block *n;
-    int e;
-    n=ALLOC_STRUCT(fd_data_hash_block);
-    n->next=hash_blocks;
-    hash_blocks=n;
-    for(e=0;e<FD_DATA_PER_BLOCK;e++)
-    {
-      n->data[e].next=free_blocks;
-      free_blocks=n->data+e;
-    }
-  }
-  
-  p=free_blocks;
-  free_blocks=p->next;
-  p->fd=fd;
-  p->key=key;
-  p->data=data;
-  p->next=htable[hval];
-  htable[hval]=p;
-}
-
-void *get_fd_data(FD fd, int key)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(p=htable[hval];p;p=p->next)
-    if(p->fd == fd && p->key == key)
-      return p->data;
-
-  return 0;
-}
-
-
-#endif
-
-#ifdef FDLIB_USE_SELECT
-
-struct fd_waitor
-{
-  fd_FDSET storage;
-  fd_FDSET temporary;
-static long convert_filetime_to_time_t(FILETIME tmp)
-{
-  double t;
-  t=tmp.dwHighDateTime * pow(2.0,32.0) + (double)tmp.dwLowDateTime;
-  t/=10000000.0;
-  t-=11644473600.0;
-  return (long)floor(t);
-}
-
-int fd_fstat(FD fd, struct stat *s)
-{
-  DWORD x;
-  int ret;
-  FILETIME c,a,m;
-  FDDEBUG(fprintf(stderr,"fstat on %d (%d)\n",fd,da_handle[fd]));
-  if(fd_type[fd]!=FD_FILE)
-  {
-    errno=ENOTSUPP;
-    return -1;
-  }
-
-  MEMSET(s, 0, sizeof(struct stat));
-  s->st_nlink=1;
-
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      s->st_mode=S_IFSOCK;
-      break;
-
-    default:
-      switch(GetFileType((HANDLE)da_handle[fd]))
-      {
-	default:
-	case FILE_TYPE_UNKNOWN: s->st_mode=0;        break;
-	case FILE_TYPE_DISK:
-	  s->st_mode=S_IFREG; 
-	  s->st_size=GetFileSize((HANDLE)da_handle[fd],&x);
-	  if(x)
-	  {
-	    s->st_size=0x7fffffff;
-	  }
-	  if(!GetFileTime((HANDLE)da_handle[fd], &c, &a, &m))
-	  {
-	    errno=GetLastError();
-	    return -1;
-	  }
-	  s->st_ctime=convert_filetime_to_time_t(c);
-	  s->st_atime=convert_filetime_to_time_t(a);
-	  s->st_mtime=convert_filetime_to_time_t(m);
-	  break;
-	case FILE_TYPE_CHAR:    s->st_mode=S_IFCHR;  break;
-	case FILE_TYPE_PIPE:    s->st_mode=S_IFFIFO; break;
-      }
-  }
-  s->st_mode |= 0666;
-  return 0;
-}
-
-int fd_select(int fds, FD_SET *a, FD_SET *b, FD_SET *c, struct timeval *t)
-{
-  int ret;
-  ret=select(fds,a,b,c,t);
-  if(ret==SOCKET_ERROR)
-  {
-    errno=WSAGetLastError();
-    return -1;
-  }
-  return ret;
-}
-
-
-int fd_ioctl(FD fd, int cmd, void *data)
-{
-  int ret;
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      ret=ioctlsocket((SOCKET)da_handle[fd], cmd, data);
-      if(ret==SOCKET_ERROR)
-      {
-	errno=WSAGetLastError();
-	return -1;
-      }
-      return ret;
-
-    default:
-      errno=ENOTSUPP;
-      return -1;
-  }
-}
-
-
-FD fd_dup(FD from)
-{
-  FD fd;
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  fd=first_free_handle;
-  first_free_handle=fd_type[fd];
-  fd_type[fd]=fd_type[from];
-  da_handle[fd]=(long)x;
-  
-  FDDEBUG(fprintf(stderr,"Dup %d (%d) to %d (%d)\n",from,da_handle[from],fd,x));
-  return fd;
-}
-
-FD fd_dup2(FD from, FD to)
-{
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  if(fd_type[to] < FD_NO_MORE_FREE)
-  {
-    if(!CloseHandle((HANDLE)da_handle[to]))
-    {
-      errno=GetLastError();
-      return -1;
-    }
-  }else{
-    int *prev,next;
-    for(prev=&first_free_handle;(next=*prev) != FD_NO_MORE_FREE;prev=fd_type+next)
-    {
-      if(next==to)
-      {
-	*prev=fd_type[next];
-	break;
-      }
-    }
-  }
-  fd_type[to]=fd_type[from];
-  da_handle[to]=(long)x;
-
-  FDDEBUG(fprintf(stderr,"Dup2 %d (%d) to %d (%d)\n",from,da_handle[from],to,x));
-
-  return to;
-}
-
-#endif
-
-#if 0
-
-#ifdef FD_LINEAR
-struct fd_mapper
-{
-  int size;
-  void **data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  x->size=64;
-  x->data=(void **)xalloc(x->size*sizeof(void *));
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  while(fd>=x->size)
-  {
-    x->size*=2;
-    x->data=(void **)realloc((char *)x->data, x->size*sizeof(void *));
-    if(!x->data)
-      fatal("Out of memory.\n");
-    x->data=nd;
-  }
-  x->data[fd]=data;
-  
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  return x->data[fd];
-}
-#else
-struct fd_mapper_data
-{
-  FD x;
-  void *data;
-};
-struct fd_mapper
-{
-  int num;
-  int hsize;
-  struct fd_mapper_data *data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  int i;
-  x->num=0;
-  x->hsize=127;
-  x->data=(struct fd_mapper_data *)xalloc(x->hsize*sizeof(struct fd_mapper_data));
-  for(i=0;i<x->hsize;i++) x->data[i].fd=-1;
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  int hval;
-  x->num++;
-  if(x->num*2 > x->hsize)
-  {
-    struct fd_mapper_data *old=x->data;
-    int i,old_size=x->hsize;
-    x->hsize*=3;
-    x->num=0;
-    x->data=(struct fd_mapper_data *)xalloc(x->size*sizeof(struct fd_mapper_data *));
-    for(i=0;i<x->size;i++) x->data[i].fd=-1;
-    for(i=0;i<old_size;i++)
-      if(old[i].fd!=-1)
-	fd_mapper_set(x, old[i].fd, old[i].data);
-  }
-
-  hval=fd % x->hsize;
-  while(x->data[hval].fd != -1)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  x->data[hval].fd=fd;
-  x->data[hval].data=data;
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  int hval=fd % x->hsize;
-  while(x->data[hval].fd != fd)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  return x->data[hval].data;
-}
-#endif
-
-
-#if 0
-struct fd_data_hash
-{
-  FD fd;
-  int key;
-  struct fd_data_hash *next;
-  void *data;
-};
-
-#define FD_DATA_PER_BLOCK 255
-
-struct fd_data_hash_block
-{
-  struct fd_data_hash_block *next;
-  struct fd_data_hash data[FD_DATA_PER_BLOCk];
-};
-
-static int keynum=0;
-static unsigned int num_stored_keys=0;
-static unsigned int hash_size=0;
-static struct fd_data_hash *free_blocks=0;
-static struct fd_data_hash **htable=0;
-static fd_data_hash_block *hash_blocks=0;
-
-int get_fd_data_key(void)
-{
-  return ++keynum;
-}
-
-void store_fd_data(FD fd, int key, void *data)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(last=htable[e];p=*last;last=&p->next)
-  {
-    if(p->fd == fd && p->key == key)
-    {
-      if(data)
-      {
-	p->data=data;
-      }else{
-	*last=p->next;
-	p->next=free_blocks;
-	free_blocks=p;
-	num_stored_keys--;
-      }
-      return;
-    }
-  }
-  if(!data) return;
-
-  num_stored_keys++;
-
-  if(num_stored_keys * 2 >= hash_size)
-  {
-    /* time to rehash */
-    unsigned int h;
-    unsigned int old_hsize=hash_size;
-    unsigned fd_data_hash **old_htable=htable;
-    if(!hash_size)
-      hash_size=127;
-    else
-      hash_size*=3;
-
-    htable=(struct fd_data_hash **)xalloc(hash_size * sizeof(struct fd_data_hash *));
-    
-    for(h=0;h<old_hsize;h++)
-    {
-      for(last=old_htable+e;p=*last;last=&p->next)
-	store_fd_data(p->fd, p->key, p->data);
-      *last=free_blocks;
-      free_blocks=old_htable[h];
-    }
-    if(old_htable)
-      free((char *)old_htable);
-  }
-
-
-  if(!free_blocks)
-  {
-    struct fd_data_hash_block *n;
-    int e;
-    n=ALLOC_STRUCT(fd_data_hash_block);
-    n->next=hash_blocks;
-    hash_blocks=n;
-    for(e=0;e<FD_DATA_PER_BLOCK;e++)
-    {
-      n->data[e].next=free_blocks;
-      free_blocks=n->data+e;
-    }
-  }
-  
-  p=free_blocks;
-  free_blocks=p->next;
-  p->fd=fd;
-  p->key=key;
-  p->data=data;
-  p->next=htable[hval];
-  htable[hval]=p;
-}
-
-void *get_fd_data(FD fd, int key)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(p=htable[hval];p;p=p->next)
-    if(p->fd == fd && p->key == key)
-      return p->data;
-
-  return 0;
-}
-
-
-#endif
-
-#ifdef FDLIB_USE_SELECT
-
-struct fd_waitor
-{
-  fd_FDSET storage;
-  fd_FDSET temporary;
-static long convert_filetime_to_time_t(FILETIME tmp)
-{
-  double t;
-  t=tmp.dwHighDateTime * pow(2.0,32.0) + (double)tmp.dwLowDateTime;
-  t/=10000000.0;
-  t-=11644473600.0;
-  return (long)floor(t);
-}
-
-int fd_fstat(FD fd, struct stat *s)
-{
-  DWORD x;
-  int ret;
-  FILETIME c,a,m;
-  FDDEBUG(fprintf(stderr,"fstat on %d (%d)\n",fd,da_handle[fd]));
-  if(fd_type[fd]!=FD_FILE)
-  {
-    errno=ENOTSUPP;
-    return -1;
-  }
-
-  MEMSET(s, 0, sizeof(struct stat));
-  s->st_nlink=1;
-
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      s->st_mode=S_IFSOCK;
-      break;
-
-    default:
-      switch(GetFileType((HANDLE)da_handle[fd]))
-      {
-	default:
-	case FILE_TYPE_UNKNOWN: s->st_mode=0;        break;
-	case FILE_TYPE_DISK:
-	  s->st_mode=S_IFREG; 
-	  s->st_size=GetFileSize((HANDLE)da_handle[fd],&x);
-	  if(x)
-	  {
-	    s->st_size=0x7fffffff;
-	  }
-	  if(!GetFileTime((HANDLE)da_handle[fd], &c, &a, &m))
-	  {
-	    errno=GetLastError();
-	    return -1;
-	  }
-	  s->st_ctime=convert_filetime_to_time_t(c);
-	  s->st_atime=convert_filetime_to_time_t(a);
-	  s->st_mtime=convert_filetime_to_time_t(m);
-	  break;
-	case FILE_TYPE_CHAR:    s->st_mode=S_IFCHR;  break;
-	case FILE_TYPE_PIPE:    s->st_mode=S_IFFIFO; break;
-      }
-  }
-  s->st_mode |= 0666;
-  return 0;
-}
-
-int fd_select(int fds, FD_SET *a, FD_SET *b, FD_SET *c, struct timeval *t)
-{
-  int ret;
-  ret=select(fds,a,b,c,t);
-  if(ret==SOCKET_ERROR)
-  {
-    errno=WSAGetLastError();
-    return -1;
-  }
-  return ret;
-}
-
-
-int fd_ioctl(FD fd, int cmd, void *data)
-{
-  int ret;
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      ret=ioctlsocket((SOCKET)da_handle[fd], cmd, data);
-      if(ret==SOCKET_ERROR)
-      {
-	errno=WSAGetLastError();
-	return -1;
-      }
-      return ret;
-
-    default:
-      errno=ENOTSUPP;
-      return -1;
-  }
-}
-
-
-FD fd_dup(FD from)
-{
-  FD fd;
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  fd=first_free_handle;
-  first_free_handle=fd_type[fd];
-  fd_type[fd]=fd_type[from];
-  da_handle[fd]=(long)x;
-  
-  FDDEBUG(fprintf(stderr,"Dup %d (%d) to %d (%d)\n",from,da_handle[from],fd,x));
-  return fd;
-}
-
-FD fd_dup2(FD from, FD to)
-{
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  if(fd_type[to] < FD_NO_MORE_FREE)
-  {
-    if(!CloseHandle((HANDLE)da_handle[to]))
-    {
-      errno=GetLastError();
-      return -1;
-    }
-  }else{
-    int *prev,next;
-    for(prev=&first_free_handle;(next=*prev) != FD_NO_MORE_FREE;prev=fd_type+next)
-    {
-      if(next==to)
-      {
-	*prev=fd_type[next];
-	break;
-      }
-    }
-  }
-  fd_type[to]=fd_type[from];
-  da_handle[to]=(long)x;
-
-  FDDEBUG(fprintf(stderr,"Dup2 %d (%d) to %d (%d)\n",from,da_handle[from],to,x));
-
-  return to;
-}
-
-#endif
-
-#if 0
-
-#ifdef FD_LINEAR
-struct fd_mapper
-{
-  int size;
-  void **data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  x->size=64;
-  x->data=(void **)xalloc(x->size*sizeof(void *));
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  while(fd>=x->size)
-  {
-    x->size*=2;
-    x->data=(void **)realloc((char *)x->data, x->size*sizeof(void *));
-    if(!x->data)
-      fatal("Out of memory.\n");
-    x->data=nd;
-  }
-  x->data[fd]=data;
-  
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  return x->data[fd];
-}
-#else
-struct fd_mapper_data
-{
-  FD x;
-  void *data;
-};
-struct fd_mapper
-{
-  int num;
-  int hsize;
-  struct fd_mapper_data *data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  int i;
-  x->num=0;
-  x->hsize=127;
-  x->data=(struct fd_mapper_data *)xalloc(x->hsize*sizeof(struct fd_mapper_data));
-  for(i=0;i<x->hsize;i++) x->data[i].fd=-1;
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  int hval;
-  x->num++;
-  if(x->num*2 > x->hsize)
-  {
-    struct fd_mapper_data *old=x->data;
-    int i,old_size=x->hsize;
-    x->hsize*=3;
-    x->num=0;
-    x->data=(struct fd_mapper_data *)xalloc(x->size*sizeof(struct fd_mapper_data *));
-    for(i=0;i<x->size;i++) x->data[i].fd=-1;
-    for(i=0;i<old_size;i++)
-      if(old[i].fd!=-1)
-	fd_mapper_set(x, old[i].fd, old[i].data);
-  }
-
-  hval=fd % x->hsize;
-  while(x->data[hval].fd != -1)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  x->data[hval].fd=fd;
-  x->data[hval].data=data;
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  int hval=fd % x->hsize;
-  while(x->data[hval].fd != fd)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  return x->data[hval].data;
-}
-#endif
-
-
-#if 0
-struct fd_data_hash
-{
-  FD fd;
-  int key;
-  struct fd_data_hash *next;
-  void *data;
-};
-
-#define FD_DATA_PER_BLOCK 255
-
-struct fd_data_hash_block
-{
-  struct fd_data_hash_block *next;
-  struct fd_data_hash data[FD_DATA_PER_BLOCk];
-};
-
-static int keynum=0;
-static unsigned int num_stored_keys=0;
-static unsigned int hash_size=0;
-static struct fd_data_hash *free_blocks=0;
-static struct fd_data_hash **htable=0;
-static fd_data_hash_block *hash_blocks=0;
-
-int get_fd_data_key(void)
-{
-  return ++keynum;
-}
-
-void store_fd_data(FD fd, int key, void *data)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(last=htable[e];p=*last;last=&p->next)
-  {
-    if(p->fd == fd && p->key == key)
-    {
-      if(data)
-      {
-	p->data=data;
-      }else{
-	*last=p->next;
-	p->next=free_blocks;
-	free_blocks=p;
-	num_stored_keys--;
-      }
-      return;
-    }
-  }
-  if(!data) return;
-
-  num_stored_keys++;
-
-  if(num_stored_keys * 2 >= hash_size)
-  {
-    /* time to rehash */
-    unsigned int h;
-    unsigned int old_hsize=hash_size;
-    unsigned fd_data_hash **old_htable=htable;
-    if(!hash_size)
-      hash_size=127;
-    else
-      hash_size*=3;
-
-    htable=(struct fd_data_hash **)xalloc(hash_size * sizeof(struct fd_data_hash *));
-    
-    for(h=0;h<old_hsize;h++)
-    {
-      for(last=old_htable+e;p=*last;last=&p->next)
-	store_fd_data(p->fd, p->key, p->data);
-      *last=free_blocks;
-      free_blocks=old_htable[h];
-    }
-    if(old_htable)
-      free((char *)old_htable);
-  }
-
-
-  if(!free_blocks)
-  {
-    struct fd_data_hash_block *n;
-    int e;
-    n=ALLOC_STRUCT(fd_data_hash_block);
-    n->next=hash_blocks;
-    hash_blocks=n;
-    for(e=0;e<FD_DATA_PER_BLOCK;e++)
-    {
-      n->data[e].next=free_blocks;
-      free_blocks=n->data+e;
-    }
-  }
-  
-  p=free_blocks;
-  free_blocks=p->next;
-  p->fd=fd;
-  p->key=key;
-  p->data=data;
-  p->next=htable[hval];
-  htable[hval]=p;
-}
-
-void *get_fd_data(FD fd, int key)
-{
-  struct fd_data_hash *p,**last;
-  unsigned int hval=(fd + key * 53) % hash_size;
-
-  for(p=htable[hval];p;p=p->next)
-    if(p->fd == fd && p->key == key)
-      return p->data;
-
-  return 0;
-}
-
-
-#endif
-
-#ifdef FDLIB_USE_SELECT
-
-struct fd_waitor
-{
-  fd_FDSET storage;
-  fd_FDSET temporary;
-static long convert_filetime_to_time_t(FILETIME tmp)
-{
-  double t;
-  t=tmp.dwHighDateTime * pow(2.0,32.0) + (double)tmp.dwLowDateTime;
-  t/=10000000.0;
-  t-=11644473600.0;
-  return (long)floor(t);
-}
-
-int fd_fstat(FD fd, struct stat *s)
-{
-  DWORD x;
-  int ret;
-  FILETIME c,a,m;
-  FDDEBUG(fprintf(stderr,"fstat on %d (%d)\n",fd,da_handle[fd]));
-  if(fd_type[fd]!=FD_FILE)
-  {
-    errno=ENOTSUPP;
-    return -1;
-  }
-
-  MEMSET(s, 0, sizeof(struct stat));
-  s->st_nlink=1;
-
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      s->st_mode=S_IFSOCK;
-      break;
-
-    default:
-      switch(GetFileType((HANDLE)da_handle[fd]))
-      {
-	default:
-	case FILE_TYPE_UNKNOWN: s->st_mode=0;        break;
-	case FILE_TYPE_DISK:
-	  s->st_mode=S_IFREG; 
-	  s->st_size=GetFileSize((HANDLE)da_handle[fd],&x);
-	  if(x)
-	  {
-	    s->st_size=0x7fffffff;
-	  }
-	  if(!GetFileTime((HANDLE)da_handle[fd], &c, &a, &m))
-	  {
-	    errno=GetLastError();
-	    return -1;
-	  }
-	  s->st_ctime=convert_filetime_to_time_t(c);
-	  s->st_atime=convert_filetime_to_time_t(a);
-	  s->st_mtime=convert_filetime_to_time_t(m);
-	  break;
-	case FILE_TYPE_CHAR:    s->st_mode=S_IFCHR;  break;
-	case FILE_TYPE_PIPE:    s->st_mode=S_IFFIFO; break;
-      }
-  }
-  s->st_mode |= 0666;
-  return 0;
-}
-
-int fd_select(int fds, FD_SET *a, FD_SET *b, FD_SET *c, struct timeval *t)
-{
-  int ret;
-  ret=select(fds,a,b,c,t);
-  if(ret==SOCKET_ERROR)
-  {
-    errno=WSAGetLastError();
-    return -1;
-  }
-  return ret;
-}
-
-
-int fd_ioctl(FD fd, int cmd, void *data)
-{
-  int ret;
-  switch(fd_type[fd])
-  {
-    case FD_SOCKET:
-      ret=ioctlsocket((SOCKET)da_handle[fd], cmd, data);
-      if(ret==SOCKET_ERROR)
-      {
-	errno=WSAGetLastError();
-	return -1;
-      }
-      return ret;
-
-    default:
-      errno=ENOTSUPP;
-      return -1;
-  }
-}
-
-
-FD fd_dup(FD from)
-{
-  FD fd;
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  fd=first_free_handle;
-  first_free_handle=fd_type[fd];
-  fd_type[fd]=fd_type[from];
-  da_handle[fd]=(long)x;
-  
-  FDDEBUG(fprintf(stderr,"Dup %d (%d) to %d (%d)\n",from,da_handle[from],fd,x));
-  return fd;
-}
-
-FD fd_dup2(FD from, FD to)
-{
-  HANDLE x,p=GetCurrentProcess();
-  if(!DuplicateHandle(p,(HANDLE)da_handle[from],p,&x,NULL,0,DUPLICATE_SAME_ACCESS))
-  {
-    errno=GetLastError();
-    return -1;
-  }
-
-  if(fd_type[to] < FD_NO_MORE_FREE)
-  {
-    if(!CloseHandle((HANDLE)da_handle[to]))
-    {
-      errno=GetLastError();
-      return -1;
-    }
-  }else{
-    int *prev,next;
-    for(prev=&first_free_handle;(next=*prev) != FD_NO_MORE_FREE;prev=fd_type+next)
-    {
-      if(next==to)
-      {
-	*prev=fd_type[next];
-	break;
-      }
-    }
-  }
-  fd_type[to]=fd_type[from];
-  da_handle[to]=(long)x;
-
-  FDDEBUG(fprintf(stderr,"Dup2 %d (%d) to %d (%d)\n",from,da_handle[from],to,x));
-
-  return to;
-}
-
-#endif
-
-#if 0
-
-#ifdef FD_LINEAR
-struct fd_mapper
-{
-  int size;
-  void **data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  x->size=64;
-  x->data=(void **)xalloc(x->size*sizeof(void *));
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  while(fd>=x->size)
-  {
-    x->size*=2;
-    x->data=(void **)realloc((char *)x->data, x->size*sizeof(void *));
-    if(!x->data)
-      fatal("Out of memory.\n");
-    x->data=nd;
-  }
-  x->data[fd]=data;
-  
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  return x->data[fd];
-}
-#else
-struct fd_mapper_data
-{
-  FD x;
-  void *data;
-};
-struct fd_mapper
-{
-  int num;
-  int hsize;
-  struct fd_mapper_data *data;
-};
-
-void init_fd_mapper(struct fd_mapper *x)
-{
-  int i;
-  x->num=0;
-  x->hsize=127;
-  x->data=(struct fd_mapper_data *)xalloc(x->hsize*sizeof(struct fd_mapper_data));
-  for(i=0;i<x->hsize;i++) x->data[i].fd=-1;
-}
-
-void exit_fd_mapper(struct fd_mapper *x)
-{
-  free((char *)x->data);
-}
-
-void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
-{
-  int hval;
-  x->num++;
-  if(x->num*2 > x->hsize)
-  {
-    struct fd_mapper_data *old=x->data;
-    int i,old_size=x->hsize;
-    x->hsize*=3;
-    x->num=0;
-    x->data=(struct fd_mapper_data *)xalloc(x->size*sizeof(struct fd_mapper_data *));
-    for(i=0;i<x->size;i++) x->data[i].fd=-1;
-    for(i=0;i<old_size;i++)
-      if(old[i].fd!=-1)
-	fd_mapper_set(x, old[i].fd, old[i].data);
-  }
-
-  hval=fd % x->hsize;
-  while(x->data[hval].fd != -1)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  x->data[hval].fd=fd;
-  x->data[hval].data=data;
-}
-
-void *fd_mapper_get(struct fd_mapper *x, FD fd)
-{
-  int hval=fd % x->hsize;
-  while(x->data[hval].fd != fd)
-  {
-    hval++;
-    if(hval==x->hsize) hval=0;
-  }
-  return x->data[hval].data;
-}
-#endif
-
-
-#if 0
 struct fd_data_hash
 {
   FD fd;
@@ -1809,8 +677,6 @@ void *get_fd_data(FD fd, int key)
 }
 
 
-#endif
-
 #define FD_EVENT_READ 1
 #define FD_EVENT_WRITE 2
 #define FD_EVENT_OOB 4
@@ -1915,7 +781,7 @@ int fd_waitor_idle(fd_waitor *x,
   return 0;
 }
 
-#endif
+#endif /* FDLIB_USE_SELECT */
 
 #ifdef FDLIB_USE_WAITFORMULTIPLEOBJECTS
 
@@ -1990,6 +856,6 @@ FD fd_waitor_idle(fd_waitor *x, struct timeval delay)
   }
 }
 
-#endif
+#endif /* FDLIB_USE_WAITFORMULTIPLEOBJECTS */
 
-#endif
+#endif /* 0 */