Make iso_read_image_features private. Add getters for its properties.

This commit is contained in:
Vreixo Formoso 2008-02-02 16:05:03 +01:00
parent e6deb92553
commit e88b361b5f
3 changed files with 138 additions and 35 deletions

View File

@ -32,7 +32,7 @@ int main(int argc, char **argv)
unsigned char buf[32 * 2048]; unsigned char buf[32 * 2048];
IsoWriteOpts *opts; IsoWriteOpts *opts;
int ret = 0; int ret = 0;
struct iso_read_image_features *features; IsoReadImageFeatures *features;
uint32_t ms_block; uint32_t ms_block;
IsoReadOpts *ropts; IsoReadOpts *ropts;
@ -126,12 +126,12 @@ int main(int argc, char **argv)
} }
/* round up to 32kb aligment = 16 block */ /* round up to 32kb aligment = 16 block */
ms_block = ((features->size + 15) / 16 ) * 16; ms_block = ((iso_read_image_features_get_size(features) + 15) / 16 ) * 16;
iso_write_opts_set_ms_block(opts, ms_block); iso_write_opts_set_ms_block(opts, ms_block);
iso_write_opts_set_appendable(opts, 1); iso_write_opts_set_appendable(opts, 1);
iso_write_opts_set_overwrite_buf(opts, buf); iso_write_opts_set_overwrite_buf(opts, buf);
free(features); iso_read_image_features_destroy(features);
result = iso_image_create_burn_source(image, opts, &burn_src); result = iso_image_create_burn_source(image, opts, &burn_src);
if (result < 0) { if (result < 0) {

View File

@ -76,6 +76,35 @@ struct iso_read_opts
char *input_charset; char *input_charset;
}; };
/**
* Return information for image.
* Both size, hasRR and hasJoliet will be filled by libisofs with suitable
* values.
*/
struct iso_read_image_features
{
/**
* Will be filled with the size (in 2048 byte block) of the image, as
* reported in the PVM.
*/
uint32_t size;
/** It will be set to 1 if RR extensions are present, to 0 if not. */
unsigned int hasRR :1;
/** It will be set to 1 if Joliet extensions are present, to 0 if not. */
unsigned int hasJoliet :1;
/**
* It will be set to 1 if the image is an ISO 9660:1999, i.e. it has
* a version 2 Enhanced Volume Descriptor.
*/
unsigned int hasIso1999 :1;
/** It will be set to 1 if El-Torito boot record is present, to 0 if not.*/
unsigned int hasElTorito :1;
};
static int ifs_fs_open(IsoImageFilesystem *fs); static int ifs_fs_open(IsoImageFilesystem *fs);
static int ifs_fs_close(IsoImageFilesystem *fs); static int ifs_fs_close(IsoImageFilesystem *fs);
static int iso_file_source_new_ifs(IsoImageFilesystem *fs, static int iso_file_source_new_ifs(IsoImageFilesystem *fs,
@ -2203,7 +2232,7 @@ boot_fs_cleanup: ;
int iso_image_import(IsoImage *image, IsoDataSource *src, int iso_image_import(IsoImage *image, IsoDataSource *src,
struct iso_read_opts *opts, struct iso_read_opts *opts,
struct iso_read_image_features **features) IsoReadImageFeatures **features)
{ {
int ret; int ret;
IsoImageFilesystem *fs; IsoImageFilesystem *fs;
@ -2347,7 +2376,7 @@ int iso_image_import(IsoImage *image, IsoDataSource *src,
iso_image_set_biblio_file_id(image, data->biblio_file_id); iso_image_set_biblio_file_id(image, data->biblio_file_id);
if (features != NULL) { if (features != NULL) {
*features = malloc(sizeof(struct iso_read_image_features)); *features = malloc(sizeof(IsoReadImageFeatures));
if (*features == NULL) { if (*features == NULL) {
ret = ISO_OUT_OF_MEM; ret = ISO_OUT_OF_MEM;
goto import_cleanup; goto import_cleanup;
@ -2552,3 +2581,54 @@ int iso_read_opts_set_input_charset(IsoReadOpts *opts, const char *charset)
opts->input_charset = charset ? strdup(charset) : NULL; opts->input_charset = charset ? strdup(charset) : NULL;
return ISO_SUCCESS; return ISO_SUCCESS;
} }
/**
* Destroy an IsoReadImageFeatures object obtained with iso_image_import.
*/
void iso_read_image_features_destroy(IsoReadImageFeatures *f)
{
if (f) {
free(f);
}
}
/**
* Get the size (in 2048 byte block) of the image, as reported in the PVM.
*/
uint32_t iso_read_image_features_get_size(IsoReadImageFeatures *f)
{
return f->size;
}
/**
* Whether RockRidge extensions are present in the image imported.
*/
int iso_read_image_features_has_rockridge(IsoReadImageFeatures *f)
{
return f->hasRR;
}
/**
* Whether Joliet extensions are present in the image imported.
*/
int iso_read_image_features_has_joliet(IsoReadImageFeatures *f)
{
return f->hasJoliet;
}
/**
* Whether the image is recorded according to ISO 9660:1999, i.e. it has
* a version 2 Enhanced Volume Descriptor.
*/
int iso_read_image_features_has_iso1999(IsoReadImageFeatures *f)
{
return f->hasIso1999;
}
/**
* Whether El-Torito boot record is present present in the image imported.
*/
int iso_read_image_features_has_eltorito(IsoReadImageFeatures *f)
{
return f->hasElTorito;
}

View File

@ -284,35 +284,14 @@ struct iso_data_source
}; };
/** /**
* Return information for image. * Return information for image. This is optionally allocated by libisofs,
* Both size, hasRR and hasJoliet will be filled by libisofs with suitable * as a way to inform user about the features of an existing image, such as
* values. * extensions present, size, ...
* *
* @see iso_image_import()
* @since 0.6.2 * @since 0.6.2
*/ */
struct iso_read_image_features typedef struct iso_read_image_features IsoReadImageFeatures;
{
/**
* Will be filled with the size (in 2048 byte block) of the image, as
* reported in the PVM.
*/
uint32_t size;
/** It will be set to 1 if RR extensions are present, to 0 if not. */
unsigned int hasRR :1;
/** It will be set to 1 if Joliet extensions are present, to 0 if not. */
unsigned int hasJoliet :1;
/**
* It will be set to 1 if the image is an ISO 9660:1999, i.e. it has
* a version 2 Enhanced Volume Descriptor.
*/
unsigned int hasIso1999 :1;
/** It will be set to 1 if El-Torito boot record is present, to 0 if not.*/
unsigned int hasElTorito :1;
};
/** /**
* POSIX abstraction for source files. * POSIX abstraction for source files.
@ -1286,16 +1265,60 @@ int iso_read_opts_set_input_charset(IsoReadOpts *opts, const char *charset);
* Options for image import. All needed data will be copied, so you * Options for image import. All needed data will be copied, so you
* can free the given struct once this function returns. * can free the given struct once this function returns.
* @param features * @param features
* If not NULL, a new struct iso_read_image_features will be allocated * If not NULL, a new IsoReadImageFeatures will be allocated and filled
* and filled with the features of the old image. It should be freed when * with the features of the old image. It should be freed with
* no more needed. You can pass NULL if you're not interested on them. * iso_read_image_features_destroy() when no more needed. You can pass
* NULL if you're not interested on them.
* @return * @return
* 1 on success, < 0 on error * 1 on success, < 0 on error
* *
* @since 0.6.2 * @since 0.6.2
*/ */
int iso_image_import(IsoImage *image, IsoDataSource *src, IsoReadOpts *opts, int iso_image_import(IsoImage *image, IsoDataSource *src, IsoReadOpts *opts,
struct iso_read_image_features **features); IsoReadImageFeatures **features);
/**
* Destroy an IsoReadImageFeatures object obtained with iso_image_import.
*
* @since 0.6.2
*/
void iso_read_image_features_destroy(IsoReadImageFeatures *f);
/**
* Get the size (in 2048 byte block) of the image, as reported in the PVM.
*
* @since 0.6.2
*/
uint32_t iso_read_image_features_get_size(IsoReadImageFeatures *f);
/**
* Whether RockRidge extensions are present in the image imported.
*
* @since 0.6.2
*/
int iso_read_image_features_has_rockridge(IsoReadImageFeatures *f);
/**
* Whether Joliet extensions are present in the image imported.
*
* @since 0.6.2
*/
int iso_read_image_features_has_joliet(IsoReadImageFeatures *f);
/**
* Whether the image is recorded according to ISO 9660:1999, i.e. it has
* a version 2 Enhanced Volume Descriptor.
*
* @since 0.6.2
*/
int iso_read_image_features_has_iso1999(IsoReadImageFeatures *f);
/**
* Whether El-Torito boot record is present present in the image imported.
*
* @since 0.6.2
*/
int iso_read_image_features_has_eltorito(IsoReadImageFeatures *f);
/** /**
* Increments the reference counting of the given image. * Increments the reference counting of the given image.