#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 */