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