diff --git a/libisofs/ecma119.c b/libisofs/ecma119.c index a044fe9..648bd30 100644 --- a/libisofs/ecma119.c +++ b/libisofs/ecma119.c @@ -1682,6 +1682,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) target->rockridge = opts->rockridge; target->joliet = opts->joliet; target->hfsplus = opts->hfsplus; + target->fat = opts->fat; target->iso1999 = opts->iso1999; target->hardlinks = opts->hardlinks; target->aaip = opts->aaip; @@ -1924,7 +1925,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) if (target->joliet) { nwriters++; } - if (target->hfsplus) { + if (target->hfsplus || target->fat) { nwriters+= 2; } if (target->iso1999) { @@ -2007,7 +2008,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) /* create writer for HFS+/FAT structure */ /* Impotant: It must be created directly before iso_file_src_writer_create. */ - if (target->hfsplus) { + if (target->hfsplus || target->fat) { ret = hfsplus_writer_create(target); if (ret < 0) { goto target_cleanup; @@ -2022,7 +2023,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) file_src_writer_index = target->nwriters - 1; /* create writer for HFS+ structure */ - if (target->hfsplus) { + if (target->hfsplus || target->fat) { ret = hfsplus_tail_writer_create(target); if (ret < 0) { goto target_cleanup; @@ -2639,6 +2640,8 @@ int iso_write_opts_new(IsoWriteOpts **opts, int profile) return ISO_ASSERT_FAILURE; break; } + wopts->hfsplus = 0; + wopts->fat = 0; wopts->fifo_size = 1024; /* 2 MB buffer */ wopts->sort_files = 1; /* file sorting is always good */ @@ -2752,6 +2755,15 @@ int iso_write_opts_set_hfsplus(IsoWriteOpts *opts, int enable) return ISO_SUCCESS; } +int iso_write_opts_set_fat(IsoWriteOpts *opts, int enable) +{ + if (opts == NULL) { + return ISO_NULL_POINTER; + } + opts->fat = enable ? 1 : 0; + return ISO_SUCCESS; +} + int iso_write_opts_set_iso1999(IsoWriteOpts *opts, int enable) { if (opts == NULL) { diff --git a/libisofs/ecma119.h b/libisofs/ecma119.h index c4bdd30..f6a4164 100644 --- a/libisofs/ecma119.h +++ b/libisofs/ecma119.h @@ -97,6 +97,7 @@ struct iso_write_opts { unsigned int joliet :1; unsigned int iso1999 :1; unsigned int hfsplus :1; + unsigned int fat :1; unsigned int aaip :1; /* whether to write eventual ACL and EAs */ @@ -489,6 +490,7 @@ struct ecma119_image unsigned int eltorito :1; unsigned int iso1999 :1; unsigned int hfsplus :1; + unsigned int fat :1; unsigned int hardlinks:1; /* see iso_write_opts_set_hardlinks() */ diff --git a/libisofs/libisofs.h b/libisofs/libisofs.h index e085a3f..96fd351 100644 --- a/libisofs/libisofs.h +++ b/libisofs/libisofs.h @@ -1427,6 +1427,24 @@ int iso_write_opts_set_joliet(IsoWriteOpts *opts, int enable); */ int iso_write_opts_set_hfsplus(IsoWriteOpts *opts, int enable); +/** + * Whether to add a FAT32 filesystem to the image which points to the same + * file content as the other directory trees. + * + * >>> FAT32 is planned to get implemented in co-existence with HFS+ + * >>> Describe impact on MBR + * + * @param opts + * The option set to be manipulated. + * @param enable + * 1 to enable FAT32 extension, 0 to not add FAT metadata + * @return + * 1 success, < 0 error + * + * @since 1.2.4 + */ +int iso_write_opts_set_fat(IsoWriteOpts *opts, int enable); + /** * Supply a serial number for the HFS+ extension of the emerging image. * diff --git a/libisofs/libisofs.ver b/libisofs/libisofs.ver index 6f6ac96..9336f11 100644 --- a/libisofs/libisofs.ver +++ b/libisofs/libisofs.ver @@ -285,6 +285,7 @@ iso_write_opts_set_default_timestamp; iso_write_opts_set_default_uid; iso_write_opts_set_dir_rec_mtime; iso_write_opts_set_disc_label; +iso_write_opts_set_fat; iso_write_opts_set_fifo_size; iso_write_opts_set_hardlinks; iso_write_opts_set_hfsp_serial_number;