31 char *findIn, *d,
is_dir = 0;
32 WIN32_FIND_DATAW findw;
34 int nDir = 0, NDir = 0;
38 len = (int) strlen(dirname);
39 findIn = (
char *)
malloc((
size_t)(len+10));
40 if (!findIn)
return -1;
41 strcpy(findIn, dirname);
46 for (d = findIn; *d; d++)
if (*d==
'/') *d=
'\\';
47 if (len==0) { strcpy(findIn,
".\\*"); }
48 if ((len==2)&&findIn[1]==
':'&&isalpha(findIn[0])) { *d++ =
'\\'; *d = 0; }
49 if ((len==1)&& (d[-1]==
'.')) { strcpy(findIn,
".\\*");
is_dir = 1; }
50 if ((len>0) && (d[-1]==
'\\')) { *d++ =
'*'; *d = 0;
is_dir = 1; }
51 if ((len>1) && (d[-1]==
'.') && (d[-2]==
'\\')) { d[-1] =
'*';
is_dir = 1; }
53 DWORD attr = GetFileAttributes(findIn);
54 if (attr&FILE_ATTRIBUTE_DIRECTORY)
60 unsigned short *wbuf =
NULL;
63 wbuf = (
unsigned short*)
malloc(
sizeof(
unsigned short)*wlen);
64 wlen =
fl_utf8toUtf16(findIn, (
unsigned) strlen(findIn), wbuf, wlen);
66 h = FindFirstFileW(wbuf, &findw);
69 if (h==INVALID_HANDLE_VALUE) {
72 if (ret != ERROR_NO_MORE_FILES) {
79 int l = (int) wcslen(findw.cFileName);
80 int dstlen = l * 5 + 1;
84 l =
fl_utf8fromwc(selectDir->d_name, dstlen, findw.cFileName, l);
86 selectDir->d_name[l] = 0;
87 if (findw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
89 strcat(selectDir->d_name,
"/");
94 if (NDir) memcpy(tempDir,
dir,
sizeof(
struct dirent*)*NDir);
99 dir[nDir] = selectDir;
105 }
while (FindNextFileW(h, &findw));
106 ret = GetLastError();
107 if (ret != ERROR_NO_MORE_FILES) {
115 if (compar) qsort(
dir, (
size_t)nDir,
sizeof(*
dir),
116 (
int(*)(
const void*,
const void*))compar);