home *** CD-ROM | disk | FTP | other *** search
- #ifdef WIN32
-
- #include <windows.h>
- #include <dirent.h>
- #include <string.h>
- #define BOOL short
- typedef struct tagWin32GnuDir {
- DIR dir;
- struct dirent dent;
- char namefill[MAX_PATH];
- } Win32GnuDir;
-
- typedef Win32GnuDir * PW32GDIR;
-
- DIR * opendir(path)
- char * path;
- {
- DIR *dir=0;
- char fpath[MAX_PATH],full[MAX_PATH];
- LPTSTR end,put;
- DWORD fulllen;
- DWORD fileattr,volattr;
- char tmp[4];
- strcpy(fpath,path);
- end=fpath;
- while(((end=strchr(fpath,'/'))))
- *end='\\';
- GetFullPathName(fpath,
- MAX_PATH,
- full,
- 0);
- if((fileattr=GetFileAttributes(fpath))!=0xffffffff)
- {
- if (fileattr & FILE_ATTRIBUTE_DIRECTORY)
- {
- dir=calloc(sizeof(Win32GnuDir),1);
- strcat(full,"\\*");
- dir->__data=calloc(sizeof(WIN32_FIND_DATA),1);
- dir->__fd=FindFirstFile(full,
- dir->__data);
- dir->__allocation=dir->__size=sizeof(WIN32_FIND_DATA);
- }
- }
- return(dir);
- }
-
-
-
- int closedir(dir)
- DIR * dir;
- {
- int retval=-1;
- if (dir)
- {
- if (FindClose(dir->__fd) || dir->__fd == 0xffffffff)
- retval=0;
- free(dir->__data);
- free(dir);
- }
- return(retval);
- }
-
- struct dirent *readdir(dir)
- DIR * dir;
- {
- struct dirent *retdirent=0;
- LPWIN32_FIND_DATA find;
- DWORD diridx;
- if (dir)
- {
- diridx=dir->__offset/sizeof(WIN32_FIND_DATA);
- find=dir->__data;
- if (strlen(find[diridx].cFileName))
- {
- strcpy(&dir->__entry.d_name,&find[diridx].cFileName);
- dir->__offset+=sizeof(WIN32_FIND_DATA);
- if (dir->__offset>=dir->__size)
- {
- dir->__size+=sizeof(WIN32_FIND_DATA);
- dir->__allocation=dir->__size;
- find=dir->__data=realloc(find,dir->__size);
- memset(&find[diridx+1],0,sizeof(WIN32_FIND_DATA));
- FindNextFile(dir->__fd,&find[diridx+1]);
- }
- retdirent=&dir->__entry;
- dir->__entry.d_namlen=strlen(dir->__entry.d_name);
- }
- }
- return(retdirent);
- }
-
-
-
-
- void rewinddir(dirp)
- DIR *dirp;
- {
- if (dirp)
- {
- dirp->__offset=0;
- }
- }
-
- void seekdir(dirp, pos)
- DIR *dirp;
- _off_t pos;
- {
- if (dirp)
- {
- pos=(pos/sizeof(WIN32_FIND_DATA))*sizeof(WIN32_FIND_DATA);
- if (pos<dirp->__size)
- dirp->__offset=pos;
- }
- }
-
-
- _off_t telldir(dirp)
- DIR * dirp;
- {
- if (dirp)
- return(dirp->__offset);
- else
- return(0xffffffff);
- }
-
- #endif
-
-
-