Compare commits

..

226 Commits

Author SHA1 Message Date
c679fec7a1 Promoted branch to tag 2011-04-14 09:12:31 +00:00
a3378d6355 Corrected release date 2011-04-14 06:59:32 +00:00
c9493d6716 Documented changes and release timestamp 2011-04-14 06:52:54 +00:00
666aa500b0 Version leap to libisoburn-1.0.8 2011-04-14 06:49:29 +00:00
77f340648a Branching for libisoburn release 1.0.8 2011-04-14 06:20:17 +00:00
d2716cc2b5 Bug fix: mkisofs emulation could ignore options (regression in 0.1.6) 2011-04-13 20:45:01 +00:00
78e9d89fe4 Documented changes and release timestamp 2011-04-09 11:04:52 +00:00
a846f7434d Version leap to libisoburn-1.0.7 2011-04-09 10:57:10 +00:00
5eb7841f06 FAQ about release version numbers 2011-04-08 16:50:09 +00:00
88f37f2e93 Updated partition offset wiki about cylinder alignment 2011-04-07 18:04:16 +00:00
2fdc41a357 Clarification about -as mkisofs pathspecs 2011-04-07 17:59:31 +00:00
c569b4d4ce Fixed a typo in messages and goto label 2011-04-05 07:21:23 +00:00
2534999c0b Added an example of a startup file 2011-04-04 14:07:38 +00:00
4af50f44dd Updated change log and web page 2011-04-04 10:32:36 +00:00
88f3ef358d Avoided to report Volume Id when aquiring drive with blank media 2011-04-04 07:14:38 +00:00
03d2a82cac Bug fix: Options -gid and -uid had no effect 2011-04-04 06:48:52 +00:00
0280efe997 New options -print_info and -print_mark 2011-04-03 09:46:16 +00:00
1764745ff3 Updated info about GNU xorriso copyright and libjte 2011-04-03 09:42:56 +00:00
b345056a2d Clarified relation of startup files, -options_from_file and quoted input. 2011-04-03 08:28:07 +00:00
570d5a0e22 Allowing double dashes with all long options 2011-04-01 13:31:00 +00:00
82971d918e Updated change log and web page 2011-03-30 13:43:09 +00:00
65d8419750 Bug fix: -as mkisofs padding did not work (regression in 1.0.4) 2011-03-29 15:11:51 +00:00
45c1c8a862 Interpreting new libisofs error code ISO_RR_PATH_TOO_LONG 2011-03-29 15:09:11 +00:00
0f2b6f6c56 Interpreting new libisofs error codes ISO_RR_NAME_TOO_LONG ISO_RR_NAME_RESERVED 2011-03-26 20:30:25 +00:00
b537c4504e Updated change log and web page 2011-03-26 18:21:04 +00:00
e993fcca49 Small adjustments to xorrisofs.texi 2011-03-26 17:08:00 +00:00
8b75d736b3 New -compliance option joliet_long_names 2011-03-26 14:45:24 +00:00
dfeca624d6 New relax option isoburn_igopt_joliet_long_names 2011-03-26 14:42:17 +00:00
6912ae8027 Unconditionally reporting iso_level with -status -compliance 2011-03-26 14:39:25 +00:00
548c0c4efd Reporting target name if adding of new node fails with ISO_WRONG_ARG_VALUE 2011-03-26 10:05:05 +00:00
d0bce05577 Requiring libisofs-1.0.5 2011-03-25 19:19:17 +00:00
472d7610ad Better handling of pseudo-drive without read-permission 2011-03-24 18:25:00 +00:00
878931f788 Fixed typos in GNU xorriso readme file 2011-03-24 11:52:22 +00:00
e654e6399a Fixed use of uninitialized variable when blanking rol5 pseudo drives 2011-03-22 08:13:59 +00:00
1523d2bdd9 New -early_stdio_test option appendable_wo 2011-03-21 16:55:18 +00:00
e8800be3d2 Made use of new API call isoburn_set_truncate 2011-03-21 11:38:42 +00:00
f211456214 New API call isoburn_set_truncate() 2011-03-21 11:37:03 +00:00
08e112c687 New option -early_drive_test 2011-03-21 09:37:02 +00:00
cf49e83893 Prepared libisoburn for drive role 5 2011-03-21 09:31:51 +00:00
6968b72648 Prepared libisoburn for drive role 4 2011-03-13 13:15:41 +00:00
c69e553696 Requiring libburn-1.0.5 2011-03-13 13:12:50 +00:00
32b6ecd13d Updated copyright year 2011-03-13 13:11:57 +00:00
a660e9d38a Documented changes and release timestamp 2011-03-10 13:56:19 +00:00
c95e2c9d24 Version leap to libisoburn-1.0.5 2011-03-10 13:55:27 +00:00
c8fcb2fb3d HTML version of man xorrisofs 2011-03-10 07:15:51 +00:00
c1a24e71f1 Corrections and updates of documentation 2011-03-09 12:48:21 +00:00
0577b487d9 Marked options introduced since 0.5.8 by the promised @since tags 2011-03-09 12:38:37 +00:00
f7c8dbe10e Updated partition offset wiki 2011-03-09 11:01:48 +00:00
060484494d New -md5 modes load_check_off and load_check_on 2011-03-09 07:14:49 +00:00
a08a753967 New isoburn_ropt_set_extensions() option isoburn_ropt_nomd5tag 2011-03-09 07:13:12 +00:00
ed27d542e0 Updated change log and web page 2011-03-07 12:36:30 +00:00
52c641d93c Bug fix: -as mkisofs did not properly unescape target part of pathspecs 2011-03-07 10:15:39 +00:00
1c1e86f168 Polished xorrisofs documentation 2011-03-06 18:37:52 +00:00
ab8265b042 Helptext of -as mkisofs now points to man xorrisofs 2011-03-06 15:37:30 +00:00
9c5b98ae5c Mentioned man xorrisofs in man xorriso 2011-03-05 17:42:25 +00:00
5cc7fe5315 Own man page and info document for xorrisofs 2011-03-05 14:15:32 +00:00
91f8c60f5b New -as mkisofs and -as cdrecord option --no_rc 2011-03-05 09:04:23 +00:00
b9d8bbb9bb Updated change log and web page 2011-03-04 14:21:13 +00:00
fcd2f36fb8 Clarifications about cylinder size and alignment 2011-03-04 10:46:40 +00:00
7a7f234b69 Updated documentation 2011-03-03 18:20:12 +00:00
8c9c620700 New bootspec partition_cyl_align=, new -as mkisofs option -partition_cyl_align 2011-03-03 18:18:41 +00:00
558e2314ee New bits 8 and 9 with options of isoburn_igopt_set_system_area() 2011-03-03 18:16:18 +00:00
d666142388 Updated change log and web page 2011-03-02 10:09:40 +00:00
52988adee6 Updated documentation 2011-03-02 09:45:02 +00:00
de078d2749 New -padding modes "included" and "excluded" 2011-03-02 09:40:37 +00:00
65ca294357 Counting padding as part of the image with -as mkisofs 2011-03-02 09:30:10 +00:00
508adfd2f4 Installed a test against non-zero msc1 on blank input drives 2011-03-01 15:22:05 +00:00
452c9685e7 Bug fix: -as mkisofs -C attempts to read volume header of blank media 2011-03-01 14:51:17 +00:00
39c3fc6da1 When producing man page from texi: substitute @minus{} within @item 2011-02-28 21:36:25 +00:00
475e8fdea0 Bug fix: -as mkisofs -partition_hd_cyl had no effect 2011-02-28 19:08:33 +00:00
420535c275 Bug fix: -as mkisofs -old-root did not work with -graft-points 2011-02-26 10:01:52 +00:00
9049784c1c Corrected flaws found by George Danchev with cpp 2011-02-24 19:20:17 +00:00
963d139093 Corrected a flaw found by George Danchev with cpp 2011-02-24 19:18:58 +00:00
32ee757c91 Documented changes and release timestamp 2011-02-23 20:32:22 +00:00
cd74e84fb8 Version leap to libisoburn-1.0.3 2011-02-23 20:31:01 +00:00
bae04a58a9 Updated change log 2011-02-22 19:56:13 +00:00
aed7a2cf05 New -as mkisofs option -max-iso9660-filenames 2011-02-22 14:31:23 +00:00
df52dd1333 Made -as mkisofs ignore option -disable-deep-relocation rather than failing 2011-02-22 12:39:16 +00:00
15a93611c6 Corrected a bug that prevented -as mkisofs option -output 2011-02-22 07:36:42 +00:00
4aa7c45c42 Issueing messages with -clone and -cp_clone 2011-02-22 07:34:56 +00:00
79bf6a4a4e Correction about -as mkisofs --old-root-no-ino 2011-02-21 13:07:33 +00:00
58f4c2e9d6 info document and man page for recent texi corrections 2011-02-19 11:48:43 +00:00
e0754219aa Updated change log 2011-02-19 11:47:51 +00:00
700d1eaf7f Corrections in xorriso man page 2011-02-19 11:25:33 +00:00
cf986cf5d1 Updated copyright 2011-02-19 11:24:32 +00:00
bf199a105c Small adjustments in mkisofs emulation 2011-02-19 11:22:44 +00:00
ed804db458 Updated change log 2011-02-14 17:48:47 +00:00
1ad7e71e24 Closed memory leaks detected by valgrind 2011-02-14 13:15:04 +00:00
37688470e1 Reacted on compiler warning about uninitialized variable 2011-02-12 17:29:20 +00:00
26a6a24093 New -find actions update_merge, rm_merge, clear_merge. -cp_clone now merges. 2011-02-12 17:14:23 +00:00
4642148e6f -as mkisofs: Enabled reading of xattr and md5 before image loading 2011-02-08 13:36:42 +00:00
92b0079a23 Some corrections of the previous commit 2011-02-07 20:28:50 +00:00
0431d89738 New -as mkisofs options -root , -old-root, --old-root-no-md5, --old-root-no-ino, --old-root-dev 2011-02-07 18:43:06 +00:00
08e439c48d Do not regard file as changed just because no ino was recorded 2011-02-07 18:29:41 +00:00
ddecb74f6e New option -cp_clone 2011-02-04 19:19:24 +00:00
435cd88e83 Disallowed -clone to overwrite existing nodes 2011-02-02 17:41:52 +00:00
aae50b2d16 New option -clone 2011-02-01 18:58:27 +00:00
1ceb1097e1 Bug fix: Option -mkdir yielded SIGSEGV due to a NULL pointer 2011-01-31 14:05:58 +00:00
b8788e5f9e New -as mkisofs option --old-empty 2011-01-26 21:04:15 +00:00
b4be60ecb3 Followed name change in the yet unstable part of libisofs API 2011-01-26 18:44:24 +00:00
e0bb9195d8 Requiring libisofs-1.0.1 now 2011-01-26 13:32:31 +00:00
96433fd145 New -compliance option old_empty 2011-01-26 13:31:05 +00:00
c4c52cf0e9 New isoburn_igopt_set_extensions() option isoburn_igopt_old_empty 2011-01-26 13:28:42 +00:00
be691d4f81 Mentioned missing mkisofs -old-root functionality in man page 2011-01-19 11:41:45 +00:00
cb0f18cc0a Small change in FAQ wiki text 2011-01-18 21:39:41 +00:00
5b386c57a3 Avoiding <stdint.h> if not available. Trying to use <inttypes.h> in that case. 2011-01-18 15:47:18 +00:00
2e447207a8 Avoiding <stdint.h> if not available. Trying to use <inttypes.h> in that case. 2011-01-18 15:44:44 +00:00
62e5f84fc5 Documented changes and release timestamp 2011-01-17 09:27:09 +00:00
509d00149f Version leap to libisoburn-1.0.1 2011-01-17 09:25:21 +00:00
02e15f015f Updated copyright messages to 2011 2011-01-16 19:33:24 +00:00
e492965b6e Updated partition offset wiki text about --no-emul-toc 2011-01-16 18:28:32 +00:00
896d59c02e Adapted GNU xorriso to version leap libisofs-1.0.1 , libburn-1.0.1 2011-01-16 18:27:08 +00:00
97740ad93d Requiring libisofs-1.0.0 and libburn-1.0.0 now 2011-01-16 18:26:01 +00:00
4f780339e1 Updated change log 2011-01-06 11:11:50 +00:00
01d89bd9bc Changed dialog default -abort_on value to "NEVER" 2011-01-06 11:10:36 +00:00
56aecf2459 Default -abort_on value is now "FAILURE", for dialog it stays "FATAL" 2011-01-04 19:30:49 +00:00
9b88d6220d Mentioned Debian daily and weekly builds as examples of partiton_offset 2010-12-30 22:00:24 +00:00
7340920384 Bug fix: -as mkisofs -print-size did not account for -partition_offset 2010-12-29 10:40:53 +00:00
5f1eac8777 Disabled TOC emulation with -as mkisofs. May be re-enabled by --emul-toc. 2010-12-28 12:33:52 +00:00
633cd2008d Made -print_size take into account the toc emulation on blank overwriteables 2010-12-28 09:32:06 +00:00
0b641cf425 New -as mkisofs option -disallow_dir_id_ext, allow_dir_id_ext is default 2010-12-25 09:43:15 +00:00
77ff5f5cb9 New -compliance option allow_dir_id_ext 2010-12-25 09:28:35 +00:00
59d873c385 New isoburn_igopt_set_relaxed() option isoburn_igopt_allow_dir_id_ext 2010-12-25 09:23:08 +00:00
8262c19e40 New -compliance option iso_9660_level=number 2010-12-25 07:15:36 +00:00
96455fcf56 Requiring libisofs-0.6.41 now 2010-12-25 07:12:15 +00:00
ee4ba9d033 Mentioned ISO 9660 level 3 in libisoburn API 2010-12-24 13:55:17 +00:00
6e17a979e5 New q in faq 2010-12-24 13:35:28 +00:00
3cbf74b32e New -compliance option iso_9660_1999, -as mkisofs option -iso-level 4 2010-12-23 19:01:42 +00:00
86fb1eb0cf Took source file of libburnia-project.org/wiki/FAQ into SVN 2010-12-23 14:02:01 +00:00
3ef177f1c9 New -as mkisofs option -untranslated_name_len 2010-12-22 15:15:47 +00:00
18f1f0a8f9 New -compliance options untranslated_names , untranslated_name_len= 2010-12-22 13:39:55 +00:00
2e64464c7c New API call isoburn_igopt_set_untranslated_name_len() 2010-12-22 13:37:47 +00:00
4803a31fa4 Prepending ./configure generated options to CFLAGS rather than appending them 2010-12-13 12:32:33 +00:00
9351707d83 Documented changes and release timestamp 2010-12-12 12:19:13 +00:00
03b709cb1f Version leap to libisoburn-0.6.7 2010-12-12 12:17:41 +00:00
5427d7a8f2 Clarification about -md5, -check_media and -find ... -damaged 2010-12-11 08:28:23 +00:00
4cdd884731 Adapted GNU xorriso to version leap libisofs-0.6.41 2010-12-10 12:36:47 +00:00
d50095d2a6 Requiring libisofs-0.6.40 now 2010-12-10 12:35:44 +00:00
7ff3d65b9b GNU xorriso version leap to libburn-0.9.1 2010-12-08 19:44:49 +00:00
70e52f1a0c Fixed a bug introduced with rev 3501 2010-12-08 19:43:34 +00:00
4f53ed4630 Fixed a potential bug introduced with rev 3497 2010-12-08 19:42:42 +00:00
1f3b601563 Made -rom_toc_scan emul_off work with -mount ... sbsector ... 2010-12-07 17:49:29 +00:00
496fc70540 Allowed writing with read displacement if target media is blank 2010-12-06 09:44:02 +00:00
6ad24ea94b Preliminarily banned writing while read displacement is non-zero 2010-12-04 17:44:40 +00:00
a08a54913b Fixed a bug about read displacement introduced with rev 3490 2010-12-04 17:43:30 +00:00
025d6f2ee6 New action estimate_size for -find and -findx 2010-12-02 11:10:39 +00:00
65fdba8884 No -rollback in -as mkisofs -print-size. New flag in Xorriso_change_is_pending. 2010-12-02 06:32:31 +00:00
8ad6bff397 Clarified description of isoburn_ropt_set_displacement() 2010-12-01 16:47:50 +00:00
79feaa7fd5 Clarified occasions of -mark message and removed surplus -mark message emitter 2010-11-30 17:01:26 +00:00
4897fc74f1 Processing output of -as mkisofs by -pkt_output if enabled 2010-11-30 11:20:59 +00:00
07c2bb8421 Improved messages at the end of partially failed -extract runs 2010-11-30 10:47:30 +00:00
692a675329 New option -displacement 2010-11-30 09:43:32 +00:00
668e58761b New API calls isoburn_ropt_set_displacement(), isoburn_ropt_get_displacement() 2010-11-30 09:39:44 +00:00
82bff299ec Requiring libisofs-0.6.39 now 2010-11-27 13:47:12 +00:00
75fc1989db Making use of isoburn_igopt_will_cancel with xorriso -print_size 2010-11-24 10:11:15 +00:00
da0d20731d New pseudo extension isoburn_igopt_will_cancel to avoid MISHAP event 2010-11-24 10:08:56 +00:00
06c84ae7b0 Avoided to bother libjte if no output paths are given 2010-11-23 20:04:08 +00:00
bc9d6ae59c Improved behavior with loading multiple boot images of identical content 2010-11-23 19:37:19 +00:00
9836991217 Included jigdo-gen-md5-list in GNU xorriso 2010-11-21 06:57:49 +00:00
5ca5d2e34b Declared that isoburn_cancel_prepared_write() waits until iso write thread ends 2010-11-06 13:35:16 +00:00
64e43541db Documentation changes of rev 3480 2010-11-05 15:19:25 +00:00
4dde2a206b New bootspec sparc_label=, new -as mkisofs options -sparc-boot , -sparc-label 2010-11-05 14:46:34 +00:00
f18e352251 New API calls isoburn_igopt_set_disc_label(), isoburn_igopt_get_disc_label() 2010-11-05 14:39:36 +00:00
f479c73940 Testing for abort file during -check_media 2010-11-03 08:11:45 +00:00
9ddb91d3ea Allowed to perform -rm_r / 2010-11-01 19:15:59 +00:00
a7e8b474d7 Added necessary isoburn_cancel_prepared_write() calls 2010-10-29 16:45:20 +00:00
6019f0fae1 New -as mkisofs option -joliet-long 2010-10-27 06:38:29 +00:00
b952833d17 Bug fix: -as mkisofs -print-size printed the size but also produced ISO image 2010-10-27 06:36:44 +00:00
cc92cbf239 Documented changes and release timestamp 2010-10-26 10:49:50 +00:00
aefa04dd6a Version leap to libisoburn-0.6.5 2010-10-26 10:48:18 +00:00
5deefe053b Adapted GNU xorriso to version leap libisofs-0.6.39 2010-10-23 16:23:27 +00:00
5f798e535b Requiring libisofs-0.6.38 now 2010-10-23 16:22:38 +00:00
2e7d10b6b7 Corrected -check_media handling of last track on BD-R resp. BD-ROM 2010-10-21 18:04:07 +00:00
d4872c7d83 Requiring libburn-0.8.8 now 2010-10-20 17:06:07 +00:00
32a7b0fd4d Version leap to libburn-0.8.9 2010-10-20 17:04:51 +00:00
61e803a3a7 Cancelling libisofs write thread in case of early libburn end 2010-10-20 07:52:47 +00:00
47d6c59b26 Avoiding potential endless write pacifier loop. Introduced with rev 3432. 2010-10-19 17:07:21 +00:00
ae886b6154 Minor adjustments 2010-10-19 10:48:37 +00:00
b16dfb5cad New option -append_partition, -as mkisofs -append_partition 2010-10-18 21:22:23 +00:00
caffd6c7da New option -append_partition, -as mkisofs -append_partition 2010-10-18 16:01:49 +00:00
38e1dc8a22 New API calls isoburn_igopt_set_partition_img, isoburn_igopt_get_partition_img 2010-10-18 15:54:46 +00:00
25f1eab3ac United macro Xorriso_jte_standalonE with macro Xorriso_standalonE 2010-10-15 12:55:03 +00:00
b7030ca35b Included libjte in GNU xorriso 2010-10-15 12:16:12 +00:00
3ff054d60f -boot_image mipsel_path= , -as mkisofs -mipsel-boot. 2010-10-15 11:21:30 +00:00
3abcb244c7 Polished and documented MIPS booting option 2010-10-13 17:07:05 +00:00
97415e3f63 Lifted the ban to combine MIPS Big Endian boot with El Torito 2010-10-12 18:31:54 +00:00
2e956586c1 Provisorily: -boot_image mips_path= , -as mkisofs -mips-boot. No Eltorito then. 2010-10-12 10:32:22 +00:00
e7992747e5 Allowed to set System Area type via isoburn_igopt_set_system_area() 2010-10-12 10:30:47 +00:00
7019473212 Removed unrelated copyright statements from libisoburn COPYRIGHT 2010-10-08 11:33:47 +00:00
0b175bab97 Fixed inability to compile without enabled libjte. Introduced by rev 3429. 2010-10-08 09:34:07 +00:00
ba0871a814 Corrected compile problems introduced with rev 3433 2010-10-07 18:13:58 +00:00
399cbf6d66 Enhanced xorriso docs about meaning of .md5 file addresses 2010-10-07 17:53:54 +00:00
55c8f1d964 Preparing for GNU xorriso to include libjte source 2010-10-07 11:49:41 +00:00
82941f4c99 Fixed a theoretically possible race condition of burn end and ISO generator end 2010-10-06 16:30:54 +00:00
b70f5a9041 Fixed a potential SIGSEGV by pointer offset -1. Detected by valgrind. 2010-10-05 18:00:52 +00:00
96ee0fae23 Reporting libjte version with option -version 2010-10-04 15:52:50 +00:00
0159052d92 Tests for version of libjte, new API call isoburn_libjte_req() 2010-10-04 15:51:37 +00:00
f46bcf9d5f Silenced compiler warning about unused variable 2010-10-04 11:32:04 +00:00
e942108ad7 Enabled use of libjte message list 2010-10-04 11:22:58 +00:00
25460413ce Corrected xorriso docs about meaning of -jigdo-map and .md5 file addresses 2010-10-03 17:15:08 +00:00
9b788a2c32 Reacting with FATAL event on failure to create libjte_handle 2010-10-03 17:13:25 +00:00
0b263e8c78 Forgot to commit ChangeLog 2010-10-03 08:26:34 +00:00
851dd76849 New -as mkisofs options -checksum_algorithm_iso, -checksum_algorithm_template 2010-10-03 08:23:32 +00:00
5a3acfc41a Letting libisofs do the padding with -jigdo, rather than disabling padding 2010-10-02 21:03:29 +00:00
147ef216ce New API call isoburn_igopt_set_tail_blocks() 2010-10-02 21:00:49 +00:00
c41c83b279 Requiring libisofs-0.6.37 now 2010-10-02 16:43:28 +00:00
68dc026cf9 Added a blank to xorriso Preparer Id string 2010-10-02 15:03:02 +00:00
6f2aac75ce New -as mkisofs option -jigdo-template-compress 2010-10-02 12:12:13 +00:00
3bec7c5c77 Made two non-public parameters independent of Xorriso_with_libjtE 2010-10-01 19:02:57 +00:00
4c81b329ef Switched from old libjte API names to new ones 2010-09-30 07:42:32 +00:00
daebb44722 Enabled -status -jigdo 2010-09-29 16:41:48 +00:00
54a493f382 New option -jigdo 2010-09-29 15:28:57 +00:00
e4ef8c6582 Avoided trailing 64 kB alignment with -compliance no_emul_toc 2010-09-29 12:44:49 +00:00
d02bd410b3 Enabled use of libjte for GNU xorriso 2010-09-29 09:25:59 +00:00
7b4bd76d9b New -as mkisofs options -jigdo-* and -md5-list as of genisoimage 2010-09-29 09:24:20 +00:00
538b70068f New API calls isoburn_igopt_attach_jte() and isoburn_igopt_detach_jte() 2010-09-29 09:16:04 +00:00
d5583ce58c Updated partition offset wike about GRUB experiment 2010-09-29 08:55:30 +00:00
be11642977 Reporting BD spare area info with -list_formats 2010-09-24 11:09:09 +00:00
4fd78f9049 Requiring libburn-0.8.7 now 2010-09-24 11:07:57 +00:00
d02d8642b9 Explaining the partition offset feature 2010-09-23 13:56:22 +00:00
b86abe8c65 Mentioned --disable-ldconfig-at-install 2010-09-22 10:56:52 +00:00
41d0d1c03f On Linux: More tolerance towards failures of ldconfig 2010-09-21 15:03:56 +00:00
4b3a671d27 On Linux: Run ldconfig during make install,if not --disable-ldconfig-at-install 2010-09-21 14:25:46 +00:00
aeaa715d8d Documented changes and release timestamp 2010-09-19 15:08:36 +00:00
641b696764 Fixed a bug with uninitialized variable introduced by rev 3364 2010-09-19 13:54:45 +00:00
c2ff24cf89 Version leap to libisoburn-0.6.3 2010-09-19 13:53:42 +00:00
69 changed files with 13737 additions and 1332 deletions

View File

@ -1,12 +1,8 @@
Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
libisoburn is Copyright (C) 2007-2010 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2010 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2010 Vreixo Formoso, Mario Danic
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
and Copyright (C) 2006-2010 Mario Danic, Thomas Schmitt
libisoburn is Copyright (C) 2007-2011 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2011 Thomas Schmitt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2

View File

@ -1,3 +1,96 @@
libisoburn-1.0.8.pl00.tar.gz Thu Apr 14 2011
===============================================================================
* Bug fix: mkisofs emulation could ignore options (regression in 0.1.6)
libisoburn-1.0.6.pl00.tar.gz Sat Apr 9 2011
===============================================================================
* Bug fix: -as mkisofs padding did not work (regression in 1.0.4)
* Bug fix: Options -gid and -uid had no effect
* New API call isoburn_set_truncate()
* New relax option isoburn_igopt_joliet_long_names
* New option -early_stdio_test
* New options -print_info and -print_mark
* New -compliance option joliet_long_names
* -as mkisofs option -joliet-long is now fully functional
* Burning DVD-R DAO with 2 kB size granularity rather than 32 kB
libisoburn-1.0.4.pl00.tar.gz Thu Mar 10 2011
===============================================================================
libisoburn novelties:
* New isoburn_ropt_set_extensions() option isoburn_ropt_nomd5tag
xorriso novelties:
* Bug fix: xorrisofs did not work under growisofs -M (version 1.0.0 was ok)
* Bug fix: -as mkisofs -C attempted to read volume header of blank media
* Bug fix: -as mkisofs -old-root did not work with -graft-points
* Bug fix: -as mkisofs -partition_hd_cyl had no effect
* Bug fix: -as mkisofs did not properly unescape target part of pathspecs
* Bug fix: isohybrid image size was not aligned to cylinder boundary
* Bug fix: Compilation without zlib failed
* New -padding modes "included" and "appended"
* New bootspec partition_cyl_align=, new -as mkisofs option -partition_cyl_align
* New -as mkisofs and -as cdrecord option --no_rc
* Own man page and info document for xorrisofs
libisoburn-1.0.2.pl00.tar.gz Mon Feb 23 2011
===============================================================================
libisoburn novelties:
* Removed compiler obstacles of GNU xorriso on Solaris 9
* New isoburn_igopt_set_extensions() option isoburn_igopt_old_empty
xorriso novelties:
* Bug fix: Images produced with -for_backup might be unreadable and
also fail -check_md5 verification.
* Bug fix: mkisofs emulation options -l , -full-iso9660-filenames did not work.
* Bug fix: Option -mkdir yielded SIGSEGV due to a NULL pointer
* Bug fix: ECMA-119 standards violation with Volume Descriptor Set Terminator
* New options -clone and -cp_clone
* New -find actions update_merge, rm_merge, clear_merge
* New -as mkisofs option -max-iso9660-filenames
* New -as mkisofs option --old-empty
* New -as mkisofs options -root , -old-root
* New -as mkisofs options --old-root-no-md5, --old-root-no-ino, --old-root-dev
libisoburn-1.0.0.pl00.tar.gz Mon Jan 17 2011
===============================================================================
libisoburn novelties:
* New API call isoburn_igopt_set_untranslated_name_len()
xorriso novelties:
* Bug fix: -as mkisofs -print-size did not account for -partition_offset
* Default -abort_on value is now "FAILURE" with batch and "NEVER" with dialog
* New -compliance options untranslated_names , untranslated_name_len=
* New -as mkisofs option -untranslated_name_len
* New -compliance option iso_9660_1999, -as mkisofs option -iso-level 4
* New -compliance option iso_9660_level=number
* New -compliance option allow_dir_id_ext, -as mkisofs -disallow_dir_id_ext
* Disabled TOC emulation with -as mkisofs. May be re-enabled by --emul-toc.
libisoburn-0.6.6.pl00.tar.gz Sun Dec 12 2010
===============================================================================
libisoburn novelties:
* New API calls isoburn_igopt_set_disc_label(), isoburn_igopt_get_disc_label()
* New API calls isoburn_ropt_set_displacement(), isoburn_ropt_get_displacement()
xorriso novelties:
* Bug fix: -as mkisofs -print-size printed the size but also produced ISO image
* Build problem fix on Linux 2.4 in GNU xorriso libjte/checksum.c
* New -as mkisofs option -joliet-long
* New bootspec sparc_label=, new -as mkisofs options -sparc-boot , -sparc-label
* New option -displacement
libisoburn-0.6.4.pl00.tar.gz Tue Oct 26 2010
===============================================================================
libisoburn novelties:
* New API call isoburn_libjte_req()
* New API calls isoburn_igopt_attach_jte() and isoburn_igopt_detach_jte()
* New API call isoburn_igopt_set_tail_blocks()
* New API call isoburn_libjte_req()
xorriso novelties:
* New option -jigdo
* New -as mkisofs options -jigdo-* and -md5-list as of genisoimage
* New -as mkisofs options -checksum_algorithm_iso, -checksum_algorithm_template
* New bootspecs mips_path= and mipsel_path= for Debian MIPS releases
* New -as mkisofs options -mips-boot and -mipsel-boot
* New option -append_partition, -as mkisofs -append_partition
libisoburn-0.6.2.pl00.tar.gz Sat Sep 18 2010
===============================================================================
libisoburn novelties:
@ -27,7 +120,7 @@ xorriso novelties:
* New -as mkisofs option --boot-catalog-hide
* New option -hide, -find action -hide, -find test -hidden
* New -boot_image bootspec cat_hidden=on
* New options -copright_file , -biblio_file , -abstract_file
* New options -copyright_file , -biblio_file , -abstract_file
* New find test -disk_name
* Enabled use of libreadline on Solaris
* Bug fix: -check_media patch_lba0= could install wrong image size

View File

@ -129,6 +129,7 @@ install-exec-hook:
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
$(LIBBURNIA_LDCONFIG_CMD) "$(DESTDIR)$(libdir)" || echo 'NOTE: Explicite dynamic library configuration failed. If needed, configure manually for:' "$(DESTDIR)$(libdir)"
# Alternative to the disabled .PHONY above.
@ -218,15 +219,21 @@ indent: $(indent_files)
nodist_pkgconfig_DATA = \
libisoburn-1.pc
man_MANS = xorriso/xorriso.1
man_MANS = \
xorriso/xorriso.1 \
xorriso/xorrisofs.1
info_TEXINFOS = xorriso/xorriso.texi
info_TEXINFOS = \
xorriso/xorriso.texi \
xorriso/xorrisofs.texi
EXTRA_DIST = \
libisoburn-1.pc.in \
version.h.in \
doc/comments \
doc/doxygen.conf.in \
doc/partition_offset.wiki \
doc/startup_file.txt \
README \
AUTHORS \
CONTRIBUTORS \

26
README
View File

@ -4,8 +4,8 @@
libisoburn and xorriso. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org.
http://files.libburnia-project.org/releases/libisoburn-0.6.2.pl00.tar.gz
Copyright (C) 2006-2010 Vreixo Formoso, Thomas Schmitt.
http://files.libburnia-project.org/releases/libisoburn-1.0.8.pl00.tar.gz
Copyright (C) 2006-2011 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2 or later.
------------------------------------------------------------------------------
@ -34,17 +34,17 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.6.2 :
- libburn.so.4 , version libburn-0.8.4 or higher
- libisofs.so.6 , version libisofs-0.6.36 or higher
Dynamic library and compile time header requirements for libisoburn-1.0.8 :
- libburn.so.4 , version libburn-1.0.6 or higher
- libisofs.so.6 , version libisofs-1.0.6 or higher
libisoburn and xorriso will not start with libraries which are older than their
include headers seen at compile time.
Obtain libisoburn-0.6.2.pl00.tar.gz, take it to a directory of your choice
Obtain libisoburn-1.0.8.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.6.2.pl00.tar.gz
cd libisoburn-0.6.2
tar xzf libisoburn-1.0.8.pl00.tar.gz
cd libisoburn-1.0.8
Within that directory execute:
@ -55,9 +55,13 @@ Then become superuser and execute
make install
which will make available libisoburn.so.1 and the program xorriso.
On GNU/Linux it will try to run program ldconfig with the library installation
directory as only argument. Failure to do so will not abort installation.
One may disable ldconfig by ./configure option --disable-ldconfig-at-install .
By use of a version script, the libisoburn.so library exposes no other function
names but those of the API definitions in <libsoburn/libisoburn.h> and
names but those of the API definitions in <libisoburn/libisoburn.h> and
<libisoburn/xorriso.h>.
If -Wl,--version-script=... makes problems with the local compiler, then
disable this encapsulation feature by
@ -77,6 +81,7 @@ xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
After installation documentation is available via
man xorriso
man xorrisofs
Several alias links point to the xorriso binary:
xorrisofs starts xorriso with -as mkisofs emulation already enabled
@ -92,6 +97,7 @@ Other deliberate dependency reduction options of ./configure are:
--disable-libacl avoid use of ACL functions like acl_to_text()
--disable-xattr avoid use of xattr functions like listxattr()
--disable-zlib avoid use of zlib functions like compress2()
--disable-libjte avoid use of libjte for -jigdo command
xorriso allows to use external processes as file content filters. This is
a potential security risk which may be avoided by ./configure option
@ -219,7 +225,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
Copyright (C) 2006-2011 Mario Danic, Vreixo Formoso, Thomas Schmitt.
We will not raise any legal protest to dynamic linking of our libraries
with applications that are not under GPL, as long as they fulfill

View File

@ -18,10 +18,12 @@ AC_DEFUN([TARGET_SHIZZLE],
AC_MSG_CHECKING([target operating system])
LIBBURNIA_LDCONFIG_CMD="echo 'No ldconfig run performed. If needed, configure manually for:'"
case $target in
*-*-linux*)
ARCH=linux
LIBBURN_ARCH_LIBS=
LIBBURNIA_LDCONFIG_CMD=ldconfig
;;
*-*-freebsd*)
ARCH=freebsd

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.6.2], [http://libburnia-project.org])
AC_INIT([libisoburn], [1.0.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -21,9 +21,9 @@ dnl configure.ac only rules the libtool revision numbering about
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=6
ISOBURN_MICRO_VERSION=2
ISOBURN_MAJOR_VERSION=1
ISOBURN_MINOR_VERSION=0
ISOBURN_MICRO_VERSION=8
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
@ -36,16 +36,16 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE
dnl
dnl ts B00918
dnl This is the release version 0.6.2 = libisoburn.so.1.51.0
dnl ts B10414
dnl This is the release version 1.0.8 = libisoburn.so.1.65.0
dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 52 - 51 = 1 . Library name = libisoburn.so.1.51.0
dnl SONAME = 66 - 65 = 1 . Library name = libisoburn.so.1.65.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=52
LT_AGE=51
LT_CURRENT=66
LT_AGE=65
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -195,6 +195,17 @@ else
fi
AC_SUBST(ZLIB_DEF)
dnl ts B00928
AC_ARG_ENABLE(libjte,
[ --enable-libjte Enable use of libjte by xorriso, default=yes],
, enable_libjte=yes)
if test "x$enable_libjte" = xyes; then
LIBJTE_DEF="-DXorriso_with_libjtE"
AC_CHECK_HEADER(libjte/libjte.h, AC_CHECK_LIB(jte, libjte_new, , LIBJTE_DEF= ), LIBJTE_DEF= )
else
LIBJTE_DEF=
fi
AC_SUBST(LIBJTE_DEF)
dnl ts B00107
dnl Just for the case that it is necessary to give link option -lcdio not only
@ -241,7 +252,7 @@ AC_SUBST(EXTF_SUID_DEF)
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for xorriso DVD/BD writing, default=no],
, enable_fifo_odirect=no)
, enable_dvd_obs_64=no)
if test x$enable_dvd_obs_64k = xyes; then
XORRISO_DVD_OBS_64K="-DXorriso_dvd_obs_default_64K"
echo "enabled xorriso write size default 64 KB on DVD and BD"
@ -271,6 +282,19 @@ else
echo "disabled strict symbol encapsulation"
fi
AC_ARG_ENABLE(ldconfig-at-install,
[ --enable-ldconfig-at-install On GNU/Linux run ldconfig, default=yes],
, ldconfig_at_install=yes)
if test x$ldconfig_at_install = xyes; then
dummy=dummy
else
LIBBURNIA_LDCONFIG_CMD="echo 'NOTE: ldconfig is disabled. If needed, configure manually for:'"
echo "disabled run of ldconfig during installation on GNU/Linux"
fi
AC_SUBST(LIBBURNIA_LDCONFIG_CMD)
AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
@ -278,8 +302,8 @@ AC_CHECK_HEADER(libisofs/libisofs.h)
# ------- Visible mark in configure : Start of library check
dnl Check for proper library versions
LIBBURN_REQUIRED=0.8.4
LIBISOFS_REQUIRED=0.6.36
LIBBURN_REQUIRED=1.0.6
LIBISOFS_REQUIRED=1.0.6
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
@ -309,18 +333,18 @@ AC_ARG_ENABLE(debug,
, enable_debug=yes)
if test x$enable_debug != xyes; then
if test x$GCC = xyes; then
CFLAGS="$CFLAGS -O3"
CFLAGS="$CFLAGS -fexpensive-optimizations"
CFLAGS="-O3 $CFLAGS"
CFLAGS="-fexpensive-optimizations $CFLAGS"
fi
CFLAGS="$CFLAGS -DNDEBUG"
CFLAGS="-DNDEBUG $CFLAGS"
else
if test x$GCC = xyes; then
CFLAGS="$CFLAGS -g -pedantic -Wall"
CFLAGS="-g -pedantic -Wall $CFLAGS"
fi
CFLAGS="$CFLAGS -DDEBUG"
CFLAGS="-DDEBUG $CFLAGS"
fi
CFLAGS="$CFLAGS $READLINE_DEF $LIBACL_DEF $XATTR_DEF $EXTF_DEF $EXTF_SUID_DEF $ZLIB_DEF $XORRISO_DVD_OBS_64K"
CFLAGS="$READLINE_DEF $LIBACL_DEF $XATTR_DEF $EXTF_DEF $EXTF_SUID_DEF $ZLIB_DEF $LIBJTE_DEF $XORRISO_DVD_OBS_64K $CFLAGS"
AC_CONFIG_FILES([
Makefile

232
doc/faq.wiki Normal file
View File

@ -0,0 +1,232 @@
'''Libburnia Frequently Asked Questions'''
Please post your questions to
[http://mailman-mail1.webfaction.com/listinfo/libburn-hackers/ libburn-hackers mailing list].
----------------------------------------------------------------------------
'''Content:'''
----------------------------------------------------------------------------
Burning:
[#diff_cdrskin_xorriso What is the difference between cdrskin and xorriso ?]
Imaging:
[#edit_files Is there a way to edit files inside the ISO image ?]
[#boot_arch For which architectures xorriso is able to create bootable images ?]
[#isohybrid How to enable booting from USB stick ?]
[#partition_offset What is partition offset feature all about?]
Development:
[#api_specs Where are the APIs of libburnia libraries described ?]
[#gui_advise I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ?]
Miscellaneous:
[#example_links Where to see examples ?]
[#xorriso_aliases What personalities are supported by xorriso ?]
[#xorriso_dialog_mode What is xorriso dialog mode useful for ?]
[#version_numbers Why is every second release missing ?]
----------------------------------------------------------------------------
'''Burning'''
----------------------------------------------------------------------------
===== What is the difference between cdrskin and xorriso ? ===== #diff_cdrskin_xorriso
[wiki:Cdrskin cdrskin] is a dedicated emulator of program cdrecord, based on
libburn. It tries to be as similar to cdrecord as is possible under that
premise.
[wiki:Xorriso xorriso] is an integrated tool which creates, loads, manipulates,
and writes ISO 9660 filesystem images with Rock Ridge extensions.
It is based on libburn, libisofs, and libisoburn. One of its features is
the emulation of the corresponding tasks as done by mkisofs and cdrecord.
----------------------------------------------------------------------------
'''Imaging'''
----------------------------------------------------------------------------
===== Is there a way to edit files inside the ISO image ? ===== #edit_files
File content cannot be altered. But files may be replaced by new copies from
the disk filesystem.
The main method of manipulating an existing ISO image is to append a session
with a new complete directory tree and the file content of the added or
overwritten files. Depending on the media type you get gaps between sessions
of up to 20 MB. So better try to do all foreseeable changes by one add-on
session.
===== For which architectures xorriso is able to create bootable images ? ===== #boot_arch
Currently it supports systems with PC-BIOS via El Torito for booting from
CD, DVD, or BD media, and via MBR for booting from memory sticks or hard
disks. Further it supports machines with MIPS processor from SGI (Big Endian)
and DEC (Little Endian), and SUN SPARC machines.
(See [http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/doc/boot_sectors.txt libisofs/doc/boot_sectors.txt]
for technical details.)
Machines which support EFI may either boot via El Torito or use the files
of the ISO image directly. It is possible to append to the ISO image a
writeable FAT12 partition where files for EFI may be stored and changed.
===== How to enable booting from USB stick ? ===== #isohybrid
The ISOLINUX boot loader is normally started from CD, DVD or BD media
by a PC-BIOS via an El Torito boot record. But if the ISO image resides on an
USB stick or another hard-disk-like device, then PC-BIOS ignores El Torito
and rather expects a Master Boot Record (MBR). Both boot record types can
reside in the same ISO image. Therefore it is possible to create an MBR that
starts the boot image file of ISOLINUX which is already target of the El Torito
boot record. This kind of MBR is called "isohybrid". ISOLINUX provides
a program named isohybrid to patch existing images, but libisofs can create an
MBR already when producing the ISO image. See in
[http://www.gnu.org/software/xorriso/man_1_xorriso.html manual page of xorriso]
option -boot_image with arguments "isolinux" "system_area=",
and -as mkisofs option -isohybrid-mbr.
See [http://en.wikipedia.org/wiki/Master_boot_record Wikipedia on MBR] for
general information about PC-DOS Master Boot Records, and
[http://syslinux.zytor.com/wiki/index.php/ISOLINUX ISOLINUX wiki] for special
information about ISOLINUX. The wiki example with mkisofs can be performed
as well by help of xorriso option -as mkisofs.
A similar combination of El Torito and MBR is created by GRUB2 tool
grub-mkrescue. See [http://www.gnu.org/software/grub/ homepage of GNU GRUB 2]
for general information.
===== What is partition offset feature all about? ===== #partition_offset
If an MBR is present, then it contains a partition table with up to four
entries. The MBR is located at the very start of the ISO image. By
tradition the first partition should begin only after the range of MBR and
eventual supporting data blocks. On hard disk one often sees partition 1
starting at byte 63*512. Further it is tradition that the payload filesystem
is mountable via one of the partitions.
The isohybrid MBR has its only partition start at byte 0. Thus it is mountable
but does not obey the tradition to begin only after the MBR. The grub-mkrescue
MBR on the other hand has partition 1 start at byte 512, which makes it
unmountable. Only the unpartitioned base device can be mounted. (On GNU/Linux
e.g. /dev/sdb is the base device whereas /dev/sdb1 is partition 1.)
The compromise offered by libisofs is to create a second superblock at
address 16*2048 and to let start partition 1 at this address. The second
superblock leads to a second directory tree which takes into account the
address difference between partition 1 and the base device. So the image
gets mountable via both devices and reserves 32 kB for boot manager software
where it eventually can manipulate and augment the MBR.
(See [http://libburnia-project.org/wiki/PartitionOffset Partition Offset Wiki]
for examples.)
----------------------------------------------------------------------------
'''Developing'''
----------------------------------------------------------------------------
===== Where are the APIs of libburnia libraries described ? ===== #api_specs
The decisive references are the inclusion headers of the libraries
<libburn/libburn.h>, <libisofs/libisofs.h>, <libisoburn/libisoburn.h>,
and <libisoburn/xorriso.h>.
Current SVN versions of these files:
[http://libburnia-project.org/browser/libburn/trunk/libburn/libburn.h libburn/libburn.h] ,
[http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/libisofs/libisofs.h libisofs/libisofs.h] ,
[http://libburnia-project.org/browser/libisoburn/trunk/libisoburn/libisoburn.h libisoburn/libisoburn.h] ,
[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h libisoburn/xorriso.h]
Doxygen generated API descriptions at
[http://api.libburnia-project.org api.libburnia-project.org]
might be slightly behind the latest developments.
===== I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ? ===== #gui_advise
Most appreciated would be a GUI for xorriso which allows to copy files from
a view of the hard disk filesystem to a view of the ISO filesystem, and vice
versa. The xorriso implementation is located inside libisoburn.
Each option that is described in
[http://www.gnu.org/software/xorriso/man_1_xorriso.html man 1 xorriso]
can be performed by a corresponding C function that is defined in
[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h xorriso.h].
Further there are calls for library startup and shutdown, for problem
handling, and for the interpreters of xorriso's command line interface.
The xorriso API encapsulates calls to libisofs, libburn, and libisoburn.
An alternative to the xorriso C API is xorriso dialog mode.
[#xorriso_dialog_mode See below.]
The known existing GUIs [http://www.xfce.org/projects/xfburn/ Xfburn],
[http://projects.gnome.org/brasero/ Brasero],
[http://flburn.sourceforge.net/ FlBurn]
rather use libisofs and libburn directly.
(Please submit an URI if you want your libburnia GUI application mentioned
here.)
----------------------------------------------------------------------------
'''Miscellaneous'''
----------------------------------------------------------------------------
===== Where to see examples ? ===== #example_links
[http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES xorriso examples] ,
[http://scdbackup.sourceforge.net/man_1_cdrskin_devel.html#EXAMPLES cdrskin examples] ,
[http://libburnia-project.org/browser/libburn/trunk/test/libburner.c libburner.c a minimal but complete burn program]
(also illustrated at the end of [http://api.libburnia-project.org/libburn/ libburn API intro]).
===== What personalities are supported by xorriso ? ===== #xorriso_aliases
The name by which xorriso is started may trigger certain features which
normally would need to be enabled by program options.
xorrisofs starts up in mkisofs emulation mode, which otherwise would have to
be entered by command -as "mkisofs".
xorrecord starts up in cdrecord emulation mode, which is normally entered by
command -as "cdrecord". This emulation is only able to write a single data
track as new session to blank or appendable media. No audio. No multiple
tracks in one session.
osirrox allows to copy files from ISO image to disk and to apply option -mount
to one or more of the existing ISO sessions. This is normally enabled by
option -osirrox "on:o_excl_off".
===== What is xorriso dialog mode useful for ? ===== #xorriso_dialog_mode
Dialog mode is initiated if -dialog "on" is among the program arguments.
It can be used to inspect and exploit existing ISO 9660 images or
to explore xorriso's behavior in order to develop the command sequence
for a batch run.
Frontend programmers may fork xorriso initiating a xorriso dialog session
(-dialog "on" -use_readline "off" -pkt_output "on" -mark "done"),
and interact with it from their own program via pipes connected to
xorriso's stdin and stdout. This is more efficient than forking xorriso
every now and then to perform various commands in order to complete
complex tasks like image size prediction.
===== Why is every second release missing ? ===== #version_numbers
Releases have an even third version number. Like 0.5.6 or 1.0.4.
During development the next higher odd number is used. E.g. 0.5.7 or 1.0.5.
The content of release tarballs does not get changed without changing
their name. The development tarballs of xorriso and cdrskin may change
their content without notice.
----------------------------------------------------------------------------
Site maintainer: Do not edit this wiki directly but rather the SVN version
of libisoburn/trunk/doc/faq.wiki. When done, paste it into the wiki editor.

222
doc/partition_offset.wiki Normal file
View File

@ -0,0 +1,222 @@
The partition offset feature of libisofs can produce ISO 9660 images which bear
a quite conventional partition table if copied onto a USB stick. The first
partition marks the size of the ISO image but starts at a non-zero address.
Thus it marks a small part of the device as unclaimed by partitions and
available for storing boot loader code.
Nevertheless the USB stick is mountable via its overall device file as well as
via the partition device file. E.g. on GNU/Linux: /dev/sdb and /dev/sdb1.
This is achieved by two distinct sets of meta-data which refer to the same
file content.
The dual-mount feature supports Rock Ridge and eventually Joliet too.
It is capable of multi-session.
Currently only offset 32 kB seems to make sense. Smaller offsets are prohibited
by fundamental assumptions of libisofs and libisoburn. Larger offsets would
extend the unclaimed area into vital blocks of the ISO image.
--------------------------------------------------------------------------
Meanwhile Debian
[http://cdimage.debian.org/cdimage/daily-builds/daily/current/ daily]
and [http://cdimage.debian.org/cdimage/weekly-builds/ weekly] builds make
use of this feature with their bootable ISO images for i386 and amd64. E.g.
[http://cdimage.debian.org/cdimage/daily-builds/daily/current/i386/iso-cd/debian-testing-i386-businesscard.iso debian-testing-i386-businesscard.iso].
--------------------------------------------------------------------------
Example:
Testing mountability and ISOLINUX bootability from USB stick and CD.
Overview:
The test image was derived from one year old RIPLinux-9.3-non-X.iso which
has an isohybrid MBR. Syslinux version seems to be 3.82. That MBR and the file
tree from the mounted RIPLinux image was used to build a new ISO image
with 16 * 2kB partition offset. Isohybrid MBR patching was done by xorriso.
Details:
The first 32 kB of an ISO 9660 image are called System Area and may host any
byte pattern. In the case of RIPLinux-9.3-non-X.iso only the first 512 bytes
are non-zero. But to avoid any assumptions, all 32 kB get copied here.
{{{
dd if=RIPLinux-9.3-non-X.iso bs=1K count=32 of=RIPLinux-9.3-non-X.sysarea
}}}
Normally the System Area file with its MBR is provided by the Syslinux
installation under the name isohdp[fp]x*.bin .
E.g. /usr/lib/syslinux/isohdpfx.bin
The files of the image are made accessible for reading
{{{
mount -o loop RIPLinux-9.3-non-X.iso /mnt
}}}
A new ISO image gets composed. The first three lines of arguments are taken
from the prescriptions of ISOLINUX wiki and adapted to the names used in
RIPLinux-9.3-non-X.iso.
Option -isohybrid-mbr imports the copied System Area and patches the MBR
according to rules published by hpa on Syslinux mailing list.
Option -partition_offset 16 causes the first partition to start at 2 kB block
number 16. It also prepares the image to be mountable by this partition, too.
{{{
xorriso -as mkisofs \
-o new_image.iso \
-b boot/isolinux/isolinux.bin -c boot/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr RIPLinux-9.3-non-X.sysarea \
-partition_offset 16 \
/mnt
}}}
The image was copied onto a USB stick
{{{
dd if=new_image.iso of=/dev/sdc
}}}
and plugged into a Debian system.
{{{
fdisk -lu /dev/sdb
}}}
yields
{{{
Device Boot Start End Blocks Id System
/dev/sdb1 * 64 120831 60384 17 Hidden HPFS/NTFS
}}}
I can mount /dev/sdb and /dev/sdb1 alike:
{{{
mount /dev/sdb1 /mnt1
mount -o loop /dev/sdb /mnt
}}}
-o loop avoids failure with "mount: /dev/sdb already mounted or /mnt busy".
A comparison by
{{{
diff -r /mnt /mnt1
}}}
reports no difference.
Human readable files look ok.
Test-reading all content by
{{{
tar cf - /mnt | wc
}}}
yields a reasonable byte count of 60743680 and no errors.
The machine boots RIPLinux from this USB stick with no visible problems.
It can then mount /dev/sdb as well as /dev/sdb1.
The ISO image boots from CD too.
Mounting the partition can be simulated with an image file on hard disk by
cutting off the first partition_offset blocks of 2 KB:
{{{
dd if=new_image.iso of=partition_image.iso bs=2048 skip=16
mount -o loop partition_image.iso /mnt1
}}}
--------------------------------------------------------------------------
Another test was made with GRUB 2 by downloading
{{{
bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub
}}}
Before building GRUB 2, the file
{{{
util/grub-mkrescue.in
}}}
was edited to replace in the options of the xorriso command:
{{{
--protective-msdos-label
}}}
by
{{{
-partition_offset 16 -no-pad
}}}
Then GRUB 2 was built and installed.
The resulting image from
{{{
./grub-mkrescue -o image.iso
}}}
was put onto USB stick. It passed the same tests on Debian
as above RIPLinux example. It boots to a GRUB prompt.
Due to option -no-pad the image is about 250 kB smaller than
the image produced by original grub-mkrescue. Else it would have grown by
about 50 kB.
Unpadded ISO images are safe except for burning on CD in TAO mode.
In this case problems may occur with reading the last few data blocks.
So when burning onto CD make sure to require SAO mode and/or to
require padding by 300 KiB.
Burning on DVD or BD needs no such caution. Neither does copying
on USB stick or hard disk.
Program fdisk will complain about "different physical/logical" addresses.
This can be silenced by adding option
{{{
-partition_cyl_align on
}}}
at the cost of image padding up to the next full MiB.
E.g. by 402 KiB to 2 MiB.
--------------------------------------------------------------------------
Open questions:
- Shall the partition of an isohybrid image be marked bootable ?
Currently xorriso keeps the 0x80 mark of an eventually imported MBR
resp. the 0x80 mark which xorriso eventually sets by its own MBR
preparations.
- If not to be marked bootable:
What equipment would the partition need to justify having the mark ?
------------------------------------------------------------------------
Application:
The partition offset feature can be controlled by libisofs API calls
{{{
int iso_write_opts_set_part_offset(IsoWriteOpts *opts,
uint32_t block_offset_2k,
int secs_512_per_head,
int heads_per_cyl);
int iso_write_opts_set_system_area(IsoWriteOpts *opts, char data[32768],
int options, int flag);
}}}
resp. by libisoburn calls
{{{
int isoburn_igopt_set_part_offset(struct isoburn_imgen_opts *opts,
uint32_t block_offset_2k,
int secs_512_per_head, int heads_per_cyl);
int isoburn_igopt_get_part_offset(struct isoburn_imgen_opts *opts,
uint32_t *block_offset_2k,
int *secs_512_per_head, int *heads_per_cyl);
int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o,
char data[32768], int options);
int isoburn_igopt_get_system_area(struct isoburn_imgen_opts *o,
char data[32768], int *options);
}}}
resp. by xorriso options
{{{
-boot_image any partition_offset=(2kb_block_adr)
-boot_image any partition_sec_hd=(number)
-boot_image any partition_hd_cyl=(number)
-boot_image any partition_cyl_align(on|auto|off)
-as mkisofs ... -partition_offset (2kb_block_adr) \
-partition_hd_cyl (number) \
-partition_sec_hd (number) \
-partition_cyl_align (on|auto|off) ...
}}}
As stated above, an offset larger than 16 would expose vital parts of the
ISO image as unclaimed space. Values smaller than 16 are not accepted.
So use either an offset of 16 blocks or keep the feature disabled by
offset 0.

22
doc/startup_file.txt Normal file
View File

@ -0,0 +1,22 @@
# This is an example for a xorriso startup file.
# If found at one of the following addresses then its text lines will get
# executed by xorriso as commands before any of its program arguments:
# /etc/default/xorriso
# /etc/opt/xorriso/rc
# /etc/xorriso/xorriso.conf
# $HOME/.xorrisorc
# Note: Command -no_rc as first program argument prevents this execution.
# Disallow the use of hard disk /dev/sda and its partitions as
# pseudo-drive (e.g. as output target of an ISO image).
-drive_class banned /dev/sda*
# Allow the use of /dev/sdb, /dev/sdc, and /dev/sdd as pseudo-drives
# without the prefix "stdio:" which is usually required for device addresses
# which begin by "/dev/" but represent no CD drives.
-drive_class harmless /dev/sd[bcd]

View File

@ -6,7 +6,7 @@
*/
/* libburn wrappers for libisoburn
Copyright 2007 - 2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007 - 2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -31,17 +31,21 @@
#include <time.h>
#include <regex.h>
#ifndef Xorriso_standalonE
#include <libburn/libburn.h>
#include <libisofs/libisofs.h>
#ifdef Xorriso_with_libjtE
#include <libjte/libjte.h>
#endif
#else /* ! Xorriso_standalonE */
#include "../libisofs/libisofs.h"
#include "../libburn/libburn.h"
#ifdef Xorriso_with_libjtE
#include "../libjte/libjte.h"
#endif
#endif /* Xorriso_standalonE */
@ -69,10 +73,10 @@ static int isoburn_emulate_toc(struct burn_drive *d, int flag);
int isoburn_initialize(char msg[1024], int flag)
{
int major, minor, micro, bad_match= 0;
int major, minor, micro, bad_match= 0, no_iso_init= 0;
/* First two ugly compile time checks for header version compatibility.
/* First the ugly compile time checks for header version compatibility.
If everthing matches, then they produce no C code. In case of mismatch,
intentionally faulty C code will be inserted.
*/
@ -108,7 +112,7 @@ int isoburn_initialize(char msg[1024], int flag)
#ifdef Isoburn_libisofs_dot_h_too_olD
LIBISOFS_MISCONFIGURATION = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_c = 0;
LIBISOFS_MISCONFIGURATION_ = 0;
#endif
@ -149,14 +153,62 @@ INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libburn_dot_h_TOO_OLD__SEE_libisobu
LIBBURN_MISCONFIGURATION_ = 0;
#endif
#ifdef Xorriso_with_libjtE
/* The minimum requirement of libisoburn towards the libjte header
at compile time is the same as the one of a usable libisfs itowards libjte.
So the requirement is defined in libisofs/libisofs.h :
iso_libjte_req_major , iso_libjte_req_minor , iso_libjte_req_micro
*/
/* The indendation is an advise of man gcc to help old compilers ignoring */
#if iso_libjte_req_major > LIBJTE_VERSION_MAJOR
#define Libisofs_libjte_dot_h_too_olD 1
#endif
#if iso_libjte_req_major == LIBJTE_VERSION_MAJOR && iso_libjte_req_minor > LIBJTE_VERSION_MINOR
#define Libisofs_libjte_dot_h_too_olD 1
#endif
#if iso_libjte_req_minor == LIBJTE_VERSION_MINOR && iso_libjte_req_micro > LIBJTE_VERSION_MICRO
#define Libisofs_libjte_dot_h_too_olD 1
#endif
#ifdef Libisofs_libjte_dot_h_too_olD
LIBJTE_MISCONFIGURATION = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libjte_dot_h_TOO_OLD__SEE_libisofs_dot_h_AND_burn_wrap.c_c = 0;
LIBJTE_MISCONFIGURATION_ = 0;
#endif
#endif /* Xorriso_with_libjtE */
/* End of ugly compile time tests (scroll up for explanation) */
msg[0]= 0;
if(iso_init()<0) {
sprintf(msg+strlen(msg), "Cannot initialize libisofs\n");
return(0);
#ifdef Xorriso_with_libjtE
libjte__version(&major, &minor, &micro);
sprintf(msg + strlen(msg), "libjte-%d.%d.%d ", major, minor, micro);
if (libjte__is_compatible(LIBJTE_VERSION_MAJOR, LIBJTE_VERSION_MINOR,
LIBJTE_VERSION_MICRO, 0)) {
sprintf(msg+strlen(msg), "ok, ");
} else {
sprintf(msg + strlen(msg),
"- TOO OLD -, need at least libjte-%d.%d.%d ,\n",
LIBJTE_VERSION_MAJOR, LIBJTE_VERSION_MINOR,
LIBJTE_VERSION_MICRO);
bad_match= 1;
no_iso_init= 1; /* iso_init() will fail anyway */
}
#endif /* Xorriso_with_libjtE */
if(!no_iso_init) {
if(iso_init()<0) {
sprintf(msg+strlen(msg), "Cannot initialize libisofs\n");
return(0);
}
}
iso_lib_version(&major, &minor, &micro);
sprintf(msg+strlen(msg), "libisofs-%d.%d.%d ", major, minor, micro);
@ -188,6 +240,7 @@ LIBBURN_MISCONFIGURATION_ = 0;
sprintf(msg+strlen(msg), "Cannot initialize libburn\n");
return(0);
}
burn_version(&major, &minor, &micro);
sprintf(msg+strlen(msg), "libburn-%d.%d.%d ", major, minor, micro);
if(major > burn_header_version_major
@ -233,6 +286,20 @@ int isoburn_libburn_req(int *major, int *minor, int *micro)
}
/* API @since 0.6.4 */
int isoburn_libjte_req(int *major, int *minor, int *micro)
{
#ifdef Xorriso_with_libjtE
*major= LIBJTE_VERSION_MAJOR;
*minor= LIBJTE_VERSION_MINOR;
*micro= LIBJTE_VERSION_MICRO;
#else
*major= *minor= *micro= 0;
#endif /* ! Xorriso_with_libjtE */
return(1);
}
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
char msg_text[], int os_errno,
char severity[], int flag),
@ -277,7 +344,8 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag)
{
int ret, lba, nwa, profile, readonly= 0;
int ret, lba, nwa, profile, readonly= 0, role, random_access;
int emulation_started= 0;
struct burn_multi_caps *caps= NULL;
struct isoburn_toc_entry *t;
char profile_name[80];
@ -316,16 +384,18 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->fabricated_disc_status= BURN_DISC_APPENDABLE;
#endif
if(caps->start_adr)
role= burn_drive_get_drive_role(d);
random_access= caps->start_adr || role == 4;
if(random_access)
(*o)->emulation_mode= 1;
if(caps->start_adr && !readonly) { /* set emulation to overwriteable */
if(random_access && !readonly) { /* set emulation to overwriteable */
ret= isoburn_is_intermediate_dvd_rw(d, 0);
if(ret>0) {
(*o)->min_start_byte= 0;
(*o)->nwa= 0;
(*o)->zero_nwa= 0;
}
if(flag&1) {
if((flag & 1) && role != 4 && role != 5) {
(*o)->nwa= (*o)->zero_nwa;
(*o)->fabricated_disc_status= BURN_DISC_BLANK;
} else {
@ -334,6 +404,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->emulation_mode= -1;
goto ex;
}
emulation_started= 1;
/* try to read emulated toc */
ret= isoburn_emulate_toc(d, flag & 16);
if(ret<0) {
@ -374,6 +445,12 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
if((flag & 16) || track_count >= 2) {
ret= 0; /* toc emulation off, or not overwriteable */
} else {
ret= isoburn_start_emulation(*o, 1);
if(ret<=0) {
(*o)->emulation_mode= -1;
goto ex;
}
emulation_started= 1;
ret= isoburn_emulate_toc(d, 1);
if(ret<0)
goto ex;
@ -386,6 +463,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
CD-R TOC (profile 0x08) can be trusted. Others not.
Do a scan search of ISO headers.
*/
if(!emulation_started) {
ret= isoburn_start_emulation(*o, 1);
if(ret<=0) {
(*o)->emulation_mode= -1;
goto ex;
}
}
ret= isoburn_emulate_toc(d, 1|2);
if(ret<0)
goto ex;
@ -569,7 +653,7 @@ int isoburn_disc_erasable(struct burn_drive *d)
void isoburn_disc_erase(struct burn_drive *drive, int fast)
{
int ret, do_pseudo_blank= 0;
int ret, do_pseudo_blank= 0, role;
struct isoburn *o;
enum burn_disc_status s;
char zero_buffer[Libisoburn_target_head_sizE];
@ -582,7 +666,15 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast)
burn_drive_cancel(drive);
goto ex;
}
role = burn_drive_get_drive_role(drive);
if (role == 5) {
/* libburn will truncate the random-access write-only file
to zero size and change its state */
burn_disc_erase(drive, fast);
o->fabricated_disc_status= burn_disc_get_status(drive);
o->nwa= 0;
goto ex;
}
if(o->emulation_mode > 0) { /* might be readonly with emulated sessions */
ret= burn_disc_get_multi_caps(drive, BURN_WRITE_NONE, &caps, 0);
if(ret > 0 && caps->start_adr)
@ -714,6 +806,29 @@ int isoburn_get_msc2(struct isoburn *o,
return(1);
}
/* @param flag bit0= truncate (else do not truncate)
bit1= do not warn if call is inappropriate to drive
bit2= only set if truncation is currently enabled
*/
int isoburn_set_truncate(struct burn_drive *drive, int flag)
{
int ret;
struct isoburn *o;
ret= isoburn_find_emulator(&o, drive, 0);
if(ret < 0)
return ret;
if(o == NULL) {
if(!(flag & (2 | 4)))
isoburn_msgs_submit(o, 0x00060000,
"Drive type or role is inappropriate for truncation", 0, "WARNING", 0);
return(0);
}
if(o->truncate || !(flag & 4))
o->truncate= flag & 1;
return(1);
}
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
{
@ -762,7 +877,6 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
return;
}
/* end of DVD-RW oriented check */
burn_write_opts_set_start_byte(opts, nwa * (off_t) 2048);
}
}
@ -794,7 +908,7 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
if(o->truncate) {
ret= burn_drive_get_drive_role(drive);
if(ret==2) {
if(ret == 2 || ret == 5) {
ret= burn_drive_d_get_adr(drive, adr);
if(ret>0) {
ret= lstat(adr, &stbuf);
@ -1076,21 +1190,28 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
unsigned char buffer[64*1024];
int ret, info_mode, capacity, role;
off_t data_count, to_read;
enum burn_disc_status s;
info_mode= flag&255;
*image_blocks= 0;
if(flag&(1<<13)) {
memcpy(buffer, info, 64*1024);
} else {
memset(buffer, 0, 64 * 1024);
s= isoburn_disc_get_status(d);
role = burn_drive_get_drive_role(d);
if (role == 3 || role == 5)
/* >>> ??? return always 0 ? */
return(-1*!!(flag&(1<<15)));
ret = burn_get_read_capacity(d, &capacity, 0);
if (ret <= 0 && role == 2) {
if (ret <= 0 && (role == 2 || role == 4)) {
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
capacity = 0x7ffffff0;
ret = 1;
}
memset(buffer, 0, 64 * 1024);
to_read= (off_t) capacity * ((off_t) 2048);
if(ret > 0 && to_read >= (off_t) (36 * 1024)) {
if(to_read >= (off_t) (64 * 1024))
@ -1176,15 +1297,16 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
ret= burn_get_read_capacity(d, &readable_blocks, 0);
if(ret <= 0) {
role = burn_drive_get_drive_role(d);
if (role == 2)
if (role == 2 || role == 4)
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
readable_blocks= 0x7ffffff0; /* try to read anyway */
else
readable_blocks= -1;
}
if(o->fabricated_disc_status == BURN_DISC_BLANK)
{ret= 0; goto failure;}
start_time= last_pacifier= time(NULL);
lba= 0;
@ -1657,6 +1779,7 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
static int max_mode_names= 4;
regex_t re;
regmatch_t match[1];
enum burn_disc_status s;
ret= isoburn_find_emulator(&o, d, 0);
if(ret<0)
@ -1717,6 +1840,14 @@ not_found:;
} else if(adr_mode==3) {
o->fabricated_msc1= adr_num;
s= isoburn_disc_get_status(d);
if(o->fabricated_msc1 > 0 && s != BURN_DISC_FULL
&& s != BURN_DISC_APPENDABLE) {
isoburn_msgs_submit(o, 0x00060000,
"Non-zero load offset given with blank input media",
0, "FAILURE", 0);
ret= 0; goto ex;
}
if((flag & 1) && o->fabricated_msc1 >= 16) {
/* adr_num is possibly 16 blocks too high */
ret= isoburn_read_iso_head(d, o->fabricated_msc1, &size,volid, 1|(1<<14));

View File

@ -64,6 +64,20 @@ struct isoburn_cached_drive {
struct burn_drive *drive;
struct isoburn_cache_tile tiles[Libisoburn_cache_tileS];
int current_age;
/**
Offset to be applied to all block addresses to compensate for an
eventual displacement of the block addresses relative to the image
start block address that was assumed when the image was created.
E.g. if track number 2 gets copied into a disk file and shall then
be loaded as ISO filesystem.
If displacement_sign is 1 then the displacement number will be
added to .read_block() addresses, if -1 it will be subtracted.
Else it will be ignored.
*/
uint32_t displacement;
int displacement_sign;
};
#define Libisoburn_max_agE 2000000000
@ -105,6 +119,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
tiles = (struct isoburn_cache_tile *) icd->tiles;
if(icd->displacement_sign == 1) {
if(lba + icd->displacement < lba) {
address_rollover:;
return ISO_DISPLACE_ROLLOVER;
} else
lba += icd->displacement;
} else if(icd->displacement_sign == -1) {
if(lba < icd->displacement )
goto address_rollover;
else
lba -= icd->displacement;
}
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
for(i=0; i<Libisoburn_cache_tileS; i++) {
@ -151,30 +178,10 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
if (ret > 0)
return 1;
tiles[oldest].last_error_lba = lba;
#ifdef ISO_DATA_SOURCE_MISHAP
ret= ISO_DATA_SOURCE_MISHAP;
#else
/* <<< pre libisofs-0.6.7 */
/* It is not required by the specs of libisofs but implicitely assumed
...
But it is not possible to ignore FAILURE.
libisofs insists in original error codes, i.e. libisoburn cannot
change severity FAILURE associated with ISO_FILE_READ_ERROR.
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
and not for image reading.
This is quite wrong, although the error message text is unclear
enough to make it appear plausible.
*/
ret= ISO_FILE_CANT_WRITE;
#endif
if(ret >= 0)
ret = -1;
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
sprintf(msg, "ds_read_block(%lu) returns %lX",
(unsigned long) lba, (unsigned long) ret);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
return ret;
return ISO_DATA_SOURCE_MISHAP;
}
#ifdef Libisoburn_read_cache_reporT
@ -226,7 +233,8 @@ int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
}
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
IsoDataSource *isoburn_data_source_new(struct burn_drive *d,
uint32_t displacement, int displacement_sign)
{
IsoDataSource *ret;
struct isoburn_cached_drive *icd= NULL;
@ -238,6 +246,7 @@ IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
icd = calloc(1,sizeof(struct isoburn_cached_drive));
if (ret == NULL || icd == NULL)
return NULL;
ret->version = 0;
ret->refcount = 1;
ret->read_block = ds_read_block;
ret->open = ds_open;
@ -253,6 +262,8 @@ IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
icd->tiles[i].last_aligned_error_lba = 0xffffffff;
icd->tiles[i].age= 0;
}
icd->displacement = displacement;
icd->displacement_sign = displacement_sign;
return ret;
}

View File

@ -437,6 +437,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
if (state != BURN_DISC_BLANK && opts->libjte_handle != NULL) {
isoburn_msgs_submit(out_o, 0x00060000,
"Jigdo Template Extraction works only on blank target media",
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
fifo_chunks= 32;
if(opts->fifo_size >= 64*1024 && opts->fifo_size <= 1024.0 * 1024.0 * 1024.0){
@ -450,6 +456,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
isoburn_report_iso_error(ret, "Cannot create iso_write_opts", 0, "FATAL",0);
goto ex;
}
iso_write_opts_set_will_cancel(wopts, opts->will_cancel);
iso_write_opts_set_iso_level(wopts, opts->level);
iso_write_opts_set_rockridge(wopts, opts->rockridge);
iso_write_opts_set_joliet(wopts, opts->joliet);
@ -458,6 +465,9 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
if(opts->hardlinks)
iso_write_opts_set_rrip_1_10_px_ino(wopts, 1);
iso_write_opts_set_aaip(wopts, opts->aaip);
iso_write_opts_set_old_empty(wopts, !!opts->old_empty);
iso_write_opts_set_untranslated_name_len(wopts, opts->untranslated_name_len);
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_allow_longer_paths(wopts, opts->allow_longer_paths);
@ -467,6 +477,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
iso_write_opts_set_relaxed_vol_atts(wopts, 1);
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
iso_write_opts_set_joliet_long_names(wopts, opts->joliet_long_names);
iso_write_opts_set_always_gmt(wopts, opts->always_gmt);
iso_write_opts_set_rrip_version_1_10(wopts, opts->rrip_version_1_10);
iso_write_opts_set_dir_rec_mtime(wopts, opts->dir_rec_mtime);
@ -496,11 +507,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
opts->vol_creation_time, opts->vol_modification_time,
opts->vol_expiration_time, opts->vol_effective_time,
opts->vol_uuid);
iso_write_opts_attach_jte(wopts, opts->libjte_handle);
ret= isoburn_adjust_target_iso_head(out_o, opts->partition_offset, 0);
if(ret <= 0)
{ret= -1; goto ex;}
if(opts->no_emul_toc) {
if(opts->no_emul_toc || opts->libjte_handle != NULL) {
if(out_o->nwa == out_o->zero_nwa &&
out_o->zero_nwa == Libisoburn_overwriteable_starT
+ opts->partition_offset
@ -525,6 +537,20 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_part_offset(wopts, opts->partition_offset,
opts->partition_secs_per_head,
opts->partition_heads_per_cyl);
iso_write_opts_set_tail_blocks(wopts, opts->tail_blocks);
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
if(opts->appended_partitions[i] == NULL)
continue;
ret= iso_write_opts_set_partition_img(wopts, i + 1,
opts->appended_part_types[i],
opts->appended_partitions[i], 0);
if(ret < 0) {
isoburn_report_iso_error(ret, "Cannot set path for appended partition",
0, "FAILURE", 0);
{ret= -1; goto ex;}
}
}
iso_write_opts_set_disc_label(wopts, opts->ascii_disc_label);
ret = iso_image_create_burn_source(in_o->image, wopts, &wsrc);
if (ret < 0) {
@ -739,6 +765,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o->hasElTorito= 0;
o->size= 0;
o->pretend_blank= 1;
o->displacement= 0;
o->displacement_sign= 0;
return(1);
}
@ -764,7 +792,7 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
o->noacl= !!(ext & 64);
o->noea= !!(ext & 128);
o->noino= !!(ext & 256);
o->nomd5= !!(ext & 512);
o->nomd5= (ext >> 9) & 3;
return(1);
}
@ -774,7 +802,7 @@ int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4) |
((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7) |
((!!o->noino) << 8) | ((!!o->nomd5) << 9);
((!!o->noino) << 8) | ((o->nomd5 & 3) << 9);
return(1);
}
@ -855,6 +883,24 @@ int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode)
}
int isoburn_ropt_set_displacement(struct isoburn_read_opts *o,
uint32_t displacement, int displacement_sign)
{
o->displacement= displacement;
o->displacement_sign= displacement_sign;
return(1);
}
int isoburn_ropt_get_displacement(struct isoburn_read_opts *o,
uint32_t *displacement, int *displacement_sign)
{
*displacement= o->displacement;
*displacement_sign= o->displacement_sign;
return(1);
}
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
uint32_t *size, int *has_what)
{
@ -875,6 +921,7 @@ int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
{
struct isoburn_imgen_opts *o;
int i;
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
if(o==NULL) {
@ -889,6 +936,12 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->iso1999= 0;
o->hardlinks= 0;
o->aaip = 0;
o->session_md5= 0;
o->file_md5= 0;
o->no_emul_toc= 0;
o->old_empty= 0;
o->untranslated_name_len = 0;
o->allow_dir_id_ext = 0;
o->omit_version_numbers= 0;
o->allow_deep_paths= 1;
o->allow_longer_paths= 0;
@ -897,6 +950,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->allow_lowercase= 0;
o->allow_full_ascii= 0;
o->joliet_longer_paths= 0;
o->joliet_long_names= 0;
o->always_gmt= 0;
o->rrip_version_1_10= 0;
o->dir_rec_mtime= 0;
@ -923,14 +977,25 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->vol_modification_time= 0;
o->vol_expiration_time= 0;
o->vol_effective_time= 0;
o->libjte_handle= NULL;
o->tail_blocks= 0;
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
o->appended_partitions[i]= NULL;
o->appended_part_types[i]= 0;
}
return(1);
}
int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag)
{
int i;
if(*o==NULL)
return(0);
for(i= 0; i < Libisoburn_max_appended_partitionS; i++)
if((*o)->appended_partitions[i] != NULL)
free((*o)->appended_partitions[i]);
free(*o);
*o= NULL;
return(1);
@ -961,6 +1026,8 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
o->session_md5= !!(ext & 64);
o->file_md5= (ext & (128 | 256)) >> 7;
o->no_emul_toc= !!(ext & 512);
o->will_cancel= !!(ext & 1024);
o->old_empty= !!(ext & 2048);
return(1);
}
@ -970,7 +1037,8 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext)
*ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2) |
((!!o->hardlinks) << 3) | ((!!o->aaip) << 5) |
((!!o->session_md5) << 6) | ((o->file_md5 & 3) << 7) |
((!!o->no_emul_toc) << 9);
((!!o->no_emul_toc) << 9) | ((o->will_cancel) << 10) |
((!!o->old_empty) << 11);
return(1);
}
@ -991,6 +1059,8 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
o->rrip_version_1_10= !!(relax & isoburn_igopt_rrip_version_1_10);
o->dir_rec_mtime= !!(relax & isoburn_igopt_dir_rec_mtime);
o->aaip_susp_1_10= !!(relax & isoburn_igopt_aaip_susp_1_10);
o->allow_dir_id_ext= !!(relax & isoburn_igopt_allow_dir_id_ext);
o->joliet_long_names= !!(relax & isoburn_igopt_joliet_long_names);
return(1);
}
@ -999,10 +1069,50 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
{
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
((!!(o->no_force_dots & 1))<<4)| ((!!o->allow_lowercase)<<5) |
((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7) |
((!!o->always_gmt)<<8) | ((!!o->rrip_version_1_10)<<9) |
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11);
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11) |
((!!(o->omit_version_numbers & 2))<<12) |
((!!(o->no_force_dots & 2))<<13) |
((!!o->allow_dir_id_ext) << 14) |
((!!o->joliet_long_names) << 15);
return(1);
}
int isoburn_igopt_set_untranslated_name_len(struct isoburn_imgen_opts *o,
int len)
{
int ret;
IsoWriteOpts *opts = NULL;
char msg[160];
ret= iso_write_opts_new(&opts, 0);
if(ret < 0) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot create libisofs write options object", 0, "FATAL", 0);
return(0);
}
ret= iso_write_opts_set_untranslated_name_len(opts, len);
if(ret < 0) {
ret= iso_write_opts_set_untranslated_name_len(opts, -1);
sprintf(msg,
"Improper value for maximum length of untranslated names (%d <-> -1 ... %d)",
len, ret);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
iso_write_opts_free(opts);
return(0);
}
o->untranslated_name_len= ret; /* Normalized len value */
iso_write_opts_free(opts);
return(1);
}
int isoburn_igopt_get_untranslated_name_len(struct isoburn_imgen_opts *o,
int *len)
{
*len = o->untranslated_name_len;
return(1);
}
@ -1154,7 +1264,7 @@ int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *opts,
}
memcpy(opts->system_area_data, data, 32768);
}
opts->system_area_options = options & 3;
opts->system_area_options = options & 0x3ff;
return(1);
}
@ -1222,3 +1332,96 @@ int isoburn_igopt_get_part_offset(struct isoburn_imgen_opts *opts,
return 1;
}
int isoburn_igopt_attach_jte(struct isoburn_imgen_opts *opts,
void *libjte_handle)
{
opts->libjte_handle = libjte_handle;
return 1;
}
int isoburn_igopt_detach_jte(struct isoburn_imgen_opts *opts,
void **libjte_handle)
{
if(libjte_handle != NULL)
*libjte_handle = opts->libjte_handle;
opts->libjte_handle = NULL;
return 1;
}
int isoburn_igopt_set_tail_blocks(struct isoburn_imgen_opts *opts,
uint32_t num_blocks)
{
opts->tail_blocks = num_blocks;
return 1;
}
int isoburn_igopt_get_tail_blocks(struct isoburn_imgen_opts *opts,
uint32_t *num_blocks)
{
*num_blocks = opts->tail_blocks;
return 1;
}
int isoburn_igopt_set_partition_img(struct isoburn_imgen_opts *opts,
int partition_number, uint8_t partition_type,
char *image_path)
{
char msg[80];
if (partition_number < 1 ||
partition_number > Libisoburn_max_appended_partitionS) {
sprintf(msg, "Partition number is out of range (1 ... %d)",
Libisoburn_max_appended_partitionS);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
return(0);
}
if (opts->appended_partitions[partition_number - 1] != NULL)
free(opts->appended_partitions[partition_number - 1]);
opts->appended_partitions[partition_number - 1] = strdup(image_path);
if (opts->appended_partitions[partition_number - 1] == NULL)
return(-1);
opts->appended_part_types[partition_number - 1] = partition_type;
return(1);
}
int isoburn_igopt_get_partition_img(struct isoburn_imgen_opts *opts,
int num_entries,
uint8_t partition_types[],
char *image_paths[])
{
int i, max_entry= 0;
for(i= 0; i < num_entries; i++)
image_paths[i]= NULL;
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
if(opts->appended_partitions[i] == NULL)
continue;
if(i < num_entries) {
image_paths[i]= opts->appended_partitions[i];
partition_types[i]= opts->appended_part_types[i];
}
max_entry= i + 1;
}
return(max_entry);
}
int isoburn_igopt_set_disc_label(struct isoburn_imgen_opts *opts, char *label)
{
strncpy(opts->ascii_disc_label, label, Libisoburn_disc_label_sizE - 1);
opts->ascii_disc_label[Libisoburn_disc_label_sizE - 1] = 0;
return(1);
}
int isoburn_igopt_get_disc_label(struct isoburn_imgen_opts *opts, char **label)
{
*label= opts->ascii_disc_label;
return(1);
}

View File

@ -2,7 +2,7 @@
/*
Class struct of libisoburn.
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -12,7 +12,13 @@
/* for uint8_t */
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
/* For emulated TOC of overwriteable media.
Provides minimal info for faking a struct burn_toc_entry.
@ -45,6 +51,17 @@ int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
#define Libisoburn_target_head_sizE (32*2048)
/* Maximum number of appended partitions. Effectively usable number depends
on system area type.
*/
#define Libisoburn_max_appended_partitionS 8
/*
Maximum length of a disc label text plus 1.
*/
#define Libisoburn_disc_label_sizE 129
struct isoburn {
@ -231,12 +248,15 @@ int isoburn_get_msc2(struct isoburn *o,
/** Get a data source suitable for read from a drive using burn_read_data()
function.
@param d drive to read from. Must be grabbed.
@param displacement will be added or subtracted to any block address
@param displacement_sign +1 = add , -1= subtract , else keep unaltered
@return the data source, NULL on error. Must be freed with libisofs
iso_data_source_unref() function. Note: this doesn't release
the drive.
*/
IsoDataSource *
isoburn_data_source_new(struct burn_drive *d);
isoburn_data_source_new(struct burn_drive *d,
uint32_t displacement, int displacement_sign);
/** Disable read capabilities of a data source which was originally created
by isoburn_data_source_new(). After this any attempt to read will yield
@ -278,7 +298,7 @@ struct isoburn_read_opts {
unsigned int noino:1; /* Discard eventual PX inode numbers */
/* ts A90810 */
unsigned int nomd5:1; /* Do not read eventual MD5 array */
unsigned int nomd5:2; /* Do not read eventual MD5 array */
unsigned int preferjoliet:1;
/*< When both Joliet and RR extensions are present, the RR
@ -321,6 +341,9 @@ struct isoburn_read_opts {
uint32_t size; /**< Will be filled with the size (in 2048 byte block) of
* the image, as reported in the PVM. */
unsigned int pretend_blank:1; /* always create empty image */
uint32_t displacement;
int displacement_sign;
};
@ -334,6 +357,8 @@ struct isoburn_imgen_opts {
/* Options for image generation */
int will_cancel :1;
int level; /**< ISO level to write at. */
/** Which extensions to support. */
@ -351,7 +376,7 @@ struct isoburn_imgen_opts {
unsigned int session_md5 :1;
/* Produce and write MD5 checksums for each single IsoFile.
See parameter files of iso_write_opts_set_record_md5().
See parameter "files" of iso_write_opts_set_record_md5().
*/
unsigned int file_md5 :2;
@ -360,6 +385,13 @@ struct isoburn_imgen_opts {
*/
unsigned int no_emul_toc :1;
/* For empty files, symbolic links, and devices use the old ECMA-119 block
addresses in the range [0,31] rather than the address of the dedicated
empty block.
*/
unsigned int old_empty :1;
/* relaxed constraints */
/*
@ -367,6 +399,24 @@ struct isoburn_imgen_opts {
* but it is supposed to work on most moderns systems. Use with caution.
*/
/*
* Extra Caution: This option breaks any assumptions about names that
* are supported by ECMA-119 specifications.
* Omit any translation which would make a file name compliant to the
* ECMA-119 rules. This includes and exceeds omit_version_numbers,
* max_37_char_filenames, no_force_dots bit0, allow_lowercase.
*/
unsigned int untranslated_name_len;
/*
* Convert directory names for ECMA-119 similar to other file names, but do
* not force a dot or add a version number.
* This violates ECMA-119 by allowing one "." and especially ISO level 1
* by allowing DOS style 8.3 names rather than only 8 characters.
* (mkisofs and its clones seem to do this violation.)
*/
unsigned int allow_dir_id_ext :1;
/**
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
* Version numbers are usually not used.
@ -419,6 +469,12 @@ struct isoburn_imgen_opts {
*/
unsigned int joliet_longer_paths :1;
/**
* Allow leaf names in the Joliet tree to have up to 103 characters
* rather than 64.
*/
unsigned int joliet_long_names :1;
/**
* Store timestamps as GMT rather than in local time.
*/
@ -545,6 +601,23 @@ struct isoburn_imgen_opts {
/* 1 to 255, 0= disabled/default */
int partition_heads_per_cyl;
/* Parameters and state of Jigdo Template Export environment.
*/
void *libjte_handle;
/* A trailing padding of zero bytes which belongs to the image
*/
uint32_t tail_blocks;
/* Eventual disk file paths of prepared images which shall be appended
after the ISO image and described by partiton table entries in a MBR.
*/
char *appended_partitions[Libisoburn_max_appended_partitionS];
uint8_t appended_part_types[Libisoburn_max_appended_partitionS];
/* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label.
*/
char ascii_disc_label[Libisoburn_disc_label_sizE];
};

View File

@ -6,7 +6,7 @@
/*
libisofs related functions of libisoburn.
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -158,6 +158,8 @@ create_blank_image:;
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
return ret;
}
iso_image_set_ignore_aclea(*image,
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
} else {
/* Blank new image for the drive */
iso_image_unref(o->image);
@ -166,13 +168,13 @@ create_blank_image:;
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
return ret;
}
if (image) {
if (image != NULL) {
*image = o->image;
iso_image_ref(*image); /*protects object from premature free*/
}
}
iso_image_set_ignore_aclea(*image,
iso_image_set_ignore_aclea(o->image,
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
}
return 1;
}
@ -196,18 +198,43 @@ create_blank_image:;
goto create_blank_image;
}
if(read_opts->displacement != 0 && abs(read_opts->displacement_sign) == 1) {
/* Apply reverse displacement to session start */
if(read_opts->displacement_sign == -1) {
if(ms_block+ read_opts->displacement < ms_block) {
displacement_rollover:;
sprintf(msg, "Displacement offset leads outside 32 bit range.");
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
return 0;
}
ms_block+= read_opts->displacement;
} else {
if(ms_block < read_opts->displacement)
goto displacement_rollover;
ms_block-= read_opts->displacement;
}
}
/* create the data source */
ret = iso_read_opts_new(&ropts, 0);
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot create write opts", 0, "FATAL", 0);
return ret;
}
/* Important: do not return until iso_read_opts_free() */
iso_read_opts_set_start_block(ropts, ms_block);
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
iso_read_opts_set_no_md5(ropts, read_opts->nomd5);
if(read_opts->nomd5 == 2)
int_num= 2;
else if(read_opts->nomd5 == 1)
int_num= 1;
else
int_num= 0;
iso_read_opts_set_no_md5(ropts, int_num);
iso_read_opts_set_new_inos(ropts, read_opts->noino);
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
@ -221,7 +248,13 @@ create_blank_image:;
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
iso_read_opts_load_system_area(ropts, 1);
ds = isoburn_data_source_new(d);
ds = isoburn_data_source_new(d, read_opts->displacement,
read_opts->displacement_sign);
if (ds == NULL) {
isoburn_report_iso_error(ret, "Cannot create IsoDataSource object", 0,
"FATAL", 0);
return ret;
}
if(o->iso_data_source!=NULL)
iso_data_source_unref(o->iso_data_source);
o->iso_data_source= ds;
@ -406,14 +439,17 @@ static int isoburn_inspect_partition(struct isoburn *o, uint32_t img_size,
The need for emulation is confirmed already.
@param o A freshly created isoburn object. isoburn_create_data_source() was
already called, nevertheless.
@param flag bit0= read-only
@return <=0 error , 1 = success
*/
int isoburn_start_emulation(struct isoburn *o, int flag)
{
int ret, i, capacity = -1, role;
int ret, i, capacity = -1, role, dummy;
off_t data_count, to_read;
struct burn_drive *drive;
struct ecma119_pri_vol_desc *pvm;
enum burn_disc_status s;
char path[BURN_DRIVE_ADR_LEN], msg[2 * BURN_DRIVE_ADR_LEN];
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
@ -424,6 +460,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
drive= o->drive;
if(flag & 1)
o->fabricated_disc_status= BURN_DISC_FULL;
/* We can assume 0 as start block for image.
The data there point to the most recent session.
*/
@ -431,7 +470,12 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
ret = burn_get_read_capacity(drive, &capacity, 0);
if (ret <= 0)
capacity = -1;
if (capacity > 0 || role == 2) {
if (role == 5) { /* random access write-only media */
s = burn_disc_get_status(drive);
o->fabricated_disc_status= s;
burn_disc_track_lba_nwa(drive, NULL, 0, &dummy, &(o->nwa));
return 1;
} else if (capacity > 0 || role == 2 || role == 4) {
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
to_read = o->target_iso_head_size;
@ -439,18 +483,25 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
if(capacity > 0 && (off_t) capacity * (off_t) 2048 < to_read)
to_read = (off_t) capacity * (off_t) 2048;
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
to_read, &data_count, 2);
to_read, &data_count, 2 | 8);
if (ret <= 0) {
/* an error means a disc with no ISO image */
if (capacity > 0)
if (ret == -2) {
path[0]= 0;
burn_drive_d_get_adr(drive, path);
sprintf(msg, "Pseudo drive '%s' does not allow reading", path);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "NOTE", 0);
o->fabricated_disc_status= BURN_DISC_BLANK;
} else if (capacity > 0)
o->fabricated_disc_status= BURN_DISC_FULL;
else
o->fabricated_disc_status= BURN_DISC_BLANK;
else if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
}
} else {
/* No read capacity means blank media */
o->fabricated_disc_status= BURN_DISC_BLANK;
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
}
@ -461,7 +512,8 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
--i;
if (!i) {
o->fabricated_disc_status= BURN_DISC_BLANK;
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
}
@ -485,12 +537,14 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
return ret;
size *= (off_t) 2048; /* block size in bytes */
isoburn_set_start_byte(o, size, 0);
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
/* empty image */
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
o->fabricated_disc_status= BURN_DISC_BLANK;
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
} else {
/* treat any disc in an unknown format as full */
o->fabricated_disc_status= BURN_DISC_FULL;

View File

@ -2,7 +2,7 @@
/*
Lower level API definition of libisoburn.
Copyright 2007-2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007-2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -222,18 +222,26 @@ void isoburn_version(int *major, int *minor, int *micro);
at compile time.
@since 0.1.0
*/
#define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 36
#define isoburn_libisofs_req_major 1
#define isoburn_libisofs_req_minor 0
#define isoburn_libisofs_req_micro 6
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@since 0.1.0
*/
#define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 8
#define isoburn_libburn_req_micro 4
#define isoburn_libburn_req_major 1
#define isoburn_libburn_req_minor 0
#define isoburn_libburn_req_micro 6
/** The minimum compile time requirements of libisoburn towards libjte are
the same as of a suitable libisofs towards libjte.
So use these macros from libisofs.h :
iso_libjte_req_major
iso_libjte_req_minor
iso_libjte_req_micro
@since 0.6.4
*/
/** The minimum version of libisofs to be used with this version of libisoburn
at runtime. This is checked already in isoburn_initialize() which will
@ -248,6 +256,17 @@ void isoburn_version(int *major, int *minor, int *micro);
int isoburn_libisofs_req(int *major, int *minor, int *micro);
/** The minimum version of libjte to be used with this version of libisoburn
at runtime. The use of libjte is optional and depends on configure
tests. It can be prevented by ./configure option --disable-libjte .
This is checked already in isoburn_initialize() which will refuse on
outdated version. So this call is for information purposes after
successful startup only.
@since 0.6.4
*/
int isoburn_libjte_req(int *major, int *minor, int *micro);
/** The minimum version of libburn to be used with this version of libisoburn
at runtime. This is checked already in isoburn_initialize() which will
refuse on outdated version. So this call is for information purposes after
@ -266,9 +285,9 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
time.
@since 0.1.0
*/
#define isoburn_header_version_major 0
#define isoburn_header_version_minor 6
#define isoburn_header_version_micro 2
#define isoburn_header_version_major 1
#define isoburn_header_version_minor 0
#define isoburn_header_version_micro 8
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -384,8 +403,9 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
@param flag bit0= attempt to load the disc tray.
Else: failure if not loaded.
bit1= regard overwriteable media as blank
bit2= if the drive is a regular disk file: truncate it to
the write start address
bit2= if the drive is a regular disk file:
truncate it to the write start address when writing
begins
bit3= if the drive reports a read-only profile try to read
table of content by scanning for ISO image headers.
(depending on media type and drive this might
@ -751,6 +771,11 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
bit9= nomd5
@since 0.4.2
Do not load the eventual MD5 checksum array.
Do not check eventual session_md5 tags.
bit10= nomd5tag
@since 1.0.4
Do not check eventual session_md5 tags although bit9
is not set.
@return 1 success, <=0 failure
*/
#define isoburn_ropt_norock 1
@ -763,6 +788,7 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
#define isoburn_ropt_noea 128
#define isoburn_ropt_noino 256
#define isoburn_ropt_nomd5 512
#define isoburn_ropt_nomd5tag 1024
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
@ -800,7 +826,6 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
mode_t *mode);
/** Set the character set for reading RR file names from ISO images.
@since 0.1.0
@param o The option set to work on
@ -815,6 +840,7 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
char **input_charset);
/**
Enable or disable methods to automatically choose an input charset.
This eventually overrides the name set via isoburn_ropt_set_input_charset()
@ -830,6 +856,30 @@ int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode);
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
/** Control an offset to be applied to all block address pointers in the ISO
image in order to compensate for an eventual displacement of the image
relative to the start block address for which it was produced.
E.g. if track number 2 from CD gets copied into a disk file and shall then
be loaded as ISO filesystem, then the directory tree and all data file
content of the track copy will become readable by setting the track start
address as displacement and -1 as displacement_sign.
Data file content outside the track will of course not be accessible and
eventually produce read errors.
@since 0.6.6
@param o The option set to work on
@param displacement 0 or a positive number
@param displacement_sign Determines wether to add or subtract displacement
to block addresses before applying them to the
storage object for reading:
+1 = add , -1= subtract , else keep unaltered
*/
int isoburn_ropt_set_displacement(struct isoburn_read_opts *o,
uint32_t displacement, int displacement_sign);
int isoburn_ropt_get_displacement(struct isoburn_read_opts *o,
uint32_t *displacement, int *displacement_sign);
/** After calling function isoburn_read_image() there are informations
available in the option set.
This info can be obtained as bits in parameter has_what. Like:
@ -854,14 +904,15 @@ int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
#define isoburn_ropt_has_iso1999 4
#define isoburn_ropt_has_el_torito 8
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
uint32_t *size, int *has_what);
/* ts A90122 */
/* >>> to be implemented:
#define isoburn_ropt_has_acl 64
#define isoburn_ropt_has_ea 128
*/
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
uint32_t *size, int *has_what);
/* ----------------------------------------------------------------------- */
@ -908,6 +959,7 @@ int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag);
@param level is a term of the ISO 9660 standard. It should be one of:
1= filenames restricted to form 8.3
2= filenames allowed up to 31 characters
3= file content may be larger than 4 GB - 1.
@return 1 success, <=0 failure
*/
int isoburn_igopt_set_level(struct isoburn_imgen_opts *o, int level);
@ -939,7 +991,8 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
can encode ACL and XFS-style Extended Attributes.
bit6= session_md5
@since 0.4.2
Produce and write a MD5 checksum of the whole session stream.
Produce and write MD5 checksum tags of superblock, directory
tree, and the whole session stream.
bit7= file_md5
@since 0.4.2
Produce and write MD5 checksums for each single IsoFile.
@ -955,6 +1008,21 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
the first session to LBA 32 and do not copy the first 64kB
of the first session to LBA 0, but rather write the first
session to LBA 0 directly.
bit10= will_cancel
@since 0.6.6
Announce to libisofs that only the image size is desired
and that the write thread will be cancelled by
isoburn_cancel_prepared_write() before actual image writing
occurs. Without this, cancellation can cause a MISHAP event.
bit11= old_empty
@since 1.0.2
Let symbolic links and device files point to block 0, and let
empty data files point to the address of the Volume Descriptor
Set Terminator. This was done by libisofs in the past.
By default there is now a single dedicated block of zero bytes
after the end of the directory trees, of which the address
is used for all files without own content.
@return 1 success, <=0 failure
*/
#define isoburn_igopt_rockridge 1
@ -966,6 +1034,8 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
#define isoburn_igopt_file_md5 128
#define isoburn_igopt_file_stability 256
#define isoburn_igopt_no_emul_toc 512
#define isoburn_igopt_will_cancel 1024
#define isoburn_igopt_old_empty 2048
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
@ -1038,6 +1108,18 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
Joliet tree rather than the ISO 9660 / ECMA-119 names.
@since 0.5.4
Previous versions added dots to Joliet names unconditionally.
bit14= allow_dir_id_ext
Convert directory names for ECMA-119 similar to other file
names, but do not force a dot or add a version number.
This violates ECMA-119 by allowing one "." and especially
ISO level 1 by allowing DOS style 8.3 names rather than
only 8 characters.
(mkisofs and its clones obviously do this violation.)
@since 1.0.0
bit15= joliet_long_names
Allow for Joliet leaf names up to 103 characters rather than
up to 64.
@since 1.0.6
@return 1 success, <=0 failure
*/
#define isoburn_igopt_omit_version_numbers 1
@ -1054,10 +1136,41 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
#define isoburn_igopt_aaip_susp_1_10 2048
#define isoburn_igopt_only_iso_versions 4096
#define isoburn_igopt_no_j_force_dots 8192
#define isoburn_igopt_allow_dir_id_ext 16384
#define isoburn_igopt_joliet_long_names 32768
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
/** 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
ECMA-119 rules. This includes and exceeds omit_version_numbers,
max_37_char_filenames, no_force_dots bit0, allow_full_ascii. Further it
prevents the conversion from local character set to ASCII.
The maximum name length is given by this call. If a filename exceeds
this length or cannot be recorded untranslated for other reasons, then
image production gets aborted.
Currently the length limit is 96 characters, because an ECMA-119 directory
record may at most have 254 bytes and up to 158 other bytes must fit into
the record. Probably 96 more bytes can be made free for the name in future.
@since 1.0.0
@param o The option set to work on
@param len 0 = disable this feature and perform name translation
according to other settings.
>0 = Omit any translation. Eventually abort image production
if a name is longer than the given value.
-1 = Like >0. Allow maximum possible length.
isoburn_igopt_get_untranslated_name_len() will tell the
effectively resulting value.
@return >0 success, <=0 failure
*/
int isoburn_igopt_set_untranslated_name_len(struct isoburn_imgen_opts *o,
int len);
int isoburn_igopt_get_untranslated_name_len(struct isoburn_imgen_opts *o,
int *len);
/** Whether and how files should be sorted.
@since 0.1.0
@param o The option set to work on
@ -1114,7 +1227,7 @@ int isoburn_igopt_get_over_ugid(struct isoburn_imgen_opts *o,
int *replace_uid, int *replace_gid,
uid_t *uid, gid_t *gid);
/** Set the charcter set to use for representing filenames in the image.
/** Set the charcter set to use for representing RR filenames in the image.
@since 0.1.0
@param o The option set to work on
@param output_charset Set this to NULL to use the default output charset.
@ -1215,6 +1328,35 @@ int isoburn_igopt_get_scdbackup_tag(struct isoburn_imgen_opts *o,
SYSLINUX plus an ISOLINUX boot image (see
iso_image_set_boot_image()) and only if not bit0
is set.
bit2-7= System area type
0= with bit0 or bit1: MBR
else: unspecified type
@since 0.6.4
1= MIPS Big Endian Volume Header
Submit up to 15 MIPS Big Endian boot files by
iso_image_add_mips_boot_file() of libisofs.
This will overwrite the first 512 bytes of
the submitted data.
2= DEC Boot Block for MIPS Little Endian
The first boot file submitted by
iso_image_add_mips_boot_file() will be activated.
This will overwrite the first 512 bytes of
the submitted data.
@since 0.6.6
3= SUN Disk Label for SUN SPARC
Submit up to 7 SPARC boot images by
isoburn_igopt_set_partition_img() for partition
numbers 2 to 8.
This will overwrite the first 512 bytes of
the submitted data.
bit8-9= Only with System area type 0 = MBR
@since 1.0.4
Cylinder alignment mode eventually pads the image
to make it end at a cylinder boundary.
0 = auto (align if bit1)
1 = always align to cylinder boundary
2 = never align to cylinder boundary
@return 1 success, 0 no data to get, <0 failure
*/
int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o,
@ -1295,6 +1437,141 @@ int isoburn_igopt_get_pvd_times(struct isoburn_imgen_opts *opts,
char uuid[17]);
/** Associate a libjte environment object to the upcomming write run.
libjte implements Jigdo Template Extraction as of Steve McIntyre and
Richard Atterer.
A non-NULL libjte_handle will cause failure to write if libjte was not
enabled in libisofs at compile time.
@since 0.6.4
@param opts
The option set to work on
@param libjte_handle
Pointer to a struct libjte_env e.g. created by libjte_new().
It must stay existent from the start of image writing by
isoburn_prepare_*() until the write thread has ended.
E.g. until libburn indicates the end of its write run.
@return 1 success, <=0 failure
*/
int isoburn_igopt_attach_jte(struct isoburn_imgen_opts *opts,
void *libjte_handle);
/** Remove eventual association to a libjte environment handle.
@since 0.6.4
@param opts
The option set to work on
@param libjte_handle
If not submitted as NULL, this will return the previously set
libjte handle.
@return 1 success, <=0 failure
*/
int isoburn_igopt_detach_jte(struct isoburn_imgen_opts *opts,
void **libjte_handle);
/** Set resp. get the number of trailing zero byte blocks to be written by
libisofs. The image size counter of the emerging ISO image will include
them. Eventual checksums will take them into respect.
They will be written immediately before the eventual image checksum area
which is at the very end of the image.
For a motivation see iso_write_opts_set_tail_blocks() in libisofs.h .
@since 0.6.4
@param opts
The option set to work on
@aram num_blocks
Number of extra 2 kB blocks to be written by libisofs.
@return 1 success, <=0 failure
*/
int isoburn_igopt_set_tail_blocks(struct isoburn_imgen_opts *opts,
uint32_t num_blocks);
int isoburn_igopt_get_tail_blocks(struct isoburn_imgen_opts *opts,
uint32_t *num_blocks);
/** Cause an arbitrary data file to be appended to the ISO image and to be
described by a partition table entry in an MBR or SUN Disk Label at the
start of the ISO image.
The partition entry will bear the size of the image file rounded up to
the next multiple of 2048 bytes.
MBR or SUN Disk Label are selected by isoburn_igopt_set_system_area()
system area type: 0 selects MBR partition table. 3 selects a SUN partition
table with 320 kB start alignment.
@since 0.6.4
@param opts
The option set to be manipulated.
@param partition_number
Depicts the partition table entry which shall describe the
appended image.
Range with MBR: 1 to 4. 1 will cause the whole ISO image to be
unclaimable space before partition 1.
@since 0.6.6
Range with SUN Disk Label: 2 to 8.
@param image_path
File address in the local file system.
With SUN Disk Label: an empty name causes the partition to become
a copy of the next lower partition.
@param image_type
The MBR partition type. E.g. FAT12 = 0x01 , FAT16 = 0x06,
Linux Native Partition = 0x83. See fdisk command L.
This parameter is ignored with SUN Disk Label.
@return
<=0 = error, 1 = success
*/
int isoburn_igopt_set_partition_img(struct isoburn_imgen_opts *opts,
int partition_number, uint8_t partition_type,
char *image_path);
/** Inquire the current settings made by isoburn_igopt_set_partition_img().
@since 0.6.4
@param opts
The option set to be inquired.
@param num_entries
Number of array elements in partition_types[] and image_paths[].
@param partition_types
The partition type associated with the partition. Valid only if
image_paths[] of the same index is not NULL.
@param image_paths
Its elements get filled with either NULL or a pointer to a string
with a file address resp. an empty text.
@return
<0 = error
0 = no partition image set
>0 highest used partition number
*/
int isoburn_igopt_get_partition_img(struct isoburn_imgen_opts *opts,
int num_entries,
uint8_t partition_types[],
char *image_paths[]);
/** Set a name for the system area. This setting is ignored unless system area
type 3 "SUN Disk Label" is in effect by iso_write_opts_set_system_area().
In this case it will replace the default text at the start of the image:
"CD-ROM Disc with Sun sparc boot created by libisofs"
@since 0.6.6
@param opts
The option set to be manipulated.
@param label
A text of up to 128 characters.
@return
<=0 = error, 1 = success
*/
int isoburn_igopt_set_disc_label(struct isoburn_imgen_opts *opts, char *label);
/** Inquire the current setting made by isoburn_igopt_set_disc_label().
@since 0.6.6
@param opts
The option set to be inquired.
@param label
Returns a pointer to the currently set label string.
Do not alter this string.
Use only as long as the opts object exists.
@return
<=0 = error, 1 = success
*/
int isoburn_igopt_get_disc_label(struct isoburn_imgen_opts *opts,
char **label);
/* ----------------------------------------------------------------------- */
/* End of Options for image generation */
/* ----------------------------------------------------------------------- */
@ -1548,6 +1825,7 @@ int isoburn_prepare_blind_grow(struct burn_drive *in_drive,
image stream when one of above three calls is performed. It is mandatory to
either run isoburn_disc_write() or to revoke the preparations by the
call described here.
If this call returns 0 or 1 then the write thread of libisofs has ended.
@since 0.1.0
@param input_drive The drive resp. in_drive which was used with the
preparation call.
@ -1561,6 +1839,21 @@ int isoburn_cancel_prepared_write(struct burn_drive *input_drive,
struct burn_drive *output_drive, int flag);
/**
Override the truncation setting that was made with flag bit2 during the
call of isoburn_drive_aquire. This applies only to stdio pseudo drives.
@since 0.1.6
@param drive The drive which was aquired and shall be used for writing.
@param flag Bitfield controlling the setting:
bit0= truncate (else do not truncate)
bit1= do not warn if call is inappropriate to drive
bit2= only set if truncation is currently enabled
do not warn if call is inappropriate to drive
@return 1 success, 0 inappropriate drive, <0 severe error
*/
int isoburn_set_truncate(struct burn_drive *drive, int flag);
/** Start writing of the new session.
This call is asynchrounous. I.e. it returns quite soon and the progress has
to be watched by a loop with call burn_drive_get_status() until

View File

@ -21,8 +21,11 @@ isoburn_get_attached_image;
isoburn_get_fifo_status;
isoburn_get_min_start_byte;
isoburn_get_mount_params;
isoburn_igopt_attach_jte;
isoburn_igopt_destroy;
isoburn_igopt_detach_jte;
isoburn_igopt_get_data_start;
isoburn_igopt_get_disc_label;
isoburn_igopt_get_effective_lba;
isoburn_igopt_get_extensions;
isoburn_igopt_get_fifo_size;
@ -30,27 +33,35 @@ isoburn_igopt_get_level;
isoburn_igopt_get_out_charset;
isoburn_igopt_get_over_mode;
isoburn_igopt_get_over_ugid;
isoburn_igopt_get_partition_img;
isoburn_igopt_get_pvd_times;
isoburn_igopt_get_relaxed;
isoburn_igopt_get_scdbackup_tag;
isoburn_igopt_get_sort_files;
isoburn_igopt_get_system_area;
isoburn_igopt_get_tail_blocks;
isoburn_igopt_get_untranslated_name_len;
isoburn_igopt_new;
isoburn_igopt_set_disc_label;
isoburn_igopt_set_extensions;
isoburn_igopt_set_fifo_size;
isoburn_igopt_set_level;
isoburn_igopt_set_out_charset;
isoburn_igopt_set_over_mode;
isoburn_igopt_set_over_ugid;
isoburn_igopt_set_partition_img;
isoburn_igopt_set_pvd_times;
isoburn_igopt_set_relaxed;
isoburn_igopt_set_scdbackup_tag;
isoburn_igopt_set_sort_files;
isoburn_igopt_set_system_area;
isoburn_igopt_set_tail_blocks;
isoburn_igopt_set_untranslated_name_len;
isoburn_initialize;
isoburn_is_compatible;
isoburn_libburn_req;
isoburn_libisofs_req;
isoburn_libjte_req;
isoburn_needs_emulation;
isoburn_prepare_blind_grow;
isoburn_prepare_disc;
@ -61,6 +72,7 @@ isoburn_ropt_destroy;
isoburn_ropt_get_auto_incharset;
isoburn_ropt_get_default_dirperms;
isoburn_ropt_get_default_perms;
isoburn_ropt_get_displacement;
isoburn_ropt_get_extensions;
isoburn_ropt_get_input_charset;
isoburn_ropt_get_size_what;
@ -68,11 +80,13 @@ isoburn_ropt_new;
isoburn_ropt_set_auto_incharset;
isoburn_ropt_set_default_dirperms;
isoburn_ropt_set_default_perms;
isoburn_ropt_set_displacement;
isoburn_ropt_set_extensions;
isoburn_ropt_set_input_charset;
isoburn_set_msc1;
isoburn_set_msgs_submit;
isoburn_set_read_pacifier;
isoburn_set_truncate;
isoburn_sync_after_write;
isoburn_toc_disc_free;
isoburn_toc_disc_get_sectors;
@ -107,6 +121,7 @@ Xorriso_option_acl;
Xorriso_option_add;
Xorriso_option_add_plainly;
Xorriso_option_alter_date;
Xorriso_option_append_partition;
Xorriso_option_application_id;
Xorriso_option_as;
Xorriso_option_assert_volid;
@ -126,6 +141,7 @@ Xorriso_option_check_media_defaults;
Xorriso_option_chgrpi;
Xorriso_option_chmodi;
Xorriso_option_chowni;
Xorriso_option_clone;
Xorriso_option_close;
Xorriso_option_close_filter_list;
Xorriso_option_commit;
@ -133,6 +149,7 @@ Xorriso_option_commit_eject;
Xorriso_option_compare;
Xorriso_option_compliance;
Xorriso_option_copyright_file;
Xorriso_option_cp_clone;
Xorriso_option_cpri;
Xorriso_option_cpx;
Xorriso_option_cut_out;
@ -141,9 +158,11 @@ Xorriso_option_devices;
Xorriso_option_dialog;
Xorriso_option_disk_dev_ino;
Xorriso_option_disk_pattern;
Xorriso_option_displacement;
Xorriso_option_drive_class;
Xorriso_option_dummy;
Xorriso_option_dvd_obs;
Xorriso_option_early_drive_test;
Xorriso_option_eject;
Xorriso_option_end;
Xorriso_option_errfile_log;
@ -163,6 +182,7 @@ Xorriso_option_help;
Xorriso_option_hide;
Xorriso_option_history;
Xorriso_option_iso_rr_pattern;
Xorriso_option_jigdo;
Xorriso_option_joliet;
Xorriso_option_list_delimiter;
Xorriso_option_list_formats;

View File

@ -3,4 +3,13 @@ Ben Jansens
Thomas Schmitt
Mario Danic
Vreixo Formoso Lopes
Colin Plumb
Tatu Ylonen
Jim Kingdon
Scott G. Miller
Ulrich Drepper
Richard Atterer
Steve McIntyre
George Danchev
and possibly others who gave their copyright to Free Software Foundation, Inc.

View File

@ -3,15 +3,22 @@ Ben Jansens <xor@orodu.net>
Thomas Schmitt <scdbackup@gmx.net>
Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Steve McIntyre <steve@einval.com>
George Danchev <danchev@spnet.net>
GNU xorriso is a compilation of
xorriso Copyright (C) 2007-2010 Thomas Schmitt
libisoburn Copyright (C) 2007-2010 Vreixo Formoso, Thomas Schmitt
libisofs Copyright (C) 2007-2010 Vreixo Formoso, Mario Danic, Thomas Schmitt
GNU xorriso is a compilation of modules from libburnia-project.org :
xorriso Copyright (C) 2007-2011 Thomas Schmitt
libisoburn Copyright (C) 2007-2011 Vreixo Formoso, Thomas Schmitt
libisofs Copyright (C) 2007-2011 Vreixo Formoso, Mario Danic, Thomas Schmitt
libburn Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
2006-2010 Mario Danic, Thomas Schmitt
from libburnia-project.org with a license derived from GPLv2+.
2006-2011 Mario Danic, Thomas Schmitt
Further included is :
libjte Copyright (C) 2000-2007 Free Software Foundation, Inc.
2004-2011 Steve McIntyre
2010-2011 George Danchev, Thomas Schmitt
Originally they all are licensed directly or indirectly as GPLv2+.
GNU xorriso is licensed by the following statement:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3

View File

@ -4,7 +4,7 @@
GNU xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Derived from and supported by libburnia-project.org, published via:
http://www.gnu.org/software/xorriso/xorriso_eng.html
ftp://ftp.gnu.org/gnu/xorriso/xorriso-0.6.2.tar.gz
ftp://ftp.gnu.org/gnu/xorriso/xorriso-1.0.8.tar.gz
Provided under GPL version 3 or later. No warranty.
------------------------------------------------------------------------------
@ -46,10 +46,10 @@ Optional at compile time are:
If they were present at compile time, then the optional libraries have to
be present at runtime, too.
Obtain xorriso-0.6.2.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-1.0.8.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.6.2.tar.gz
cd xorriso-0.6.2
tar xzf xorriso-1.0.8.tar.gz
cd xorriso-1.0.8
Within that directory execute:
@ -72,17 +72,15 @@ or you may execute as superuser:
For general concepts, options and usage examples see
info xorriso
or
info xorrisofs
man 1 xorriso
man 1 xorrisofs
The documents are part of the tarball as
xorriso/xorriso.info
xorriso/xorriso.1
Original source text of both is
xorriso/xorriso.texi
You may get a first glimpse by
info ./xorriso/xorriso.info
info ./xorriso/xorrisofs.info
man ./xorriso/xorriso.1
man ./xorriso/xorrisofs.1
The installation creates several alias links pointing to the xorriso binary:
xorrisofs starts xorriso with -as mkisofs emulation already enabled
@ -98,7 +96,8 @@ Never omit the "make clean" command after switching libreadline enabling.
Other deliberate dependency reduction options of ./configure are:
--disable-libacl avoid use of ACL functions like acl_to_text()
--disable-xattr avoid use of xattr functions like listxattr()
--disable-zlib avoid use of zlib functions like compress2()
--disable-zlib avoid use of zlib functions like compress2()
this also avoids the use of libjte and option -jigdo.
xorriso brings own system adapters which allow burning optical media on
GNU/Linux, FreeBSD, Solaris.
@ -254,12 +253,12 @@ Tag_id distinguishes the following tag types
"libisofs_checksum_tag_v1" Session end tag
A relocated superblock may appear at LBA 0 of an image which was produced for
being stored in a disk file or on overwriteable media (e.g. DVD+R, BD-RE).
being stored in a disk file or on overwriteable media (e.g. DVD+RW, BD-RE).
xorriso records the first session at LBA 32. An eventual follow-up session
begins at the next block address which is divisible by 32 and higher than the
address of the previous session's end tag. Normally no session starts after the
address given by relocated superblock parameter session_start=.
Session oriented media like CD-R[W], DVD+R, BD-R will have no relocated
Session oriented media like CD-R[W], DVD-R, DVD+R, BD-R will have no relocated
superblock but rather bear a table-of-content on media level.
A tag is valid if pos= tells its own block address and self= tells its own MD5
@ -272,7 +271,7 @@ The newline character at the end is mandatory.
libisoburn
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
xorriso is based on libisofs which does ISO 9660 filesystem aspects and on
libburn which does the input and output aspects. Parts of this foundation
are accessed via libisoburn, which is closely related to xorriso.
@ -290,9 +289,9 @@ and a matching dynamically linked xorriso binary.
This binary is very lean but depends on properly installed libraries of
suitable revision.
Dynamic library and compile time header requirements for libisoburn-0.6.2 :
- libburn.so.4 , version libburn-0.8.4 or higher
- libisofs.so.6 , version libisofs-0.6.36 or higher
Dynamic library and compile time header requirements for libisoburn-1.0.6 :
- libburn.so.4 , version libburn-1.0.6 or higher
- libisofs.so.6 , version libisofs-1.0.6 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.
@ -410,17 +409,23 @@ By Mario Danic <mario.danic@gmail.com>, libburn, libisofs
Vreixo Formoso <metalpain2002@yahoo.es>, libisofs, libisoburn
Thomas Schmitt <scdbackup@gmx.net>, libburn, libisofs,
libisoburn, xorriso
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
Copyright (C) 2006-2011 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in libburn still containing parts
of old
Libburn. By Derek Foreman <derek@signalmarketing.com> and
Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
GNU xorriso contains libjte out of source package jigit >= 1.17
Copyright (C) 2000-2007 Free Software Foundation, Inc.
2004-2011 Steve McIntyre
2010-2011 George Danchev, Thomas Schmitt
------------------------------------------------------------------------------
This text itself is
Copyright (c) 2007 - 2010 Thomas Schmitt <scdbackup@gmx.net>
Copyright (c) 2007 - 2011 Thomas Schmitt <scdbackup@gmx.net>
and is freely distributable.
It shall only be modified in sync with the technical properties of xorriso.
If you make use of the license to derive modified versions of xorriso

View File

@ -640,6 +640,16 @@ int Xorriso_lst_detach_text(struct Xorriso_lsT *entry, int flag)
}
int Xorriso_lst_get_last(struct Xorriso_lsT *entry, struct Xorriso_lsT **last,
int flag)
{
*last= NULL;
if(entry != NULL)
for((*last)= entry; (*last)->next != NULL; (*last)= (*last)->next);
return(1);
}
/* --------------------------- End Xorriso_lsT ---------------------------- */

View File

@ -130,6 +130,8 @@ char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
int Xorriso_lst_detach_text(struct Xorriso_lsT *entry, int flag);
int Xorriso_lst_get_last(struct Xorriso_lsT *entry, struct Xorriso_lsT **last,
int flag);
int Exclusions_new(struct ExclusionS **o, int flag);

View File

@ -3,7 +3,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -26,6 +26,28 @@
#include <time.h>
#include <errno.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
#ifdef Xorriso_standalonE
#ifdef Xorriso_with_libjtE
#include "../libjte/libjte.h"
#endif
#else
#ifdef Xorriso_with_libjtE
#include <libjte/libjte.h>
#endif
#endif /* ! Xorriso_standalonE */
#include "xorriso.h"
#include "xorriso_private.h"
@ -104,15 +126,19 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->split_size= 0;
strcpy(m->list_delimiter, "--");
m->ino_behavior= 7;
m->iso_level= 3;
m->do_joliet= 0;
m->do_iso1999= 0;
m->do_aaip= 0;
m->do_md5= 0;
m->no_emul_toc= 0;
m->do_old_empty= 0;
m->scdbackup_tag_name[0]= 0;
m->scdbackup_tag_time[0]= 0;
m->scdbackup_tag_written[0]= 0;
m->scdbackup_tag_listname[0]= 0;
m->relax_compliance= 0;
m->untranslated_name_len= 0;
m->do_follow_pattern= 1;
m->do_follow_param= 0;
m->do_follow_links= 0;
@ -154,7 +180,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->toc_emulation_flag= 0;
m->image_start_mode= 0;
m->image_start_value[0]= 0;
m->displacement= 0;
m->displacement_sign= 0;
m->drives_exclusive= 1;
m->early_stdio_test= 0;
m->do_calm_drive= 1;
m->indev[0]= 0;
m->in_drive_handle= NULL;
@ -180,6 +209,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->speed= 0;
m->fs= 4*512; /* 4 MiB */
m->padding= 300*1024;
m->do_padding_by_libisofs= 0;
m->alignment= 0;
m->do_stream_recording= 0;
m->dvd_obs= 0;
@ -210,11 +240,24 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->partition_offset= 0;
m->partition_secs_per_head= 0;
m->partition_heads_per_cyl= 0;
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
m->appended_partitions[i]= NULL;
m->appended_part_types[i]= 0;
}
m->ascii_disc_label[0]= 0;
m->vol_creation_time= 0;
m->vol_modification_time= 0;
m->vol_expiration_time= 0;
m->vol_effective_time= 0;
m->vol_uuid[0]= 0;
#ifdef Xorriso_with_libjtE
m->libjte_handle= NULL;
#endif
m->jigdo_params= NULL;
m->jigdo_values= NULL;
m->libjte_params_given= 0;
m->loaded_boot_bin_lba= 0;
m->loaded_boot_cat_path[0]= 0;
m->allow_graft_points= 0;
@ -255,15 +298,16 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
strcpy(m->report_about_text, "UPDATE");
Xorriso__text_to_sev(m->report_about_text, &m->report_about_severity, 0);
m->library_msg_direct_print= 0;
strcpy(m->abort_on_text,"FATAL");
strcpy(m->abort_on_text,"FAILURE");
Xorriso__text_to_sev(m->abort_on_text, &m->abort_on_severity, 0);
m->abort_on_is_default= 1;
m->problem_status= 0;
m->problem_status_text[0]= 0;
m->errfile_log[0]= 0;
m->errfile_mode= 0;
m->errfile_fp= NULL;
m->img_read_error_mode= 2; /* abort faulty image reading with FATAL */
m->img_read_error_mode= 1; /* abort faulty image reading with FAILURE */
m->extract_error_mode= 1; /* keep extracted files after read error */
strcpy(m->return_with_text, "SORRY");
Xorriso__text_to_sev(m->return_with_text, &m->return_with_severity, 0);
@ -298,6 +342,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->last_update_time= 0.0;
m->find_compare_result= 1;
m->find_check_md5_result= 0;
m->last_abort_file_time= 0.0;
m->node_counter= 0;
m->node_array_size= 0;
@ -320,6 +365,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->perm_stack= NULL;
m->update_flags= 0;
m->result_line[0]= 0;
m->result_line_counter= 0;
m->result_page_counter= 0;
@ -397,10 +444,15 @@ int Xorriso_destroy_re(struct XorrisO *m, int flag)
int Xorriso_destroy(struct XorrisO **xorriso, int flag)
{
struct XorrisO *m;
int i;
m= *xorriso;
if(m==NULL)
return(0);
/* Give up drives and image to unref all connected xorriso objects */
Xorriso_give_up_drive(m, 3);
if(m->in_charset!=NULL)
free(m->in_charset);
if(m->out_charset!=NULL)
@ -417,6 +469,17 @@ int Xorriso_destroy(struct XorrisO **xorriso, int flag)
Xorriso_destroy_hln_array(m, 0);
Xorriso_destroy_di_array(m, 0);
#ifdef Xorriso_with_libjtE
if(m->libjte_handle)
libjte_destroy(&(m->libjte_handle));
#endif
Xorriso_lst_destroy_all(&(m->jigdo_params), 0);
Xorriso_lst_destroy_all(&(m->jigdo_values), 0);
for(i= 0; i < Xorriso_max_appended_partitionS; i++)
if(m->appended_partitions[i] != NULL)
free(m->appended_partitions[i]);
Xorriso_detach_libraries(m, flag&1);
free((char *) m);

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -284,6 +284,7 @@ ex:;
bit1= compare ctime
bit2= check only existence of both file objects
count one or both missing as "difference"
bit26= do not issue message about missing disk file
bit27= for Xorriso_path_is_excluded(): bit0
bit28= examine eventual disk_path link target rather than link
bit29= do not issue pacifier messages
@ -320,7 +321,7 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
sprintf(respt , "? %s (DISK) : exluded by %s\n",
Text_shellsafe(disk_adr, sfe, 0),
(ret==1 ? "-not_paths" : "-not_leaf"));
if(!(flag&(1<<31)))
if(! (flag & ((1 << 31) | (1 << 26))))
Xorriso_result(xorriso,0);
missing= 1;
(*result)|= 1;
@ -334,7 +335,7 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
if(ret==-1) {
sprintf(respt , "? %s (DISK) : cannot lstat() : %s\n",
Text_shellsafe(disk_adr, sfe, 0), strerror(errno));
if(!(flag&(1<<31)))
if(! (flag & ((1 << 31) | (1 << 26))))
Xorriso_result(xorriso,0);
missing= 1;
(*result)|= 1;
@ -681,10 +682,11 @@ int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
Set to NULL if calling this function from outside ISO world
@param flag bit0= update rather than compare
bit1= find[ix] is in recursion
bit2= update_merge : do not delete but mark visited and found
@return <=0 error, 1= ok , 2= iso_path was deleted
3=ok, do not dive into directory (e.g. because it is a split file)
*/
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter, void *node,
char *iso_path, char *iso_prefix, char *disk_prefix,
int flag)
{
@ -709,22 +711,24 @@ int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
follow_links= (xorriso->do_follow_links ||
(xorriso->do_follow_param && !(flag&2))) <<28;
ret= Xorriso_compare_2_files(xorriso, disk_path, iso_path, "", &result,
2 | follow_links | ((!(flag&2))<<27) | ((flag&1)<<31));
2 | follow_links | ((!!(flag & 4)) << 26)
| ((!(flag&2))<<27) | ((flag&1)<<31));
/* was once: | ((!(flag&1))<<29) */
if(ret<xorriso->find_compare_result)
xorriso->find_compare_result= ret;
if(flag&1) {
if(ret<=0) {
if(ret<0)
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
return(ret);
uret= Xorriso_update_interpreter(xorriso, boss_iter, result,
disk_path, iso_path, (flag&2)<<1);
if(uret<=0)
ret= 0;
if(uret==2)
deleted= 1;
}
if(ret<0)
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
return(ret);
if(ret > 0)
result= 0;
uret= Xorriso_update_interpreter(xorriso, boss_iter, node, result,
disk_path, iso_path,
((flag & 2) << 1) | ((flag & 4) >> 1));
if(uret<=0)
ret= 0;
if(uret==2)
deleted= 1;
}
if(ret<0)
return(ret);
@ -742,15 +746,19 @@ int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
Do not call Xorriso_hardlink_update()
Overwrite exactly if normal mode would not,
else do nothing
bit1= do not delete files which are not found under
disk_path, but rather mark visited files and mark
files which were found.
bit2= -follow: this is not a command parameter
@return <=0 error, 1= ok , 2= iso_rr_path node object has been deleted ,
3= no action taken
*/
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
int Xorriso_update_interpreter(struct XorrisO *xorriso,
void *boss_iter, void *node,
int compare_result, char *disk_path,
char *iso_rr_path, int flag)
{
int ret, deleted= 0, is_split= 0, i, loop_count, late_hardlink_update= 0;
int ret= 1, deleted= 0, is_split= 0, i, loop_count, late_hardlink_update= 0;
char sfe[5*SfileadrL];
struct stat stbuf;
struct SplitparT *split_parts= NULL;
@ -767,6 +775,15 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
ret= 3; goto ex;
}
if((flag & 2) && !(compare_result & 2)) {
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, node,
!(compare_result & 1));
if(ret <= 0)
goto ex;
}
if(compare_result == 0)
{ret= 1; goto ex;}
if(compare_result&((1<<11)|(1<<13))) {
if(flag & 1)
{ret= 3; goto ex;}
@ -788,7 +805,8 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
} else {
/* Hard link relation has changed resp. was not recorded. */
ret= Xorriso_hardlink_update(xorriso, &compare_result,
disk_path, iso_rr_path, flag & 4);
disk_path, iso_rr_path,
(flag & 4) | ((compare_result >> 21) & 2));
if(ret < 0)
goto ex;
if(ret == 2)
@ -805,15 +823,24 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
deleted= 1;
ret= Xorriso_graft_in(xorriso, boss_iter, disk_path, iso_rr_path,
(off_t) 0, (off_t) 0, 2|(flag&4));
if(ret <= 0)
goto ex;
if(flag & 2) {
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, NULL, 1);
if(ret <= 0)
goto ex;
}
}
sprintf(xorriso->info_text, "Deleted and re-added ");
} else if(compare_result&(1)) {
delete:;
/* disk_adr not existing */
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, iso_rr_path, 1);
deleted= 1;
sprintf(xorriso->info_text, "Deleted ");
if(!(flag & 2)) {
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, iso_rr_path, 1);
deleted= 1;
sprintf(xorriso->info_text, "Deleted ");
}
} else if(compare_result&(2|128|(1<<12)|(1<<14)|(1<<15))) {
/* iso_adr not existing, size, cannot open iso file, early eof of iso file
@ -894,6 +921,11 @@ overwrite:;
if(ret < 0)
goto ex;
}
if(flag & 2) {
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, NULL, 1);
if(ret <= 0)
goto ex;
}
if(flag & 1)
sprintf(xorriso->info_text, "Widened hard link ");
else

View File

@ -23,16 +23,21 @@ int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
@param node Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
@param flag bit0= update rather than compare
*/
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter, void *node,
char *iso_path, char *iso_prefix, char *disk_prefix,
int flag);
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
@param @node Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
*/
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
int Xorriso_update_interpreter(struct XorrisO *xorriso,
void *boss_iter, void *node,
int compare_result, char *disk_path,
char *iso_rr_path, int flag);

View File

@ -1,9 +1,9 @@
# configure.ac stems from xorriso/configure_ac.txt and leads to ./configure
# Copyright (c) 2007 - 2010 Thomas Schmitt <scdbackup@gmx.net>
# Copyright (c) 2007 - 2011 Thomas Schmitt <scdbackup@gmx.net>
# Provided under GPL version 2 or later.
AC_INIT([xorriso], [0.6.2], [http://libburnia-project.org])
AC_INIT([xorriso], [1.0.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
AC_CANONICAL_HOST
@ -20,16 +20,16 @@ AC_CONFIG_HEADER(config.h)
AH_TEMPLATE([Xorriso_standalonE], [Define to prepare sources for statically linked xorriso])
AC_DEFINE([Xorriso_standalonE], [])
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=8
BURN_MAJOR_VERSION=1
BURN_MINOR_VERSION=0
BURN_MICRO_VERSION=7
AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=37
LIBISOFS_MAJOR_VERSION=1
LIBISOFS_MINOR_VERSION=0
LIBISOFS_MICRO_VERSION=7
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)
@ -130,15 +130,15 @@ AC_ARG_ENABLE(debug,
, enable_debug=yes)
if test x$enable_debug != xyes; then
if test x$GCC = xyes; then
CFLAGS="$CFLAGS -O3"
CFLAGS="$CFLAGS -fexpensive-optimizations"
CFLAGS="-O3 $CFLAGS"
CFLAGS="-fexpensive-optimizations $CFLAGS"
fi
CFLAGS="$CFLAGS -DNDEBUG"
CFLAGS="-DNDEBUG $CFLAGS"
else
if test x$GCC = xyes; then
CFLAGS="$CFLAGS -g -pedantic -Wall"
CFLAGS="-g -pedantic -Wall $CFLAGS"
fi
CFLAGS="$CFLAGS -DDEBUG"
CFLAGS="-DDEBUG $CFLAGS"
fi
@ -215,7 +215,8 @@ then
fi
AH_TEMPLATE([Libisofs_with_zliB], [Define to use compression via libz])
AH_TEMPLATE([Libisofs_with_zliB], [Define to use compression via zlib])
AH_TEMPLATE([LIBJTE_WITH_ZLIB], [Allow libjte to use zlib])
AC_ARG_ENABLE(zlib,
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
, enable_zlib=yes)
@ -225,20 +226,74 @@ dnl If not, erase this macro which would enable use of compress2() and others.
dnl Linking fails on SuSE 9.0 because zlib has compress2() but lacks
dnl compressBound(). So compressBound is the more modern thing to test.
dnl The empty parameter after "compressBound" causes -lz.
ZLIB_DEF="-DLibisofs_with_zliB"
ZLIB_DEF=yes
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
if test x$ZLIB_DEF = x-DLibisofs_with_zliB
if test x$ZLIB_DEF = xyes
then
AC_DEFINE([Libisofs_with_zliB], [])
AC_DEFINE([LIBJTE_WITH_ZLIB], [])
fi
# libjte source is included in GNU xorriso. Enable it if zlib is enabled.
AH_TEMPLATE([Xorriso_with_libjtE],
[Define to use Jigdo Template Extraction via libjte])
AH_TEMPLATE([Libisofs_with_libjtE],
[Define to use Jigdo Template Extraction via libjte])
if test x$ZLIB_DEF = xyes
then
AC_DEFINE([Xorriso_with_libjtE], [])
AC_DEFINE([Libisofs_with_libjtE], [])
LIBJTE_DEF=yes
echo "enabled built-in libjte"
else
LIBJTE_DEF=
echo "disabled libjte because zlib not enabled or not available"
fi
AH_TEMPLATE([THREADED_CHECKSUMS],
[Define to use multi-threading in built-in libjte])
AC_ARG_ENABLE(jtethreads,
[ --enable-jtethreads Enable multi-threading in libjte, default=yes],
, enable_jtethreads=yes)
if test x$LIBJTE_DEF = xyes
then
if test "x$enable_jtethreads" = xyes; then
AC_DEFINE([THREADED_CHECKSUMS], [])
echo "enabled multi-threading in libjte"
else
echo "disabled multi-threading in libjte"
fi
fi
AH_TEMPLATE([LIBJTE_WITH_LIBBZ2],
[Define to use libbz2 by built-in libjte])
AC_ARG_ENABLE(libbz2,
[ --enable-libbz2 Enable use of libbz2 by libjte, default=yes],
, enable_libbz2=yes)
if test "x$enable_libbz2" = xyes -a x$LIBJTE_DEF = xyes ; then
dnl Check whether there is the header for libbz2.
BZIP2_DEF=yes
AC_CHECK_HEADER(bzlib.h, AC_CHECK_LIB(bz2, BZ2_bzCompressInit, , BZIP2_DEF= ), BZIP2_DEF= )
else
BZIP2_DEF=
fi
if test x$BZIP2_DEF = xyes
then
AC_DEFINE([LIBJTE_WITH_LIBBZ2], [])
BZIP2_DEF="-DLIBJTE_WITH_LIBBZ2"
fi
AH_TEMPLATE([Libburn_use_libcdiO], [Define to use libcdio as system adapter])
AC_ARG_ENABLE(libcdio,
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
, enable_libcdio=no)
if test x$enable_libcdio = xyes; then
dnl Check whether there is libcdio-devel and libcdio-runtime.

View File

@ -1,117 +1,13 @@
#!/bin/sh
#
# convert_man_to_html.sh - ts A80118
# convert_man_to_html.sh - ts B10309
#
# Generates a HTML version of man page xorriso.1
# Generates a HTML version of man pages xorriso.1 , xorrisofs.1
#
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-1.0.4)
#
# set -x
xorriso/man_xorriso_to_html.sh
xorriso/man_xorrisofs_to_html.sh
man_dir=$(pwd)"/xorriso"
export MANPATH="$man_dir"
manpage="xorriso"
raw_html=$(pwd)/"xorriso/raw_man_1_xorriso.html"
htmlpage=$(pwd)/"xorriso/man_1_xorriso.html"
if test -r "$man_dir"/"$manpage".1
then
dummy=dummy
else
echo "Cannot find readable man page source $1" >&2
exit 1
fi
if test -e "$man_dir"/man1
then
dummy=dummy
else
ln -s . "$man_dir"/man1
fi
if test "$1" = "-work_as_filter"
then
# set -x
sed \
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorriso, manual, xorriso, CD, CD-RW, CD-R, burning, cdrecord, compatible"><META NAME="robots" CONTENT="follow">/' \
-e 's/<title>XORRISO<\/title>/<title>man 1 xorriso<\/title>/' \
-e 's/<h1 align=center>XORRISO<\/h1>/<h1 align=center>man 1 xorriso<\/h1>/' \
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
-e 's/<b>Overview of features:<\/b>/\&nbsp;<BR><b>Overview of features:<\/b>/' \
-e 's/<b>General information paragraphs:<\/b>/\&nbsp;<BR><b>General information paragraphs:<\/b>/' \
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
-e 's/<b>Session model:<\/b>/\&nbsp;<BR><b>Session model:<\/b>/' \
-e 's/<b>Media types and states:<\/b>/\&nbsp;<BR><b>Media types and states:<\/b>/' \
-e 's/<b>Creating, Growing, Modifying, Blind/\&nbsp;<BR><b>Creating, Growing, Modifying, Blind/' \
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
-e 's/<b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><b>Dialog, Readline, Result pager:<\/b>/' \
-e 's/<b>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Influencing the behavior of image/\&nbsp;<BR><b>Influencing the behavior of image/' \
-e 's/<b>Inserting files into ISO image:<\/b>/\&nbsp;<BR><b>Inserting files into ISO image:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>File manipulations:<\/b>/\&nbsp;<BR><b>File manipulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Tree traversal command -find:<\/b>/\&nbsp;<BR><b>Tree traversal command -find:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;iso_rr_pattern/<p>\&nbsp;<BR><b>\&minus;iso_rr_pattern/' \
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
-e 's/<b>Filters for data file content:<\/b>/\&nbsp;<BR><b>Filters for data file content:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Writing the result, drive control:<\/b>/\&nbsp;<BR><b>Writing the result, drive control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^-find \/ /\&nbsp;\&nbsp;-find \/ /' \
-e 's/<b>Settings for file insertion:<\/b>/\&nbsp;<BR><b>Settings for file insertion:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^$<\/b> ln -s/\&nbsp;\&nbsp;$<\/b> ln -s/' \
-e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><b>Settings for result writing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \
-e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Evaluation of readability and recovery:<\/b>/\&nbsp;<BR><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox ISO-to-disk restore options:<\/b>/\&nbsp;<BR><b>osirrox ISO-to-disk restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \
-e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \
-e 's/^features:<\/b>/features:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Support for frontend/\&nbsp;<BR><b>Support for frontend/' \
-e 's/^listening at stdout:<\/b>/listening at stdout:<\/b><BR>\&nbsp;<BR>/' \
-e 's/xorriso -outdev \/dev\/sr2 \\ -blank fast \\ -pathspecs on/xorriso -outdev \/dev\/sr2 -blank fast -pathspecs on/' \
-e 's/\\ -add \\ \/sounds=\/home\/me\/sounds \\ \/pictures \\ -- \\ -rm_r \\/ -add \/sounds=\/home\/me\/sounds \/pictures -- -rm_r /' \
-e 's/\/sounds\/indecent \\ \&rsquo;\/pictures\/\*private\*\&rsquo; \\/\/sounds\/indecent \&rsquo;\/pictures\/*private*\&rsquo; /' \
-e 's/\/pictures\/confidential \\ -- \\ -add \\/\/pictures\/confidential -- -add/' \
-e 's/xorriso -dev \/dev\/sr2 \\ -rm_r \/sounds -- \\ -mv \\/xorriso -dev \/dev\/sr2 -rm_r \/sounds -- -mv /' \
-e 's/\/pictures\/confidential \\ \/pictures\/restricted \\ -- \\ -chmod/\/pictures\/confidential \/pictures\/restricted -- -chmod/' \
-e 's/go-rwx \/pictures\/restricted -- \\ -pathsspecs on \\ -add \\/go-rwx \/pictures\/restricted -- -pathsspecs on -add /' \
-e 's/\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy /\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy/' \
-e 's/\/movies=\/home\/me\/prepared_for_dvd\/movies \\ -- \\ -commit/\/movies=\/home\/me\/prepared_for_dvd\/movies -- -commit/' \
-e 's/xorriso -indev \/dev\/sr2 \\ -rm_r \/sounds -- \\/xorriso -indev \/dev\/sr2 -rm_r \/sounds -- /' \
-e 's/-outdev \/dev\/sr0 -blank fast \\ -commit -eject all/-outdev \/dev\/sr0 -blank fast -commit -eject all/' \
-e 's/See section FILES/See section <A HREF="#FILES">FILES<\/A>/' \
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
<"$2" >"$htmlpage"
set +x
chmod u+rw,go+r,go-w "$htmlpage"
echo "Emerged file:"
ls -lL "$htmlpage"
else
export BROWSER='cp "%s" '"$raw_html"
man -H "$manpage"
"$0" -work_as_filter "$raw_html"
rm "$raw_html"
rm "$man_dir"/man1
fi

View File

@ -1087,6 +1087,7 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
time_t date= 0;
mode_t mode_or= 0, mode_and= ~1;
char *target, *text_2, sfe[5*SfileadrL], *disk_prefix, iso_path[SfileadrL];
char *basename;
struct FindjoB *subjob;
struct stat stbuf;
@ -1131,8 +1132,8 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
if(ret<xorriso->find_compare_result)
xorriso->find_compare_result= ret;
if(ret==0) {
uret= Xorriso_update_interpreter(xorriso, NULL, compare_result,
abs_path, iso_path, (flag&1)<<2);
uret= Xorriso_update_interpreter(xorriso, NULL, NULL, compare_result,
abs_path, iso_path, ((flag&1)<<2) | 2);
if(uret<=0)
ret= 0;
}
@ -1167,6 +1168,16 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
Xorriso_result(xorriso,0);
}
{ret= 1; goto ex;}
} else if(action == 40) { /* estimate_size */
basename= strrchr(abs_path, '/');
if(basename != NULL)
basename++;
else
basename= abs_path;
ret= lstat(abs_path, &stbuf);
if(ret != -1)
ret= Xorriso_estimate_file_size(xorriso, job, basename, stbuf.st_mode,
stbuf.st_size, 0);
} else {
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
@ -1347,10 +1358,12 @@ ex:;
bit5= -extract_single: eventually do not insert directory tree
*/
int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
char **src_array, char **tgt_array, int flag)
char **src_array, char **tgt_array,
int *problem_count, int flag)
{
int i, ret, with_node_array= 0, hflag= 0, hret;
*problem_count= 0;
if(!(((xorriso->ino_behavior & 16) && xorriso->do_restore_sort_lba) ||
(xorriso->ino_behavior & 4) || (flag & 1))) {
ret= Xorriso_make_hln_array(xorriso, 0);
@ -1370,8 +1383,9 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
(off_t) 0, (off_t) 0, hflag);
if(ret <= 0) {
(*problem_count)++;
hret= Xorriso_eval_problem_status(xorriso, ret, 0);
if(ret < 0)
if(hret < 0)
goto ex;
}
with_node_array= 1;
@ -1392,8 +1406,9 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
(off_t) 0, (off_t) 0, 2 << 7);
if(ret <= 0) {
(*problem_count)++;
hret= Xorriso_eval_problem_status(xorriso, ret, 0);
if(ret < 0)
if(hret < 0)
goto ex;
}
}
@ -1411,6 +1426,7 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
(off_t) 0, (off_t) 0, 0);
if(ret <= 0) {
(*problem_count)++;
hret= Xorriso_eval_problem_status(xorriso, ret, flag & 32);
if(ret < 0)
goto ex;

View File

@ -69,7 +69,8 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
bit5= -extract_single: eventually do not insert directory tree
*/
int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
char **src_array, char **tgt_array, int flag);
char **src_array, char **tgt_array,
int *problem_count, int flag);
/* @param flag bit0= path is a directory
bit2= recursion: do not reassure in mode 2 "tree"

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -225,6 +225,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (4 | 32)))
aquire_flag|= 64;
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
burn_allow_drive_role_4(1 | (xorriso->early_stdio_test & 14));
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
burn_preset_device_open(1, 0, 0);
Xorriso_process_msg_queues(xorriso,0);
@ -368,17 +369,18 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
ext|= isoburn_ropt_noea;
if(xorriso->ino_behavior & 1)
ext|= isoburn_ropt_noino;
#ifdef isoburn_ropt_nomd5
if(!(xorriso->do_md5 & 1))
ext|= isoburn_ropt_nomd5;
#endif
if(xorriso->do_md5 & 32)
ext|= isoburn_ropt_nomd5tag;
isoburn_ropt_set_extensions(ropts, ext);
isoburn_ropt_set_default_perms(ropts, (uid_t) 0, (gid_t) 0, (mode_t) 0555);
isoburn_ropt_set_input_charset(ropts, xorriso->in_charset);
isoburn_ropt_set_auto_incharset(ropts, !!(xorriso->do_aaip & 512));
isoburn_ropt_set_displacement(ropts, xorriso->displacement,
xorriso->displacement_sign);
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
Xorriso_pacifier_reset(xorriso, 0);
@ -420,8 +422,11 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, sev, 0);
if(read_ret == ISO_SB_TREE_CORRUPTED && (xorriso->do_md5 & 1)) {
Xorriso_msgs_submit(xorriso, 0,
"You might get a questionable ISO image tree by option -md5 'off'.",
0, "HINT", 0);
"This might be false MD5 alarm if an add-on session was written by growisofs.",
0, "HINT", 0);
Xorriso_msgs_submit(xorriso, 0,
"In this case you get an ISO image tree by option -md5 'load_check_off'",
0, "HINT", 0);
} else if(xorriso->img_read_error_mode!=0) {
Xorriso_msgs_submit(xorriso, 0, "You might get a partial or altered ISO image tree by option -error_behavior 'image_loading' 'best_effort' if -abort_on is set to be tolerant enough.",
0, "HINT", 0);
@ -498,15 +503,16 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
if(!(flag&32)) {
Xorriso_toc(xorriso, 1 | 8);
if(xorriso->loaded_volid[0]!=0) {
sprintf(xorriso->info_text,"Volume id : '%s'\n",
xorriso->loaded_volid);
Xorriso_info(xorriso, 0);
if(strcmp(xorriso->loaded_volid, xorriso->volid) != 0 &&
!xorriso->volid_default) {
sprintf(xorriso->info_text, "New volume id: '%s'\n", xorriso->volid);
if(xorriso->loaded_volid[0] != 0 &&
(state == BURN_DISC_APPENDABLE || state == BURN_DISC_FULL)) {
sprintf(xorriso->info_text,"Volume id : '%s'\n",
xorriso->loaded_volid);
Xorriso_info(xorriso, 0);
}
}
if(strcmp(xorriso->loaded_volid, xorriso->volid) != 0 &&
!xorriso->volid_default) {
sprintf(xorriso->info_text, "New volume id: '%s'\n", xorriso->volid);
Xorriso_info(xorriso, 0);
}
}
@ -828,14 +834,18 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
if(profile_no == 0x0002 && s == BURN_DISC_EMPTY)
profile_no= 0;
sprintf(respt, "Media current: ");
drive_role= burn_drive_get_drive_role(drive);
if (profile_no > 0 && ret > 0) {
if (profile_name[0])
sprintf(respt+strlen(respt), "%s", profile_name);
else
sprintf(respt+strlen(respt), "%4.4Xh", profile_no);
drive_role= burn_drive_get_drive_role(drive);
if(drive_role==2)
sprintf(respt+strlen(respt), ", overwriteable");
else if(drive_role == 4)
sprintf(respt+strlen(respt), ", random read-only");
else if(drive_role == 5)
sprintf(respt+strlen(respt), ", random write-only");
else if(drive_role==0 || drive_role==3)
sprintf(respt+strlen(respt), ", sequential");
strcat(respt, "\n");
@ -894,15 +904,21 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
if (disc==NULL) {
Xorriso_process_msg_queues(xorriso,0);
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
nwa= start_byte / 2048;
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
if(flag&1)
if(drive_role == 5 && s == BURN_DISC_APPENDABLE) {
ret= burn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa);
if(ret == 1)
num_data= nwa;
} else {
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
nwa= start_byte / 2048;
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
if(flag&1)
{ret= 0; goto ex;}
sprintf(xorriso->info_text, "Cannot obtain Table Of Content");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
{ret= 0; goto ex;}
sprintf(xorriso->info_text, "Cannot obtain Table Of Content");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
{ret= 0; goto ex;}
}
}
/* fabricate TOC */
@ -917,13 +933,13 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
1, 0, image_blocks, volume_id);
nwa= image_blocks;
} else {
nwa= 0;
nwa= num_data;
ret= burn_disc_get_formats(drive, &status, &size, &dummy,
&num_formats);
if(ret>0 && status==BURN_FORMAT_IS_FORMATTED)
nwa= size/2048;
sprintf(respt, "%13s: %3d , %9d , %9ds , \n",
typetext, 1, 0, nwa);
typetext, 1, num_data, nwa);
}
if(!(flag&1))
Xorriso_toc_line(xorriso, flag & 8);
@ -1019,8 +1035,8 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
{ret= 1; goto ex;}
num_wasted= lba - num_payload;
num_nondata= lba - num_data;
Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1);
Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1);
sprintf(respt, "Media summary: %d session%s, %d data blocks, %s data",
num_sessions, (num_sessions==1 ? "" : "s"), num_data, mem_text);
num_free= isoburn_disc_available_space(drive, NULL);
@ -1157,7 +1173,7 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso,
*/
int Xorriso_list_formats(struct XorrisO *xorriso, int flag)
{
int ret, i, status, num_formats, profile_no, type;
int ret, i, status, num_formats, profile_no, type, alloc_blocks, free_blocks;
off_t size;
unsigned dummy;
char status_text[80], profile_name[90], *respt;
@ -1206,6 +1222,12 @@ int Xorriso_list_formats(struct XorrisO *xorriso, int flag)
sprintf(status_text, "illegal status according to MMC-5");
sprintf(respt, "Format status: %s\n", status_text);
Xorriso_result(xorriso,0);
ret= burn_disc_get_bd_spare_info(drive, &alloc_blocks, &free_blocks, 0);
if(ret == 1) {
sprintf(respt, "BD Spare Area: %d blocks consumed, %d blocks available\n",
alloc_blocks - free_blocks, free_blocks);
Xorriso_result(xorriso,0);
}
for (i= 0; i < num_formats; i++) {
ret= burn_disc_get_format_descr(drive, i, &type, &size, &dummy);
@ -1283,6 +1305,12 @@ int Xorriso_atip(struct XorrisO *xorriso, int flag)
else if(ret==3)
sprintf(respt+strlen(respt), "%s\n",
"Emulated (stdio-drive, sequential write-only)");
else if(ret == 4)
sprintf(respt+strlen(respt), "%s\n",
"Emulated (stdio-drive, 2k random read-only)");
else if(ret == 5)
sprintf(respt+strlen(respt), "%s\n",
"Emulated (stdio-drive, 2k random write-only)");
else if(ret!=1)
sprintf(respt+strlen(respt), "%s\n","Emulated (stdio-drive)");
else
@ -1530,6 +1558,7 @@ int Xorriso_scsi_log(struct XorrisO *xorriso, int flag)
return(1);
}
int Xorriso_check_md5_range(struct XorrisO *xorriso, off_t start_lba,
off_t end_lba, char md5[16], int flag)
{
@ -1609,7 +1638,31 @@ int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
md5, 0);
return(ret);
}
int Xorriso_check_for_abort(struct XorrisO *xorriso,
char *abort_file_path,
double post_read_time,
double *last_abort_file_time, int flag)
{
struct stat stbuf;
if(abort_file_path[0] == 0)
return(0);
if(post_read_time - *last_abort_file_time >= 0.1) {
if(stat(abort_file_path, &stbuf) != -1) {
if(stbuf.st_mtime >= xorriso->start_time) {
sprintf(xorriso->info_text,
"-check_media: Found fresh abort_file=%s", abort_file_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(1);
}
}
*last_abort_file_time= post_read_time;
}
return(0);
}
/* @param flag bit0= this is a follow-up session (i.e. on CD: TAO)
bit1= no pacifier messages
@ -1632,7 +1685,6 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
off_t data_count, to_read, read_count= 0, write_amount;
double pre_read_time, post_read_time, time_diff, total_time_diff= 0;
double last_abort_file_time= 0;
struct stat stbuf;
void *ctx= NULL, *cloned_ctx= NULL;
char md5[16], tag_md5[16];
uint32_t pos, range_start, range_size, next_tag= 0, lba, md5_spot_lba= 0;
@ -1673,21 +1725,10 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
post_read_time= Sfile_microtime(0);
for(i= 0; i < block_count; i+= to_read) {
skip_reading= 0;
if(job->abort_file_path[0]) {
if(post_read_time - last_abort_file_time >= 0.1) {
if(stat(job->abort_file_path, &stbuf) != -1) {
if(stbuf.st_mtime >= xorriso->start_time) {
sprintf(xorriso->info_text,
"-check_media: Found fresh abort_file=%s",
job->abort_file_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
goto abort_check;
}
}
last_abort_file_time= post_read_time;
}
}
ret= Xorriso_check_for_abort(xorriso, job->abort_file_path, post_read_time,
&last_abort_file_time, 0);
if(ret == 1)
goto abort_check;
if(job->item_limit > 0 &&
Spotlist_count(spotlist, 0) + 2 >= job->item_limit) {
sprintf(xorriso->info_text, "-check_media: Reached item_limit=%d",
@ -2003,8 +2044,8 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
int media_blocks= 0, read_chunk= 16, ret, mode, start_lba= 0;
int blocks, os_errno, i, j, last_track_end= -1, track_blocks, track_lba;
int num_sessions, num_tracks, declare_untested= 0, md5_start;
int read_capacity= -1, end_lba, hret, count, quality;
char *toc_info= NULL;
int read_capacity= -1, end_lba, hret, count, quality, profile_no;
char *toc_info= NULL, profile_name[80];
struct burn_drive *drive;
struct burn_drive_info *dinfo;
struct isoburn_toc_disc *isoburn_disc= NULL;
@ -2063,6 +2104,9 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
ret= burn_get_read_capacity(drive, &read_capacity, 0);
if(ret <= 0)
read_capacity= -1;
ret = burn_disc_get_profile(drive, &profile_no, profile_name);
if(ret <= 0)
profile_no= 0;
if(job->max_lba >= 0) {
blocks= job->max_lba + 1 - start_lba;
@ -2087,6 +2131,16 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
continue;
track_lba= isoburn_entry.start_lba;
track_blocks= isoburn_entry.track_blocks;
/* The last track of an appendable BD-R reports more blocks than the
read capacity allows. All BD-R track sizes are multiple of 64 kB.
*/
if (i == num_sessions - 1 &&
(track_lba + track_blocks > read_capacity &&
track_lba + track_blocks < read_capacity + 32 &&
(profile_no == 0x41 || profile_no == 0x40)))
track_blocks= read_capacity - track_lba;
md5_start= track_lba;
if(i == 0 && j == 0) {
if(track_lba == 32) {

View File

@ -33,5 +33,10 @@ int Xorriso_get_drive_handles(struct XorrisO *xorriso,
struct burn_drive **drive,
char *attempt, int flag);
int Xorriso_check_for_abort(struct XorrisO *xorriso,
char *abort_file_path,
double post_read_time,
double *last_abort_file_time, int flag);
#endif /* ! Xorriso_pvt_drive_mgt_includeD */

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -118,6 +118,8 @@ int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
if(cmd != NULL) {
if(cmd->refcount > 0)
return(0);
if(cmd->path != NULL)
free(cmd->path);
if(cmd->suffix != NULL)
free(cmd->suffix);
if(cmd->argv != NULL) {
@ -128,6 +130,7 @@ int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
}
if(cmd->name != NULL)
free(cmd->name);
free((char *) cmd);
}
free((char *) *filter);
*filter= NULL;
@ -395,7 +398,7 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
sprintf(xorriso->info_text,
"-set_filter: UID and EUID differ. Will not run external programs.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(0);
ret= 0; goto ex;
}
#endif /* ! Xorriso_allow_extf_suiD */

View File

@ -377,7 +377,11 @@ int Findjob_new(struct FindjoB **o, char *start_path, int flag)
if(m->start_path==NULL)
goto failed;
m->found_path= NULL;
m->estim_upper_size= 0;
m->estim_lower_size= 0;
m->subjob= NULL;
m->errmsg[0]= 0;
m->errn= 0;
ret= Exprnode_new(&(m->test_tree), m, NULL, "-find", (m->use_shortcuts)<<1);
if(ret<=0)

View File

@ -154,6 +154,10 @@ struct FindjoB {
37= mkisofs_r
38= sort_weight number
39= hide on|iso_rr|joliet|off
40= estimate_size
41= update_merge disk_equiv
42= rm_merge
43= clear_merge
*/
int action;
int prune;
@ -167,6 +171,8 @@ struct FindjoB {
int type; /* see Xorriso_set_time flag, also used as weight */
time_t date;
char *found_path;
off_t estim_upper_size;
off_t estim_lower_size;
struct FindjoB *subjob;
/* Errors */

View File

@ -376,7 +376,7 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
strcpy(bspec, "dir=/boot/isolinux");
memset(zeros, 0, 28);
if(bspec[0] && platform_id == 0 && patch_isolinux &&
load_size == 2048 && is_default_id) {
load_size == 2048 && is_default_id && emul == 0) {
sprintf(line, "-boot_image isolinux %s\n", bspec);
Xorriso_status_result(xorriso,filter,fp,flag&2);
return(1);
@ -388,7 +388,7 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
file_size= ((stbuf.st_size / (off_t) 512) +
!!(stbuf.st_size % (off_t) 512)) * 512;
if(platform_id == 0xef && !patch_isolinux &&
load_size == file_size && is_default_id) {
load_size == file_size && is_default_id && emul == 0) {
sprintf(line, "-boot_image any efi_path=");
Text_shellsafe(bin_path, line, 1);
strcat(line, "\n");
@ -403,6 +403,12 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
strcat(line, "\n");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (emul == 0);
sprintf(line, "-boot_image %s emul_type=%s\n",
form, emul == 2 ? "diskette" : emul == 1 ? "hard_disk" : "no_emulation");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (platform_id == 0 || (flag & 4));
sprintf(line, "-boot_image %s platform_id=0x%-2.2x\n", form, platform_id);
@ -449,6 +455,66 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
}
/*
bit0= do only report non-default settings
bit1= do only report to fp
*/
int Xorriso_boot_status_non_mbr(struct XorrisO *xorriso, IsoImage *image,
char *filter, FILE *fp, int flag)
{
int i, num_boots, sa_type;
char *paths[15], *line;
line= xorriso->result_line;
sa_type= (xorriso->system_area_options & 0xfc) >> 2;
if(sa_type == 3) {
sprintf(line, "-boot_image any sparc_label=");
Text_shellsafe(xorriso->ascii_disc_label, line, 1);
strcat(line, "\n");
Xorriso_status_result(xorriso, filter, fp, flag & 2);
return(0);
}
if(sa_type != 1 && sa_type != 2)
return(0);
num_boots= iso_image_get_mips_boot_files(image, paths, 0);
Xorriso_process_msg_queues(xorriso, 0);
if(num_boots <= 0)
return(num_boots);
if(sa_type == 2)
num_boots= 1;
for(i= 0; i < num_boots; i++) {
sprintf(line, "-boot_image any mips%s_path=", sa_type ==2 ? "el" : "");
Text_shellsafe(paths[i], line, 1);
strcat(line, "\n");
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
return(num_boots);
}
/*
bit0= do only report non-default settings
bit1= do only report to fp
*/
int Xorriso_append_part_status(struct XorrisO *xorriso, IsoImage *image,
char *filter, FILE *fp, int flag)
{
int i;
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
if(xorriso->appended_partitions[i] == NULL)
continue;
sprintf(xorriso->result_line, "-append_partition %d 0x%2.2x ",
i + 1, (unsigned int) xorriso->appended_part_types[i]);
Text_shellsafe(xorriso->appended_partitions[i], xorriso->result_line, 1);
strcat(xorriso->result_line, "\n");
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
return(1);
}
/*
bit0= do only report non-default settings
bit1= do only report to fp
@ -471,7 +537,21 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
line= xorriso->result_line;
no_defaults= flag & 1;
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to print boot info", 2 | 16);
if(ret<=0)
goto no_image;
image= isoburn_get_attached_image(drive);
Xorriso_process_msg_queues(xorriso,0);
if(image == NULL)
goto no_image;
ret= Xorriso_boot_status_non_mbr(xorriso, image, filter, fp, flag & 3);
if(ret < 0) /* == 0 is normal */
{ret= 0; goto ex;}
if(xorriso->boot_count == 0 && xorriso->boot_image_bin_path[0] == 0) {
no_image:;
if(xorriso->patch_isolinux_image & 1) {
sprintf(line, "-boot_image %s patch\n",
xorriso->patch_isolinux_image & 2 ? "grub" : form);
@ -485,17 +565,9 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
}
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
ret= 1; goto ex;
ret= 1; goto after_el_torito;
}
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to print boot info", 16);
if(ret<=0)
{ret= 0; goto ex;}
image= isoburn_get_attached_image(drive);
Xorriso_process_msg_queues(xorriso,0);
if(image == NULL)
{ret= 0; goto ex;}
if(xorriso->boot_image_bin_path[0] || xorriso->boot_count > 0)
bin_path_in_use= 1;
@ -531,6 +603,12 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
load_size= el_torito_get_load_size(boots[i]) * 512;
el_torito_get_id_string(boots[i], id_string);
el_torito_get_selection_crit(boots[i], sel_crit);
if(media_type == ELTORITO_FLOPPY_EMUL)
media_type= 2;
else if(media_type == ELTORITO_HARD_DISC_EMUL)
media_type= 1;
else
media_type= 0;
ret= Xorriso_boot_item_status(xorriso, xorriso->boot_image_cat_path,
path, platform_id, patch & 1, media_type,
load_size, id_string, sel_crit, "any",
@ -577,6 +655,11 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
if(ret <= 0)
goto ex;
after_el_torito:;
ret = Xorriso_append_part_status(xorriso, image, filter, fp, flag & 3);
if(ret <= 0)
goto ex;
ret= 1;
ex:
if(boots != NULL)
@ -650,10 +733,15 @@ no_boot:;
if(ret != 1)
goto no_boot;
ret= Xorriso_path_from_lba(xorriso, NULL, xorriso->loaded_boot_bin_lba,
path, 1);
if(ret > 0)
bin_path_valid= 1;
ret= iso_image_get_all_boot_imgs(image, &num_boots, &boots, &bootnodes, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret != 1) {
num_boots= 0;
} else {
ret= Xorriso_path_from_node(xorriso, (IsoNode *) bootnodes[0], path, 0);
if(ret > 0)
bin_path_valid= 1;
}
sprintf(respt, "Boot record : El Torito");
if(bin_path_valid)
ret= Xorriso_is_isohybrid(xorriso, bootimg_node, 0);
@ -712,9 +800,7 @@ no_boot:;
strcat(respt, "\n");
Xorriso_toc_line(xorriso, flag & 8);
ret= iso_image_get_all_boot_imgs(image, &num_boots, &boots, &bootnodes, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret == 1 && num_boots > 1) {
if(num_boots > 1) {
for(i= 1; i < num_boots; i++) {
ret= Xorriso_path_from_node(xorriso, (IsoNode *) bootnodes[i], path, 0);
if(ret > 0)
@ -768,6 +854,8 @@ int Xorriso_get_volume(struct XorrisO *xorriso, IsoImage **volume,
int Xorriso_change_is_pending(struct XorrisO *xorriso, int flag)
{
if(flag & 1)
return(xorriso->volset_change_pending == 1);
return(!!xorriso->volset_change_pending);
}
@ -781,7 +869,9 @@ int Xorriso_set_change_pending(struct XorrisO *xorriso, int flag)
ret= Xorriso_get_volume(xorriso, &image, 1);
if(ret <= 0)
return ret;
xorriso->volset_change_pending= 1;
/* Do not override mark of -as mkisofs -print-size */
if(xorriso->volset_change_pending != 2)
xorriso->volset_change_pending= 1;
if(!(flag & 1))
xorriso->hln_change_pending= 1;
return(1);
@ -798,7 +888,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
char *adr_value, char *cmd, int flag)
{
int ret, lba, track, session, params_flag= 0, is_safe= 0, is_extra_drive= 0;
int give_up= 0, mount_chardev= 0, status;
int give_up= 0, mount_chardev= 0, status, aquire_flag= 0;
char volid[33], *devadr, mount_command[SfileadrL], adr_data[163], *adr_pt;
char *dev_path, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL];
char sfe[5 * SfileadrL], *dpt, *sysname= "";
@ -867,7 +957,10 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
if(ret == 0 && strncmp(dev, "stdio:", 6) != 0)
sprintf(libburn_adr, "stdio:%s", dev);
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
ret= isoburn_drive_aquire(&dinfo, libburn_adr, 1);
aquire_flag= 1;
if((xorriso->toc_emulation_flag & 2) && adr_mode == 3)
aquire_flag|= 16;
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
burn_preset_device_open(1, 0, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
@ -887,7 +980,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
goto ex;
if(session <= 0 || track <= 0 || ret == 2) {
if(((session <= 0 || track <= 0) && !(aquire_flag & 16)) || ret == 2) {
Xorriso_msgs_submit(xorriso, 0,
"-mount : Given address does not point to an ISO 9660 session",
0, "FAILURE", 0);
@ -959,3 +1052,84 @@ ex:;
return(ret);
}
/* @param flag bit0= give up all boot file paths
bit1= refuse if already a path is added
*/
int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag)
{
int ret;
IsoImage *image;
char *paths[15];
ret= Xorriso_get_volume(xorriso, &image, 0);
if(ret <= 0)
return ret;
if(flag & 1) {
iso_image_give_up_mips_boot(image, 0);
Xorriso_process_msg_queues(xorriso,0);
return(1);
}
if(flag & 2) {
ret= iso_image_get_mips_boot_files(image, paths, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret < 0)
goto report_error;
if(ret > 0) {
Xorriso_msgs_submit(xorriso, 0,
"There is already a boot image file registered.",
0, "FAILURE", 0);
return(0);
}
}
ret = iso_image_add_mips_boot_file(image, path, 0);
Xorriso_process_msg_queues(xorriso,0);
if (ret < 0) {
report_error:;
Xorriso_report_iso_error(xorriso, "", ret,
"Error when adding MIPS boot file",
0, "FAILURE", 1);
return(0);
}
return(1);
}
int Xorriso_coordinate_system_area(struct XorrisO *xorriso, int sa_type,
int options, char *cmd, int flag)
{
int old_type, old_options;
static char *type_names[4] = {
"MBR", "MIPS Big Endian Volume Header", "MIPS Little Endian Boot Block",
"SUN Disk Label"};
old_type= (xorriso->system_area_options & 0xfc) >> 2;
old_options= xorriso->system_area_options & ~0xfc;
if((old_type != 0 || old_options != 0) &&
(old_type != sa_type || (old_options != 0 && old_options != options))) {
sprintf(xorriso->info_text, "%s : First sector already occupied by %s",
cmd, old_type < 4 ? type_names[old_type] : "other boot facility");
if(old_type == 0 && old_options == 2)
strcat(xorriso->info_text, " for ISOLINUX isohybrid");
if(old_type == 0 && old_options == 1)
strcat(xorriso->info_text, " for partition table");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto hint_revoke;
}
xorriso->system_area_options= ((sa_type << 2) & 0xfc) | (options & ~0xfc);
if(sa_type == 0)
xorriso->patch_system_area= xorriso->system_area_options;
return(1);
hint_revoke:;
if(old_type == 0)
sprintf(xorriso->info_text, "Revokable by -boot_image any discard");
else if(old_type == 1 || old_type == 2)
sprintf(xorriso->info_text, "Revokable by -boot_image any mips_discard");
else if(old_type == 3)
sprintf(xorriso->info_text, "Revokable by -boot_image any sparc_discard");
if(old_type < 4)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
return(0);
}

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -126,6 +126,11 @@ int Xorriso_graft_split(struct XorrisO *xorriso, IsoImage *volume,
if(ret<0)
return(ret);
*node= (IsoNode *) new_dir;
if(xorriso->update_flags & 1) {
ret= Xorriso_mark_update_merge(xorriso, img_name, node, 1);
if(ret <= 0)
return(0);
}
total_parts= size / xorriso->split_size;
if(size % xorriso->split_size)
total_parts++;
@ -161,7 +166,7 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
{
int ret, stbuf_valid= 0;
struct stat stbuf;
char sfe[5*SfileadrL];
char sfe[5*SfileadrL], *namept;
off_t size= 0;
if(lstat(disk_path, &stbuf) != -1) {
@ -213,11 +218,21 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
if(ret <= 0)
goto ex;
}
if(xorriso->update_flags & 1) {
ret= Xorriso_mark_update_merge(xorriso, img_name, *node, 1);
if(ret <= 0)
goto ex;
}
ex:;
if(ret<0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, nominal_source, ret,
if(ret == ISO_RR_NAME_TOO_LONG || ret == ISO_RR_NAME_RESERVED ||
ret == ISO_RR_PATH_TOO_LONG)
namept= nominal_target;
else
namept= nominal_source;
Xorriso_report_iso_error(xorriso, namept, ret,
"Cannot add node to tree", 0, "FAILURE", 1|2);
return(ret);
}
@ -304,8 +319,10 @@ cannot_open_dir:;
name= disk_path+strlen(disk_path);
if(Sfile_str(img_path, img_dir_path, 0)<=0)
{ret= -1; goto ex;}
if(img_path[0] || img_path[strlen(img_path)-1]!='/')
strcat(img_path,"/");
if(img_path[0] == 0)
strcat(img_path, "/");
else if(img_path[strlen(img_path) - 1] != '/')
strcat(img_path, "/");
img_name= img_path+strlen(img_path);
while(1) { /* loop over directory content */
@ -609,20 +626,30 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
int target_is_split, hide_attrs;
struct stat stbuf;
ret= Xorriso_path_is_excluded(xorriso, disk_path, !(flag&4));
if(ret<0)
return(ret);
if(ret>0)
return(3*!!(flag&16));
/* Check for mkisofs-style hidings */
hide_attrs= (flag >> 8) & 3;
if(hide_attrs != 3) {
ret= Xorriso_path_is_hidden(xorriso, disk_path, 0);
if (disk_path == NULL && !(flag & 1)) {
Xorriso_msgs_submit(xorriso, 0,
"Program error: Xorriso_graft_in(): disk_path == NULL && !(flag & 1)",
0, "ABORT", 0);
return(-1);
}
if (disk_path == NULL) {
disk_path= "";
} else {
ret= Xorriso_path_is_excluded(xorriso, disk_path, !(flag&4));
if(ret<0)
return(ret);
if(ret>=0)
hide_attrs|= ret;
if(ret>0)
return(3*!!(flag&16));
/* Check for mkisofs-style hidings */
if(hide_attrs != 3) {
ret= Xorriso_path_is_hidden(xorriso, disk_path, 0);
if(ret<0)
return(ret);
if(ret>=0)
hide_attrs|= ret;
}
}
for(cpt= img_path; 1; cpt++) {
@ -636,10 +663,14 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
break;
}
if(cpt!=NULL) {
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
if(disk_path[0])
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
sprintf(xorriso->info_text,
"Unsupported relative addressing in iso_rr_path %s (disk: %s)",
Text_shellsafe(img_path, sfe, 0), Text_shellsafe(disk_path, sfe2, 0));
"Unsupported relative addressing in iso_rr_path %s",
Text_shellsafe(img_path, sfe, 0));
if(disk_path[0])
sprintf(xorriso->info_text + strlen(xorriso->info_text),
" (disk: %s)", Text_shellsafe(disk_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
return(0);
}
@ -738,7 +769,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
return(ret);
if(ret==3) {
sprintf(xorriso->info_text, "User revoked adding of: %s",
Text_shellsafe(disk_path, sfe, 0));
disk_path[0] ? Text_shellsafe(disk_path, sfe, 0)
: Text_shellsafe(img_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(3*!!(flag&16));
}
@ -746,7 +778,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
goto handle_path_node;
}
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
if (disk_path[0])
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
sprintf(xorriso->info_text,
"While grafting '%s' : '%s' exists and may not be overwritten",
img_path, path);
@ -761,7 +794,8 @@ handle_path_node:;
ret= iso_tree_add_new_dir(dir, apt, &hdir);
if(ret<0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
if(disk_path[0])
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
Xorriso_report_iso_error(xorriso, img_path, ret,
"Cannot create directory", 0, "FAILURE", 1);
sprintf(xorriso->info_text,
@ -769,13 +803,19 @@ handle_path_node:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
if(xorriso->update_flags & 1) {
ret= Xorriso_mark_update_merge(xorriso, path, (IsoNode *) hdir, 1);
if(ret <= 0)
return(0);
}
dir= hdir;
Xorriso_set_change_pending(xorriso, 0);
iso_node_set_ctime((IsoNode *) dir, time(NULL));
iso_node_set_uid((IsoNode *) dir, geteuid());
iso_node_set_gid((IsoNode *) dir, getegid());
if(disk_path!=NULL && !done)
if(disk_path[0] && !done)
/* This not only copies disk directory properties
but also sets eventual hide_attrs */
Xorriso_copy_implicit_properties(xorriso, dir, img_path, path, disk_path,
@ -897,6 +937,7 @@ unsupported_type:;
/* @param flag bit0= do not produce info message on success
bit1= do not raise protest if directory already exists
@return 1=success,
0=was already directory, -1=was other type, -2=other error
*/
@ -909,8 +950,10 @@ int Xorriso_mkdir(struct XorrisO *xorriso, char *path, int flag)
if(ret<0)
return(-2);
if(ret>0) {
if(ret == 2 && (flag & 2))
return(0);
sprintf(xorriso->info_text,"-mkdir: Address already existing %s",
Text_shellsafe(eff_path, sfe, 0));
Text_shellsafe(eff_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(ret==2 ? "WARNING" : "FAILURE"), 0);
return(-1+(ret==2));
@ -992,7 +1035,7 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
if(ret<=0)
goto ex;
root_dir= iso_image_get_root(volume);
if(((void *) root_dir) == ((void *) victim_node)) {
if(((void *) root_dir) == ((void *) victim_node) && !(flag & 1)) {
sprintf(xorriso->info_text, "May not delete root directory");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
@ -1010,7 +1053,7 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
} else {
if(flag&1) { /* rm -r */
if((xorriso->do_reassure==1 && !xorriso->request_not_to_ask) ||
(flag&32)) {
(flag&32) || ((void *) root_dir) == ((void *) victim_node)) {
/* Iterate over subordinates and delete them */
mem= boss_mem;
@ -1087,6 +1130,9 @@ dir_not_removed:;
}
}
if(((void *) root_dir) == ((void *) victim_node))
{ret= 2; goto ex;}
if(xorriso->request_to_abort)
{ret= 3; goto ex;}
boss_node= iso_node_get_parent(victim_node);
@ -1182,6 +1228,38 @@ ex:;
}
int Xorriso_overwrite_dest(struct XorrisO *xorriso, void *boss_iter,
char *eff_dest, int dest_ret, char *activity,
int flag)
{
int ret;
char sfe[5*SfileadrL];
if(dest_ret==2 && xorriso->do_overwrite!=1) {
sprintf(xorriso->info_text, "%s: May not overwrite directory: %s",
activity, Text_shellsafe(eff_dest, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
} else if (dest_ret==1 && !xorriso->do_overwrite) {
sprintf(xorriso->info_text, "%s: May not overwite: %s",
activity, Text_shellsafe(eff_dest, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
} else if(dest_ret>0) {
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, eff_dest, 1|8);
if(ret<=0)
return(0);
if(ret==3) {
sprintf(xorriso->info_text, "%s: User revoked removal of: %s",
activity, Text_shellsafe(eff_dest, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(0);
}
}
return(1);
}
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
*/
@ -1244,27 +1322,10 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
}
/* Check whether destination exists and may be not overwriteable */
if(dest_ret==2 && xorriso->do_overwrite!=1) {
sprintf(xorriso->info_text, "Renaming may not overwrite directory: %s",
Text_shellsafe(eff_dest, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
} else if (dest_ret==1 && !xorriso->do_overwrite) {
sprintf(xorriso->info_text, "Renaming may not overwite: %s",
Text_shellsafe(eff_dest, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
} else if(dest_ret>0) {
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, eff_dest, 1|8);
if(ret<=0)
return(0);
if(ret==3) {
sprintf(xorriso->info_text, "User revoked renaming of: %s",
Text_shellsafe(eff_origin, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(0);
}
}
ret= Xorriso_overwrite_dest(xorriso, boss_iter,
eff_dest, dest_ret, "Renaming", 0);
if(ret <= 0)
return(ret);
/* Ensure existence of destination directory */
strcpy(dir_adr, eff_dest);
@ -1340,6 +1401,175 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
}
int Xorriso_cannot_clone(struct XorrisO *xorriso, char *eff_origin,
char *eff_dest, int iso_error, int flag)
{
Xorriso_report_iso_error(xorriso, eff_dest, iso_error, "Cannot clone",
0, "FAILURE", 1);
sprintf(xorriso->info_text, "Failed to clone ");
Text_shellsafe(eff_origin, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
/* @param flag bit0= for iso_tree_clone() : merge directories
bit1= do not issue NOTE message
*/
int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
char *origin, char *dest, int flag)
{
int ret, dest_ret, l;
char eff_dest[SfileadrL], eff_origin[SfileadrL], dir_adr[SfileadrL];
char *leafname;
IsoImage *volume;
IsoDir *new_parent;
IsoNode *origin_node, *dir_node, *new_node;
ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret <= 0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, origin, eff_origin, 0);
if(ret<=0)
return(ret);
ret= Xorriso_node_from_path(xorriso, volume, eff_origin, &origin_node, 0);
if(ret <= 0)
return(ret);
dest_ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest,1);
if(dest_ret<0)
return(dest_ret);
if(dest_ret > 0) {
if(eff_dest[0] == 0)
strcpy(eff_dest, "/");
sprintf(xorriso->info_text,
"Cloning: Copy address already exists: ");
Text_shellsafe(eff_dest, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
} else {
/* obtain eff_dest address despite it does not exist */
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest, 2);
if(ret<=0)
return(ret);
}
/* Obtain parent path and leaf name */
strcpy(dir_adr, eff_dest);
for(l= strlen(dir_adr); l > 0; ) {
if(dir_adr[l - 1] == '/')
dir_adr[--l]= 0;
else
break;
}
leafname= strrchr(dir_adr, '/');
if(leafname == NULL) {
leafname= dir_adr;
if (leafname[0] == 0) {
Xorriso_msgs_submit(xorriso, 0, "Empty file name as clone destination",
0, "FAILURE", 0);
return(0);
}
} else {
*leafname= 0;
leafname++;
if(dir_adr[0] != 0) {
/* Ensure existence of destination directory */
ret= Xorriso_graft_in(xorriso, boss_iter, NULL, dir_adr,
(off_t) 0, (off_t) 0, 1);
if(ret <= 0)
return(ret);
}
}
ret= Xorriso_node_from_path(xorriso, volume, dir_adr, &dir_node, 0);
if(ret <= 0)
return(ret);
new_parent= (IsoDir *) dir_node;
ret = iso_tree_clone(origin_node, new_parent, leafname, &new_node, flag & 1);
Xorriso_process_msg_queues(xorriso,0);
if(ret < 0) {
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0);
return(0);
}
Xorriso_set_change_pending(xorriso, 0);
if(!(flag & 2)) {
strcpy(xorriso->info_text, "Cloned in ISO image: ");
Text_shellsafe(eff_origin, xorriso->info_text, 1);
strcat(xorriso->info_text, " to ");
Text_shellsafe(eff_dest, xorriso->info_text, 1);
strcat(xorriso->info_text, "\n");
Xorriso_info(xorriso, 0);
}
return(1);
}
int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest,
int flag)
{
int ret, pass;
char eff_dest[SfileadrL], eff_origin[SfileadrL], *namept;
IsoDir *origin_dir, *dest_dir;
IsoDirIter *iter= NULL;
IsoNode *origin_node, *new_node;
IsoImage *volume;
ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret <= 0)
return(ret);
ret= Xorriso_dir_from_path(xorriso, "Copy source", origin, &origin_dir, 0);
if(ret <= 0)
return(ret);
ret= Xorriso_dir_from_path(xorriso, "Copy destination", dest, &dest_dir, 0);
if(ret <= 0)
return(ret);
for(pass= 0; pass < 2; pass++) {
ret= iso_dir_get_children(origin_dir, &iter);
if(ret < 0) {
Xorriso_cannot_create_iter(xorriso, ret, 0);
{ret= -1; goto ex;}
}
Xorriso_process_msg_queues(xorriso,0);
while(iso_dir_iter_next(iter, &origin_node) == 1) {
namept= (char *) iso_node_get_name(origin_node);
sprintf(eff_origin, "%s/%s", origin, namept);
sprintf(eff_dest, "%s/%s", dest, namept);
if(pass == 0) {
ret= Xorriso_node_from_path(xorriso, volume, eff_dest, &new_node, 1);
if(ret < 0)
goto ex;
if(ret > 0) {
sprintf(xorriso->info_text, "Cloning: Copy address already exists: ");
Text_shellsafe(eff_dest, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
} else {
ret = iso_tree_clone(origin_node, dest_dir, namept, &new_node, 1);
Xorriso_process_msg_queues(xorriso,0);
if(ret < 0) {
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0);
ret= 0; goto ex;
}
}
}
iso_dir_iter_free(iter);
iter= NULL;
}
Xorriso_set_change_pending(xorriso, 0);
ret= 1;
ex:;
if(iter != NULL)
iso_dir_iter_free(iter);
Xorriso_process_msg_queues(xorriso,0);
return(ret);
}
int Xorriso_set_st_mode(struct XorrisO *xorriso, char *in_path,
mode_t mode_and, mode_t mode_or, int flag)
{
@ -1651,8 +1881,8 @@ int Xorriso_widen_hardlink(struct XorrisO *xorriso, void * boss_iter,
/* >>> compare_result bit17 = is_split */;
ret= Xorriso_update_interpreter(xorriso, boss_iter, compare_result, disk_path,
abs_path, 1);
ret= Xorriso_update_interpreter(xorriso, boss_iter, NULL,
compare_result, disk_path, abs_path, 1);
if(ret <= 0)
return(ret);
return(ret);
@ -1683,6 +1913,29 @@ int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path,
}
/* @param flag bit0= increase only upper estimation
*/
int Xorriso_estimate_file_size(struct XorrisO *xorriso, struct FindjoB *job,
char *basename, mode_t st_mode, off_t st_size, int flag)
{
off_t upper, lower, size;
lower = 3 * strlen(basename) + 34; /* >>> + minimum RR ? */
upper = 3 * strlen(basename) + 2048;
if(S_ISREG(st_mode)) {
size= ((st_size + (off_t) 2047) / (off_t) 2048) * (off_t) 2048;
lower+= size;
upper+= size;
} else if(S_ISDIR(st_mode)) {
upper+= 4096;
}
job->estim_upper_size+= upper;
if(!(flag & 1))
job->estim_lower_size+= lower;
return(1);
}
int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
{
Xorriso_process_msg_queues(xorriso,0);
@ -1818,9 +2071,9 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
gid_t group= 0;
time_t date= 0;
mode_t mode_or= 0, mode_and= ~1;
char *target, *text_2, sfe[5*SfileadrL], *iso_prefix, md5[16];
char *target, *text_2, sfe[5*SfileadrL], *iso_prefix, md5[16], *basename;
struct FindjoB *subjob;
struct stat dir_stbuf;
struct stat dir_stbuf, stbuf;
action= Findjob_get_action_parms(job, &target, &text_2, &user, &group,
&mode_and, &mode_or, &type, &date, &subjob, 0);
@ -1858,10 +2111,13 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
Findjob_set_start_path(subjob, abs_path, 0);
ret= Xorriso_findi(xorriso, subjob, boss_iter, boss_mem, NULL,
abs_path, &dir_stbuf, depth, 1);
} else if(action==14 || action==17) { /* compare , update */
} else if(action==14 || action==17 || action == 41) {
/* compare , update , update_merge */
Findjob_get_start_path(job, &iso_prefix, 0);
ret= Xorriso_find_compare(xorriso, (void *) boss_iter, abs_path,
iso_prefix, target, (action==17)|((flag&1)<<1));
ret= Xorriso_find_compare(xorriso, (void *) boss_iter, (void *) node,
abs_path, iso_prefix, target,
(action == 17 || action == 41)
| ((flag&1)<<1) | ((action == 41) << 2));
if(ret==2)
deleted= 1;
if(ret==3)
@ -1932,6 +2188,27 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
iso_node_set_sort_weight(node, type);
} else if(action == 39) { /* hide */
Xorriso_set_hidden(xorriso, node, NULL, type, 0);
} else if(action == 40) { /* estimate_size */
basename= strrchr(abs_path, '/');
if(basename != NULL)
basename++;
else
basename= abs_path;
ret= Xorriso_fake_stbuf(xorriso, "", &stbuf, &node, 1);
if(ret > 0)
ret= Xorriso_estimate_file_size(xorriso, job, basename, stbuf.st_mode,
stbuf.st_size, 0);
} else if(action == 42) { /* rm_merge */
ret= Xorriso_mark_update_merge(xorriso, show_path, node, 2 | 4);
if(ret == 2) {
ret= Xorriso_rmi(xorriso, boss_iter, boss_mem, abs_path, 1|hflag);
sprintf(xorriso->info_text, "Deleted ");
Text_shellsafe(show_path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
deleted= 1;
}
} else if(action == 43) { /* clear_merge */
ret= Xorriso_mark_update_merge(xorriso, show_path, node, 2 | 4);
} else { /* includes : 15 in_iso */
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
@ -2334,9 +2611,10 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
mem= boss_mem;
hflag= 1;
if(action==1 || action==2 || action==3 || action==17 || action == 28 ||
action == 32)
action == 32 || action == 41 || action == 42)
hflag|= 2; /* need freedom to manipulate image */
if(action==14 || action==17 || action == 28 || action == 35 || action == 36)
if(action==14 || action==17 || action == 28 || action == 35 || action == 36 ||
action == 41)
hflag|= 4; /* need LBA sorted iteration for good data reading performance */
ret= Xorriso_findi_iter(xorriso, dir_node, &mem,
&iter, &node_array, &node_count, &node_idx,
@ -2748,3 +3026,92 @@ ex:;
return(ret);
}
int Xorriso__mark_update_xinfo(void *data, int flag)
{
/* data is an int disguised as pointer. It does not point to memory. */
return(1);
}
int Xorriso__mark_update_cloner(void *old_data, void **new_data, int flag)
{
*new_data= NULL;
if(flag)
return(ISO_XINFO_NO_CLONE);
if(old_data == NULL)
return(0);
/* data is an int disguised as pointer. It does not point to memory. */
*new_data= old_data;
return(0);
}
/* @param flag bit0= found on disk
bit1= inquire visit-found status:
1=not visited, 2=not found, 3=found
bit2= with bit1: delete xinfo before returning status
*/
int Xorriso_mark_update_merge(struct XorrisO *xorriso, char *path,
void *in_node, int flag)
{
int ret;
void *xipt= NULL;
IsoNode *node;
if(in_node == NULL) {
ret= Xorriso_node_from_path(xorriso, NULL, path, &node, 0);
if(ret <= 0)
return(ret);
} else
node= (IsoNode *) in_node;
ret= iso_node_get_xinfo(node, Xorriso__mark_update_xinfo, &xipt);
if(ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", ret,
"Error when looking for update_merge xinfo",
0, "FAILURE", 1);
return(0);
}
if(flag & 2) { /* Inquire status and optionally delete xinfo */
if(ret == 0)
return(1);
if(flag & 4) {
ret= iso_node_remove_xinfo(node, Xorriso__mark_update_xinfo);
if(ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", ret,
"Error when removing update_merge xinfo",
0, "FAILURE", 1);
return(0);
}
}
if(((char *) &xipt)[0])
return(3);
return(2);
}
/* xipt is a byte value disguised as void pointer */
if(ret == 1) {
if(((char *) &xipt)[0])
return(1);
if(!(flag & 1))
return(1);
} else
((char *) &xipt)[0]= 0;
if(flag & 1)
((char *) &xipt)[0]= 1;
ret= iso_node_remove_xinfo(node, Xorriso__mark_update_xinfo);
if(ret < 0)
goto set_error;
ret= iso_node_add_xinfo(node, Xorriso__mark_update_xinfo, xipt);
if(ret <= 0) {
set_error:;
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", ret,
"Error when trying to set update_merge xinfo",
0, "FAILURE", 1);
return(0);
}
return(1);
}

View File

@ -67,6 +67,8 @@ int Xorriso_all_node_array(struct XorrisO *xorriso, int addon_nodes, int flag);
int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag);
int Xorriso__mark_update_xinfo(void *data, int flag);
int Xorriso__mark_update_cloner(void *old_data, void **new_data, int flag);
#endif /* ! Xorriso_pvt_iso_manip_includeD */

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -1472,36 +1472,19 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
*/
int Xorriso_ls(struct XorrisO *xorriso, int flag)
{
int ret, is_dir= 0, i, filec= 0, failed_at, no_sort= 0;
int ret, i, filec= 0, failed_at, no_sort= 0;
IsoNode *node, **node_array= NULL;
IsoDir *dir_node;
IsoImage *volume;
IsoDirIter *iter= NULL;
char sfe[5*SfileadrL], sfe2[5*SfileadrL], link_target[SfileadrL], *npt, *rpt;
struct stat stbuf;
rpt= xorriso->result_line;
ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret<=0)
return(ret);
ret= Xorriso_node_from_path(xorriso, volume, xorriso->wdi, &node, 0);
if(ret<=0)
goto wdi_is_not_a_dir;
if(LIBISO_ISDIR(node))
is_dir= 1;
if(!is_dir) {
wdi_is_not_a_dir:;
sprintf(xorriso->info_text,
"Working directory path does not lead to a directory in ISO image");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
if(flag&2)
{ret= 1; goto ex;}
dir_node= (IsoDir *) node;
ret= Xorriso_dir_from_path(xorriso, "Working directory", xorriso->wdi,
&dir_node, 0);
if(ret <= 0)
goto ex;
ret= iso_dir_get_children(dir_node, &iter);
if(ret<0) {
cannot_create_iter:;
@ -2153,6 +2136,34 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume,
}
int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose,
char *path, IsoDir **dir_node, int flag)
{
IsoImage *volume;
IsoNode *node;
int ret, is_dir= 0;
ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret<=0)
return(ret);
ret= Xorriso_node_from_path(xorriso, volume, path, &node, 0);
if(ret<=0)
goto wdi_is_not_a_dir;
if(LIBISO_ISDIR(node))
is_dir= 1;
if(!is_dir) {
wdi_is_not_a_dir:;
sprintf(xorriso->info_text,
"%s path does not lead to a directory in ISO image", purpose);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
*dir_node= (IsoDir *) node;
return(1);
}
/*
@param flag bit0= do not remove leading slash
bit1= append flatly to result_line and put out

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -35,6 +35,9 @@ int Xorriso_get_node_by_path(struct XorrisO *xorriso,
char *in_path, char *eff_path,
IsoNode **node, int flag);
int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose,
char *path, IsoDir **dir_node, int flag);
int Xorriso_node_get_dev(struct XorrisO *xorriso, IsoNode *node,
char *path, dev_t *dev, int flag);

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -24,16 +24,38 @@
#include <time.h>
#include <errno.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
/* for -charset */
#include <iconv.h>
#include <langinfo.h>
#ifdef Xorriso_standalonE
#ifdef Xorriso_with_libjtE
#include "../libjte/libjte.h"
#endif
#else
#ifdef Xorriso_with_libjtE
#include <libjte/libjte.h>
#endif
#endif /* ! Xorriso_standalonE */
#include "xorriso.h"
#include "xorriso_private.h"
#include "xorrisoburn.h"
#include "lib_mgt.h"
#include "iso_manip.h"
int Xorriso_abort(struct XorrisO *xorriso, int flag)
@ -182,6 +204,9 @@ LIBISOBURN_MISCONFIGURATION_ = 0;
zisofs_ctrl.compression_level;
}
iso_node_xinfo_make_clonable(Xorriso__mark_update_xinfo,
Xorriso__mark_update_cloner, 0);
/* Second initialization. This time with libs. */
Xorriso_preparer_string(xorriso, xorriso->preparer_id, 0);
@ -275,6 +300,16 @@ int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag)
"libisofs in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro, req_major, req_minor, req_micro);
Xorriso_result(xorriso, 0);
#ifdef Xorriso_with_libjtE
libjte__version(&major, &minor, &micro);
isoburn_libjte_req(&req_major, &req_minor, &req_micro);
sprintf(xorriso->result_line,
"libjte in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro, req_major, req_minor, req_micro);
Xorriso_result(xorriso, 0);
#endif
burn_version(&major, &minor, &micro);
isoburn_libburn_req(&req_major, &req_minor, &req_micro);
sprintf(xorriso->result_line,
@ -413,14 +448,36 @@ cannot:;
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
{
int ret, error_code= 0, os_errno= 0, count= 0, pass, imgid, tunneled;
int name_prefix_code;
char severity[80];
#ifdef Xorriso_with_libjtE
char *msg;
#endif
if(!xorriso->libs_are_started)
return(1);
for(pass= 0; pass< 2; pass++) {
for(pass= 0; pass< 3; pass++) {
while(1) {
tunneled= 0;
if(pass==0)
if(pass==0) {
ret= 0;
#ifdef Xorriso_with_libjtE
if(xorriso->libjte_handle != NULL) {
msg= libjte_get_next_message(xorriso->libjte_handle);
if(msg != NULL) {
sprintf(xorriso->info_text, "%1.4095s", msg);
free(msg);
strcpy(severity, "NOTE");
error_code= 0;
os_errno= 0;
ret= 1;
}
}
#endif /* Xorriso_with_libjtE */
} else if(pass==1)
ret= iso_obtain_msgs("ALL", &error_code, &imgid,
xorriso->info_text, severity);
else {
@ -444,8 +501,12 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
else if(error_code==0x51001)
strcpy(severity, "ERRFILE");
if(pass == 0)
name_prefix_code= 0;
else
name_prefix_code= pass + tunneled;
Xorriso_msgs_submit(xorriso, error_code, xorriso->info_text, os_errno,
severity, ((pass+tunneled)+1)<<2);
severity, name_prefix_code << 2);
count++;
}
}
@ -499,7 +560,7 @@ int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
int major, minor, micro;
xorriso_id[0]= 0;
sprintf(xorriso_id, "XORRISO-%d.%d.%d",
sprintf(xorriso_id, "XORRISO-%d.%d.%d ",
Xorriso_header_version_majoR, Xorriso_header_version_minoR,
Xorriso_header_version_micrO);
if(strlen(xorriso_id) + strlen(Xorriso_timestamP) < 128)
@ -521,3 +582,172 @@ int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
return(1);
}
#ifdef Xorriso_with_libjtE
int Xorriso_assert_jte_handle(struct XorrisO *xorriso, int flag)
{
int ret;
if(xorriso->libjte_handle == NULL) {
ret= libjte_new(&(xorriso->libjte_handle), 0);
if(ret <= 0 || xorriso->libjte_handle == NULL) {
sprintf(xorriso->info_text,
"-jigdo: Failed to create libjte environment object");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1);
}
/* no stderr, no exit() */
libjte_set_error_behavior(xorriso->libjte_handle, 0, 0);
}
return(1);
}
#endif /* Xorriso_with_libjtE */
int Xorriso_jigdo_interpreter(struct XorrisO *xorriso, char *aspect, char *arg,
int flag)
{
#ifdef Xorriso_with_libjtE
int ret, num;
struct libjte_env *jte;
char *msg = NULL;
if(strcmp(aspect, "clear") == 0) {
if(xorriso->libjte_handle != NULL)
libjte_destroy(&(xorriso->libjte_handle));
Xorriso_lst_destroy_all(&(xorriso->jigdo_params), 0);
Xorriso_lst_destroy_all(&(xorriso->jigdo_values), 0);
xorriso->libjte_params_given= 0;
return(1);
}
ret= Xorriso_assert_jte_handle(xorriso, 0);
if(ret <= 0)
return(ret);
jte= xorriso->libjte_handle;
if(strcmp(aspect, "verbose") == 0) {
if(strcmp(arg, "on") == 0) {
libjte_set_verbose(jte, 1);
/* Direct libjte messages to stderr, rather than message list */
libjte_set_error_behavior(xorriso->libjte_handle, 1, 0);
xorriso->libjte_params_given|= 2;
} else if(strcmp(arg, "off") == 0) {
libjte_set_verbose(jte, 0);
libjte_set_error_behavior(xorriso->libjte_handle, 0, 0);
xorriso->libjte_params_given&= ~2;
} else
goto bad_arg;
} else if(strcmp(aspect, "template_path") == 0 ||
strcmp(aspect, "-jigdo-template") == 0) {
ret= libjte_set_template_path(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 4;
} else if(strcmp(aspect, "jigdo_path") == 0 ||
strcmp(aspect, "-jigdo-jigdo") == 0) {
ret= libjte_set_jigdo_path(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 8;
} else if(strcmp(aspect, "md5_path") == 0 ||
strcmp(aspect, "-md5-list") == 0) {
ret= libjte_set_md5_path(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 16;
} else if(strcmp(aspect, "min_size") == 0 ||
strcmp(aspect, "-jigdo-min-file-size") == 0) {
num= Scanf_io_size(arg, 0);
ret= libjte_set_min_size(jte, num);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 32;
} else if(strcmp(aspect, "checksum_iso") == 0 ||
strcmp(aspect, "-checksum_algorithm_iso") == 0) {
ret= libjte_set_checksum_iso(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 64;
} else if(strcmp(aspect, "checksum_template") == 0 ||
strcmp(aspect, "-checksum_algorithm_template") == 0) {
ret= libjte_set_checksum_template(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 128;
} else if(strcmp(aspect, "compression") == 0 ||
strcmp(aspect, "-jigdo-template-compress") == 0) {
ret= libjte_set_compression(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 256;
} else if(strcmp(aspect, "exclude") == 0 ||
strcmp(aspect, "-jigdo-exclude") == 0) {
ret= libjte_add_exclude(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 512;
} else if(strcmp(aspect, "demand_md5") == 0 ||
strcmp(aspect, "-jigdo-force-md5") == 0) {
ret= libjte_add_md5_demand(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 1024;
} else if(strcmp(aspect, "mapping") == 0 ||
strcmp(aspect, "-jigdo-map") == 0) {
ret= libjte_add_mapping(jte, arg);
if(ret <= 0)
goto jte_failed;
xorriso->libjte_params_given|= 2048;
} else {
sprintf(xorriso->info_text, "-jigdo: unknown aspect '%s'", aspect);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
ret= Xorriso_lst_new(&(xorriso->jigdo_params), aspect, xorriso->jigdo_params,
1);
if(ret > 0)
ret= Xorriso_lst_new(&(xorriso->jigdo_values), arg, xorriso->jigdo_values,
1);
if(ret <= 0) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
Xorriso_process_msg_queues(xorriso, 0);
return(1);
bad_arg:
sprintf(xorriso->info_text, "-jigdo %s : unknown argument '%s'", aspect, arg);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
jte_failed:
while(1) {
msg= libjte_get_next_message(xorriso->libjte_handle);
if(msg == NULL)
break;
sprintf(xorriso->info_text, "%1.4095s", msg);
free(msg);
msg= NULL;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
}
sprintf(xorriso->info_text, "Experienced libjte failure with: -jigdo %s %s",
aspect, arg);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
#else /* Xorriso_with_libjtE */
sprintf(xorriso->info_text,
"Jigdo Template Extraction was not enabled at compile time");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
#endif /* ! Xorriso_with_libjtE */
}

View File

@ -1,10 +1,13 @@
#!/bin/sh
#
# Produce man page xorriso/xorriso.1 and info file xorriso/xorriso.info
# from base file xorris/xorriso.texi.
# from base file xorriso/xorriso.texi.
# Same for xorriso/xorrisofs.texi.
( cd xorriso ; makeinfo ./xorriso.texi )
( cd xorriso ; makeinfo ./xorrisofs.texi )
xorriso/make_xorriso_1 -auto
xorriso/make_xorriso_1 -auto -xorrisofs

View File

@ -3,11 +3,12 @@
( cd xorriso ; cc -g -Wall -o make_xorriso_1 make_xorriso_1.c )
*/
/*
Specialized converter from xorriso/xorriso.texi to xorriso/xorriso.1.
Specialized converter from xorriso/xorriso.texi to xorriso/xorriso.1
resp. from xorriso/xorrisofs.texi to xorriso/xorrisofs.1
The conversion rules are described at the beginning of xorriso/xorriso.texi
Copyright 2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2010 - 2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
@ -228,10 +229,20 @@ int Mx1_convert(struct Mx1 *m, char line_in[256], char line_out[256], int flag)
}
strcat(buf, "\\");
}
/* Substitute option text */
raw= strlen(buf);
strcat(buf, word);
ret= Mx1_substitute(m, buf, line_out, raw, 0);
if(ret <= 0)
return(-1);
strcpy(buf, line_out);
strcat(buf, "\\fR");
raw= strlen(buf);
strcat(buf, remainder);
/* Substitute arguments text */
ret= Mx1_substitute(m, buf, line_out, raw, 0);
if(ret <= 0)
return(-1);
@ -271,8 +282,8 @@ int main(int argc, char **argv)
{
int ret, l, as_filter= 0, i;
char line_in[256], line_out[256], *got;
static char name_in[]= {"xorriso/xorriso.texi"};
static char name_out[]= {"xorriso/xorriso.1"};
static char name_in[1024]= {"xorriso/xorriso.texi"};
static char name_out[1024]= {"xorriso/xorriso.1"};
struct Mx1 m;
FILE *fp_in= stdin, *fp_out= stdout;
@ -280,9 +291,10 @@ int main(int argc, char **argv)
if(argc < 2) {
usage:;
fprintf(stderr, "usage: %s -auto|-filter\n", argv[0]);
fprintf(stderr, " -auto xorriso/xorriso.texi -> xorriso/xorriso.1\n");
fprintf(stderr, " -filter stdin -> stdout\n");
fprintf(stderr, "usage: %s -auto|-filter|[-xorrisofs]\n", argv[0]);
fprintf(stderr, " -auto xorriso/xorriso.texi -> xorriso/xorriso.1\n");
fprintf(stderr, " -filter stdin -> stdout\n");
fprintf(stderr, " -xorrisofs process xorriso/xorrisofs.texi\n");
exit(2);
}
for(i= 1; i < argc; i++) {
@ -290,7 +302,10 @@ usage:;
as_filter= 1;
else if(strcmp(argv[i], "-auto") == 0)
as_filter= 0;
else {
else if(strcmp(argv[i], "-xorrisofs") == 0) {
strcpy(name_in, "xorriso/xorrisofs.texi");
strcpy(name_out, "xorriso/xorrisofs.1");
} else {
fprintf(stderr, "%s : unknown option %s\n", argv[0], argv[i]);
goto usage;
}

View File

@ -1,15 +1,15 @@
#!/bin/sh
# make_xorriso_standalone.sh
# Copyright 2008 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPLv2+
# Copyright 2008 - 2011 Thomas Schmitt, scdbackup@gmx.net, GPLv2+
#
# Not intended for general use in production installations !
#
# This is a development tool which expects a special setup of directories.
# It is to be executed in a common parent of the directories
# nglibisofs-develop libburn-develop libisoburn-develop
# nglibisofs-develop jte-develop libburn-develop libisoburn-develop
# where tarballs or repository copies have been installed of
# libisofs libburn libisoburn
# libisofs jte libburn libisoburn
# obtained according to instructions on http://libburnia-project.org.
#
# It creates a new directory tree
@ -40,7 +40,7 @@ create_gnu_xorriso="yes"
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.6.2
xorriso_rev=1.0.8
# For unstable uploads and patch level 0 of stable releases:
xorriso_pl=""
# For higher patch levels of stable releases:
@ -120,10 +120,6 @@ copy_files xorriso/configure_ac.txt "$lone_dir"/configure.ac
copy_files xorriso/xorriso_makefile_am.txt "$lone_dir"/Makefile.am
# copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
# libisoburn
@ -131,6 +127,7 @@ create_dir "$lone_dir"/libisoburn
copy_files \
libisoburn/*.[ch] \
"$lone_dir"/libisoburn
copy_files COPYRIGHT "$lone_dir"/libisoburn
xorriso/convert_man_to_html.sh
@ -192,18 +189,29 @@ copy_files \
\
xorriso/changelog.txt \
xorriso/xorriso_eng.html \
xorriso/make_docs.sh \
xorriso/xorriso.texi \
xorriso/xorriso.info \
xorriso/xorrisofs.texi \
xorriso/xorrisofs.info \
xorriso/make_xorriso_1.c \
xorriso/xorriso.1 \
xorriso/xorrisofs.1 \
xorriso/man_1_xorriso.html \
xorriso/man_1_xorrisofs.html \
"$lone_dir"/xorriso
copy_files COPYRIGHT "$lone_dir"/xorriso
copy_files xorriso/xorriso_buildstamp_none.h \
"$lone_dir"/xorriso/xorriso_buildstamp.h
copy_files xorriso/xorriso_buildstamp_none.h \
"$lone_dir"/xorriso/xorriso_buildstamp_none.h
create_dir "$lone_dir"/doc
copy_files doc/partition_offset.wiki \
doc/startup_file.txt \
"$lone_dir"/doc
create_dir "$lone_dir"/test
copy_files \
test/compare_file.c \
@ -214,13 +222,13 @@ copy_files \
create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters
create_dir "$lone_dir"/doc
goto_dir "$current_dir"/nglibisofs-develop
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
copy_files doc/susp_aaip*.txt "$lone_dir"/doc
copy_files doc/zisofs_format.txt "$lone_dir"/doc
copy_files doc/checksums.txt "$lone_dir"/doc
copy_files doc/boot_sectors.txt "$lone_dir"/doc
copy_files COPYRIGHT "$lone_dir"/libisofs
test -e CONTRIBUTORS && cat CONTRIBUTORS >>"$lone_dir"/CONTRIBUTORS
@ -228,35 +236,13 @@ test -e CONTRIBUTORS && cat CONTRIBUTORS >>"$lone_dir"/CONTRIBUTORS
cat version.h.in >> "$lone_dir"/version.h.in
# <<< obsoleted patchings
if test 1 = 0
then
# Change GNU macro name to POSIX name
sed -e 's/FNM_FILE_NAME/FNM_PATHNAME/g' \
<libisofs/tree.c >"$lone_dir"/libisofs/tree.c
# Filter out the semi-illegal TODO comments
( cd "$lone_dir"/libisofs && grep '^[[:space:]]*//' *.[ch] | less )
echo "Is it ok delete all shown //-lines ?"
read yesno
if test "$yesno" = "y" -o "$yesno" = "1"
then
for i in "$lone_dir"/libisofs/*.[ch]
do
# first copy attributes
cp "$i" "$lone_dir"/libisofs/tmpfile
# now filter away // lines
grep -v '^[[:space:]]*//' <"$i" >"$lone_dir"/libisofs/tmpfile && \
mv "$lone_dir"/libisofs/tmpfile "$i"
done
fi
echo "Remaining // lines:"
( cd "$lone_dir"/libisofs && grep '//' *.[ch] )
fi
# libjte
create_dir "$lone_dir"/libjte
goto_dir "$current_dir"/jte-develop
copy_files *.[ch] "$lone_dir"/libjte
copy_files bin/jigdo-gen-md5-list doc/jigdo-gen-md5-list.1 "$lone_dir"/libjte
copy_files COPYRIGHT "$lone_dir"/libjte
# libburn
@ -284,7 +270,7 @@ then
copy_files xorriso/COPYING_gnu_xorriso "$lone_dir"/COPYING
copy_files xorriso/AUTHORS_gnu_xorriso "$lone_dir"/AUTHORS
# patch xorriso/xorriso.c to be GNU xorriso
# patch xorriso/xorriso.h to be GNU xorriso
sed -e's/define Xorriso_libburnia_xorrisO/define Xorriso_GNU_xorrisO/' \
-e's/This may be changed to Xorriso_GNU_xorrisO in order to c/C/' \
<xorriso/xorriso.h >"$lone_dir"/xorriso/xorriso.h

118
xorriso/man_xorriso_to_html.sh Executable file
View File

@ -0,0 +1,118 @@
#!/bin/sh
#
# man_xorriso_to_html.sh - ts A80118 , B10309
#
# Generates a HTML version of man page xorriso.1
#
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
#
# set -x
man_dir=$(pwd)"/xorriso"
export MANPATH="$man_dir"
manpage="xorriso"
raw_html=$(pwd)/"xorriso/raw_man_1_xorriso.html"
htmlpage=$(pwd)/"xorriso/man_1_xorriso.html"
if test -r "$man_dir"/"$manpage".1
then
dummy=dummy
else
echo "Cannot find readable man page source $1" >&2
exit 1
fi
if test -e "$man_dir"/man1
then
dummy=dummy
else
ln -s . "$man_dir"/man1
fi
if test "$1" = "-work_as_filter"
then
# set -x
sed \
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorriso, manual, xorriso, CD, CD-RW, CD-R, burning, cdrecord, compatible"><META NAME="robots" CONTENT="follow">/' \
-e 's/<title>XORRISO<\/title>/<title>man 1 xorriso<\/title>/' \
-e 's/<h1 align=center>XORRISO<\/h1>/<h1 align=center>man 1 xorriso<\/h1>/' \
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
-e 's/<b>Overview of features:<\/b>/\&nbsp;<BR><b>Overview of features:<\/b>/' \
-e 's/<b>General information paragraphs:<\/b>/\&nbsp;<BR><b>General information paragraphs:<\/b>/' \
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
-e 's/<b>Session model:<\/b>/\&nbsp;<BR><b>Session model:<\/b>/' \
-e 's/<b>Media types and states:<\/b>/\&nbsp;<BR><b>Media types and states:<\/b>/' \
-e 's/<b>Creating, Growing, Modifying, Blind/\&nbsp;<BR><b>Creating, Growing, Modifying, Blind/' \
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
-e 's/<b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><b>Dialog, Readline, Result pager:<\/b>/' \
-e 's/<b>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Influencing the behavior of image/\&nbsp;<BR><b>Influencing the behavior of image/' \
-e 's/<b>Inserting files into ISO image:<\/b>/\&nbsp;<BR><b>Inserting files into ISO image:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>File manipulations:<\/b>/\&nbsp;<BR><b>File manipulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Tree traversal command -find:<\/b>/\&nbsp;<BR><b>Tree traversal command -find:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;iso_rr_pattern/<p>\&nbsp;<BR><b>\&minus;iso_rr_pattern/' \
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
-e 's/<b>Filters for data file content:<\/b>/\&nbsp;<BR><b>Filters for data file content:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Writing the result, drive control:<\/b>/\&nbsp;<BR><b>Writing the result, drive control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^-find \/ /\&nbsp;\&nbsp;-find \/ /' \
-e 's/<b>Settings for file insertion:<\/b>/\&nbsp;<BR><b>Settings for file insertion:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^$<\/b> ln -s/\&nbsp;\&nbsp;$<\/b> ln -s/' \
-e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><b>Settings for result writing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \
-e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Jigdo Template Extraction:<\/b>/\&nbsp;<BR><b>Jigdo Template Extraction:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Evaluation of readability and recovery:<\/b>/\&nbsp;<BR><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox ISO-to-disk restore options:<\/b>/\&nbsp;<BR><b>osirrox ISO-to-disk restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \
-e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \
-e 's/^features:<\/b>/features:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Support for frontend/\&nbsp;<BR><b>Support for frontend/' \
-e 's/^listening at stdout:<\/b>/listening at stdout:<\/b><BR>\&nbsp;<BR>/' \
-e 's/xorriso -outdev \/dev\/sr2 \\ -blank fast \\ -pathspecs on/xorriso -outdev \/dev\/sr2 -blank fast -pathspecs on/' \
-e 's/\\ -add \\ \/sounds=\/home\/me\/sounds \\ \/pictures \\ -- \\ -rm_r \\/ -add \/sounds=\/home\/me\/sounds \/pictures -- -rm_r /' \
-e 's/\/sounds\/indecent \\ \&rsquo;\/pictures\/\*private\*\&rsquo; \\/\/sounds\/indecent \&rsquo;\/pictures\/*private*\&rsquo; /' \
-e 's/\/pictures\/confidential \\ -- \\ -add \\/\/pictures\/confidential -- -add/' \
-e 's/xorriso -dev \/dev\/sr2 \\ -rm_r \/sounds -- \\ -mv \\/xorriso -dev \/dev\/sr2 -rm_r \/sounds -- -mv /' \
-e 's/\/pictures\/confidential \\ \/pictures\/restricted \\ -- \\ -chmod/\/pictures\/confidential \/pictures\/restricted -- -chmod/' \
-e 's/go-rwx \/pictures\/restricted -- \\ -pathsspecs on \\ -add \\/go-rwx \/pictures\/restricted -- -pathsspecs on -add /' \
-e 's/\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy /\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy/' \
-e 's/\/movies=\/home\/me\/prepared_for_dvd\/movies \\ -- \\ -commit/\/movies=\/home\/me\/prepared_for_dvd\/movies -- -commit/' \
-e 's/xorriso -indev \/dev\/sr2 \\ -rm_r \/sounds -- \\/xorriso -indev \/dev\/sr2 -rm_r \/sounds -- /' \
-e 's/-outdev \/dev\/sr0 -blank fast \\ -commit -eject all/-outdev \/dev\/sr0 -blank fast -commit -eject all/' \
-e 's/See section FILES/See section <A HREF="#FILES">FILES<\/A>/' \
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
<"$2" >"$htmlpage"
set +x
chmod u+rw,go+r,go-w "$htmlpage"
echo "Emerged file:"
ls -lL "$htmlpage"
else
export BROWSER='cp "%s" '"$raw_html"
man -H "$manpage"
"$0" -work_as_filter "$raw_html"
rm "$raw_html"
rm "$man_dir"/man1
fi

View File

@ -0,0 +1,79 @@
#!/bin/sh
#
# man_xorrisofs_to_html.sh - ts A80118 , B10309
#
# Generates a HTML version of man page xorrisofs.1
#
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
#
# set -x
man_dir=$(pwd)"/xorriso"
export MANPATH="$man_dir"
manpage="xorrisofs"
raw_html=$(pwd)/"xorriso/raw_man_1_xorrisofs.html"
htmlpage=$(pwd)/"xorriso/man_1_xorrisofs.html"
if test -r "$man_dir"/"$manpage".1
then
dummy=dummy
else
echo "Cannot find readable man page source $1" >&2
exit 1
fi
if test -e "$man_dir"/man1
then
dummy=dummy
else
ln -s . "$man_dir"/man1
fi
if test "$1" = "-work_as_filter"
then
# set -x
sed \
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorrisofs, manual, xorrisofs, ISO 9660, mkisofs, compatible"><META NAME="robots" CONTENT="follow">/' \
-e 's/<title>XORRISOFS<\/title>/<title>man 1 xorrisofs<\/title>/' \
-e 's/<h1 align=center>XORRISOFS<\/h1>/<h1 align=center>man 1 xorrisofs<\/h1>/' \
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
-e 's/<b>ISO 9660, Rock Ridge, Joliet:<\/b>/\&nbsp;<BR><b>ISO 9660, Rock Ridge, Joliet:<\/b>/' \
-e 's/<b>Inserting files into the ISO image:<\/b>/\&nbsp;<BR><b>Inserting files into the ISO image:<\/b>/' \
-e 's/<b>Relation to program xorriso:<\/b>/\&nbsp;<BR><b>Relation to program xorriso:<\/b>/' \
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
-e 's/<b>Image loading:<\/b>/\&nbsp;<BR><b>Image loading:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for file insertion:<\/b>/\&nbsp;<BR><b>Settings for file insertion:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for image production:<\/b>/\&nbsp;<BR><b>Settings for image production:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for standards compliance:<\/b>/\&nbsp;<BR><b>Settings for standards compliance:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for standards extensions:<\/b>/\&nbsp;<BR><b>Settings for standards extensions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for file hiding:<\/b>/\&nbsp;<BR><b>Settings for file hiding:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>ISO image ID strings:<\/b>/\&nbsp;<BR><b>ISO image ID strings:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito Bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito Bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>System Area, MBR, other boot blocks:<\/b>/\&nbsp;<BR><b>System Area, MBR, other boot blocks:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Jigdo Template Extraction:<\/b>/\&nbsp;<BR><b>Jigdo Template Extraction:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Miscellaneous options:<\/b>/\&nbsp;<BR><b>Miscellaneous options:<\/b><BR>\&nbsp;<BR>/' \
\
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
<"$2" >"$htmlpage"
set +x
chmod u+rw,go+r,go-w "$htmlpage"
echo "Emerged file:"
ls -lL "$htmlpage"
else
export BROWSER='cp "%s" '"$raw_html"
man -H "$manpage"
"$0" -work_as_filter "$raw_html"
rm "$raw_html"
rm "$man_dir"/man1
fi

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -52,6 +52,7 @@ int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag)
if(Sfile_str(xorriso->abort_on_text,severity,0)<=0)
return(-1);
xorriso->abort_on_severity= sev;
xorriso->abort_on_is_default= 0;
Xorriso_set_abort_severity(xorriso, 0);
return(1);
}
@ -93,6 +94,8 @@ int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag)
/* Option -add */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
bit2= prepend ISO working directory in any case
bit3= unescape \\
*/
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
@ -126,19 +129,26 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
else
rpt= wpt= source;
for(; *rpt!=0; rpt++) {
if(*rpt=='\\')
if(*rpt=='\\') {
if(*(rpt+1)=='=')
continue;
if((flag & 8) && *(rpt + 1) == '\\')
rpt++;
}
*(wpt++)= *rpt;
}
*wpt= 0;
}
if(split==0) {
if(split==0)
strcpy(target, source);
} else if(target[0]!='/') {
if(flag & 4) {
ret= Sfile_prepend_path(xorriso->wdi, target, 0);
if(ret<=0)
if(ret<=0) {
sprintf(xorriso->info_text, "Effective path gets much too long (%d)",
(int) (strlen(xorriso->wdi)+strlen(target)+1));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto problem_handler;
}
}
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, target, eff_path, 2);
@ -255,6 +265,60 @@ ex:;
}
/* Option -append_partition */
int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text,
char *type_text, char *image_path, int flag)
{
int partno = 0, type_code= -1, i;
unsigned int unum;
char *tpt;
static char *part_type_names[] = {"FAT12", "FAT16", "Linux", "", NULL};
static int part_type_codes[] = { 0x01, 0x06, 0x83, 0x00};
sscanf(partno_text, "%d", &partno);
if(partno < 1 || partno > Xorriso_max_appended_partitionS) {
sprintf(xorriso->info_text,
"-append_partition: Partition number '%s' is out of range (1...%d)",
partno_text, Xorriso_max_appended_partitionS);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
for(i= 0; part_type_names[i] != NULL; i++)
if(strcmp(part_type_names[i], type_text) == 0)
break;
if(part_type_names[i] != NULL)
type_code= part_type_codes[i];
if(type_code < 0) {
tpt= type_text;
if(strncmp(tpt, "0x", 2) == 0)
tpt+= 2;
else
goto bad_type;
unum= 0xffffffff;
sscanf(tpt, "%X", &unum);
if(unum > 0xff) {
bad_type:;
sprintf(xorriso->info_text,
"-append_partition: Partition type '%s' is out of range (0x00...0xff)",
type_text);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
type_code= unum;
}
if(xorriso->appended_partitions[partno - 1] != NULL)
free(xorriso->appended_partitions[partno - 1]);
xorriso->appended_partitions[partno - 1]= strdup(image_path);
if(xorriso->appended_partitions[partno - 1] == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
xorriso->appended_part_types[partno - 1]= type_code;
return(1);
}
/* Option -application_id */
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
int flag)
@ -567,7 +631,7 @@ int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
{
int was_ok= 1, ret, isolinux_grub= 0, count;
unsigned int u;
char *formpt, *treatpt;
char *formpt, *treatpt, eff_path[SfileadrL];
double num;
formpt= form;
@ -614,6 +678,8 @@ treatment_patch:;
xorriso->patch_isolinux_image= 0;
xorriso->boot_image_bin_path[0]= 0;
xorriso->patch_system_area= 0;
if((xorriso->system_area_options & 0xfc ) == 0)
xorriso->system_area_options= 0; /* Reset eventual type 0 flags */
if(xorriso->boot_count > 0) {
ret= Xorriso_attach_boot_image(xorriso, 2); /* dispose boot images */
if(ret <= 0)
@ -730,6 +796,47 @@ treatment_patch:;
xorriso->keep_boot_image= 0;
xorriso->boot_efi_default= 1;
} else if(strncmp(treatpt, "mips_path=", 10) == 0) {
sprintf(eff_path, "-boot_image %s mips_path=", formpt);
ret= Xorriso_coordinate_system_area(xorriso, 1, 0, eff_path, 0);
if(ret <= 0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 10,
eff_path, 2);
if(ret <= 0)
return(ret);
ret= Xorriso_add_mips_boot_file(xorriso, eff_path, 0);
if(ret <= 0)
return(ret);
} else if(strncmp(treatpt, "mipsel_path=", 12) == 0) {
sprintf(eff_path, "-boot_image %s mipsel_path=", formpt);
ret= Xorriso_coordinate_system_area(xorriso, 2, 0, eff_path, 0);
if(ret <= 0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 12,
eff_path, 2);
if(ret <= 0)
return(ret);
ret= Xorriso_add_mips_boot_file(xorriso, eff_path, 2);
if(ret <= 0)
return(ret);
} else if(strcmp(treatpt, "mips_discard") == 0 ||
strcmp(treatpt, "mipsel_discard") == 0 ||
strcmp(treatpt, "sparc_discard") == 0) {
xorriso->system_area_options&= ~0xfc; /* system area type 0 */
Xorriso_add_mips_boot_file(xorriso, "", 1); /* give up MIPS boot files */
} else if(strncmp(treatpt, "sparc_label=", 12) == 0) {
sprintf(eff_path, "-boot_image %s sparc_path=", formpt);
ret= Xorriso_coordinate_system_area(xorriso, 3, 0, eff_path, 0);
if(ret <= 0)
return(ret);
strncpy(xorriso->ascii_disc_label, treatpt + 12,
Xorriso_disc_label_sizE - 1);
xorriso->ascii_disc_label[Xorriso_disc_label_sizE - 1] = 0;
} else if(strncmp(treatpt, "boot_info_table=", 16)==0) {
if(strcmp(treatpt + 16, "off") == 0)
xorriso->patch_isolinux_image= 0;
@ -771,23 +878,27 @@ treatment_patch:;
}
} else if(strncmp(treatpt, "system_area=", 12) == 0) {
if(strcmp(formpt, "isolinux")==0) {
ret= Xorriso_coordinate_system_area(xorriso, 0, 2,
"-boot_image isolinux system_area=", 0);
if(ret <= 0)
return(ret);
}
ret= Xorriso_set_system_area_path(xorriso, treatpt + 12, 0);
if(ret <= 0)
return(ret);
if(strcmp(formpt, "isolinux")==0)
xorriso->system_area_options= (xorriso->system_area_options & ~3) | 2;
} else if(strncmp(treatpt, "partition_table=", 16)==0) {
if(strcmp(treatpt + 16, "off") == 0) {
xorriso->system_area_options&= ~3;
xorriso->patch_system_area= xorriso->system_area_options;
} else if(strcmp(treatpt + 16, "on") == 0) {
xorriso->system_area_options&= ~3;
sprintf(eff_path, "-boot_image %s partition_table=", formpt);
if(strcmp(formpt, "isolinux")==0)
xorriso->system_area_options|= 2;
ret= Xorriso_coordinate_system_area(xorriso, 0, 2, eff_path, 0);
else
xorriso->system_area_options|= 1;
xorriso->patch_system_area= xorriso->system_area_options;
ret= Xorriso_coordinate_system_area(xorriso, 0, 1, eff_path, 0);
if(ret <= 0)
return(ret);
} else
was_ok= 0;
@ -825,6 +936,23 @@ treatment_patch:;
}
xorriso->partition_secs_per_head= u;
} else if(strncmp(treatpt, "partition_cyl_align=", 20)==0) {
if(strcmp(treatpt + 20, "auto") == 0)
xorriso->system_area_options= (xorriso->system_area_options & ~0x300);
else if(strcmp(treatpt + 20, "on") == 0)
xorriso->system_area_options=
(xorriso->system_area_options & ~0x300) | 0x100;
else if(strcmp(treatpt + 20, "off") == 0)
xorriso->system_area_options=
(xorriso->system_area_options & ~0x300) | 0x200;
else {
sprintf(xorriso->info_text,
"-boot_image %s partition_cyl_align: unknown mode : %s",
formpt, treatpt + 20);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
return(0);
}
} else if(strncmp(treatpt, "platform_id=", 12)==0) {
if(strncmp(treatpt + 12, "0x", 2) == 0)
sscanf(treatpt + 14, "%x", &u);
@ -1570,6 +1698,17 @@ ex:;
}
/* Option -clone */
int Xorriso_option_clone(struct XorrisO *xorriso, char *origin, char *dest,
int flag)
{
int ret;
ret= Xorriso_clone_tree(xorriso, NULL, origin, dest, 0);
return(ret);
}
/* Option -close "on"|"off" */
int Xorriso_option_close(struct XorrisO *xorriso, char *mode, int flag)
{
@ -1623,8 +1762,11 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag)
strcpy(newdev, xorriso->outdev);
if(xorriso->grow_blindly_msc2>=0)
ret= Xorriso_option_dev(xorriso, "", 3|4);
else
else {
xorriso->displacement= 0;
xorriso->displacement_sign= 0;
ret= Xorriso_option_dev(xorriso, newdev, 3|4);
}
return(ret);
}
@ -1771,6 +1913,102 @@ int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name, int flag)
}
/* Option -cp_clone */
int Xorriso_option_cp_clone(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
{
int i, end_idx_dummy, ret, is_dir= 0, was_failure= 0, fret, pass;
char eff_origin[SfileadrL], eff_dest[SfileadrL], dest_dir[SfileadrL];
char leafname[SfileadrL];
int optc= 0;
char **optv= NULL;
struct stat stbuf;
ret= Xorriso_cpmv_args(xorriso, "-cp_clone", argc, argv, idx,
&optc, &optv, eff_dest, 1);
if(ret<=0)
goto ex;
if(ret == 1 && optc > 1) {
nondir_exists:;
sprintf(xorriso->info_text,
"-cp_clone: Copy address already exists and is not a directory: ");
Text_shellsafe(eff_dest, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
strcpy(dest_dir, eff_dest);
if(optc == 1) {
ret= Xorriso_iso_lstat(xorriso, eff_dest, &stbuf, 0);
if(ret >= 0) {
if(S_ISDIR(stbuf.st_mode))/* target directory exists */
is_dir= 1;
else
goto nondir_exists;
}
} else {
is_dir= 1;
ret= Xorriso_mkdir(xorriso, dest_dir, 1 | 2);
if(ret < 0)
{ret= -(ret != -1); goto ex;}
}
/* Pass 0 checks whether the way is clear, pass 1 does the cloning */
for(pass= 0; pass < 2; pass++) {
for(i= 0; i<optc; i++) {
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi,
optv[i], eff_origin, !!pass);
if(ret<=0 || xorriso->request_to_abort)
goto problem_handler;
if(is_dir) {
ret= Sfile_leafname(eff_origin, leafname, 0);
if(ret<=0)
goto problem_handler;
strcpy(eff_dest, dest_dir);
ret= Sfile_add_to_path(eff_dest, leafname, 0);
if(ret<=0) {
sprintf(xorriso->info_text, "Effective path gets much too long (%d)",
(int) (strlen(eff_dest)+strlen(leafname)+1));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto problem_handler;
}
}
ret= Xorriso_iso_lstat(xorriso, eff_dest, &stbuf, 0);
if(pass == 0) {
/* It is ok if both are directories */;
if(ret >= 0 && S_ISDIR(stbuf.st_mode)) {
ret= Xorriso_iso_lstat(xorriso, eff_origin, &stbuf, 0);
if (ret >= 0 && S_ISDIR(stbuf.st_mode))
ret= -1;
}
if(ret >= 0) {
sprintf(xorriso->info_text, "Cloning: May not overwrite: ");
Text_shellsafe(eff_dest, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto problem_handler;
}
} else {
ret= Xorriso_clone_tree(xorriso, NULL, eff_origin, eff_dest, 1);
if(ret <= 0)
goto problem_handler;
}
continue; /* regular bottom of loop */
problem_handler:;
was_failure= 1;
fret= Xorriso_eval_problem_status(xorriso, ret, 1|2);
if(fret>=0)
continue;
goto ex;
}
}
ret= !was_failure;
ex:;
Xorriso_opt_args(xorriso, "-cp_clone",
argc, argv, *idx, &end_idx_dummy, &optc, &optv, 256);
return(ret);
}
/* Option -cpr alias -cpri */
int Xorriso_option_cpri(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
@ -1844,7 +2082,7 @@ ex:;
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
{
int i, ret, is_dir= 0, was_failure= 0, fret, end_idx_dummy;
int i, ret, is_dir= 0, was_failure= 0, fret, end_idx_dummy, problem_count;
char eff_origin[SfileadrL], eff_dest[SfileadrL];
char dest_dir[SfileadrL], leafname[SfileadrL], sfe[5*SfileadrL];
char **eff_src_array= NULL, **eff_tgt_array= NULL;
@ -1947,8 +2185,9 @@ problem_handler:;
}
if(eff_src_array != NULL) {
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array, 0);
if(ret <= 0)
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array,
&problem_count, 0);
if(ret <= 0 || problem_count > 0)
was_failure= 1;
}
if(xorriso->pacifier_count>0)

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -199,6 +199,37 @@ int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag)
}
/* Option -displacement [-]offset */
int Xorriso_option_displacement(struct XorrisO *xorriso, char *value, int flag)
{
double num;
int displacement_sign= 1, l;
char *cpt;
cpt= value;
if(value[0] == '-') {
displacement_sign= -1;
cpt++;
} else if(value[0] == '+')
cpt++;
num= Scanf_io_size(cpt, 0);
l= strlen(cpt);
if(cpt[l - 1] < '0' || cpt[l - 1] > '9')
num/= 2048.0;
if(num < 0.0 || num > 4294967295.0) {
sprintf(xorriso->info_text,
"-displacement: too large or too small: '%s'", value);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
if(num == 0)
displacement_sign= 0;
xorriso->displacement= num;
xorriso->displacement_sign= displacement_sign;
return(1);
}
/* Option -drive_class */
int Xorriso_option_drive_class(struct XorrisO *xorriso,
char *d_class, char *pattern, int flag)
@ -269,6 +300,25 @@ int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag)
}
/* Option -early_stdio_test */
int Xorriso_option_early_stdio_test(struct XorrisO *xorriso, char *mode,
int flag)
{
if(strcmp(mode, "on") == 0)
xorriso->early_stdio_test= 2 | 4;
else if(strcmp(mode, "off") == 0)
xorriso->early_stdio_test= 0;
else if(strcmp(mode, "appendable_wo") == 0)
xorriso->early_stdio_test= 2 | 4 | 8;
else {
sprintf(xorriso->info_text, "-early_stdio_test: unknown mode '%s'", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
return(0);
}
return(1);
}
/* Option -eject */
/* @param flag bit0=do not report toc of eventually remaining drives
*/
@ -310,7 +360,7 @@ int Xorriso_option_end(struct XorrisO *xorriso, int flag)
else
cmd= "-end";
if(xorriso->volset_change_pending) {
if(flag&1)
if((flag & 1) || xorriso->volset_change_pending != 1)
which_will= "end the program discarding image changes";
else
which_will= "commit image changes and then end the program";
@ -324,7 +374,7 @@ int Xorriso_option_end(struct XorrisO *xorriso, int flag)
}
if(xorriso->volset_change_pending) {
if(flag&1) {
if((flag & 1) || xorriso->volset_change_pending != 1) {
xorriso->volset_change_pending= 0;
} else {
ret= Xorriso_option_commit(xorriso, 1);
@ -368,6 +418,8 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
sprintf(xorriso->info_text, "-errfile_log: Unknown mode %s",
Text_shellsafe(mode, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
if(fp != NULL)
fclose(fp);
return(0);
}
@ -455,7 +507,7 @@ int Xorriso_option_external_filter(struct XorrisO *xorriso,
int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
char *disk_path, int flag)
{
int ret;
int ret, problem_count;
char eff_origin[SfileadrL], eff_dest[SfileadrL], *ipth, *eopt[1], *edpt[1];
if(xorriso->allow_restore <= 0) {
@ -485,12 +537,13 @@ int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
eopt[0]= eff_origin;
edpt[0]= eff_dest;
ret= Xorriso_restore_sorted(xorriso, 1, eopt, edpt, (flag & 32 ? 33 : 0));
ret= Xorriso_restore_sorted(xorriso, 1, eopt, edpt, &problem_count,
(flag & 32 ? 33 : 0));
if(!(flag&2))
Xorriso_pacifier_callback(xorriso, "files restored",xorriso->pacifier_count,
xorriso->pacifier_total, "", 1|4);
if(ret<=0)
if(ret <= 0 || problem_count > 0)
goto ex;
if(!(flag&1)) {
@ -843,15 +896,22 @@ not_enough_exec_arguments:;
job= new_job;
} else if(strcmp(cpt, "compare")==0 || strcmp(cpt, "update")==0 ||
strcmp(cpt, "widen_hardlinks")==0) {
strcmp(cpt, "widen_hardlinks")==0 ||
strcmp(cpt, "update_merge")==0) {
if(i+1>=end_idx)
goto not_enough_exec_arguments;
i++;
action= 14;
if(strcmp(cpt, "update")==0)
action= 17;
if(strcmp(cpt, "widen_hardlinks")==0)
else if(strcmp(cpt, "widen_hardlinks")==0)
action= 32;
else if(strcmp(cpt, "update_merge") == 0) {
action= 41;
/* Enter update_merge mode for node adding */
xorriso->update_flags|= 1;
}
ret= Xorriso_make_abs_adr(xorriso, xorriso->wdx, argv[i],
other_path_start, 1|2|4|8);
if(ret<=0)
@ -975,6 +1035,14 @@ not_enough_exec_arguments:;
goto sorry_ex;
}
Findjob_set_action_type(job, 39, type, 0);
} else if(strcmp(cpt, "estimate_size")==0) {
Findjob_set_action_target(job, 40, NULL, 0);
} else if(strcmp(cpt, "rm_merge")==0) {
Findjob_set_action_target(job, 42, NULL, 0);
xorriso->update_flags&= ~1; /* End update_merge mode for node adding */
} else if(strcmp(cpt, "clear_merge")==0) {
Findjob_set_action_target(job, 43, NULL, 0);
xorriso->update_flags&= ~1; /* End update_merge mode for node adding */
} else {
sprintf(xorriso->info_text, "-find -exec: unknown action %s",
Text_shellsafe(argv[i], sfe, 0));
@ -1009,6 +1077,15 @@ ex:;
xorriso->pacifier_count, 0, "", 1);
if(first_job->action == 35 && !(flag & 1))
Xorriso_report_md5_outcome(xorriso, first_job->target, 0);
if(first_job->action == 40) {
sprintf(xorriso->result_line,"Size lower : %lus\n",
(unsigned long) (first_job->estim_lower_size / (off_t) 2048));
Xorriso_result(xorriso,0);
sprintf(xorriso->result_line,"Size upper : %lus\n",
(unsigned long) ((first_job->estim_upper_size / (off_t) 2048) +
!!(first_job->estim_upper_size % 2048)));
Xorriso_result(xorriso,0);
}
if(access_acl_text != NULL)
free(access_acl_text);
if(default_acl_text != NULL)
@ -1315,6 +1392,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
" Load a particular (outdated) ISO image from a -dev or",
" -indev which hosts more than one session.",
" -displacement [-]block_address",
" When loading ISO tree or reading data files compensate a",
" displacement versus the start address for which the image",
" was prepared.",
" -rom_toc_scan \"on\"|\"force\"|\"off\"[:\"emul_on\"|\"emul_off\"]",
" Enable scanning for ISO sessions on read-only drives/media",
" resp. on overwriteable media with emulated TOC.",
@ -1352,6 +1433,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Enable production of scdbackup tag with -md5 on",
" -ban_stdio_write",
" Allow for writing only the usage of optical drives.",
" -early_stdio_test \"on\"|\"appendable_wo\"|\"off\"",
" Classify stdio drives by effective access permissions.",
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
" Blank media resp. invalidate ISO image on media.",
" -format \"as_needed\"|\"full\"|\"fast\"|\"by_index_#\"|\"by_size_#\"",
@ -1376,6 +1459,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Specifies the name of the Abstract File. (37 chars)",
" -joliet \"on\"|\"off\"",
" Generate Joliet info additional to Rock Ridge info.",
" -jigdo \"clear\"|\"template_path\"|\"jigdo_path\"|\"md5_path\"",
" |\"min_size\"|\"checksum_iso\"|\"checksum_template\"",
" |\"compression\"|\"exclude\"|\"demand_md5\"|\"mapping\"",
" |\"checksum_iso\"|\"checksum_template\"",
" value",
" Clear Jigdo Template Extraction parameter list or add a",
" parameter with its value to that list.",
" -compliance rule[:rule...]",
" Allow more or less harmless deviations from strict standards",
" compliance.",
@ -1383,6 +1473,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" |\"discard\"|\"keep\"|\"patch\"|\"dir=\"|\"bin_path=\"",
" |\"cat_path=\"|\"cat_hidden=on|iso_rr|joliet|off\"",
" |\"load_size=\"|\"system_area=\"|\"partition_table=on|off\"",
" |\"mips_path=\"|\"mipsel_path=\"|\"mips_discard\"",
" |\"sparc_label=\"|\"sparc_discard\"",
" |\"show_status\"",
" Whether to discard or keep an exiting El Torito boot image.",
" ISOLINUX can be made bootable by dir=/ or dir=/isolinux",
" or dir=/boot/isolinux. Others, like GRUB, by bin_path=...",
@ -1391,6 +1484,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" ISO image by the usual commands like -map or -add.",
" system_area= and partition_table= are for MBR based booting",
" from USB stick. The system_area= file needs not to be added.",
" mips_path= adds Big Endian MIPS boot files. mipsel_path=",
" sets one Little Endian MIPS boot file. sparc_label=",
" activates SUN Disk Label. All three are mutually exclusive",
" and exclusive to MBR production.",
" -append_partition partition_number type_code disk_path",
" Append a prepared filesystem image after the end of the",
" ISO image. Caution: Will be overwritten by multi-session.",
"",
" -uid uid User id to be used for the whole multi-session ISO image.",
" -gid gid Group id for the same purpose.",
@ -1535,6 +1635,11 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Create empty directories if they do not exist yet.",
" -rmdir iso_rr_path [***]",
" Delete empty directories.",
" -clone iso_rr_path_original iso_rr_path_copy",
" Create an ISO copy of an ISO file or ISO directory tree.",
" -cp_clone iso_rr_path_original [***] iso_rr_path_dest",
" Create ISO to ISO copies according to the rules of cp -r.",
"",
" -- Default list delimiter marking the end of action argument",
" list. It may be changed by option -list_delimiter.",
"",
@ -1606,7 +1711,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Give up any unejected drive afterwards.",
" -close \"on\"|\"off\"",
" If \"on\" then mark the written media as not appendable.",
" -padding number[\"k\"|\"m\"]",
" -padding number[\"k\"|\"m\"]|\"included\"|\"appended\"",
" Append extra bytes to image stream. (Default is 300k)",
" -dummy \"on\"|\"off\"",
" If \"on\" simulate burning. Refuse if media cannot simulate.",
@ -1744,9 +1849,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
"Compatibility emulation (argument list may be ended by list delimiter --):",
" -as mkisofs [-help|-version|-o|-R|-r|-J|-V|-P|-f|-m|-exclude-list|",
" -no-pad|-M|-C|-graft-points|-path-list|pathspecs|-z|",
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size|-G]",
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size|-G|...]",
" Perform some mkisofs gestures, understand pathspecs as mkisofs",
" does. Commit happens outside emulation at usual occasions.",
" For a list of options see -as mkisofs -help.",
" -read_mkisofsrc",
" Read and interpret the .mkisofsrc configuration file.",
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|-multi]",
@ -1821,6 +1927,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" prevents reading and interpretation of startup files.",
" -print text",
" Print a text to result channel.",
" -print_info text",
" Print a text to info channel.",
" -print_mark text",
" Print a text to mark channel.",
" -prompt text",
" Wait for Enter key resp. for a line of input at stdin.",
" -errfile_log mode path|channel",

View File

@ -47,6 +47,17 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,int flag)
}
/* Option -jigdo aspect argument */
int Xorriso_option_jigdo(struct XorrisO *xorriso, char *aspect, char *arg,
int flag)
{
int ret;
ret= Xorriso_jigdo_interpreter(xorriso, aspect, arg, 0);
return(ret);
}
/* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag)
{
@ -440,7 +451,7 @@ int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
{
int ret, end_idx, optc= 0, was_failure= 1, i, fret, mode;
int ret, end_idx, optc= 0, was_failure= 1, i, fret, mode, problem_count;
int ns_flag= 2|4, nt_flag= 2, opt_args_flag= 2, made_di_array= 0;
char source_prefix[SfileadrL], target_prefix[SfileadrL], *cmd, **optv= NULL;
char eff_source[SfileadrL], eff_target[SfileadrL], *source_pt, *s_wd, *t_wd;
@ -565,7 +576,10 @@ int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
source_prefix, strlen(source_prefix) + 1, 0);
if(ret <= 0)
goto ex;
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array, 0);
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array,
&problem_count, 0);
if(ret <= 0 || problem_count > 0)
was_failure= 1;
}
if(mode==0)
Xorriso_pacifier_callback(xorriso, "files added", xorriso->pacifier_count,
@ -627,6 +641,10 @@ int Xorriso_option_md5(struct XorrisO *xorriso, char *mode, int flag)
xorriso->do_md5|= 8;
else if(l == 19 && strncmp(cpt, "stability_check_off", l) == 0)
xorriso->do_md5&= ~8;
else if(l == 13 && strncmp(cpt, "load_check_on", l) == 0)
xorriso->do_md5&= ~32;
else if(l == 14 && strncmp(cpt, "load_check_off", l) == 0)
xorriso->do_md5|= 32;
else {
sprintf(xorriso->info_text, "-md5: unknown mode ");
Text_shellsafe(cpt, xorriso->info_text, 1);

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -54,7 +54,19 @@ int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag)
{
double num;
if(strcmp(size, "included") == 0) {
xorriso->do_padding_by_libisofs= 1;
return(1);
} else if(strcmp(size, "excluded") == 0 || strcmp(size, "appended") == 0) {
xorriso->do_padding_by_libisofs= 0;
return(1);
} else if(size[0] < '0' || size[0] > '9') {
sprintf(xorriso->info_text, "-padding: unrecognized non-numerical mode ");
Text_shellsafe(size, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
return(0);
}
num= Scanf_io_size(size, 0);
if(num < 0 || num > 1024.0 * 1024.0 * 1024.0) {
sprintf(xorriso->info_text, "-padding: wrong size %.f (allowed: %.f - %.f)",
@ -234,17 +246,45 @@ int Xorriso_option_preparer_id(struct XorrisO *xorriso, char *name, int flag)
}
/* Option -print */
/* Options -print , -print_info , -print_mark */
/* @param flag bit0-1= channel: 0=result, 1=info, 2=mark */
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag)
{
sprintf(xorriso->result_line,"%s\n",text);
Xorriso_result(xorriso,1);
int maxl, l, mode;
l= strlen(text);
mode= flag & 3;
if(mode == 1)
maxl= sizeof(xorriso->info_text);
else if(mode == 2)
maxl= sizeof(xorriso->mark_text);
else
maxl= sizeof(xorriso->result_line);
if(l >= maxl) {
sprintf(xorriso->info_text, "Output text too long for -print%s(%d > %d)",
mode == 1 ? "_info" : mode == 2 ? "_mark" : "", l, maxl);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
return(0);
}
if(mode == 1) {
sprintf(xorriso->info_text,"%s\n", text);
Xorriso_info(xorriso,0);
} else if(mode == 2) {
strcpy(xorriso->info_text, xorriso->mark_text);
strcpy(xorriso->mark_text, text);
Xorriso_mark(xorriso,0);
strcpy(xorriso->mark_text, xorriso->info_text);
} else {
sprintf(xorriso->result_line,"%s\n",text);
Xorriso_result(xorriso,1);
}
return(1);
}
/* Option -print_size
@param flag bit0= report in mkisofs compatible form on real stdout
(resp. on result channel if xorriso->packet_output)
*/
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
{
@ -253,8 +293,10 @@ int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
if(!xorriso->volset_change_pending) {
sprintf(xorriso->info_text,"-print_size: No image modifications pending");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
sprintf(xorriso->result_line,"Image size : 0s\n");
Xorriso_result(xorriso,0);
if(!(flag & 1)) {
sprintf(xorriso->result_line,"Image size : 0s\n");
Xorriso_result(xorriso,0);
}
return(2);
}
ret= Xorriso_write_session(xorriso, 1);
@ -265,12 +307,16 @@ int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
}
if(flag&1) {
sprintf(xorriso->result_line,"%d\n", ret);
fd= xorriso->dev_fd_1;
if(fd<0)
fd= 1;
ret= write(fd, xorriso->result_line, strlen(xorriso->result_line));
/* (result of write intentionally ignored) */
fsync(fd);
if(xorriso->packet_output) {
Xorriso_result(xorriso,0);
} else {
fd= xorriso->dev_fd_1;
if(fd<0)
fd= 1;
ret= write(fd, xorriso->result_line, strlen(xorriso->result_line));
/* (result of write intentionally ignored) */
fsync(fd);
}
} else {
sprintf(xorriso->result_line,"Image size : %ds\n", ret);
Xorriso_result(xorriso,0);
@ -1354,6 +1400,9 @@ int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag)
bit2= do not issue pacifier messages at all
bit3= recursive: -update_r
bit4= do not establish and dispose xorriso->di_array
bit5= do not delete files which are not found under
disk_path, but rather mark visited files and mark
files which were found.
*/
int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag)
@ -1440,7 +1489,10 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
if(ret >= 0) {
argv[0]= eff_dest;
argv[1]= "-exec";
argv[2]= "update";
if(flag & 32)
argv[2]= "update_merge";
else
argv[2]= "update";
argv[3]= eff_origin;
zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero,
@ -1461,7 +1513,18 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
argv[3]= eff_dest;
zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */
if(ret>0 && !xorriso->do_follow_mount) {
if(ret>0 && (!xorriso->do_follow_mount) && !(flag & 32)) {
/* >>> ??? what about mount points with (flag & 32) ?
empty_iso_dir shall delete those which already existed
and are freshly excluded. (E.g. by mounting at a non-empty
directory, or by new follow rules.)
This deletion does not match the idea of merging.
For determining the foreign files in a directory which is
target of a mount point, one would have to enter that mount
point directory. Somewhat contrary to do-not-follow.
*/
argv[0]= eff_origin;
argv[1]= "-type";
argv[2]= "m";
@ -1488,13 +1551,17 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
ret= -1;
}
} else {
if(flag & 32)
xorriso->update_flags|= 1; /* Enter update_merge mode for node adding */
/* compare ctime too, no filename reporting, eventually silent */
follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) <<28;
ret= Xorriso_compare_2_files(xorriso, eff_origin, eff_dest, "", &result,
2 | follow_links | ((flag&4)<<27) | (3<<30));
if(ret==0) {
uret= Xorriso_update_interpreter(xorriso, NULL, result, eff_origin,
eff_dest, 0);
if(ret == 0 || (ret > 0 && (flag & 32))) {
if(ret > 0)
result= 0;
uret= Xorriso_update_interpreter(xorriso, NULL, NULL, result, eff_origin,
eff_dest, (!!(flag & 32)) << 1);
if(uret<=0)
ret= -1;
if(uret==3)
@ -1502,7 +1569,7 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
}
}
xorriso->pacifier_interval= mem_pci;
if(mem_lut!=xorriso->last_update_time && !(flag&2))
if(mem_lut!=xorriso->last_update_time && !(flag & (2 | 4)))
Xorriso_pacifier_callback(xorriso, "content bytes read",
xorriso->pacifier_count, 0, "", 1);
report_outcome:;
@ -1553,7 +1620,7 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag)
sprintf(xorriso->result_line,
"ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program\n");
sprintf(xorriso->result_line+strlen(xorriso->result_line),
"Copyright (C) 2010, Thomas Schmitt <scdbackup@gmx.net>, libburnia project.\n");
"Copyright (C) 2011, Thomas Schmitt <scdbackup@gmx.net>, libburnia project.\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line,
"xorriso version : %d.%d.%d%s\n",

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -181,9 +181,9 @@ no_memory:;
ret= 1;
ex:;
if(patterns!=NULL)
free((char *) patterns);
if(ret<=0) {
if(patterns!=NULL)
free((char *) patterns);
Sfile_destroy_argv(&filec, &filev, 0);
} else {
*optc= filec;
@ -314,8 +314,9 @@ int Xorriso_cpmv_args(struct XorrisO *xorriso, char *cmd,
if(ret==2 || ((flag&1) && *optc > 1 && ret==0)) {
is_dir= 1;
} else if(*optc > 1) {
for(i= 0; i<*optc; i++)
Xorriso_msgs_submit(xorriso, 0, (*optv)[i], 0, "ERRFILE", 0);
if(flag & 2)
for(i= 0; i<*optc; i++)
Xorriso_msgs_submit(xorriso, 0, (*optv)[i], 0, "ERRFILE", 0);
sprintf(xorriso->info_text,
"%s: more than one origin given, destination is a non-directory: %s",
cmd, Text_shellsafe(destv[0], sfe, 0));
@ -459,14 +460,15 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
"backslash_codes","blank","biblio_file",
"calm_drive","cd","cdi","cdx","charset","close",
"commit_eject","compliance","copyright_file",
"dev","dialog","disk_dev_ino","disk_pattern","dummy","dvd_obs","eject",
"dev","dialog","disk_dev_ino","disk_pattern","displacement",
"dummy","dvd_obs","early_stdio_test", "eject",
"iso_rr_pattern","follow","format","fs","gid","grow_blindly","hardlinks",
"history","indev","in_charset","joliet",
"list_delimiter","list_profiles","local_charset",
"mark","md5","mount_opts","not_leaf","not_list","not_mgt",
"options_from_file","osirrox","outdev","out_charset","overwrite",
"pacifier","padding","path_list","pathspecs","pkt_output",
"preparer_id","print","prompt",
"preparer_id","print","print_info","print_mark","prompt",
"prog","prog_help","publisher","quoted_not_list","quoted_path_list",
"reassure","report_about","rom_toc_scan","scsi_log",
"session_log","speed","split_size","status","status_history_max",
@ -476,13 +478,17 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
""
};
static char arg2_commands[][40]= {
"assert_volid","boot_image","compare","compare_r","drive_class",
"assert_volid","boot_image","clone","compare","compare_r","drive_class",
"errfile_log","error_behavior","extract","extract_single",
"load","logfile",
"jigdo","load","logfile",
"map","map_single","page","return_with",
"scdbackup_tag","update","update_r","volume_date",
""
};
static char arg3_commands[][40]= {
"append_partition",
""
};
static char arg4_commands[][40]= {
"cut_out","extract_cut","mount","mount_cmd","paste_in","session_string",
""
@ -492,7 +498,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
"check_md5","check_md5_r","check_media","check_media_defaults",
"chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
"compare_l","cpr","cpri","cp_rax","cp_rx","cpax","cpx",
"compare_l","cp_clone","cp_rax","cp_rx","cpr","cpri", "cpax","cpx",
"du","dui","dus","dusi","dux","dusx","external_filter","extract_l",
"file_size_limit","find","findi","finds","findx",
"getfacl","getfacli","getfacl_r","getfacl_ri",
@ -530,6 +536,10 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
for(i=0; arg2_commands[i][0]!=0; i++)
if(strcmp(arg2_commands[i], cmd)==0)
return(1);
*count= 3;
for(i=0; arg3_commands[i][0]!=0; i++)
if(strcmp(arg3_commands[i], cmd)==0)
return(1);
*count= 4;
for(i=0; arg4_commands[i][0]!=0; i++)
if(strcmp(arg4_commands[i], cmd)==0)
@ -648,6 +658,11 @@ next_command:;
ret= Xorriso_option_alter_date(xorriso, arg1, arg2, argc, argv, idx,
strlen(cmd)>10);
} else if(strcmp(cmd,"append_partition")==0) {
(*idx)+= 3;
ret= Xorriso_option_append_partition(xorriso, arg1, arg2, argv[*idx - 1],
0);
} else if(strcmp(cmd,"application_id")==0) {
(*idx)++;
ret= Xorriso_option_application_id(xorriso, arg1, 0);
@ -734,6 +749,10 @@ next_command:;
(*idx)+= 1;
ret= Xorriso_option_chowni(xorriso, arg1, argc, argv, idx, 0);
} else if(strcmp(cmd,"clone")==0) {
(*idx)+= 2;
ret= Xorriso_option_clone(xorriso, arg1, arg2, 1);
} else if(strcmp(cmd,"close")==0) {
(*idx)++;
ret= Xorriso_option_close(xorriso, arg1, 0);
@ -767,13 +786,16 @@ next_command:;
(*idx)++;
Xorriso_option_copyright_file(xorriso, arg1, 0);
} else if(strcmp(cmd,"cpr")==0 || strcmp(cmd,"cpri")==0) {
ret= Xorriso_option_cpri(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"cp_clone") == 0) {
ret= Xorriso_option_cp_clone(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"cp_rx")==0 || strcmp(cmd,"cp_rax")==0) {
ret= Xorriso_option_cpx(xorriso, argc, argv, idx,
1|((strcmp(cmd,"cp_rax")==0)<<1));
} else if(strcmp(cmd,"cpr")==0 || strcmp(cmd,"cpri")==0) {
ret= Xorriso_option_cpri(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"cpx")==0 || strcmp(cmd,"cpax")==0) {
ret= Xorriso_option_cpx(xorriso, argc, argv, idx,
(strcmp(cmd,"cpax")==0)<<1);
@ -804,6 +826,10 @@ next_command:;
(*idx)++;
ret= Xorriso_option_disk_dev_ino(xorriso, arg1, 0);
} else if(strcmp(cmd,"displacement")==0) {
(*idx)++;
ret= Xorriso_option_displacement(xorriso, arg1, 0);
} else if(strcmp(cmd,"disk_pattern")==0) {
(*idx)++;
ret= Xorriso_option_disk_pattern(xorriso, arg1, 0);
@ -827,6 +853,10 @@ next_command:;
} else if(strcmp(cmd,"dux")==0 || strcmp(cmd,"dusx")==0) {
ret= Xorriso_option_lsx(xorriso, argc, argv, idx, (cmd[2]!='s')|4);
} else if(strcmp(cmd,"early_stdio_test")==0) {
(*idx)++;
ret= Xorriso_option_early_stdio_test(xorriso, arg1, 0);
} else if(strcmp(cmd,"eject")==0) {
(*idx)++;
ret= Xorriso_option_eject(xorriso, arg1, 0);
@ -948,6 +978,10 @@ next_command:;
(*idx)++;
ret= Xorriso_option_iso_rr_pattern(xorriso, arg1, 0);
} else if(strcmp(cmd,"jigdo")==0) {
(*idx)+= 2;
ret= Xorriso_option_jigdo(xorriso, arg1, arg2, 0);
} else if(strcmp(cmd,"joliet")==0) {
(*idx)++;
ret= Xorriso_option_joliet(xorriso, arg1, 0);
@ -1123,6 +1157,14 @@ next_command:;
(*idx)++;
ret= Xorriso_option_print(xorriso, arg1, 0);
} else if(strcmp(cmd,"print_info")==0) {
(*idx)++;
ret= Xorriso_option_print(xorriso, arg1, 1);
} else if(strcmp(cmd,"print_mark")==0) {
(*idx)++;
ret= Xorriso_option_print(xorriso, arg1, 2);
} else if(strcmp(cmd,"print_size")==0) {
Xorriso_option_print_size(xorriso, 0);
@ -1290,7 +1332,6 @@ next_command:;
ret= Xorriso_option_temp_mem_limit(xorriso, arg1, 0);
} else if(strcmp(cmd,"test")==0) { /* This option does not exist. */
/* install temporary test code here */;
} else if(strcmp(cmd,"toc")==0) {
@ -1373,8 +1414,6 @@ eval_any_problems:
goto next_command;
ex:;
if((!xorriso->is_dialog) && !(flag&1))
Xorriso_mark(xorriso,0);
fflush(stdout);
return(ret);
}
@ -1453,6 +1492,8 @@ int Xorriso_dialog(struct XorrisO *xorriso, int flag)
if(!xorriso->dialog)
return(1);
if(xorriso->abort_on_is_default)
Xorriso_option_abort_on(xorriso, "NEVER", 0);
xorriso->is_dialog= 1;
for(first_round= 1;1;first_round= 0) {
if(xorriso->pending_option[0]!=0) {
@ -1547,7 +1588,9 @@ int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
ret= Xorriso_option_no_rc(xorriso, 0);
if(ret<=0)
goto ex;
} else if(xorriso->argument_emulation >= 1 &&
xorriso->argument_emulation <= 2) {
{ret= 1; goto ex;}
} else if((strcmp(cmd,"dev")==0 || strcmp(cmd,"outdev")==0 ||
strcmp(cmd,"indev")==0) &&
(strcmp(arg1,"stdio:/dev/fd/1")==0 || strcmp(arg1,"-")==0) &&

View File

@ -1975,6 +1975,14 @@ int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
xorriso->pacifier_byte_count+= rret;
Xorriso_pacifier_callback(xorriso, "content bytes read",
xorriso->pacifier_count, 0, "", 0);
ret= Xorriso_check_for_abort(
xorriso,
xorriso->check_media_default != NULL
? xorriso->check_media_default->abort_file_path
: "/var/opt/xorriso/do_abort_check_media",
Sfile_microtime(0), &xorriso->last_abort_file_time, 0);
if(ret == 1)
{ret= -2; goto ex;}
}
ret= iso_md5_end(&ctx, data_md5);
if(ret < 0)
@ -2004,11 +2012,16 @@ ex:;
if(ctx != NULL)
iso_md5_end(&ctx, data_md5);
if(ret < 0) {
sprintf(xorriso->result_line, "NOT READABLE: ");
if(ret == -2)
sprintf(xorriso->result_line, "Aborted at: ");
else
sprintf(xorriso->result_line, "NOT READABLE: ");
Text_shellsafe(path, xorriso->result_line, 1);
strcat(xorriso->result_line, "\n");
if(!(flag & 1))
Xorriso_result(xorriso,0);
if(ret == -2)
xorriso->request_to_abort= 1;
}
return(ret);
}

View File

@ -148,9 +148,24 @@ int Sfile_add_to_path(char path[SfileadrL], char *addon, int flag)
int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag)
{
int l, i;
int l, i, slashes, prefix_len, path_len;
l= strlen(path)+strlen(prefix)+1;
l= strlen(prefix);
if(l == 0)
return(1);
/* Do not copy slashes between both parts */
for(prefix_len= l; prefix_len > 0; prefix_len--)
if(prefix[prefix_len - 1] != '/')
break;
if(prefix_len == 0)
prefix_len= strlen(prefix) - 1;
path_len= strlen(path);
for(slashes= 0; slashes < path_len; slashes++)
if(path[slashes] != '/')
break;
l= (strlen(path) - slashes) + prefix_len + 1;
if(l>=SfileadrL) {
#ifdef Not_yeT
@ -164,10 +179,16 @@ int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag)
return(-1);
}
l-= strlen(path);
for(i= strlen(path)+1; i>=0; i--)
path[i+l]= path[i];
strcpy(path,prefix);
path[l-1]= '/';
if(l < 0) {
for(i= slashes; i <= path_len + 1; i++)
path[i+l]= path[i];
} else if(l > 0) {
for(i= path_len + 1; i >= slashes; i--)
path[i+l]= path[i];
}
if(prefix_len > 0)
memcpy(path, prefix, prefix_len);
path[l - 1 + slashes]= '/';
return(1);
}

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -548,6 +548,7 @@ ex:;
/*
@param flag bit0= iso_rr_path is freshly added and up to date
bit1= do not mark as changed content (implied by bit0 too)
bit2= -follow: this is not a command parameter
@return -1= severe error
0= not applicable for hard links
@ -582,7 +583,7 @@ int Xorriso_hardlink_update(struct XorrisO *xorriso, int *compare_result,
it must be updated now, even if it has currently no siblings
which it leaves or which it joins.
*/
if(!(flag & 1))
if(!(flag & (1 | 2)))
do_overwrite= 1;
Xorriso__get_di(node, &old_dev, &old_ino, 0);

View File

@ -106,7 +106,7 @@ get_single:;
l= strlen(cpt);
if(l >= linesize - base_length - 1) {
strncpy(linept, cpt, linesize - 1);
line[sizeof(line)-1]= 0;
line[linesize - 1]= 0;
sprintf(xorriso->info_text,"Input line too long !");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
goto new_empty;
@ -1091,7 +1091,7 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
static char channel_prefixes[4][4]= {".","R","I","M"};
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_load_mode= 4;
struct Xorriso_lsT *paths, *leafs, *s;
struct Xorriso_lsT *paths, *leafs, *s, *plst, *vlst;
no_defaults= flag&1;
line= xorriso->result_line;
@ -1242,6 +1242,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
Xorriso_status_result(xorriso,filter,fp,flag&2);
}
is_default= ((xorriso->early_stdio_test & 14) == 0);
sprintf(line, "-early_stdio_test %s\n",
xorriso->early_stdio_test & 6 ? xorriso->early_stdio_test & 8 ?
"appendable_wo" : "on" : "off");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 &&
xorriso->do_auto_chmod==0 && xorriso->drives_exclusive == 1);
mode_pt= "off";
@ -1295,6 +1302,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
ret= (xorriso->system_area_options & 0x300) >> 8;
is_default= (ret == 0);
sprintf(line,"-boot_image any partition_cyl_align=%s\n",
ret == 0 ? "auto" : ret == 1 ? "on" : "off");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
if((xorriso->system_area_disk_path[0] || !part_table_implicit) &&
(xorriso->partition_offset == 0 || (xorriso->system_area_options & 2))) {
is_default= ((xorriso->system_area_options & 3) == 0);
@ -1484,6 +1498,22 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
Xorriso_lst_get_last(xorriso->jigdo_params, &plst, 0);
Xorriso_lst_get_last(xorriso->jigdo_values, &vlst, 0);
if(plst == NULL || vlst == NULL) {
is_default= 1;
sprintf(line,"-jigdo clear 'all'\n");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
while(plst != NULL && vlst != NULL) {
sprintf(line,"-jigdo %s %s\n", Xorriso_lst_get_text(plst, 0),
Text_shellsafe(Xorriso_lst_get_text(vlst, 0), sfe, 0));
Xorriso_status_result(xorriso, filter, fp, flag & 2);
plst= Xorriso_lst_get_prev(plst, 0);
vlst= Xorriso_lst_get_prev(vlst, 0);
}
if(xorriso->do_global_uid) {
sprintf(line,"-uid %lu\n", (unsigned long) xorriso->global_uid);
Xorriso_status_result(xorriso,filter,fp,flag&2);
@ -1600,6 +1630,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
sprintf(line,"-padding %dk\n", xorriso->padding/1024);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->do_padding_by_libisofs == 0);
sprintf(line,"-padding %s\n",
xorriso->do_padding_by_libisofs ? "included" : "appended");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (strcmp(xorriso->report_about_text,"UPDATE")==0);
sprintf(line,"-report_about %s\n",xorriso->report_about_text);
@ -1674,6 +1709,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso, filter, fp, flag & 2);
is_default= (xorriso->displacement == 0);
sprintf(line, "-displacement %s%lu\n",
xorriso->displacement_sign < 0 ? "-" : "",
(unsigned long) xorriso->displacement);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso, filter, fp, flag & 2);
adr_mode= xorriso->image_start_mode & 0xffff;
if(adr_mode>=0 && adr_mode<=max_load_mode) {
is_default= (adr_mode==0);
@ -1768,14 +1810,16 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
is_default= ((xorriso->do_md5 & 31) == 0);
sprintf(line, "-md5 ");
if(xorriso->do_md5 & 1) {
if((xorriso->do_md5 & (8)) == (8)) {
strcat(line, "all\n");
if((xorriso->do_md5 & 8) == 8) {
strcat(line, "all");
} else {
strcat(line, "on");
if(xorriso->do_md5 & 8)
strcat(line, ":stability_check_on");
strcat(line, "\n");
}
if(xorriso->do_md5 & 32)
strcat(line, ":load_check_off");
strcat(line, "\n");
} else
strcat(line, "off\n");
if(!(is_default && no_defaults))

View File

@ -2,7 +2,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -26,6 +26,28 @@
#include <fcntl.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
#ifdef Xorriso_standalonE
#ifdef Xorriso_with_libjtE
#include "../libjte/libjte.h"
#endif
#else
#ifdef Xorriso_with_libjtE
#include <libjte/libjte.h>
#endif
#endif /* ! Xorriso_standalonE */
#include "xorriso.h"
#include "xorriso_private.h"
@ -76,17 +98,18 @@ int Xorriso_make_write_options(
/* @param flag bit0= do not write but only prepare and return size in sectors
bit1= do not use isoburn wrappers
bit1= do not use isoburn wrappers, do not assume libisofs
*/
int Xorriso_sanitize_image_size(struct XorrisO *xorriso,
struct burn_drive *drive, struct burn_disc *disc,
struct burn_write_opts *burn_options, int flag)
{
int ret, img_sectors, num_sessions= 0, num_tracks= 0, padding= 0, profile;
int media_space, lba, nwa;
int media_space, lba, nwa, multi_emul_blocks= 0;
char profile_name[80];
struct burn_session **sessions;
struct burn_track **tracks;
enum burn_disc_status s;
img_sectors= burn_disc_get_sectors(disc);
@ -117,7 +140,7 @@ no_track:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
}
if(xorriso->alignment == 0) {
if(xorriso->alignment == 0 && ! (xorriso->no_emul_toc & 1)) {
ret= isoburn_needs_emulation(drive);
if(ret > 0) {
/* Take care that the session is padded up to the future NWA.
@ -125,8 +148,29 @@ no_track:;
sessions survive and confuse -rom_toc_scan.
*/
xorriso->alignment= 32;
s= isoburn_disc_get_status(drive);
if(s == BURN_DISC_BLANK) {
/* Count blocks before nwa as part of the image */;
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &lba, &nwa);
if(ret <= 0)
nwa= 0;
multi_emul_blocks= nwa;
}
}
}
if(!(flag & 2)) {
#ifdef Xorriso_with_libjtE
/* JTE : no multi-session, no_emul_toc, padding in libisofs */
if(xorriso->libjte_handle != NULL)
padding= 0;
#endif /* ! Xorriso_with_libjtE */
if(xorriso->do_padding_by_libisofs)
padding= 0;
}
if(xorriso->alignment > 0) {
if(img_sectors > 0) {
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &lba, &nwa);
@ -135,9 +179,9 @@ no_track:;
lba= (nwa + img_sectors + padding) % xorriso->alignment;
if(lba > 0)
padding+= xorriso->alignment - lba;
} else if(padding < xorriso->alignment)
padding= xorriso->alignment;
}
}
burn_track_define_data(tracks[0], 0, padding * 2048, 0, BURN_MODE1);
Xorriso_process_msg_queues(xorriso,0);
@ -155,7 +199,7 @@ no_track:;
{ret= 0; goto ex;}
}
if(flag&1) {
ret= img_sectors+padding;
ret= multi_emul_blocks + img_sectors + padding;
} else
ret= 1;
ex:;
@ -510,8 +554,8 @@ ex:;
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
{
int ret, relax= 0, i, pacifier_speed= 0, data_lba, ext, is_bootable= 0;
int freshly_bootable= 0, hide_attr;
char xorriso_id[256], *img_id, sfe[5*SfileadrL], *out_cs;
int freshly_bootable= 0, hide_attr, pad_by_libisofs= 0;
char xorriso_id[256], *img_id, sfe[5*SfileadrL], *out_cs, *part_image;
struct isoburn_imgen_opts *sopts= NULL;
struct burn_drive_info *dinfo, *source_dinfo;
struct burn_drive *drive, *source_drive;
@ -527,6 +571,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
int profile_number;
char profile_name[80];
IsoBoot *bootcat_node;
uint32_t padding;
ret= Xorriso_finish_hl_update(xorriso, 0);
if(ret <= 0)
@ -546,7 +591,15 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
if(ret<=0)
return(0);
s= isoburn_disc_get_status(drive);
if(xorriso->out_drive_handle == xorriso->in_drive_handle) {
if(abs(xorriso->displacement_sign) == 1 && xorriso->displacement != 0 &&
s != BURN_DISC_BLANK) {
sprintf(xorriso->info_text,
"May not grow ISO image while -displacement is non-zero");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
source_drive= drive;
} else {
if(xorriso->in_drive_handle == NULL) {
@ -557,7 +610,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
if(ret<=0)
goto ex;
}
s= isoburn_disc_get_status(drive);
if(s!=BURN_DISC_BLANK) {
s= burn_disc_get_status(drive);
if(s!=BURN_DISC_BLANK)
@ -691,9 +743,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
&value_length, &value, 2 | 8);
}
isoburn_igopt_set_level(sopts, 3);
isoburn_igopt_set_level(sopts, xorriso->iso_level);
ext= isoburn_igopt_rockridge |
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
(( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) |
(( (!(xorriso->ino_behavior & 2)) ||
(xorriso->do_aaip & (2 | 8 | 16 | 256)) ||
@ -701,20 +754,43 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
) * isoburn_igopt_aaip) |
((!!(xorriso->do_md5 & 2)) * isoburn_igopt_session_md5) |
((!!(xorriso->do_md5 & 4)) * isoburn_igopt_file_md5) |
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability);
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability) |
((!!xorriso->do_old_empty) * isoburn_igopt_old_empty) |
((flag & 1) * isoburn_igopt_will_cancel);
if(xorriso->no_emul_toc & 1)
ext|= isoburn_igopt_no_emul_toc;
isoburn_igopt_set_extensions(sopts, ext);
isoburn_igopt_set_relaxed(sopts, relax);
ret= isoburn_igopt_set_untranslated_name_len(sopts,
xorriso->untranslated_name_len);
if(ret <= 0)
{ret= 0; goto ex;}
isoburn_igopt_set_sort_files(sopts, 1);
isoburn_igopt_set_over_mode(sopts, 0, 0, (mode_t) 0, (mode_t) 0);
isoburn_igopt_set_over_ugid(sopts, 0, 0, (uid_t) 0, (gid_t) 0);
isoburn_igopt_set_over_ugid(sopts, 2 * !!xorriso->do_global_uid,
2 * !!xorriso->do_global_gid,
(uid_t) xorriso->global_uid,
(gid_t) xorriso->global_gid);
isoburn_igopt_set_out_charset(sopts, out_cs);
isoburn_igopt_set_fifo_size(sopts, xorriso->fs * 2048);
Ftimetxt(time(NULL), xorriso->scdbackup_tag_time, 8);
isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name,
xorriso->scdbackup_tag_time,
xorriso->scdbackup_tag_written);
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
if(xorriso->appended_partitions[i] == NULL)
continue;
if(xorriso->appended_partitions[i][0] == 0)
continue;
if(strcmp(xorriso->appended_partitions[i], ".") == 0)
part_image= "";
else
part_image= xorriso->appended_partitions[i];
isoburn_igopt_set_partition_img(sopts, i + 1,
xorriso->appended_part_types[i], part_image);
}
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
if(image!=NULL && 12+strlen(Xorriso_timestamP)<80) {
strcpy(xorriso_id, xorriso->preparer_id);
img_id= (char *) iso_image_get_data_preparer_id(image);
@ -733,6 +809,33 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
xorriso->vol_expiration_time, xorriso->vol_effective_time,
xorriso->vol_uuid);
#ifdef Xorriso_with_libjtE
if(xorriso->libjte_handle && (xorriso->libjte_params_given & (4 | 8))) {
/* >>> Check whether the mandatory parameters are set */;
ret= libjte_set_outfile(xorriso->libjte_handle, xorriso->outdev);
Xorriso_process_msg_queues(xorriso, 0);
if(ret <= 0)
goto ex;
isoburn_igopt_attach_jte(sopts, xorriso->libjte_handle);
pad_by_libisofs= 1;
}
#endif /* Xorriso_with_libjtE */
if(xorriso->do_padding_by_libisofs || pad_by_libisofs) {
/* Padding to be done by libisofs, not by libburn.
*/
padding= xorriso->padding / 2048;
if(xorriso->padding > padding * 2048)
padding++;
/*
fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
(int) padding);
*/
isoburn_igopt_set_tail_blocks(sopts, padding);
}
/* Make final abort check before starting expensive activities */
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
if(ret<0)
@ -800,7 +903,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
if(ret<=0)
goto ex;
goto cancel_iso;
isoburn_igopt_get_effective_lba(sopts, &(xorriso->session_lba));
if(xorriso->do_stream_recording == 2) {
ret= isoburn_igopt_get_data_start(sopts, &data_lba);
@ -813,19 +916,23 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
Xorriso_process_msg_queues(xorriso,0);
if(flag&1) /* set queue severity to FAILURE */
Xorriso_set_image_severities(xorriso, 2);
isoburn_cancel_prepared_write(source_drive, drive, 0);
if(flag&1) /* reset queue severity */
Xorriso_set_image_severities(xorriso, 0);
goto ex;
goto cancel_iso;
}
ret= Xorriso_may_burn(xorriso, 0);
if(ret <= 0)
goto ex;
goto cancel_iso;
/* Important: do not return until burn_is_aborting() was checked */
Xorriso_set_signal_handling(xorriso, 1);
/* De-activate eventual target file truncation in dummy mode */
ret= isoburn_set_truncate(drive, (!xorriso->do_dummy) | 2 | 4);
if(ret < 0)
goto cancel_iso;
xorriso->run_state= 1; /* Indicate that burning has started */
isoburn_disc_write(burn_options, disc);
burn_write_opts_free(burn_options);
@ -844,6 +951,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
Xorriso_process_msg_queues(xorriso,0);
sessions= burn_disc_get_sessions(disc, &num_sessions);
if(num_sessions>0) {
@ -874,7 +982,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
isoburn_sync_after_write(source_drive, drive, 0);
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
sprintf(xorriso->info_text, "Writing to %s completed successfully.\n\n",
Text_shellsafe(xorriso->outdev,sfe,0));
Xorriso_info(xorriso, 0);
ret= 1;
@ -895,6 +1003,10 @@ ex:;
Xorriso_process_msg_queues(xorriso,0);
Xorriso_append_scdbackup_record(xorriso, 0);
return(ret);
cancel_iso:;
isoburn_cancel_prepared_write(source_drive, drive, 0);
goto ex;
}
@ -943,6 +1055,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
int flag)
{
int ret, size, free_bytes, i, aborting= 0, emul, buffer_fill= 50, last_sector;
int iso_wait_counter= 0, iso_cancel_limit= 5;
struct burn_progress progress;
char *status_text, date_text[80], *speed_unit, mem_text[8];
enum burn_drive_status drive_status;
@ -951,6 +1064,9 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
double first_base_count= 0.0, norm= 0.0, now_time, fract_offset= 0.0;
double measured_speed, speed_factor= 1385000, quot;
time_t time_prediction;
IsoImage *image= NULL;
image= isoburn_get_attached_image(drive);
start_time= Sfile_microtime(0);
while(burn_drive_get_status(drive, NULL) == BURN_DRIVE_SPAWNING)
@ -975,8 +1091,23 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
last_time= current_time;
last_sector= progress.sector;
drive_status= burn_drive_get_status(drive, &progress);
if(drive_status == BURN_DRIVE_IDLE)
if(drive_status == BURN_DRIVE_IDLE) {
/* To avoid a race condition between burn_source and libisofs
writer thread: Wait for ISO generator thread to have finished.
After some seconds kick it by isoburn_cancel_prepared_write()
which waits for the write thread to end.
*/
if(image == NULL)
break;
if(!iso_image_generator_is_running(image))
break;
iso_wait_counter++;
if(iso_wait_counter > iso_cancel_limit) {
isoburn_cancel_prepared_write(drive, NULL, 0);
break;
}
}
current_time= Sfile_microtime(0);
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {
if(current_time-last_time>0.2)
@ -1109,6 +1240,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
break;
}
}
iso_image_unref(image);
return(1);
}
@ -1633,20 +1765,29 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
if(isoburn_needs_emulation(drive)) {
if(flag&1) {
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &dummy, &nwa);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text,
"Cannot obtain next writeable address of emulated multi-session media\n");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
if(nwa==32)
if(nwa == 32 && disc_state != BURN_DISC_APPENDABLE)
nwa= 0; /* No automatic toc emulation. Formatter might not be aware. */
burn_write_opts_set_start_byte(burn_options,((off_t) nwa) * (off_t) 2048);
} else {
nwa= 0;
burn_write_opts_set_start_byte(burn_options, (off_t) 0);
if (disc_state == BURN_DISC_APPENDABLE) {
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &dummy, &nwa);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) {
sprintf(xorriso->info_text,
"Cannot obtain next writeable address of emulated appendable media\n");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
}
burn_write_opts_set_start_byte(burn_options,((off_t) nwa) * (off_t) 2048);
}
if(write_start_address>=0) {
@ -1696,7 +1837,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
if(ret <= 0)
goto ex;
}
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
sprintf(xorriso->info_text, "Writing to %s completed successfully.\n\n",
Text_shellsafe(xorriso->outdev,sfe,0));
Xorriso_info(xorriso, 0);
ret= 1;
@ -1716,7 +1857,10 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
int flag)
{
char *npt, *cpt;
int l, was;
int l, was, value, ret;
struct isoburn_imgen_opts *opts= NULL;
char msg[160];
off_t limit;
was= xorriso->relax_compliance;
npt= cpt= mode;
@ -1734,6 +1878,32 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
} else if(l == 7 && strncmp(cpt, "default", l) == 0) {
xorriso->relax_compliance= Xorriso_relax_compliance_defaulT;
} else if((l == 18 && strncmp(cpt, "untranslated_names", l) == 0) ||
(l == 21 && strncmp(cpt, "untranslated_names_on", l) == 0) ) {
xorriso->untranslated_name_len = -1;
} else if((l == 22 && strncmp(cpt, "untranslated_names_off", l) == 0)) {
xorriso->untranslated_name_len = 0;
} else if((l >= 22 && strncmp(cpt, "untranslated_name_len=", 22) == 0)) {
value= -1;
sscanf(cpt + 22, "%d", &value);
/* Let libisoburn check the value */
ret= isoburn_igopt_new(&opts, 0);
if(ret != 1)
return(-1);
ret= isoburn_igopt_set_untranslated_name_len(opts, value);
isoburn_igopt_destroy(&opts, 0);
if(ret <= 0) { /* Not a tasty value */
xorriso->relax_compliance= was;
return(0);
}
xorriso->untranslated_name_len = value;
} else if((l == 16 && strncmp(cpt, "allow_dir_id_ext", l) == 0) ||
(l == 19 && strncmp(cpt, "allow_dir_id_ext_on", l) == 0) ) {
xorriso->relax_compliance|= isoburn_igopt_allow_dir_id_ext;
} else if((l == 20 && strncmp(cpt, "allow_dir_id_ext_off", l) == 0)) {
xorriso->relax_compliance&= ~isoburn_igopt_allow_dir_id_ext;
} else if((l == 12 && strncmp(cpt, "omit_version", l) == 0) ||
(l == 15 && strncmp(cpt, "omit_version_on", l) == 0) ) {
xorriso->relax_compliance|= isoburn_igopt_omit_version_numbers;
@ -1794,6 +1964,12 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
} else if(l == 21 && strncmp(cpt, "joliet_long_paths_off", l) == 0) {
xorriso->relax_compliance&= ~isoburn_igopt_joliet_longer_paths;
} else if((l == 17 && strncmp(cpt, "joliet_long_names", l) == 0) ||
(l == 20 && strncmp(cpt, "joliet_long_names_on", l) == 0)) {
xorriso->relax_compliance|= isoburn_igopt_joliet_long_names;
} else if(l == 21 && strncmp(cpt, "joliet_long_names_off", l) == 0) {
xorriso->relax_compliance&= ~isoburn_igopt_joliet_long_names;
} else if((l == 10 && strncmp(cpt, "always_gmt", l) == 0) ||
(l == 13 && strncmp(cpt, "always_gmt_on", l) == 0)) {
xorriso->relax_compliance|= isoburn_igopt_always_gmt;
@ -1833,6 +2009,33 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
(l == 8 && strncmp(cpt, "emul_toc", l) == 0)) {
xorriso->no_emul_toc&= ~1;
} else if((l == 13 && strncmp(cpt, "iso_9660_1999", l) == 0) ||
(l == 16 && strncmp(cpt, "iso_9660_1999_on", l) == 0)) {
xorriso->do_iso1999= 1;
} else if(l == 17 && strncmp(cpt, "iso_9660_1999_off", l) == 0) {
xorriso->do_iso1999= 0;
} else if((l >= 15 && strncmp(cpt, "iso_9660_level=", 15) == 0)) {
value= 0;
sscanf(cpt + 15, "%d", &value);
if(value == 1 || value == 2) {
limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - ((off_t) 1);
xorriso->iso_level= value;
if(xorriso->file_size_limit > limit)
xorriso->file_size_limit= limit;
} else if(value == 3) {
xorriso->iso_level= value;
if(xorriso->file_size_limit < Xorriso_default_file_size_limiT)
xorriso->file_size_limit= Xorriso_default_file_size_limiT;
} else {
sprintf(msg,
"-compliance iso_9660_level=%d : Only 1, 2, or 3 are permissible",
value);
Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0);
xorriso->relax_compliance= was;
return(0);
}
} else if((l == 8 && strncmp(cpt, "iso_9660", l) == 0) ||
(l == 11 && strncmp(cpt, "iso_9660_on", l) == 0)) {
/* may have a meaning in future */;
@ -1841,6 +2044,14 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
Xorriso_msgs_submit(xorriso, 0,
"-compliance -iso_9660_off : Cannot do anything else but ISO 9660",
0, "FAILURE", 0);
xorriso->relax_compliance= was;
return(0);
} else if((l == 9 && strncmp(cpt, "old_empty", l) == 0) ||
(l == 12 && strncmp(cpt, "old_empty_on", l) == 0)) {
xorriso->do_old_empty= 1;
} else if(l == 13 && strncmp(cpt, "old_empty_off", l) == 0) {
xorriso->do_old_empty= 0;
} else {
if(l<SfileadrL)
@ -1870,6 +2081,9 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
return(1);
}
strcpy(mode, "clear");
sprintf(mode + strlen(mode), ":iso_9660_level=%d", xorriso->iso_level);
if(r & isoburn_igopt_allow_dir_id_ext)
strcat(mode, ":allow_dir_id_ext");
if(r & isoburn_igopt_omit_version_numbers)
strcat(mode, ":omit_version");
if(r & isoburn_igopt_only_iso_versions)
@ -1890,6 +2104,8 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
strcat(mode, ":full_ascii");
if(r & isoburn_igopt_joliet_longer_paths)
strcat(mode, ":joliet_long_paths");
if(r & isoburn_igopt_joliet_long_names)
strcat(mode, ":joliet_long_names");
if(r & isoburn_igopt_always_gmt)
strcat(mode, ":always_gmt");
if(r & isoburn_igopt_dir_rec_mtime)
@ -1905,9 +2121,17 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
}
if(xorriso->no_emul_toc & 1)
strcat(mode, ":no_emul_toc");
if(xorriso->untranslated_name_len != 0)
sprintf(mode + strlen(mode), ":untranslated_name_len=%d",
xorriso->untranslated_name_len);
if(xorriso->do_iso1999)
sprintf(mode + strlen(mode), ":iso_9660_1999");
if(xorriso->do_old_empty)
sprintf(mode + strlen(mode), ":old_empty");
return(1 +
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)));
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)
&& xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999 &&
xorriso->iso_level == 3));
}
@ -1976,7 +2200,6 @@ int Xorriso_set_isolinux_options(struct XorrisO *xorriso,
if(make_isohybrid_mbr) {
sprintf(xorriso->info_text, "Will write isohybrid MBR.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
xorriso->alignment= 512;
}
ret= el_torito_set_isolinux_options(bootimg,
patch_table | (make_isohybrid_mbr << 1),0);
@ -2033,8 +2256,11 @@ int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
}
if(iso_lba < 32)
return(2);
if(!(flag & 2)) {
/* head_buffer was not filled yet. Read it from output media. */
if(burn_drive_get_drive_role(drive) == 5) /* write-only */
return(2);
if(job != NULL && job->data_to_fd >= 0) {
if((flag & 8) && job->sector_map != NULL) {
ret= Sectorbitmap_bytes_are_set(job->sector_map,

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Sep 10, 2010"
.TH XORRISO 1 "Apr 03, 2011"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -376,9 +376,8 @@ demands a file name length of up to 255 characters and paths of up to 1024
characters. Rock Ridge fulfills this demand.
.PP
An \fBEl Torito\fR
boot record connects one or more boot images, which are binary program files
stored in the ISO image, with the bootstrapping facility of
contemporary computers.
boot record points the BIOS bootstrapping facility to one or more boot
images, which are binary program files stored in the ISO image.
The content of the boot image files is not in the scope of El Torito.
.br
Most bootable GNU/Linux CDs are equipped with ISOLINUX or GRUB boot images.
@ -397,7 +396,8 @@ Emulation -as mkisofs supports the example options out of the ISOLINUX wiki,
the options used in GRUB script grub-mkrescue, and the example in the
FreeBSD AvgLiveCD wiki.
.br
The support for other boot image types is sparse.
There is support for boot facilities other than PC BIOS:
EFI, MIPS Big Endian (SGI), MIPS Little Endian (DEC), SUN SPARC.
.br
.PP
\fBACL\fR
@ -641,6 +641,26 @@ until the next -dev or -indev. After the image has been loaded once, the
setting is valid for -rollback until next -dev or -indev, where it
will be reset to "auto".
.TP
\fB\-displacement\fR [-]lba
Compensate an eventual displacement of the image versus the start address
for which the image was prepared. This affects only loading of ISO images
and reading of their files. The multi-session method of growing is not allowed
as long as -displacement is non-zero. I.e. -indev and -outdev must be
different. Eventually the displacement is reset to 0 before the drive
gets re-aquired after writing.
.br
Examples:
.br
If a track of a CD starts at block 123456 and gets copied to a disk file
where it begins at block 0, then this copy can be loaded with
-displacement -123456.
.br
If an ISO image was written onto a partition with offset of 640000 blocks of
512 bytes, then it can be loaded from the base device by -displacement 160000.
.br
In both cases, the ISO sessions should be self contained, i.e. not add-on
sessions to an ISO image outside their track resp. partition.
.TP
\fB\-drive_class\fR "harmless"|"banned"|"caution"|"clear_list" disk_pattern
Add a drive path pattern to one of the safety lists or make those lists empty.
There are three lists defined which get tested in the following sequence:
@ -751,7 +771,7 @@ Enable or disable processing of xattr attributes in user namespace.
If enabled, then xorriso will handle xattr similar to ACL.
See also options -getfattr, -setfattr and above paragraph about xattr.
.TP
\fB\-md5\fR "on"|"all"|"off"
\fB\-md5\fR "on"|"all"|"off"|"load_check_off"
Enable or disable processing of MD5 checksums for the overall session and for
each single data file. If enabled then images get loaded only if eventual
checksums tags of superblock and directory tree match properly. The MD5
@ -772,6 +792,15 @@ Mode "all" will additionally check during image generation whether the checksum
of a data file changed between the time when its reading began and the time
when it ended. This implies reading every file twice.
.br
Mode "load_check_off" together with "on" or "all" will load recorded MD5 sums
but not test the recorded checksum tags of superblock and directory tree.
This is necessary if growisofs was used as burn program, because it does
not overwrite the superblock checksum tag of the first session.
Therefore load_check_off is in effect when xorriso -as mkisofs option -M
is performed.
.br
The test can be re-enabled by mode "load_check_on".
.br
Checksums can be exploited via options -check_md5, -check_md5_r, via find
actions get_md5, check_md5, and via -check_media.
.TP
@ -844,6 +873,19 @@ Allow for writing only the usage of MMC optical drives. Disallow
to write the result into files of nearly arbitrary type.
Once set, this command cannot be revoked.
.TP
\fB\-early_stdio_test\fR "on"|"appendable_wo"|"off"
If enabled by "on" then regular files and block devices get tested for
effective access permissions. This implies to try opening those files for
writing, which otherwise will happen only later and only if actual
writing is desired.
.br
The test result is used for classifying the pseudo drives as overwriteable,
read-only, write-only, or uselessly empty. This may lead to earlier detection
of severe problems, and may avoid some less severe error events.
.br
Mode "appendable_wo" is like "on" with the additional property that
non-empty write-only files are regarded as appendable rather than blank.
.TP
.B Inserting files into ISO image:
.PP
The following commands expect file addresses of two kinds:
@ -1031,6 +1073,31 @@ Create empty directories if they do not exist yet.
Existence as directory generates a WARNING event, existence as
other file causes a FAILURE event.
.TP
\fB\-clone\fR iso_rr_path_original iso_rr_path_copy
Create a copy of the ISO file object iso_rr_path_original with the new
address iso_rr_path_copy. If the original is a directory then copy all
files and directories underneath. An eventual boot catalog file gets
not copied but is silently ignored.
.br
The copied ISO file objects have the same attributes. Copied data files
refer to the same content source as their originals.
The copies may then be manipulated independendly of their originals.
.br
This command will refuse execution if the address iso_rr_path_copy
already exists in the ISO tree.
.TP
\fB\-cp_clone\fR iso_rr_path_original [***] iso_rr_path_dest
Create copies of one or more ISO file objects as with command -clone.
Eventually merge directories with existing ones, but do not overwrite
existing ISO file objects.
.br
The rules for generating the copy addresses are the same as with
command -cpr (see above) resp. shell command cp -r. Other than with -cpr,
relative iso_rr_path_original will get prepended the -cd path and not
the -cdx path. Consider to -mkdir iso_rr_path_dest before -cp_clone
so the copy address does not depend on the number of iso_rr_path_original
arguments.
.TP
.B Settings for file insertion:
.TP
\fB\-file_size_limit\fR value [value [...]] --
@ -1485,6 +1552,9 @@ Matches files which use data blocks marked as damaged by a previous
run of -check_media. The damage info vanishes when a new ISO image gets
loaded.
.br
Note that a MD5 session mismatch marks all files of the session as damaged.
If finer distinction is desired, perform -md5 off before -check_media.
.br
\fB\-pending_data\fR :
Matches files which get their content from outside the loaded ISO image.
.br
@ -1603,6 +1673,16 @@ performs command -update with the found file address as
iso_rr_path. The corresponding file address is determined like with above
action "compare".
.br
\fBupdate_merge\fR
is like update but does not delete the found file if it is missing on disk.
It may be run several times and records with all visited files whether their
counterpart on disk has already been seen by one of the update_merge runs.
Finally, a -find run with action "rm_merge" may remove all files that
saw no counterpart on disk.
.br
Up to the next "rm_merge" or "clear_merge" all newly inserted files will
get marked as having a disk counterpart.
.br
\fBrm\fR
removes the found iso_rr_path from the image if it is not a directory
with files in it. I.e. this "rm" includes "rmdir".
@ -1611,6 +1691,14 @@ with files in it. I.e. this "rm" includes "rmdir".
removes the found iso_rr_path from the image, including whole
directory trees.
.br
\fBrm_merge\fR
removes the found iso_rr_path if it was visited by one or more previous actions
"update_merge" and saw no counterpart on disk in any of them. The marking from
the update actions is removed in any case.
.br
\fBclear_merge\fR
removes an eventual marking from action "update_merge".
.br
\fBreport_damage\fR
classifies files whether they hit a data block that is
marked as damaged. The result is printed together with the eventual address
@ -1696,6 +1784,12 @@ E.g.:
.br
-find / -disk_name *_secret -exec hide on
.br
\fBestimate_size\fR
prints a lower and an upper estimation of the number of blocks which the
found files together will occupy in the emerging ISO image.
This does not account for the superblock,
for the directories in the -find path, or for image padding.
.br
\fBfind\fR
performs another run of -find on the matching file address.
It accepts the same params as -find, except iso_rr_path.
@ -1964,32 +2058,57 @@ can be revoked individually by appending "_off". Like "deep_paths_off".
.br
Rule keywords are:
.br
"omit_version" do not add versions (";1") to ISO and Joliet file names.
"iso_9660_level="number chooses level 1 with ISO names of the form 8.3
and -file_size_limit <= 4g - 1, or level 2 with ISO names up to
length 32 and the same -file_size_limit, or level 3 with ISO names up to
length 32 and -file_size_limit >= 400g -200k. If necessary -file_size_limit
gets adjusted.
.br
"only_iso_version" do not add versions (";1") to Joliet file names.
"allow_dir_id_ext" allows ISO names of directories to have a name extension
as with other file types. It does not force dots and it omits the version
number, though. This is a bad tradition of mkisofs which violates ECMA-119.
Especially ISO level 1 only allows 8 characters in a directory name and
not 8.3.
.br
"deep_paths" allow ISO file paths deeper than 8 levels.
"omit_version" does not add versions (";1") to ISO and Joliet file names.
.br
"long_paths" allow ISO file paths longer than 255 characters.
"only_iso_version" does not add versions (";1") to Joliet file names.
.br
"long_names" allow up to 37 characters with ISO file names.
"deep_paths" allows ISO file paths deeper than 8 levels.
.br
"no_force_dots" do not add a dot to ISO file names which have none.
"long_paths" allows ISO file paths longer than 255 characters.
.br
"no_j_force_dots" do not add a dot to Joliet file names which have none.
"long_names" allows up to 37 characters with ISO file names.
.br
"lowercase" allow lowercase characters in ISO file names.
"no_force_dots" does not add a dot to ISO file names which have none.
.br
"full_ascii" allow all ASCII characters in ISO file names.
"no_j_force_dots" does not add a dot to Joliet file names which have none.
.br
"joliet_long_paths" allow Joliet paths longer than 240 characters.
"lowercase" allows lowercase characters in ISO file names.
.br
"always_gmt" store timestamps in GMT representation with timezone 0.
"full_ascii" allows all ASCII characters in ISO file names.
.br
"rec_mtime" record with ISO files the disk file's mtime and not the
"untranslated_names" might be dangerous for inadverted reader programs
which rely on the restriction to at most 37 characters in ISO file names.
This option allows ISO file names up to 96 characters with no character
conversion. If a file name has more characters, then image production will
fail deliberately.
.br
"untranslated_name_len="number enables untranslated_names with a smaller limit
for the length of file names. 0 disables this feature, -1 chooses maximum
length limit, numbers larger than 0 give the desired length limit.
.br
"joliet_long_names" allows Joliet leaf names up to 103 characters rather
than 64.
.br
"joliet_long_paths" allows Joliet paths longer than 240 characters.
.br
"always_gmt" stores timestamps in GMT representation with timezone 0.
.br
"rec_mtime" records with ISO files the disk file's mtime and not the
creation time of the image.
.br
"new_rr" use Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
"new_rr" uses Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
FreeBSD or for Solaris). This implies "aaip_susp_1_10_off" which may be changed
by subsequent "aaip_susp_1_10".
.br
@ -2002,6 +2121,14 @@ rather than as official extension under SUSP-1.12.
"no_emul_toc" saves 64 kB with the first session on overwriteable media
but makes the image incapable of displaying its session history.
.br
"iso_9660_1999" causes the production of an additional directory tree
compliant to ISO 9660:1999. It can record long filenames for readers which
do not understand Rock Ridge.
.br
"old_empty" uses the old way of of giving block addresses in the range
of [0,31] to files with no own data content. The new way is to have
a dedicated block to which all such files will point.
.br
Default setting is
.br
"clear:only_iso_version:deep_paths:long_paths:no_j_force_dots:
@ -2212,7 +2339,7 @@ any more (if possible at all with the given type of target media).
This is the contrary of cdrecord, wodim, cdrskin option -multi,
and is one aspect of growisofs option -dvd-compat.
.TP
\fB\-padding\fR number["k"|"m"]
\fB\-padding\fR number["k"|"m"]|"included"|"appended"
Append the given number of extra bytes to the image stream.
This is a traditional remedy for a traditional bug in block
device read drivers. Needed only for CD recordings in TAO mode.
@ -2220,8 +2347,15 @@ Since one can hardly predict on what media an image might end up,
xorriso adds the traditional 300k of padding by default to all images.
.br
For images which will never get to a CD it is safe to use -padding 0 .
.br
Normally padding is not written as part of the ISO image but appended
after the image end. This is -padding mode "appended".
.br
Emulation command -as "mkisofs" and command -jigdo cause padding to be
written as part of the image.
The same effect is achieved by -padding mode "included".
.TP
.B El Torito bootable ISO images:
.B Bootable ISO images:
.PP
Contrary to published specifications many BIOSes will load an El Torito
record from the first session on media and not from the last one, which
@ -2238,6 +2372,15 @@ it is advised to patch it
when a follow-up session gets written. But one should not rely on the
capability to influence the bootability of the existing sessions, unless one
can assume overwriteable media.
.br
There are booting mechanisms which do not use an El Torito record but rather
start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices,
MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation,
SUN Disk Label for SPARC machines.
.br
The boot firmware EFI may use programs which are located in a FAT filesystem
and announced by an MBR partition table entry.
.br
.TP
\fB\-boot_image\fR "any"|"isolinux"|"grub"
.br
@ -2403,12 +2546,191 @@ absolute start as well as from the partition start.
The offset value of an ISO image gets preserved when a new session is added.
So the value defined here is only in effect if a new ISO image gets written.
.br
\fBpartition_sec_hd=\fRnumber gives the number of sectors per head for
partition offset. 0 chooses a default value.
.br
\fBpartition_hd_cyl=\fRnumber gives the number of heads per cylinder for
partition offset. 0 chooses a default value.
the partition table. 0 chooses a default value. Maximum is 255.
.br
\fBpartition_sec_hd=\fRnumber gives the number of sectors per head for
the partition table. 0 chooses a default value. Maximum is 63.
.br
The product partition_sec_hd * partition_hd_cyl * 512 is the cylinder size.
It should be divisible by 2048 in order to allow exact alignment.
If it is too small to describe the image size by at most 1024 cylinders,
then appropriate values of partition_hd_cyl are chosen with
partition_sec_hd 32 or 63. If the image is larger than 8,422,686,720 bytes,
then the cylinder size constraints cannot be fulfilled.
.br
\fBpartition_cyl_align=\fRmode controls image size alignment to an integer
number of cylinders. It is prescribed by isohybrid specs and it seems to
please program fdisk. Cylinder size must be divisible by 2048.
Images larger than 8,323,596,288 bytes cannot be aligned.
.br
Mode "auto" is default. Alignment by padding happens only with
"isolinux" "partition_table=on".
.br
Mode "on" causes alignment by padding with "partition_table=on" for any type.
Mode "off" disables alignment for any type.
.br
\fBmips_path=\fRiso_rr_path declares a data file in the image to be a
MIPS Big Endian boot file and causes production of a MIPS Big Endian Volume
Header. This is mutually exclusive with production of other boot blocks
like MBR.
It will overwrite the first 512 bytes of any data eventually provided by
system_area=.
Up to 15 boot files can be declared by mips_path=.
.br
\fBmipsel_path=\fRiso_rr_path declares a data file in the image to be the
MIPS Little Endian boot file. This is mutually exclusive with other boot
blocks.
It will overwrite the first 512 bytes of any data eventually
provided by system_area=.
Only a single boot file can be declared by mipsel_path=.
.br
\fBsparc_label=\fRtext causes the production of a SUN Disk Label with the
given text as ASCII label. This boot block format allows to append images
for partitions 2 to 8. Partition 1 will always be the ISO image.
See option -append_partition.
The first 512 bytes of any data eventually provided
by system_area= will be overwritten.
.br
\fBmips_discard\fR and \fBsparc_discard\fR revoke any boot file
declarations made by mips_path= or mipsel_path=. They also disable production
of SUN Disk Label.
This removes the ban on production of other boot blocks.
.br
.br
.TP
\fB\-append_partition\fR partition_number type_code disk_path
Cause a prepared filesystem image to be appended to the ISO image and to be
described by a partition table entry in a boot block at the start of the
emerging ISO image. The partition entry will bear the size of the submitted
file rounded up to the next multiple of 2048 bytes.
.br
Beware of subsequent multi-session runs. The appended partition will get
overwritten.
.br
Partitions may be appended with boot block type MBR and with SUN Disk Label.
.br
With MBR:
.br
partition_number may be 1 to 4. Number 1 will put the whole ISO image into
the unclaimed space before partition 1. So together with most xorriso MBR
features, number 2 would be the most natural choice.
.br
The type_code may be "FAT12", "FAT16", "Linux",
or a hexadecimal number between 0x00 and 0xff. Not all those numbers will
yield usable results. For a list of codes search the Internet for
"Partition Types" or run fdisk command "L".
.br
The disk_path must provide the necessary data bytes at commit time.
An empty disk_path disables this feature for the given partition number.
.br
With SUN Disk Label (selected by -boot_image any sparc_label=):
.br
partition_number may be 2 to 8. Number 1 will always be the ISO image.
Partition start addresses are aligned to 320 KiB. The type_code does not
matter. Submit 0x0.
.br
Partition image name "." causes the partition to become a copy of the next
lower valid one.
.TP
.B Jigdo Template Extraction:
.PP
From man genisoimage:
"Jigdo is a tool to help in the distribution of large files like CD and
DVD images; see http://atterer.net/jigdo/ for more details. Debian CDs
and DVD ISO images are published on the web in jigdo format to allow
end users to download them more efficiently."
.br
xorriso can produce a .jigdo and a .template file together with a
single-session ISO image.
The .jigdo file contains checksums and symbolic file addresses.
The .template file contains the compressed ISO image with reference tags
instead of the content bytes of the listed files.
.br
Input for this process are the normal arguments for a xorriso session
on a blank -outdev, and a .md5 file which lists those data files which may be
listed in the .jigdo file and externally referenced in the .template file.
Each designated file is represented in the .md5 file by a single text line:
.br
MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks,
symbolic file address
.br
The file address in an .md5 line has to bear the same basename as the
disk_path of the file which it shall match. The directory path of
the file address is decisive for To=From mapping, not for file recognition.
After eventual To=From mapping, the file address gets written into the .jigdo
file. Jigdo restore tools will convert these addresses into really
reachable data source addresses from which they can read.
.br
If the list of jigdo parameters is not empty, then xorriso will refuse to
write to non-blank targets, it will disable multi-session emulation, and
eventual padding will be counted as part of the ISO image.
.br
.TP
\fB\-jigdo\fR parameter_name value
Clear Jigdo Template Extraction parameter list or add a parameter to that list.
The alias names are the corresponding genisoimage options. They are accepted
as parameter names as well. Especially they are recognized by the -as mkisofs
emulation command.
.br
Parameter \fBclear\fR with any value empties the whole list.
No .jigdo and .template file will be produced.
.br
\fBtemplate_path\fR sets the disk_path for the .template file with the
holed and compressed ISO image copy.
.br
Alias: -jigdo-template
.br
\fBjigdo_path\fR sets the disk_path for the .jigdo file with the checksums
and download addresses for filling the holes in .template.
.br
Alias: -jigdo-jigdo
.br
\fBmd5_path\fR sets the disk_path where to find the .md5 input file.
.br
Alias: -md5-list
.br
\fBmin_size\fR sets the minimum size for a data file to be listed
in the .jigdo file and being a hole in the .template file.
.br
Alias: -jigdo-min-file-size
.br
\fBexclude\fR adds a regular expression pattern which will get compared
with the absolute disk_path of any data file. A match causes the file to
stay in .template in any case.
.br
Alias: -jigdo-exclude
.br
\fBdemand_md5\fR adds a regular expression pattern which will get compared
with the absolute disk_path of any data file that was not found in the .md5
list. A match causes a MISHAP event.
.br
Alias: -jigdo-force-md5
.br
\fBmapping\fR adds a string pair of the form To=From to the parameter list.
If a data file gets listed in the .jigdo file, then it is referred by the
file address from its line in the .md5 file. This file address gets checked
whether it begins with the From string. If so, then this string will be
replaced by the To string and a ':' character, before it goes into the .jigdo
file. The From string should end by a '/' character.
.br
Alias: -jigdo-map
.br
\fBcompression\fR chooses one of "bzip2" or "gzip" for the compression of
the template file. The jigdo file is put out uncompressed.
.br
Alias: -jigdo-template-compress
.br
\fBchecksum_iso\fR chooses one or more of "md5", "sha1", "sha256", "sha512"
for the auxiliary "# Image Hex" checksums in the jigdo file. The value may e.g.
look like "md5,sha1,sha512". Value "all" chooses all available algorithms.
Note that MD5 stays always enabled.
.br
Alias: -checksum_algorithm_iso
.br
\fBchecksum_template\fR is like checksum_iso but for "# Template Hex".
.br
Alias: -checksum_algorithm_template
.TP
.B Character sets:
.PP
@ -2561,9 +2883,9 @@ if the threshold of option -abort_on allows this.
.br
"failure" aborts image tree reading on first event of at least SORRY.
It issues an own FAILURE event.
This is the default.
.br
"fatal" acts like "failure" but issues the own event as FATAL.
This is the default.
.br
With occasion "file_extraction" there are three behaviors:
.br
@ -2580,6 +2902,10 @@ file content stems from the loaded ISO image and is not filtered.
Enable or disable to enter dialog mode after all arguments are processed.
In dialog mode input lines get prompted via readline or from stdin.
.br
If no -abort_on severity was set when dialog starts, then "NEVER" is set
to avoid abort in most cases of wrong input or other problems. Before dialog
begins, the default is "FAILURE" which e.g. aborts on unknown commands.
.br
Mode "on" supports input of newline characters within quotation marks and
line continuation by trailing backslash outside quotation marks.
Mode "single_line" does not.
@ -2716,6 +3042,9 @@ session number, resp. volume id of the depicted session.
Print the foreseeable consumption of 2048 byte blocks
by next -commit. This can last a while as a -commit gets
prepared and only in last moment is revoked by this option.
The result depends on several settings and also on the kind of output device.
If no -jidgo options are given and not command -as "mkisofs" was used,
then -padding (300 kB by default) is not counted as part of the image size.
.TP
\fB\-tell_media_space\fR
Print available space on output media and the free space after
@ -2846,7 +3175,7 @@ given as start address for -findx.
actions it will always perform action "echo".
.br
\fBin_iso\fR
reports the path if its counterpart exist in the ISO image.
reports the path if its counterpart exists in the ISO image.
For this the disk_path of the -findx command gets replaced
by the iso_rr_path given as parameter.
.br
@ -2859,7 +3188,7 @@ not exist in the ISO image. The report format is the same as with command
.br
\fBadd_missing\fR iso_rr_path_start
adds the counterpart if it does not yet
exist in the ISO image.
exist in the ISO image and marks it for "rm_merge" as non-removable.
.br
E.g.: -findx /home/thomas -exec add_missing /thomas_on_cd --
.br
@ -2870,6 +3199,12 @@ contains files. To be used with -type "m" to report mount points.
\fBempty_iso_dir\fR
deletes all files from the counterpart
in the ISO image. To be used with -type "m" to truncate mount points.
.br
\fBestimate_size\fR
prints a lower and an upper estimation of the number of blocks which the
found files together will occupy in the emerging ISO image.
This does not account for the superblock,
for the directories in the -findx path, or for image padding.
.TP
\fB\-compare\fR disk_path iso_rr_path
Compare attributes and eventual data file content of a fileobject in the
@ -2981,6 +3316,8 @@ Non-default options are:
\fBreport="files"\fR
lists the files which use damaged blocks (not with use=outdev).
The format is like with find -exec report_damage.
Note that a MD5 session mismatch marks all files of the session as damaged.
If finer distinction is desired, perform -md5 off before -check_media.
.br
\fBreport="blocks_files"\fR
first lists damaged blocks and then affected files.
@ -3252,10 +3589,9 @@ file paths and pathspecs.
A lot of options are not supported and lead to failure of the mkisofs
emulation. Some are ignored, but better do not rely on this tolerance.
.br
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
are interpreted differently than with xorriso option -add. Directories get
merged with the root directory of the ISO image, other filetypes get mapped
into that root directory.
The supported options are documented in detail in xorrisofs.info
and in man xorrisofs. The description here is focused on the effect
of mkisofs emulation in the context of a xorriso run.
.br
Other than with the "cdrecord" personality there is no automatic -commit at
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
@ -3263,6 +3599,11 @@ the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
-pacifier gets set to "mkisofs" if files are added to the image.
.br
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
are interpreted differently than with xorriso option -add. Directories get
merged with the root directory of the ISO image, other filetypes get mapped
into that root directory.
.br
If pathspecs are given and if no output file was chosen before or during the
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
If -o points to a regular file, then it will be truncated to 0 bytes
@ -3274,6 +3615,25 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
arguments or if other start arguments pointed the output drive to
standard output.
.br
-print-size inhibits automatic image production at program end. This ban is
lifted only if the pending image changes get discarded.
.br
Eventual padding is counted as part of the ISO image if not option --emul-toc
is given.
.br
If no -iso-level is given, then level 1 is chosen when the first file or
directory is added to the image. At the same occasion directory names get
allowed to violate the standard by -compliance option allow_dir_id_ext.
This may be avoided by option -disallow_dir_id_ext.
.br
Option -root is supported. Option -old-root is implemented by xorriso
commands -mkdir, -cp_clone, -find update_merge, and -find rm_merge.
-root and -old-root set command -disk_dev_ino to "ino_only" and -md5 to "on",
by default.
-disk_dev_ino can be set to "off" by --old-root-no-ino
resp. to "on" by --old-root-devno .
-md5 can be set to "off" by --old-root-no-md5 .
.br
Not original mkisofs options are --quoted_path_list ,
--hardlinks , --acl ,
--xattr , --md5 , --stdio_sync .
@ -3281,7 +3641,10 @@ They work like the xorriso options with the
same name and hardcoded argument "on", e.g. -acl "on".
Explicit arguments are expected by --stdio_sync
and --scdbackup_tag.
--no-emul-toc is -compliance no_emul_toc.
.br
The capability to preserve multi-session history on overwriteable media
gets disabled by default. It can be enabled by using --emul-toc
with the first session. See -compliance no_emul_toc.
.br
--sort-weight gets as arguments a number and an iso_rr_path.
The number becomes the LBA sorting weight of regular file iso_rr_path or
@ -3304,10 +3667,26 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on.
.br
--boot-catalog-hide is -boot_image any cat_hidden=on.
.br
-mips-boot is the same as -boot_image any mips_path= .
.br
-mipsel-boot leads to mipsel_path= .
.br
-partition_offset number is
-boot_image any partition_offset=number.
.br
Personalites "\fBxorrisofs\fR", "\fBgenisoimage\fR",
Option -append_partition is supported.
.br
-untranslated_name_len number is
-compliance untranslated_name_len=number.
.br
--old-empty is -compliance old_empty.
.br
The options of genisoimage Jigdo Template Extraction are recognized and
performed via xorriso option -jigdo. See the "Alias:" names there for the
meaning of the genisoimage options.
.br
Personalities "\fBxorrisofs\fR", "\fBgenisoimage\fR",
and "\fBgenisofs\fR" are aliases for "mkisofs".
.br
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
@ -3317,6 +3696,9 @@ I.e. all arguments will be interpreted mkisofs style until "--"
is encountered.
From then on, options are interpreted as xorriso options.
.br
--no_rc as first argument of such a program start
prevents interpretation of startup files. See section FILES below.
.br
Personality "\fBcdrecord\fR" accepts the options listed with:
.br
@ -3359,6 +3741,9 @@ If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
to the command line arguments. I.e. all arguments will be interpreted cdrecord
style until "--" is encountered and an eventual commit happens.
From then on, options are interpreted as xorriso options.
.br
--no_rc as first argument of such a program start
prevents interpretation of xorriso startup files. See section FILES below.
.TP
\fB\-read_mkisofsrc\fR
Try one by one to open for reading:
@ -3411,7 +3796,12 @@ prevents reading and interpretation of eventual startup
files. See section FILES below.
.TP
\fB\-options_from_file\fR fileaddress
Read quoted input from fileaddress and executes it like dialog lines.
Read quoted input from fileaddress and execute it like dialog lines.
Empty lines and lines which begin by # are ignored. Normally one line
should hold one xorriso command and all its arguments. Nevertheless lines
may be concatenated by a trailing backslash.
.br
See also section "Command processing", paragraph "Quoted input".
.TP
\fB\-help\fR
.br
@ -3494,7 +3884,14 @@ restoring of hard links.
Default is 16m = 16 MiB, minimum 64k = 64 kiB, maximum 1024m = 1 GiB.
.TP
\fB\-print\fR text
Print a text to result channel.
Print a text line to the result channel which is by default stdout.
.TP
\fB\-print_info\fR text
Print a text line to the info channel which is by default stderr.
.TP
\fB\-print_mark\fR text
Print a text line to the mark channel which is by default directed to both,
result and info channel. An empty text will cause no output at all.
.TP
\fB\-prompt\fR text
Show text at beginning of output line and
@ -3566,8 +3963,8 @@ line by a channel indicator:
.br
Next is a decimal number of which only bit 0 has a meaning for now.
0 means no newline at end of payload, 1 means that the newline character at
the end of the output line belongs to the payload. After another colon follows
the payload text.
the end of the output line belongs to the payload. After another colon and
a blank follows the payload text.
.br
Example:
.br
@ -3578,8 +3975,9 @@ Copy output of a channel to the given file. Channel may be one of: "." for all
channels, "I" for info messages, "R" for result lines, "M" for -mark texts.
.TP
\fB\-mark\fR text
If text is not empty it will get put out on "M" channel each time after a
dialog line has been processed.
If text is not empty it will get put out on "M" channel each time xorriso
is ready for the next dialog line or before xorriso performs a command that
was entered to the pager prompt.
.TP
\fB\-prog\fR text
Use text as name of this program in subsequent messages
@ -3858,6 +4256,8 @@ $ xorriso -as mkisofs prepared_for_iso/tree1 | \\
.br
Follow-up sessions are written like this:
.br
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
.br
$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
.br
$ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
@ -3865,8 +4265,13 @@ $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject -
.br
Always eject the drive tray between sessions. The old sessions
get read via stdio:/dev/sr0 and thus are prone to device driver
peculiarities.
get read via /dev/sr0. Its device driver might not be aware
of the changed content before it loads the media again.
In this case the previous session would not be loaded and the
new session would contain only the newly added files.
.br
For the same reason do not let xorriso -as cdrecord load the media,
but rather do this manually or by a program that reads from /dev/sr0.
.br
This example works for multi-session media only.
Add cdrskin option --grow_overwriteable_iso
@ -3960,6 +4365,8 @@ Files with names matching *.o or *.swp get excluded explicitly.
When done with writing the new session gets checked by its recorded MD5.
.br
$ xorriso \\
.br
-abort_on FATAL \\
.br
-for_backup -disk_dev_ino on \\
.br
@ -3971,7 +4378,7 @@ $ xorriso \\
.br
-not_leaf '*.o' -not_leaf '*.swp' \\
.br
-update_r /home/thomas/open_source_projects /open_source_projects \\
-update_r /home/thomas/projects /projects \\
.br
-update_r /home/thomas/personal_mail /personal_mail \\
.br
@ -4014,12 +4421,27 @@ older sessions in the table-of-content. E.g. as superuser:
.br
# osirrox -mount /dev/sr0 "volid" '*2008_12_05*' /mnt
.br
.sp 1
Above example produces a result similar to -root / -old-root / with mkisofs.
For getting the session trees accumulated in the new sessions, let all -update
commands use a common parent directory and clone it after updating is done:
.br
-update_r /home/thomas/projects /current/projects \\
.br
-update_r /home/thomas/personal_mail /current/personal_mail \\
.br
-clone /current /"$(date '+%Y_%m_%d_%H%M%S')" \\
.br
The cloned tree will have a name like /2011_02_12_155700.
.br
.sp 1
Sessions on multi-session media are separated by several MB of unused blocks.
So with small sessions the payload capacity can become substantially lower
than the overall media capacity. If the remaining space on media does not
suffice for the next gap, the drive is supposed to close the media
automatically.
.br
.sp 1
\fBBetter do not use your youngest backup for -update_r\fR.
Have at least two media which you use alternatingly. So only older backups
get endangered by the new write operation, while the newest backup is
@ -4100,7 +4522,7 @@ to read and execute lines from the following files:
$HOME/.xorrisorc
.br
The files are read in the sequence given above, but none of them is required
to exist.
to exist. The line format is described with command -options_from_file.
.br
If mkisofs emulation was enabled by program name "xorrisofs", "mkisofs",
"genisoimage", or "genisofs", then afterwards -read_mkisofsrc is performed,
@ -4114,6 +4536,9 @@ The default setting of -check_media abort_file= is:
.br
.SH SEE ALSO
.TP
For the mkisofs emulation of xorriso
.BR xorrisofs(1)
.TP
For mounting xorriso generated ISO 9660 images (-t iso9660)
.BR mount(8)
.TP
@ -4143,7 +4568,7 @@ Thomas Schmitt <scdbackup@gmx.net>
.br
for libburnia-project.org
.SH COPYRIGHT
Copyright (c) 2007 - 2010 Thomas Schmitt
Copyright (c) 2007 - 2011 Thomas Schmitt
.br
Permission is granted to distribute this text freely. It shall only be
modified in sync with the technical properties of xorriso. If you make use

View File

@ -2,7 +2,7 @@
/* xorriso - libisoburn higher level API which creates, loads, manipulates
and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -59,9 +59,9 @@ struct XorrisO;
at build time.
@since 0.5.8
*/
#define Xorriso_header_version_majoR 0
#define Xorriso_header_version_minoR 6
#define Xorriso_header_version_micrO 2
#define Xorriso_header_version_majoR 1
#define Xorriso_header_version_minoR 0
#define Xorriso_header_version_micrO 8
/** Eventually something like ".pl01" to indicate a bug fix. Normally empty.
@ -197,7 +197,9 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
/* Inquire whether option -commit would make sense.
@param xorriso The context object to inquire.
@param flag unused yet, submit 0
@param flag @since 0.6.6
bit0= do not return 1 if -as mkisofs -print-size was
performed on the current image.
@return 0= -commit would have nothing to do
1= a new image session would emerge at -commit
*/
@ -562,15 +564,21 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
Xorriso_eval_problem_status()
One should follow its eventual advice to abort.
Options with a varying number of arguments get them passed like
Options with a varying number of arguments get then passed like
Xorriso_interpreter(). E.g.:
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
They begin to read the arguments at position *idx and will see the list
end either at the next argv which contains the -list_delimiter text or
at argv[argc-1]. After the call, *idx will be the index of the first not
yet interpreted argv.
The option functions will begin to read the arguments at position *idx
and will see the list end either at the next argv which contains the
-list_delimiter text or at argv[argc-1].
After the call, *idx will be the index of the first not yet interpreted
argv.
Do not set any flag bits which are not described by "@param flag".
I.e. if flag is not mentioned, then submit 0.
Yet undefined flag bits might get a meaning in future. Unset bits will
then produce the traditional behavior, whereas set bits might bring
surprises to inadverted callers.
*/
@ -578,6 +586,7 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
/* Option -abstract_file */
/* @since 0.6.0 */
int Xorriso_option_abstract_file(struct XorrisO *xorriso, char *name,
int flag);
@ -603,6 +612,11 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
char *time_type, char *timestring,
int argc, char **argv, int *idx, int flag);
/* Option -append_partition */
/* @since 0.6.4 */
int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text,
char *type_text, char *image_path, int flag);
/* Option -application_id */
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
int flag);
@ -629,6 +643,7 @@ int Xorriso_option_backslash_codes(struct XorrisO *xorriso, char *mode,
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
/* Option -biblio_file */
/* @since 0.6.0 */
int Xorriso_option_biblio_file(struct XorrisO *xorriso, char *name, int flag);
/* Option -blank and -format */
@ -691,6 +706,11 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
int Xorriso_option_chowni(struct XorrisO *xorriso, char *uid,
int argc, char **argv, int *idx, int flag);
/* Option -clone */
/* @since 1.0.2 */
int Xorriso_option_clone(struct XorrisO *xorriso, char *origin, char *dest,
int flag);
/* Option -close "on"|"off" */
int Xorriso_option_close(struct XorrisO *xorriso, char *mode, int flag);
@ -723,9 +743,15 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
int Xorriso_option_compliance(struct XorrisO *xorriso, char *mode, int flag);
/* Option -copyright_file */
/* @since 0.6.0 */
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name,
int flag);
/* Option -cp_clone */
/* @since 1.0.2 */
int Xorriso_option_cp_clone(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -cpr alias -cpri */
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
@ -761,6 +787,11 @@ int Xorriso_option_disk_dev_ino(struct XorrisO *xorriso, char *mode, int flag);
/* Option -disk_pattern "on"|"ls"|"off" */
int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag);
/* Option -displacement [-]offset */
/* @since 0.6.6 */
int Xorriso_option_displacement(struct XorrisO *xorriso, char *value,
int flag);
/* Option -drive_class */
int Xorriso_option_drive_class(struct XorrisO *xorriso,
char *d_class, char *pattern, int flag);
@ -771,6 +802,11 @@ int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
/* Option -dvd_obs "default"|"32k"|"64k" */
int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag);
/* Option -early_stdio_test */
/* @since 1.0.6 */
int Xorriso_option_early_stdio_test(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -eject */
/* @param flag bit0=do not report toc of eventually remaining drives
*/
@ -844,6 +880,7 @@ int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
/* Option -hide */
/* @since 0.6.0 */
int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state,
int argc, char **argv, int *idx, int flag);
@ -854,6 +891,11 @@ int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -jigdo aspect argument */
/* @since 0.6.4 */
int Xorriso_option_jigdo(struct XorrisO *xorriso, char *aspect, char *arg,
int flag);
/* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
@ -1003,9 +1045,15 @@ int Xorriso_option_pathspecs(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
/* Option -preparer_id */
/* @since 0.6.2 */
int Xorriso_option_preparer_id(struct XorrisO *xorriso, char *name, int flag);
/* Option -print */
/* Options -print, -print_info , -print_mark */
/* @param flag bit0-1= output channel:
0= result channel
1= info channel @since 1.0.6
2= mark channel @since 1.0.6
*/
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
/* Option -print_size
@ -1035,6 +1083,7 @@ int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
/* Option -read_mkisofsrc */
/* @since 0.6.0 */
int Xorriso_option_read_mkisofsrc(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */

File diff suppressed because it is too large Load Diff

View File

@ -44,7 +44,7 @@
@c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRISO 1 "Sep 10, 2010"
@c man .TH XORRISO 1 "Apr 03, 2011"
@c man .\" Please adjust this date whenever revising the manpage.
@c man .\"
@c man .\" Some roff macros, for reference:
@ -504,9 +504,8 @@ characters. Rock Ridge fulfills this demand.
@sp 1
@cindex El Torito, _definiton
An @strong{El Torito}
boot record connects one or more boot images, which are binary program files
stored in the ISO image, with the bootstrapping facility of
contemporary computers.
boot record points the BIOS bootstrapping facility to one or more boot
images, which are binary program files stored in the ISO image.
The content of the boot image files is not in the scope of El Torito.
@*
Most bootable GNU/Linux CDs are equipped with ISOLINUX or GRUB boot images.
@ -526,7 +525,8 @@ Emulation -as mkisofs supports the example options out of the ISOLINUX wiki,
the options used in GRUB script grub-mkrescue, and the example in the
FreeBSD AvgLiveCD wiki.
@*
The support for other boot image types is sparse.
There is support for boot facilities other than PC BIOS:
EFI, MIPS Big Endian (SGI), MIPS Little Endian (DEC), SUN SPARC.
@*
@c man .PP
@sp 1
@ -714,7 +714,8 @@ inner dashes are interpreted as underscores.
* Filter:: Filters for data file content
* Writing:: Writing the result, drive control
* SetWrite:: Settings for result writing
* Bootable:: El Torito bootable ISO images
* Bootable:: Bootable ISO images
* Jigdo:: Jigdo Template Extraction
* Charset:: Character sets
* Exception:: Exception processing
* DialogCtl:: Dialog mode control
@ -836,6 +837,28 @@ until the next -dev or -indev. After the image has been loaded once, the
setting is valid for -rollback until next -dev or -indev, where it
will be reset to "auto".
@c man .TP
@item -displacement [-]lba
@kindex -displacement compensate altered image start address
@cindex Session, altered start address, -displacement
Compensate an eventual displacement of the image versus the start address
for which the image was prepared. This affects only loading of ISO images
and reading of their files. The multi-session method of growing is not allowed
as long as -displacement is non-zero. I.e. -indev and -outdev must be
different. Eventually the displacement is reset to 0 before the drive
gets re-aquired after writing.
@*
Examples:
@*
If a track of a CD starts at block 123456 and gets copied to a disk file
where it begins at block 0, then this copy can be loaded with
-displacement -123456.
@*
If an ISO image was written onto a partition with offset of 640000 blocks of
512 bytes, then it can be loaded from the base device by -displacement 160000.
@*
In both cases, the ISO sessions should be self contained, i.e. not add-on
sessions to an ISO image outside their track resp. partition.
@c man .TP
@item -drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern
@kindex -drive_class controls drive accessability
@cindex Drive, accessability, -drive_class
@ -942,11 +965,6 @@ are both in effect. This restricts hard linking to other files restored by
the same single extract command. -hardlinks "normal_extract" re-enables
wide and expensive hardlink accumulation.
@*
@c B00613 : disabled because implemented faulty from beginning:
@c Hardlink processing automatically enables @strong{-compliance new_rr}.
@c This may be overridden by a following -compliance old_rr . In this case
@c the resulting image will violate the RRIP-1.10 specs for entry PX in
@c the same way as mkisofs does.
@c man .TP
@item -acl "on"|"off"
@kindex -acl controls handling of ACLs
@ -965,7 +983,7 @@ Enable or disable processing of xattr attributes in user namespace.
If enabled, then xorriso will handle xattr similar to ACL.
See also options -getfattr, -setfattr and above paragraph about xattr.
@c man .TP
@item -md5 "on"|"all"|"off"
@item -md5 "on"|"all"|"off"|"load_check_off"
@kindex -md5 controls handling of MD5 sums
@cindex MD5, control handling, -md5
Enable or disable processing of MD5 checksums for the overall session and for
@ -988,6 +1006,15 @@ Mode "all" will additionally check during image generation whether the checksum
of a data file changed between the time when its reading began and the time
when it ended. This implies reading every file twice.
@*
Mode "load_check_off" together with "on" or "all" will load recorded MD5 sums
but not test the recorded checksum tags of superblock and directory tree.
This is necessary if growisofs was used as burn program, because it does
not overwrite the superblock checksum tag of the first session.
Therefore load_check_off is in effect when xorriso -as mkisofs option -M
is performed.
@*
The test can be re-enabled by mode "load_check_on".
@*
Checksums can be exploited via options -check_md5, -check_md5_r, via find
actions get_md5, check_md5, and via -check_media.
@c man .TP
@ -1069,6 +1096,21 @@ Mode "on" causes -calm_drive to be performed automatically after each -dev,
Allow for writing only the usage of MMC optical drives. Disallow
to write the result into files of nearly arbitrary type.
Once set, this command cannot be revoked.
@c man .TP
@item -early_stdio_test "on"|"appendable_wo"|"off"
@kindex -early_stdio_test classifies stdio drives
@cindex Drive, classify stdio, -early_stdio_test
If enabled by "on" then regular files and block devices get tested for
effective access permissions. This implies to try opening those files for
writing, which otherwise will happen only later and only if actual
writing is desired.
@*
The test result is used for classifying the pseudo drives as overwriteable,
read-only, write-only, or uselessly empty. This may lead to earlier detection
of severe problems, and may avoid some less severe error events.
@*
Mode "appendable_wo" is like "on" with the additional property that
non-empty write-only files are regarded as appendable rather than blank.
@end table
@c man .TP
@c man .B Inserting files into ISO image:
@ -1294,6 +1336,35 @@ If the iso_rr_path does not begin with '/' then -cd is prepended.
Create empty directories if they do not exist yet.
Existence as directory generates a WARNING event, existence as
other file causes a FAILURE event.
@c man .TP
@item -clone iso_rr_path_original iso_rr_path_copy
@kindex -clone copies ISO directory tree
@cindex Directory, copy, -clone
Create a copy of the ISO file object iso_rr_path_original with the new
address iso_rr_path_copy. If the original is a directory then copy all
files and directories underneath. An eventual boot catalog file gets
not copied but is silently ignored.
@*
The copied ISO file objects have the same attributes. Copied data files
refer to the same content source as their originals.
The copies may then be manipulated independendly of their originals.
@*
This command will refuse execution if the address iso_rr_path_copy
already exists in the ISO tree.
@c man .TP
@item -cp_clone iso_rr_path_original [***] iso_rr_path_dest
@kindex -cp_clone copies ISO directory tree
@cindex Directories, copy, -cp_clone
Create copies of one or more ISO file objects as with command -clone.
Eventually merge directories with existing ones, but do not overwrite
existing ISO file objects.
@*
The rules for generating the copy addresses are the same as with
command -cpr (see above) resp. shell command cp -r. Other than with -cpr,
relative iso_rr_path_original will get prepended the -cd path and not
the -cdx path. Consider to -mkdir iso_rr_path_dest before -cp_clone
so the copy address does not depend on the number of iso_rr_path_original
arguments.
@end table
@c man .TP
@c man .B Settings for file insertion:
@ -1829,6 +1900,9 @@ Matches files which use data blocks marked as damaged by a previous
run of -check_media. The damage info vanishes when a new ISO image gets
loaded.
@*
Note that a MD5 session mismatch marks all files of the session as damaged.
If finer distinction is desired, perform -md5 off before -check_media.
@*
@item -pending_data :
Matches files which get their content from outside the loaded ISO image.
@*
@ -1965,6 +2039,16 @@ performs command -update with the found file address as
iso_rr_path. The corresponding file address is determined like with above
action "compare".
@*
@item update_merge
is like update but does not delete the found file if it is missing on disk.
It may be run several times and records with all visited files whether their
counterpart on disk has already been seen by one of the update_merge runs.
Finally, a -find run with action "rm_merge" may remove all files that
saw no counterpart on disk.
@*
Up to the next "rm_merge" or "clear_merge" all newly inserted files will
get marked as having a disk counterpart.
@*
@item rm
removes the found iso_rr_path from the image if it is not a directory
with files in it. I.e. this "rm" includes "rmdir".
@ -1973,6 +2057,14 @@ with files in it. I.e. this "rm" includes "rmdir".
removes the found iso_rr_path from the image, including whole
directory trees.
@*
@item rm_merge
removes the found iso_rr_path if it was visited by one or more previous actions
"update_merge" and saw no counterpart on disk in any of them. The marking from
the update actions is removed in any case.
@*
@item clear_merge
removes an eventual marking from action "update_merge".
@*
@item report_damage
classifies files whether they hit a data block that is
marked as damaged. The result is printed together with the eventual address
@ -2058,6 +2150,12 @@ E.g.:
@*
-find / -disk_name *_secret -exec hide on
@*
@item estimate_size
prints a lower and an upper estimation of the number of blocks which the
found files together will occupy in the emerging ISO image.
This does not account for the superblock,
for the directories in the -find path, or for image padding.
@*
@item find
performs another run of -find on the matching file address.
It accepts the same params as -find, except iso_rr_path.
@ -2374,32 +2472,57 @@ can be revoked individually by appending "_off". Like "deep_paths_off".
@*
Rule keywords are:
@*
"omit_version" do not add versions (";1") to ISO and Joliet file names.
"iso_9660_level="number chooses level 1 with ISO names of the form 8.3
and -file_size_limit <= 4g - 1, or level 2 with ISO names up to
length 32 and the same -file_size_limit, or level 3 with ISO names up to
length 32 and -file_size_limit >= 400g -200k. If necessary -file_size_limit
gets adjusted.
@*
"only_iso_version" do not add versions (";1") to Joliet file names.
"allow_dir_id_ext" allows ISO names of directories to have a name extension
as with other file types. It does not force dots and it omits the version
number, though. This is a bad tradition of mkisofs which violates ECMA-119.
Especially ISO level 1 only allows 8 characters in a directory name and
not 8.3.
@*
"deep_paths" allow ISO file paths deeper than 8 levels.
"omit_version" does not add versions (";1") to ISO and Joliet file names.
@*
"long_paths" allow ISO file paths longer than 255 characters.
"only_iso_version" does not add versions (";1") to Joliet file names.
@*
"long_names" allow up to 37 characters with ISO file names.
"deep_paths" allows ISO file paths deeper than 8 levels.
@*
"no_force_dots" do not add a dot to ISO file names which have none.
"long_paths" allows ISO file paths longer than 255 characters.
@*
"no_j_force_dots" do not add a dot to Joliet file names which have none.
"long_names" allows up to 37 characters with ISO file names.
@*
"lowercase" allow lowercase characters in ISO file names.
"no_force_dots" does not add a dot to ISO file names which have none.
@*
"full_ascii" allow all ASCII characters in ISO file names.
"no_j_force_dots" does not add a dot to Joliet file names which have none.
@*
"joliet_long_paths" allow Joliet paths longer than 240 characters.
"lowercase" allows lowercase characters in ISO file names.
@*
"always_gmt" store timestamps in GMT representation with timezone 0.
"full_ascii" allows all ASCII characters in ISO file names.
@*
"rec_mtime" record with ISO files the disk file's mtime and not the
"untranslated_names" might be dangerous for inadverted reader programs
which rely on the restriction to at most 37 characters in ISO file names.
This option allows ISO file names up to 96 characters with no character
conversion. If a file name has more characters, then image production will
fail deliberately.
@*
"untranslated_name_len="number enables untranslated_names with a smaller limit
for the length of file names. 0 disables this feature, -1 chooses maximum
length limit, numbers larger than 0 give the desired length limit.
@*
"joliet_long_names" allows Joliet leaf names up to 103 characters rather
than 64.
@*
"joliet_long_paths" allows Joliet paths longer than 240 characters.
@*
"always_gmt" stores timestamps in GMT representation with timezone 0.
@*
"rec_mtime" records with ISO files the disk file's mtime and not the
creation time of the image.
@*
"new_rr" use Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
"new_rr" uses Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
FreeBSD or for Solaris). This implies "aaip_susp_1_10_off" which may be changed
by subsequent "aaip_susp_1_10".
@*
@ -2412,6 +2535,14 @@ rather than as official extension under SUSP-1.12.
"no_emul_toc" saves 64 kB with the first session on overwriteable media
but makes the image incapable of displaying its session history.
@*
"iso_9660_1999" causes the production of an additional directory tree
compliant to ISO 9660:1999. It can record long filenames for readers which
do not understand Rock Ridge.
@*
"old_empty" uses the old way of of giving block addresses in the range
of [0,31] to files with no own data content. The new way is to have
a dedicated block to which all such files will point.
@*
Default setting is
@*
"clear:only_iso_version:deep_paths:long_paths:no_j_force_dots:
@ -2664,8 +2795,8 @@ any more (if possible at all with the given type of target media).
This is the contrary of cdrecord, wodim, cdrskin option -multi,
and is one aspect of growisofs option -dvd-compat.
@c man .TP
@item -padding number["k"|"m"]
@kindex -padding sets amount of image padding
@item -padding number["k"|"m"]|"included"|"appended"
@kindex -padding sets amount or mode of image padding
@cindex Write, padding image, -padding
Append the given number of extra bytes to the image stream.
This is a traditional remedy for a traditional bug in block
@ -2674,11 +2805,18 @@ Since one can hardly predict on what media an image might end up,
xorriso adds the traditional 300k of padding by default to all images.
@*
For images which will never get to a CD it is safe to use -padding 0 .
@*
Normally padding is not written as part of the ISO image but appended
after the image end. This is -padding mode "appended".
@*
Emulation command -as "mkisofs" and command -jigdo cause padding to be
written as part of the image.
The same effect is achieved by -padding mode "included".
@end table
@c man .TP
@c man .B El Torito bootable ISO images:
@node Bootable, Charset, SetWrite, Options
@section El Torito bootable ISO images
@c man .B Bootable ISO images:
@node Bootable, Jigdo, SetWrite, Options
@section Bootable ISO images
@c man .PP
Contrary to published specifications many BIOSes will load an El Torito
record from the first session on media and not from the last one, which
@ -2695,6 +2833,15 @@ it is advised to patch it
when a follow-up session gets written. But one should not rely on the
capability to influence the bootability of the existing sessions, unless one
can assume overwriteable media.
@*
There are booting mechanisms which do not use an El Torito record but rather
start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices,
MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation,
SUN Disk Label for SPARC machines.
@*
The boot firmware EFI may use programs which are located in a FAT filesystem
and announced by an MBR partition table entry.
@*
@table @asis
@sp 1
@c man .TP
@ -2872,16 +3019,213 @@ absolute start as well as from the partition start.
The offset value of an ISO image gets preserved when a new session is added.
So the value defined here is only in effect if a new ISO image gets written.
@*
@strong{partition_sec_hd=}number gives the number of sectors per head for
partition offset. 0 chooses a default value.
@*
@cindex Cylinder size, _definiton
@strong{partition_hd_cyl=}number gives the number of heads per cylinder for
partition offset. 0 chooses a default value.
the partition table. 0 chooses a default value. Maximum is 255.
@*
@strong{partition_sec_hd=}number gives the number of sectors per head for
the partition table. 0 chooses a default value. Maximum is 63.
@*
The product partition_sec_hd * partition_hd_cyl * 512 is the cylinder size.
It should be divisible by 2048 in order to allow exact alignment.
If it is too small to describe the image size by at most 1024 cylinders,
then appropriate values of partition_hd_cyl are chosen with
partition_sec_hd 32 or 63. If the image is larger than 8,422,686,720 bytes,
then the cylinder size constraints cannot be fulfilled.
@*
@cindex Cylinder alignment, _definiton
@strong{partition_cyl_align=}mode controls image size alignment to an integer
number of cylinders. It is prescribed by isohybrid specs and it seems to
please program fdisk. Cylinder size must be divisible by 2048.
Images larger than 8,323,596,288 bytes cannot be aligned.
@*
Mode "auto" is default. Alignment by padding happens only with
"isolinux" "partition_table=on".
@*
Mode "on" causes alignment by padding with "partition_table=on" for any type.
Mode "off" disables alignment for any type.
@*
@cindex MIPS boot file, activation
@strong{mips_path=}iso_rr_path declares a data file in the image to be a
MIPS Big Endian boot file and causes production of a MIPS Big Endian Volume
Header. This is mutually exclusive with production of other boot blocks
like MBR.
It will overwrite the first 512 bytes of any data eventually provided by
system_area=.
Up to 15 boot files can be declared by mips_path=.
@*
@strong{mipsel_path=}iso_rr_path declares a data file in the image to be the
MIPS Little Endian boot file. This is mutually exclusive with other boot
blocks.
It will overwrite the first 512 bytes of any data eventually
provided by system_area=.
Only a single boot file can be declared by mipsel_path=.
@*
@cindex SUN Disk Label, production
@strong{sparc_label=}text causes the production of a SUN Disk Label with the
given text as ASCII label. This boot block format allows to append images
for partitions 2 to 8. Partition 1 will always be the ISO image.
See option -append_partition.
The first 512 bytes of any data eventually provided
by system_area= will be overwritten.
@*
@strong{mips_discard} and @strong{sparc_discard} revoke any boot file
declarations made by mips_path= or mipsel_path=. They also disable production
of SUN Disk Label.
This removes the ban on production of other boot blocks.
@*
@end table
@*
@table @asis
@sp 1
@c man .TP
@item -append_partition partition_number type_code disk_path
@kindex -append_partition adds arbitrary file after image end
@cindex Appended Filesystem Image, -append_partition
Cause a prepared filesystem image to be appended to the ISO image and to be
described by a partition table entry in a boot block at the start of the
emerging ISO image. The partition entry will bear the size of the submitted
file rounded up to the next multiple of 2048 bytes.
@*
Beware of subsequent multi-session runs. The appended partition will get
overwritten.
@*
Partitions may be appended with boot block type MBR and with SUN Disk Label.
@*
With MBR:
@*
partition_number may be 1 to 4. Number 1 will put the whole ISO image into
the unclaimed space before partition 1. So together with most xorriso MBR
features, number 2 would be the most natural choice.
@*
The type_code may be "FAT12", "FAT16", "Linux",
or a hexadecimal number between 0x00 and 0xff. Not all those numbers will
yield usable results. For a list of codes search the Internet for
"Partition Types" or run fdisk command "L".
@*
The disk_path must provide the necessary data bytes at commit time.
An empty disk_path disables this feature for the given partition number.
@*
@cindex SUN SPARC boot images, activation
With SUN Disk Label (selected by -boot_image any sparc_label=):
@*
partition_number may be 2 to 8. Number 1 will always be the ISO image.
Partition start addresses are aligned to 320 KiB. The type_code does not
matter. Submit 0x0.
@*
Partition image name "." causes the partition to become a copy of the next
lower valid one.
@end table
@c man .TP
@c man .B Jigdo Template Extraction:
@node Jigdo, Charset, Bootable, Options
@section Jigdo Template Extraction
@c man .PP
@cindex Jigdo Template Extraction, _definition
From man genisoimage:
"Jigdo is a tool to help in the distribution of large files like CD and
DVD images; see http://atterer.net/jigdo/ for more details. Debian CDs
and DVD ISO images are published on the web in jigdo format to allow
end users to download them more efficiently."
@*
xorriso can produce a .jigdo and a .template file together with a
single-session ISO image.
The .jigdo file contains checksums and symbolic file addresses.
The .template file contains the compressed ISO image with reference tags
instead of the content bytes of the listed files.
@*
Input for this process are the normal arguments for a xorriso session
on a blank -outdev, and a .md5 file which lists those data files which may be
listed in the .jigdo file and externally referenced in the .template file.
Each designated file is represented in the .md5 file by a single text line:
@*
MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks,
symbolic file address
@*
The file address in an .md5 line has to bear the same basename as the
disk_path of the file which it shall match. The directory path of
the file address is decisive for To=From mapping, not for file recognition.
After eventual To=From mapping, the file address gets written into the .jigdo
file. Jigdo restore tools will convert these addresses into really
reachable data source addresses from which they can read.
@*
If the list of jigdo parameters is not empty, then xorriso will refuse to
write to non-blank targets, it will disable multi-session emulation, and
eventual padding will be counted as part of the ISO image.
@*
@table @asis
@sp 1
@c man .TP
@item -jigdo parameter_name value
@kindex -jigdo clears JTE or or adds parameter to JTE
@cindex Jigdo Template Extraction, -jigdo
Clear Jigdo Template Extraction parameter list or add a parameter to that list.
The alias names are the corresponding genisoimage options. They are accepted
as parameter names as well. Especially they are recognized by the -as mkisofs
emulation command.
@*
Parameter @strong{clear} with any value empties the whole list.
No .jigdo and .template file will be produced.
@*
@strong{template_path} sets the disk_path for the .template file with the
holed and compressed ISO image copy.
@*
Alias: -jigdo-template
@*
@strong{jigdo_path} sets the disk_path for the .jigdo file with the checksums
and download addresses for filling the holes in .template.
@*
Alias: -jigdo-jigdo
@*
@strong{md5_path} sets the disk_path where to find the .md5 input file.
@*
Alias: -md5-list
@*
@strong{min_size} sets the minimum size for a data file to be listed
in the .jigdo file and being a hole in the .template file.
@*
Alias: -jigdo-min-file-size
@*
@strong{exclude} adds a regular expression pattern which will get compared
with the absolute disk_path of any data file. A match causes the file to
stay in .template in any case.
@*
Alias: -jigdo-exclude
@*
@strong{demand_md5} adds a regular expression pattern which will get compared
with the absolute disk_path of any data file that was not found in the .md5
list. A match causes a MISHAP event.
@*
Alias: -jigdo-force-md5
@*
@strong{mapping} adds a string pair of the form To=From to the parameter list.
If a data file gets listed in the .jigdo file, then it is referred by the
file address from its line in the .md5 file. This file address gets checked
whether it begins with the From string. If so, then this string will be
replaced by the To string and a ':' character, before it goes into the .jigdo
file. The From string should end by a '/' character.
@*
Alias: -jigdo-map
@*
@strong{compression} chooses one of "bzip2" or "gzip" for the compression of
the template file. The jigdo file is put out uncompressed.
@*
Alias: -jigdo-template-compress
@*
@strong{checksum_iso} chooses one or more of "md5", "sha1", "sha256", "sha512"
for the auxiliary "# Image Hex" checksums in the jigdo file. The value may e.g.
look like "md5,sha1,sha512". Value "all" chooses all available algorithms.
Note that MD5 stays always enabled.
@*
Alias: -checksum_algorithm_iso
@*
@strong{checksum_template} is like checksum_iso but for "# Template Hex".
@*
Alias: -checksum_algorithm_template
@end table
@c man .TP
@c man .B Character sets:
@node Charset, Exception, Bootable, Options
@node Charset, Exception, Jigdo, Options
@section Character sets
@c man .PP
@cindex Character Set, _definition
@ -3053,9 +3397,9 @@ if the threshold of option -abort_on allows this.
@*
"failure" aborts image tree reading on first event of at least SORRY.
It issues an own FAILURE event.
This is the default.
@*
"fatal" acts like "failure" but issues the own event as FATAL.
This is the default.
@*
With occasion "file_extraction" there are three behaviors:
@*
@ -3078,6 +3422,10 @@ file content stems from the loaded ISO image and is not filtered.
Enable or disable to enter dialog mode after all arguments are processed.
In dialog mode input lines get prompted via readline or from stdin.
@*
If no -abort_on severity was set when dialog starts, then "NEVER" is set
to avoid abort in most cases of wrong input or other problems. Before dialog
begins, the default is "FAILURE" which e.g. aborts on unknown commands.
@*
Mode "on" supports input of newline characters within quotation marks and
line continuation by trailing backslash outside quotation marks.
Mode "single_line" does not.
@ -3236,6 +3584,9 @@ session number, resp. volume id of the depicted session.
Print the foreseeable consumption of 2048 byte blocks
by next -commit. This can last a while as a -commit gets
prepared and only in last moment is revoked by this option.
The result depends on several settings and also on the kind of output device.
If no -jidgo options are given and not command -as "mkisofs" was used,
then -padding (300 kB by default) is not counted as part of the image size.
@c man .TP
@item -tell_media_space
@kindex -tell_media_space reports free space
@ -3418,7 +3769,7 @@ actions it will always perform action "echo".
@table @asis
@sp 1
@item in_iso
reports the path if its counterpart exist in the ISO image.
reports the path if its counterpart exists in the ISO image.
For this the disk_path of the -findx command gets replaced
by the iso_rr_path given as parameter.
@*
@ -3431,7 +3782,7 @@ not exist in the ISO image. The report format is the same as with command
@*
@item add_missing iso_rr_path_start
adds the counterpart if it does not yet
exist in the ISO image.
exist in the ISO image and marks it for "rm_merge" as non-removable.
@*
E.g.: -findx /home/thomas -exec add_missing /thomas_on_cd @minus{}@minus{}
@*
@ -3442,6 +3793,12 @@ contains files. To be used with -type "m" to report mount points.
@item empty_iso_dir
deletes all files from the counterpart
in the ISO image. To be used with -type "m" to truncate mount points.
@*
@item estimate_size
prints a lower and an upper estimation of the number of blocks which the
found files together will occupy in the emerging ISO image.
This does not account for the superblock,
for the directories in the -findx path, or for image padding.
@end table
@c man .TP
@item -compare disk_path iso_rr_path
@ -3576,6 +3933,8 @@ Non-default options are:
@item report="files"
lists the files which use damaged blocks (not with use=outdev).
The format is like with find -exec report_damage.
Note that a MD5 session mismatch marks all files of the session as damaged.
If finer distinction is desired, perform -md5 off before -check_media.
@*
@item report="blocks_files"
first lists damaged blocks and then affected files.
@ -3889,10 +4248,9 @@ file paths and pathspecs.
A lot of options are not supported and lead to failure of the mkisofs
emulation. Some are ignored, but better do not rely on this tolerance.
@*
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
are interpreted differently than with xorriso option -add. Directories get
merged with the root directory of the ISO image, other filetypes get mapped
into that root directory.
The supported options are documented in detail in xorrisofs.info
and in man xorrisofs. The description here is focused on the effect
of mkisofs emulation in the context of a xorriso run.
@*
Other than with the "cdrecord" personality there is no automatic -commit at
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
@ -3900,6 +4258,11 @@ the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
-pacifier gets set to "mkisofs" if files are added to the image.
@*
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
are interpreted differently than with xorriso option -add. Directories get
merged with the root directory of the ISO image, other filetypes get mapped
into that root directory.
@*
If pathspecs are given and if no output file was chosen before or during the
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
If -o points to a regular file, then it will be truncated to 0 bytes
@ -3911,6 +4274,25 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
arguments or if other start arguments pointed the output drive to
standard output.
@*
-print-size inhibits automatic image production at program end. This ban is
lifted only if the pending image changes get discarded.
@*
Eventual padding is counted as part of the ISO image if not option --emul-toc
is given.
@*
If no -iso-level is given, then level 1 is chosen when the first file or
directory is added to the image. At the same occasion directory names get
allowed to violate the standard by -compliance option allow_dir_id_ext.
This may be avoided by option -disallow_dir_id_ext.
@*
Option -root is supported. Option -old-root is implemented by xorriso
commands -mkdir, -cp_clone, -find update_merge, and -find rm_merge.
-root and -old-root set command -disk_dev_ino to "ino_only" and -md5 to "on",
by default.
@minus{}disk_dev_ino can be set to "off" by @minus{}@minus{}old-root-no-ino
resp. to "on" by @minus{}@minus{}old-root-devno .
@minus{}md5 can be set to "off" by @minus{}@minus{}old-root-no-md5 .
@*
Not original mkisofs options are @minus{}@minus{}quoted_path_list ,
@minus{}@minus{}hardlinks , @minus{}@minus{}acl ,
@minus{}@minus{}xattr , @minus{}@minus{}md5 , @minus{}@minus{}stdio_sync .
@ -3918,7 +4300,10 @@ They work like the xorriso options with the
same name and hardcoded argument "on", e.g. -acl "on".
Explicit arguments are expected by @minus{}@minus{}stdio_sync
and @minus{}@minus{}scdbackup_tag.
@minus{}@minus{}no-emul-toc is -compliance no_emul_toc.
@*
The capability to preserve multi-session history on overwriteable media
gets disabled by default. It can be enabled by using @minus{}@minus{}emul-toc
with the first session. See -compliance no_emul_toc.
@*
@minus{}@minus{}sort-weight gets as arguments a number and an iso_rr_path.
The number becomes the LBA sorting weight of regular file iso_rr_path or
@ -3941,10 +4326,27 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on.
@*
@minus{}@minus{}boot-catalog-hide is -boot_image any cat_hidden=on.
@*
@minus{}mips-boot is the same as -boot_image any mips_path= .
@*
@minus{}mipsel-boot leads to mipsel_path= .
@*
@minus{}partition_offset number is
@minus{}boot_image any partition_offset=number.
@*
Personalites "@strong{xorrisofs}", "@strong{genisoimage}",
Option @minus{}append_partition is supported.
@*
@minus{}untranslated_name_len number is
@minus{}compliance untranslated_name_len=number.
@*
@minus{}@minus{}old-empty is -compliance old_empty.
@*
The options of genisoimage Jigdo Template Extraction are recognized and
performed via xorriso option -jigdo. See the "Alias:" names there for the
meaning of the genisoimage options.
@*
@sp 1
Personalities "@strong{xorrisofs}", "@strong{genisoimage}",
and "@strong{genisofs}" are aliases for "mkisofs".
@*
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
@ -3954,6 +4356,9 @@ I.e. all arguments will be interpreted mkisofs style until "@minus{}@minus{}"
is encountered.
From then on, options are interpreted as xorriso options.
@*
@minus{}@minus{}no_rc as first argument of such a program start
prevents interpretation of startup files. See section FILES below.
@*
@sp 1
@cindex Emulation, cdrecord, -as
@ -3999,6 +4404,9 @@ If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
to the command line arguments. I.e. all arguments will be interpreted cdrecord
style until "@minus{}@minus{}" is encountered and an eventual commit happens.
From then on, options are interpreted as xorriso options.
@*
@minus{}@minus{}no_rc as first argument of such a program start
prevents interpretation of xorriso startup files. See section FILES below.
@c man .TP
@item -read_mkisofsrc
@kindex -read_mkisofsrc searches and reads .mkisofsrc file
@ -4065,7 +4473,12 @@ files. See section FILES below.
@item -options_from_file fileaddress
@kindex -options_from_file reads commands from file
@cindex Process, read command file, -options_from_file
Read quoted input from fileaddress and executes it like dialog lines.
Read quoted input from fileaddress and execute it like dialog lines.
Empty lines and lines which begin by # are ignored. Normally one line
should hold one xorriso command and all its arguments. Nevertheless lines
may be concatenated by a trailing backslash.
@*
See also section "Command processing", paragraph "Quoted input".
@c man .TP
@item -help
@kindex -help prints help text
@ -4164,9 +4577,20 @@ restoring of hard links.
Default is 16m = 16 MiB, minimum 64k = 64 kiB, maximum 1024m = 1 GiB.
@c man .TP
@item -print text
@kindex -print prints text line
@cindex Program, print text line, -print
Print a text to result channel.
@kindex -print prints result text line
@cindex Program, print result text line, -print
Print a text line to the result channel which is by default stdout.
@c man .TP
@item -print_info text
@kindex -print_info prints message text line
@cindex Program, print message text line, -print_info
Print a text line to the info channel which is by default stderr.
@c man .TP
@item -print_mark text
@kindex -print_mark prints synchronizing text line
@cindex Program, print synchronizing text line, -print_mark
Print a text line to the mark channel which is by default directed to both,
result and info channel. An empty text will cause no output at all.
@c man .TP
@item -prompt text
@kindex -prompt prompts for enter key
@ -4261,8 +4685,8 @@ line by a channel indicator:
@*
Next is a decimal number of which only bit 0 has a meaning for now.
0 means no newline at end of payload, 1 means that the newline character at
the end of the output line belongs to the payload. After another colon follows
the payload text.
the end of the output line belongs to the payload. After another colon and
a blank follows the payload text.
@*
Example:
@*
@ -4277,8 +4701,9 @@ channels, "I" for info messages, "R" for result lines, "M" for -mark texts.
@item -mark text
@kindex -mark sets synchronizing message
@cindex Process, set synchronizing message, -mark
If text is not empty it will get put out on "M" channel each time after a
dialog line has been processed.
If text is not empty it will get put out on "M" channel each time xorriso
is ready for the next dialog line or before xorriso performs a command that
was entered to the pager prompt.
@c man .TP
@item -prog text
@kindex -prog sets program name
@ -4653,6 +5078,8 @@ $ xorriso -as mkisofs prepared_for_iso/tree1 | \
Follow-up sessions are written like this:
@*
@sp 1
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
@*
$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
@*
$ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \
@ -4661,8 +5088,13 @@ $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \
@*
@sp 1
Always eject the drive tray between sessions. The old sessions
get read via stdio:/dev/sr0 and thus are prone to device driver
peculiarities.
get read via /dev/sr0. Its device driver might not be aware
of the changed content before it loads the media again.
In this case the previous session would not be loaded and the
new session would contain only the newly added files.
@*
For the same reason do not let xorriso -as cdrecord load the media,
but rather do this manually or by a program that reads from /dev/sr0.
@*
@sp 1
This example works for multi-session media only.
@ -4795,6 +5227,8 @@ When done with writing the new session gets checked by its recorded MD5.
@*
@sp 1
$ xorriso \
@*
-abort_on FATAL \
@*
-for_backup -disk_dev_ino on \
@*
@ -4806,7 +5240,7 @@ $ xorriso \
@*
-not_leaf '*.o' -not_leaf '*.swp' \
@*
-update_r /home/thomas/open_source_projects /open_source_projects \
-update_r /home/thomas/projects /projects \
@*
-update_r /home/thomas/personal_mail /personal_mail \
@*
@ -4856,6 +5290,21 @@ older sessions in the table-of-content. E.g. as superuser:
# osirrox -mount /dev/sr0 "volid" '*2008_12_05*' /mnt
@*
@sp 1
@c man .sp 1
Above example produces a result similar to -root / -old-root / with mkisofs.
For getting the session trees accumulated in the new sessions, let all -update
commands use a common parent directory and clone it after updating is done:
@*
-update_r /home/thomas/projects /current/projects \
@*
-update_r /home/thomas/personal_mail /current/personal_mail \
@*
-clone /current /"$(date '+%Y_%m_%d_%H%M%S')" \
@*
The cloned tree will have a name like /2011_02_12_155700.
@*
@sp 1
@c man .sp 1
Sessions on multi-session media are separated by several MB of unused blocks.
So with small sessions the payload capacity can become substantially lower
than the overall media capacity. If the remaining space on media does not
@ -4863,6 +5312,7 @@ suffice for the next gap, the drive is supposed to close the media
automatically.
@*
@sp 1
@c man .sp 1
@strong{Better do not use your youngest backup for -update_r}.
Have at least two media which you use alternatingly. So only older backups
get endangered by the new write operation, while the newest backup is
@ -4960,7 +5410,7 @@ to read and execute lines from the following files:
@*
@sp 1
The files are read in the sequence given above, but none of them is required
to exist.
to exist. The line format is described with command -options_from_file.
@*
If mkisofs emulation was enabled by program name "xorrisofs", "mkisofs",
"genisoimage", or "genisofs", then afterwards -read_mkisofsrc is performed,
@ -4976,6 +5426,9 @@ The default setting of -check_media abort_file= is:
@*
@c man .SH SEE ALSO
@c man .TP
@c man For the mkisofs emulation of xorriso
@c man .BR xorrisofs(1)
@c man .TP
@c man For mounting xorriso generated ISO 9660 images (-t iso9660)
@c man .BR mount(8)
@c man .TP
@ -5004,6 +5457,8 @@ The default setting of -check_media abort_file= is:
@node Seealso, Legal, Files, Top
@chapter See also
@table @asis
@item For the mkisofs emulation of xorriso
xorrisofs(1)
@item For mounting xorriso generated ISO 9660 images (-t iso9660)
mount(8)
@item Libreadline, a comfortable input line facility
@ -5034,7 +5489,7 @@ Thomas Schmitt <scdbackup@@gmx.net>
for libburnia-project.org
@c man .SH COPYRIGHT
@section Copyright
Copyright (c) 2007 - 2010 Thomas Schmitt
Copyright (c) 2007 - 2011 Thomas Schmitt
@*
Permission is granted to distribute this text freely. It shall only be
modified in sync with the technical properties of xorriso. If you make use

View File

@ -2,7 +2,7 @@
<HEAD>
<META NAME="description" CONTENT="GNU xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, GNU/Linux, Linux, FreeBSD, Solaris, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, BD, ISO, ISO 9660, RockRidge, Rock Ridge, GNU/Linux, Linux, FreeBSD, Solaris, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
<META NAME="robots" CONTENT="follow">
<TITLE>GNU xorriso - GNU Project - Free Software Foundation</TITLE>
<LINK rev="made" href="mailto:webmasters@gnu.org">
@ -82,7 +82,9 @@ but rather not with CD, DVD-R, DVD+R, BD-R.
<DT>libacl and libacl-devel</DT>
<DD>eventually allow on GNU/Linux to get and set ACLs.</DD>
<DT>zlib and zlib-devel</DT>
<DD>eventually allow zisofs and gzip compression.</DD>
<DD>eventually allow zisofs, gzip compression, and Jigdo file production.</DD>
<DT>libbz2 and libbz2-devel</DT>
<DD>eventually allow bzip2 compression of Jigdo template files.</DD>
</DL>
</P>
@ -419,6 +421,10 @@ files or trees to disk:
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT>Each copy command processes its files sorted by block address
in the ISO image in order to reduce head moves with optical media.
This can bring effective read performance near to the raw media reading speed.
</DT>
<DT>Consider to enter dialog mode and use commands like
<KBD>-cd , -du , -lsl , -find<KBD>.
<DT>
@ -440,19 +446,21 @@ files or trees to disk:
<P>
<DL>
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.6.2.tar.gz">xorriso-0.6.2.tar.gz</A>
(1670 KB).
<DD><A HREF="xorriso-1.0.8.tar.gz">xorriso-1.0.8.tar.gz</A>
(1895 KB).
</DD>
<DD>(Released 18 Sep 2010)</DD>
<DD><A HREF="xorriso-0.6.2.tar.gz.sig">xorriso-0.6.2.tar.gz.sig</A></DD>
<DD>(Released 15 Apr 2011)</DD>
<DD><A HREF="xorriso-1.0.8.tar.gz.sig">xorriso-1.0.8.tar.gz.sig</A></DD>
<DD>
(detached GPG signature for verification by
<KBD>gpg --verify xorriso-0.6.2.tar.gz.sig xorriso-0.6.2.tar.gz</KBD>).
<KBD>gpg --verify xorriso-1.0.8.tar.gz.sig xorriso-1.0.8.tar.gz</KBD>
<BR>
after eventual <KBD>gpg --keyserver keys.gnupg.net --recv-keys ABC0A854</KBD>).
</DD>
<DD>
Also on <A HREF="http://www.gnu.org/prep/ftp.html">
mirrors of ftp://ftp.gnu.org/gnu/ </A>
as xorriso/xorriso-0.6.2.tar.gz
as xorriso/xorriso-1.0.8.tar.gz
</DD>
</DL>
</DD>
@ -460,7 +468,14 @@ as xorriso/xorriso-0.6.2.tar.gz
<DL><DT>Documentation:</DT>
<DD><A HREF="README_xorriso">README</A> about installation and drive setup</DD>
<DD><A HREF="xorriso_help">xorriso -help</A> gives an overview of options</DD>
<DD><A HREF="xorrisofs_help">xorriso -as mkisofs -help</A>
supported options of mkisofs emulation
</DD>
<DD><A HREF="xorrecord_help">xorriso -as cdrecord -help</A>
supported options of cdrecord emulation</DD>
<DD><A HREF="man_1_xorriso.html">man xorriso</A> is the manual page</DD>
<DD><A HREF="man_1_xorrisofs_devel.html">man xorrisofs</A>
describes the mkisofs emulation</DD>
</DL>
<A NAME="contact"></A>
<DL><DT>Contact:</DT>
@ -480,9 +495,9 @@ as xorriso/xorriso-0.6.2.tar.gz
<HR>
<P>
Bug fixes towards xorriso-0.6.0:
Bug fixes towards xorriso-1.0.6:
<UL>
<LI>Regression with -hardlinks and -compliance old_rr, 0.4.2, Aug 2009</LI>
<LI>mkisofs emulation could ignore options (regression in 0.1.6)</LI>
<!--
<LI>- none -</LI>
-->
@ -500,35 +515,9 @@ Bug fixes in .pl01 towards xorriso-:
-->
<P>
Enhancements towards previous stable version xorriso-0.6.0:
Enhancements towards previous stable version xorriso-1.0.6:
<UL>
<LI>
New option -preparer_id, -as mkisofs options -p and -preparer
</LI>
<LI>
New -boot_image specifier emul_type=none|hard_disk|floppy
</LI>
<LI>
New boot_image boot specs partition_offset, partition_hd_cyl, partition_sec_hd
</LI>
<LI>
Made behavior of -as mkisofs with unknown options more similar to original
</LI>
<LI>
New -as mkisofs option -hard-disk-boot, enabled -b without -no-emul-boot
</LI>
<LI>
New -as mkisofs option -e from Fedora genisoimage
</LI>
<LI>
New -as mkisofs options -partition_offset,-partition_hd_cyl,-partition_sec_hd
</LI>
<LI>
DVD-R DL are supported as single-session media.
I.e. only with option -close "on".
</LI>
<LI>- none -</LI>
<!--
<LI>- none -</LI>
-->
@ -539,34 +528,38 @@ I.e. only with option -close "on".
<P>
<H3>
Libburnia software copies included in GNU xorriso:
Software copies included in GNU xorriso:
</H3>
<DL>
<DT>
GNU xorriso is feature-wise equivalent to the dynamic compilation of
<A HREF="http://libburnia-project.org/"> libburnia </A>
libraries and libburnia program xorriso.
libraries, libjte, and libburnia program xorriso.
It restricts itself to a technical form where the legal commitments of the
libburnia project and the legal intentions of
<A HREF="http://www.fsf.org/"> FSF </A> match completely.
</DT>
<DD>&nbsp;</DD>
<DT>libburn-0.8.7</DT>
<DT>libburn-1.0.6</DT>
<DD>reads and writes data from and to CD, DVD, BD.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.37</DT>
<DT>libisofs-1.0.6</DT>
<DD>operates on ISO 9660 filesystem images.</DD>
<DD>(By Vreixo Formoso, Mario Danic and Thomas Schmitt
from team of libburnia-project.org)</DD>
<DT>libisoburn-0.6.2</DT>
<DT>libisoburn-1.0.8</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed,
and hosts the original source code of program xorriso.</DD>
<DD>It provides the complete functionality of xorriso via
a C language API.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD>
<DT>libjte-1.0.0</DT>
<DD>produces jigdo and template file together with the emerging ISO image.</DD>
<DD>(By Free Software Foundation, Steve McIntyre, George Danchev,
Thomas Schmitt)</DD>
<DD>&nbsp;</DD>
<DT>The source code of this software is independent of
cdrecord and mkisofs.</DT>
@ -577,8 +570,8 @@ cdrecord and mkisofs.</DT>
<P>
<DL>
<DT><H3>Development snapshot, version 0.6.3 :</H3></DT>
<DD>Bug fixes towards xorriso-0.6.2:
<DT><H3>Development snapshot, version 1.0.9 :</H3></DT>
<DD>Bug fixes towards xorriso-1.0.8:
<UL>
<LI>- none yet -</LI>
<!--
@ -586,18 +579,24 @@ cdrecord and mkisofs.</DT>
-->
</UL>
</DD>
<DD>Enhancements towards stable version 0.6.2:
<DD>Enhancements towards stable version 1.0.8:
<UL>
<LI>- none yet -</LI>
<!--
<LI>- none yet -</LI>
-->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.6.3</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.6.3 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.6.3)</A></DD>
<DD><A HREF="README_xorriso_devel">README 1.0.9</A>
<DD><A HREF="xorriso_help_devel">xorriso-1.0.9 -help</A></DD>
<DD><A HREF="xorrisofs_help_devel">xorriso-1.0.9 -as mkisofs -help</A></DD>
<DD><A HREF="xorrecord_help_devel">xorriso-1.0.9 -as cdrecord -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 1.0.9)</A></DD>
<DD><A HREF="man_1_xorrisofs_devel.html">man xorrisofs (as of 1.0.9)</A></DD>
<DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
@ -607,14 +606,15 @@ libburnia libraries.
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.6.3.tar.gz">xorriso-0.6.3.tar.gz</A>
(1670 KB).
<A HREF="xorriso-1.0.9.tar.gz">xorriso-1.0.9.tar.gz</A>
(1895 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained
from repositories of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A>.
xorriso is part of libisoburn/trunk and will get built by its "make".
</DT>
<DT>Be warned that the libraries in SVN and bzr are development versions with
possibly unstable API/ABI enhancements. Do not distribute development
versions for dynamic linking. Only release versions are safe for that.
@ -636,6 +636,18 @@ versions for dynamic linking. Only release versions are safe for that.
But after the run of <KBD>./bootstrap</KBD>, only
vanilla tools like make and gcc are needed.
</DT>
<DT>GNU xorriso contains a copy of libjte-1.0.0 from package jigit
which produces jigdo and template file together with the emerging ISO image.
(By Free Software Foundation, Steve McIntyre, George Danchev,
Thomas Schmitt)
</DT>
<DD>Important: If desired, libjte has to be already installed when libisofs
and libisoburn get built.</DD>
<DD>Download: <KBD><B>wget http://www.einval.com/~steve/software/JTE/download/jigit_1.17.orig.tar.gz</B>
</KBD></DD>
<DD>Install: <KBD><B>tar xzf jigit_1.17.orig.tar.gz ; cd jigit-1.17 ; make ; make install</B>
</KBD></DD>
<DD>&nbsp;</DD>
</DL>
</P>
@ -692,7 +704,7 @@ scdbackup, multi volume CD/DVD/BD backup</A></DD>
<BR>
Legal statement: This website does not serve any commercial purpose.
<BR><BR>
Copyright &copy; 2008 - 2010 Thomas Schmitt.
Copyright &copy; 2008 - 2011 Thomas Schmitt.
<BR>
This text is freely distributable. It shall only be modified in sync with
the factual properties of xorriso and its public storage locations.

View File

@ -2,7 +2,7 @@
/* xorriso - Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Initial code of this program was derived from program src/askme.c out
of scdbackup-0.8.8, Copyright 2007 Thomas Schmitt, BSD-License.
@ -109,9 +109,9 @@
/* The minimum version of libisoburn xorriso API to be used with this
version of xorriso.
*/
#define Xorriso_req_majoR 0
#define Xorriso_req_minoR 6
#define Xorriso_req_micrO 2
#define Xorriso_req_majoR 1
#define Xorriso_req_minoR 0
#define Xorriso_req_micrO 8
static void yell_xorriso()
@ -229,7 +229,7 @@ int main(int argc, char **argv)
*/
ret= Xorriso_prescan_args(xorriso,argc,argv,0);
if(ret == 0)
goto end_sucessfully;
goto end_successfully;
if(ret < 0)
exit(5);
@ -246,7 +246,7 @@ int main(int argc, char **argv)
/* Interpret startup files */
ret= Xorriso_read_rc(xorriso, 0);
if(ret == 3)
goto end_sucessfully;
goto end_successfully;
if(ret <= 0)
{ret= 5; goto emergency_exit;}
@ -258,7 +258,7 @@ int main(int argc, char **argv)
i= 1;
ret= Xorriso_interpreter(xorriso, argc, argv, &i, 2);
if(ret == 3)
goto end_sucessfully;
goto end_successfully;
if(ret <= 0)
{ret= 5; goto emergency_exit;}
@ -267,9 +267,9 @@ int main(int argc, char **argv)
if(ret <= 0)
{ret= 6; goto emergency_exit;}
end_sucessfully:; /* normal shutdown, including eventual -commit */
end_successfully:; /* normal shutdown, including eventual -commit */
Xorriso_process_msg_queues(xorriso, 0);
if(Xorriso_change_is_pending(xorriso, 0))
if(Xorriso_change_is_pending(xorriso, 1))
Xorriso_option_end(xorriso, 2);
Xorriso_process_msg_queues(xorriso, 0);
ret= Xorriso_make_return_value(xorriso, 0);

View File

@ -32,18 +32,6 @@ xorriso_xorriso_CFLAGS =
xorriso_xorriso_LDADD = $(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
# This looks quite ugly with make install: xorriso.c is compiled twice again
#
# Trying to create a build timestamp file
#
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
# phony targets get rebuilt every time
# .PHONY: xorriso/xorriso_buildstamp.h
# xorriso/xorriso_buildstamp.h:
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
# cat xorriso/xorriso_buildstamp.h
xorriso_xorriso_SOURCES = \
\
xorriso/xorriso.h \
@ -164,6 +152,26 @@ xorriso_xorriso_SOURCES = \
libisofs/md5.h \
libisofs/md5.c \
\
libjte/libjte.h \
libjte/libjte_private.h \
libjte/libjte.c \
libjte/jte.h \
libjte/jte.c \
libjte/checksum.h \
libjte/checksum.c \
libjte/endian.c \
libjte/endianconv.h \
libjte/md5.h \
libjte/md5.c \
libjte/rsync.h \
libjte/rsync.c \
libjte/sha1.h \
libjte/sha1.c \
libjte/sha256.h \
libjte/sha256.c \
libjte/sha512.h \
libjte/sha512.c \
\
libburn/async.c \
libburn/async.h \
libburn/back_hacks.h \
@ -253,7 +261,6 @@ install-exec-hook:
# Alternative to the disabled .PHONY above.
# Trying to create a build timestamp file semi-manually: make buildstamped
#
buildstamp:
@ -283,12 +290,14 @@ indent: $(indent_files)
## ========================================================================= ##
# Extra things
# nodist_pkgconfig_DATA = \
# xorriso.pc
man_MANS = xorriso/xorriso.1
man_MANS = \
xorriso/xorriso.1 \
xorriso/xorrisofs.1
info_TEXINFOS = xorriso/xorriso.texi
info_TEXINFOS = \
xorriso/xorriso.texi \
xorriso/xorrisofs.texi
EXTRA_DIST = \
xorriso.pc.in \
@ -306,6 +315,7 @@ EXTRA_DIST = \
doc/susp_aaip_2_0.txt \
doc/susp_aaip_isofs_names.txt \
doc/zisofs_format.txt \
doc/startup_file.txt \
libisofs/aaip-os-dummy.c \
libisofs/aaip-os-linux.c \
libisofs/aaip-os-freebsd.c \

View File

@ -2,7 +2,7 @@
/* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -20,7 +20,13 @@
/* for uint32_t */
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
/** The source code release timestamp */
@ -64,6 +70,18 @@ struct FindjoB; /* Program and status of a find run */
(((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 204800)
/* Maximum number of appended partitions. Effectively usable number depends
on system area type.
*/
#define Xorriso_max_appended_partitionS 8
/*
Maximum length of a disc label text plus 1.
*/
#define Xorriso_disc_label_sizE 129
struct XorrisO { /* the global context of xorriso */
int libs_are_started;
@ -111,7 +129,9 @@ struct XorrisO { /* the global context of xorriso */
Do not create or use hln arrays if sort_lba_on
*/
int iso_level;
int do_joliet;
int do_iso1999;
int do_aaip; /* bit0= ACL in
bit1= ACL out
@ -130,18 +150,25 @@ struct XorrisO { /* the global context of xorriso */
bit2= write MD5 for each data file
bit3= make file content stability check by double reading
bit4= use recorded MD5 as proxy of ISO file
bit5= with bit0: do not check tags of superblock,tree,session
*/
int no_emul_toc; /* bit0= On overwriteables:
write first session to LBA 0 rather than 32.
*/
int do_old_empty; /* See -compliance old_empty
own data content: range [0,31]. The new way is to have
a dedicated block to which all such files will point.
*/
char scdbackup_tag_name[81];
char scdbackup_tag_time[19];
char scdbackup_tag_written[512];
char scdbackup_tag_listname[SfileadrL];
int relax_compliance; /* opaque bitfield to be set by xorrisoburn */
int untranslated_name_len;
int do_follow_pattern;
int do_follow_param;
int do_follow_links;
@ -219,8 +246,23 @@ struct XorrisO { /* the global context of xorriso */
*/
char image_start_value[81]; /* value according image_start_mode */
uint32_t displacement;
int displacement_sign;
int drives_exclusive; /* burn_preset_device_open() param exclusive */
int early_stdio_test; /* For burn_allow_drive_role_4():
bit1= Test whether a stdio drive can be opened for
read-write resp. read-only resp. write only.
bit2= Classify files which cannot be opened at all
as role 0 : useless dummy.
bit3= Classify non-empty role 5 drives as
BURN_DISC_APPENDABLE with NWA after the
end of the file. It is nevertheless
possible to change this address by call
burn_write_opts_set_start_byte().
*/
int do_calm_drive; /* bit0= calm down drive after aquiring it */
char indev[SfileadrL];
@ -235,7 +277,11 @@ struct XorrisO { /* the global context of xorriso */
time_t isofs_st_in; /* That time point as read from "isofs.st" of the
loaded image. */
int volset_change_pending; /* whether -commit would make sense */
int volset_change_pending; /* whether -commit would make sense
0= no change pending , 1= change pending
2= change pending, but -as misofs -print-size
was performed on the changed image model
*/
int no_volset_present; /* set to 1 on first failure */
struct CheckmediajoB *check_media_default;
@ -262,10 +308,13 @@ struct XorrisO { /* the global context of xorriso */
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
int fs; /* fifo size in 2048 byte chunks : at most 1 GB */
int padding; /* number of bytes to add after ISO 9660 image */
int do_padding_by_libisofs; /* 0= by libburn , 1= by libisofs */
int alignment; /* if > 0 : image size alignment in 2048 byt blocks */
/* <<< not sure whether to keep this after libisofs will have
learned to pad up MBR images to full MB */
int alignment; /* if > 0 : output size alignment in 2048 byte blocks.
This is always done by libburn, i.e. attached
outside the image. Eventual inner alignment of
the image end happens first.
*/
int do_stream_recording; /* 0=no, 1=yes, 2=for data, not for dir
>=16 means yes with number as start LBA */
@ -300,6 +349,17 @@ struct XorrisO { /* the global context of xorriso */
(a simple partition table)
bit1= isohybrid boot image pointer
and partition table
bit2-7= System area type
0= with bit0 or bit1: MBR
else: unspecified type
1= MIPS Big Endian Volume Header
2= MIPS Little Endian Boot Block
3= SUN Disk Label for SUN SPARC
bit8-9= Only with System area type 0
Cylinder alignment mode
0 = auto (align if bit1)
1 = always align
2 = never align
*/
int patch_system_area; /* Bits as of system_area_options.
to be applied to the loaded system
@ -317,6 +377,14 @@ struct XorrisO { /* the global context of xorriso */
/* 1 to 255, 0= disabled/default */
int partition_heads_per_cyl;
/* Path and type of image files to be appended as MBR partitions */
char *appended_partitions[Xorriso_max_appended_partitionS];
uint8_t appended_part_types[Xorriso_max_appended_partitionS];
/* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label.
*/
char ascii_disc_label[Xorriso_disc_label_sizE];
/* User settable PVD time stamps */
time_t vol_creation_time;
time_t vol_modification_time;
@ -326,6 +394,21 @@ struct XorrisO { /* the global context of xorriso */
and timezone 0 */
char vol_uuid[17];
#ifdef Xorriso_with_libjtE
/* Parameters and state of Jigdo Template Export environment */
struct libjte_env *libjte_handle;
#endif
/* List of -jigdo parameters since the most recent -jigdo clear */
struct Xorriso_lsT *jigdo_params;
struct Xorriso_lsT *jigdo_values;
int libjte_params_given; /* bits: 0= outfile , 1= verbosity , 2= template_path
3= jigdo_path , 4= md5_path , 5= min_size
6= checksum_iso , 7= checksum_template
8= compression , 9= exclude , 10= demand_md5
11= mapping
*/
/* LBA of boot image after image loading */
int loaded_boot_bin_lba;
/* Path of the catalog node after image loading */
@ -432,6 +515,7 @@ struct XorrisO { /* the global context of xorriso */
int library_msg_direct_print;
char abort_on_text[20];
int abort_on_severity; /* A severity rank number as threshold */
int abort_on_is_default; /* will be set to 0 by first -abort_on */
int problem_status; /* Severity rank number. 0= no abort condition present */
char problem_status_text[20];
@ -489,6 +573,8 @@ struct XorrisO { /* the global context of xorriso */
bit3= seen match
*/
double last_abort_file_time; /* most recent check for aborting -check_md5 */
/* Tree node collection and LBA sorting facility */
int node_counter;
int node_array_size;
@ -518,6 +604,10 @@ struct XorrisO { /* the global context of xorriso */
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
/* bit0= update_merge active: mark all newly added nodes as visited+found
*/
int update_flags;
/* result (stdout, R: ) */
char result_line[10*SfileadrL];
int result_line_counter;

View File

@ -1 +1 @@
#define Xorriso_timestamP "2010.09.18.210001"
#define Xorriso_timestamP "2011.04.14.073001"

View File

@ -4,7 +4,7 @@
a command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -17,9 +17,9 @@
/* The minimum version of libisoburn to be used with this version of xorriso
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 6
#define xorriso_libisoburn_req_micro 2
#define xorriso_libisoburn_req_major 1
#define xorriso_libisoburn_req_minor 0
#define xorriso_libisoburn_req_micro 8
struct SpotlisT; /* List of intervals with different read qualities */
@ -112,6 +112,9 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
bit1= remove empty directory: rmdir
bit2= recursion: do not reassure in mode 2 "tree"
bit3= this is for overwriting and not for plain removal
bit4= count deleted files in xorriso->pacifier_count
bit5= with bit0 only remove directory content, not the directory
bit6= do not delete eventually existing node from di_array
@return <=0 = error
1 = removed simple node
2 = removed directory or tree
@ -120,6 +123,7 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
char *path, int flag);
/* @param flag bit0= long format
bit1= do not print count of nodes
bit2= du format
@ -512,12 +516,21 @@ int Xorriso_attach_boot_image(struct XorrisO *xorriso, int flag);
int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag);
int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag);
int Xorriso_coordinate_system_area(struct XorrisO *xorriso, int sa_type,
int options, char *cmd, int flag);
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
For now take the highest possible value.
*/
#define Xorriso_IFBOOT S_IFMT
int Exprtest_match(struct XorrisO *xorriso, struct ExprtesT *ftest,
void *node_pt, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
@ -540,5 +553,22 @@ int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path,
int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
int flag);
int Xorriso_jigdo_interpreter(struct XorrisO *xorriso, char *aspect, char *arg,
int flag);
int Xorriso_estimate_file_size(struct XorrisO *xorriso, struct FindjoB *job,
char *basename, mode_t st_mode, off_t st_size, int flag);
int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
char *origin, char *dest, int flag);
int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest,
int flag);
int Xorriso_mark_update_merge(struct XorrisO *xorriso, char *path,
void *node, int flag);
#endif /* Xorrisoburn_includeD */

1510
xorriso/xorrisofs.1 Normal file

File diff suppressed because it is too large Load Diff

1816
xorriso/xorrisofs.info Normal file

File diff suppressed because it is too large Load Diff

2049
xorriso/xorrisofs.texi Normal file

File diff suppressed because it is too large Load Diff