#if defined (WIN32) #include <string.h> #include "compat.h" void *bzero (void *block, size_t size) { return memset (block, 0, size); } void *bcopy (void *to, const void *from, size_t size) { return memcpy (to, from, size); } DIR* opendir (const char *dirname) { char fullpath [MAX_PATH]; int iCnt, iTmp = strlen (dirname); DIR *dirstr; if (dirname==NULL || iTmp ==0) return NULL; dirstr = (DIR *) malloc (sizeof (DIR)); if (dirstr==NULL) return NULL; strcpy (fullpath, dirname); for (iCnt=0; iCnt<iTmp; iCnt++) if (fullpath[iCnt]=='/') fullpath[iCnt]='\\'; if (fullpath[iTmp-1]=='\\') strcat (fullpath, "*.*"); else strcat (fullpath, "\\*.*"); dirstr->d_firstread=TRUE; dirstr->Data = FindFirstFile ((LPCTSTR) (fullpath), &(dirstr->FindData)); // This may be don't correct... if (dirstr->Data == INVALID_HANDLE_VALUE) { free (dirstr); return NULL; } return dirstr; } struct dirent* readdir (DIR *dirstream) { if (dirstream==NULL) return NULL; // First read if (dirstream->d_firstread) dirstream->d_firstread=FALSE; // We already have readed name else { if (!FindNextFile (dirstream->Data, &(dirstream->FindData))) return NULL; } // copy and return strcpy (dirstream->d_name, dirstream->FindData.cFileName); return (struct dirent *) dirstream; } int closedir (DIR *dirstream) { if (dirstream==NULL) return -1; FindClose (dirstream->Data); free (dirstream); return 0; } #endif