xorriso  1.5.4.pl02
About: GNU xorriso creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions. It is suitable for incremental data backup and for production of bootable ISO 9660 images. GNU xorriso is a statical compilation of the libraries libburn, libisofs, libisoburn, and libjte.
  Fossies Dox: xorriso-1.5.4.pl02.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

ecma119.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007 Vreixo Formoso
3  * Copyright (c) 2009 - 2019 Thomas Schmitt
4  *
5  * This file is part of the libisofs project; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License version 2
7  * or later as published by the Free Software Foundation.
8  * See COPYING file for details.
9  */
10 
11 #ifndef LIBISO_ECMA119_H_
12 #define LIBISO_ECMA119_H_
13 
14 #include "libisofs.h"
15 #include "util.h"
16 #include "buffer.h"
17 
18 #ifdef HAVE_STDINT_H
19 #include <stdint.h>
20 #else
21 #ifdef HAVE_INTTYPES_H
22 #include <inttypes.h>
23 #endif
24 #endif
25 
26 #include <pthread.h>
27 
28 #define BLOCK_SIZE 2048
29 
30 /*
31  * Maximum file section size. Set to 4GB - 1 = 0xffffffff
32  */
33 #define MAX_ISO_FILE_SECTION_SIZE 0xffffffff
34 
35 /*
36  * When a file need to be split in several sections, the maximum size
37  * of such sections, but the last one. Set to a multiple of BLOCK_SIZE.
38  * Default to 4GB - 2048 = 0xFFFFF800
39  */
40 #define ISO_EXTENT_SIZE 0xFFFFF800
41 
42 /*
43  * The maximum number of partition images that can be registered. Depending
44  * on the system area type, the effectively usable number may be smaller or
45  * even 0.
46  */
47 #define ISO_MAX_PARTITIONS 8
48 
49 /*
50  * The cylindersize with SUN Disk Label
51  * (512 bytes/sector, 640 sectors/head, 1 head/cyl = 320 KiB).
52  * Expressed in ECMA-119 blocks of 2048 bytes/block.
53  */
54 #define ISO_SUN_CYL_SIZE 160
55 
56 /*
57  * Maximum length of a disc label text plus 1.
58  */
59 #define ISO_DISC_LABEL_SIZE 129
60 
61 
62 /* The maximum length of an specs violating ECMA-119 file identifier.
63  The theoretical limit is 254 - 34 - 28 (len of SUSP CE entry) = 192
64  Currently the practical limit is 254 - 34 - 96 (non-CE RR entries) - 28 (CE)
65 */
66 #ifdef Libisofs_with_rrip_rR
67 #define ISO_UNTRANSLATED_NAMES_MAX 92
68 #else
69 #define ISO_UNTRANSLATED_NAMES_MAX 96
70 #endif
71 
72 
73 /* The theoretical maximum number of Apple Partition Map entries in the
74  System Area of an ISO image:
75  Block0 plus 63 entries with block size 512
76 */
77 #define ISO_APM_ENTRIES_MAX 63
78 
79 /* The maximum number of MBR partition table entries.
80 */
81 #define ISO_MBR_ENTRIES_MAX 4
82 
83 /* The theoretical maximum number of GPT entries in the System Area of an
84  ISO image:
85  MBR plus GPT header block plus 248 GPT entries of 128 bytes each.
86 */
87 #define ISO_GPT_ENTRIES_MAX 248
88 
89 
90 /* How many warnings to issue about writing Joliet names which cannot be
91  properly represented in UCS-2 and thus had to be defaulted to '_'.
92 */
93 #define ISO_JOLIET_UCS2_WARN_MAX 3
94 
95 
96 /**
97  * Holds the options for the image generation.
98  */
100 
102 
103  int iso_level; /**< ISO level to write at. (ECMA-119, 10) */
104 
105  /** Which extensions to support. */
106  unsigned int rockridge :1;
107  unsigned int joliet :1;
108  unsigned int iso1999 :1;
109  unsigned int hfsplus :1;
110  unsigned int fat :1;
111 
112  unsigned int aaip :1; /* whether to write eventual ACL and EAs */
113 
114  /* always write timestamps in GMT */
115  unsigned int always_gmt :1;
116 
117  /*
118  * Relaxed constraints. Setting any of these to 1 break the specifications,
119  * but it is supposed to work on most moderns systems. Use with caution.
120  */
121 
122  /**
123  * Convert directory names for ECMA-119 the same way as other file names
124  * but do not force dots or add version numbers.
125  * This violates ECMA-119 by allowing one "." and especially ISO level 1
126  * by allowing DOS style 8.3 names rather than only 8 characters.
127  */
128  unsigned int allow_dir_id_ext :1;
129 
130  /**
131  * Omit the version number (";1") at the end of the ISO-9660 identifiers.
132  * Version numbers are usually not used.
133  * bit0= ECMA-119 and Joliet (for historical reasons)
134  * bit1= Joliet
135  */
136  unsigned int omit_version_numbers :2;
137 
138  /**
139  * Allow ISO-9660 directory hierarchy to be deeper than 8 levels.
140  */
141  unsigned int allow_deep_paths :1;
142 
143  /**
144  * Allow path in the ISO-9660 tree to have more than 255 characters.
145  */
146  unsigned int allow_longer_paths :1;
147 
148  /**
149  * Allow a single file or directory hierarchy to have up to 37 characters.
150  * This is larger than the 31 characters allowed by ISO level 2, and the
151  * extra space is taken from the version number, so this also forces
152  * omit_version_numbers.
153  */
154  unsigned int max_37_char_filenames :1;
155 
156  /**
157  * ISO-9660 forces filenames to have a ".", that separates file name from
158  * extension. libisofs adds it if original filename doesn't has one. Set
159  * this to 1 to prevent this behavior
160  * bit0= ECMA-119
161  * bit1= Joliet
162  */
163  unsigned int no_force_dots :2;
164 
165  /**
166  * Allow lowercase characters in ISO-9660 filenames. By default, only
167  * uppercase characters, numbers and a few other characters are allowed.
168  */
169  unsigned int allow_lowercase :1;
170 
171  /**
172  * Allow all ASCII characters to be appear on an ISO-9660 filename. Note
173  * that "/" and "\0" characters are never allowed, even in RR names.
174  */
175  unsigned int allow_full_ascii :1;
176 
177  /**
178  * If not allow_full_ascii is set: allow all 7 bit characters that would
179  * be allowed by allow_full_ascii. But still map lowercase to uppercase if
180  * not allow_lowercase is set to 1.
181  */
182  unsigned int allow_7bit_ascii :1;
183 
184  /**
185  * Allow all characters to be part of Volume and Volset identifiers on
186  * the Primary Volume Descriptor. This breaks ISO-9660 constraints, but
187  * should work on modern systems.
188  */
189  unsigned int relaxed_vol_atts :1;
190 
191  /**
192  * Allow paths in the Joliet tree to have more than 240 characters.
193  */
194  unsigned int joliet_longer_paths :1;
195 
196  /**
197  * Allow Joliet names up to 103 characters rather than 64.
198  */
199  unsigned int joliet_long_names :1;
200 
201  /**
202  * Use UTF-16BE rather than its subset UCS-2
203  */
204  unsigned int joliet_utf16 :1;
205 
206  /**
207  * Write Rock Ridge info as of specification RRIP-1.10 rather than
208  * RRIP-1.12: signature "RRIP_1991A" rather than "IEEE_1282",
209  * field PX without file serial number
210  */
211  unsigned int rrip_version_1_10 :1;
212 
213  /**
214  * Write field PX with file serial number even with RRIP-1.10
215  */
216  unsigned int rrip_1_10_px_ino :1;
217 
218  /**
219  * See iso_write_opts_set_hardlinks()
220  */
221  unsigned int hardlinks:1;
222 
223  /**
224  * Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12.
225  * I.e. without announcing it by an ER field and thus without the need
226  * to precede the RRIP fields by an ES and to precede the AA field by ES.
227  * This saves bytes and might avoid problems with readers which dislike
228  * ER fields other than the ones for RRIP.
229  * On the other hand, SUSP 1.12 frowns on such unannounced extensions
230  * and prescribes ER and ES. It does this since year 1994.
231  *
232  * In effect only if above flag .aaip is set to 1.
233  */
234  unsigned int aaip_susp_1_10 :1;
235 
236  /**
237  * Store as ECMA-119 Directory Record timestamp the mtime of the source
238  * rather than the image creation time. (The ECMA-119 prescription seems
239  * to expect that we do have a creation timestamp with the source.
240  * mkisofs writes mtimes and the result seems more suitable if mounted
241  * without Rock Ridge support.)
242  * bit0= ECMA-119, bit1= Joliet, bit2= ISO 9660:1999
243  */
244  unsigned int dir_rec_mtime :3;
245 
246  /**
247  * This describes the directory where to store Rock Ridge relocated
248  * directories.
249  * If not relaxation "allow_deep_paths" is in effect, it is necessary to
250  * relocate directories so that no ECMA-119 file path has more than
251  * 8 components. For Rock Ridge the relocated directories are linked forth
252  * and back to a placeholder at their original position in path level 8
253  * (entries CL and PL). Directories marked by entry RE are to be considered
254  * artefacts of relocation and shall not be read into a Rock Ridge tree.
255  * For plain ECMA-119, the relocation directory is just a normal directory
256  * which contains normal files and directories.
257  */
258  char *rr_reloc_dir; /* IsoNode name in root directory */
259  int rr_reloc_flags; /* bit0= mark auto-created rr_reloc_dir by RE
260  bit1= directory was auto-created
261  (cannot be set via API)
262  */
263 
264  /**
265  * Compute MD5 checksum for the whole session and record it as index 0 of
266  * the checksum blocks after the data area of the session. The layout and
267  * position of these blocks will be recorded in xattr "isofs.ca" of the
268  * root node. See see also API call iso_image_get_session_md5().
269  */
270  unsigned int md5_session_checksum :1;
271 
272  /**
273  * Compute MD5 checksums for IsoFile objects and write them to blocks
274  * after the data area of the session. The layout and position of these
275  * blocks will be recorded in xattr "isofs.ca" of the root node.
276  * The indice of the MD5 sums will be recorded with the IsoFile directory
277  * entries as xattr "isofs.cx". See also API call iso_file_get_md5().
278  * bit0= compute individual checksums
279  * bit1= pre-compute checksum and compare it with actual one.
280  * Raise MISHAP if mismatch.
281  */
282  unsigned int md5_file_checksums :2;
283 
284  /** If files should be sorted based on their weight. */
285  unsigned int sort_files :1;
286 
287  /**
288  * The following options set the default values for files and directory
289  * permissions, gid and uid. All these take one of three values: 0, 1 or 2.
290  * If 0, the corresponding attribute will be kept as set in the IsoNode.
291  * Unless you have changed it, it corresponds to the value on disc, so it
292  * is suitable for backup purposes. If set to 1, the corresponding attrib.
293  * will be changed by a default suitable value. Finally, if you set it to
294  * 2, the attrib. will be changed with the value specified in the options
295  * below. Note that for mode attributes, only the permissions are set, the
296  * file type remains unchanged.
297  */
298  unsigned int replace_dir_mode :2;
299  unsigned int replace_file_mode :2;
300  unsigned int replace_uid :2;
301  unsigned int replace_gid :2;
302 
303  mode_t dir_mode; /** Mode to use on dirs when replace_dir_mode == 2. */
304  mode_t file_mode; /** Mode to use on files when replace_file_mode == 2. */
305  uid_t uid; /** uid to use when replace_uid == 2. */
306  gid_t gid; /** gid to use when replace_gid == 2. */
307 
308  /**
309  * See API call iso_write_opts_set_old_empty().
310  */
311  unsigned int old_empty :1;
312 
313  /**
314  * Extra Caution: This option breaks any assumptions about names that
315  * are supported by ECMA-119 specifications.
316  * Omit any translation which would make a file name compliant to the
317  * ECMA-119 rules. This includes and exceeds omit_version_numbers,
318  * max_37_char_filenames, no_force_dots bit0, allow_lowercase.
319  * The maximum name length is given by this variable.
320  * There is a length limit of ISO_UNTRANSLATED_NAMES_MAX characters,
321  * because ECMA-119 allows 254 byte in a directory record, some
322  * of them are occupied by ECMA-119, some more are needed for SUSP CE,
323  * and some are fixely occupied by libisofs Rock Ridge code.
324  * The default value 0 disables this feature.
325  */
326  unsigned int untranslated_name_len;
327 
328  /**
329  * 0 to use IsoNode timestamps, 1 to use recording time, 2 to use
330  * values from timestamp field. This has only meaning if RR extensions
331  * are enabled.
332  */
333  unsigned int replace_timestamps :2;
334  time_t timestamp;
335 
336  /**
337  * Charset for the RR filenames that will be created.
338  * NULL to use default charset, the locale one.
339  */
341 
342  /**
343  * This flags control the type of the image to create. Libisofs support
344  * two kind of images: stand-alone and appendable.
345  *
346  * A stand-alone image is an image that is valid alone, and that can be
347  * mounted by its own. This is the kind of image you will want to create
348  * in most cases. A stand-alone image can be burned in an empty CD or DVD,
349  * or write to an .iso file for future burning or distribution.
350  *
351  * On the other side, an appendable image is not self contained, it refers
352  * to several files that are stored outside the image. Its usage is for
353  * multisession discs, where you add data in a new session, while the
354  * previous session data can still be accessed. In those cases, the old
355  * data is not written again. Instead, the new image refers to it, and thus
356  * it's only valid when appended to the original. Note that in those cases
357  * the image will be written after the original, and thus you will want
358  * to use a ms_block greater than 0.
359  *
360  * Note that if you haven't import a previous image (by means of
361  * iso_image_import()), the image will always be a stand-alone image, as
362  * there is no previous data to refer to.
363  */
364  unsigned int appendable : 1;
365 
366  /**
367  * Start block of the image. It is supposed to be the lba where the first
368  * block of the image will be written on disc. All references inside the
369  * ISO image will take this into account, thus providing a mountable image.
370  *
371  * For appendable images, that are written to a new session, you should
372  * pass here the lba of the next writable address on disc.
373  *
374  * In stand alone images this is usually 0. However, you may want to
375  * provide a different ms_block if you don't plan to burn the image in the
376  * first session on disc, such as in some CD-Extra disc whether the data
377  * image is written in a new session after some audio tracks.
378  */
379  uint32_t ms_block;
380 
381  /**
382  * When not NULL, it should point to a buffer of at least 64KiB, where
383  * libisofs will write the contents that should be written at the beginning
384  * of a overwritable media, to grow the image. The growing of an image is
385  * a way, used by first time in growisofs by Andy Polyakov, to allow the
386  * appending of new data to non-multisession media, such as DVD+RW, in the
387  * same way you append a new session to a multisession disc, i.e., without
388  * need to write again the contents of the previous image.
389  *
390  * Note that if you want this kind of image growing, you will also need to
391  * set appendable to "1" and provide a valid ms_block after the previous
392  * image.
393  *
394  * You should initialize the buffer either with 0s, or with the contents of
395  * the first blocks of the image you're growing. In most cases, 0 is good
396  * enough.
397  */
398  uint8_t *overwrite;
399 
400  /**
401  * Size, in number of blocks, of the FIFO buffer used between the writer
402  * thread and the burn_source. You have to provide at least a 32 blocks
403  * buffer.
404  */
405  size_t fifo_size;
406 
407  /**
408  * This is not an option setting but a value returned after the options
409  * were used to compute the layout of the image.
410  * It tells the LBA of the first plain file data block in the image.
411  */
412  uint32_t data_start_lba;
413 
414  /**
415  * If not empty: A text holding parameters "name" and "timestamp" for
416  * a scdbackup stream checksum tag. See scdbackup/README appendix VERIFY.
417  * It makes sense only for single session images which start at LBA 0.
418  * Such a tag may be part of a libisofs checksum tag block after the
419  * session tag line. It then covers the whole session up to its own start
420  * position.
421  */
423 
424  /* If not NULL: A pointer to an application provided array with
425  at least 512 characters. The effectively written scdbackup tag
426  will be copied to this memory location.
427  */
429 
430  /*
431  * See ecma119_image : System Area related information
432  */
436 
437  /* User settable PVD time stamps */
442  /* To eventually override vol_creation_time and vol_modification_time
443  * by unconverted string with timezone 0
444  */
445  char vol_uuid[17];
446 
447  /* The number of unclaimed 2K blocks before start of partition 1 as of
448  the MBR in system area.
449  Must be 0 or >= 16. (Actually >= number of voldescr + checksum tag)
450  */
452  /* Partition table parameter: 1 to 63, 0= disabled/default */
454  /* 1 to 255, 0= disabled/default */
456 
457 #ifdef Libisofs_with_libjtE
458  /* Parameters and state of Jigdo Template Export environment.
459  */
460  struct libjte_env *libjte_handle;
461 #endif /* Libisofs_with_libjtE */
462 
463  /* A trailing padding of zero bytes which belongs to the image
464  */
465  uint32_t tail_blocks;
466 
467  /* Eventual disk file path of a PreP partition which shall be prepended
468  to HFS+/FAT and IsoFileSrc areas and marked by an MBR partition entry.
469  */
472 
473  /* Eventual disk file path of an EFI system partition image which shall
474  be prepended to HFS+/FAT and IsoFileSrc areas and marked by a GPT entry.
475  */
478 
479  /* Disk file paths of prepared images which shall be appended
480  after the ISO image and described by partition table entries in a MBR.
481  NULL means unused.
482  */
487 
488  /* Flags in case that appended partitions show up in GPT:
489  bit0= appended_part_type_guids is valid
490  */
492 
493  /* If 1: With appended partitions: create protective MBR and mark by GPT
494  */
496 
497  /* If 1: With appended partitions: mark by APM partition
498  */
500 
501  /* If 1: Obey struct el_torito_boot_image.isolinux_options bit2-7 and bit8.
502  I.e. mention boot image as partition in GPT and/or APM.
503  */
505 
506  /* The type to use for the mountable ISO partition if there is any and if
507  the type is not mandatorily determined for particular circumstances like
508  compliant GPT, CHRP, or PReP.
509  -1 = use the default value (e.g. 0xcd, 0x83, 0x17)
510  0x00 to 0xff = value to use if possible
511  */
513 
514  /* iso_write_opts_set_iso_type_guid
515  */
516  uint8_t iso_gpt_type_guid[16];
517  /* bit0= iso_gpt_type_guid is valid
518  */
520 
521 
522  /* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label.
523  */
525 
526  /* HFS+ image serial number.
527  * 00...00 means that it shall be generated by libisofs.
528  */
529  uint8_t hfsp_serial_number[8];
530 
531  /* Allocation block size of HFS+ : 0= auto , 512, or 2048
532  */
534 
535  /* Block size of and in APM : 0= auto , 512, or 2048
536  */
538 
539  /* User defined GUID for GPT header and base of reproducible partition
540  GUIDs. (Not to be confused with volume "UUID", which is actually a
541  timestamp.)
542  See API call iso_write_opts_set_gpt_guid().
543  */
544  uint8_t gpt_disk_guid[16];
546 };
547 
548 typedef struct ecma119_image Ecma119Image;
549 typedef struct ecma119_node Ecma119Node;
550 typedef struct joliet_node JolietNode;
551 typedef struct iso1999_node Iso1999Node;
552 typedef struct hfsplus_node HFSPlusNode;
553 typedef struct Iso_File_Src IsoFileSrc;
554 typedef struct Iso_Image_Writer IsoImageWriter;
555 
557 {
558  int refcount;
559 
562 
564 
565  /** Whether El Torito data will be produced */
566  unsigned int eltorito :1;
567 
568  /* The ECMA-119 directory node where to store Rock Ridge relocated
569  directories. (Path is in IsoWriteOpts.rr_reloc_dir)
570  */
571  Ecma119Node *rr_reloc_node; /* Directory node in ecma119_image */
572 
573  /*
574  * Mode replace. If one of these flags is set, the correspodent values are
575  * replaced with values below. Both get computed from IsoWriteOpts.
576  */
577  unsigned int replace_uid :1;
578  unsigned int replace_gid :1;
579  unsigned int replace_file_mode :1;
580  unsigned int replace_dir_mode :1;
581  unsigned int replace_timestamps :1;
582 
583  /* Mode replacement values. */
584  uid_t uid;
585  gid_t gid;
586  mode_t file_mode;
587  mode_t dir_mode;
588  time_t timestamp;
589 
590  /* Effective charsets */
593 
594  time_t now; /**< Time at which writing began. */
595 
596  /* Total size of the output. Counted in bytes.
597  * Includes ISO filesystem and appended data.
598  */
599  off_t total_size;
600 
601  /** Size actually governed by the ISO filesystem part of the output */
602  uint32_t vol_space_size;
603 
604  /* 1= write the total size into the PVD of the ISO,
605  * 0= write vol_space_size
606  */
608 
609  /* Bytes already written to image output */
611  /* just for progress notification */
613 
614  /*
615  * Block being processed, either during image writing or structure
616  * size calculation.
617  */
618  uint32_t curblock;
619 
620  /*
621  * The address to be used for the content pointer of empty data files.
622  */
624 
625  /*
626  * The calculated block address after ECMA-119 tree and eventual
627  * tree checksum tag.
628  */
629  uint32_t tree_end_block;
630 
631  /*
632  * number of dirs in ECMA-119 tree, computed together with dir position,
633  * and needed for path table computation in a efficient way
634  */
635  size_t ndirs;
636  uint32_t path_table_size;
639 
640  /*
641  * Joliet related information
642  */
644  size_t joliet_ndirs;
649 
650  /*
651  * HFS+ related information
652  * (by Vladimir Serbinenko, see libisofs/hfsplus.c)
653  */
656  uint32_t hfsp_nlevels;
657  uint32_t hfsp_part_start;
658  uint32_t hfsp_nfiles;
659  uint32_t hfsp_ndirs;
660  uint32_t hfsp_cat_id;
667  uint32_t hfsp_nleafs;
668  uint32_t hfsp_curleaf;
669  uint32_t hfsp_nnodes;
672 
673  /*
674  * ISO 9660:1999 related information
675  */
681 
682  /*
683  * El-Torito related information
684  */
686  IsoFileSrc *cat; /**< location of the boot catalog in the new image */
687 
689  IsoFileSrc **bootsrc; /* location of the boot images in the new image */
690 
691  int *boot_appended_idx; /* Appended partition which serve as boot images */
692 
693  uint32_t *boot_intvl_start; /* In blocks of 2048 bytes */
694  uint32_t *boot_intvl_size; /* In blocks of 512 bytes */
695 
696  /*
697  * System Area related information
698  */
699  /* Content of an embedded boot image. Valid if not NULL.
700  * In that case it must point to a memory buffer at least 32 kB.
701  */
703  /*
704  * bit0= Only with DOS MBR
705  * Make bytes 446 - 512 of the system area a partition
706  * table which reserves partition 1 from byte 63*512 to the
707  * end of the ISO image. Assumed are 63 secs/hed, 255 head/cyl.
708  * (GRUB protective msdos label.)
709  * This works with and without system_area_data.
710  * bit1= Only with DOS MBR
711  * Apply isohybrid MBR patching to the system area.
712  * This works only with system_area_data plus ISOLINUX boot image
713  * and only if not bit0 is set.
714  * bit2-7= System area type
715  * 0= DOS MBR
716  * 1= MIPS Big Endian Volume Header
717  * 2= DEC Boot Block for MIPS Little Endian
718  * 3= SUN Disk Label for SUN SPARC
719  * bit8-9= Only with DOS MBR
720  * Cylinder alignment mode eventually pads the image to make it
721  * end at a cylinder boundary.
722  * 0 = auto (align if bit1)
723  * 1 = always align to cylinder boundary
724  * 2 = never align to cylinder boundary
725  * 3 = always align, additionally pad up and align partitions
726  * which were appended by iso_write_opts_set_partition_img()
727  * bit10-13= System area sub type
728  * With type 0 = MBR:
729  * Gets overridden by bit0 and bit1.
730  * 0 = no particular sub type
731  * 1 = CHRP: A single MBR partition of type 0x96 covers the
732  * ISO image. Not compatible with any other feature
733  * which needs to have own MBR partition entries.
734  */
736 
737  /*
738  * Number of pad blocks that we need to write. Padding blocks are blocks
739  * filled by 0s that we put between the directory structures and the file
740  * data. These padding blocks are added by libisofs to improve the handling
741  * of image growing. The idea is that the first blocks in the image are
742  * overwritten with the volume descriptors of the new image. These first
743  * blocks usually correspond to the volume descriptors and directory
744  * structure of the old image, and can be safety overwritten. However,
745  * with very small images they might correspond to valid data. To ensure
746  * this never happens, what we do is to add padding bytes, to ensure no
747  * file data is written in the first 64 KiB, that are the bytes we usually
748  * overwrite.
749  */
750  uint32_t mspad_blocks;
751 
752  size_t nwriters;
754 
755  /* tree of files sources */
757 
759 
760  unsigned int checksum_idx_counter;
767  char image_md5[16];
772 
773  char *opts_overwrite; /* Points to IsoWriteOpts->overwrite.
774  Use only underneath ecma119_image_new()
775  and if not NULL*/
776 
777  /* Buffer for communication between burn_source and writer thread */
779 
780  /* writer thread descriptor */
781  pthread_t wthread;
783  pthread_attr_t th_attr;
784 
785  /* Effective partition table parameter: 1 to 63, 0= disabled/default */
787  /* 1 to 255, 0= disabled/default */
789 
790  /* The currently applicable LBA offset. To be subtracted from any LBA
791  * that is mentioned in volume descriptors, trees, path tables,
792  * Either 0 or .partition_offset
793  */
795 
796  /* The second ECMA-119 directory tree and path tables */
800 
801  /* The second Joliet directory tree and path tables */
805 
806  /* Memorized ELF parameters from MIPS Little Endian boot file */
807  uint32_t mipsel_e_entry;
808  uint32_t mipsel_p_offset;
809  uint32_t mipsel_p_vaddr;
810  uint32_t mipsel_p_filesz;
811 
812  /* A data file of which the position and size shall be written after
813  a SUN Disk Label.
814  */
816 
817  /* Trailing padding of ISO filesystem partition for cylinder alignment */
818  /* Only in effect with Libisofs_part_align_writeR */
821 
822  /* Counted in blocks of 2048 */
827 
828  /* See IsoImage and libisofs.h */
830 
831  /* Block sizes come from write options.
832  Only change a block size if it is 0. Set only to 512 or 2048.
833  If it stays 0 then it will become 512 or 2048 in time.
834  */
835 
836  /* Allocation block size of HFS+
837  May be defined to 512 or 2048 before hfsplus_writer_create().
838  */
839  int hfsp_cat_node_size; /* 2 * hfsp_block_size */
840  int hfsp_iso_block_fac; /* 2048 / hfsp_block_size */
841 
842  /* Apple Partition Map description. To be composed during IsoImageWriter
843  method ->compute_data_blocks() by calling iso_register_apm_entry().
844  Make sure that the composing writers get registered before the
845  gpt_tail_writer.
846  */
849  /* bit1= Do not fill gaps in Apple Partition Map
850  bit2= apm_req entries use apm_block_size in start_block and block_count.
851  Normally these two parameters are counted in 2 KiB blocks.
852  */
854 
855  /* MBR partition table description. To be composed during IsoImageWriter
856  method ->compute_data_blocks() by calling iso_register_mbr_entry().
857  */
860 
861  /* Number of bytes which have to be added after the cylinder aligned end
862  of the overall ISO partition because clinder size is not a multiple
863  of 2048
864  */
866 
867  uint32_t prep_part_size;
868 
869  /* GPT description. To be composed during IsoImageWriter
870  method ->compute_data_blocks() by calling iso_register_gpt_entry().
871  Make sure that the composing writers get registered before the
872  gpt_tail_writer.
873  */
876  /* bit0= GPT partitions may overlap */
878 
879  /* Whether the eventual backup GPT is not part of the ISO filesystem */
881 
882  /* The base UUID for the generated GPT UUIDs */
883  uint8_t gpt_uuid_base[16];
884  /* The counter which distinguishes the GPT UUIDs */
886 
888  IsoFileSrc *efi_boot_part_filesrc; /* Just a pointer. Do not free. */
889 
890  /* Messages from gpt_tail_writer_compute_data_blocks() to
891  iso_write_system_area().
892  */
893  uint8_t gpt_disk_guid[16];
895  /* Start of GPT entries in System Area, block size 512 */
896  uint32_t gpt_part_start;
897  /* The ISO block number after the backup GPT header , block size 2048 */
898  uint32_t gpt_backup_end;
899  uint32_t gpt_backup_size;
900  uint32_t gpt_max_entries;
902 
903  /* Message from write_head_part1()/iso_write_system_area() to the
904  write_data() methods of the writers.
905  */
908 
909  /* Size of the filesrc_writer area (data file content).
910  This is available before any IsoImageWriter.compute_data_blocks()
911  is called.
912  */
913  uint32_t filesrc_start;
914  uint32_t filesrc_blocks;
915 
916 };
917 
918 #define BP(a,b) [(b) - (a) + 1]
919 
920 /* ECMA-119, 8.4 */
922 {
923  uint8_t vol_desc_type BP(1, 1);
924  uint8_t std_identifier BP(2, 6);
925  uint8_t vol_desc_version BP(7, 7);
926  uint8_t unused1 BP(8, 8);
927  uint8_t system_id BP(9, 40);
928  uint8_t volume_id BP(41, 72);
929  uint8_t unused2 BP(73, 80);
930  uint8_t vol_space_size BP(81, 88);
931  uint8_t unused3 BP(89, 120);
932  uint8_t vol_set_size BP(121, 124);
933  uint8_t vol_seq_number BP(125, 128);
934  uint8_t block_size BP(129, 132);
935  uint8_t path_table_size BP(133, 140);
936  uint8_t l_path_table_pos BP(141, 144);
937  uint8_t opt_l_path_table_pos BP(145, 148);
938  uint8_t m_path_table_pos BP(149, 152);
939  uint8_t opt_m_path_table_pos BP(153, 156);
940  uint8_t root_dir_record BP(157, 190);
941  uint8_t vol_set_id BP(191, 318);
942  uint8_t publisher_id BP(319, 446);
943  uint8_t data_prep_id BP(447, 574);
944  uint8_t application_id BP(575, 702);
945  uint8_t copyright_file_id BP(703, 739);
946  uint8_t abstract_file_id BP(740, 776);
947  uint8_t bibliographic_file_id BP(777, 813);
948  uint8_t vol_creation_time BP(814, 830);
949  uint8_t vol_modification_time BP(831, 847);
950  uint8_t vol_expiration_time BP(848, 864);
951  uint8_t vol_effective_time BP(865, 881);
952  uint8_t file_structure_version BP(882, 882);
953  uint8_t reserved1 BP(883, 883);
954  uint8_t app_use BP(884, 1395);
955  uint8_t reserved2 BP(1396, 2048);
956 };
957 
958 /* ECMA-119, 8.5 */
960 {
961  uint8_t vol_desc_type BP(1, 1);
962  uint8_t std_identifier BP(2, 6);
963  uint8_t vol_desc_version BP(7, 7);
964  uint8_t vol_flags BP(8, 8);
965  uint8_t system_id BP(9, 40);
966  uint8_t volume_id BP(41, 72);
967  uint8_t unused2 BP(73, 80);
968  uint8_t vol_space_size BP(81, 88);
969  uint8_t esc_sequences BP(89, 120);
970  uint8_t vol_set_size BP(121, 124);
971  uint8_t vol_seq_number BP(125, 128);
972  uint8_t block_size BP(129, 132);
973  uint8_t path_table_size BP(133, 140);
974  uint8_t l_path_table_pos BP(141, 144);
975  uint8_t opt_l_path_table_pos BP(145, 148);
976  uint8_t m_path_table_pos BP(149, 152);
977  uint8_t opt_m_path_table_pos BP(153, 156);
978  uint8_t root_dir_record BP(157, 190);
979  uint8_t vol_set_id BP(191, 318);
980  uint8_t publisher_id BP(319, 446);
981  uint8_t data_prep_id BP(447, 574);
982  uint8_t application_id BP(575, 702);
983  uint8_t copyright_file_id BP(703, 739);
984  uint8_t abstract_file_id BP(740, 776);
985  uint8_t bibliographic_file_id BP(777, 813);
986  uint8_t vol_creation_time BP(814, 830);
987  uint8_t vol_modification_time BP(831, 847);
988  uint8_t vol_expiration_time BP(848, 864);
989  uint8_t vol_effective_time BP(865, 881);
990  uint8_t file_structure_version BP(882, 882);
991  uint8_t reserved1 BP(883, 883);
992  uint8_t app_use BP(884, 1395);
993  uint8_t reserved2 BP(1396, 2048);
994 };
995 
996 /* ECMA-119, 8.2 */
998 {
999  uint8_t vol_desc_type BP(1, 1);
1000  uint8_t std_identifier BP(2, 6);
1001  uint8_t vol_desc_version BP(7, 7);
1002  uint8_t boot_sys_id BP(8, 39);
1003  uint8_t boot_id BP(40, 71);
1004  uint8_t boot_catalog BP(72, 75);
1005  uint8_t unused BP(76, 2048);
1006 };
1007 
1008 /* ECMA-119, 9.1 */
1010 {
1011  uint8_t len_dr BP(1, 1);
1012  uint8_t len_xa BP(2, 2);
1013  uint8_t block BP(3, 10);
1014  uint8_t length BP(11, 18);
1015  uint8_t recording_time BP(19, 25);
1016  uint8_t flags BP(26, 26);
1017  uint8_t file_unit_size BP(27, 27);
1018  uint8_t interleave_gap_size BP(28, 28);
1019  uint8_t vol_seq_number BP(29, 32);
1020  uint8_t len_fi BP(33, 33);
1021  uint8_t file_id BP(34, 34); /* 34 to 33+len_fi */
1022  /* padding field (if len_fi is even) */
1023  /* system use (len_dr - len_su + 1 to len_dr) */
1024 };
1025 
1026 /* ECMA-119, 9.4 */
1028 {
1029  uint8_t len_di BP(1, 1);
1030  uint8_t len_xa BP(2, 2);
1031  uint8_t block BP(3, 6);
1032  uint8_t parent BP(7, 8);
1033  uint8_t dir_id BP(9, 9); /* 9 to 8+len_di */
1034  /* padding field (if len_di is odd) */
1035 };
1036 
1037 /* ECMA-119, 8.3 */
1039 {
1040  uint8_t vol_desc_type BP(1, 1);
1041  uint8_t std_identifier BP(2, 6);
1042  uint8_t vol_desc_version BP(7, 7);
1043  uint8_t reserved BP(8, 2048);
1044 };
1045 
1047  struct ecma119_pri_vol_desc *vol);
1048 
1049 /* Copies a data file into the ISO image output stream */
1050 int iso_write_partition_file(Ecma119Image *target, char *path,
1051  uint32_t prepad, uint32_t blocks, int flag);
1052 
1053 void issue_ucs2_warning_summary(size_t failures);
1054 
1055 /* Tells whether ivr is a reader from imported_iso in a multi-session
1056  add-on situation, and thus to be kept in place.
1057 */
1059  struct iso_interval_reader *ivr,
1060  int flag);
1061 
1062 /* @return: ISO_SUCCESS = ok, ISO_SUCCESS + 1 = keep , < 0 = error */
1063 int iso_interval_reader_start_size(Ecma119Image *t, char *path,
1064  off_t *start_byte, off_t *byte_count,
1065  int flag);
1066 
1067 /* Obtains start and end number of appended partition range and returns
1068  the number of valid entries in the list of appended partitions.
1069 */
1071  int *first_partition, int *last_partition);
1072 
1073 /* Determines the range of valid partition numbers depending on partition
1074  table type.
1075 */
1077  int *first_partition, int *last_partition,
1078  int flag);
1079 
1080 #endif /*LIBISO_ECMA119_H_*/
#define BP(a, b)
Definition: ecma119.h:918
#define ISO_DISC_LABEL_SIZE
Definition: ecma119.h:59
#define ISO_GPT_ENTRIES_MAX
Definition: ecma119.h:87
void iso_tell_max_part_range(IsoWriteOpts *opts, int *first_partition, int *last_partition, int flag)
Definition: ecma119.c:4637
int iso_write_partition_file(Ecma119Image *target, char *path, uint32_t prepad, uint32_t blocks, int flag)
Definition: ecma119.c:2091
void ecma119_set_voldescr_times(IsoImageWriter *writer, struct ecma119_pri_vol_desc *vol)
Definition: ecma119.c:475
void issue_ucs2_warning_summary(size_t failures)
Definition: ecma119.c:2164
int iso_interval_reader_keep(Ecma119Image *target, struct iso_interval_reader *ivr, int flag)
Definition: ecma119.c:2050
int iso_count_appended_partitions(Ecma119Image *target, int *first_partition, int *last_partition)
Definition: ecma119.c:4657
#define ISO_MBR_ENTRIES_MAX
Definition: ecma119.h:81
int iso_interval_reader_start_size(Ecma119Image *t, char *path, off_t *start_byte, off_t *byte_count, int flag)
Definition: ecma119.c:2072
#define ISO_MAX_PARTITIONS
Definition: ecma119.h:47
#define BLOCK_SIZE
Definition: ecma119.h:28
#define ISO_APM_ENTRIES_MAX
Definition: ecma119.h:77
@ ISO_HFSPLUS_BLESS_MAX
Definition: libisofs.h:8598
Definition: node.h:100
uint8_t std_identifier[(6) -(2)+1]
Definition: ecma119.h:1000
uint8_t boot_sys_id[(39) -(8)+1]
Definition: ecma119.h:1002
uint8_t vol_desc_version[(7) -(7)+1]
Definition: ecma119.h:1001
uint8_t boot_id[(71) -(40)+1]
Definition: ecma119.h:1003
uint8_t unused[(2048) -(76)+1]
Definition: ecma119.h:1005
uint8_t vol_desc_type[(1) -(1)+1]
Definition: ecma119.h:999
uint8_t boot_catalog[(75) -(72)+1]
Definition: ecma119.h:1004
uint8_t recording_time[(25) -(19)+1]
Definition: ecma119.h:1015
uint8_t file_unit_size[(27) -(27)+1]
Definition: ecma119.h:1017
uint8_t length[(18) -(11)+1]
Definition: ecma119.h:1014
uint8_t len_dr[(1) -(1)+1]
Definition: ecma119.h:1011
uint8_t file_id[(34) -(34)+1]
Definition: ecma119.h:1021
uint8_t len_fi[(33) -(33)+1]
Definition: ecma119.h:1020
uint8_t vol_seq_number[(32) -(29)+1]
Definition: ecma119.h:1019
uint8_t interleave_gap_size[(28) -(28)+1]
Definition: ecma119.h:1018
uint8_t len_xa[(2) -(2)+1]
Definition: ecma119.h:1012
uint8_t block[(10) -(3)+1]
Definition: ecma119.h:1013
uint8_t flags[(26) -(26)+1]
Definition: ecma119.h:1016
char * opts_overwrite
Definition: ecma119.h:773
uint32_t partition_l_table_pos
Definition: ecma119.h:798
struct iso_filesrc_list_item * ecma119_hidden_list
Definition: ecma119.h:758
int partition_heads_per_cyl
Definition: ecma119.h:788
size_t iso1999_ndirs
Definition: ecma119.h:677
uint32_t hfsp_collision_count
Definition: ecma119.h:671
int post_iso_part_pad
Definition: ecma119.h:865
JolietNode * joliet_root
Definition: ecma119.h:643
int apm_req_flags
Definition: ecma119.h:853
uint32_t vol_space_size
Definition: ecma119.h:602
struct iso_mbr_partition_request * mbr_req[4]
Definition: ecma119.h:858
uint32_t empty_file_block
Definition: ecma119.h:623
uint32_t tree_end_block
Definition: ecma119.h:629
char * system_area_data
Definition: ecma119.h:702
int mbr_req_count
Definition: ecma119.h:859
IsoImage * image
Definition: ecma119.h:560
struct el_torito_boot_catalog * catalog
Definition: ecma119.h:685
uint32_t checksum_tag_pos
Definition: ecma119.h:766
size_t joliet_ndirs
Definition: ecma119.h:644
int partition_secs_per_head
Definition: ecma119.h:786
uint32_t appended_part_size[8]
Definition: ecma119.h:825
uint32_t hfsp_part_start
Definition: ecma119.h:657
uint32_t appended_part_prepad[8]
Definition: ecma119.h:823
uint32_t gpt_backup_end
Definition: ecma119.h:898
uint32_t hfsp_curleaf
Definition: ecma119.h:668
uint32_t joliet_l_path_table_pos
Definition: ecma119.h:646
IsoNode * hfsplus_blessed[ISO_HFSPLUS_BLESS_MAX]
Definition: ecma119.h:829
time_t now
Definition: ecma119.h:594
mode_t file_mode
Definition: ecma119.h:586
uint32_t mspad_blocks
Definition: ecma119.h:750
uint32_t partition_m_table_pos
Definition: ecma119.h:799
int refcount
Definition: ecma119.h:558
unsigned int eltorito
Definition: ecma119.h:566
int num_bootsrc
Definition: ecma119.h:688
uint32_t gpt_max_entries
Definition: ecma119.h:900
IsoWriteOpts * opts
Definition: ecma119.h:563
uint32_t part_align_blocks
Definition: ecma119.h:819
uint32_t hfsp_nleafs
Definition: ecma119.h:667
mode_t dir_mode
Definition: ecma119.h:587
uint32_t m_path_table_pos
Definition: ecma119.h:638
IsoRingBuffer * buffer
Definition: ecma119.h:778
uint32_t hfsp_extent_file_start
Definition: ecma119.h:663
Ecma119Node * rr_reloc_node
Definition: ecma119.h:571
uint32_t hfsp_total_blocks
Definition: ecma119.h:665
uint32_t hfsp_bless_id[ISO_HFSPLUS_BLESS_MAX]
Definition: ecma119.h:670
gid_t gid
Definition: ecma119.h:585
uint32_t j_part_l_path_table_pos
Definition: ecma119.h:803
unsigned int replace_timestamps
Definition: ecma119.h:581
uint32_t hfsp_nlevels
Definition: ecma119.h:656
uint32_t iso1999_m_path_table_pos
Definition: ecma119.h:680
char * output_charset
Definition: ecma119.h:592
char * input_charset
Definition: ecma119.h:591
uint32_t * boot_intvl_start
Definition: ecma119.h:693
struct hfsplus_btree_level * hfsp_levels
Definition: ecma119.h:655
uint32_t * boot_intvl_size
Definition: ecma119.h:694
uint32_t checksum_tree_tag_pos
Definition: ecma119.h:765
uint32_t mipsel_p_vaddr
Definition: ecma119.h:809
int wthread_is_running
Definition: ecma119.h:782
uint32_t checksum_rlsb_tag_pos
Definition: ecma119.h:763
int gpt_backup_outside
Definition: ecma119.h:880
uid_t uid
Definition: ecma119.h:584
int system_area_options
Definition: ecma119.h:735
uint32_t iso1999_l_path_table_pos
Definition: ecma119.h:679
unsigned int replace_dir_mode
Definition: ecma119.h:580
uint32_t gpt_part_start
Definition: ecma119.h:896
Iso1999Node * iso1999_root
Definition: ecma119.h:676
uint32_t hfsp_allocation_file_start
Definition: ecma119.h:662
uint32_t checksum_range_start
Definition: ecma119.h:770
uint32_t iso1999_path_table_size
Definition: ecma119.h:678
HFSPlusNode * hfsp_leafs
Definition: ecma119.h:654
unsigned int replace_gid
Definition: ecma119.h:578
uint32_t hfsp_catalog_file_start
Definition: ecma119.h:664
uint32_t prep_part_size
Definition: ecma119.h:867
int hfsp_cat_node_size
Definition: ecma119.h:839
uint32_t hfsp_allocation_size
Definition: ecma119.h:666
int percent_written
Definition: ecma119.h:612
uint32_t checksum_sb_tag_pos
Definition: ecma119.h:764
uint8_t gpt_uuid_base[16]
Definition: ecma119.h:883
uint8_t sys_area_as_written[16 *2048]
Definition: ecma119.h:906
IsoImageWriter ** writers
Definition: ecma119.h:753
uint32_t mipsel_p_filesz
Definition: ecma119.h:810
int apm_req_count
Definition: ecma119.h:848
IsoFileSrc * efi_boot_part_filesrc
Definition: ecma119.h:888
JolietNode * j_part_root
Definition: ecma119.h:802
uint32_t mipsel_p_offset
Definition: ecma119.h:808
uint32_t hfsp_nfiles
Definition: ecma119.h:658
void * checksum_ctx
Definition: ecma119.h:761
unsigned int checksum_idx_counter
Definition: ecma119.h:760
int have_appended_partitions
Definition: ecma119.h:826
int sys_area_already_written
Definition: ecma119.h:907
uint32_t gpt_uuid_counter
Definition: ecma119.h:885
pthread_attr_t th_attr
Definition: ecma119.h:783
char * checksum_buffer
Definition: ecma119.h:768
uint32_t appended_part_start[8]
Definition: ecma119.h:824
size_t joliet_ucs2_failures
Definition: ecma119.h:648
uint32_t hfsp_ndirs
Definition: ecma119.h:659
uint32_t filesrc_blocks
Definition: ecma119.h:914
struct iso_apm_partition_request * apm_req[63]
Definition: ecma119.h:847
uint32_t hfsp_nnodes
Definition: ecma119.h:669
size_t nwriters
Definition: ecma119.h:752
uint32_t curblock
Definition: ecma119.h:618
Ecma119Node * partition_root
Definition: ecma119.h:797
uint32_t checksum_array_pos
Definition: ecma119.h:769
IsoFileSrc ** bootsrc
Definition: ecma119.h:689
int * boot_appended_idx
Definition: ecma119.h:691
uint32_t gpt_backup_size
Definition: ecma119.h:899
uint32_t filesrc_start
Definition: ecma119.h:913
off_t total_size
Definition: ecma119.h:599
IsoFileSrc * sparc_core_src
Definition: ecma119.h:815
uint32_t l_path_table_pos
Definition: ecma119.h:637
uint32_t joliet_m_path_table_pos
Definition: ecma119.h:647
IsoRBTree * files
Definition: ecma119.h:756
Ecma119Node * root
Definition: ecma119.h:561
size_t ndirs
Definition: ecma119.h:635
time_t timestamp
Definition: ecma119.h:588
uint32_t hfsp_cat_id
Definition: ecma119.h:660
uint32_t mipsel_e_entry
Definition: ecma119.h:807
int gpt_is_computed
Definition: ecma119.h:901
uint32_t path_table_size
Definition: ecma119.h:636
int gpt_req_flags
Definition: ecma119.h:877
int hfsp_iso_block_fac
Definition: ecma119.h:840
int gpt_disk_guid_set
Definition: ecma119.h:894
unsigned int replace_uid
Definition: ecma119.h:577
uint8_t gpt_disk_guid[16]
Definition: ecma119.h:893
uint32_t joliet_path_table_size
Definition: ecma119.h:645
IsoFileSrc * cat
Definition: ecma119.h:686
uint32_t eff_partition_offset
Definition: ecma119.h:794
unsigned int replace_file_mode
Definition: ecma119.h:579
struct iso_gpt_partition_request * gpt_req[248]
Definition: ecma119.h:874
int pvd_size_is_total_size
Definition: ecma119.h:607
uint32_t j_part_m_path_table_pos
Definition: ecma119.h:804
uint32_t checksum_range_size
Definition: ecma119.h:771
uint32_t hfsp_allocation_blocks
Definition: ecma119.h:661
uint32_t alignment_end_block
Definition: ecma119.h:820
off_t bytes_written
Definition: ecma119.h:610
off_t checksum_counter
Definition: ecma119.h:762
uint32_t efi_boot_part_size
Definition: ecma119.h:887
int gpt_req_count
Definition: ecma119.h:875
pthread_t wthread
Definition: ecma119.h:781
char image_md5[16]
Definition: ecma119.h:767
uint8_t len_di[(1) -(1)+1]
Definition: ecma119.h:1029
uint8_t dir_id[(9) -(9)+1]
Definition: ecma119.h:1033
uint8_t parent[(8) -(7)+1]
Definition: ecma119.h:1032
uint8_t len_xa[(2) -(2)+1]
Definition: ecma119.h:1030
uint8_t block[(6) -(3)+1]
Definition: ecma119.h:1031
uint8_t reserved2[(2048) -(1396)+1]
Definition: isofs_wrap.c:74
uint8_t vol_desc_version[(7) -(7)+1]
Definition: isofs_wrap.c:44
uint8_t opt_m_path_table_pos[(156) -(153)+1]
Definition: isofs_wrap.c:58
uint8_t l_path_table_pos[(144) -(141)+1]
Definition: isofs_wrap.c:55
uint8_t app_use[(1395) -(884)+1]
Definition: isofs_wrap.c:73
uint8_t unused1[(8) -(8)+1]
Definition: isofs_wrap.c:45
uint8_t data_prep_id[(574) -(447)+1]
Definition: isofs_wrap.c:62
uint8_t vol_set_size[(124) -(121)+1]
Definition: isofs_wrap.c:51
uint8_t vol_seq_number[(128) -(125)+1]
Definition: isofs_wrap.c:52
uint8_t vol_modification_time[(847) -(831)+1]
Definition: isofs_wrap.c:68
uint8_t bibliographic_file_id[(813) -(777)+1]
Definition: isofs_wrap.c:66
uint8_t file_structure_version[(882) -(882)+1]
Definition: isofs_wrap.c:71
uint8_t m_path_table_pos[(152) -(149)+1]
Definition: isofs_wrap.c:57
uint8_t vol_expiration_time[(864) -(848)+1]
Definition: isofs_wrap.c:69
uint8_t vol_creation_time[(830) -(814)+1]
Definition: isofs_wrap.c:67
uint8_t vol_set_id[(318) -(191)+1]
Definition: isofs_wrap.c:60
uint8_t publisher_id[(446) -(319)+1]
Definition: isofs_wrap.c:61
uint8_t system_id[(40) -(9)+1]
Definition: isofs_wrap.c:46
uint8_t block_size[(132) -(129)+1]
Definition: isofs_wrap.c:53
uint8_t unused3[(120) -(89)+1]
Definition: isofs_wrap.c:50
uint8_t vol_space_size[(88) -(81)+1]
Definition: isofs_wrap.c:49
uint8_t root_dir_record[(190) -(157)+1]
Definition: isofs_wrap.c:59
uint8_t path_table_size[(140) -(133)+1]
Definition: isofs_wrap.c:54
uint8_t volume_id[(72) -(41)+1]
Definition: isofs_wrap.c:47
uint8_t opt_l_path_table_pos[(148) -(145)+1]
Definition: isofs_wrap.c:56
uint8_t reserved1[(883) -(883)+1]
Definition: isofs_wrap.c:72
uint8_t vol_effective_time[(881) -(865)+1]
Definition: isofs_wrap.c:70
uint8_t copyright_file_id[(739) -(703)+1]
Definition: isofs_wrap.c:64
uint8_t vol_desc_type[(1) -(1)+1]
Definition: isofs_wrap.c:42
uint8_t abstract_file_id[(776) -(740)+1]
Definition: isofs_wrap.c:65
uint8_t unused2[(80) -(73)+1]
Definition: isofs_wrap.c:48
uint8_t std_identifier[(6) -(2)+1]
Definition: isofs_wrap.c:43
uint8_t application_id[(702) -(575)+1]
Definition: isofs_wrap.c:63
uint8_t vol_effective_time[(881) -(865)+1]
Definition: ecma119.h:989
uint8_t esc_sequences[(120) -(89)+1]
Definition: ecma119.h:969
uint8_t m_path_table_pos[(152) -(149)+1]
Definition: ecma119.h:976
uint8_t vol_seq_number[(128) -(125)+1]
Definition: ecma119.h:971
uint8_t reserved2[(2048) -(1396)+1]
Definition: ecma119.h:993
uint8_t vol_modification_time[(847) -(831)+1]
Definition: ecma119.h:987
uint8_t vol_space_size[(88) -(81)+1]
Definition: ecma119.h:968
uint8_t vol_set_size[(124) -(121)+1]
Definition: ecma119.h:970
uint8_t vol_flags[(8) -(8)+1]
Definition: ecma119.h:964
uint8_t root_dir_record[(190) -(157)+1]
Definition: ecma119.h:978
uint8_t data_prep_id[(574) -(447)+1]
Definition: ecma119.h:981
uint8_t volume_id[(72) -(41)+1]
Definition: ecma119.h:966
uint8_t reserved1[(883) -(883)+1]
Definition: ecma119.h:991
uint8_t unused2[(80) -(73)+1]
Definition: ecma119.h:967
uint8_t opt_l_path_table_pos[(148) -(145)+1]
Definition: ecma119.h:975
uint8_t file_structure_version[(882) -(882)+1]
Definition: ecma119.h:990
uint8_t app_use[(1395) -(884)+1]
Definition: ecma119.h:992
uint8_t system_id[(40) -(9)+1]
Definition: ecma119.h:965
uint8_t std_identifier[(6) -(2)+1]
Definition: ecma119.h:962
uint8_t copyright_file_id[(739) -(703)+1]
Definition: ecma119.h:983
uint8_t vol_desc_version[(7) -(7)+1]
Definition: ecma119.h:963
uint8_t opt_m_path_table_pos[(156) -(153)+1]
Definition: ecma119.h:977
uint8_t block_size[(132) -(129)+1]
Definition: ecma119.h:972
uint8_t vol_desc_type[(1) -(1)+1]
Definition: ecma119.h:961
uint8_t path_table_size[(140) -(133)+1]
Definition: ecma119.h:973
uint8_t abstract_file_id[(776) -(740)+1]
Definition: ecma119.h:984
uint8_t l_path_table_pos[(144) -(141)+1]
Definition: ecma119.h:974
uint8_t application_id[(702) -(575)+1]
Definition: ecma119.h:982
uint8_t vol_creation_time[(830) -(814)+1]
Definition: ecma119.h:986
uint8_t vol_set_id[(318) -(191)+1]
Definition: ecma119.h:979
uint8_t vol_expiration_time[(864) -(848)+1]
Definition: ecma119.h:988
uint8_t publisher_id[(446) -(319)+1]
Definition: ecma119.h:980
uint8_t bibliographic_file_id[(813) -(777)+1]
Definition: ecma119.h:985
uint8_t reserved[(2048) -(8)+1]
Definition: ecma119.h:1043
uint8_t vol_desc_type[(1) -(1)+1]
Definition: ecma119.h:1040
uint8_t vol_desc_version[(7) -(7)+1]
Definition: ecma119.h:1042
uint8_t std_identifier[(6) -(2)+1]
Definition: ecma119.h:1041
unsigned int aaip_susp_1_10
Definition: ecma119.h:234
unsigned int rrip_version_1_10
Definition: ecma119.h:211
int iso_gpt_flag
Definition: ecma119.h:519
unsigned int allow_full_ascii
Definition: ecma119.h:175
unsigned int allow_7bit_ascii
Definition: ecma119.h:182
int appended_as_apm
Definition: ecma119.h:499
int gpt_disk_guid_mode
Definition: ecma119.h:545
unsigned int joliet_longer_paths
Definition: ecma119.h:194
mode_t file_mode
Definition: ecma119.h:304
unsigned int untranslated_name_len
Definition: ecma119.h:326
unsigned int replace_uid
Definition: ecma119.h:300
unsigned int dir_rec_mtime
Definition: ecma119.h:244
time_t vol_creation_time
Definition: ecma119.h:438
unsigned int replace_gid
Definition: ecma119.h:301
unsigned int md5_session_checksum
Definition: ecma119.h:270
int part_like_isohybrid
Definition: ecma119.h:504
unsigned int hardlinks
Definition: ecma119.h:221
unsigned int replace_dir_mode
Definition: ecma119.h:298
char * system_area_data
Definition: ecma119.h:433
int prep_part_flag
Definition: ecma119.h:471
unsigned int allow_dir_id_ext
Definition: ecma119.h:128
unsigned int iso1999
Definition: ecma119.h:108
char * efi_boot_partition
Definition: ecma119.h:476
char ascii_disc_label[129]
Definition: ecma119.h:524
int system_area_size
Definition: ecma119.h:434
uint32_t ms_block
Definition: ecma119.h:379
unsigned int max_37_char_filenames
Definition: ecma119.h:154
unsigned int sort_files
Definition: ecma119.h:285
unsigned int hfsplus
Definition: ecma119.h:109
unsigned int rockridge
Definition: ecma119.h:106
uint32_t data_start_lba
Definition: ecma119.h:412
uint32_t partition_offset
Definition: ecma119.h:451
unsigned int old_empty
Definition: ecma119.h:311
uint32_t tail_blocks
Definition: ecma119.h:465
unsigned int rrip_1_10_px_ino
Definition: ecma119.h:216
char vol_uuid[17]
Definition: ecma119.h:445
int iso_mbr_part_type
Definition: ecma119.h:512
uint8_t gpt_disk_guid[16]
Definition: ecma119.h:544
uint8_t * overwrite
Definition: ecma119.h:398
unsigned int relaxed_vol_atts
Definition: ecma119.h:189
int partition_heads_per_cyl
Definition: ecma119.h:455
uint8_t appended_part_types[8]
Definition: ecma119.h:484
unsigned int allow_deep_paths
Definition: ecma119.h:141
int will_cancel
Definition: ecma119.h:101
unsigned int allow_longer_paths
Definition: ecma119.h:146
unsigned int allow_lowercase
Definition: ecma119.h:169
int appended_as_gpt
Definition: ecma119.h:495
uint8_t appended_part_gpt_flags[8]
Definition: ecma119.h:491
time_t vol_expiration_time
Definition: ecma119.h:440
size_t fifo_size
Definition: ecma119.h:405
int rr_reloc_flags
Definition: ecma119.h:259
char * prep_partition
Definition: ecma119.h:470
int system_area_options
Definition: ecma119.h:435
char * appended_partitions[8]
Definition: ecma119.h:483
time_t timestamp
Definition: ecma119.h:334
unsigned int fat
Definition: ecma119.h:110
unsigned int no_force_dots
Definition: ecma119.h:163
unsigned int joliet_utf16
Definition: ecma119.h:204
char * scdbackup_tag_written
Definition: ecma119.h:428
unsigned int md5_file_checksums
Definition: ecma119.h:282
int partition_secs_per_head
Definition: ecma119.h:453
unsigned int always_gmt
Definition: ecma119.h:115
time_t vol_modification_time
Definition: ecma119.h:439
unsigned int joliet
Definition: ecma119.h:107
int apm_block_size
Definition: ecma119.h:537
int appended_part_flags[8]
Definition: ecma119.h:485
uint8_t iso_gpt_type_guid[16]
Definition: ecma119.h:516
unsigned int appendable
Definition: ecma119.h:364
unsigned int replace_file_mode
Definition: ecma119.h:299
unsigned int aaip
Definition: ecma119.h:112
uint8_t appended_part_type_guids[8][16]
Definition: ecma119.h:486
char scdbackup_tag_parm[100]
Definition: ecma119.h:422
char * output_charset
Definition: ecma119.h:340
unsigned int joliet_long_names
Definition: ecma119.h:199
int efi_boot_part_flag
Definition: ecma119.h:477
time_t vol_effective_time
Definition: ecma119.h:441
unsigned int omit_version_numbers
Definition: ecma119.h:136
char * rr_reloc_dir
Definition: ecma119.h:258
unsigned int replace_timestamps
Definition: ecma119.h:333
uint8_t hfsp_serial_number[8]
Definition: ecma119.h:529
mode_t dir_mode
Definition: ecma119.h:303
int hfsp_block_size
Definition: ecma119.h:533