BOOL file_listnext(FLISTH hdl, FLINFO *fli) { OEMCHAR buf[MAX_PATH]; struct dirent *de; struct stat sb; de = readdir(hdl->hdl); if (de == NULL) { VERBOSE(("file_listnext: readdir failure")); return FAILURE; } milstr_ncpy(buf, hdl->path, sizeof(buf)); milstr_ncat(buf, de->d_name, sizeof(buf)); if (stat(buf, &sb) != 0) { VERBOSE(("file_listnext: stat failure. (path = %s)", buf)); return FAILURE; } fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; fli->size = sb.st_size; fli->attr = 0; if (S_ISDIR(sb.st_mode)) { fli->attr |= FILEATTR_DIRECTORY; } if (!(sb.st_mode & S_IWUSR)) { fli->attr |= FILEATTR_READONLY; } cnvdatetime(&sb, &fli->date, &fli->time); milstr_ncpy(fli->path, de->d_name, sizeof(fli->path)); VERBOSE(("file_listnext: success")); return SUCCESS; }
short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) { FILETIME lastwrite; if ((GetFileTime(handle, NULL, NULL, &lastwrite) == 0) || (cnvdatetime(&lastwrite, dosdate, dostime) != SUCCESS)) { return(-1); } return(0); }
short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) { struct stat sb; if ((fstat(fileno(handle), &sb) == 0) && (cnvdatetime(&sb, dosdate, dostime))) return 0; return -1; }
BOOL file_listnext(FLISTH hdl, FLINFO *fli) { FLHDL flhdl; ItemCount count; OSStatus r; UTCDateTime *dt; flhdl = (FLHDL)hdl; if ((flhdl == NULL) || (flhdl->eoff)) { goto ffn_err; } r = FSGetCatalogInfoBulk(flhdl->fsi, 1, &count, NULL, kFSCatInfoNodeFlags | kFSCatInfoDataSizes | kFSCatInfoAllDates, &flhdl->fsci, NULL, NULL, &flhdl->name); if (r != noErr) { flhdl->eoff = TRUE; if (r != errFSNoMoreItems) { goto ffn_err; } } if (count != 1) { flhdl->eoff = TRUE; goto ffn_err; } if (fli) { fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; if (flhdl->fsci.nodeFlags & kFSNodeIsDirectoryMask) { fli->attr = FILEATTR_DIRECTORY; fli->size = 0; dt = &flhdl->fsci.createDate; } else { fli->attr = FILEATTR_ARCHIVE; fli->size = (UINT32)flhdl->fsci.dataLogicalSize; dt = &flhdl->fsci.contentModDate; } if (flhdl->fsci.nodeFlags & kFSNodeLockedMask) { fli->attr |= FILEATTR_READONLY; } cnvdatetime(dt, &fli->date, &fli->time); char2str(fli->path, sizeof(fli->path), flhdl->name.unicode, flhdl->name.length); } return(SUCCESS); ffn_err: return(FAILURE); }
static BOOL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && ((!file_cmpname(w32fd->cFileName, ".")) || (!file_cmpname(w32fd->cFileName, "..")))) { return(FAILURE); } fli->caps = FLICAPS_SIZE | FLICAPS_ATTR; fli->size = w32fd->nFileSizeLow; fli->attr = w32fd->dwFileAttributes; if (cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time) == SUCCESS) { fli->caps |= FLICAPS_DATE | FLICAPS_TIME; } file_cpyname(fli->path, w32fd->cFileName, sizeof(fli->path)); return(SUCCESS); }
BOOL file_listnext(FLISTH hdl, FLINFO *fli) { FLHDL flhdl; Str255 fname; unsigned long dt; flhdl = (FLHDL)hdl; if ((flhdl == NULL) || (flhdl->eoff)) { goto ffn_err; } fname[0] = 0; flhdl->pb.dirInfo.ioNamePtr = fname; flhdl->pb.dirInfo.ioDrDirID = flhdl->tagid; flhdl->pb.dirInfo.ioFDirIndex = flhdl->index; flhdl->pb.dirInfo.ioACUser = 0; if (PBGetCatInfo(&flhdl->pb, false) != noErr) { flhdl->eoff = TRUE; goto ffn_err; } flhdl->index++; if (fli) { fli->caps = FLICAPS_SIZE | FLICAPS_ATTR | FLICAPS_DATE | FLICAPS_TIME; if (flhdl->pb.hFileInfo.ioFlAttrib & ioDirMask) { fli->attr = FILEATTR_DIRECTORY; fli->size = 0; dt = flhdl->pb.dirInfo.ioDrCrDat; } else { fli->attr = FILEATTR_ARCHIVE; fli->size = flhdl->pb.hFileInfo.ioFlLgLen; dt = flhdl->pb.hFileInfo.ioFlMdDat; } if (flhdl->pb.hFileInfo.ioFlAttrib & 0x01) { fli->attr |= FILEATTR_READONLY; } cnvdatetime(dt, &fli->date, &fli->time); mkcstr(fli->path, sizeof(fli->path), fname); } return(SUCCESS); ffn_err: return(FAILURE); }
static BRESULT DOSIOCALL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { #if !defined(_WIN32_WCE) if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && ((!lstrcmp(w32fd->cFileName, str_selfdir)) || (!lstrcmp(w32fd->cFileName, str_parentdir)))) { 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(OEMCHAR_SAME_TCHAR) file_cpyname(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); #else tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, (UINT)-1); #endif return(SUCCESS); }
short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) { #ifdef TARGET_API_MAC_CARBON FSRef ref; FSCatalogInfo fsci; if ((FSGetForkCBInfo(handle, 0, NULL, NULL, NULL, &ref, NULL) != noErr) || (FSGetCatalogInfo(&ref, kFSCatInfoContentMod, &fsci, NULL, NULL, NULL) != noErr)) { return(-1); } cnvdatetime(&fsci.contentModDate, dosdate, dostime); return(0); #else (void)handle; (void)dosdate; (void)dostime; return(-1); #endif }
static BRESULT setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && ((!file_cmpname(w32fd->cFileName, ".")) || (!file_cmpname(w32fd->cFileName, "..")))) { return(FAILURE); } fli->caps = FLICAPS_SIZE | FLICAPS_ATTR; fli->size = w32fd->nFileSizeLow; fli->attr = w32fd->dwFileAttributes; if (cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time) == SUCCESS) { fli->caps |= FLICAPS_DATE | FLICAPS_TIME; } #if defined(OSLANG_UTF8) codecnv_sjistoutf8(fli->path, sizeof(fli->path), w32fd->cFileName, (UINT)-1); #else file_cpyname(fli->path, w32fd->cFileName, sizeof(fli->path)); #endif return(SUCCESS); }