| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // First microsoft compilers
- #include <windows.h>
- #include <io.h>
- #include <ctype.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <libtarint/filesystem.h>
- kwDirectory * kwOpenDir(const char* name)
- {
- // struct _KWDIR ssss;
- char* buf;
- size_t n = strlen(name);
- kwDirectory * dir = (kwDirectory *)malloc(sizeof (kwDirectory));
- if(dir==NULL)
- {
- return NULL;
- }
- dir->EOD=0; //not the end of directory
- if ( name[n - 1] == '/' )
- {
- buf = (char*) malloc(n + 1 + 1);
- // buf = new char[n + 1 + 1];
- sprintf(buf, "%s*", name);
- }
- else
- {
- buf = (char*)malloc(n + 2 + 1);
- // buf = new char[n + 2 + 1];
- sprintf(buf, "%s/*", name);
- }
-
- // Now put them into the file array
- dir->SrchHandle = _findfirst(buf, &dir->Entry);
- free(buf);
-
- if ( dir->SrchHandle == -1 )
- {
- free(dir);
- return NULL;
- }
- return dir;
- }
- kwDirEntry * kwReadDir(kwDirectory * dir)
- {
- static kwDirEntry entry;
- if(!dir || dir->EOD ==1)
- {
- return NULL;
- }
- strncpy(entry.d_name,dir->Entry.name,TAR_MAXPATHLEN-1);
- if(_findnext(dir->SrchHandle, &dir->Entry) == -1)
- {
- dir->EOD=1;
- }
- // It is both stupid and dangerous to return a pointer to a static like this.
- // This can only be called by one caller at a time: i.e., it's not thread safe.
- // On the other hand, it mimics the documented behavior of "readdir" which is
- // what it's implemented to replace for platforms that do not have readdir.
- // Memory leaks are also stupid and dangerous... perhaps this is less so.
- //
- return &entry;
- }
- int kwCloseDir(kwDirectory * dir)
- {
- int r=-1;
- if(dir)
- {
- r=_findclose(dir->SrchHandle);
- free(dir);
- }
- if(r==-1) return 0;
- return 1;
- }
|