BRESULT file_listnext(FLISTH hdl, FLINFO *fli) { struct dirent *de; struct stat sb; de = readdir((DIR *)hdl); if (de == NULL) { return(FAILURE); } if (fli) { memset(fli, 0, sizeof(*fli)); fli->caps = FLICAPS_ATTR; fli->attr = (de->d_type & DT_DIR) ? FILEATTR_DIRECTORY : 0; if (stat(de->d_name, &sb) == 0) { fli->caps |= FLICAPS_SIZE; fli->size = (UINT)sb.st_size; if (!(sb.st_mode & S_IWUSR)) { fli->attr |= FILEATTR_READONLY; } if (cnv_sttime(&sb.st_mtime, &fli->date, &fli->time) == SUCCESS) { fli->caps |= FLICAPS_DATE | FLICAPS_TIME; } } milstr_ncpy(fli->path, de->d_name, sizeof(fli->path)); } return(SUCCESS); }
BOOL file_listnext(FLISTH hdl, FLINFO *fli) { struct dirent *de; struct stat sb; UINT32 attr; de = readdir((DIR *)hdl); if (de == NULL) { return(FAILURE); } if (fli) { if (stat(de->d_name, &sb) == 0) { fli->caps = FLICAPS_SIZE | FLICAPS_ATTR; fli->size = sb.st_size; attr = 0; if (S_ISDIR(sb.st_mode)) { attr = FILEATTR_DIRECTORY; } else if (!(sb.st_mode & S_IWUSR)) { attr = FILEATTR_READONLY; } fli->attr = attr; if (cnv_sttime(&sb.st_mtime, &fli->date, &fli->time) == SUCCESS) { fli->caps |= FLICAPS_DATE | FLICAPS_TIME; } } else { fli->caps = 0; fli->size = 0; fli->attr = 0; } milstr_ncpy(fli->path, de->d_name, sizeof(fli->path)); } return(SUCCESS); }
short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) { struct stat sb; if (fstat(fileno(handle), &sb) == 0) { if (cnv_sttime(&sb.st_mtime, dosdate, dostime) == SUCCESS) { return(0); } } return(-1); }