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