static void dir_fs ( file_desc_t *fd ) { iso9660_COMMON *common = (iso9660_COMMON *)fd; struct iso_directory_record *idr; char name_buf[256]; if (common->type != DIR) return; forth_printf("\n"); while ( (idr = iso9660_readdir(common->dir)) ) { forth_printf("% 10d ", isonum_733(idr->size)); forth_printf("%d-%02d-%02d %02d:%02d:%02d ", idr->date[0] + 1900, /* year */ idr->date[1], /* month */ idr->date[2], /* day */ idr->date[3], idr->date[4], idr->date[5]); iso9660_name(common->dir->volume, idr, name_buf); if (idr->flags[0] & 2) forth_printf("%s\\\n", name_buf); else forth_printf("%s\n", name_buf); } }
static struct iso_directory_record * seek_name(iso9660_VOLUME *volume, struct iso_directory_record *idr, char *name) { struct iso_directory_record *result; char name_buf[256]; iso9660_DIR *dir; dir = iso9660_opendir_node(volume, idr); if (dir == NULL) return NULL; while ((idr = iso9660_readdir(dir)) != NULL) { iso9660_name(volume, idr, name_buf); if (strcasecmp(name, name_buf) == 0) { result = idr_new(idr); iso9660_closedir(dir); return result; } } iso9660_closedir(dir); return NULL; }
static iso9660_stat_t * find_lsn_recurse (void *p_image, iso9660_readdir_t iso9660_readdir, const char psz_path[], lsn_t lsn, /*out*/ char **ppsz_full_filename) { CdioList_t *entlist = iso9660_readdir (p_image, psz_path); CdioList_t *dirlist = _cdio_list_new (); CdioListNode_t *entnode; cdio_assert (entlist != NULL); /* iterate over each entry in the directory */ _CDIO_LIST_FOREACH (entnode, entlist) { iso9660_stat_t *statbuf = _cdio_list_node_data (entnode); const char *psz_filename = (char *) statbuf->filename; const unsigned int len = strlen(psz_path) + strlen(psz_filename)+2; if (*ppsz_full_filename != NULL) free(*ppsz_full_filename); *ppsz_full_filename = calloc(1, len); snprintf (*ppsz_full_filename, len, "%s%s/", psz_path, psz_filename); if (statbuf->type == _STAT_DIR && strcmp ((char *) statbuf->filename, ".") && strcmp ((char *) statbuf->filename, "..")) { _cdio_list_append (dirlist, strdup(*ppsz_full_filename)); } if (statbuf->lsn == lsn) { unsigned int len=sizeof(iso9660_stat_t)+strlen(statbuf->filename)+1; iso9660_stat_t *ret_stat = calloc(1, len); if (!ret_stat) { cdio_warn("Couldn't calloc(1, %d)", len); return NULL; } memcpy(ret_stat, statbuf, len); _cdio_list_free (entlist, true); _cdio_list_free (dirlist, true); return ret_stat; } }