New API calls isoburn_igopt_set_rr_reloc(), isoburn_igopt_get_rr_reloc()

This commit is contained in:
Thomas Schmitt 2012-03-10 14:51:04 +00:00
parent 1cd812e25a
commit 5d00144aa6
5 changed files with 95 additions and 2 deletions

View File

@ -481,6 +481,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_allow_dir_id_ext(wopts, opts->allow_dir_id_ext);
iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers);
iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths);
iso_write_opts_set_rr_reloc(wopts, opts->rr_reloc_dir, opts->rr_reloc_flags);
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
iso_write_opts_set_max_37_char_filenames(wopts, opts->max_37_char_filenames);
iso_write_opts_set_no_force_dots(wopts, opts->no_force_dots);
@ -974,6 +975,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->allow_dir_id_ext = 0;
o->omit_version_numbers= 0;
o->allow_deep_paths= 1;
o->rr_reloc_dir= NULL;
o->rr_reloc_flags= 0;
o->allow_longer_paths= 0;
o->max_37_char_filenames= 0;
o->no_force_dots= 0;
@ -1023,6 +1026,8 @@ int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag)
if(*o==NULL)
return(0);
if((*o)->rr_reloc_dir != NULL)
free((*o)->rr_reloc_dir);
for(i= 0; i < Libisoburn_max_appended_partitionS; i++)
if((*o)->appended_partitions[i] != NULL)
free((*o)->appended_partitions[i]);
@ -1114,6 +1119,38 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
return(1);
}
int isoburn_igopt_set_rr_reloc(struct isoburn_imgen_opts *o, char *name,
int flags)
{
if(o->rr_reloc_dir != name) {
if(o->rr_reloc_dir != NULL)
free(o->rr_reloc_dir);
o->rr_reloc_dir= NULL;
if(name != NULL) {
o->rr_reloc_dir= strdup(name);
if(o->rr_reloc_dir == NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", 0);
return(-1);
}
}
}
o->rr_reloc_flags = flags & 1;
return 1;
}
int isoburn_igopt_get_rr_reloc(struct isoburn_imgen_opts *o, char **name,
int *flags)
{
*name= o->rr_reloc_dir;
*flags= o->rr_reloc_flags;
return(1);
}
int isoburn_igopt_set_untranslated_name_len(struct isoburn_imgen_opts *o,
int len)
{

View File

@ -443,6 +443,21 @@ struct isoburn_imgen_opts {
*/
unsigned int allow_deep_paths :1;
/**
* If not allow_deep_paths is in effect, then it may become
* necessary to relocate directories so that no ECMA-119 file path
* has more than 8 components. These directories are grafted into either
* the root directory of the ISO image or into a dedicated relocation
* directory. For details see libisofs.h, iso_write_opts_set_rr_reloc().
*/
char *rr_reloc_dir; /* IsoNode name in root directory. NULL or
empty text means root itself. */
int rr_reloc_flags; /* bit0= mark auto-created rr_reloc_dir by RE
bit1= not settable via API (used internally)
*/
/**
* Allow path in the ISO-9660 tree to have more than 255 characters.
*/

View File

@ -242,7 +242,7 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libisofs_req_major 1
#define isoburn_libisofs_req_minor 2
#define isoburn_libisofs_req_micro 0
#define isoburn_libisofs_req_micro 1
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@ -1187,6 +1187,45 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
/** If not isoburn_igopt_allow_deep_paths is in effect, then it may become
necessary to relocate directories so that no ECMA-119 file path
has more than 8 components. These directories are grafted into either
the root directory of the ISO image or into a dedicated relocation
directory. For details see libisofs.h.
Wrapper for: iso_write_opts_set_rr_reloc()
@since 1.2.2
@param o The option set to work on
@param name The name of the relocation directory in the root directory.
Do not prepend "/". An empty name or NULL will direct
relocated directories into the root directory. This is the
default.
If the given name does not exist in the root directory when
isoburn_disc_write() is called, and if there are directories
at path level 8, then directory /name will be created
automatically.
@param flags Bitfield for control purposes.
bit0= Mark the relocation directory by a Rock Ridge RE entry,
if it gets created during isoburn_disc_write(). This
will make it invisible for most Rock Ridge readers.
bit1= not settable via API (used internally)
@return > 0 success, <= 0 failure
*/
int isoburn_igopt_set_rr_reloc(struct isoburn_imgen_opts *o, char *name,
int flags);
/** Obtain the settings of isoburn_igopt_set_rr_reloc().
@since 1.2.2
@param o The option set to work on
@param name Will return NULL or a pointer to the name of the relocation
directory in the root directory. Do not alter or dispose the
memory which holds this name.
@param flags Will return the flags bitfield.
@return > 0 success, <= 0 failure
*/
int isoburn_igopt_get_rr_reloc(struct isoburn_imgen_opts *o, char **name,
int *flags);
/** Caution: This option breaks any assumptions about names that
are supported by ECMA-119 specifications.
Try to omit any translation which would make a file name compliant to the

View File

@ -38,6 +38,7 @@ isoburn_igopt_get_over_ugid;
isoburn_igopt_get_partition_img;
isoburn_igopt_get_pvd_times;
isoburn_igopt_get_relaxed;
isoburn_igopt_get_rr_reloc;
isoburn_igopt_get_scdbackup_tag;
isoburn_igopt_get_sort_files;
isoburn_igopt_get_system_area;
@ -54,6 +55,7 @@ isoburn_igopt_set_over_ugid;
isoburn_igopt_set_partition_img;
isoburn_igopt_set_pvd_times;
isoburn_igopt_set_relaxed;
isoburn_igopt_set_rr_reloc;
isoburn_igopt_set_scdbackup_tag;
isoburn_igopt_set_sort_files;
isoburn_igopt_set_system_area;

View File

@ -1 +1 @@
#define Xorriso_timestamP "2012.03.10.112727"
#define Xorriso_timestamP "2012.03.10.145124"