#if defined (WIN32) #include <process.h> #include <direct.h> #include <malloc.h> #include "winstuff.h" 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; } int strcasecmp (const char *s1, const char *s2) { register const u_char *us1 = (const u_char *) s1, *us2 = (const u_char *) s2; while (tolower (*us1) == tolower (*us2++)) if (*us1++ == '\0') return (0); return (tolower (*us1) - tolower (*--us2)); } int strncasecmp (const char *s1, const char *s2, register size_t n) { if (n != 0) { register const u_char *us1 = (const u_char *) s1, *us2 = (const u_char *) s2; do { if (tolower (*us1) != tolower (*us2++)) return (tolower (*us1) - tolower (*--us2)); if (*us1++ == '\0') break; } while (--n != 0); } return (0); } #endif /* WIN32 */