/*
 * opendir/readdir/closedir
 */

#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/dirent.h>
#include <stdio.h>

#define __IO_DIR_DEFINED
struct _IO_dir {
  int fd;
  size_t bytes_left;
  struct dirent *next;
  struct dirent buffer[4];	/* 4 times max dirent size */
};

#include <dirent.h>

DIR *opendir(const char *name)
{
  DIR *dp = malloc(sizeof(DIR));

  if ( !dp )
    return NULL;

  dp->fd = open(name, O_DIRECTORY|O_RDONLY);

  if ( dp->fd < 0 ) {
    free(dp);
    return NULL;
  }

  dp->bytes_left = 0;

  return dp;
}

struct dirent *readdir(DIR *dir)
{
  struct dirent *dent;
  int rv;
  
  if ( !dir->bytes_left ) {
    rv = getdents(dir->fd, dir->buffer, sizeof(dir->buffer));
    if ( rv <= 0 )
      return NULL;
    dir->bytes_left = rv;
    dir->next = dir->buffer;
  }

  dent = dir->next;
  ((char *)dir->next) += dent->d_reclen;
  dir->bytes_left -= dent->d_reclen;
  
  return dent;
}

int closedir(DIR *dir)
{
  int rv;
  rv = close(dir->fd);
  free(dir);
  return rv;
}
