--- np2/win9x/dosio.cpp 2004/01/10 17:24:01 1.4 +++ np2/win9x/dosio.cpp 2004/01/10 20:15:43 1.5 @@ -262,6 +262,28 @@ short file_attr_c(const char *path) { } +static BOOL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { + +#if !defined(_WIN32_WCE) + if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && + ((file_cmpname(w32fd->cFileName, ".")) || + (file_cmpname(w32fd->cFileName, "..")))) { + return(FAILURE); + } +#endif + fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; + fli->size = w32fd->nFileSizeLow; + fli->attr = w32fd->dwFileAttributes; + cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time); +#if defined(UNICODE) + WideCharToMultiByte(CP_ACP, 0, w32fd->cFileName, -1, + fli->path, sizeof(fli->path), NULL, NULL); +#else + milstr_ncpy(fli->path, w32fd->cFileName, sizeof(fli->path)); +#endif + return(SUCCESS); +} + FLISTH file_list1st(const char *dir, FLINFO *fli) { char path[MAX_PATH]; @@ -273,42 +295,27 @@ FLISTH file_list1st(const char *dir, FLI milsjis_ncat(path, "*.*", sizeof(path)); TRACEOUT(("file_list1st %s", path)); hdl = FindFirstFile_A(path, &w32fd); - if ((hdl != INVALID_HANDLE_VALUE) && (fli)) { - fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; - fli->size = w32fd.nFileSizeLow; - fli->attr = w32fd.dwFileAttributes; - cnvdatetime(&w32fd.ftLastWriteTime, &fli->date, &fli->time); -#if defined(UNICODE) - WideCharToMultiByte(CP_ACP, 0, w32fd.cFileName, -1, - fli->path, sizeof(fli->path), NULL, NULL); -#else - milstr_ncpy(fli->path, w32fd.cFileName, sizeof(fli->path)); - TRACEOUT(("-> %s", w32fd.cFileName)); -#endif + if (hdl != INVALID_HANDLE_VALUE) { + do { + if (setflist(&w32fd, fli) == SUCCESS) { + return(hdl); + } + } while(FindNextFile(hdl, &w32fd)); + FindClose(hdl); } - return(hdl); + return(FLISTH_INVALID); } BOOL file_listnext(FLISTH hdl, FLINFO *fli) { WIN32_FIND_DATA w32fd; - if (!FindNextFile(hdl, &w32fd)) { - return(FAILURE); - } - if (fli) { - fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; - fli->size = w32fd.nFileSizeLow; - fli->attr = w32fd.dwFileAttributes; - cnvdatetime(&w32fd.ftLastWriteTime, &fli->date, &fli->time); -#if defined(UNICODE) - WideCharToMultiByte(CP_ACP, 0, w32fd.cFileName, -1, - fli->path, sizeof(fli->path), NULL, NULL); -#else - milstr_ncpy(fli->path, w32fd.cFileName, sizeof(fli->path)); -#endif + while(FindNextFile(hdl, &w32fd)) { + if (setflist(&w32fd, fli) == SUCCESS) { + return(SUCCESS); + } } - return(SUCCESS); + return(FAILURE); } void file_listclose(FLISTH hdl) {