home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Action / Parsec47 / Parsec47.exe / p47 / src / dirent_d.c < prev    next >
C/C++ Source or Header  |  2003-11-29  |  965b  |  60 lines

  1. #ifdef WINDOWS
  2.  
  3. #include <windows.h>
  4.  
  5. #include <stdio.h>
  6. #include <malloc.h>
  7.  
  8. typedef struct {
  9.     HANDLE h;
  10.     char* prev;
  11. } DIR;
  12.  
  13. DIR* opendir(char* dir) {
  14.     WIN32_FIND_DATA fd;
  15.     HANDLE h;
  16.     DIR* d;
  17.     char buf[MAX_PATH];
  18.  
  19.     sprintf(buf, "%s/*", dir);
  20.     h = FindFirstFileA(buf, &fd);
  21.     d = (DIR*)malloc(sizeof(DIR));
  22.     d->h = h;
  23.     d->prev = 0;
  24.     return d;
  25. }
  26.  
  27. char* readdir_filename(DIR* d) {
  28.     WIN32_FIND_DATA fd;
  29.     BOOL ret = FindNextFileA(d->h, &fd);
  30.     if (ret) {
  31.         if (d->prev != 0) free(d->prev);
  32.         d->prev = malloc(sizeof(char) * strlen(fd.cFileName));
  33.         strcpy(d->prev, fd.cFileName);
  34.         return d->prev;
  35.     }
  36.     else {
  37.         return NULL;
  38.     }
  39. }
  40.  
  41. int closedir(DIR* d) {
  42.     FindClose(d->h);
  43.     free(d->prev);
  44.     free(d);
  45. }
  46.  
  47. #else // ! WINDOWS
  48.  
  49. #include "dirent.h"
  50. #include "unistd.h"
  51.  
  52. char* readdir_filename(DIR* dir) {
  53.     struct dirent* ent = readdir(dir);
  54.     if (ent == NULL) return NULL;
  55.     else return ent->d_name;
  56. }
  57.  
  58. #endif // WINDOWS
  59.  
  60.