From cd8943105ca1a863b42041662b747e433ec30d3c Mon Sep 17 00:00:00 2001 From: Vreixo Formoso Date: Fri, 11 Jan 2008 16:19:50 +0100 Subject: [PATCH] Functions to access volume information from an IsoImageFilesystem. --- demo/iso_read.c | 15 +++++++++ src/fs_image.c | 83 ++++++++++++++++++++++++++++++++++++++++++------- src/fs_image.h | 18 +++++++++++ 3 files changed, 105 insertions(+), 11 deletions(-) diff --git a/demo/iso_read.c b/demo/iso_read.c index bbc63c7..95844eb 100644 --- a/demo/iso_read.c +++ b/demo/iso_read.c @@ -147,7 +147,22 @@ int main(int argc, char **argv) printf ("Error creating filesystem\n"); return 1; } + + printf("\nVOLUME INFORMATION\n"); + printf("==================\n\n"); + + printf("Vol. id: %s\n", iso_image_fs_get_volume_id(fs)); + printf("Publisher: %s\n", iso_image_fs_get_publisher_id(fs)); + printf("Data preparer: %s\n", iso_image_fs_get_data_preparer_id(fs)); + printf("System: %s\n", iso_image_fs_get_system_id(fs)); + printf("Application: %s\n", iso_image_fs_get_application_id(fs)); + printf("Copyright: %s\n", iso_image_fs_get_copyright_file_id(fs)); + printf("Abstract: %s\n", iso_image_fs_get_abstract_file_id(fs)); + printf("Biblio: %s\n", iso_image_fs_get_biblio_file_id(fs)); + printf("\nDIRECTORY TREE\n"); + printf("==============\n"); + result = fs->fs.get_root((IsoFilesystem*)fs, &root); if (result < 0) { printf ("Can't get root %d\n", result); diff --git a/src/fs_image.c b/src/fs_image.c index 7b82799..9d0b2a8 100644 --- a/src/fs_image.c +++ b/src/fs_image.c @@ -1786,18 +1786,8 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, case S_IFREG: { /* source is a regular file */ - IsoStream *stream; - IsoFile *file; _ImageFsData *fsdata = data->fs->fs.data; - result = iso_file_source_stream_new(src, &stream); - if (result < 0) { - free(name); - return result; - } - /* take a ref to the src, as stream has taken our ref */ - iso_file_source_ref(src); - if (fsdata->eltorito && data->block == fsdata->catblock) { if (image->bootcat->node != NULL) { @@ -1819,8 +1809,19 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, /* and set the image node */ image->bootcat->node = (IsoBoot*)new; - new->refcount++; + new->type = LIBISO_BOOT; + new->refcount = 1; } else { + IsoStream *stream; + IsoFile *file; + + result = iso_file_source_stream_new(src, &stream); + if (result < 0) { + free(name); + return result; + } + /* take a ref to the src, as stream has taken our ref */ + iso_file_source_ref(src); file = calloc(1, sizeof(IsoFile)); if (file == NULL) { @@ -1841,6 +1842,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, file->stream = stream; file->node.type = LIBISO_FILE; new = (IsoNode*) file; + new->refcount = 0; if (fsdata->eltorito && data->block == fsdata->imgblock) { /* it is boot image node */ @@ -1865,6 +1867,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, return ISO_MEM_ERROR; } new->type = LIBISO_DIR; + new->refcount = 0; } break; case S_IFLNK: @@ -1886,6 +1889,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, link->dest = strdup(dest); link->node.type = LIBISO_SYMLINK; new = (IsoNode*) link; + new->refcount = 0; } break; case S_IFSOCK: @@ -1903,6 +1907,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, special->dev = info.st_rdev; special->node.type = LIBISO_SPECIAL; new = (IsoNode*) special; + new->refcount = 0; } break; } @@ -1930,6 +1935,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image, * Create a new builder, that is exactly a copy of an old builder, but where * create_node() function has been replaced by image_builder_create_node. */ +static int iso_image_builder_new(IsoNodeBuilder *old, IsoNodeBuilder **builder) { IsoNodeBuilder *b; @@ -2200,3 +2206,58 @@ int iso_image_import(IsoImage *image, IsoDataSource *src, return ret; } + +const char *iso_image_fs_get_volset_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->volset_id; +} + +const char *iso_image_fs_get_volume_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->volume_id; +} + +const char *iso_image_fs_get_publisher_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->publisher_id; +} + +const char *iso_image_fs_get_data_preparer_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->data_preparer_id; +} + +const char *iso_image_fs_get_system_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->system_id; +} + +const char *iso_image_fs_get_application_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->application_id; +} + +const char *iso_image_fs_get_copyright_file_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->copyright_file_id; +} + +const char *iso_image_fs_get_abstract_file_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data; + data = (_ImageFsData*) fs->fs.data; + return data->abstract_file_id; +} + +const char *iso_image_fs_get_biblio_file_id(IsoImageFilesystem *fs) +{ + _ImageFsData *data = (_ImageFsData*) fs->fs.data; + return data->biblio_file_id; +} diff --git a/src/fs_image.h b/src/fs_image.h index cb5a49b..b083d93 100644 --- a/src/fs_image.h +++ b/src/fs_image.h @@ -47,4 +47,22 @@ int iso_image_filesystem_new(IsoDataSource *src, struct iso_read_opts *opts, struct libiso_msgs *messenger, IsoImageFilesystem **fs); +const char *iso_image_fs_get_volset_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_volume_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_publisher_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_data_preparer_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_system_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_application_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_copyright_file_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_abstract_file_id(IsoImageFilesystem *fs); + +const char *iso_image_fs_get_biblio_file_id(IsoImageFilesystem *fs); + #endif /*LIBISO_FS_IMAGE_H_*/