Compare commits

...

1941 Commits

Author SHA1 Message Date
d0b8158fd0 Promoted branch to tag 2013-01-08 15:39:19 +00:00
92876c4d5e Had to add xorriso-tcltk to EXTRA_DIST although it is in bin_SCRIPTS 2013-01-08 11:08:03 +00:00
de1cc6e613 Had to add xorriso-tcltk to EXTRA_DIST although it is in bin_SCRIPTS 2013-01-08 11:04:19 +00:00
39593733ed libisoburn.h was missing in commit 4941 2013-01-08 10:51:55 +00:00
459c08152e Documented changes and release timestamp 2013-01-08 10:29:02 +00:00
156dfb6202 libisoburn-1.2.6 2013-01-08 10:21:36 +00:00
255f8e2996 Branching for libisoburn release 1.2.6 2013-01-08 09:10:15 +00:00
e92ec05b74 Closed memory leaks found by valgrind 2013-01-07 21:57:49 +00:00
5006d3da49 Some polishing of xorriso-tcltk 2013-01-07 19:10:30 +00:00
88c4571160 Promoted drive line labels to buttons 2013-01-06 20:59:35 +00:00
e89c448171 Worked around the 4 reserved characters of Bwidget Tree 2013-01-06 19:47:47 +00:00
1c59b20844 Removed the ""File browser text field" switch 2013-01-06 17:45:57 +00:00
96b599470b Corrected an error message which has undesired effects with fronetnds 2013-01-06 17:19:48 +00:00
f962ef831c Small adjustments in xorriso-tcltk 2013-01-06 15:41:23 +00:00
6eaad04b54 Disabled "Extract to disk" button if extraction is banned 2013-01-06 10:24:27 +00:00
a3cbe88544 Decided for xorriso as info source about loal filesystem 2013-01-06 10:10:44 +00:00
28fbd336d1 New xorriso-tcltk start option --no_extract 2013-01-06 10:00:46 +00:00
aec88f03af Avoided unnecessary rebuilding of file browser tree with Up and Down buttons 2013-01-06 09:37:05 +00:00
8115b7eba0 Hardened xorriso-tcltk against filenames with newlines 2013-01-05 22:10:27 +00:00
133f44aa2c Made -msg_op "parse" obey -backslash_codes. 2013-01-05 21:50:41 +00:00
3270533967 Small adjustments and bug fixes in xorriso-tcltk 2013-01-05 10:51:20 +00:00
1ca1318fb7 Small adjustments and bug fixes in xorriso-tcltk 2013-01-04 22:10:59 +00:00
5aede6ec59 Small adjustments and bug fixes in xorriso-tcltk 2013-01-04 20:43:49 +00:00
a26cb8f9ca Gave xorriso-tcltk an opportunity to execute files with xorriso commands 2013-01-04 19:23:28 +00:00
960311ebc7 New -osirrox settings "blocked" and "unblock" 2013-01-04 19:00:14 +00:00
c915d8d68d Avoided redundant logging of -cd commands 2013-01-04 14:36:05 +00:00
463c42d3e3 Made script logging and log target addresses controllable from GUI 2013-01-04 14:04:24 +00:00
cd2e326b1c Added start option --script_log_file. Gave file tree browser a fallback mode. 2013-01-04 09:45:49 +00:00
eed6b0415b Gave the "Move to:" field a Return key binding 2013-01-03 19:08:59 +00:00
9cc07b6170 Moved and renamed the "Refresh avail:" button 2013-01-03 18:57:08 +00:00
6778f563c6 Equipped file browser with a second vertical scrollbar 2013-01-03 18:25:56 +00:00
6761528f2c Removed surplus quotes around variable evaluation 2013-01-03 16:02:21 +00:00
c5ec55ddd5 Consolidated overwrite switches in a single menu burron 2013-01-03 13:40:59 +00:00
60bffbc14b Blocked GUI activities until yes/no window resp. error window are closed 2013-01-03 12:56:21 +00:00
8f9100fc67 Changed xorriso-tcltk default to --click_to_focus 2013-01-03 10:27:18 +00:00
8fabbf7a95 Improved xorriso-tcltk dialog about overwriting of existing files 2013-01-03 10:18:30 +00:00
110b27a4ec Removed obsolete test code and disabled other tests 2013-01-02 18:31:00 +00:00
581fc96fe1 Reduced horizontal size of xorriso-tcltk to fit into 1024 pixels 2013-01-01 15:23:30 +00:00
5f453e42fe Changed copyright year and switched xorriso-tcltk to BSD license 2013-01-01 13:59:51 +00:00
448ba3d400 Added a menu for global access permission policy, improved pop-up window positioning 2013-01-01 13:02:40 +00:00
6895b969cb Avoided an error message if xorriso and xorriso-tcltk had differing device addresses 2012-12-31 17:34:21 +00:00
bcfe11e23b Changed layout of drive list and drive buttons 2012-12-31 12:02:41 +00:00
9cad4ae1ba Made main Help window independent of help window for GUI elements 2012-12-31 10:06:08 +00:00
da2fbae562 Improved xorriso-tcltk file browser 2012-12-30 20:32:47 +00:00
ddb4171e76 Improved xorriso-tcltk file browser 2012-12-30 19:54:05 +00:00
d6f6e41ba5 Primitive file tree browser for xorriso-tcltk (if package BWidget is available) 2012-12-30 11:53:56 +00:00
36c42d7012 Corrected a typo in man page of xorrecord, tolerating--grow_over[w]rit[e]able_iso 2012-12-30 10:10:05 +00:00
e749eb6395 Updated general README files about xorriso-tcltk 2012-12-28 09:02:15 +00:00
132cf1ad59 Equiped xorriso-tcltk with help texts and enabled it to start xorriso by itself 2012-12-28 08:51:21 +00:00
baaa9f629f Updated change log and web page 2012-12-27 10:25:41 +00:00
d1451bf60d moved frontend_pipes_xorriso.c 2012-12-27 09:55:05 +00:00
19027b1d42 Proof-of-concept of a GUI frontend program. Written in Tcl/Tk. 2012-12-27 09:53:59 +00:00
dc3263534d Xorriso_sieve_clear_results() dereferenced NULL if message sieve never started 2012-12-25 18:09:37 +00:00
df54691f2f Changed the parameter rules for new command -launch_frontend 2012-12-25 17:56:24 +00:00
7aba2e615c New command -launch_frontend 2012-12-20 20:22:58 +00:00
e560c94d98 Bug fix: -dialog "single_line" behaved like -dialog "on" 2012-12-19 21:07:28 +00:00
26cb92ce05 Corrected sieve filter rules for -tell_media_space 2012-12-18 18:52:06 +00:00
fecdcd053e Bug fix: -rollback did not work if indev and outdev were empty 2012-12-18 15:46:01 +00:00
d2128dedd3 Command -toc_of modifier ":short" 2012-12-18 08:15:41 +00:00
518dbac61c New -msg_op opcode "parse_bulk" 2012-12-16 13:12:15 +00:00
c4f476b1b4 New -msg_op opcodes "compare_sev" and "list_sev" 2012-12-15 09:31:41 +00:00
d02501c16e New API call Xorriso__severity_list() 2012-12-15 09:29:08 +00:00
513bafda92 New command -toc_of 2012-12-13 19:33:43 +00:00
7f5c58bd2e Improved help text of piped frontend demo 2012-12-11 20:02:31 +00:00
639b440e0f Demonstrated use of message sieve by piped frontend program 2012-12-11 19:27:24 +00:00
a3ee936348 Updated change log and web page 2012-12-11 07:11:15 +00:00
c86aafaa0f New command -msg_op 2012-12-08 17:55:58 +00:00
db6e65dde8 Some more filter rules for Xorriso_sieve_big 2012-12-07 19:37:45 +00:00
641de03c01 New API calls Xorriso_sieve_add_filter, Xorriso_sieve_get_result, Xorriso_sieve_clear_results, Xorriso_sieve_dispose, Xorriso_sieve_big 2012-12-06 13:22:13 +00:00
67ad712906 Fixed a typo in GNU xorriso README. Thanks to Omega Weapon. 2012-12-02 07:33:39 +00:00
6390d53f15 Avoided surplus warning messages with -iso_rr_pattern off -mv [wildcards] 2012-11-26 15:51:04 +00:00
8e7a9dc760 Added help text for inofficial command -test 2012-11-26 07:03:00 +00:00
86a96982d3 Corrected a typo in a message text 2012-11-26 07:02:18 +00:00
0ec02b1951 Command -mv did not mark the emerging image as haveing pending changes 2012-11-26 07:01:34 +00:00
aadcc65c99 Corrections in xorriso manual. Proposed by Paul Menzel. 2012-11-05 10:11:02 +00:00
58ee616700 Corrections in xorriso manual. Proposed by Paul Menzel. 2012-11-05 09:37:47 +00:00
635b3126a7 Ceased to count track gaps as read blocks with -check_media 2012-10-26 15:59:43 +00:00
350f535197 Improved -check_media handling of last two blocks in initial CD TAO session 2012-10-25 12:57:08 +00:00
cbe14a003a New -blank mode prefix "force:" 2012-10-24 09:59:13 +00:00
e01514fd67 Updated change log and web page 2012-10-19 08:23:56 +00:00
4678629282 New command -lns for creating symbolic links 2012-10-19 08:19:02 +00:00
47376c601f New API call Xorriso__severity_cmp() 2012-10-14 19:04:56 +00:00
fd61288ada man xorrisofs falsely described -p as option for publisher id. Must be -P. 2012-10-12 08:16:12 +00:00
33debe3024 Updated change log and web page 2012-10-07 11:04:51 +00:00
4900971896 Clarified documentation of -as mkisofs -isohybrid-gpt-basdat 2012-10-07 11:00:23 +00:00
7e7b575153 Enabled use of Xorriso_parse_line() with xorriso==NULL 2012-10-03 12:43:08 +00:00
fa9ed1d2c3 Mentioned releng tests in README of GNU xorriso. 2012-10-03 12:34:13 +00:00
58f80dad5f Configuration for use of libcdio on cygwin. Thanks Rocky Bernstein. 2012-10-02 13:47:05 +00:00
9367e43923 Equipped frontend_pipes_xorriso.c with word parser code 2012-09-30 20:34:52 +00:00
3414e4eb78 Corrected interpretation of flag in Xorriso_parse_line() 2012-09-29 17:36:53 +00:00
63e11ed707 Updated change log and web page 2012-09-22 19:13:54 +00:00
59da586abe New -boot_image partition_cyl_align mode "all" 2012-09-21 12:03:32 +00:00
f09064b470 Small enhancement of API description 2012-09-21 11:56:05 +00:00
c0b7304b61 Made -pkt_output combinable with message output lists 2012-09-16 14:19:28 +00:00
634b20ec05 New API call Xorriso_peek_outlists() 2012-09-15 17:04:32 +00:00
6338febf8f Changed prototype of new API call Xorriso_start_msg_watcher() 2012-09-15 09:52:29 +00:00
eaa501c9ec New API call Xorriso_start_msg_watcher() 2012-09-14 17:52:21 +00:00
fcc00d4311 Made Xorriso_process_msg_queues() thread-safe 2012-09-13 13:09:54 +00:00
d3ca2f9c83 Added copyright and licensing to demonstration program 2012-09-11 12:31:01 +00:00
0d95518540 Disabled a not yet thread-safe part of the new API call 2012-09-11 12:26:47 +00:00
2a046ed32d New API call Xorriso_fetch_outlists() 2012-09-11 09:28:05 +00:00
b84c80ab11 Demonstration program of xorriso at two pipes: test/frontend_pipes_xorriso.c 2012-09-09 18:18:11 +00:00
63130b2211 Reacted on compiler warning about rev 4822 2012-09-08 18:12:30 +00:00
fe095e322b New API calls Xorriso_parse_line() and Xorriso__dispose_words() 2012-09-08 17:38:36 +00:00
f34bb71269 Fixed SIGSEGV introduced by rev 4819 2012-09-08 08:28:42 +00:00
e22f8b5416 Enhanced command -status to recognize -cdi 2012-08-20 08:44:41 +00:00
22ed5e7686 Shortened oversized line in man page 2012-08-15 06:45:39 +00:00
2201c50a74 New -rom_toc_scan option "emul_wide" 2012-08-14 10:32:35 +00:00
17860622a4 New flag bit 9 with isoburn_drive_aquire() 2012-08-14 10:27:23 +00:00
1c2306ab10 Corrected conversion from man xorrisofs to man_1_xorrisofs.html 2012-08-14 10:25:49 +00:00
2814e5d44f Corrected description of check_media patch_lba0="on" 2012-07-26 13:09:09 +00:00
24cf8a11ee Small beautification of previous commit. 2012-07-25 18:43:03 +00:00
c8f6f57c96 Bug fix: SIGSEGV by uninitialized local variable with -check_media patch_lba0="on". Regression by version 1.0.6 2012-07-25 18:27:01 +00:00
3e6e961b90 Clarified role of drive when parsing already loaded ISO 9660 superblock 2012-07-25 18:15:26 +00:00
0e9348e01b Documented changes and release timestamp 2012-07-20 19:03:18 +00:00
755ae3557b Version leap to libisoburn-1.2.5 2012-07-20 18:58:07 +00:00
f111266cea mention total space used by manual_isojigdo + netinst 2012-07-15 08:44:30 +00:00
1fb85def13 mention increased disk size for manual_isojigdo 2012-07-15 07:18:35 +00:00
78bb4a0be4 permanently switch to netinst, since businesscard is now gone 2012-07-15 06:07:39 +00:00
c54f35de8d add netinst ISO inder comment, not to be forgotten 2012-07-14 16:12:38 +00:00
48cfc7b908 use a guaranteed location for businesscard ISO image 2012-07-14 15:38:27 +00:00
b1f8491278 Updated change log and web page 2012-07-14 13:59:50 +00:00
49b044b3d6 Bug fix: -update deleted MD5 of files of which only attributes changed 2012-07-12 16:31:31 +00:00
922c95443f Write type selection via libisoburn API to avoid redundant decisions 2012-07-10 08:29:35 +00:00
d674f847c2 New API calls isoburn_igopt_set_write_type() , isoburn_igopt_get_write_type() 2012-07-10 08:28:20 +00:00
c2e3a36d51 Re-introduced capability of multi-session on overwritables. Spoiled by rev 4780. 2012-07-08 20:06:34 +00:00
23c2b5ef7d Updated change log and web page 2012-07-08 18:21:43 +00:00
34cb228906 New -as cdrecord options -tao -sao -dao 2012-07-08 17:14:22 +00:00
b42d64b4ad Reacted on compiler complaint about rev 4779 2012-07-08 13:54:55 +00:00
82d563127e New xorriso command -write_type 2012-07-08 13:47:36 +00:00
5a9c2e0380 Delegated write_type selection to caller of libisoburn 2012-07-08 13:42:01 +00:00
56b1a92cc2 Mentioned HFS+ name mangling in man pages 2012-07-03 16:33:13 +00:00
07ea39369d Updated change log and web page 2012-06-28 12:19:18 +00:00
65f55a90ef New -as mkisofs options -hfsplus-block-size and -apm-block-size 2012-06-27 19:20:52 +00:00
62d27011f0 New -boot_image bootspecs hfsplus_block_size= and apm_block_size= 2012-06-27 18:48:16 +00:00
50e8b66845 New API calls isoburn_igopt_set_hfsp_block_size() and isoburn_igopt_get_hfsp_block_size() 2012-06-27 18:45:32 +00:00
395ff93df2 Loaded images with HFS+ attributes were marked as having changes pending 2012-06-25 12:53:41 +00:00
1f030723f5 Updated change log and web page 2012-06-22 14:35:56 +00:00
32ffc7c3d1 Now expecting disk_path with -as mkisofs -hfs-bless 2012-06-21 20:43:02 +00:00
2edce33c2e New -find test -disk_path 2012-06-21 20:34:40 +00:00
b796a99a03 Updated change log and web page 2012-06-20 19:08:57 +00:00
4a61dec017 New -as mkisofs options -isohybrid-gpt-basdat, -isohybrid-gpt-hfsplus, -isohybrid-apm-hfsplus 2012-06-20 19:06:26 +00:00
08ecc2bdb5 Pseudo blessing "none" to revoke any HFS+ blessing of a node 2012-06-18 18:11:09 +00:00
aa02b0a09b Updated change log and web page 2012-06-18 12:52:14 +00:00
56308c81e4 New boot_specs efi_boot_part, prep_boot_part, chrp_boot_part 2012-06-18 11:20:31 +00:00
4e733f082a Documented -as mkisofs options *-boot-part 2012-06-18 08:26:06 +00:00
26f4c5aa6c Provisorily banned the combination of -hfsplus and ISO image growing 2012-06-15 08:56:38 +00:00
6503d580ca Gave some hints about SCSI errors in faq.wiki 2012-06-14 20:12:43 +00:00
58d8868901 Correction in xorrisofs manual 2012-06-14 16:21:01 +00:00
010b3f2286 Updated change log and web page 2012-06-14 14:29:08 +00:00
103561d79f Provisory new -as mkisofs option -chrp-boot-part 2012-06-12 19:27:23 +00:00
40e9dfd42a New system area sub type CHRP with isoburn_igopt_set_system_area() 2012-06-12 19:26:14 +00:00
d46d643f43 Provisory new -as mkisofs options -prep-boot-part, -efi-boot-part 2012-06-12 11:35:05 +00:00
8bff64f692 Provisory new API calls isoburn_igopt_set_prep_partition, isoburn_igopt_set_efi_bootp 2012-06-12 11:33:46 +00:00
9e497e369f Provisory new -as mkisofs option -fat 2012-06-10 18:41:17 +00:00
ea18b7f420 Provisory new image generation extension isoburn_igopt_fat 2012-06-10 18:39:50 +00:00
8813a85304 Fixed false error with -as mkisofs option -hfsplus. Introduced by rev 4750. 2012-06-10 08:29:57 +00:00
f8f39c322f Made HFS creator, type, blessing persistent in AAIP isofs.hx isofs.hb 2012-06-08 07:09:30 +00:00
396fe7db8a Updated documentation of xorriso and xorrisofs about HFS+ 2012-06-06 18:48:26 +00:00
379e984717 Silenced harmless compiler warnings 2012-06-05 14:58:25 +00:00
24b5143168 Closed a memory leak about -print_size, found by valgrind 2012-06-05 10:30:58 +00:00
115a267630 Corrected a mistake in previous revision 2012-05-31 07:09:53 +00:00
8907406e5b New (yet inofficial) -find tests -has_hfs_crtp, has_hfs_bless 2012-05-31 07:04:46 +00:00
50ce43b470 New (yet inofficial) -find actions set/get_hfs_crtp, set/get_hfs_bless 2012-05-30 15:34:07 +00:00
6296f1fbbd New (yet inofficial) -boot_image bootspec hfsplus_serial= 2012-05-28 13:32:27 +00:00
531ea178f3 New (yet inofficial) -as mkisofs option -hfsplus-serial-no 2012-05-27 16:58:51 +00:00
4ea1032820 New API call isoburn_igopt_set_hfsp_serial_number() 2012-05-27 16:56:14 +00:00
6fdf7a5fae Closed a memory leak about system area buffer. Found by valgrind. 2012-05-26 21:25:14 +00:00
135721a868 New (yet inofficial) -as mkisofs options -hfs-bless and -hfs-bless-by 2012-05-25 19:01:39 +00:00
dfb1f5c5e7 New (yet inofficial) -as mkisofs option -hfsplus-file-creator-type 2012-05-25 08:45:56 +00:00
a59ecdf456 Welcomimg three new libisofs source files by Vladimir Serbinenko 2012-05-24 09:35:35 +00:00
4f90dad64b Preparations for ISO/HFS+ hybrid images by Vladimir Serbinenko 2012-05-24 07:13:20 +00:00
b6857855f5 Preparations for ISO/HFS+ hybrid images by Vladimir Serbinenko 2012-05-24 07:06:56 +00:00
caeef32866 New -as mkisofs option --norock 2012-05-22 12:17:08 +00:00
4eb38ab9c9 New command -rockridge 2012-05-22 12:13:18 +00:00
009a004d9a Made chunksize=32s default with -check_media 2012-05-02 11:09:40 +00:00
6668ab7d32 New -check_media option async_chunks= 2012-05-01 07:49:46 +00:00
917b487343 Now producing a FAIURE event with unknown mkisofs arguments which begin by dash 2012-04-28 16:15:01 +00:00
4768b08005 Now recognizing fused single character -as mkisofs options without parameters 2012-04-25 19:10:34 +00:00
32428f7890 add pointer to the Debian cdbuilder logs 2012-04-25 13:23:56 +00:00
17cd6c25ae do not insist for c-bindings 2012-04-22 10:05:42 +00:00
2ad7eb5186 Removing old data from releng/releng_generated_data in GNU xorriso 2012-04-22 10:03:16 +00:00
0b400850c7 Now copying libisoburn/releng into GNU xorriso 2012-04-21 19:34:31 +00:00
ee8ee6381c check for existance of the file(1) utility;
might not be found in lean chroots
2012-04-21 16:17:30 +00:00
31cea2abf9 initialize while exporting 2012-04-21 15:53:14 +00:00
9f8f097a44 fix standalone routine description 2012-04-21 15:48:41 +00:00
f4832f661f drop completed todo entry 2012-04-21 15:45:25 +00:00
ed7cf4c6a7 simplify supervised vs. standalone mode detection; also fix the docs 2012-04-21 15:41:45 +00:00
877862304a when run inside libisoburn, also resolve the headers from ../../libburn and ../../libisofs; when run inside gnu-xorriso all headers are resolved via ../ 2012-04-21 11:09:30 +00:00
0a991aa61c more explanations added for running mode; fix a typo 2012-04-21 10:50:22 +00:00
12e3fb0c76 process the case where the parent can't be find out, i.e. missing ps 2012-04-21 09:44:48 +00:00
a30b05dd70 only perform compilation phase for verify C++-compliance, no linkage and running 2012-04-21 09:14:14 +00:00
7e00e567e0 add standalone_or_supervised routine, unconditionally called from inc/* 2012-04-21 09:05:57 +00:00
ceeea85dbe Updated change log and web page 2012-04-19 07:48:59 +00:00
2396f4d3fc Requiring libisofs 1.2.3 now 2012-04-19 07:43:48 +00:00
5ab4f14c04 Fixed a small memory leak in case of failed ISO image reading 2012-04-19 07:31:18 +00:00
c720203420 New -as mkisofs option -log-file 2012-04-11 16:32:21 +00:00
d1512ed525 Now recognizing long -as cdrecord options with double dash 2012-04-10 07:15:15 +00:00
194ef1fbe9 Avoided to mention autoformatting in message about missing -outdev at -commit 2012-04-06 17:38:34 +00:00
3bbdf6702f Documented changes and release timestamp 2012-04-02 19:29:44 +00:00
05c078ab0b Version leap to libisoburn-1.2.3 2012-04-02 19:28:02 +00:00
1e82214392 drop gprof test, use LOGS for log URIs, so grep -E '(TEST|LOGS) CHECKLIST works too 2012-03-30 20:29:31 +00:00
0d293c93f9 more cleanups so grep TEST works better 2012-03-30 20:23:30 +00:00
6557519066 consolidate auto and manual releng tests 2012-03-30 20:05:32 +00:00
d8ccc062a1 Updated change log and web page 2012-03-28 17:02:48 +00:00
c5381ee1a2 Demanding libisofs-1.2.1 with ./configure --enable-pkg-check-modules 2012-03-27 17:22:33 +00:00
712b012530 Updated help text of texi-to-man converter 2012-03-22 10:39:12 +00:00
0f2d174156 Implemented -as mkisofs option -relaxed-filenames 2012-03-22 10:33:24 +00:00
eaefa189d0 New -compliance option 7bit_ascii 2012-03-22 10:31:38 +00:00
c0e1f4f9f2 File which was omitted when committing rev. 4674 2012-03-22 10:23:39 +00:00
808ea834bb New relaxation option allow_7bit_ascii 2012-03-22 10:20:30 +00:00
e48665cc44 Bug fix: -as mkisofs without -graft-points could noy handle names with "=" 2012-03-22 08:49:33 +00:00
f720a0b1b9 Reacted on warning of cppcheck 2012-03-21 19:35:37 +00:00
bd921d2d99 Reacted on warning of cppcheck 2012-03-21 19:31:28 +00:00
b406e8e93e Reacted on warnings of cppcheck 2012-03-21 19:30:38 +00:00
d005e8f1c2 Bug fix: Relaxation option joliet_rec_mtime and iso1999_rec_mtime had wrong values 2012-03-21 14:11:53 +00:00
85bd616af1 Updated change log and web page 2012-03-14 20:51:12 +00:00
118003067d Adjusted behavior of -as mkisofs option -l 2012-03-14 19:51:36 +00:00
7c34e7c255 Clarified xorriso documentation about deep directories 2012-03-14 15:26:49 +00:00
ba571848fa Adjusted behavior of -as mkisofs option -D 2012-03-14 15:23:53 +00:00
3af66f3c8a Now ignoring -as mkisofs -no-split-symlink-components -no-split-symlink-fields 2012-03-13 10:26:01 +00:00
deee733b0d New -as mkisofs option -rr_reloc, implemented option -hide-rr-moved 2012-03-12 18:09:25 +00:00
c704c9c205 New command -data_cache_size 2012-03-11 16:41:10 +00:00
b42293cd05 New API calls isoburn_ropt_set_data_cache(), isoburn_ropt_get_data_cache() 2012-03-11 16:20:30 +00:00
8f48b854d8 Changed a degugging text about command parameters 2012-03-10 15:35:08 +00:00
0498f81865 New command -rr_reloc_dir 2012-03-10 14:59:44 +00:00
5d00144aa6 New API calls isoburn_igopt_set_rr_reloc(), isoburn_igopt_get_rr_reloc() 2012-03-10 14:51:04 +00:00
1cd812e25a Moved a function 2012-03-10 11:27:15 +00:00
20afcce743 Corrected missing linefeed in message of command -mkdir 2012-03-09 19:00:21 +00:00
fa1ce420a8 Added -hide-rr-moved to the list of ignored -as mkisofs options 2012-03-05 20:49:26 +00:00
43a4695b6a Replaced many occurences of "option" by "command" in comments of xorriso.h 2012-03-05 14:53:27 +00:00
4ba706d8d2 Corrected orthographical errors in libisoburn.h 2012-03-05 14:51:54 +00:00
aa63e1884a Corrected orthographical error in GNU xorriso readme file 2012-03-05 14:42:46 +00:00
c6869a0925 Revised the use of "option" and "ASCII" in xorriso.texi 2012-03-05 12:13:37 +00:00
2d52e9427d Changed xorriso.texi according to proposals by Tony Mancill 2012-03-05 10:32:03 +00:00
9836165089 Added a comment 2012-03-04 09:59:31 +00:00
005627b330 Added a comment 2012-03-04 09:48:04 +00:00
84cbbc4a57 Corrected texts about "command", "argument", "parameter" 2012-03-03 21:16:24 +00:00
26bfb48c39 Mentioned peculiar -changes_pending behavior of filter attaching 2012-03-03 21:14:16 +00:00
dfb641b3b1 Revoked rev 4641. It is not a bug but a feature. E.g. for reading. 2012-03-03 18:50:42 +00:00
d5dd6c96cd New command -changes_pending 2012-03-03 18:29:01 +00:00
f70299dae1 Centralized the inquiry whether an image change is pending 2012-03-03 13:39:50 +00:00
7c42bd8a17 Bug fix: Setting file content filters did not mark image as changed for commit 2012-03-03 10:46:16 +00:00
7156827557 Fixed a problem after blanking, which was introduced by rev 4630. 2012-02-29 13:54:38 +00:00
36d8e2bd62 Updated change log and web page 2012-02-27 17:59:53 +00:00
1186e09ef1 Equipped chapters of xorriso HTML man page with link targets 2012-02-27 17:57:26 +00:00
d09ee8335e New default permission on / directory: rwxr-xr-x 2012-02-27 15:02:25 +00:00
46293e457b Fixed a problem with directing an -extract to the / directory of disk 2012-02-27 14:52:17 +00:00
d40b26e8bd Bug fix: -osirrox on:sort_lba_on -extract from / restored nearly nothing 2012-02-25 19:44:57 +00:00
661ae74800 Enabled speed display with command -extract 2012-02-25 15:49:21 +00:00
67836d9721 Some adjustments in xorriso man page 2012-02-24 20:20:22 +00:00
3c0bc5bc16 More accurate determination of size with check_media what=image 2012-02-14 10:32:43 +00:00
719ef2a6d3 New API calls isoburn_get_attached_start_lba(), isoburn_attach_start_lba() 2012-02-14 10:31:00 +00:00
a61a461fa0 Updated generator script for HTML man page 2012-02-02 09:53:04 +00:00
58486a4fdc Fixed a HTML bug in xorriso 2012-02-02 09:45:30 +00:00
5a0ab5533b Updated change log and web page 2012-02-02 08:27:47 +00:00
2bdc22153e Polished man page about option -x 2012-02-02 08:26:46 +00:00
20ccd705f0 Allowed chunk_size= values up to 1024s 2012-02-01 16:31:48 +00:00
8ade912d76 Reporting correct speed unit with -check_media use=outdev 2012-02-01 16:29:26 +00:00
ec01b598b9 Avoided lots of error messege when checking media in empty drive 2012-02-01 12:26:59 +00:00
fdeb97fc28 New commands -x, -list_arg_sorting 2012-01-31 13:04:28 +00:00
3bd7d5deee Documented changes and release timestamp 2012-01-27 16:01:45 +00:00
400a4f2add Version leap to libisoburn-1.2.1 2012-01-27 16:00:06 +00:00
56183aaf71 Made rev 4586 safe against division by 0 2012-01-25 15:37:29 +00:00
f76a4ec837 Updated ChangeLog 2012-01-25 14:24:14 +00:00
eb16eadcdb Added libisoburn ChangeLog to GNU xorriso tarball 2012-01-24 11:46:38 +00:00
7922222241 Two files forgotten with rev 4587 2012-01-23 10:46:36 +00:00
c5afa5e921 Curbed -check_media chunk_size= to 64 kB 2012-01-23 10:42:33 +00:00
9f5e6c925a Reporting speed with -check_md5, -compare, -find, -compare_l, -update 2012-01-23 10:40:59 +00:00
9caa063957 Reporting speed with -check_media 2012-01-23 10:38:48 +00:00
e16695de4d Improved interpretation of -check_media min_lba= 2012-01-18 09:35:43 +00:00
ce82f8a086 Made -compliance "rec_mtime" default for xorriso 2012-01-15 10:40:12 +00:00
665663f3fb Updated change log and web page 2012-01-14 15:03:07 +00:00
367992c1bb Using new libisoburn relaxations with "rec_mtime", enabling it with -as mkisofs 2012-01-14 14:45:39 +00:00
0ee26b66c2 New relaxations isoburn_igopt_joliet_rec_mtime, isoburn_igopt_iso1999_rec_mtime 2012-01-14 14:42:33 +00:00
44d0ef2caa Integrated new source file libburn/cdtext.c 2011-12-28 15:55:13 +00:00
ae863bf1a3 Integrated new source file libburn/cdtext.c 2011-12-25 12:19:48 +00:00
d30b0ef91e slight adjustment for last and previous run logs 2011-12-15 14:14:17 +00:00
6bfcad1531 corrections and style 2011-12-15 13:56:25 +00:00
4049d75ebf consistent usage/help with other releng scripts 2011-12-14 06:09:22 +00:00
90cd8429b5 Removed version.h from list of source files because generated by configure 2011-12-07 08:06:35 +00:00
dde4c5df2f Removing xorriso/.libs test/.libs with make clean 2011-12-03 15:22:29 +00:00
2349c6db09 Added ./bootstrap script to release tarball 2011-12-03 13:11:16 +00:00
7a4ad3e2d3 Removing test/.libs with make clean 2011-12-03 12:43:52 +00:00
1f77c66e15 Made verbosity and exit value of xorrecord more similar to cdrecord resp. wodim 2011-12-01 15:22:52 +00:00
0f9e0e4796 Bug fix: libisoburn.ver had a duplicate function entry 2011-11-29 13:06:42 +00:00
eb56a6152e Worked around inconsistency of stat.st_rdev and dev_t on Debian mips, mipsel 2011-11-24 09:32:30 +00:00
7cacd54894 Mentioned GNU Hurd qemu page as source of qemu knowledge 2011-11-23 09:42:18 +00:00
9c22fe9bb8 Updated QemuXorriso wiki about xorriso version requirements 2011-11-22 21:21:41 +00:00
c1c261ca21 Documented changes and release timestamp 2011-11-21 08:27:55 +00:00
ba911768a6 Version leap to libisoburn-1.1.9 2011-11-21 08:25:18 +00:00
f992bc9516 Corrected a wrong statement in wiki/QemuXorriso 2011-11-16 13:34:32 +00:00
1e07b5142b Some clarifications in wiki/QemuXorriso 2011-11-16 11:32:23 +00:00
2f73f76c05 Some clarifications in wiki/QemuXorriso 2011-11-13 13:17:02 +00:00
e26dcc7baf Some clarifications in wiki/QemuXorriso 2011-11-11 17:27:52 +00:00
dc765c2eac Some clarifications in wiki/QemuXorriso 2011-11-10 19:55:48 +00:00
63707ec863 Mentioned how to use /dev/vda without /dev/sr1 link 2011-11-09 20:49:37 +00:00
a22439e97c Added wiki/QemuXorriso to libisoburn tarball generator 2011-11-09 14:52:36 +00:00
51fe37db09 Small corrections in wiki/QemuXorriso 2011-11-09 14:51:42 +00:00
7b8c2ad78f Added wiki page about xorriso on qemu to the GNU xorriso tarball generator 2011-11-09 14:49:58 +00:00
3340ef84db Added a wiki page about xorriso on qemu. Online: wiki/QemuXorriso 2011-11-09 13:14:04 +00:00
8ebbc825b0 Updated change log and web page 2011-11-04 18:01:15 +00:00
5ca17a2bd9 Replaced several occurences of the word "media" by "medium" 2011-11-02 14:21:29 +00:00
f6d0a17b90 Replaced several occurences of the word "media" by "medium" 2011-11-02 14:09:45 +00:00
46b7c643f0 Replaced several occurences of the word "media" by "medium" 2011-10-26 14:09:51 +00:00
554a64112d Let xorrecord -atip throw SORRY on empty tray, but report profile list of drive 2011-10-26 08:52:37 +00:00
d88872e600 Avoided to report "Supported modes: SAO TAO" with xorrecord -atip on ROM drives 2011-10-25 16:01:11 +00:00
caac466675 Updated change log and web page 2011-10-25 11:40:28 +00:00
cae4e4f69b Info document and man page for xorrecord 2011-10-25 10:39:10 +00:00
a62f6af50a Enabled xorrecord dev=- 2011-10-18 16:22:16 +00:00
622af5ca49 New option -sleep 2011-10-14 09:43:30 +00:00
65f88e429d Removed potentially dangerous hint from releng/manual_burn 2011-10-13 11:07:49 +00:00
d4f50fac6a Improved plausibility of xorriso media summary in case of unreliable readbility 2011-10-13 10:59:48 +00:00
d79d96d3b1 Reacted on nitpicking of cppcheck 2011-10-09 16:25:07 +00:00
56a5c32dea Replaced HTML minus by a flat ASCII minus in HTML man page generator 2011-10-08 12:12:38 +00:00
77865d98eb Pointed readers of README to releng/README 2011-10-06 08:16:25 +00:00
a5344bfb57 Allowed lowercase severity names for all occasions 2011-10-05 17:32:26 +00:00
53238362ac Avoiding open-close cycles on MMC drives after blanking or burning 2011-10-05 17:22:30 +00:00
aa2b37aa84 New flag bit of API call isoburn_drive_aquire() to cause burn_drive_re_assess() 2011-10-05 08:57:39 +00:00
80b0f99366 Requiring libburn 1.1.7 2011-10-05 07:52:00 +00:00
f83e78817f 2011-09-27 13:39:45 +00:00
7126d95677 Version leap to libisoburn-1.1.7 2011-09-27 13:36:10 +00:00
6e5e11ad7f dropped since it is now obsoleted 2011-09-27 12:34:32 +00:00
48899ebe16 Small corrections in releng/README 2011-09-25 09:41:48 +00:00
7b3b12bfa1 fix some typos 2011-09-25 07:05:12 +00:00
21a799c0a0 Fixed typos in releng/README 2011-09-24 07:56:38 +00:00
4f2000ee93 Let releng burn test tolerate vanished udev link and wait for its re-appearance 2011-09-23 13:59:55 +00:00
803c4eaef3 Improved error message if xorriso shall open a vanished udev link 2011-09-23 13:18:11 +00:00
f272d1261c Added releng test suite to release tarball 2011-09-23 11:48:52 +00:00
b1bfa16e28 Mentioned my sysadmin workarounds to cope with udisks on Debian 6.0.2 amd64 2011-09-23 09:35:29 +00:00
48d76e23fe Re-aquiring drives by their burn_drive_convert_fs_adr() names 2011-09-22 14:22:02 +00:00
7d0f899f53 Mentioned configure-time options for udev anti-collision waiting time 2011-09-21 13:44:03 +00:00
5d841d63b5 Updated change log and web page 2011-09-20 13:41:08 +00:00
09f845adc4 Made PKG_CHECK_MODULES with --enable-libcdio conditional 2011-09-03 19:48:50 +00:00
ec68760f17 PKG_CHECK_MODULES test of ./configure now only with --enable-pkg-check-modules 2011-09-02 11:03:13 +00:00
7d22b5313b Reacting on xorriso ifailure in pipe test of releng/auto_isocontent 2011-08-30 17:22:40 +00:00
ab501f4234 Using own jigdo-gen-md5-list to avoid restriction to Linux and FreeBSD 2011-08-29 17:43:15 +00:00
86db525618 Moved jigdo-gen-md5-list of GNU xorriso into libisoburn/releng 2011-08-29 17:27:51 +00:00
3ceb13a8ed Made releng/manual_isojigdo remove .iso file after failed download 2011-08-29 12:48:48 +00:00
025f014241 Small change about Linux getfattr usage in releng/auto_isocontent 2011-08-29 12:40:06 +00:00
d2f368ed3f New -find and -findx action list_extattr 2011-08-25 19:00:46 +00:00
47a178e816 Reporting specific libisofs error if setting of ACL fails 2011-08-24 07:29:07 +00:00
cd6bd02dc8 Made releng/auto_isocontent work with disabled xorriso ACL adapter 2011-08-23 13:03:49 +00:00
3cea143cd1 Made releng/auto_isocontent work on filesystems with no xattr and ACL 2011-08-23 12:09:53 +00:00
a82cc372f9 Made releng/auto_isocontent ready to test FreeBSD extattr 2011-08-23 10:45:46 +00:00
f48548fc22 New -osirrox option strict_acl 2011-08-23 10:42:01 +00:00
11eb2bdacf Updated change log and web page 2011-08-19 11:05:39 +00:00
f71981ac49 Some "pro" arguments for the disputed items in releng/TODO 2011-08-19 08:49:09 +00:00
a48495f399 some rebuttal notes to items 2011-08-19 07:11:43 +00:00
3fb9388040 Moved todo items from releng/README to releng/TODO 2011-08-19 06:42:53 +00:00
4c99890da7 few more exposures 2011-08-19 06:25:59 +00:00
8159f2e42e Testing recording and extraction of ACLs and xattr if available 2011-08-18 15:23:32 +00:00
a8de5f38e4 New option -list_extras 2011-08-18 15:19:27 +00:00
0400400178 Requiring libsofs-1.1.5 now 2011-08-18 13:22:28 +00:00
c67f60a9c4 Made cleanup message of releng less loud 2011-08-18 08:45:49 +00:00
75b5ec323e Updated change log and web page 2011-08-17 16:29:56 +00:00
bacf9be002 Bug fix: -extract was not immediately aborted if -abort_on was triggered 2011-08-16 16:05:11 +00:00
2097f2406a Bug fix: -extract_single extracted directory content 2011-08-15 13:27:10 +00:00
86f84fb1e0 Changed a comment 2011-08-14 17:50:18 +00:00
2abce248b3 Opportunity to choose the shell that runs the releng test scripts 2011-08-14 15:39:41 +00:00
2b3342c9c0 Avoided use of "let" in releng/run_all_auto in favor of "expr" 2011-08-14 11:19:38 +00:00
2043d7ee66 Option --priv_cmd for releng/manual_burn and releng/manual_devices 2011-08-11 16:47:51 +00:00
8d971b0537 Added some newlines to output of releng/run_all_auto 2011-08-10 11:33:47 +00:00
6e428ec665 Made releng/run_all_auto ready for FreeBSD ("bash" linked to /bin/sh) 2011-08-10 10:04:56 +00:00
7d8770cea6 Made releng/manual_isojigdo ready for FreeBSD ("bash" linked to /bin/sh) 2011-08-10 09:16:03 +00:00
cd8b719d66 Made releng/auto_printsize ready for FreeBSD ("bash" linked to /bin/sh) 2011-08-09 19:38:16 +00:00
976a2483cd Made releng/auto_cxx ready for FreeBSD (with bash or "bash" linked to /bin/sh) 2011-08-09 17:25:39 +00:00
5d1e5d423c Made releng/manual_burn and releng/manual_devices work on FreeBSD 2011-08-09 16:24:40 +00:00
9950e3e55d Made releng/auto_isocontent ready for Solaris (with bash) 2011-08-09 11:42:23 +00:00
e2aa3c0509 Documented changes and release timestamp 2011-08-08 12:58:35 +00:00
27af40a303 Version leap to libisoburn-1.1.5 2011-08-08 12:56:51 +00:00
9f4fb2c69b Improved error reporting with problems when extracting xattr or ACL 2011-08-08 12:42:57 +00:00
920513356b More work on releng/README 2011-08-07 11:03:22 +00:00
9b21530532 Made existing tests comply to upcomming prescriptions for failure messages 2011-08-05 15:49:07 +00:00
bbfe2e7a6e Made existing tests comply to upcomming prescriptions for failure messages 2011-08-05 15:43:58 +00:00
136c3adf6c Improvements about releng/manual_burn 2011-08-04 20:49:20 +00:00
f04db99750 New test releng/manual_burn 2011-08-04 16:46:12 +00:00
121b69159a Further improvements to releng test template 2011-08-04 11:51:47 +00:00
be0d049ec5 Added option -h to general helptext of releng 2011-08-03 18:19:19 +00:00
de36d9b67f Added more text pieces to releng/README, updated template for new tests 2011-08-03 17:35:48 +00:00
01c193c95b new item, test for wrong cd sizes 2011-08-03 14:06:28 +00:00
91b0a2aa8d Checking -assert_volid in auto_isocontent 2011-08-01 19:23:42 +00:00
9a616c30ac Forgot to upload the header which defines Xorriso__to_upper 2011-08-01 15:29:28 +00:00
37a389c283 a better description 2011-08-01 14:50:14 +00:00
a1615087e9 Updated change log and web page 2011-08-01 13:13:22 +00:00
adc3169e34 New report line "Media blocks :" with option -toc 2011-08-01 13:04:14 +00:00
27c59a8f73 Bug fix: -assert_volid did not work. Regression since version 1.1.0, rev 3767. 2011-07-31 14:59:07 +00:00
7df497747d Allowed lower case severity names with -abort_on, -return_with, -report_about 2011-07-31 09:44:41 +00:00
076d5ad8b0 Bug fix: xorriso native mode on some drives wrote unreadble ISO images to CD 2011-07-31 09:18:56 +00:00
6cdbc1e680 Small correction in xorrisofs man page 2011-07-30 08:11:56 +00:00
c2fdd090cc Using libburn call burn_lookup_device_link() 2011-07-28 19:51:21 +00:00
73f9c94397 Requiring libburn 1.1.1 2011-07-28 19:21:26 +00:00
def75b5f34 Updated change log and web page 2011-07-28 11:37:32 +00:00
bf011207da Prefering dvd over cd with -device_links 2011-07-28 11:18:40 +00:00
d9c18ad08d Switched releng/manual_devices from -devices to -device_links 2011-07-27 21:43:24 +00:00
7cc669396e New option -device_links 2011-07-27 21:14:49 +00:00
baf61c3aee Reduced runtime of auto_printsize and balanced xorriso versus genisoimage 2011-07-27 12:04:07 +00:00
44cdc02804 Issueing a warning messages if BD-R with more than 299 sessions is loaded 2011-07-25 10:38:34 +00:00
2d7ac24525 New -check_media option what=image 2011-07-25 09:59:12 +00:00
076d8d1eb8 Improved -check_media with overwritable media and unknown content 2011-07-24 20:39:38 +00:00
8a67604efc Improved media summary with overwritable media and unknown content 2011-07-24 19:34:52 +00:00
9110f895d2 give hints only if the result is left in place 2011-07-24 14:56:36 +00:00
aac5928b92 don't inspect the log for NOTE|DEBUG|ALL 2011-07-24 14:49:43 +00:00
d335e276a5 move to manual_* namespace since it is somehow demanding, downloads iso, etc 2011-07-24 14:35:11 +00:00
77e6101682 Began to sketch an releng/README file 2011-07-23 19:29:46 +00:00
82a51f6c3f Began to sketch an releng/README file 2011-07-23 19:29:31 +00:00
790850d4b1 activate specific options help along with short overview 2011-07-20 12:23:40 +00:00
7f1f7d16c4 renamed to better reflect intentions 2011-07-19 17:16:21 +00:00
6e6883c840 renamed to reflect user expectations 2011-07-19 17:11:40 +00:00
40b25b150f drop ramaining leftover 2011-07-19 17:09:03 +00:00
434fe78ee7 merge remaining todo entries into TODO file, drop completed 2011-07-19 17:02:09 +00:00
14a1af33f9 postpone creation of self data dir, until compiler is checked first 2011-07-19 16:51:51 +00:00
ada1b1114a handle specific help anywhere 2011-07-18 17:22:59 +00:00
daf7a078bd drop obsoleted item 2011-07-18 14:32:53 +00:00
7a94e202f1 fixed a typo 2011-07-18 12:31:23 +00:00
50bebf476d rename releng_ scripts to auto_ 2011-07-18 12:28:43 +00:00
765e0c88cc rename releng_ scripts to auto_ 2011-07-18 12:26:30 +00:00
8cecbc9aca rename releng_ scripts to auto_ 2011-07-18 12:21:39 +00:00
21e5114e71 new todo item: turn most examples from xorriso(1) into tests 2011-07-18 10:33:11 +00:00
e532dcc7bc Added my copyright to run_all_releng 2011-07-18 09:52:41 +00:00
a9e1a6ffd6 new todo item - cunit tests 2011-07-18 07:43:40 +00:00
1ef2ca5f2b Switched error message away from stderr, only pacifier remains on stderr 2011-07-17 17:23:36 +00:00
d0b0684b47 mention manual_* tests, to be run individually, drop WHO slot as it serves to value 2011-07-17 17:04:31 +00:00
019ca32721 drop -T option passed to grep, as it seems reletively new and not supported by the previous versions still in use 2011-07-17 16:51:22 +00:00
fe1d451fe9 move the space requirements into single place, README.core 2011-07-17 16:20:58 +00:00
ffe287cd1e Using a more elegant way to obtain pipe component exit value 2011-07-17 14:37:54 +00:00
ed181cd4e4 Issueing pacifier messages during tree generation of releng_printsize 2011-07-17 13:40:10 +00:00
92ef566e12 Making run_all_releng recognize exit values again (fixing rev 4185) 2011-07-17 13:38:52 +00:00
886388d919 Issueing pacifier messages in run_all_releng about logged line 2011-07-17 13:08:52 +00:00
ccde6bec7c use colon as nullcommand instead of dummy statement 2011-07-16 13:41:18 +00:00
846eec24d6 check for -x argument 2011-07-15 18:33:10 +00:00
587987d019 fix small typos 2011-07-15 18:26:02 +00:00
2a5daec056 drop KEEP variable, since it is inverted CLEANUP 2011-07-15 18:22:09 +00:00
6bce4510d7 cleanup is now triggered by -c 2011-07-15 18:07:02 +00:00
b418a57f01 on cleanup, do cleanup and exit, only check for KEEP 2011-07-15 18:05:14 +00:00
eefda84832 rework to match latest option handling 2011-07-15 17:57:05 +00:00
54855eb89e Changed general option -k -c -f in releng_getopts.inc 2011-07-15 14:10:05 +00:00
feed351d0e Removed call to print_specific_help from releng_getopts.inc 2011-07-15 13:58:34 +00:00
73cfce131d New function check_for_xorriso in releng_getopts.inc 2011-07-15 11:30:30 +00:00
c394fe3ea2 Removed obsolete input checks from releng_getopts.inc 2011-07-15 10:34:39 +00:00
02a13e140f Removed usage of getopts in releng_getopts.inc 2011-07-15 10:29:33 +00:00
f33d3fedb3 Removed remnant reference to releng_getopts_ts.inc 2011-07-15 10:26:26 +00:00
8426577362 Reacted on warnings of cppcheck about libisoburn/burn_wrap.c 2011-07-15 08:31:22 +00:00
ff17e1e6dd inline to reflect latest developments 2011-07-15 06:12:40 +00:00
392f6ba0a0 merge back enhancements from Thomas 2011-07-15 06:08:29 +00:00
5b87ddb4cb add version 2 or later 2011-07-15 06:05:57 +00:00
ee260ecdee Corrected a misunderstanding about meaning of code piece 2011-07-14 17:03:55 +00:00
30d457a3fe Issueing failure message and non-zero exit value if manual_devices_ts fails 2011-07-14 16:52:01 +00:00
92d0f9440c Prepared test proposal for option -f and for incomplete option -x 2011-07-14 12:24:48 +00:00
09cfd395d0 Proposal for test ./manual_devices and inc/releng_getopts_ts.inc 2011-07-14 12:07:04 +00:00
2f32e55e0f Proposal for test ./manual_devices and inc/releng_getopts_ts.inc 2011-07-14 11:57:50 +00:00
a481f41d1c Proposal for test ./manual_devices 2011-07-13 19:05:06 +00:00
b5a93f2de7 Proposal for test ./manual_devices 2011-07-13 17:43:19 +00:00
9d238f91e4 Proposal for test ./manual_devices 2011-07-13 17:31:39 +00:00
d3e0451631 fix device counting 2011-07-13 11:41:39 +00:00
e30bf90933 check for execution from releng/ 2011-07-13 11:24:32 +00:00
910b3511e5 use regular quotation marks 2011-07-13 10:53:59 +00:00
12a24b169a Improved output of -list_speeds with ROM media and ROM drives. 2011-07-12 13:56:36 +00:00
cbc1a9723a check exit status of all commands 2011-07-12 11:01:39 +00:00
364361e228 Improved output of -list_speeds with CD drives. Empty list now cause SORRY. 2011-07-12 09:21:28 +00:00
00fcf43a47 formatting 2011-07-11 19:01:23 +00:00
19daaa2b77 more meaningful output 2011-07-11 18:58:07 +00:00
594b4a0ce3 Reacted on warnings of cppcheck 2011-07-11 17:56:33 +00:00
d4c85696a8 add copyrights and copying details 2011-07-11 09:44:01 +00:00
2e6f3fb6fe add copyrights and copying details 2011-07-11 09:40:23 +00:00
18fee0eb2a exit on not finished yet branches 2011-07-11 09:26:47 +00:00
08d46db86d check devices, to be run manually, for now 2011-07-11 09:24:57 +00:00
506656f5e9 cleanup remaining logs properly when requested 2011-07-11 08:31:03 +00:00
e1aa125c05 drop completed todo items; cleanups 2011-07-10 20:02:07 +00:00
61c485fc10 Recognizing overwritable media, blanked by cdrskin --grow_overwriteable_iso 2011-07-10 11:26:20 +00:00
ec37bd448c fix formatting 2011-07-10 07:06:30 +00:00
d6ddf8924c more unified output for the term and log 2011-07-10 06:51:34 +00:00
cca8143fb7 more unified output for the term and log 2011-07-10 06:48:56 +00:00
b6ff93b834 boldify Leaving of self-generated data on per-test basis too 2011-07-09 18:49:59 +00:00
93dabe189e more clear summary output 2011-07-09 18:00:05 +00:00
697b3c227d highlight removing of self-generated data 2011-07-09 17:19:42 +00:00
f79f3db3db split off common routines for boldification of FAILs 2011-07-09 16:31:46 +00:00
63ce272077 use tput to highlight some FAILs 2011-07-09 16:27:43 +00:00
4ca37c7255 unification 2011-07-09 15:57:52 +00:00
b0eaa673fa don't hardcore paths to genisoimage and mkisofs 2011-07-09 14:42:18 +00:00
8b95d59332 re-run print size test several times to minimize possible disk cache impact 2011-07-09 10:17:29 +00:00
1d6d36488b drop useless bits 2011-07-09 09:58:57 +00:00
0ad9ebf1a6 version goes into the common section 2011-07-09 09:53:39 +00:00
df87273ceb use common section in the heading of the log file, versioning etc 2011-07-09 09:49:10 +00:00
cbd20b1381 more clear formatting, drop commented cruft 2011-07-09 09:27:12 +00:00
6fc4e161b0 more clear formatting 2011-07-09 09:18:01 +00:00
d926357222 more clear formatting 2011-07-09 09:13:06 +00:00
c4381dad52 more clean formatting 2011-07-09 08:45:38 +00:00
3d68267083 check for libjte support in the tested binary and quit gracefully; drop lots of old commented cruft 2011-07-09 08:23:58 +00:00
bda34a1496 hint about req. free space, formatting cleanup, drop completed todo items 2011-07-09 07:33:33 +00:00
8b9cafefef take extra measures we are in sepf-generated data directory before removing self-generated cruft 2011-07-08 16:01:17 +00:00
96c3c3ddb3 drop template config files as they are not needed anymore 2011-07-08 15:03:21 +00:00
805c43ac76 completed transitioning, docs reflect that too 2011-07-08 14:18:54 +00:00
0ad0433554 Documented changes and release timestamp 2011-07-08 13:31:23 +00:00
7fd0fc3b77 Version leap to libisoburn-1.1.3 2011-07-08 13:28:45 +00:00
0441eee147 Version leap to libisoburn-1.1.3 2011-07-08 13:24:57 +00:00
072ba71c2d unification cont. 2011-07-08 13:05:21 +00:00
7918b6cd24 converted to the unified usage pattern 2011-07-08 12:42:05 +00:00
8cfd6308bb more unification 2011-07-08 12:16:44 +00:00
1466254129 add self-contained and unified option parsing 2011-07-08 10:32:22 +00:00
0c8b8b86e5 new todo item 2011-07-08 08:15:39 +00:00
cce878e51e TODO item: try to drop the concept of config files 2011-07-07 15:04:23 +00:00
90d62adfe7 unify output, drop completed TODO item 2011-07-07 14:49:48 +00:00
1502f19b6c add few more keywords indicating failure 2011-07-07 14:28:32 +00:00
a68fb7847f check -o redirected and piped output 2011-07-07 14:11:12 +00:00
6b0037001c Updated change log and web page 2011-07-07 12:27:41 +00:00
3f58069723 Bug fix: Since 1.0.6: Unreadable image produced by: xorrisofs ... >image.iso 2011-07-07 11:44:45 +00:00
53a2eb9c5b new item: run_all_releng XORRISO [-keep] 2011-07-07 09:42:01 +00:00
e0c75394a7 simple operation item 2011-07-07 07:58:57 +00:00
497cea0773 drop CXX completed item, add simple operation item 2011-07-07 07:56:44 +00:00
8a227d87e7 Hopefully fixed Debian bug 632865: blank ISO images with drive role 5 2011-07-06 19:01:55 +00:00
4e8175da49 more informational output 2011-07-06 11:30:10 +00:00
9a9f294595 static checks are automated too 2011-07-06 07:37:01 +00:00
3a8f630e70 update log files locations 2011-07-06 07:34:52 +00:00
341f368e99 generate more readable log 2011-07-06 07:02:55 +00:00
32290cbc05 extend LD_LIBRARY_PATH 2011-07-05 18:58:58 +00:00
26997b2e33 use extern C so that the compiler considers C bindings 2011-07-05 18:52:20 +00:00
d80c454bbf se LD_LIBRARY_PATH just for the test run of binaries provided by releng_cxx 2011-07-05 18:40:26 +00:00
d4822af890 drop using namespace burn, fix in libisoburn C++ API, rev.4062 2011-07-05 15:04:31 +00:00
d25886af9a Made libisoburn.h ready for use with C++ without importing namespace "burn" 2011-07-05 14:54:33 +00:00
4207cac165 use local libisoburn.h 2011-07-05 12:54:16 +00:00
e1ef1bd01e D'oh useing namespace burn as some declarations are under burn namespace in libburn 2011-07-05 12:45:01 +00:00
03f18b78d0 maintain a separate list of keywords for xorriso+underlying libs and other apps 2011-07-05 12:07:32 +00:00
893f22611e shorten output a bit 2011-07-05 11:14:54 +00:00
3a6de23c66 test libisoburn/libisoburn 2011-07-05 11:14:15 +00:00
c5caadac8b drop CC_FLAGS and check for codesamples emptiness 2011-07-05 10:53:18 +00:00
721dd08609 use proper incl path 2011-07-05 10:50:53 +00:00
04697b8099 move first code sample in target directory, and use that as well 2011-07-05 10:27:27 +00:00
0db81a8545 introduce separate directory for code samples 2011-07-05 10:25:57 +00:00
9e7377c850 start c++ cleanness test 2011-07-05 09:18:31 +00:00
047955a1bb add C++ cheat compile test 2011-07-05 07:57:55 +00:00
578097df1e drop completed item of log file examination 2011-07-05 05:47:26 +00:00
86e16e949b improve summary formatting 2011-07-05 05:45:48 +00:00
321d9ae044 burning tests/ideas mailed by Thomas 2011-07-04 17:43:15 +00:00
95ab0b811e examine grap exit code too and printf accordingly 2011-07-04 17:16:47 +00:00
03f55f8572 more clear log file examination output 2011-07-04 16:33:10 +00:00
c808501c19 cleanup both logs if there 2011-07-04 16:07:04 +00:00
9c90c20734 start a simple log file examination 2011-07-04 16:05:24 +00:00
1076ad2970 preserve the previous log too 2011-07-04 14:58:53 +00:00
01d22b0390 consider using confget, rather than NIH-option-interpreter 2011-07-04 12:46:45 +00:00
2464eac517 Reacted on warnings of -Wunused-but-set-variable 2011-07-04 12:15:24 +00:00
03c417206d Reacted on warnings of -Wunused-but-set-variable 2011-07-04 12:14:22 +00:00
249f13b6ed Reacted on warnings of -Wunused-but-set-variable 2011-07-04 10:59:21 +00:00
8deeff4de8 Reacted on warnings of -Wunused-but-set-variable 2011-07-04 10:58:24 +00:00
ee56d3c86b Updated change log and web page 2011-07-04 09:51:47 +00:00
7d2d5f7e3f New option -list_speeds 2011-07-04 09:29:00 +00:00
a44ffcb6f5 Removed a premature reference to upcomming function 2011-07-03 20:30:54 +00:00
53793b345e todo item; when boot catalog gets ready 2011-07-03 20:05:05 +00:00
f6c8f28b97 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 19:47:55 +00:00
fdccef6b53 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 19:42:04 +00:00
d76591cc47 Enabled extraction of the boot catalog file to disk filesystem 2011-07-03 19:36:56 +00:00
44904069a4 warn of leaving a previously downloaded image behind, human-readable size included 2011-07-03 19:11:13 +00:00
148af27ab9 more consistent descriptions 2011-07-03 18:54:48 +00:00
6a8a32f96c more consistent descriptions 2011-07-03 18:46:35 +00:00
dda797a82e more consistent descriptions 2011-07-03 18:45:10 +00:00
e649703d1e more consistent descriptions for additional apps 2011-07-03 18:41:13 +00:00
d128826ad9 more cleancut description of leaving/removing step 2011-07-03 18:37:51 +00:00
188f44b93a mention jigit >=1.18 2011-07-03 18:33:54 +00:00
d25db0a6ef cleanup on prepature exits when self-generated data has been produced 2011-07-03 18:31:10 +00:00
73090436d4 Requiring libsofs-1.1.1 now 2011-07-03 18:19:05 +00:00
cf95cce64f use pseudo paths to second-guess 2011-07-03 17:12:46 +00:00
e6ef2e456f check for mkfs.msdos existence, recommend dosfstools URL for installation 2011-07-03 17:07:56 +00:00
a56e92b8c5 re-add /path/to/xorriso [-keep]
(forgotten in the heat of reconstruction)
2011-07-03 16:55:15 +00:00
8d13cf71e6 use readlink rather than realpath 2011-07-03 16:45:16 +00:00
73f0442b0d Reacted on warnings of -Wtype-limits 2011-07-03 15:51:14 +00:00
9b77004fbc boot options/tweaks for releng_isojigdo are now completed 2011-07-03 15:11:16 +00:00
cb8bbd6c53 enable settings via cmdline too 2011-07-03 15:07:36 +00:00
4b44b023e9 complete the cleanup facility 2011-07-03 14:25:08 +00:00
2c0d8c90ab print the xtract command 2011-07-03 10:11:23 +00:00
d30f7dbec6 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 09:35:30 +00:00
d41b767ac0 fix formatting 2011-07-03 09:29:16 +00:00
73adaf89ee Reacted on warnings of -Wunused-but-set-variable 2011-07-03 09:25:02 +00:00
038b2023d8 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 09:17:26 +00:00
fa31cb0df7 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 09:12:43 +00:00
45cf24c6fa check for extraction dir existence 2011-07-03 09:04:09 +00:00
3c3e485ec9 move self-generated files to GEN_DATA_DIR, except and pre-existing image and its extracted tree 2011-07-03 08:57:30 +00:00
14b32afd54 Reacted on warnings of -Wunused-but-set-variable 2011-07-03 08:56:56 +00:00
8a398c7233 fix isolinux location 2011-07-03 08:23:49 +00:00
2ee00d05a3 shorten the template options; tested binary, everything else if autogenerated and known run-time 2011-07-03 07:58:20 +00:00
5d674abca7 check for boot files existence 2011-07-03 07:52:17 +00:00
c7a1e08afb moving to decomposition of existing image, and re-using its contents 2011-07-03 07:46:21 +00:00
5360404f82 sort out exit codes 2011-07-02 18:55:09 +00:00
f8a36b3fc9 drop completed items 2011-07-02 18:00:33 +00:00
8adba1d7c3 use a single log file for stdout and stderr 2011-07-02 17:55:04 +00:00
d2033fa31d hardlinks is now content, former content to e merged into new content test 2011-07-02 17:35:27 +00:00
ab7614756a drop unused config file, clarify new releng template 2011-07-02 17:29:56 +00:00
ae5a98d905 update samples too 2011-07-02 17:26:51 +00:00
0c785e1f3d renamed to releng_<title> 2011-07-02 17:25:00 +00:00
0297b72137 Reacted on warnings of -Wunused-but-set-variable 2011-07-02 15:33:46 +00:00
1c9a35584a added some TODO items 2011-07-02 15:28:37 +00:00
e4d18ca81e merge all automated (already scripted) tests in a single section, that is releng_* 2011-06-30 16:09:01 +00:00
c8013f9844 sort out help message 2011-06-29 17:46:31 +00:00
611bbf8c5d completed print_size script 2011-06-29 17:44:03 +00:00
43ab782677 completed config migrarition to ~/.libburnia-releng/; advance print_size almost there 2011-06-29 17:21:04 +00:00
4e822eb9c7 start print size test, not finished yet 2011-06-28 20:58:56 +00:00
0cf025c018 use standardized variables 2011-06-28 18:45:49 +00:00
701764f6d1 use standardized variables 2011-06-28 18:42:08 +00:00
07a6b088d6 clean logs on -cleanup, report their location 2011-06-28 17:55:09 +00:00
d388cf1c28 improve description 2011-06-28 17:34:53 +00:00
6e671c83e9 drop completed items, polish core text 2011-06-28 17:33:08 +00:00
8befd096a7 prefix config variables with RELENG_ 2011-06-28 16:20:31 +00:00
e5236f5da8 Renamed releng/tmp to releng/releng_generated_data 2011-06-28 15:32:24 +00:00
1b235f5066 use/document data directory 2011-06-28 15:17:28 +00:00
2269d57890 Renamed test_hardlinks to releng_hardlinks 2011-06-28 14:58:34 +00:00
bf4e56a779 Adapted test_hardlinks to newest agreements with George 2011-06-28 14:47:30 +00:00
d417ba720e Renamed releng/tmp to releng/releng_generated_data 2011-06-28 14:39:20 +00:00
7b74d70074 split the test concept's core from the test list 2011-06-28 12:50:55 +00:00
e568763281 apply usage of releng_generated_data; drop completed TODO items 2011-06-28 12:30:36 +00:00
d18f3002af A test with non-added file releng/tmp/test 2011-06-28 08:48:02 +00:00
8a73fbcfde Removed suffix .result from tmp/test_hardlinks 2011-06-28 07:21:45 +00:00
e832ab8610 Option -fail for test_hardlinks to simulate failure, moved tmp to releng/tmp 2011-06-28 07:12:35 +00:00
bf6bcf6dda updated to make latest conventions more clear 2011-06-28 07:02:15 +00:00
296c3d18bb use /home/george/.libburnia-releng/releng_build_isojigdo.conf 2011-06-28 06:51:41 +00:00
04cff73883 Adjusted names of config variables in test_hardlinks 2011-06-28 06:51:40 +00:00
e81c3f6222 Adapted test_hardlinks to newly defined general test rules 2011-06-28 06:43:15 +00:00
fb527762ec updated to the latest conventions 2011-06-28 06:35:36 +00:00
c4739935cb add new items for option interpreter, config files, tmp generated data 2011-06-28 05:49:10 +00:00
7d4aac4a84 use self basename; sort numerically to get minimal determinism 2011-06-27 19:23:14 +00:00
e0a754ff85 use basename for self 2011-06-27 18:06:29 +00:00
44757a2f15 add prescription of running tests 2011-06-27 17:45:00 +00:00
6f7d084414 Reporting commands and their arguments as DEBUG messages before execution 2011-06-27 17:24:59 +00:00
2027441330 Polished hardlink test 2011-06-27 16:55:37 +00:00
966ffe7e66 Bug fix: -update_r scheduled non-existing files for hardlink update 2011-06-27 16:09:13 +00:00
cb3a532165 use basename for SELF; FAIL rather than FAILED 2011-06-27 15:51:13 +00:00
2a6e8d45bd drop a leftover 2011-06-27 15:38:48 +00:00
98decf1e62 pass -rc -keep -cleanup to subordinate scripts 2011-06-27 15:36:56 +00:00
cdff498239 Polished hardlink test 2011-06-27 15:21:14 +00:00
5209e791b9 add -cleanup to the template script accordingly 2011-06-27 14:56:36 +00:00
248cc97e0b support -cleanup 2011-06-27 14:50:50 +00:00
050b93514a implement -keep 2011-06-27 14:31:39 +00:00
88378b25af Polished hardlink test 2011-06-27 14:28:18 +00:00
a1917d0014 renamed to disambiguate with non-releng scripts 2011-06-27 14:25:37 +00:00
b66456df67 move generated data to script.result directory to ease identification and eventual removal 2011-06-27 14:23:50 +00:00
2750798aef Polished hardlink test 2011-06-27 12:33:25 +00:00
f2205528b5 Added rules to releng/TODO, new options -keep, -clean_up, deprecated -clean 2011-06-27 12:06:41 +00:00
de5750e41e New test test_hardlinks 2011-06-27 10:59:57 +00:00
54e65fa11e add a template script to start with - template_new_releng 2011-06-26 23:44:51 +00:00
8f4c0e82ef check for JTE support within the tested xorriso build 2011-06-26 21:36:31 +00:00
3dc6d83db7 use different exit codes for ayn failure 2011-06-26 21:06:32 +00:00
44f6e831dc formatting 2011-06-26 20:57:22 +00:00
3565aa36fd added sketch sample, formatting 2011-06-26 20:51:16 +00:00
0beb5b9511 FAIL string to stdout on failure 2011-06-26 15:52:42 +00:00
d0162610b1 pipe thru sort so we get more deterministic list of executed tests 2011-06-26 15:44:09 +00:00
e007f9e75c require releng_ for test scripts run by run_all 2011-06-26 15:26:15 +00:00
82998070d8 added total time elapsed 2011-06-26 15:16:10 +00:00
c7eba497f9 exit 100 for incomplete scritps 2011-06-26 14:54:49 +00:00
bcfd3d263e delivering a new test protocol 2011-06-26 14:47:46 +00:00
ac53aee292 start logs with 'log.*' to disambiguate a bit 2011-06-26 14:38:09 +00:00
d0015e78b9 measure time spent per test 2011-06-26 14:23:13 +00:00
f0d0ac6f2d fix dollar typos 2011-06-26 14:07:54 +00:00
d5d056f591 start a master script 2011-06-26 14:06:38 +00:00
c1267230b2 more todo items 2011-06-26 13:20:28 +00:00
38bc1c6884 simple installation instructions 2011-06-26 13:10:07 +00:00
a3b4272509 give some instructions 2011-06-26 11:12:16 +00:00
f9bba7313e give pointers to jigit upstream site 2011-06-26 05:56:15 +00:00
96f5c87336 add xorriso -find / and bsdtar -xf, to be decided later 2011-06-25 19:18:23 +00:00
b2b68a44c3 Collected a few ideas for releng_check_isocontent 2011-06-25 18:28:00 +00:00
c4c0fc061b isocontent emplty confing file 2011-06-25 16:59:07 +00:00
5bd9690f0e fix test names, start ISO content check 2011-06-25 16:58:16 +00:00
161c8e5ccc added few comments 2011-06-25 16:18:39 +00:00
4fd4026b93 boot section, not completed yet 2011-06-25 16:11:43 +00:00
e1ec71358e typos 2011-06-25 14:25:49 +00:00
ac01ce83dd more instructions given 2011-06-24 13:02:05 +00:00
2babb12216 template config file 2011-06-24 13:00:33 +00:00
47ae2279bd call xorriso -version too 2011-06-24 12:53:07 +00:00
ddc43668c3 more todo items 2011-06-24 12:27:45 +00:00
b3e47da537 check for XOR availability 2011-06-24 07:13:30 +00:00
1d77ab8fbf check for jigit-mkimage existence 2011-06-23 16:49:42 +00:00
224042206f add todo list 2011-06-23 16:31:12 +00:00
c5a10bda04 more descriptive name for starting dir 2011-06-23 16:25:15 +00:00
92f0f89a40 safety net, change to starting directory nefore rm'ing self-generated stuff 2011-06-23 16:22:17 +00:00
add79ca00d trap diff exit code, hint xorriso -pvd_info 2011-06-23 16:09:47 +00:00
4e7b3ce7ae TODO: trap diff exit code 2011-06-23 14:50:04 +00:00
a2cb083f42 xorriso -quiet, spew config items instead 2011-06-23 14:48:36 +00:00
369dc06429 valgrind, iso content check 2011-06-23 13:55:17 +00:00
6bf81b722f fix some spelling and typos 2011-06-23 13:43:06 +00:00
ad31b3eba0 hint remaining checks 2011-06-23 11:14:41 +00:00
356fd78f9a test renamed to releng_build_isojigdo 2011-06-23 11:02:52 +00:00
100f898d80 check for config file and jigdo-gen-md5-list existance 2011-06-23 11:01:39 +00:00
eeb763bcae support for config file or cmdline arguments 2011-06-23 10:34:39 +00:00
2e1f9fa4f4 boot section; WIP, not completed yet 2011-06-22 20:32:09 +00:00
b62a9f269e build a compound xorriso cmdline, on demand 2011-06-22 20:20:00 +00:00
0818711176 fix gprof instructions 2011-06-22 16:50:46 +00:00
0527ba11c4 use TEST consistently 2011-06-22 15:03:38 +00:00
256db7fda1 use more declarative style in test descriptions 2011-06-22 14:44:07 +00:00
59a8eed523 start with simple honoring of few options 2011-06-22 14:43:06 +00:00
961e6c4859 fix text encoding 2011-06-22 13:33:10 +00:00
57ab047e36 propset as executable 2011-06-22 13:28:24 +00:00
3027040b70 Beginning to create a test suite for libisoburn and xorriso 2011-06-22 09:26:29 +00:00
db7f9526fe Documented changes and release timestamp 2011-06-18 18:01:02 +00:00
dfa47196ba Version leap to libisoburn-1.1.1 2011-06-18 17:53:18 +00:00
54ad5d37d0 Avoided the use of the term 'eventual' for the meaning 'if applicable'. 2011-06-17 14:39:24 +00:00
03ab9bab8f Added option -I . to aclocal in bootstrap script on advise of George Danchev 2011-06-09 06:14:05 +00:00
d3a3874bec Introduced AC_CONFIG_MACRO_DIR() and ACLOCAL_AMFLAGS on advise of George Danchev 2011-06-08 19:43:18 +00:00
365ed088fc Fixed a typo in a hint about fast blanked DVD-RW 2011-06-07 14:47:09 +00:00
85805ee265 New option -close_damaged 2011-06-01 16:52:29 +00:00
59154653db With -status : always display setting of -abort_on 2011-05-31 09:30:02 +00:00
f319668212 Improved error messages if DVD-RW media can only be written with -close on 2011-05-29 10:01:56 +00:00
96cc0a529c Removed quotation marks in message introduced by rev3842 2011-05-29 09:56:23 +00:00
4bd8c8d136 Report damaged track with "Media status :" 2011-05-26 15:18:41 +00:00
b4268c4dc5 Requiring libburn-1.0.7 now 2011-05-26 15:17:45 +00:00
f6a3170907 Reacted on static code checker warning reported by George Danchev 2011-05-22 18:14:56 +00:00
cd606177c6 Added options -Wextra -Wno-unused-parameter for gcc 2011-05-22 14:37:06 +00:00
4d10375cb9 Reacted on compiler warning about inactivated if statement 2011-05-20 17:58:18 +00:00
534f6f07fa Updated change log and web page 2011-05-20 09:38:28 +00:00
64bb496591 Revoked experimental change which sneaked into SVN by rev 3737 2011-05-19 13:44:08 +00:00
ade292eb7c Reacted on -Wsign-compare warnings of gcc 2011-05-19 13:39:17 +00:00
ac85550dac Replaced some large local variables by other means in xorriso/check_media.c 2011-05-19 13:38:14 +00:00
a27a1ae530 Bug fix: The attempt to blank already blanked DVD-RW was not gracefully blocked 2011-05-19 13:37:16 +00:00
30e97c7e7a Mentioned the need to define uint32_t when including libisoburn.h 2011-05-19 11:13:07 +00:00
7bffde57fa Polished node "Bugreport" in manuals 2011-05-18 07:03:39 +00:00
32e3389739 Fixed refusal to run with command -as introduced by rev 3819 2011-05-18 06:34:47 +00:00
d810dc7064 New rules for translating several texi @-commands to man page 2011-05-17 17:37:00 +00:00
f28da0c7ce New flag bit1 of API call Xorriso_prescan_args() reports unknown commands 2011-05-17 15:16:56 +00:00
55d6788bb6 Updated change log and web page 2011-05-17 11:51:38 +00:00
f3936045de Updated generated manuals 2011-05-17 09:42:51 +00:00
f855071fb7 Wrapped @command{} around the word xorrisofs in its manual 2011-05-17 09:41:04 +00:00
2492debddc Added to the manual instructions for bug reporting 2011-05-17 09:28:05 +00:00
3f4936519d Implemented texi-to-man translation rule about {...} recursion 2011-05-17 09:18:18 +00:00
be0b15a8e7 Adjusted line lengths to less than 80 chars in source of xorriso manual 2011-05-16 19:20:07 +00:00
889b92d359 Made xorriso version number visible in manuals 2011-05-16 18:47:09 +00:00
97fda364db Checking for unknown xorriso commands already in Xorriso_prescan_args() 2011-05-16 13:43:16 +00:00
0f82692494 Replaced german macro parameter name by an english one 2011-05-16 13:32:07 +00:00
872a23a59f Bug fix: xorriso command -add_plainly "any" did not add all file sto the image 2011-05-16 13:30:38 +00:00
8a6f217c42 Patch by Mats Erik Anderson: wrap @command{} around the word xorriso 2011-05-14 10:50:08 +00:00
87321c252d Added a rule to the conversion prescription for man pages 2011-05-13 17:49:28 +00:00
53a4ead6a0 Added a rule to the conversion prescription for man pages 2011-05-13 16:47:52 +00:00
dca54e8898 Corrected a typo in man page of xorrisofs 2011-05-13 12:50:42 +00:00
82005e6ded GNU xorriso now contains libisofs-1.0.9 2011-05-12 17:54:07 +00:00
39931117f0 Requiring libisofs-1.0.8 now 2011-05-12 17:51:28 +00:00
7e2d7e5997 Reacted on -Wsign-compare warnings of gcc 2011-05-09 18:14:29 +00:00
37987ecfe6 Reacted on -Wsign-compare warnings of gcc 2011-05-09 18:12:16 +00:00
31300231df Replaced some large local variables by other means in 2011-05-09 15:49:47 +00:00
cc30f4043b Replaced some large local variables by other means 2011-05-08 17:47:43 +00:00
85288aeb8f Replaced some large local variables by other means in xorriso/write_run.c 2011-05-08 08:39:01 +00:00
ab65825117 Replaced some large local variables by other means in xorriso/text_io.c 2011-05-07 18:50:02 +00:00
230a0d6e19 Replaced some large local variables by other means in xorriso/read_run.c 2011-05-07 16:57:54 +00:00
6c6a0770a4 Enabled drive addresses of form mmc:/dev/srX with option -mount 2011-05-07 10:51:35 +00:00
2f84695278 Bug fix: -mount_opts "shared" worked only with -osirrox "o_excl_off" 2011-05-07 10:50:13 +00:00
809c28e671 Bug fix: -mount_opts "shared" worked only with -osirrox "o_excl_off" 2011-05-07 10:49:49 +00:00
69909915df Replaced some large local variables by other means in xorriso/parse_exec.c 2011-05-06 15:18:39 +00:00
7ed67018b7 Made use of Text_shellsafe bit1 for messages with two file names 2011-05-06 13:20:36 +00:00
09cec3aa3d Commited definition of Xorriso_alloc_meM which is needed since 30 revisions 2011-05-06 12:11:50 +00:00
12341a9bf3 Corrected use of unitialized variables found by valgrind 2011-05-06 12:08:12 +00:00
3c6db0ed4d Replaced some large local variables by other means in xorriso/opts_p_z.c 2011-05-06 12:06:44 +00:00
65df49006f Introduced flag bit1 with Text_shellsafe() for double sized target string 2011-05-06 12:05:39 +00:00
f2fc3957ce Corrected a mistake introduced with rev 3768 2011-05-05 16:39:08 +00:00
1412bf56a9 Replaced some large local variables by other means in xorriso/opts_i_o.c 2011-05-05 16:38:12 +00:00
5b1701a5c0 Added newline character to output of -errfile_log plain -I 2011-05-05 12:28:31 +00:00
c1bbeff43a Reacted on compiler warning about rev 3770 2011-05-05 12:19:32 +00:00
9c1fc23901 Replaced some large local variables by other means in xorriso/opts_d_h.c 2011-05-05 12:16:19 +00:00
f1b5626786 Closed a memory leak found by valgrind 2011-05-05 10:52:52 +00:00
7e0165ff4c Replaced some large local variables by other means in xorriso/opts_a_c.c 2011-05-05 10:51:27 +00:00
165c82c394 Replaced some large local variables by other means in xorriso/misc_funct.c 2011-05-05 08:14:09 +00:00
bda4601bd1 Replaced some large local variables by other means in xorriso/match.c 2011-05-05 07:52:14 +00:00
13842113f4 Replaced some large local variables by other means in xorriso/lib_mgt.c 2011-05-04 17:16:15 +00:00
6442ca224b Replaced some large local variables by other means in xorriso/iso_tree.c 2011-05-04 16:58:16 +00:00
d11a83dd5e Reacted on compiler warning about rev 3750 and 3754 2011-05-04 15:24:09 +00:00
bcd18471bd Closed a memory leak found by valgrind 2011-05-04 15:18:11 +00:00
1f8627086f Replaced some large local variables by other means in xorriso/cmp_update.c 2011-05-04 15:17:10 +00:00
153b41c64d Replaced some large local variables by other means in xorriso/iso_manip.c 2011-05-04 15:16:06 +00:00
11e0b38dbb Closed a memory leak found by valgrind 2011-05-03 11:52:07 +00:00
c5855dd81d Closed a memory leak found by valgrind 2011-05-03 11:51:26 +00:00
bcf7dc2131 Replaced some large local variables by other means in xorriso/iso_img.c 2011-05-03 11:50:43 +00:00
a2a7240e6a Replaced some large local variables by other means in xorriso/findjob.c 2011-05-03 10:07:19 +00:00
97fb4807a5 Replaced some large local variables by other means in xorriso/filters.c 2011-05-03 09:58:26 +00:00
514302d9ee Replaced some large local variables by other means in xorriso/emulators.c 2011-05-03 09:10:40 +00:00
bd81d5cd72 Closed memory leaks found by valgrind 2011-05-03 08:54:38 +00:00
710ed4a135 Closed a memory leak found by valgrind 2011-05-03 06:29:50 +00:00
1406459bd2 Clarified and updated API documentation of Xorriso_prescan_args() 2011-05-02 21:13:37 +00:00
b367242329 Replaced some large local variables by other means in xorriso/drive_mgt.c 2011-05-02 21:12:45 +00:00
3d57d19a90 Better reporting of memory shortage with rev 3747 2011-05-02 19:18:45 +00:00
59c60d410e Replaced some large local variables by other means in xorriso/disk_ops.c 2011-05-02 19:16:41 +00:00
84d2a2ba9d Replaced some large local variables by other means which save stack space 2011-05-02 12:19:18 +00:00
4b86308829 Replaced some large local variables by other means which save stack space 2011-05-02 10:03:11 +00:00
54878a538e Replaced some large local variables by other means which save stack space 2011-05-02 09:16:27 +00:00
4926c98dd4 Replaced some large local variables by other means which save stack space 2011-05-02 09:09:10 +00:00
686659514b Saved more CPU cycles by optimistic adding of file objects 2011-04-30 12:11:27 +00:00
2fe76f0f0e Downgraded extraction error from FAILURE to SORRY (for new -abort_on default) 2011-04-27 15:08:09 +00:00
b2762cf5d8 Saved some CPU cycles when adding wide directory trees 2011-04-27 14:36:51 +00:00
e93f0527c4 Updated change log and web page 2011-04-23 17:41:21 +00:00
fd0b9bb937 New option -signal_handling 2011-04-23 15:23:35 +00:00
f860e24e58 Avoiding repeated PVD read attempts if first reading of PVD yielded error 2011-04-22 08:18:41 +00:00
be08aa8b5c Mentioned success and failure reports of partition offset 2011-04-19 09:10:02 +00:00
2ffae83ef6 Disabled HAVE_DOT in doxygen.conf 2011-04-15 12:49:32 +00:00
cd0d5ef4f6 Documented changes and release timestamp 2011-04-14 08:22:57 +00:00
52791831d3 Version leap to libisoburn-1.0.9 2011-04-14 08:19:45 +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
b82abcf210 Version leap to libburn-0.8.7 2010-09-17 08:22:19 +00:00
252a845f2b Adapted GNU xorriso to version leap libisofs-0.6.37 2010-09-15 09:20:58 +00:00
44310ae57e Requiring libisofs-0.6.36 now 2010-09-15 09:16:32 +00:00
8d9d900608 Meaningful change log file derived by George Danchev from web site 2010-09-15 06:57:53 +00:00
06c1540797 Removed development marks 2010-09-11 12:51:27 +00:00
cc672d525b Removed development marks 2010-09-11 12:50:36 +00:00
8239d082ca Enabled multi-session with partition offset 2010-09-10 17:13:00 +00:00
d54efd4bc2 Enabled multi-session with partition offset 2010-09-10 17:10:03 +00:00
5af8ad46f4 Bug fix: Re-enabled use of iso_write_opts_set_rrip_1_10_px_ino() 2010-09-06 10:34:35 +00:00
9ce2aabe28 New -as mkisofs options -partition_offset, -partition_hd_cyl, -partition_sec_hd 2010-09-05 11:40:13 +00:00
21bd5b5d42 New boot_image boot specs partition_offset, partition_hd_cyl, partition_sec_hd 2010-09-05 11:37:45 +00:00
0e755f48c9 New API function isoburn_igopt_set_part_offset(), requiring libisofs 0.6.35 2010-09-05 11:36:53 +00:00
4e4b789753 This was obviously forgotten to commit with rev 3289 2010-09-04 10:08:55 +00:00
87ebfde08b Mentioned support for DVD-R DL as single-session media 2010-08-21 10:30:45 +00:00
4771254d1f New -as mkisofs option -hard-disk-boot, enabled -b without -no-emul-boot 2010-08-18 18:19:30 +00:00
689bcf0168 New -boot_image specifier emul_type=none|hard_disk|floppy 2010-08-18 18:17:14 +00:00
fb35f70c6e New -as mkisofs option -e from Fedora genisoimage 2010-08-18 10:33:04 +00:00
3d933149ff Hopefully silenced warnings of doxygen on Debian buildd 2010-08-09 09:21:16 +00:00
6c939780e8 Missing device,inode numbers caused -compare_r to report a difference 2010-07-31 08:55:15 +00:00
d06c6e69f8 Corrected FILE_PATTERNS 2010-07-30 17:10:22 +00:00
1c0ee8fc32 Removed problematic DETAILS_AT_TOP to silence warning of Debian buildd 2010-07-30 17:06:40 +00:00
3ee02c766d New option -preparer_id, -as mkisofs options -p and -preparer 2010-07-30 15:52:09 +00:00
bb16a5615f Corrected manual text about -read_mkisofsrc 2010-07-29 20:17:05 +00:00
d78b29005d Detached make target "doc" from target "all". 2010-07-29 16:50:16 +00:00
df685e89ac Made behavior of -as mkisofs with unknown options more similar to original 2010-07-08 15:59:45 +00:00
1942a636f3 Mentioned that public API calls must be in libisofs/libisofs.ver 2010-07-06 11:45:45 +00:00
050871e1f2 Let configure perform linker test with --version-script if enabled 2010-07-06 11:41:46 +00:00
a58ca098b7 Hiding all non-API symbols from the linker by use of --version-script 2010-07-05 12:29:50 +00:00
75f864a061 Removed definition of phantom xorriso options 2010-07-05 09:05:01 +00:00
592424a420 Added -L/usr/local/lib to libisoburn LDFLAGS for Solaris 2010-07-04 13:30:32 +00:00
f2ac46cbc0 Documented changes and release timestamp 2010-07-02 20:26:48 +00:00
04bd02972d Version leap to libisoburn-0.6.1 2010-07-02 20:25:51 +00:00
7b9088f8c9 Adapted GNU xorriso to version leap libburn-0.8.5 2010-06-30 18:19:51 +00:00
5272cc0afb Requiring libburn-0.8.4 now 2010-06-30 18:19:06 +00:00
4b59808ee3 Adapted GNU xorriso to version leap libisofs-0.6.35 2010-06-29 10:23:25 +00:00
31782dc75b Requiring libisofs-0.6.34 now 2010-06-29 10:21:53 +00:00
ac463ac7a4 Removed outdated doc statement about hidden files 2010-06-28 10:15:59 +00:00
66efb225eb Made option -lsl mark files in hidden directories as hidden 2010-06-28 10:11:10 +00:00
f0a9a0e29a Supressing "Thank you for being patient" with times smaller than 2 2010-06-28 10:09:49 +00:00
6f371778c6 New -as mkisofs options -abstract, -biblio, -copyright 2010-06-26 11:43:56 +00:00
e57f8bf8f3 New options -copright_file , -biblio_file , -abstract_file 2010-06-26 11:40:36 +00:00
10233adb87 New option -read_mkisofsrc interprets .mkisofsrc 2010-06-25 17:59:01 +00:00
6ab8ffc137 Appending eventual strerror() to event message line rather than to new line 2010-06-25 17:44:13 +00:00
5e8c60713a New -as mkisofs option -file-mode 2010-06-25 10:22:28 +00:00
ad1c2fa1b8 New -as mkisofs option -dir-mode 2010-06-25 09:59:20 +00:00
cfd39f3d96 New -as mkisofs option --boot-catalog-hide 2010-06-24 08:49:04 +00:00
f38e4ff854 Moved call of iso_image_set_boot_catalog_hidden() to Xorriso_write_session() 2010-06-23 17:57:16 +00:00
67139de9be Reset xorriso->boot_count when image gets discarded 2010-06-23 17:54:41 +00:00
26ac86f78a Revoked unneeded change of revision 3290 2010-06-23 15:24:21 +00:00
dc57c2bbb9 Updated the missing header file 2010-06-23 15:19:50 +00:00
32b7c33e10 Included a missing header file 2010-06-23 15:16:10 +00:00
bd82bf66e3 New -as mkisofs options -hide, -hide-joliet, -hide-list, -hide-joliet-list 2010-06-23 13:43:40 +00:00
bf24ba81c5 Made -quoted_path_list continue to execute words after error in the same line 2010-06-22 13:27:25 +00:00
c54b5bc6a2 New option -hide 2010-06-20 16:48:28 +00:00
5a6024a1cc Trying to silence compiler warnings of OpenSuse Build Service 2010-06-20 14:16:40 +00:00
ec1cb90cba New find action -hide, new find test -hidden 2010-06-20 07:22:24 +00:00
eb5639b017 New find test -disk_name 2010-06-19 16:56:15 +00:00
cf8f6cb888 New -boot_image bootspec cat_hidden= 2010-06-19 15:21:36 +00:00
d1c2ec7a5b Requiring libisofs-0.6.33 now 2010-06-18 11:32:37 +00:00
b20313f6a0 Bug fix: -as mkisofs option -volset was wrongly interpreted like -volid 2010-06-18 05:32:05 +00:00
21b484f644 Made patch_lba0= more modest with overwriting. 2010-06-16 14:03:46 +00:00
b511fe46aa Bug fix: check_media patch_lba0= could install wrong image size 2010-06-16 10:57:40 +00:00
c9e6c44be3 Clarified API description of isoburn_read_iso_head() 2010-06-16 10:55:44 +00:00
ed3eede4aa Enabled use of libreadline on Solaris by eventually linking -lcurses 2010-06-15 16:05:55 +00:00
58f1bb249c Requiring libburn-0.8.3 now (because SIGWINCH handling on Solaris) 2010-06-15 16:02:20 +00:00
2cda559ed9 Documented changes and release timestamp 2010-06-14 09:34:45 +00:00
e5e52cdf09 Version leap to libisoburn-0.5.9 2010-06-14 09:33:43 +00:00
8f5d65aeef Avoided double printing of xorriso version header line 2010-06-14 07:34:15 +00:00
5633c228b1 Untangled messed-up relation between -hardlinks and -compliance 2010-06-13 13:36:24 +00:00
97e4d35595 Updated docs about existence of xorriso API in libisoburn 2010-06-13 11:04:08 +00:00
2de7a761eb Removed surplus test expression 2010-06-13 10:57:30 +00:00
569905e456 Adapted xorriso-standalone to version leap libburn-0.8.3 2010-06-11 17:51:42 +00:00
ee606de555 Requiring libburn-0.8.2 now 2010-06-11 17:49:02 +00:00
fd87b1b070 Mentioned Solaris and system dependent drive permission settings 2010-06-10 18:15:56 +00:00
8a4698bd58 Updated documentation about Solaris adapter 2010-06-07 18:13:52 +00:00
371bbde3c2 Taking care of new Solaris adapter of libburn 2010-06-07 18:05:04 +00:00
1b1ccc8a18 Corrected a misplaced class description comment 2010-05-31 09:58:46 +00:00
50373321dd Updated GNU xorriso web page 2010-05-26 16:13:02 +00:00
576af43c98 Implemented -as mkisofs options -U, -N, -l, -d, -allow-lowercase 2010-05-26 12:31:13 +00:00
673906b084 Documentation for recent enhancements 2010-05-23 15:16:25 +00:00
1482eb02f1 Implemented -as cdrecord -V, new -as mkisofs option --no-emul-toc 2010-05-23 07:29:39 +00:00
b69f1c5b66 New -compliance rule no_emul_toc 2010-05-23 07:27:09 +00:00
e82b7005ad New write extension option isoburn_igopt_no_emul_toc 2010-05-23 07:25:41 +00:00
1402341264 Corrected typo in remark 2010-05-21 13:45:48 +00:00
bcc6a38094 Adapted version checking to new library situation 2010-05-21 13:37:25 +00:00
d3f770827f Mentioned both levels of API and their mutual exclusiveness 2010-05-21 13:30:27 +00:00
5ac178ddda Moved configuration options from xorriso_xorriso_CFLAGS to CFLAGS 2010-05-19 16:06:36 +00:00
050059a388 Eventually including ../config.h generated by autotools 2010-05-19 09:02:20 +00:00
afcc57f2c0 Moved xorriso implementation into libisoburn 2010-05-18 17:46:20 +00:00
f8130af94e Made compilation of GNU xorriso less verbous by use of autoheader config.h 2010-05-17 14:28:30 +00:00
2bb5d973c3 Checking for suitable sizeof(off_t) 2010-05-16 17:11:49 +00:00
8097dd57ab Made option -version know again whether it is in GNU xorriso 2010-05-16 11:32:00 +00:00
585075af1b Eventually including ../config.h generated by autotools 2010-05-16 09:32:14 +00:00
bf20ca5dfb Eventually including ../config.h generated by autotools 2010-05-16 09:26:41 +00:00
99e498057f Splitted xorriso.c and xorrisoburn.c into smaller source modules 2010-05-15 18:48:10 +00:00
a2b20e3ca2 Avoided to show inappropriate links on www.gnu.org 2010-05-05 20:04:25 +00:00
9bbcc3118c Removed development macro Xorriso_multi_booT by making it unconditional 2010-05-05 19:43:55 +00:00
4479f2fec6 Documented changes and release timestamp 2010-05-04 12:07:30 +00:00
d62d617f82 Version leap to libisoburn-0.5.6 2010-05-04 12:06:51 +00:00
b2d7283f51 Adapted xorriso-standalone to version leap libisofs-0.6.33 2010-05-03 16:56:00 +00:00
30615ac752 Requiring libisofs-0.6.32 now 2010-05-03 12:39:07 +00:00
d38bd09987 Avoided -boot_image patching for images which obviously have no boot-info-table 2010-04-29 13:33:34 +00:00
c4cf1ced64 Fixed handling of empty current bin_path and already attached boot images 2010-04-27 07:49:31 +00:00
853d71b947 Downgraded message about stdout redirection from NOTE to DEBUG 2010-04-27 07:24:32 +00:00
a411150abe Some more documentation updates 2010-04-27 07:23:00 +00:00
ab84ae81e6 Some documentation updates 2010-04-26 17:56:06 +00:00
121d40e38c Fixed minor problems with previous revision 3199 2010-04-26 14:13:25 +00:00
10ef2e346f Allowing up to 32 boot images, -boot_image any id_string=, sel_crit= 2010-04-26 12:11:59 +00:00
7aae77f2ac Bug fixes and improvements of previous revision 3197 2010-04-22 16:07:14 +00:00
83e41ceabd Allowing 1 BIOS boot image and 1 EFI boot image: -boot_image grub efi_path= 2010-04-22 14:40:49 +00:00
8bf6e31379 Changed iso_image_set_boot_platform_id() to el_torito_set_boot_platform_id() 2010-04-20 14:26:45 +00:00
dea7b75549 Raised boot catalog weight to 1000000000 2010-04-20 14:02:54 +00:00
e2ed639fec Determining boot image size only after it was added to the ISO image 2010-04-20 10:35:54 +00:00
f103206221 New -boot_image any platform_id= 2010-04-20 09:18:35 +00:00
6f7fd7faed Requiring libisofs-0.6.31 now 2010-04-20 09:14:29 +00:00
3aa64bf40d Documented changes and release timestamp 2010-04-19 10:07:09 +00:00
19b5a64a3a Version leap to libisoburn-0.5.5 2010-04-19 10:06:12 +00:00
38d296423b Updated documentation about MBR 2010-04-18 15:46:12 +00:00
83216597c2 Corrected image size computation for comparison with partition table 2010-04-18 14:12:44 +00:00
5b369d3c52 Added --sort-weight to -as mkisofs -help 2010-04-18 10:09:10 +00:00
f4b46cf499 New -find action sort_weight, new -as mkisofs --sort-weight 2010-04-18 09:59:08 +00:00
1a18491b03 Adapted xorriso-standalone to version leap libisofs-0.6.31 2010-04-17 17:13:38 +00:00
270fdd77f2 Requiring libisofs-0.6.30 now 2010-04-17 17:12:47 +00:00
3076ce56fb Made -boot_image isolinux|grub patch and partition_table=on patch System Area 2010-04-16 19:59:40 +00:00
932a7e84e1 libisoburn now always loads the System Area with the ISO image 2010-04-16 19:54:54 +00:00
dfd0466291 More carefully checking for libreadline suitability 2010-04-13 15:43:58 +00:00
8a3b4e2207 New -compliance options only_iso_version, no_j_force_dots 2010-04-13 10:40:22 +00:00
ee4f766c27 New isoburn_igopt_set_relaxed() options: only_iso_versions, no_j_force_dots 2010-04-13 10:33:04 +00:00
9832edf4a1 Decided to put out uid_t and gid_t as unsigned long 2010-04-12 11:12:43 +00:00
4c91872b2a Mentioned xorriso alias names in chapter FILES of documentation 2010-04-12 11:09:38 +00:00
f75d454b6a (Payload files of revisions 3169, 3170, 3171) 2010-04-11 12:24:54 +00:00
7b0c712719 Realistic iconv() linking test in ./configure with eventual abort 2010-04-11 12:16:21 +00:00
ae874e4d5b Avoided printing of possibly uninitialized integer 2010-04-11 12:11:05 +00:00
4f7a2556bd Reacted on compiler warnings of cygwin 2010-04-11 12:10:05 +00:00
45c12f0844 Updated help text and documentation 2010-04-10 18:02:10 +00:00
d1855c8895 New -boot_image isolinux partition_table=on, -as mkisofs -isohybrid-mbr 2010-04-10 17:13:21 +00:00
fd0f3467ad New options bit1 of isoburn_igopt_set_system_area() for isohybrid production 2010-04-10 17:10:28 +00:00
642a2bc48e Trying to avoid iconv const warning and multiple -liconv options on FreeBSD 2010-04-10 15:09:18 +00:00
006fb7078e Adapted GNU xorriso to version leap libburn-0.8.1 2010-04-09 17:12:09 +00:00
2bd7307dfa New find action mkisofs_r and emulation -as mkisofs -r 2010-04-08 18:58:56 +00:00
cc0ddbeb10 New option -volume_date, for grub-mkrescue: -as mkisofs --modification-date= 2010-04-07 20:27:05 +00:00
a65aa4f804 New API call isoburn_igopt_set_pvd_times() 2010-04-07 20:22:49 +00:00
6f63c6388c Fixed image reading bug introduced with revision 3144 2010-04-07 07:31:32 +00:00
1afe1443be Polishing of new GRUB supporting features 2010-04-06 19:24:39 +00:00
df5d4a2f90 New -as mkisofs options -G and --protective-msdos-label for GRUB 2010-04-06 15:18:59 +00:00
8d7df2b2ff New API call isoburn_igopt_set_system_area() 2010-04-06 12:51:15 +00:00
24bbe47f18 Requiring libisofs-0.6.29 now 2010-04-05 19:29:24 +00:00
7878f1f039 Disabled isohybrid MBR production on request of H. Peter Anvin 2010-04-01 14:14:00 +00:00
1e4e51edfe libisoburn refused to recognize ISO images smaller than 64 kB 2010-04-01 14:07:59 +00:00
2fc5bf7849 Documented changes and release timestamp 2010-03-30 11:15:11 +00:00
d5e640d788 Version leap to libisoburn-0.5.2 2010-03-30 09:30:40 +00:00
576af9ea89 Better handling of empty tray when aquiring drive 2010-03-29 10:36:38 +00:00
214d6e6741 Avoided to declare empty tray as written media 2010-03-29 10:35:22 +00:00
0c655d438e Changed global info dir entry of xorriso.info 2010-03-22 08:36:30 +00:00
f68f875a6c Changed global info dir entry of xorriso.texi 2010-03-22 08:26:09 +00:00
13c327e370 Silenced a harmless compiler warning 2010-03-21 12:46:21 +00:00
3f42df50a3 Distributing and installing xorriso.info 2010-03-21 12:45:43 +00:00
9e78c78e43 Restructured xorriso documentation and added index 2010-03-20 16:54:56 +00:00
99e2df2208 Switched xorriso documentation to a hybrid of texinfo and man page 2010-03-18 10:13:35 +00:00
04c6625024 Adapted GNU xorriso to version leap libburn-0.7.9 2010-03-10 18:32:40 +00:00
f68ee78352 Requiring libburn-0.7.8 now 2010-03-10 18:32:02 +00:00
b76161a698 Adapted xorriso signal handling to new libburn advise 2010-03-09 06:52:24 +00:00
2eec5bf40a Requiring libburn-0.7.7 now 2010-03-09 06:49:36 +00:00
2d11c253e3 Corrected spelling errors in xorriso man page 2010-02-28 17:02:28 +00:00
a2a778c72f Adjusted patcher of Makefile.in for GNU xorriso 2010-02-28 17:01:05 +00:00
78fc4007ba Delivering xorriso/README_gnu_xorriso with libisoburn 2010-02-23 09:54:13 +00:00
27ba46494d Version leap to libisoburn-0.5.1 2010-02-23 09:53:17 +00:00
0aec43a06a Changed versioning and tarball name to match unpack directory name 2010-02-22 19:54:48 +00:00
5656343e94 Mentioned bug-xorriso@gnu.org as a contact address for GNU xorriso 2010-02-22 16:40:16 +00:00
a08a616676 Adjustments with web page of GNU xorriso 2010-02-19 17:24:22 +00:00
62777e93aa Adjustments with web page of GNU xorriso 2010-02-19 17:21:25 +00:00
f4507fca34 Bug fix: xorriso -update_r could lead to SIGSEGV if applied to a data file 2010-02-19 17:19:41 +00:00
4374d984d1 New option -scsi_log 2010-02-18 12:48:42 +00:00
6a9c99cbd8 Bug fix for FreeBSD: xorriso could leave the drive tray locked 2010-02-17 13:58:16 +00:00
eec4dd9915 Adjustments with web page of GNU xorriso 2010-02-15 20:43:45 +00:00
7ae90cc334 Excluded unused libburn source module crc.c from GNU xorriso tarball 2010-02-14 17:19:41 +00:00
38e16d9370 Added or adjusted copyright and license statements in single files 2010-02-14 15:14:30 +00:00
91e0b07080 Added or adjusted copyright and license statements in single files 2010-02-14 15:09:05 +00:00
fe63ef9481 Changed docs and comments to "GNU/Linux" where appropriate 2010-02-12 21:29:36 +00:00
3451559feb Switched from xorriso-standalone GPLv2+ to GNU xorriso GPLv3+ 2010-02-12 15:38:23 +00:00
829c0404c3 Switched from xorriso-standalone GPLv2+ to GNU xorriso GPLv3+ 2010-02-12 15:27:10 +00:00
b353d04204 Updated xorriso web page 2010-02-10 15:56:53 +00:00
c139b45c26 Adapted xorriso-standalone to version leap libisofs-0.6.29 2010-02-10 15:04:03 +00:00
2ee8fa58d7 Requiring libisofs-0.6.28 now 2010-02-10 15:03:17 +00:00
60454fbf63 Updated license statement about our legal view and future licenses 2010-02-10 15:02:11 +00:00
ccb22c3ef3 Removed surplus quotes from an error message 2010-02-08 11:06:31 +00:00
b4d9c81fe8 Forcing use of /usr/local on FreeBSD by LDFLAGS and CPPFLAGS 2010-02-04 08:25:31 +00:00
50e5349d09 Small corrections in xorriso man page 2010-02-04 08:23:09 +00:00
d348c6dac6 Changed leftover text which disallowed GPLv3 2010-01-27 14:06:56 +00:00
ffbcb13040 Documented changes and release timestamp 2010-01-25 15:11:55 +00:00
7d389e0889 Lifted ban to derive GPLv3, extended copyright range to 2010 2010-01-25 15:05:43 +00:00
e7bde25551 Version leap to libisoburn-0.4.9 2010-01-25 15:02:59 +00:00
bd18a89bc2 Documented changes and release timestamp 2010-01-25 14:01:56 +00:00
f5c66d9e14 Adapted xorriso-standalone to version leap libburn-0.7.7 2010-01-23 15:34:21 +00:00
6ae505a0a2 Requiring libburn-0.7.6 now 2010-01-23 15:33:37 +00:00
425932eb68 Updated xorriso webpage 2010-01-20 11:04:14 +00:00
3686509e91 Adapted xorriso-standalone to version leap libisofs-0.6.27 2010-01-20 10:57:52 +00:00
9f9985f06f Requiring libisofs-0.6.26 now 2010-01-20 10:56:28 +00:00
6950650a82 Avoided SORRY event for missing disk file during hardlink update 2010-01-19 13:35:39 +00:00
42cf661ef8 Fixed a bug in configure.ac introduced with rev 3003 2010-01-17 14:56:16 +00:00
3a10093e3d Made xorriso issue a filure message if blanking was not successful 2010-01-17 14:50:00 +00:00
f39b0be7d6 Bug fix: xorriso did not blank CD-RW with images that were prepared on hard disk 2010-01-17 14:49:12 +00:00
249190ede2 Changed a comment in xorrisoburn.c 2010-01-11 11:33:25 +00:00
5a48f5542a Re-enabled recognition of missiong or empty disk files as blank drive (rev 2997) 2010-01-11 11:31:36 +00:00
25ba888769 Changed configure test for zlib from compress2() to compressBound() 2010-01-07 09:03:46 +00:00
581caf1007 Updated xorriso homepage 2010-01-01 13:26:48 +00:00
320eadaf0b Removed a stray option argument from xorriso man page 2010-01-01 13:02:00 +00:00
ab1336dc29 Updated copyright marks to 2010 2010-01-01 13:00:47 +00:00
ea9cb3ab4b Do not believe libburn if it says a role 2 drive is empty 2010-01-01 12:56:12 +00:00
45277ed62b Reacted on compiler warnings of Debian kfreebsd-amd64 buildd 2010-01-01 12:44:54 +00:00
aebaca8b99 Reacted on doxygen errors of Debian buildd 2009-12-31 14:42:09 +00:00
c7a6796ba7 Reacted on compiler warning of Debian buildd 2009-12-31 14:23:17 +00:00
f223373b0b Changed report title "System adapter" to "libburn OS adapter" 2009-12-31 11:48:35 +00:00
2b9b7974f0 Handling -mount on Debian kfreebsd like on FreeBSD 2009-12-30 16:35:12 +00:00
af39f58e71 Reporting system adapter with xorriso -version 2009-12-27 09:49:23 +00:00
6f5cb55568 Made xorriso-standalone aware of libcdio system adaptor 2009-12-26 23:10:07 +00:00
2669117d84 Requiring libburn-0.7.5 now 2009-12-26 22:42:50 +00:00
192518f70b Mentioned stream_recording=number in helptext of xorriso -as cdrecord 2009-12-14 12:15:15 +00:00
e9f9d03fac Corrected a harmless name error in xorriso standalone configuration 2009-12-10 12:08:32 +00:00
8666adfe70 Silenced harmless compiler warning of FreeBSD 6.3 2009-12-10 12:06:10 +00:00
2d00b2075b Documented changes and release timestamp 2009-12-08 14:53:59 +00:00
9e6c43ed0b Version leap to libisoburn-0.4.7 2009-12-08 14:52:25 +00:00
59dec6ac9e Requiring libburn-0.7.4 now 2009-12-07 08:20:19 +00:00
783ad87750 Adapted xorriso-standalone to version leap libburn-0.7.5 2009-12-07 08:17:40 +00:00
74d9c0069b New configure option --enable-track-src-odirect 2009-11-28 12:41:16 +00:00
5f23abebf1 Made use of burn_fifo_source_new() flag bit0 and of burn_os_open_track_src() 2009-11-28 12:37:39 +00:00
cc67c36003 New configure option --enable-dvd-obs-64k 2009-11-17 14:23:28 +00:00
f7e469528d New options -dvd_obs and -stdio_sync 2009-11-17 13:41:28 +00:00
7b653579a0 Requiring libburn-0.7.3 now 2009-11-17 12:30:31 +00:00
f95011d5e0 New -calm_drive mode "revoke" 2009-11-12 20:44:09 +00:00
64d8349316 Documented changes and release timestamp 2009-10-28 05:46:15 +00:00
a93589ecba Version leap to libisoburn-0.4.5 2009-10-27 20:56:57 +00:00
73e740f822 Adjustments of xorriso man page 2009-10-27 14:21:54 +00:00
071a7c8279 Added man page example: Burn an existing ISO image file to media 2009-10-22 20:08:17 +00:00
4e52b191b6 Added a "NOT READBLE" result line to -check_md5 2009-10-22 15:56:39 +00:00
b97e328da2 Added libburn/ecma130ab.[cho] to xorriso standalone and development scripts 2009-10-17 19:11:25 +00:00
b5847a4633 Requiring libburn-0.7.2 now 2009-10-14 11:51:10 +00:00
87d263de34 Adapted xorriso-standalone to version leap libburn-0.7.3 2009-10-14 11:48:31 +00:00
5405e08b5c Changed FreeBSD mount command to mount_cd9660 2009-10-11 14:17:09 +00:00
b3ea97f18c Made -application_id, -publisher, -system_id, -volset_id pending image changes 2009-10-11 14:14:20 +00:00
0e3dafe5e4 New option -mount_opts 2009-10-10 14:22:50 +00:00
13746bfc58 Adapted xorriso-standalone to version leap libisofs-0.6.25 2009-10-08 15:56:39 +00:00
e3610ee989 Requiring libisofs-0.6.24 now 2009-10-08 15:55:04 +00:00
9444c7f1cb New options -system_id , -volset_id 2009-10-07 18:04:53 +00:00
bafe16c3a3 Avoided FATAL event with -rom_toc_scan force and non-ISO media 2009-10-07 14:04:23 +00:00
dafcb1e56a Aligned sessions on overwriteables to full 32 blocks 2009-10-07 12:39:45 +00:00
7288680d48 New -rom_toc_scan sub option "force" to get DVD/BD table-of-content on Solaris 2009-10-07 08:05:00 +00:00
a811361577 New bit7 with isoburn_drive_aquire(): pretend read-only 2009-10-07 07:55:23 +00:00
cf046f9533 Declared as closed those media which have read errors in the first 64 kB 2009-10-07 07:25:40 +00:00
259e00f8c8 Made sure that -pvd_info reports the actual PVD address 2009-10-06 07:15:58 +00:00
e1b1e09d71 Added code to xorriso for repairing "_" in all three PVD id file names 2009-10-05 19:01:38 +00:00
f99e2cc41a Adjusted -pvd_info to the peculiarities of -volid 2009-10-05 18:35:12 +00:00
38a3059748 New option -pvd_info 2009-10-05 17:20:38 +00:00
9766c28d4f Avoided FAILURE event with welcoming empty disk files 2009-10-05 16:55:36 +00:00
7a5d8ca174 New -check_media sub options bad_limit=, slow_limit=, chunk_size= 2009-09-30 09:25:34 +00:00
9f26cadda4 Restricted split part recognition to directories with a complete part set 2009-09-28 17:32:27 +00:00
3adb23071f Narrowed rules for recognizing split file parts 2009-09-27 08:04:05 +00:00
57da7013d3 Bug fix: -cut_out deleted previously cut-out pieces of the same file 2009-09-22 14:34:33 +00:00
35c760ba30 Adjusted xorriso -as cdrecord fifo chunk size to -xa1 2009-09-20 11:06:21 +00:00
de4f98c03e Bug fix: Corrected handling of -as cdrecord -mode2, -xa, -xa2, -xa2, -xamix, xorrisofs -help, xorrecord -help 2009-09-20 09:27:29 +00:00
4feba8b2df New -osirrox sub-options o_excl_on/off. Program osirrox starts with o_excl_off. 2009-09-19 16:09:21 +00:00
d9665979ab Changing new option -scdbackup_tag 2009-09-17 14:47:43 +00:00
72ac8a4ab1 Expanded new API call isoburn_igopt_set_scdbackup_tag 2009-09-17 14:43:54 +00:00
7a1f61afaa Avoiding a potential memory leak in xorriso main() 2009-09-16 16:23:21 +00:00
22e2d6d12d Eventually truncate stdio: track size to file size and issue warning 2009-09-13 09:50:36 +00:00
b2192ec4f7 Avoided to use MD5 on filtered streams with compare and update 2009-09-07 16:11:46 +00:00
5fde82ba76 Reporting media product info with -as cdrecord -atip 2009-09-06 14:56:36 +00:00
18438856c8 Reporting "Media product:" with xorriso option -toc 2009-09-06 11:27:47 +00:00
b43d90d736 Requiring libburn-0.7.1 now 2009-09-06 09:41:06 +00:00
23e4f34482 Removed libburn/lec.c from xorriso standalone and development scripts 2009-09-01 11:00:03 +00:00
a6b287db7d New option -scdbackup_tag 2009-08-31 21:09:16 +00:00
b638398a75 New API call iso_write_opts_set_scdbackup_tag() 2009-08-31 21:04:29 +00:00
7b3bfed4d4 Requiring libisofs-0.6.23 now 2009-08-31 19:38:23 +00:00
2bcb098612 Bug fix: -for_backup did not enable -xattr and -md5 if no drive was chosen yet 2009-08-31 16:26:42 +00:00
8c49031f4b Added libisofs/doc/checksums.txt to xorriso standalone tarball 2009-08-31 16:24:27 +00:00
a5ba8cc3be Documented changes and release timestamp 2009-08-29 18:22:06 +00:00
e9f27e15a1 Version leap to libisoburn-0.4.3 2009-08-29 18:18:56 +00:00
5f6bc35b3a Some updates and corrections in xorriso man page 2009-08-29 18:14:36 +00:00
c6407f66c2 Small correction with reporting profile "Remoovable disk" 2009-08-28 11:40:56 +00:00
912355039c Forgot to commit xorriso_private.h 2009-08-28 10:16:28 +00:00
cc5bd34298 Forgot to store before committing 2009-08-28 10:13:07 +00:00
abb045a26f New option -list_profiles 2009-08-28 10:07:30 +00:00
36b200e0e9 Adapted xorriso-standalone to version leap libburn-0.7.1 2009-08-27 17:57:15 +00:00
b8790971d9 Requiring libburn-0.7.0 now 2009-08-27 17:56:19 +00:00
5d33c841d6 Updated helptext about -find actions, new -as mkisofs option --for_backup 2009-08-27 17:55:17 +00:00
d284f662da Adapted xorriso-standalone to version leap libisofs-0.6.23 2009-08-25 19:14:46 +00:00
97a3eb5b1f Requiring libisofs-0.6.22 now 2009-08-25 19:13:36 +00:00
a38c256789 Updated incremental backup example 2009-08-25 19:12:23 +00:00
4234319cff More timely report of library messages with -check_md5 2009-08-25 19:11:29 +00:00
543df52274 New option -calm_drive 2009-08-24 18:36:49 +00:00
e146eccd5c Demanding libburn-0.6.9 now 2009-08-24 18:27:38 +00:00
56abdd0c2c New -find action make_md5 to equip files from old images with MD5 2009-08-22 18:41:45 +00:00
5f06ee19c5 Made -compare and -update work with recorded MD5 sums 2009-08-20 20:42:14 +00:00
3a88ef260c Corrections with xorriso web page 2009-08-19 18:08:56 +00:00
bddf8008a1 New -md5 mode "all" 2009-08-19 18:07:44 +00:00
7543f5d940 Adapted to enhanced iso_write_opts_set_record_md5() 2009-08-19 18:05:36 +00:00
7c4cf26163 Included -md5 on with option -for_backup 2009-08-18 19:09:15 +00:00
6d05a2f7fc Making use of new API call iso_md5_match() and adapted to MD5 image mismatches 2009-08-18 17:34:08 +00:00
f0c12594c1 -check_media recognizes relocated 64kB superblock tag and hops over session gaps 2009-08-17 16:27:37 +00:00
1b8f2cc0ee Giving overwriteable media a single-session toc with isoburn_drive_aquire(bit4) 2009-08-17 16:23:58 +00:00
489a1b6c98 Adapted to a change in iso_util_decode_md5_tag() 2009-08-16 20:08:10 +00:00
f155241628 Introduced -check_media event= for mismatch events 2009-08-15 17:34:00 +00:00
7e40478a75 Letting -check_media look for session checksum tags 2009-08-14 21:15:52 +00:00
11fe78ffb1 More timely abort of find jobs if the result pager gets aborted 2009-08-14 10:22:59 +00:00
4d1d3732be Better reaction wich -check_md5 if no MD5 array is loaded 2009-08-13 20:36:21 +00:00
d152de91f4 Checking MD5 of whole session with -check_md5 and empty path list 2009-08-12 20:23:31 +00:00
16d84807da Completed find action check_md5 2009-08-12 13:03:07 +00:00
3b05800e08 New options -check_md5, -check_md5_r, find action check_md5, test -has_md5 2009-08-11 19:55:08 +00:00
bc9eac552a Requiring at least libisofs-0.6.21 now 2009-08-11 19:47:39 +00:00
fbaa612ae9 Missing changes in rev 2710 and 2712 2009-08-10 19:43:17 +00:00
bfd82b2ccf New option -md5, new -as mkisofs option --md5 2009-08-10 19:37:47 +00:00
219aa7e4b6 New write options session_md5, file_md5, read option nomd5 2009-08-10 19:21:43 +00:00
d1490aa95e New find actions get_md5, get_any_xattr, test -has_any_xattr 2009-08-10 12:30:49 +00:00
6de5c8d9d4 Hints about -hardlinks and file content filtering 2009-08-03 10:20:03 +00:00
7966b52a5b Bug fix: Use of freed memory with -hardlinks on and -update 2009-08-03 07:59:04 +00:00
b3bdfec3b1 Updating sorted link array before usage after image manipulations 2009-07-25 18:18:05 +00:00
d69acf1374 Showing a better link count with -hardlinks on -lsl 2009-07-23 10:36:36 +00:00
1fe5898dc1 Adopted new libisofs source module md5.[cho] 2009-07-23 10:32:48 +00:00
ea91d591c3 More emphasis on early use of -hardlinks, -acl, -xattr etc. 2009-07-23 10:31:07 +00:00
920adb9e9f Bug fix: xorriso -as mkisofs did not understand the -C option of growisofs any more 2009-07-19 21:46:55 +00:00
29de8cf843 Adapted xorriso-standalone to version leap libburn-0.6.9 2009-07-14 13:43:58 +00:00
fde2cbfd64 configure options --enable-libdir-pkgconfig and --enable-pkgconfig-path=DIR 2009-07-07 19:39:35 +00:00
1cd1cf1662 Aligned configure --help texts provided by own code in configure.ac 2009-07-07 17:57:26 +00:00
7981c59a7c Bug fix: Ticket 149, one byte overflow of local variable. 2009-06-30 15:45:44 +00:00
d47a1702a7 Provisory patch on ticket 152: GNU libiconv needs -liconv but offers no iconv() 2009-06-30 12:03:09 +00:00
b627db78ff Documented changes and release timestamp 2009-06-28 12:23:58 +00:00
d135e33b9e Version leap to libisoburn-0.4.1 2009-06-28 11:17:25 +00:00
e21150e227 With -extract : made hardlink registration combinable with sort_lba 2009-06-27 11:23:59 +00:00
9a96d6a175 Bug fix: Copies of overwriteable media onto sequential were mistaken in ROM drives 2009-06-25 12:50:57 +00:00
2774cbce07 Reverted order of memorized hardlink update parameters 2009-06-24 13:35:02 +00:00
2946631551 Updated xorriso man page 2009-06-23 16:49:48 +00:00
4ddc39adaf Deprecated -hardlinks modes "start_update", "end_update" for "perform_update" 2009-06-23 16:43:33 +00:00
d478d4ebb4 Rough test for compile time and run time libxorriso version mismatches 2009-06-23 13:31:46 +00:00
794fd96fb2 Removed from xorriso main() any dependency on non-API features 2009-06-23 12:31:23 +00:00
44b74461f3 Added missing function declaration 2009-06-23 07:09:27 +00:00
852941cf58 Introduced alternative Makefile.am for libxorriso production 2009-06-23 06:57:34 +00:00
67d7e8821b Gave up risky direct update of hardlink siblings 2009-06-22 11:28:34 +00:00
40e0333edb Wider scope of hardlink reconstruction with extract operations 2009-06-20 06:38:36 +00:00
4d266bc2f5 With -update_r : detecting hardlink splits and fusions on disk 2009-06-15 12:15:12 +00:00
11ed23ff02 Removed xorriso.pc.in from xorriso-standalone tarball 2009-06-13 12:40:17 +00:00
2bf71d14e0 Adapted xorriso-standalone to version leap libisofs-0.6.21 2009-05-31 18:58:02 +00:00
2c41942b7e Adapted xorriso-standalone to version leap libisofs-0.6.20 2009-05-31 10:03:03 +00:00
72cd8d6e76 Requiring libisofs-0.6.20 now 2009-05-31 10:01:45 +00:00
2b3841264a Avoided unconditional output of -hardlinks with option -status 2009-05-30 16:18:00 +00:00
bcb54ccaba Avoided unnecessary sorting during -extract 2009-05-29 16:22:53 +00:00
94e6000db2 New option -for_backup as shortcut for -acl -xattr -hardlinks 2009-05-29 11:08:18 +00:00
7aee4b45a7 Revoked LBA sorted reading with -compare_r. It was ugly. 2009-05-26 14:28:58 +00:00
5b13b266db Enabled -hardlinks for options -extract, -extract_l and -cp*x 2009-05-26 14:00:54 +00:00
5fcd3217f3 New pseudo test with -find : -sort_lba which is actually an option 2009-05-17 11:51:26 +00:00
183fda33a6 Disabled use of iso_tree_add_new_symlink() in favor of iso_tree_add_new_node() 2009-05-16 16:59:25 +00:00
2237469e18 LBA sorted processing of -compare_r and -update_r for smoother MMC reading 2009-05-16 16:56:21 +00:00
2faac5462e Enhanced option -extract_cut for handling filtered files 2009-05-14 08:20:33 +00:00
eea365ce35 New option -hardlinks 2009-05-09 20:17:35 +00:00
f70287eaf8 New API options isoburn_ropt_noino and isoburn_igopt_hardlinks 2009-05-09 20:12:39 +00:00
9704cb8ce1 Adapted xorriso-standalone to version leap libburn-0.6.7 2009-05-08 07:36:29 +00:00
91955a715a Bug fix: -load volid did not perform pattern searc 2009-05-06 17:43:30 +00:00
1a3297b658 Bug fix: SIGSEGV with option -status and no search string 2009-05-06 17:35:52 +00:00
3a6ecc53c3 Issueing pacifier messages from within isoburn_set_msc1() 2009-04-25 16:28:48 +00:00
61e22bb9e9 Moved call of isoburn_set_msgs_submit() to Xorriso_startup_libraries() 2009-04-25 16:22:05 +00:00
f7aed1806f Used isoburn_toc_track_get_emul() in isoburn_set_msc1() 2009-04-25 16:00:13 +00:00
b06bac1c06 New -find tests -wholename, -prune 2009-04-23 10:32:57 +00:00
29a3048803 Made use of new libisoburn call to accelerate option -toc for large TOC 2009-04-22 17:37:00 +00:00
cc66b5b3a4 New API call isoburn_toc_track_get_emul() 2009-04-22 17:36:04 +00:00
4f41e7aa41 Updated xorriso web page 2009-04-22 10:21:54 +00:00
2499047b82 Allowed implicit -and operator with -not, -if and -sub 2009-04-21 18:42:07 +00:00
6052e04b72 Enhanced -find testing by operators -not, -or, -and, (, ), -if, -else, -endif 2009-04-21 17:36:05 +00:00
a7a5be1689 Documented changes and release timestamp 2009-04-18 15:09:44 +00:00
5a6eb5b141 Version leap to libisoburn-0.3.9 2009-04-18 15:09:06 +00:00
0380c1d6a2 Last minute correction in xorriso man page 2009-04-18 15:00:41 +00:00
3c3e5af65e Adapted xorriso-standalone to version leap libisofs-0.6.19 2009-04-18 11:44:30 +00:00
ac9a406a64 Fixed bugs with rarely used make dist 2009-04-16 14:56:13 +00:00
ebeb0f22b3 Adapted xorriso-standalone to version leap libisofs-0.6.18 2009-04-15 18:53:56 +00:00
36ad5e412d Requiring libisofs-0.6.18 now 2009-04-15 18:52:41 +00:00
fedb8fdfba Removed dependency on Libisofs_has_auto_input_charseT 2009-04-15 18:51:31 +00:00
41b61970bb Adopted new libisofs filter module gzip.c, builtin filters --gzip, --gunzip 2009-04-15 07:19:47 +00:00
1ee9e2a16f New -zisofs option by_magic=on 2009-04-14 09:23:06 +00:00
572dfb1584 Updated README texts of libisoburn and xorriso 2009-04-14 09:19:37 +00:00
2404b9d8a5 Updated xorriso web page 2009-04-12 12:08:09 +00:00
a3f5ffeb11 New option -zisofs, builtin filters --zisofs and --zisofs-decode 2009-04-11 17:26:48 +00:00
5676ae2eab Adjustments with filter --zisofs-decode 2009-04-11 12:53:27 +00:00
1229c276fe Included a copy of doc/zisofs_format.txt in xorriso-standalone 2009-04-11 12:51:39 +00:00
8007b3ae8d Introduced builtin filters --zisofs and --zisofs-decode 2009-04-10 10:32:53 +00:00
25bf8fc5cb Took into respect optional libz dependency of libisofs 2009-04-10 10:25:58 +00:00
13b24ca32f Removed some unused old code branches 2009-04-07 12:21:13 +00:00
f9db31f5a1 New -find tests -has_filter, -has_no_filter 2009-04-07 12:02:53 +00:00
7e3b7f3b7f Fixed bug introduced with 2575 2009-04-06 16:15:39 +00:00
1615fea70d Changed appearance of -show_stream, fixed bug introduced with rev 2575 2009-04-06 14:31:07 +00:00
c84e0e0a44 New options -show_stream, -show_stream_r, -exec show_stream 2009-04-06 13:20:05 +00:00
f99b7182f5 Suffix rollback with -set_filter --remove-all-filters 2009-04-06 10:08:48 +00:00
9192380e90 Updated xorriso web page 2009-04-05 18:29:19 +00:00
48436bee11 New -osirrox mode "banned" 2009-04-05 14:30:45 +00:00
4baa62cb18 Included sys/select.h as prescribed by POSIX and Linux, FreeBSD man pages 2009-04-05 13:15:36 +00:00
3f0f1c72a5 Fixed a bug about detection of failure with -set_filter 2009-04-05 11:06:49 +00:00
f109865cc4 Reporting number of processed filters with -set_filter and -set_filter_r 2009-04-05 11:05:37 +00:00
c89febb7a1 configure options to control availability of external filters in xorriso 2009-04-04 14:42:41 +00:00
a50a17c075 New option -close_filter_list 2009-04-04 14:40:11 +00:00
6033dd8ea8 Fixed a bug with the error message about external filters and setuid 2009-04-04 08:26:32 +00:00
b4952da4e6 Fixed a potential blind spot of 1 second in -disk_dev_ino comparison 2009-04-03 17:20:33 +00:00
e3eaea1a4e New options -external_filter , -unregister_filter, -set_filter , -set_filter_r 2009-04-02 16:25:33 +00:00
25bc0d4101 Experimental -find action -exec set_filter with some hardcoded filter commands 2009-03-29 16:49:38 +00:00
f4efc5c3fc Adapted to new libisofs feature iso_file_add_external_filter() 2009-03-29 16:46:50 +00:00
e95dee1fea libisoburn now demands libisofs-0.6.17 2009-03-29 16:44:26 +00:00
60675d21b7 Revoked revision 2552. Dynamic xorriso did not get linked with -lacl any more. 2009-03-29 16:43:25 +00:00
adff1dd16b Stuffed memory leaks on -commit and loading of El Torito records 2009-03-22 09:02:21 +00:00
bc1453ad0e Clarification about -auto_charset pitfalls 2009-03-22 08:59:18 +00:00
b4332a8387 Now option -auto_charset based on xattr "isofs.cs" 2009-03-20 19:33:51 +00:00
d5cb4aa3d0 New API functions isoburn_ropt_[sg]et_auto_incharset() 2009-03-20 19:29:04 +00:00
359333effa Unified -status filtering decision 2009-03-19 17:27:59 +00:00
146cfddf78 Removed useless libisoburn configure options --enable-libacl --enable-xattr 2009-03-18 10:54:08 +00:00
90fba13419 Adapted xorriso-standalone to version leap libisofs-0.6.17 and FreeBSD libdata 2009-03-18 10:40:25 +00:00
33aec8f935 Get on FreeBSD pkgconfigdir=.../libdata , on Linux and others: .../lib 2009-03-18 10:39:35 +00:00
5da590372c Documented changes and release timestamp 2009-03-16 12:08:17 +00:00
31c61344aa Version leap to libisoburn-0.3.7 2009-03-16 12:07:24 +00:00
57430a9feb Requiring libburn-0.6.4 now 2009-03-14 11:57:02 +00:00
d29c2bd0af Fixed the inappropriate refusal on paths like /u/test/../.. 2009-03-14 11:38:05 +00:00
268d49efb8 Adapted xorriso-standalone to version leap libburn-0.6.5 2009-03-13 15:08:27 +00:00
bb93624293 Defaulting -stream_ecording "data" to "100m" 2009-03-13 15:07:24 +00:00
d59a2c5907 Made -compliance old_rr the default 2009-03-12 14:16:36 +00:00
3795660f3c Minor changes in xorriso man page 2009-03-11 21:24:11 +00:00
14e408c6e0 Mentioned bug fixes in libisofs 2009-03-11 17:12:34 +00:00
b83fa3ef61 Adapted xorriso-standalone to version leap libisofs-0.6.16 2009-03-11 17:03:39 +00:00
73db0be503 Requiring libisofs-0.6.16 now 2009-03-11 17:01:20 +00:00
7ba923cbbc Made -compliance old_rr imply -compliance aaip_susp_1_10 2009-03-10 09:22:16 +00:00
0987ced379 Reacted on compiler warnings of SchilliX-0.6.7 (based on Solaris 5.11) 2009-03-08 13:59:57 +00:00
5f110f1a03 Lifted the ban on operating systems other than Linux and FreeBSD 2009-03-05 12:18:41 +00:00
3f4b8b60e0 Making optional use of statvfs() in sg-dummy 2009-03-03 10:37:20 +00:00
723dcbcb89 isoburn_igopt_get_data_start() @since 0.3.6 because not announced in 0.3.4 2009-03-03 10:34:15 +00:00
1615f39550 Documented changes and release timestamp 2009-03-01 11:44:13 +00:00
a41b4769b3 Version leap to 0.3.5 2009-03-01 11:39:18 +00:00
8a1574b632 Switched standalone version to libisofs-0.6.15 2009-02-28 18:17:47 +00:00
1af09c3ac8 New -stream_recording mode with start address, "on" is now 32s 2009-02-28 18:13:56 +00:00
f0734966ff New API function isoburn_igopt_get_data_start() 2009-02-28 17:59:20 +00:00
da07c22d31 Requiring libisofs-0.6.14 now, libburn-0.6.0 still suffices 2009-02-28 17:57:55 +00:00
c8122f4659 -disk_dev_ino mode ino_only 2009-02-25 14:40:47 +00:00
b6a998318c Adapted to version leap libburn-0.6.2 2009-02-20 13:12:30 +00:00
659fb43291 Committing forgotten xorriso_private.h 2009-02-19 18:37:28 +00:00
237113e1af Adapted to version leap libisofs-0.6.14 2009-02-19 16:29:24 +00:00
8e08cf3c57 Adapted to removal of Libburn_with_aaiP macro 2009-02-19 12:36:09 +00:00
ca4777fba9 Adapted to removal of Libburn_with_aaiP macro 2009-02-19 12:35:22 +00:00
e69f4e1234 New option -disk_dev_ino 2009-02-17 18:42:41 +00:00
1251c6e135 Took into respect ACL and xattr with -compare and -update 2009-02-16 08:26:53 +00:00
ef8333effe -as mkisofs --acl and --xattr was not properly recognized 2009-02-14 13:30:27 +00:00
333a7d95bb New option -setfattr_list 2009-02-13 20:25:42 +00:00
d9e76c54a6 Updated xorriso man page 2009-02-12 11:06:30 +00:00
5d9f43c7de New -as mkisofs options --acl and --xattr 2009-02-12 11:05:17 +00:00
26dc31682a Adapted html man page generator to textchanges 2009-02-12 07:26:49 +00:00
e4b8310812 Closed a memory leak with unreleased IsoImage in boot image inquiry 2009-02-10 12:58:36 +00:00
d2cc6531c0 Updated xorriso home page 2009-02-10 11:47:57 +00:00
c8fbf6ac4b New options -setfattr, -setfattr_r, new find -exec setfattr 2009-02-09 18:59:41 +00:00
af43ee46fd Displaying "+" with lslx if ACL is detected 2009-02-08 15:14:05 +00:00
5d21c97de7 First code for -setfattr (have to fix some ACL problems before going on) 2009-02-08 13:21:36 +00:00
27c45c6df6 Correct group permission bits with -acl off and disk file that has ACL 2009-02-07 14:26:12 +00:00
f5e6a8147b Correct group permission bits with -acl off and -extract file that has ACL 2009-02-07 09:01:26 +00:00
c854275d51 Checking for iconv(3) in separate libiconv (e.g. on FreeBSD) 2009-02-04 20:06:56 +00:00
0e26c05593 Took into respect eventual resolution of symbolic links 2009-02-04 20:01:22 +00:00
03e92f4f72 Linking with $LIBBURN_ARCH_LIBS to get -lcam on FreeBSD 2009-02-03 16:24:48 +00:00
efa1164328 Enabled restoring of xattr 2009-02-02 20:11:26 +00:00
f861321c45 New options -xattr, -getfattr, find -has_xattr, -has_aaip, -exec getfattr 2009-02-02 13:44:00 +00:00
4ceee394f7 Equipped output of lsl with '+' perm if ACL is present 2009-01-31 10:11:37 +00:00
002ba5d6d2 Followed changes in iso_node_*acl_text API 2009-01-30 14:56:31 +00:00
2756789dfe Bug fix: included sys/wait.h rather than wrong wait.h 2009-01-29 21:06:14 +00:00
db02a5e88a Added aaip-os-dummy.c to xorriso-standalone 2009-01-29 21:04:49 +00:00
767b0c3840 Updated xorriso web page 2009-01-29 16:56:01 +00:00
4bc34cc0ed New option -setfacl_list 2009-01-29 16:53:45 +00:00
78a3402bf3 Made -getfacl file name escaping more similar to shell command behavior 2009-01-28 19:01:47 +00:00
0e70724dc2 Bug fixes and enhancements about "default" ACL 2009-01-28 11:48:04 +00:00
d048fc4710 Bug fixes and enhancements about "default" ACL 2009-01-28 07:49:56 +00:00
a74260d09f Mentioned the need for 64 bit file i/o 2009-01-27 12:14:28 +00:00
aaf0c184d1 Including doc/susp_aaip_0_2.txt in xorriso-standalone 2009-01-26 17:38:33 +00:00
0cd2d869c3 Gave user control over isoburn_igopt_aaip_susp_1_10 2009-01-26 17:36:15 +00:00
e0fc368105 New macro isoburn_igopt_aaip_susp_1_10 controls writing of AAIP ER and ES 2009-01-26 17:33:02 +00:00
fc2d3655b0 AAIP code now resides in libisofs 2009-01-25 15:04:35 +00:00
02f2954bd5 New option -setfacl, -setfacl_r, new -find action setfacl 2009-01-25 14:11:37 +00:00
40d4330bcc Took into respect changed .o file names of libisofs 2009-01-24 16:38:13 +00:00
75ae510390 Updated xorriso web page 2009-01-23 17:53:26 +00:00
86b5ffda4f Silenced a FAILURE message with -acl if no image is loaded 2009-01-23 17:28:02 +00:00
5e1adef785 xorriso compilation detects availability of libacl and of Linux listxattr call 2009-01-23 17:27:04 +00:00
21adcfc5b3 Updated xorriso web page 2009-01-23 14:57:38 +00:00
e7036f90dc New find tests -has_acl, -has_no_acl, new action getfacl, new option getfacl_r 2009-01-23 14:08:31 +00:00
41619c2763 Demanding libisofs 0.6.13 now 2009-01-23 10:28:47 +00:00
b3b9381dad Promoted standalone libisofs to 0.6.13 2009-01-23 10:13:10 +00:00
b55cea36b1 Removing leading slash from -getfacl output of file path 2009-01-22 15:50:54 +00:00
8bb3c084e3 Restoring ACL only if -acl "on" 2009-01-22 15:22:57 +00:00
2c11219da5 Making use of new libisoburn macro isoburn_igopt_aaip 2009-01-22 14:33:09 +00:00
2e7f566be0 New macro isoburn_igopt_aaip controls writing of AAIP info into images 2009-01-22 14:32:15 +00:00
a1dd938400 Adapted to new macro situation in libisoburn 2009-01-22 13:03:02 +00:00
d03734211f Now it is isoburn_ropt_noaaip , isoburn_ropt_noacl and isoburn_ropt_noea 2009-01-22 13:01:13 +00:00
ecbf829ea9 New option -acl enables ACL loading 2009-01-21 20:45:22 +00:00
d678296449 Had to split isoburn_ropt_noaaip into isoburn_ropt_noacl and isoburn_ropt_noea 2009-01-21 20:39:00 +00:00
9716ac2333 New API macro isoburn_ropt_noaaip controls enabling of AAIP loading 2009-01-21 15:02:56 +00:00
acfdb36e73 Restoring ACLs with -extract and others 2009-01-18 21:40:42 +00:00
72743ca23b New option -getfacl 2009-01-17 18:15:22 +00:00
c4ced566b1 Introduced AAIP code. Now linking with libacl. 2009-01-14 11:10:53 +00:00
2fdd8738ef Clarified that AAIP is only allowed if RRIP is present 2009-01-14 11:04:55 +00:00
bca4682e63 Avoiding use of function parameter name "class" 2009-01-10 15:40:45 +00:00
50ebdac74f Mentioned bug fix and pl01 2009-01-09 10:33:59 +00:00
e415034e60 Some small corrections of documentation 2009-01-06 12:31:11 +00:00
55ac4a7305 Documented changes and release timestamp 2009-01-05 15:36:02 +00:00
f803da91b4 Version leap to 0.3.3 2009-01-05 15:33:46 +00:00
b07e37454a Updated copyright marks to 2009 2009-01-05 14:57:55 +00:00
2d6c71d335 Standalone version switch to libburn-0.6.1 2009-01-04 11:52:18 +00:00
dcec7a1be9 Corrected some more bug with attribute list decoding 2009-01-01 19:19:43 +00:00
598d994644 Corrected some bugs with attribute list decoding 2009-01-01 16:13:16 +00:00
aac9c23152 Introduced system adapters for getting and setting EA and ACL 2009-01-01 10:48:58 +00:00
6caddd2808 Decoder for ACL to long text form 2008-12-26 12:40:04 +00:00
37f4eaa9bb Encoder for ACL long text form 2008-12-25 14:01:36 +00:00
2c2a394a61 Gave aaip_0_2 a ring buffer rather than a shifted fifo 2008-12-23 14:47:00 +00:00
ef5a1c48ba A first implementation of AAIP 0.2 encoding and decoding 2008-12-21 10:19:16 +00:00
f348faeb5f Corrected message about non-matching volume id 2008-12-21 10:17:21 +00:00
9376623917 Corrected list of authors in libisoburn API documentation 2008-12-17 11:10:41 +00:00
a0dfbc4441 Delivering doxygen input for API documentation with releases 2008-12-17 10:22:35 +00:00
28a379db83 Preparations for a more presentable online API documentation 2008-12-17 10:13:43 +00:00
2efe2b0f01 Updated xorriso documentation 2008-12-16 16:37:49 +00:00
1a5307c2e9 New option -drive_class for safety management of pseudo-drive access 2008-12-16 13:02:11 +00:00
d0f8bb5dfe Options for -as mkisofs: -input-charset, -output-charset 2008-12-14 23:12:05 +00:00
8cfade6692 Removed outdated alternative code 2008-12-14 15:16:09 +00:00
1a0195b25f New option -assert_volid 2008-12-14 09:31:52 +00:00
071a0c995e Updated xorriso web page 2008-12-13 16:23:49 +00:00
581ff82167 Revoked -format mode by_size for DVD-RW 2008-12-13 16:17:18 +00:00
3f034883a6 Demanding libburn-0.5.9 now 2008-12-13 14:46:45 +00:00
48614c76a9 New -format modes by_size_ and fast_by_size_ 2008-12-13 14:32:21 +00:00
a8575df376 New -format modes by_size_ and fast_by_size_ 2008-12-13 14:27:58 +00:00
9b0518dfe9 Proper message after failed or refused formatting 2008-12-11 07:24:45 +00:00
3099f5cd6e Mentioned BD-R in man xorriso 2008-12-10 18:55:13 +00:00
ed437d4424 Enabled formatting of BD-R media to SRM-POW default size 2008-12-10 09:34:57 +00:00
fcbe94656f Got rid of Xorriso_with_regeX 2008-12-08 15:46:17 +00:00
af312dbbba Small documentation adjustments 2008-12-08 12:12:34 +00:00
b86f1b128d Requiring at least libburn-0.5.8 2008-12-08 12:11:33 +00:00
d5027ce4ec Standalone version switch to libburn-0.5.9 2008-12-08 12:07:38 +00:00
775c717fb4 Small documentation adjustments 2008-12-07 12:47:31 +00:00
87ff0c5594 Small documentation adjustments 2008-12-07 12:39:41 +00:00
f5b81c7b97 Got rid of call system() in Xorriso_mount(), new option -session_string 2008-12-07 12:25:07 +00:00
ab691084c6 Using uname() rather than #ifdef __FreeBSD__ 2008-12-06 14:08:54 +00:00
8e131041a4 New options -mount and -mount_cmd 2008-12-05 17:17:29 +00:00
e7ab799c76 New API function isoburn_get_mount_params() 2008-12-05 17:10:27 +00:00
1bc60d0c0c Bug fix: Options -extract and -extract_single were enabled with -osirrox off 2008-12-04 18:06:32 +00:00
fc58080467 Bug fix: Options -extract and -extract_single were enabled with -osirrox off 2008-12-04 17:55:30 +00:00
b905907d10 Documented changes and release timestamp 2008-12-01 20:49:47 +00:00
0913122f6f Version leap to 0.3.1 2008-12-01 20:48:49 +00:00
f8cd26f337 Updated list of bugfixes in xorriso home page 2008-12-01 12:54:54 +00:00
f7b46d31a4 Bug fix: disk patterns with relative addresses were not properly resolved 2008-12-01 12:50:14 +00:00
6caa4dc86e Removed outdated macro case Xorriso_fat_local_meM 2008-12-01 11:10:59 +00:00
dad02dc7ad Changed layout of xorriso style write pacifier line 2008-11-30 21:41:46 +00:00
8a5540c974 Gave -as mkisofs problem handlers rather than to let it abort on any error 2008-11-30 12:37:26 +00:00
55aab79ebc Reporting BD speed units with pacifier rather than DVD units 2008-11-30 09:50:38 +00:00
d78ebcf1a1 New -as cdrecord option stream_recording=on|off 2008-11-29 21:42:44 +00:00
a8e38e8f47 Re-aquiring outdev after formatting and blanking already in xorrisoburn 2008-11-29 16:59:08 +00:00
88dab185c4 Bug fix: -format as_needed did not recognize unformatted BD-RE 2008-11-29 14:09:06 +00:00
c09fd5b1dd Renamed new option -relax_compliance to -compliance, added _off rules 2008-11-29 09:10:59 +00:00
17a2d74512 Augmented version message by "and burn program" 2008-11-26 18:10:07 +00:00
3e25482521 Disabled "Starting up libraries ..." message 2008-11-26 17:50:07 +00:00
61add0eb5d Promoted standalone libisofs copy to 0.6.12 2008-11-26 17:49:00 +00:00
61f6a653ab Revoked proposal AAIP 0.0 in favor of 0.2 which is nearly like RRIP field SL 2008-11-22 16:44:28 +00:00
6241cd8e48 New option -relax_compliance 2008-11-21 16:07:03 +00:00
2a62564d46 Making use of experimental libisofs calls _rrip_version_1_10() _dir_rec_mtime() 2008-11-21 16:00:47 +00:00
6351d3e8ee Mentioned FreeBSD peculiarities in our docs 2008-11-18 22:46:39 +00:00
883fe7ff9f Demo of the emerging Arbitrary Attribute Interchange Protocol format 2008-11-18 22:38:27 +00:00
9c136a59dd Making use of new relax flag isoburn_igopt_always_gmt 2008-11-15 23:21:36 +00:00
13598dd908 Introduced new relax flag isoburn_igopt_always_gmt 2008-11-15 23:19:02 +00:00
2787932886 Adaptions to FreeBSD. Thanks to J.R. Oldroyd. 2008-11-15 13:37:54 +00:00
1bb20c2b5d Took into respect that xorriso loads non-RR images 2008-11-15 13:36:22 +00:00
91ad5bdb0e Added forgotten exit value registration to -return_with. Thanks to Steve Dodd. 2008-11-12 15:37:00 +00:00
fc84ad7fb0 Version leap to libburn-0.5.7 2008-11-12 13:14:46 +00:00
d9588c4df8 Updated xorriso home page 2008-11-11 10:41:32 +00:00
b288541937 Eventual backslash output conversion outside quotes for more terminal-safety 2008-11-10 12:38:01 +00:00
417f828cff Disabled experimental weight sorting with MBR generation 2008-11-10 12:34:05 +00:00
fa6bb24f93 Added a setlocale() call to xorriso main() 2008-11-09 10:26:32 +00:00
84135f523a Removed some defunct code from xorrisoburn.c 2008-11-07 20:19:42 +00:00
0e3b0c7013 Copying -out_charset to -in_charset after -commit 2008-11-07 17:33:59 +00:00
22dc07ce9a New option -local_charset 2008-11-06 18:38:15 +00:00
de05652cf1 Mentioned new options in xorriso homepage 2008-11-04 16:59:07 +00:00
cfdee429d9 New option -application_id 2008-11-04 16:22:51 +00:00
8286998e04 New options -charset, -in_charset, -out_charset 2008-11-03 11:57:57 +00:00
cf920a350d Enabled @ as indicator of UTC seconds in timestrings 2008-10-30 11:44:13 +00:00
c17edd608e Made -as mkisofs -path-list and --quoted_path_list switch pacifier mode 2008-10-30 11:01:58 +00:00
6acda56284 Trying to recognize isohybrid MBR for "Boot record :" message 2008-10-27 14:28:05 +00:00
d2985ef379 Precautions against patching deleted boot images 2008-10-26 14:25:01 +00:00
de9636ec47 Introduced info option -boot_image "any" "show_status" 2008-10-26 13:49:11 +00:00
2bcf60e422 Fixed SIGSEGV introduced with previous revision 2008-10-25 17:00:47 +00:00
3b14ee2117 Eventually reporting boot info with TOC of -indev, redirected drive aquiration TOC to info channel 2008-10-25 12:34:36 +00:00
e76340d4f3 Fixed image size aligment to 1 MB with follow-up sessions 2008-10-24 13:02:07 +00:00
6ee18d7f85 Gave up automatic switch to -boot_image "isolinux" "patch" after writing 2008-10-22 20:18:04 +00:00
9ae189a5e0 New options --quoted_path_list , isolinux_mbr= for -as mkisofs 2008-10-22 11:02:53 +00:00
658e0203c9 Showing a "Media summary:" with blank media 2008-10-21 12:33:09 +00:00
7041a551b1 Implemented in xorriso provisory 1 MB alignement for MBR enhanced ISO images 2008-10-21 11:26:16 +00:00
d2751a07a3 Mentioned isohybrid capability in xorriso homepage 2008-10-21 09:20:06 +00:00
3f4c998b88 Made use of new libisofs isohybrid capability 2008-10-20 18:08:28 +00:00
2db4dc66c6 libisoburn now depends on libisofs-0.6.11 2008-10-19 18:26:14 +00:00
0aa8126876 The make_isohybrid_mbr() function is now part of libisofs development 2008-10-19 17:40:52 +00:00
1e030bb23d Adapted to libisofs 0.6.11 2008-10-19 17:27:26 +00:00
da054ce8f8 Adapted to libisofs 0.6.11 2008-10-19 17:23:17 +00:00
d7bbca0ad8 Corrected a bug in make_isohybrid_mbr() 2008-10-19 07:06:49 +00:00
fcd0399831 Exposed function make_isohybrid_mbr() for discussion 2008-10-18 11:30:11 +00:00
18b3aea791 Updated xorriso web page 2008-10-17 12:35:55 +00:00
1f91959d51 Adjustments and documentation about -backslash_codes 2008-10-17 12:33:49 +00:00
0cf369eb38 New option -backslash_codes for expressing weird file names 2008-10-17 07:50:35 +00:00
c3ed47237f New options -quoted_path_list, -quoted_not_list. Multiline for -options_from_file 2008-10-15 18:26:48 +00:00
71a988fc8e Corrected a typo in xorriso web page 2008-10-15 10:39:05 +00:00
d4aa47c35c Documented changes and release timestamp 2008-10-12 13:45:20 +00:00
649c1b23e4 Version leap to 0.2.9 2008-10-12 13:44:18 +00:00
04efd40a86 Polishing multi-line dialog 2008-10-10 13:41:07 +00:00
76770e97bf Enabled dialog for multi-lines and newline characters in quotation marks 2008-10-10 13:11:46 +00:00
cb6646d49e Introduced xorriso development compiler script option -no_libreadline 2008-10-09 15:01:06 +00:00
cd92b00f61 Introduced libburn ./configure option --disable-libreadline 2008-10-09 15:00:11 +00:00
a0972af58f Changed newly introduced -rom_toc_scan nonrom_off to off:emul_off 2008-10-08 13:59:37 +00:00
8945bce9ff Polished man xorriso 2008-10-07 15:23:42 +00:00
b4b2572286 libisoburn now demands libisofs-0.6.10 2008-10-06 11:50:08 +00:00
e40ddf8834 Adapted standalone LIBISOFS_*_VERSION to libisofs 0.6.10 2008-10-06 11:42:01 +00:00
afd2f0cd61 libisoburn now demands libburn-0.5.4 2008-10-05 12:53:24 +00:00
e93ab421c2 Adapted standalone BURN_*_VERSION to libburn 0.5.5 2008-10-05 12:52:23 +00:00
e65346cd1b Bug fix: Random target filenames with looping symbolic links 2008-10-05 09:37:44 +00:00
7685ca5d64 -rom_toc_scan nonrom_off disables toc emulation on overwriteables 2008-10-05 07:55:20 +00:00
5d939f185c Relocated the El Torito paragraph in man xorriso 2008-10-04 17:32:45 +00:00
c1c033900e Fine tuning about ./configure option --disable-libreadline 2008-10-02 11:09:20 +00:00
e1c4ed7d17 Introduced xorriso-standalone ./configure option --disable-libreadline 2008-10-02 10:55:28 +00:00
8898c58d3c Enabled -as cdrecord blank=as_needed 2008-10-02 09:27:21 +00:00
18da5ec3f2 Small adjustments about -boot_image 2008-10-02 09:24:58 +00:00
d5ec0342cc Small adjustments about -boot_image 2008-09-30 17:50:14 +00:00
6af8449f5a Mentioned progress and bug fixes in 0.2.7 2008-09-30 10:52:32 +00:00
69a6b4f4a1 Adjustments about -boot_image after testing with various media types 2008-09-30 10:28:46 +00:00
daadfc113d Requiring libisofs-0.6.9 because of bug fixes with El Torito 2008-09-30 10:23:37 +00:00
1625db8bbd Made -boot_image isolinux activation obey -overwrite setting 2008-09-28 11:33:47 +00:00
2026814a80 Standalone version switch to libisofs-0.6.9 (vreixoml 387) to avoid SIGSEGV 2008-09-28 11:29:36 +00:00
722e091460 A first attempt on making bootable ISO images 2008-09-26 16:14:21 +00:00
2d1d4d4b37 Bug fix: -as mkisofs -iso-level was accused to be an unknown option 2008-09-26 12:10:32 +00:00
fdea98935a Trying to get pacifiers of simultaneously running emulations into sync 2008-09-24 15:55:26 +00:00
7044f2cba1 Documented changes and release timestamp 2008-09-20 09:45:17 +00:00
f65dc9aa82 Version leap to 0.2.7 2008-09-20 09:43:55 +00:00
cd999a3661 Changed WARNING about non-writeable media to NOTE severity of blank messages 2008-09-19 12:27:43 +00:00
07a137d64c Switched requirements to libisofs-0.6.8 2008-09-19 10:45:13 +00:00
26f00d4e08 Small change in man page 2008-09-19 09:10:06 +00:00
bffde87102 standalone version switch to libisofs-0.6.8 2008-09-19 09:09:26 +00:00
73a9c16384 standalone version switch to libisofs-0.6.8 2008-09-19 09:07:10 +00:00
d56541d237 Corrected message duplication about emulated sessions on overwriteable media 2008-09-17 19:39:11 +00:00
d7864bd13c Corrected falsely computed default setting of -file_size_limit 2008-09-16 18:52:58 +00:00
bc002b24de Corrected pacifier text (Ticket 141) 2008-09-16 06:05:27 +00:00
8274230e14 Correction about -check_media report and message about image loading 2008-09-13 20:45:42 +00:00
a314fb5e91 I hope this fixes doc stuff 2008-09-11 22:19:46 +00:00
f8154d6fde Issuing message at begin of image loading 2008-09-11 11:43:26 +00:00
b79a0a1f04 Updated web page 2008-09-09 08:30:33 +00:00
16f6de937e Smoothened time estimation with pacifier mkisofs style 2008-09-09 08:25:20 +00:00
410d972188 Bug fix: -format full did not re-format already formatted DVD+RW 2008-09-08 12:16:42 +00:00
5f3f860800 Made use of new libisofs call iso_image_update_sizes() 2008-09-08 09:48:43 +00:00
7f40fbce00 Removed outdated alternative code for support of libisofs-0.6.6 2008-09-07 14:48:05 +00:00
c89012cb1f Documentation polishing 2008-09-06 14:22:17 +00:00
5fbc089f44 Minor documentation polishing 2008-09-05 12:10:27 +00:00
dde99a34a4 Documented forgotten option -publisher 2008-09-05 11:52:17 +00:00
1967c876a6 -commit_eject, -alter_date, -alter_date_r, -pacifier, -prog_help had wrong argument count prediction 2008-09-05 11:50:29 +00:00
262d987004 Updated development feature list 2008-09-05 09:55:37 +00:00
0987770afa New option -list_delimiter 2008-09-05 09:54:38 +00:00
0be7fe3329 New option -check_media_defaults 2008-09-04 10:02:58 +00:00
62dbe3cbd0 New -error_behavior "file_extraction" behavior "best_effort" 2008-09-03 14:33:14 +00:00
1f1439f774 New option -extract_cut 2008-09-02 16:48:59 +00:00
74aa1ed45e Corrected a typo in man page 2008-08-27 17:39:48 +00:00
993ad6b8b4 Reacted on compiler warning 2008-08-27 12:22:23 +00:00
6821aa77b8 New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3 2008-08-27 12:13:07 +00:00
63b4b64230 Adjusted man page statements about file size limits 2008-08-26 21:04:24 +00:00
ba75c58f0e Adopting next development step of libisofs 2008-08-26 16:33:55 +00:00
1a265f7645 Adjusted HTML generator to recent man page changes 2008-08-26 12:36:12 +00:00
e80a9626ce Documented changes and release timestamp 2008-08-24 18:18:46 +00:00
98fef56409 Version leap to 0.2.5 2008-08-24 17:53:12 +00:00
cec06c2a9a Reacted on compiler warning 2008-08-24 12:54:00 +00:00
32486a5ca2 Fixed a bug with -check_media use=outdev 2008-08-24 12:45:25 +00:00
2745faabd2 New -error_behavior behavior occasion "file_extraction" 2008-08-24 10:07:24 +00:00
0465f55485 New -error_behavior behavior occaseion "file_extraction" 2008-08-24 09:56:49 +00:00
d889ba7077 New -check_media option -patch_lba0= 2008-08-22 23:27:21 +00:00
6eef826c60 Synced -lsl display of major,minor numbers with /usr/include/sys/sysmacros.h 2008-08-21 07:07:23 +00:00
fbc3e6992c Made -check_media process first 32 blocks of a multi-session overwriteable 2008-08-20 18:18:58 +00:00
5abdf19a48 Demanding libburn-0.5.2 now 2008-08-20 12:11:05 +00:00
feb3c10d1a Adopted to new libburn version 0.5.3 2008-08-20 10:15:24 +00:00
96121a70dc New -find action report_lba 2008-08-18 13:42:44 +00:00
552911da11 Reacted on compiler warning 2008-08-17 22:14:50 +00:00
1d1f3a2265 -find tests -damaged and -lba_range, new -find action report_damage 2008-08-17 22:05:48 +00:00
3d23a621b2 Mentioned progress of development version 2008-08-15 16:10:28 +00:00
c6c82c8333 Enabled printing of sector bitmaps by use=sector_map 2008-08-15 15:55:35 +00:00
afc27f89fe Allowed independent redirecton of result and info channel 2008-08-15 10:29:47 +00:00
b5d7d75598 New option -check_media 2008-08-14 22:15:35 +00:00
8ab1fcd4f5 Changed wrong update message from MB to kB 2008-08-14 22:06:22 +00:00
c0cc40121f New capability to redirect program output used for toc in sector map file 2008-08-13 19:08:07 +00:00
9b85bc0fed Corrected documentation of isoburn_disc_get_msc1() 2008-08-13 18:55:31 +00:00
235cbe3dfe Adapted media evaluation to CD peculiarities 2008-08-11 20:17:09 +00:00
0f0a2e4bb5 Evaluating readability of media 2008-08-09 16:14:16 +00:00
1fd02ceba2 Create emulated toc entry for simple ISO session on overwriteable media 2008-08-09 16:10:50 +00:00
784684eb92 Demanding libburn-0.5.1 now 2008-08-09 16:06:18 +00:00
d3b35b50cd Minor changes around display of time and byte counts 2008-08-07 11:26:37 +00:00
8bce9569e1 Removed obsolete function 2008-08-06 14:40:30 +00:00
94f9c9acf8 Removed obsolete type definition 2008-08-06 14:39:30 +00:00
aeb98c3abb Better finish time estimation with -pacifier mkisofs 2008-08-01 14:11:25 +00:00
a6da71ba36 Better finish time estimation with -pacifier mkisofs 2008-08-01 10:13:10 +00:00
ee7f121a25 Producing on overwriteables a partial TOC up to first damaged superblock 2008-07-26 07:51:42 +00:00
0c7086525b Used quotation marks as does ./bootstrap when generating Makefile.in 2008-07-21 16:17:44 +00:00
708be0cde6 Reacting on ticket 138 by stick, revoked buildstamp due to ugly make install 2008-07-21 15:52:59 +00:00
becac4eba6 Introduced automatic buildstamp generation for dynamic library version 2008-07-19 11:30:08 +00:00
319ab37ad9 Version leap to 0.2.3 2008-07-18 14:07:48 +00:00
a68624cc5c Removed MULTI construction site remarks 2008-07-17 18:44:41 +00:00
a745366913 Recognizing growisofs follow-up sessions on xorriso overwriteables 2008-07-17 18:29:50 +00:00
31809252e8 Rectified usage of original xorriso options underneath growisofs 2008-07-17 11:13:32 +00:00
58ba5aeff6 Ability to emulate a featured bug with mkisofs -C : read 16 block too early 2008-07-17 11:07:42 +00:00
4088bf38a6 Recognizing "b" as speed factor for BD media 2008-07-16 14:00:01 +00:00
404d120b75 Required libburn version is now 0.5.0 2008-07-16 13:11:10 +00:00
ad1762c790 Required libburn version is now 0.5.0 2008-07-16 13:08:09 +00:00
35ff5db496 Updated xorriso standalone configure.ac version number BURN_*_VERSION 2008-07-16 13:07:17 +00:00
d10f3fa7a1 New option -pacifier, more compatible pacifier with -as mkisofs 2008-07-16 13:06:31 +00:00
d382bdba17 New option tsize= with -as cdrecord 2008-07-15 12:18:08 +00:00
af36e5e127 Generating automatic build timestamp 2008-07-15 06:29:58 +00:00
69b0edc261 Small correction with a sed expression 2008-07-14 17:39:12 +00:00
88d94ad7b7 New option -isosize with -as cdrecord 2008-07-14 12:50:53 +00:00
8b5af86a64 New flag options with isoburn_read_iso_head() 2008-07-14 12:04:51 +00:00
cf9bc140b1 Did LT_CURRENT++, LT_AGE++ which was forgotten with revision 1885 2008-07-14 11:45:30 +00:00
a9c0fb6e58 Required libburn version is now 0.4.9 2008-07-14 11:44:39 +00:00
06bcc637d6 New options --grow_overwriteable_iso and write_start_address= with -as cdrecord 2008-07-12 18:48:15 +00:00
c02edc329d New info mode 2 with isoburn_read_iso_head() 2008-07-12 18:18:09 +00:00
7765835374 Some documentation updates 2008-07-10 17:25:19 +00:00
d8b6e69429 Installing softlink xorrecord pointing to the xorriso binary 2008-07-10 16:43:42 +00:00
eddb70823e Reacted on compiler warning 2008-07-10 16:39:36 +00:00
ed03897759 cdrecord emulation by start names xorrecord, cdrecord, wodim, cdrskin 2008-07-10 16:27:35 +00:00
c104b0a073 Header file forgotten with rev 1903 2008-07-10 14:44:59 +00:00
b45fd0553e Small correction in API introduction text 2008-07-10 14:18:33 +00:00
25fd92f2c4 Enabled -multi and -msinfo with -as cdrecord 2008-07-10 14:16:57 +00:00
41aa050551 Completed (unused) dist rule of standalone-xorriso 2008-07-09 20:11:34 +00:00
766129ec66 Opportunity to generate build timestamp via make buildstamped 2008-07-09 15:56:23 +00:00
d825fc1a3a Fixed bug with -as mkisofs -x and pattern expansion 2008-07-09 06:08:03 +00:00
eb9f0f6d6a Avoided to use MMC code with -as mkisofs -M by prepending stdio: to address 2008-07-09 05:51:08 +00:00
d17ddda7db Avoided misleading message about emptied ISO image during -as mkisofs -C 2008-07-08 13:20:17 +00:00
4d3ef02838 Header file forgotten with rev 1897 2008-07-08 10:26:00 +00:00
d42e7b2d9f Installing softlinks xorrisofs and osirrox pointing to the xorriso binary 2008-07-08 09:27:05 +00:00
4ea0e15acb Made leafname triggered emulation more similar to -as emulation 2008-07-08 08:25:07 +00:00
e5ba798b14 Clarification about -grow_blindly predicted_nwa 2008-07-07 15:04:00 +00:00
673a0e9d2f Correction about isoburn_igopt_get_effective_lba() with blind growing 2008-07-07 15:03:03 +00:00
7a7232f16e Correction about -as mkisofs -C if already an input device was set 2008-07-07 15:02:02 +00:00
52d89cc7cc Semi-permanent emulation by start names xorrisofs,genisofs,mkisofs,genioimage 2008-07-07 10:29:38 +00:00
048bbbe1ef Fixed bug about -as mkisofs without -C 2008-07-07 09:55:07 +00:00
1e95e13263 Improved effective drive address with -as mkisofs -M 2008-07-06 11:03:02 +00:00
3cd9763879 Updated xorriso homepage 2008-07-05 19:21:22 +00:00
94638d6e9b Cared for a peculiarity of growisofs when using mkisofs -C 2008-07-05 18:43:57 +00:00
9fa0a6f441 New options -C and -M for -as mkisofs 2008-07-05 18:23:46 +00:00
362ecda0f3 Fixed a bug with -grow_blindly to overwriteable media 2008-07-05 18:02:03 +00:00
f96fdc339a New option -grow_blindly 2008-07-05 13:36:48 +00:00
88ef7d06f4 New API function isoburn_prepare_blind_grow() for -as mkisofs -multi 2008-07-05 13:25:06 +00:00
837f60c2e4 Supporting option -as cdrecord -waiti 2008-07-04 06:59:31 +00:00
ea36885829 Flushing stdout after each result text to deconfuse stdout/stderr with SSH 2008-07-03 13:29:44 +00:00
40d9dcf8bb Extended -as cdrecord blank= by blank type format_overwrite 2008-06-27 13:02:00 +00:00
e35f0b6841 Bug fix: -as cdrecord -atip falsely announced overwriteable DVD-RW to sdvdbackup 2008-06-27 12:41:26 +00:00
f882d323b1 Documented changes and release timestamp 2008-06-22 15:40:47 +00:00
071a3869db Version leap to 0.2.1 2008-06-22 14:04:05 +00:00
4fba3a4365 Removed duplicated help text snippet 2008-06-22 11:12:26 +00:00
0557d1653f Corrected mistake in xorriso man page 2008-06-21 18:08:19 +00:00
9dd400d630 Fixed several bugs with restorie operations 2008-06-20 16:41:08 +00:00
883551a41e New -osirrox option auto_chmod_on 2008-06-20 09:16:34 +00:00
bad48be6a9 Corrected wrong size unit MB to kB in toc scan pacifier text 2008-06-19 09:28:35 +00:00
973383bb9b Renamed isoburn_*set_msgs_submit() and slightly changed meaning 2008-06-19 09:04:04 +00:00
a1968a431d Improved pacifier with -rom_toc_scan 2008-06-18 19:28:52 +00:00
4de452fb94 Made use of isoburn_preset_msgs_submit() 2008-06-18 16:16:49 +00:00
ae5ad5a143 New API functions isoburn_preset_msgs_submit(), isoburn_set_msgs_submit() 2008-06-18 16:14:44 +00:00
ceca17e946 Made -rom_toc_scan work on closed DVD-R in a DVD-ROM drive 2008-06-18 13:20:29 +00:00
32e15b5432 Fixed a bug about -update_l 2008-06-17 17:06:25 +00:00
510ff61bf3 Reacted on harmless compiler warning 2008-06-17 13:38:44 +00:00
a14af44951 New options -map_l, -compare_l, -update_l, -extract_l 2008-06-17 12:15:16 +00:00
818de9128d Gave up the unusual parameter sequences of -extract and -paste_in 2008-06-14 18:44:42 +00:00
a15e636952 Correction about -extract / / 2008-06-14 14:04:30 +00:00
96d4e1fe92 Beautification of HTML man page 2008-06-14 10:52:16 +00:00
0d2e79ece8 New options -extract and -extract_single 2008-06-14 10:47:19 +00:00
26b3dcb1f5 New option -paste_in 2008-06-13 15:16:03 +00:00
0d407b63ad Corrections about restoring of directories 2008-06-12 11:26:31 +00:00
24ad7e5abe Proper handling of restore overwrite situations with directories and softlinks 2008-06-11 13:15:43 +00:00
d784d8f2e9 Removed outdated code parts 2008-06-10 10:02:02 +00:00
b61ca07f13 Removed outdated code parts 2008-06-10 09:42:50 +00:00
a7cfdfeadb Removed some outdated code parts 2008-06-09 16:57:07 +00:00
25c4acaf79 Allowing to restore from image with pending changes 2008-06-09 13:44:06 +00:00
daa98e8008 Fine tuning of directory attribute copying with -cp_rx 2008-06-06 10:37:13 +00:00
cada9d4ba3 Bug fix: -chmod unintentionally performed o-x as first operation 2008-06-06 08:34:02 +00:00
b595c7f836 New options -cpax, -cp_rx, cp_rax to restore files and trees from ISO to disk 2008-06-05 16:51:04 +00:00
440247dc98 Beautified HTML man page 2008-06-05 16:36:20 +00:00
fca0648618 Beautified documentation of -osirrox 2008-06-02 15:32:53 +00:00
2b55dd08fe Documented changes and release timestamp 2008-06-02 15:31:44 +00:00
df05ccc14c Version leap to 0.1.9 2008-06-02 15:29:46 +00:00
5aab9a006a Switched requirements to libisofs-0.6.6 2008-06-01 14:51:29 +00:00
e13615cff6 standalone version switch to libisofs-0.6.6 2008-06-01 14:50:21 +00:00
dc2664f753 Reacted on harmless compiler warning 2008-06-01 13:42:56 +00:00
27f8339527 Implemented oncatenation of split files during -cpx 2008-05-31 17:40:18 +00:00
b9f01ef512 New option -stream_recording 2008-05-27 20:14:51 +00:00
106ab1fb0c Improved access permission restauration by osirrox 2008-05-26 18:11:51 +00:00
8ad34a7c76 standalone version switch to libisofs-0.6.5 2008-05-26 18:09:02 +00:00
e69cd236df Some polishing with -cpx 2008-05-24 17:00:47 +00:00
751530f44e Bug fix: modifying to overwriteable target yielded unmountable results 2008-05-24 09:28:35 +00:00
6ba4b25045 Enabled osirrox of more file types, curbed with device files 2008-05-24 09:25:26 +00:00
69fd5ff008 New options -osirrox and -cpx 2008-05-22 21:08:26 +00:00
c410093711 Removed outdated code branch 2008-05-22 19:27:13 +00:00
53f462b406 First experiments of osirrox ISO-to-disk copying 2008-05-22 19:25:59 +00:00
ad33b43f99 Making Xorriso_prescan_args() safe against misunderstandings 2008-05-20 07:51:37 +00:00
a2c7c523aa Version leap to 0.1.7, requiring libburn-0.4.8 now 2008-05-18 08:48:07 +00:00
de589419da Bug fix: -findi operated on nodes which ceased existence shortly before 2008-05-18 08:21:48 +00:00
ddf698c1c4 Bug fix: -update_r and others did not work properly with relative paths 2008-05-15 19:20:59 +00:00
74da4d1749 New options -map and -map_single 2008-05-15 15:00:39 +00:00
c66cfdf72c Enabled a pacifier for compare_r 2008-05-15 09:20:05 +00:00
4866be0555 Uploaded forgotten enhancements 2008-05-14 17:48:27 +00:00
d7c4fadba3 Automatic fast format on attempt to write to unformatted DVD-RAM or BD-RE 2008-05-14 17:34:09 +00:00
b287c109c3 Required libburn version is now 0.4.7 (because of DVD-RAM BD-RE bug fix) 2008-05-14 17:31:43 +00:00
8abcf1c238 New -format types by_index and fast_by_index 2008-05-14 11:45:28 +00:00
073da62d73 Eat up leading dashes with command options, convert inner dashes to underscores 2008-05-13 18:08:53 +00:00
191f54eca2 Handled -list_format with non MMC drives 2008-05-13 18:06:04 +00:00
421693bb73 Prepared Xorriso_get_profile() for potential call without flag bit1 2008-05-13 15:38:17 +00:00
5f5b0c7016 Corrected strange behavior with non-ISO images on overwriteable media 2008-05-13 13:52:33 +00:00
6bc2d3e0a3 New option -list_formats 2008-05-13 11:58:43 +00:00
0f8e6f24db New -blank and -format modes as_needed 2008-05-12 19:36:23 +00:00
9b7451f893 Reacted on harmless compiler warning 2008-05-12 19:33:21 +00:00
fc8d4b8dbe New option -load session|track|sbsector|volid 2008-05-12 08:27:18 +00:00
96b808e0c5 New API call isoburn_set_msc1() 2008-05-12 08:13:16 +00:00
ad6585dbd7 Switched requirements to libburn-0.4.6 2008-05-12 08:07:59 +00:00
6b1eb7d79f Better behavior of update_r with no image present 2008-05-10 19:43:16 +00:00
eeab74920f Minor change in -update_r example 2008-05-10 19:41:52 +00:00
ca0179ad57 Adapted xorriso standalone production to new libburn cycle 0.4.7 2008-05-10 19:40:35 +00:00
36aa59297a Trying to better handle non ISO images on -indev 2008-05-09 20:54:58 +00:00
aeef058800 Updated details in web page 2008-05-09 20:50:07 +00:00
6b459b1cfb Updated man page examples 2008-05-08 20:54:51 +00:00
1d8e7620f0 Updated man page examples 2008-05-08 19:54:10 +00:00
cf103ac180 Adjusted reply of isoburn_disc_get_msc1() to eventual -rom_toc_scan result 2008-05-08 18:53:31 +00:00
3a4dc252f0 Mentioned new features 2008-05-08 15:24:59 +00:00
0e1f89d7c3 New TOC layout with volume id and sbsector=, new option -rom_toc_scan 2008-05-08 14:19:09 +00:00
7f1b8b07a6 Try to read header chain from alleged -ROM media (e.g. DVD+RW in -ROM drive) 2008-05-08 14:10:43 +00:00
252521f930 New format with -toc is more concise and shows volume id 2008-05-07 21:44:28 +00:00
e92b796215 New API function isoburn_read_iso_head() 2008-05-07 21:43:25 +00:00
585445ccc8 Making use of new isoburn_toc_* functions 2008-05-07 17:56:23 +00:00
e9171b5133 Reading emulated toc info from overwriteable media, new API isoburn_toc_*() 2008-05-07 17:54:55 +00:00
947bb33173 Removed some outdated ifdef cases 2008-05-07 07:14:10 +00:00
3eae8634cd Experiment for TOC on overwriteables: Keep a target_head copy of session #1 2008-05-06 14:45:49 +00:00
f830c30196 Calling isoburn_cancel_prepared_write() after failed isoburn_disc_write() 2008-05-06 08:44:28 +00:00
e412f65656 After formatting DVD-RW write 128 MB and close track to end Intermediate State 2008-05-05 21:03:28 +00:00
b7caaed66c Mentioned new options 2008-05-04 14:08:52 +00:00
8ffcf40fc4 New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m, 2008-05-04 13:36:15 +00:00
28d68a79a5 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-03 22:32:51 +00:00
1576983e17 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-03 15:11:58 +00:00
97c22f86a4 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-02 20:50:40 +00:00
f0b1cbddf3 Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-02 07:25:50 +00:00
19e803ba0d Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-01 17:41:58 +00:00
a4c4026446 Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-01 13:55:09 +00:00
68d70682dd Clarified "best_effort" behavior 2008-05-01 13:52:43 +00:00
26eb9e659d Fine tuning of HTML man page appearance 2008-05-01 12:44:26 +00:00
c3048d6282 New option -error_behavior with a first occasion image_loading 2008-05-01 12:43:39 +00:00
1a2d3bc70c Documented changes and release timestamp 2008-04-28 13:57:26 +00:00
adeaf8b749 Version leap to 0.1.5 2008-04-28 12:34:39 +00:00
4d35893fd0 Updated libisofs version number in xorriso-standalone 2008-04-28 08:24:52 +00:00
b937313bb5 Displaying free space rather than "non-data" on drive aquiry and -toc 2008-04-20 11:15:07 +00:00
e1c46f5023 Mentioned stdin with option -path_list 2008-04-20 11:12:42 +00:00
1fbe8b8010 Corrected maximum age value for read buffer tiles 2008-04-20 11:11:42 +00:00
c7355e90aa Restricted ds_read_block() messages about unreadable data to actual data block 2008-04-18 18:45:13 +00:00
26b87932a0 Changed behavior of -commit_eject "" 2008-04-12 11:21:59 +00:00
1798a8441c Corrected behavior around image data read error 2008-04-09 11:48:14 +00:00
a6b8794c7c Made libisoburn and xorriso require libburn >= 0.4.4 2008-04-08 15:35:17 +00:00
56a1512732 Followed version leaps of libburn 2008-04-08 15:33:10 +00:00
1a1694d595 Removed some unused code 2008-04-07 20:13:01 +00:00
f7b656183e Added prototype of Xorriso_option_session_log() 2008-04-07 18:57:27 +00:00
e4e6635a71 Mentioned new features 2008-04-05 11:58:20 +00:00
1c4a14c8bd Reporting amount of non-data with -toc media summary 2008-04-05 11:20:56 +00:00
529959878a Mentioned that drives close full media automatically 2008-04-05 11:17:21 +00:00
9992f64247 New option -session_log 2008-04-03 20:41:00 +00:00
992996f902 Corrected GPL version 2008-04-02 07:44:31 +00:00
0e394bca6a Replaced single 128 kB cache tile by 32 tiles of 64 kB each 2008-04-01 21:31:25 +00:00
27cde95ca0 Adjusted documentation of -split_size 2008-03-31 08:13:54 +00:00
691955d387 New option -split_size, automated splitting of oversized files 2008-03-29 16:44:39 +00:00
3474a6a981 Published coordination rules for -cut_out, -compare and -update 2008-03-27 11:33:41 +00:00
7ea03c4079 Working towards coordination of -update and -cut_out 2008-03-27 10:34:06 +00:00
f9afb4a2f9 Gave up obsoleted macros and their code branches 2008-03-26 09:21:30 +00:00
6cfbe6fcd0 Working towards coordination of -compare, -update and -cut_out 2008-03-25 17:07:58 +00:00
052f992488 Correction about Linux mount which does not accept session= with DVD. 2008-03-22 19:44:59 +00:00
a44e7db9ea Bug fix: Implicite directory attribute copying with -cut_out was wrong 2008-03-22 13:05:25 +00:00
07b54e308a Working towards coordination of -compare, -update and -cut_out 2008-03-22 13:00:38 +00:00
b0ac8b67ae Better handling of attempt to manipulate non-existent ISO image 2008-03-20 21:20:19 +00:00
3309d84dc3 Changed messages of -update and -update_r 2008-03-20 19:23:25 +00:00
65d1be4310 Added -commit_eject all to an example which involves mount 2008-03-20 19:22:32 +00:00
c90cf38e70 Added a hint about alternating media with -update_r 2008-03-19 08:21:26 +00:00
50b4c033bf Bug fix: -as mkisofs -nopad must be -no-pad 2008-03-19 08:18:51 +00:00
3bc81537a2 Documented changes and release timestamp 2008-03-12 13:35:54 +00:00
5e06e3c724 Version leap to 0.1.3 2008-03-12 13:19:10 +00:00
47c72f3059 Updated description of -cut_out 2008-03-11 13:09:56 +00:00
2309710729 Sketched split file scheme with partno,totalparts,offset,count,totalsize 2008-03-11 11:35:04 +00:00
4f047c0cf6 Some polishing about -cut_out 2008-03-09 21:11:00 +00:00
ddc230bcda New option -cut_out 2008-03-09 14:22:14 +00:00
77300abd94 Example use case for -update_r "Incremental backup of a few directory trees" 2008-03-08 12:27:22 +00:00
a4b392ef70 Adapted to iso_tree_add_new_node() 2008-03-08 10:42:45 +00:00
e9c02ebcb1 Made -update_r and -compare_r obey disabling of -follow "mount" 2008-03-07 22:04:58 +00:00
005a317059 New -findx -exec action "empty_iso_dir", workaround for ticket 132 2008-03-07 18:24:26 +00:00
5982c8e6b3 New -findx -type "m" for active mount points 2008-03-07 07:53:59 +00:00
fb1de29cfa Re-arranged development download part 2008-03-07 07:52:17 +00:00
f760da0016 Fixed bug about non existing disk_path with -update_r 2008-03-06 17:48:02 +00:00
2c00ae34ae Fixed ticket #130 - libs linking - thanks eostapets 2008-03-06 13:31:00 +00:00
1fb2d8c392 New -find actions "rm" and "rm_r", silenced comparison results with -update* 2008-03-06 11:43:08 +00:00
5a72e86936 Some man page clarification 2008-03-05 17:35:28 +00:00
10a8ce35e8 Made -compare* and -update* obey -follow links (-follow mount still not correct) 2008-03-05 17:34:06 +00:00
f01488b574 Bug fix: -follow param did not work for symbolic links 2008-03-05 12:53:20 +00:00
5f5ebb1956 Improvements about -update_r and -compare_r 2008-03-04 18:08:14 +00:00
01983365aa Adapted to libisofs Vreixo 378 2008-03-04 17:41:43 +00:00
2528d00aba Made IsoDirIter workaround obey -temp_mem_limit 2008-03-02 20:15:36 +00:00
0dfc79bd4e Made -update_r and -find -exec update safe against IsoDirIter pitfalls 2008-03-02 17:28:38 +00:00
1fb2576e93 New option update_r, -find actions "update" and "add_missing" (not yet completed) 2008-03-01 15:13:13 +00:00
4200446ffe New option -update (not yet completed) 2008-02-29 20:09:12 +00:00
c41d072448 Better handling of disk to iso address mapping during compare runs 2008-02-28 21:54:20 +00:00
2d73d52f7a Micro bug fix ported from xorriso 2008-02-28 21:44:11 +00:00
460a04fb47 New option -compare_r, new -findx -exec in_iso, -exec no_in_iso 2008-02-28 21:42:37 +00:00
388996150e 2008-02-28 21:22:50 +00:00
869c8090f4 Mentioned capability to write DVD+R/DL. 2008-02-28 13:34:34 +00:00
41ea389118 Added new action "compare" to -find 2008-02-28 13:27:44 +00:00
1aac97caf3 Installed pacifier for data reading 2008-02-27 18:58:21 +00:00
3f039e4b08 New option -compare 2008-02-26 21:45:28 +00:00
dd4dd5e1e8 Avoided to read content of non-regular files 2008-02-26 21:28:51 +00:00
e51ace31b1 Updated changelog 2008-02-25 20:46:26 +00:00
55a70f1463 Adaptions of -as mkisofs and -as cdrecord to enable full use by scdbackup 2008-02-25 20:44:41 +00:00
cc3b6f75db Adapted to libisofs 362 from Vreixo bzr 2008-02-25 17:43:16 +00:00
d8b0d85ad4 Wrong description text 2008-02-23 13:19:03 +00:00
f717634242 Various bugs and deviations around -as mkisofs -print-size 2008-02-23 12:56:18 +00:00
584aeb7dab Directed -as mkisofs -print-size to real stdout 2008-02-23 11:40:42 +00:00
d3cdbc2bfb Made libisofs version leap in xorriso-standalone 2008-02-23 10:30:32 +00:00
69056e7a2b New option -errfile_log 2008-02-23 10:28:58 +00:00
e947bdece4 Testwise implementation of libisofs.0.6.3 features 2008-02-23 10:27:19 +00:00
fa4b90c968 Changed libisofs requirements to 0.6.3 2008-02-23 10:17:04 +00:00
5fe8ac9f7f Producing ERRFILE messages where appropriate 2008-02-22 11:49:57 +00:00
1f01e954d4 Updated -help text 2008-02-21 21:11:40 +00:00
212fa7ba72 Introduced new severity ERRFILE 2008-02-21 20:46:51 +00:00
25a68fcf77 Implemented a more reasonable solution for drive truncation with regular files 2008-02-21 18:52:52 +00:00
43ea3bdef2 New option -publisher 2008-02-21 13:01:34 +00:00
aaeb1204b7 New option -as mkisofs emulates a narrow set of mkisofs gestures 2008-02-20 23:48:08 +00:00
df83afc55b Revoked inflation of file type characters to words 2008-02-20 23:29:46 +00:00
be272a685b Improved -as cdrecord 2008-02-19 21:24:05 +00:00
08c68166f3 New option -as cdrecord emulates a narrow set of cdrecord gestures 2008-02-19 18:45:17 +00:00
4a8f206aa2 Improved report format 2008-02-19 18:41:12 +00:00
40af376f57 Bug fix: -report_about higher than NOTE did not report at all 2008-02-18 21:04:55 +00:00
20dec92aab Mentioned better directory attribute copying 2008-02-16 21:17:22 +00:00
c0fc786875 Transfering properties from disk to implicit directories in image path 2008-02-16 20:26:21 +00:00
655d7a2463 Adjusted CREDITS text 2008-02-16 20:24:40 +00:00
87053caf26 Updated changelog 2008-02-15 21:59:49 +00:00
7720153674 Changed pacifier text for 0 nodes read from blank image 2008-02-15 21:21:14 +00:00
db9c0f7e0d Corrected according to content of libisofs/COPYRIGHT 2008-02-15 21:20:11 +00:00
5163a66a02 Version leap to 0.1.1 2008-02-15 21:19:24 +00:00
124 changed files with 109627 additions and 15360 deletions

View File

@ -1,16 +1,12 @@
Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
and Copyright (C) 2006-2008 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 as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
it under the terms of the GNU General Public License version 2
or later as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of

579
ChangeLog Normal file
View File

@ -0,0 +1,579 @@
libisoburn-1.2.6.tar.gz Tue Jan 08 2013
===============================================================================
* Bug fix: SIGSEGV by uninitialized local variable with
-check_media patch_lba0="on". Regression by version 1.0.6
* Bug fix: -partition_offset 16 kept -isohybrid-gpt-basdat from writing
MBR partition table entries of type 0xef
* Bug fix: -rollback did not work if indev and outdev were empty
* New API calls Xorriso_parse_line() and Xorriso__dispose_words()
* New API calls Xorriso_fetch_outlists() and Xorriso_peek_outlists()
* New API call Xorriso_start_msg_watcher()
* New API calls Xorriso__severity_cmp() and Xorriso__severity_list()
* New API calls Xorriso_sieve_add_filter, Xorriso_sieve_get_result,
Xorriso_sieve_clear_results, Xorriso_sieve_dispose, Xorriso_sieve_big
* New -boot_image partition_cyl_align mode "all"
* New -blank mode prefix "force:"
* New -osirrox settings "blocked" and "unblock"
* New command -lns for creating symbolic links
* New command -toc_of
* New command -msg_op
* New command -launch_frontend
* Proof-of-concept of a GUI frontend program: xorriso-tcltk written in Tcl/Tk.
libisoburn-1.2.4.tar.gz Fri Jul 20 2012
===============================================================================
* New API call isoburn_igopt_set_hfsp_serial_number()
* New API calls isoburn_igopt_set_prep_partition, isoburn_igopt_set_efi_bootp
* New API calls isoburn_igopt_set_hfsp_block_size() and isoburn_igopt_get_hfsp_block_size()
* New -check_media option async_chunks=
* New xorriso command -write_type
* New xorriso command -rockridge
* New xorriso command -hfsplus
* New -find tests -has_hfs_crtp, has_hfs_bless
* New -find actions set/get_hfs_crtp, set/get_hfs_bless
* New -find test -disk_path
* New -boot_image bootspec hfsplus_serial=
* New -boot_image bootspecs hfsplus_block_size= and apm_block_size=
* New -boot_image bootspecs efi_boot_part, prep_boot_part, chrp_boot_part
* Command -hide allows hiding in HFS+ filesystem
* New -as cdrecord options -tao -sao -dao
* New -as mkisofs option -log-file
* New -as mkisofs option --norock
* New -as mkisofs option -hfsplus
* New -as mkisofs option -hfsplus-file-creator-type
* New -as mkisofs options -hfs-bless and -hfs-bless-by
* New -as mkisofs option -hfsplus-serial-no
* New -as mkisofs options -hfsplus-block-size and -apm-block-size
* New -as mkisofs option -hide-hfsplus, -hide-hfsplus-list
* New -as mkisofs options -prep-boot-part, -efi-boot-part, -chrp-boot-part
* New -as mkisofs options -isohybrid-gpt-basdat, -isohybrid-gpt-hfsplus, -isohybrid-apm-hfsplus
* Bug fix: Memory corruption when reading bootable image that was truncated
* Bug fix: -update deleted MD5 of files of which only attributes had changed
libisoburn-1.2.2.tar.gz Mon Apr 02 2012
===============================================================================
* New API calls isoburn_get_attached_start_lba(), isoburn_attach_start_lba()
* New API calls isoburn_igopt_set_rr_reloc(), isoburn_igopt_get_rr_reloc()
* New API calls isoburn_ropt_set_data_cache(), isoburn_ropt_get_data_cache()
* New commands -x, -list_arg_sorting
* New command -rr_reloc_dir
* New command -data_cache_size
* New -as mkisofs option -rr_reloc, implemented option -hide-rr-moved
* Now ignoring -as mkisofs -no-split-symlink-components -no-split-symlink-fields
* Bug fix: -osirrox on:sort_lba_on -extract from / restored nearly nothing
* Bug fix: -as mkisofs without -graft-points could not handle names with "="
* Bug fix: Relaxation options joliet_rec_mtime and iso1999_rec_mtime had wrong values
libisoburn-1.2.0.tar.gz Sat Jan 28 2012
===============================================================================
* Bug fix: mkisofs emulation did not record mtime in ECMA-119 directories
* Bug fix: Program abort while drive tray is loading led to endless loop
* Bug fix: Solaris adapter mishandled write commands which failed on first try
* Bug fix: libisoburn.ver had a duplicate function entry
* New relaxations isoburn_igopt_joliet_rec_mtime,
isoburn_igopt_iso1999_rec_mtime
* Made -compliance "rec_mtime" default for xorriso
libisoburn-1.1.8.tar.gz Mon Nov 21 2011
===============================================================================
* Info document and man page for xorrecord
* New option -sleep
* Enabled recognition of QEMU DVD-ROM 0.12
* Enabled out-of the box use of xorriso on Linux guest on qemu virtio-blk-pci
libisoburn-1.1.6.tar.gz Tue Sep 27 2011
===============================================================================
* Bug fix: -extract_single extracted directory content
* Bug fix: -extract was not immediately aborted if -abort_on was triggered
* Bug fix: xorriso did not write to files in filesystems with >= 4 TB free space
* Bug fix: libisofs: ACL entries of groups and of user id 0 were not properly
recorded and cannot be restored
* Bug fix: libisofs: No ACLs were recorded on FreeBSD
* Enabled recording and restoring of extattr on FreeBSD.
* New option -list_extras
* New -osirrox option strict_acl
* New -find and -findx action list_extattr
* Workaround for collision with Linux udev which lets device links vanish
libisoburn-1.1.4.tar.gz Mon Aug 8 2011
===============================================================================
* Bug fix: xorriso native mode on some drives wrote unreadble ISO images to CD
* Bug fix: -assert_volid did not work. Regression since version 1.1.0.
* Bug fix: -acl or -xattr worked with -extract only on Linux and FreeBSD
* New option -device_links
libisoburn-1.1.2.tar.gz Fri Jul 8 2011
===============================================================================
* Bug fix: Since 1.0.6: Unreadable image produced by: xorrisofs ... >image.iso
* Bug fix: -update_r scheduled non-existing files for hardlink update
* Enabled extraction of the boot catalog file to disk filesystem
* New option -list_speeds
GNU xorriso-1.1.0.pl01.tar.gz Mon Jun 20 2011
===============================================================================
* Bug fix: Due to a bug in libburn-1.1.0, GNU xorriso-1.1.0 compiled only
on GNU/Linux, FreeBSD, and Solaris, but not on other systems.
libisoburn-1.1.0.tar.gz Sat Jun 18 2011
===============================================================================
* Bug fix: -mount_opts shared worked only with -osirrox o_excl_off
* Bug fix: xorriso command -add_plainly "any" did not add all files to the image
* Bug fix: The attempt to blank already blank DVD-RW was not gracefully blocked
* Bug fix: -as mkisofs -isohybrid-mbr without -no-pad was not cylinder aligned
* New option -signal_handling
* New option -close_damaged
* Dropped suffix .plXY from tarball name
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:
* New API function isoburn_igopt_set_part_offset()
* Hiding all non-API symbols from the linker by use of --version-script
* Now with history of release notes in ./ChangeLog file.
xorriso novelties:
* Bug fix: Regression with -hardlinks and -compliance old_rr, 0.4.2, Aug 2009
* New option -preparer_id, -as mkisofs options -p and -preparer
* New -boot_image specifier emul_type=none|hard_disk|floppy
* New boot_image boot specs partition_offset,partition_hd_cyl,partition_sec_hd
* Made behavior of -as mkisofs with unknown options more similar to original
* New -as mkisofs option -hard-disk-boot, enabled -b without -no-emul-boot
* New -as mkisofs option -e from Fedora genisoimage
* New -as mkisofs options -partition_offset,-partition_hd_cyl,-partition_sec_hd
libisoburn-0.6.0.pl00.tar.gz Fri Jul 02 2010
===============================================================================
libisoburn novelties:
xorriso novelties:
* New option -read_mkisofsrc interprets .mkisofsrc To be performed before -as
mkisofs. Performed automatically with program alias name "xorrisofs".
* Implemented -as mkisofs options -dir-mode, -file-mode, -abstract, -biblio,
-copyright
* Implemented -as mkisofs options -hide, -hide-joliet, -hide-list,
-hide-joliet-list
* 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 -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
* Bug fix: -as mkisofs option -volset was wrongly interpreted like -volid
libisoburn-0.5.8.pl00.tar.gz Mon Jun 14 2010
===============================================================================
libisoburn novelties:
* xorriso source split into more modules, object code moved into libisoburn
xorriso novelties:
* New write extension option isoburn_igopt_no_emul_toc
* New -compliance rule no_emul_toc, new -as mkisofs --no-emul-toc
* Implemented -as cdrecord -V
* Implemented -as mkisofs options -U, -N, -l, -d, -allow-lowercase
libisoburn-0.5.6.pl00.tar.gz Tue May 04 2010
===============================================================================
libisoburn novelties:
xorriso novelties:
* Allowing up to 32 boot images
* New -boot_image bootspecs
efi_path=, platform_id=, sel_crit=, id_string=, next
* New -as mkisofs options --efi-boot, -eltorito-alt-boot
libisoburn-0.5.4.pl00.tar.gz Mon Apr 19 2010
===============================================================================
libisoburn novelties:
* New API call isoburn_igopt_set_system_area()
* New API call isoburn_igopt_set_pvd_times()
* New isoburn_igopt_set_relaxed() options: only_iso_versions, no_j_force_dots
xorriso novelties:
* New -boot_image any system_area=, -as mkisofs option -G
* New -boot_image grub partition_table=on, -as mkisofs --protective-msdos-label
* New -boot_image isolinux partition_table=on, -as mkisofs -isohybrid-mbr
* New option -volume_date, -as mkisofs --modification-date=
* New -find action mkisofs_r,-as mkisofs -r
* New -find action sort_weight, -as mkisofs --sort-weight
* New -compliance options only_iso_version, no_j_force_dots avoid
a bug in GRUB 1.96. They are default now.
libisoburn-0.5.2.pl00.tar.gz Tue Mar 30 2010
===============================================================================
xorriso novelties:
* xorriso documentation is now based on a hybrid format of Texinfo and man-
page. Copies included: .texi, .info, .1 (man page)
libisoburn-0.5.0.pl00.tar.gz Tue Feb 22 2010
===============================================================================
xorriso novelties:
* The former xorriso-standalone project is now GNU xorriso under GPLv3+. This
affects some documentation and the generator script, but not the license of
libisoburn or its program xorriso.
* Bug fix: xorriso -update_r could lead to SIGSEGV if applied to a data file
rather than a directory.
* Bug fix on FreeBSD: xorriso could leave the drive tray locked.
* New option -scsi_log
libisoburn-0.4.8.pl00.tar.gz Tue Jan 26 2010
===============================================================================
xorriso novelties:
* Bug fix: xorriso did not blank CD-RW with images that were prepared
on hard disk.
* New configure option --enable-libcdio for system adapter to libcdio-0.83git
libisoburn-0.4.6.pl00.tar.gz Wed Dec 09 2009
===============================================================================
xorriso novelties:
* New options -dvd_obs and -stdio_sync
* New configure option --enable-dvd-obs-64k
libisoburn-0.4.4.pl00.tar.gz Wed Oct 28 2009
===============================================================================
xorriso novelties:
* Bug fix: With -as cdrecord : -xa1 and -xamix were ignored although they do
matter.
* Option -toc now reports the individual media type. E.g. with a DVD+RW:
"Media product: RICOHJPN/W11/49 , Ricoh Company Limited"
* New option -pvd_info displays image id strings. New options -system_id , -
volset_id allow to set such image id strings.
* New option -mount_opts tries to circumvent an eventual ban to mount the same
device twice. Some Linux systems allow to mount two sessions of the same
media only if they get fooled via the loop device.
* New option -scdbackup_tag performs the task of the scdbackup MD5 checksum
filter inside xorriso.
Already fixed by patch releases of xorriso-0.4.2:
* Bug fix: -cut_out deleted previously cut-out pieces of the same file
* Bug fix libisofs: Filenames could lose blanks during a multi-session cycle
* Bug fix: -for_backup did not enable -xattr and -md5 if no drive was chosen
yet
* Bug fix: xorrisofs -help, xorrecord -help displayed original xorriso -help
libisoburn-0.4.2.pl02.tar.gz Thu Oct 08 2009
===============================================================================
* Bug fix: -for_backup did not enable -xattr and -md5 if no drive was chosen
yet
* Bug fix: xorrisofs -help, xorrecord -help displayed original xorriso -help
Libisoburn 0.4.2.pl01
===============================================================================
* Bug fix: xorriso option -cut_out deleted previously cut-out pieces of the
same file. The bug was introduced with release 0.1.4 in March 2008.
Libisoburn 0.4.2
===============================================================================
* New write options isoburn_igopt_session_md5, isoburn_igopt_file_md5,
isoburn_igopt_file_stability allow to record MD5 checksums of session and
single data files.
* New read option isoburn_ropt_nomd5 allows to read those MD5 sums when
importing an ISO image.
xorriso novelties:
* New option -md5, new -as mkisofs option --md5 allow to record in the image
MD5 checksums for the whole session and for each single data file.
* New options -check_md5, -check_md5_r allow to verify the whole session or
single files by comparing their image data with their MD5 sums.
* Options -compare, -compare_r, -update, update_r now can use recorded MD5.
* New -find actions check_md5, get_md5, make_md5 allow to check, to display or
to recompute MD5 checksums of data files. New find test -has_md5
distinguishes data files which have recorded MD5 from files which have none.
* New -find test -has_any_xattr and action get_any_xattr allow to inspect the
libisofs specific attributes of namespace "isofs".
* Options -lsl and lsdl now display correct link counts if -hardlinks is on.
* New option -calm_drive allows to reduce drive noise if no data reading is
intended for a while.
* New option -list_profiles allows to inquire and process the list of supported
media types.
* Bug fix: xorriso -as mkisofs did not understand the -C option of growisofs
any more. (Already fixed by release 0.4.0.pl01, 20 Jul 2009)
libisoburn-0.4.0.pl01.tar.gz Mon Jul 20 2009
===============================================================================
xorriso novelties:
* New option -hardlinks enables recording and restoring of hard link relations.
* Improved reading performance with -update_r and -extract.
* New option -for_backup as shortcut for -acl -xattr -hardlinks
* Operators with option -find : -not, -or, -and, (, ), -if, -then, -else
* New -find tests -wholename, -prune
* Bug fix: SIGSEGV with option -status and no search string
* Bug fix: -load volid did not perform pattern search
* Bug fix: Copies of overwriteable media on sequential were mistaken in ROM
drives
Libisoburn 0.4.0.pl01 release notes:
* Bug fix: xorriso -as mkisofs did not understand the -C option of growisofs
any more
libisoburn-0.3.8.pl00.tar.gz Sun Apr 19 2009
===============================================================================
libisoburn novelties:
* New API calls isoburn_ropt_set_auto_incharset() and
isoburn_ropt_get_auto_incharset()
xorriso novelties:
* New options -set_filter, -set_filter_r, -find -exec set_filter allow to
manipulate the content of data files on the fly.
* New option -zisofs, built-in filters --zisofs , --gzip , --gunzip enable
compression and decompression of data file content.
* New options -external_filter , -unregister_filter, -close_filter_list allow
arbitrary external processes to do content filtering.
* New options -show_stream, -show_stream_r allow to inspect the origin and the
filters of data files in an emerging image.
* New option -auto_charset based on xattr "isofs.cs" allows to tag an ISO
filesystem image with the character set name that is in use on the current
terminal.
libisoburn-0.3.6.pl00.tar.gz Mon Mar 16 2009
===============================================================================
xorriso novelties:
* Dummy MMC adapter of libburn allows compilation on systems other than Linux,
FreeBSD
* Default of -compliance has been changed to "old_rr", new rule "new_rr"
* New -stream_recording modes with start address or "data". "on" is now 32s.
libisoburn-0.3.4.pl00.tar.gz Sun Mar 01 2009
===============================================================================
* New isoburn_read_opts values: isoburn_ropt_noaaip, isoburn_ropt_noacl,
isoburn_ropt_noea
xorriso novelties:
* New option -acl enables ACL import and export
* New options -getfacl, -getfacl_r, -setfacl, -setfacl_r, -setfacl_list
* New find tests -has_acl, -has_no_acl , new find actions getfacl, setfacl
* New option -xattr enables import and export of Extended Attributes
* New options -getfattr, -getfattr_r, -setfattr, -setfattr_r, -setfattr_list
* New find tests -has_xattr, -has_aaip, new find actions getfattr, setfattr
* New -as mkisofs options --acl and --xattr
* New option -disk_dev_ino accelerates incremental backups
libisoburn-0.3.2.pl00.tar.gz Tue Jan 06 2009
===============================================================================
* New API function isoburn_get_mount_params()
* Now depending on libburn-0.6.0 which supports BD-R media
xorriso novelties:
* Bug fix: Options -extract and -extract_single were enabled with -osirrox off
* New options -mount , -mount_cmd , -session_string
* New -format modes by_size_ and fast_by_size_
* New option -assert_volid
* New option -drive_class for safety management of pseudo-drive access
libisoburn-0.3.0.pl00.tar.gz Tue Dec 2 2008
===============================================================================
* Now depending on libisofs-0.6.12 and libburn-0.5.6 to ensure use of their
recent bug fixes
xorriso novelties:
* New options -quoted_path_list, -quoted_not_list
* New option -backslash_codes for weird file names and terminal safety
* New options -charset, -in_charset, -out_charset
* New option -local_charset allows to override locale
* New option -application_id
* New option -compliance allows certain deviations from standards
* Suitable ISOLINUX boot images are made alternatively bootable via an MBR
* Bug fix: Forgot exit value registration to -return_with.
Thanks to Steve Dodd.
* Bug fix: -format as_needed did not recognize unformatted BD-RE
* Bug fix: disk patterns with relative addresses were not properly resolved
libisoburn-0.2.8.pl00.tar.gz Wed Oct 15 2008
===============================================================================
* Now depending on libisofs-0.6.10 and libburn-0.5.4 to ensure use of their
recent bug fixes
xorriso novelties:
* Ability to write and maintain bootable ISO images based on ISOLINUX
* New ./configure option --disable-libreadline to make binary more portable
* Bug fix: -as mkisofs -iso-level was accused to be an unknown option
* Bug fix: -follow link attributed random target filenames to looping links
libisoburn-0.2.6.pl00.tar.gz Sat Sep 20 2008
===============================================================================
xorriso novelties:
* Capability to insert and extract files far larger than 4 GB
* New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
* New option -extract_cut
* New -error_behavior "file_extraction" behavior "best_effort"
* New option -check_media_defaults
* New option -list_delimiter
* Bug fix: -format full did not re-format already formatted DVD+RW
libisoburn-0.2.4.pl00.tar.gz Mo Aug 25 2008
===============================================================================
xorriso novelties:
* New option -check_media
* New -find test -damaged, new -find actions "report_damage", "report_lba"
* New -error_behavior occasion "file_extraction"
libisoburn-0.2.2.pl01.tar.gz Fr Jul 25 2008
===============================================================================
Libisoburn 0.2.2 release notes (Jul 19 2008)
* New API function isoburn_prepare_blind_grow()
* New flag bits with isoburn_set_msc1(), isoburn_read_iso_head()
xorriso novelties:
* New option -grow_blindly
* Options -C and -M for -as mkisofs emulation
* Options for -as cdrecord emulation: -multi, -msinfo, -isosize, tsize, --
grow_overwriteable_iso, write_start_address,
* New option -pacifier, more compatible pacifier with -as mkisofs
* make install creates aliases as symbolic links: osirrox, xorrisofs, xorrecord
* Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
pl01 changes (Jul 25 2008):
* Bug fix: Variable DESTDIR was not properly respected during make install
libisoburn-0.2.0.pl00.tar.gz Mon Jun 23 2008
===============================================================================
Libisoburn 0.2.0 release notes:
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
xorriso novelties:
* Bug fix: -chmod unintentionally performed o-x as first operation
* New options -cpax, -cp_rx, -cp_rax, -extract to restore files and trees from
ISO image to disk filesystem.
* New option -paste_in to copy ISO files into parts of disk files
* New options -map_l, -compare_l, -update_l, -extract_l
libisoburn-0.1.8.pl00.tar.gz Tue Jun 3 2008
===============================================================================
* Bug fix: Major,minor numbers of device files appeared as 0,1 in next session
* Bug fix: modifying to overwriteable target yielded unmountable results
xorriso novelties:
* New option -stream_recording for full speed with DVD-RAM and BD-RE
* New options -osirrox and -cpx allow to extract single files from ISO image
libisoburn-0.1.6.pl00.tar.gz Mon May 19 2008
===============================================================================
* Support for BD-RE (by depending on libburn-0.4.8)
* New API wrapper calls isoburn_toc_*() around libburn TOC inquiry calls
* New API call isoburn_read_iso_head() identifies ISO 9660 filesystems
* New API call isoburn_set_msc1() (like mount -o sbsector=)
xorriso novelties:
* Bug fix: -update_r and others did not work properly with relative paths
* New options -map and -map_single
* New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m
* Emulated -toc on overwriteable media, new -toc layout with volume id
* New option -load makes alternative sessions accessible
* New -blank and -format modes 'as_needed'
* New option -list_formats and -format mode 'by_index_'
libisoburn-0.1.4.pl00.tar.gz Wed Apr 30 2008
===============================================================================
* Improved performance with reading directory trees
* xorriso: Improved attribute transfer from disk for target
* xorriso: Incremental backup functionality by new option -update_r
* xorriso: Options -cut_out and split_size map byte intervals of oversized
files into ISO files
* xorriso: Emulation of some basic mkisofs and cdrecord options
* Dynamically linkable with release version 0.6.4 of libisofs
Version 0.1.2 was not released as libisoburn
but only as xorriso standalone version. Wed Mar 12 2008
===============================================================================
* Bug fix: -report_about HINT or higher did not report at all
* Bug fix: speed=number without unit or media type letter was always CD speed
* Bug fix: it was possible to write to appendable media which was not -indev
* Bug fix: -follow param did not work for adding non-directory symbolic links
* Bug fix: It was not possible to -add /THIS=a /b=THIS
* Improved attribute transfer from disk for implicit target directories
* New option -as "cdrecord" emulates a narrow set of cdrecord gestures
* New option -as "mkisofs" emulates a narrow set of mkisofs gestures
* New option -publisher
* New option -errfile_log
* Support for DVD+R/DL media
* New options -compare, -compare_r and according -find -exec action
* New options -update, -update_r and according -find -exec action
* New -find actions "rm", "rm_r", new -findx -type "m" -exec "empty_iso_dir"
* New option -cut_out
libisoburn-0.1.0.pl01.tar.gz Fri Feb 15 2008
===============================================================================
* Initial release of libisoburn/xorriso
* libisoburn connects libisofs and libburn
* libisoburn emulates multi-session on media without session history
* xorriso is an integrated multi-session tool for ISO 9660 Rock Ridge images
* due to a subtle mistake in ABI usage with libisofs this release had to be
restricted to dynamic linking with exactly libisofs-0.6.2 where the mistake
does no harm. A version of libisoburn which is open to all future libisofs
versions will be released shortly after libisofs.0.6.4.

View File

@ -1,7 +1,12 @@
pkgconfigdir=$(libdir)/pkgconfig
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
# was: pkgconfigdir=$(libdir)/pkgconfig
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
libincludedir=$(includedir)/libisoburn
lib_LTLIBRARIES = libisoburn/libisoburn.la
ACLOCAL_AMFLAGS = -I ./
## ========================================================================= ##
@ -9,16 +14,77 @@ lib_LTLIBRARIES = libisoburn/libisoburn.la
libisoburn_libisoburn_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
libisoburn_libisoburn_la_SOURCES = \
libisoburn/isoburn.h \
libisoburn/libisoburn.h \
libisoburn/burn_wrap.c \
libisoburn/data_source.c \
libisoburn/isoburn.c \
libisoburn/isoburn.h \
libisoburn/isofs_wrap.c \
libisoburn/libisoburn.h \
version.h
\
xorriso/xorriso.h \
xorriso/xorriso_private.h \
xorriso/sfile.h \
xorriso/sfile.c \
xorriso/aux_objects.h \
xorriso/aux_objects.c \
xorriso/findjob.h \
xorriso/findjob.c \
xorriso/check_media.h \
xorriso/check_media.c \
xorriso/misc_funct.h \
xorriso/misc_funct.c \
xorriso/text_io.h \
xorriso/text_io.c \
xorriso/match.h \
xorriso/match.c \
xorriso/emulators.h \
xorriso/emulators.c \
xorriso/disk_ops.h \
xorriso/disk_ops.c \
xorriso/cmp_update.h \
xorriso/cmp_update.c \
xorriso/parse_exec.h \
xorriso/parse_exec.c \
xorriso/opts_a_c.c \
xorriso/opts_d_h.c \
xorriso/opts_i_o.c \
xorriso/opts_p_z.c \
\
xorriso/xorrisoburn.h \
xorriso/base_obj.h \
xorriso/base_obj.c \
xorriso/lib_mgt.h \
xorriso/lib_mgt.c \
xorriso/sort_cmp.h \
xorriso/sort_cmp.c \
xorriso/drive_mgt.h \
xorriso/drive_mgt.c \
xorriso/iso_img.h \
xorriso/iso_img.c \
xorriso/iso_tree.h \
xorriso/iso_tree.c \
xorriso/iso_manip.h \
xorriso/iso_manip.c \
xorriso/write_run.h \
xorriso/write_run.c \
xorriso/read_run.h \
xorriso/read_run.c \
xorriso/filters.h \
xorriso/filters.c \
xorriso/xorriso_timestamp.h \
xorriso/xorriso_buildstamp.h
libisoburn_libisoburn_la_LIBADD = \
-lisofs \
-lburn
libinclude_HEADERS = \
libisoburn/libisoburn.h
libisoburn/libisoburn.h \
xorriso/xorriso.h
# libisoburn_libisoburn_la_CFLAGS = $(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
# $(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF) \
# $(XORRISO_DVD_OBS_64K)
## ========================================================================= ##
@ -28,21 +94,67 @@ libinclude_HEADERS = \
bin_PROGRAMS = \
xorriso/xorriso
# 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_CPPFLAGS = -Ilibisoburn
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
# xorriso_xorriso_CFLAGS = $(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
# $(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF) \
# $(XORRISO_DVD_OBS_64K)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
xorriso_xorriso_SOURCES = \
xorriso/xorriso.h \
xorriso/xorriso_private.h \
xorriso/xorriso.c \
xorriso/xorrisoburn.h \
xorriso/xorrisoburn.c \
xorriso/xorriso_timestamp.h
xorriso/xorriso_main.c
## Build test applications
# Install symbolic links to the xorriso binary
#
install-exec-hook:
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
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.
# Trying to create a build timestamp file semi-manually: make buildstamped
#
buildstamp:
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
cat xorriso/xorriso_buildstamp.h
# For now make buildstamped has to be performed explicitely.
buildstamped: buildstamp
make
# "make clean" shall remove a few stubborn .libs directories
# which George Danchev reported Dec 03 2011.
# Learned from: http://www.gnu.org/software/automake/manual/automake.html#Clean
clean-local:
-rm -rf test/.libs
## Build companion applications
noinst_PROGRAMS = \
test/compare_file
test/compare_file \
xorriso/make_xorriso_1
# A program to compare two files in mirrored trees in mounted filesystems
# To compare tree /media/dvd and /original/dir :
@ -53,12 +165,16 @@ test_compare_file_CFLAGS =
test_compare_file_LDADD =
test_compare_file_SOURCES = test/compare_file.c
# ts A80110 - A80210 : we need as minimal demo something better than test.c
# test/test
# Specialized converter from xorriso/xorriso.texi to xorriso/xorriso.1
#
xorriso_make_xorriso_1_CPPFLAGS =
xorriso_make_xorriso_1_CFLAGS =
xorriso_make_xorriso_1_LDADD =
xorriso_make_xorriso_1_SOURCES = xorriso/make_xorriso_1.c
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
# test_test_SOURCES = test/test.c
# A Proof-of-concept for frontends
bin_SCRIPTS = \
frontend/xorriso-tcltk
## ========================================================================= ##
@ -79,7 +195,9 @@ doc/html: doc/doxygen.conf
doc-upload: doc/html
scp -r $</* $(webhost):$(webpath)
all: doc
## Not by default any more.
## It is unclear who is supposed to create file ./doc/doc.lock
# all: doc
install-data-local:
if [ -f ./doc/doc.lock ]; then \
@ -112,18 +230,56 @@ indent: $(indent_files)
nodist_pkgconfig_DATA = \
libisoburn-1.pc
man_MANS = xorriso/xorriso.1
man_MANS = \
xorriso/xorriso.1 \
xorriso/xorrisofs.1 \
xorriso/xorrecord.1
info_TEXINFOS = \
xorriso/xorriso.texi \
xorriso/xorrisofs.texi \
xorriso/xorrecord.texi
EXTRA_DIST = \
bootstrap \
libisoburn-1.pc.in \
version.h.in \
doc/comments \
doc/doxygen.conf.in \
doc/partition_offset.wiki \
doc/qemu_xorriso.wiki \
doc/startup_file.txt \
frontend/frontend_pipes_xorriso.c \
frontend/README-tcltk \
frontend/xorriso-tcltk \
README \
AUTHORS \
CONTRIBUTORS \
COPYRIGHT \
COPYING \
INSTALL \
ChangeLog \
libisoburn/libisoburn.ver \
xorriso/changelog.txt \
xorriso/README \
xorriso/xorriso_buildstamp_none.h \
xorriso/README_gnu_xorriso \
xorriso/make_docs.sh \
releng/README \
releng/auto_cxx \
releng/auto_isocontent \
releng/auto_printsize \
releng/change_shell_to_use \
releng/codesamples/api_3lib.cpp \
releng/codesamples/api_xorriso.cpp \
releng/inc/releng_getopts.inc \
releng/jigdo-gen-md5-list \
releng/jigdo-gen-md5-list.1 \
releng/manual_burn \
releng/manual_devices \
releng/manual_isojigdo \
releng/releng_generated_data \
releng/run_all_auto \
releng/template_new \
$(man_MANS)

228
README
View File

@ -1,15 +1,17 @@
------------------------------------------------------------------------------
libburnia-project.org
http:libburnia-project.org
------------------------------------------------------------------------------
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
libisoburn and xorriso. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org.
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2.
http://files.libburnia-project.org/releases/libisoburn-1.2.6.tar.gz
Copyright (C) 2006-2009 Vreixo Formoso,
Copyright (C) 2006-2013 Thomas Schmitt.
Provided under GPL version 2 or later.
------------------------------------------------------------------------------
libisoburn is a frontend for libraries libburn and libisofs which enables
creation and expansion of ISO-9660 filesystems on all CD/DVD media supported
creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported
by libburn. This includes media like DVD+RW, which do not support multi-session
management on media level and even plain disk files or block devices.
@ -17,7 +19,15 @@ The price for that is thorough specialization on data files in ISO-9660
filesystem images. So libisoburn is not suitable for audio (CD-DA) or any
other CD layout which does not entirely consist of ISO-9660 sessions.
Currently it is only supported on Linux with kernels >= 2.4.
xorriso is an application of libisoburn, libisofs, and libburn, which reads
commands from program arguments, files, stdin, or readline.
Its features are also available via a C language API of libisoburn.
Currently they are fully supported on Linux with kernels >= 2.4,
on FreeBSD with ATAPI/CAM support enabled in the kernel, see atapicam(4),
and on OpenSolaris (tested with kernel 5.11).
On other X/Open compliant systems libburn will only offer POSIX i/o with disk
file objects, but no direct MMC operation on CD/DVD/BD drives.
By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..."
@ -25,17 +35,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.1.0 :
- libburn.so.4 , version libburn-0.4.2 or higher
- libisofs.so.6 , version libisofs-0.6.2 or higher
Dynamic library and compile time header requirements for libisoburn-1.2.6 :
- libburn.so.4 , version libburn-1.2.6 or higher
- libisofs.so.6 , version libisofs-1.2.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.
include headers seen at compile time.
Obtain libisoburn-0.1.0.tar.gz, take it to a directory of your choice and do:
Obtain libisoburn-1.2.6.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.1.0.tar.gz
cd libisoburn-0.1.0
tar xzf libisoburn-1.2.6.tar.gz
cd libisoburn-1.2.6
Within that directory execute:
@ -44,41 +54,170 @@ Within that directory execute:
Then become superuser and execute
make install
which will make available libisoburn.so.1 .
which will make available libisoburn.so.1 and the program xorriso.
For the API concepts and calls see
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 <libisoburn/libisoburn.h> and
<libisoburn/xorriso.h>.
If -Wl,--version-script=... makes problems with the local compiler, then
disable this encapsulation feature by
./configure --disable-versioned-libs
make clean ; make
The ./configure script of libisoburn can check via pkg-config whether suitable
libburn and libisoburn are installed. Regrettably this test failed on several
systems due to local pkg-config problems. So it is disabled by default and may
be enabled by:
./configure --enable-pkg-check-modules
In this case, ./configure fails if no suitable installations are found.
xorriso
libisoburn comes with a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and
users. Its file xorriso/README_gnu_xorriso describes the tarball of the
derived package GNU xorriso as first preference for a statically linked
xorriso installation.
The libisoburn installation described above produces a dynamically linked
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
After installation documentation is available via
man xorriso
man xorrisofs
man xorrecord
Several alias links point to the xorriso binary:
xorrisofs starts xorriso with -as mkisofs emulation already enabled
xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying already enabled
By default xorriso will depend on libreadline if the readline-dev headers
are present. This dependcy can be avoided by running
./configure --prefix=/usr --disable-libreadline
make clean ; make
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() on Linux
resp. extattr_list_file() on FreeBSD
--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
--disable-external-filters
By default the filter feature is disabled if effective user id and real
user id differ. This ban can be lifted by
--enable-external-filters-setuid
In some situations Linux may deliver a better write performance to DVD drives
if 64 KB rather than 32 KB are transmitted in each write operation.
64k can be made default at configure time by:
--enable-dvd-obs-64k
libisoburn, libisofs, and libburn C language API
For the lower API concepts and calls see
./libisoburn/libisoburn.h
as well as
/usr/lib/libisofs/libisofs.h
/usr/lib/libburn/libburn.h
/usr/include/libisofs/libisofs.h
/usr/include/libburn/libburn.h
libisoburn includes a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and
users.
After installation its documentation is available via
man xorriso
xorriso C language API
Actually the dynamically linked xorriso binary is only a small start program
for the xorriso API that is implemented inside libisoburn.
There are API calls for command readers and interpreters, and there are
API calls for each single command of xorriso.
Interested programmers should have a look into the API definition at
xorriso/xorriso.h
and the start program
xorriso/xorriso_main.c
The header file xorriso.h gets installed suitable for
#include <libisoburn/xorriso.h>
So after installation of a binary libisoburn package you may find it e.g. as
/usr/include/libisoburn/xorriso.h
xorriso under control of a (GUI) frontend process
The dialog mode allows frontend programs to connect via pipes to the standard
input and output of xorriso. Several commands of xorriso help with receiving
and parsing of reply messages.
As a proof of concept, there is the Tcl/Tk script xorriso-tcltk which can
be launched by this shell command:
xorriso-tcltk
Or in the xorriso build directory, without installation of xorriso:
xorriso/xorriso -launch_frontend frontend/xorriso-tcltk --stdio --
In the running GUI, click with the rightmost mouse button on any GUI element
to get its particular help text. The "Help" button at the upper right corner
gives a short introduction and instructions for some common use cases.
See also file frontend/README-tcltk.
See its Tcl code for getting an idea how this gets achieved.
The script is part of the tarball and gets installed by make install. If a
xorriso distro package does not install it, you may get it directly from
http://libburnia-project.org/export/head/libisoburn/trunk/frontend/xorriso-tcltk
Further there is the C program frontend/frontend_pipes_xorriso.c which
forks a xorriso process and shows the same communication gestures as
xorriso-tcltk.
In particular it connects to xorriso via two pipes, sends commands, waits
for all replies of a command, picks info out of the xorriso message sieve,
and parses reply message lines into words.
Drives and Disk File Objects
The user of libisoburn applications needs rw-permission for the CD/DVD burner
devices which shall be used.
The user of libisoburn applications needs operating system dependent
permissions for the CD/DVD/BD drives which shall be used.
On Linux and FreeBSD this means -rw-permissions, even if only reading is
intended. On Solaris one needs privileges "basic,sys_devices" and r-permission,
even if writing is intended.
A list of rw-accessible drives can be obtained by
xorriso -devices
resp. by xorriso API call
Xorriso_option_devices()
resp. by libburn API call
burn_drive_scan()
A possible source of problems are hald or other automounters.
If you can spot a process "hald-addon-storage" with the address of
your desired drive, then consider to kill it.
A similar process "udisks-daemon: polling ..." can be seen on newer Linuxes.
If you cannot get rid of the automounter that easily, try whether it helps
to always load the drive tray manually before starting a write run of
xorriso. Wait until the drive light is off.
Better try to unmount an eventually mounted media before a write run.
On Debian GNU/Linux 6.0.2 amd64 there is
/lib/udev/rules.d/80-udisks.rules
where one can remove all CD drives ("sr*") from the list of automountable
devices:
KERNEL=="sd*|hd*|mmcblk*|mspblk*", ENV{UDISKS_PRESENTATION_NOPOLICY}="0"
# KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{UDISKS_PRESENTATION_NOPOLICY}="0"
Copying the recognition criterion from
/etc/udev/rules.d/70-persistent-cd.rules
one can prevent automounting a single drive, too. E.g.:
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:11.0-scsi-2:0:0:0", ENV{UDISKS_PRESENTATION_NOPOLICY}:="1"
If you cannot get rid of the automounter, try whether it helps to always load
the drive tray manually before starting a write run of xorriso. Wait until the
drive light is off and the mounted media appears.
Then try to unmount the mounted media before a write run.
Besides true optical drives, libisoburn can also address disk files as input or
@ -86,18 +225,27 @@ output drives. The addresses of the disk files have to be preceded by "stdio:".
Like:
"stdio:/tmp/pseudo_drive"
Note: xorriso by default prefixes "stdio:" to addresses outside the /dev tree
if they do not lead to an optical drive device file.
Testing
For automated and manual tests of xorriso's functionality see file
releng/README.
Result comparison with self produced ISO images
We are quite sure that libisofs produces accurate representations of the disk
files. This opinion is founded on a lot of test burns and checks by a little
test program which compares files from the mounted image with the orignals
on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
This program is not installed systemwide but stays in the installation
directory of the xorriso tarball as test/compare_file . Usually it is
directory of the libisoburn tarball as test/compare_file . Usually it is
run as -exec payload of a find command. It demands at least three arguments:
The path of the first file to compare, the prefix1 to be cut off from path
The path of the file to compare, the prefix1 to be cut off from path
and the prefix2 which gets prepended afterwards to obtain the path of the
second file to compare.
As further argument there can be -no_ctime which suppresses the comparison
@ -119,8 +267,8 @@ and vice versa:
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
it under the terms of the GNU General Public License version 2 or later
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -137,11 +285,19 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
Copyright (C) 2006-2013 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
the condition of offering the library source code used, whether
altered or unaltered, under the GPLv2+, along with the application.
Nevertheless, the safest legal position is not to link libburn with
non-GPL compatible programs.
libburnia-project.org is inspired by and in other components 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
libisoburn does not stem from their code.

View File

@ -1,22 +1,263 @@
AC_DEFUN([LIBBURNIA_SET_FLAGS],
[
case $target_os in
freebsd*)
LDFLAGS="$LDFLAGS -L/usr/local/lib"
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
;;
solaris*)
LDFLAGS="$LDFLAGS -L/usr/local/lib"
esac
])
AC_DEFUN([TARGET_SHIZZLE],
[
ARCH=""
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
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
LIBBURN_ARCH_LIBS=-lcam
# This may later be overridden by configure --enable-libdir-pkgconfig
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
;;
*)
AC_ERROR([You are attempting to compile for an unsupported platform])
ARCH=
LIBBURN_ARCH_LIBS=
# AC_ERROR([You are attempting to compile for an unsupported platform])
;;
esac
AC_MSG_RESULT([$ARCH])
])
dnl LIBBURNIA_CHECK_ICONV is by Thomas Schmitt, libburnia project
dnl It is based on gestures from:
dnl iconv.m4 serial AM7 (gettext-0.18)
dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl
AC_DEFUN([LIBBURNIA_CHECK_ICONV],
[
dnl Check whether it is allowed to link with -liconv
AC_MSG_CHECKING([for iconv() in separate -liconv ])
libburnia_liconv="no"
libburnia_save_LIBS="$LIBS"
LIBS="$LIBS -liconv"
AC_TRY_LINK([#include <stdlib.h>
#include <iconv.h>],
[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);],
[libburnia_liconv="yes"],
[LIBS="$libburnia_save_LIBS"]
)
AC_MSG_RESULT([$libburnia_liconv])
if test x"$libburnia_save_LIBS" = x"$LIBS"
then
dnl GNU iconv has no function iconv() but libiconv() and a macro iconv()
dnl It is not tested whether this is detected by above macro.
AC_CHECK_LIB(iconv, libiconv, , )
fi
dnl Check for iconv(..., const char **inbuf, ...)
AC_MSG_CHECKING([for const qualifier with iconv() ])
AC_TRY_COMPILE([
#include <stdlib.h>
#include <iconv.h>
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
], [], [libburnia_iconv_const=""], [libburnia_iconv_const="const"]
)
if test x$libburnia_iconv_const = xconst
then
AC_DEFINE_UNQUOTED([ICONV_CONST], [const])
else
AC_DEFINE_UNQUOTED([ICONV_CONST], [])
fi
test -z "$libburnia_iconv_const" && libburnia_iconv_const="no"
AC_MSG_RESULT([$libburnia_iconv_const])
])
dnl LIBBURNIA_ASSERT_ICONV is by Thomas Schmitt, libburnia project
dnl
AC_DEFUN([LIBBURNIA_ASSERT_ICONV],
[
if test x$XORRISO_ASSUME_ICONV = x
then
dnl Check for the essential gestures of libisofs/util.c
AC_MSG_CHECKING([for iconv() to be accessible now ])
AC_TRY_LINK([
#include <stdlib.h>
#include <wchar.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <stdio.h>
#include <limits.h>
#include <iconv.h>
#include <locale.h>
#include <langinfo.h>
#include <unistd.h>],
[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);
], [iconv_test="yes"], [iconv_test="no"]
)
AC_MSG_RESULT([$iconv_test])
if test x$iconv_test = xno
then
echo >&2
echo "Cannot get function iconv() to work. Configuration aborted." >&2
echo "Check whether your system needs a separate libiconv installed." >&2
echo "If it is installed but not found, try something like" >&2
echo ' export LDFLAGS="$LDFLAGS -L/usr/local/lib"' >&2
echo ' export CPPFLAGS="$CPPFLAGS -I/usr/local/include"' >&2
echo ' export LIBS="$LIBS -liconv"' >&2
echo "You may override this test by exporting variable" >&2
echo " XORRISO_ASSUME_ICONV=yes" >&2
echo >&2
(exit 1); exit 1;
fi
fi
])
dnl LIBBURNIA_TRY_READLINE is by Thomas Schmitt, libburnia project
dnl It performs the actual test compilation for readline.
dnl Variable LIBS has to be set by the caller.
AC_DEFUN([LIBBURNIA_TRY_READLINE],
[
AC_TRY_LINK([
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>],
[HIST_ENTRY **hl;
readline("");
add_history("");
hl= history_list();
], [readline_test="yes"], [readline_test="no"]
)
])
dnl LIBBURNIA_ASSERT_READLINE is by Thomas Schmitt, libburnia project
dnl It disables xorriso readline if not all needed functions are present
AC_DEFUN([LIBBURNIA_ASSERT_READLINE],
[
if test x$XORRISO_ASSUME_READLINE = x
then
dnl Check for the essential gestures of libisofs/util.c
AC_MSG_CHECKING([for desired functions in libreadline])
readline_msg=
libburnia_save_LIBS="$LIBS"
LIBS="$LIBS -lreadline"
LIBBURNIA_TRY_READLINE
if test x$readline_test = xno
then
LIBS="$libburnia_save_LIBS"
LIBS="$LIBS -lreadline -lcurses"
LIBBURNIA_TRY_READLINE
if test x$readline_test = xyes
then
readline_msg=", with -lcurses"
fi
fi
if test x$readline_test = xno
then
READLINE_DEF=
LIBS="$libburnia_save_LIBS"
fi
AC_MSG_RESULT([$readline_test $readline_msg])
fi
])
dnl LIBISOBURN_ASSERT_VERS_LIBS is by Thomas Schmitt, libburnia project
dnl It tests whether -Wl,--version-script=... works with the compiler
AC_DEFUN([LIBISOBURN_ASSERT_VERS_LIBS],
[
libburnia_save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -Wl,--version-script=libisoburn/libisoburn.ver"
AC_TRY_LINK([#include <stdio.h>], [printf("Hello\n");],
[vers_libs_test="yes"], [vers_libs_test="no"])
if test x$vers_libs_test = xno
then
LDFLAGS="$libburnia_save_LDFLAGS"
fi
])
dnl LIBBURNIA_SET_PKGCONFIG is by Thomas Schmitt, libburnia project
dnl It determines the install directory for the *.pc file.
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
AC_DEFUN([LIBBURNIA_SET_PKGCONFIG],
[
### for testing --enable-libdir-pkgconfig on Linux
### LIBBURNIA_PKGCONFDIR="$libdir"data/pkgconfig
if test "x$LIBBURNIA_PKGCONFDIR" = "x$libdir"/pkgconfig
then
dummy=dummy
else
AC_ARG_ENABLE(libdir-pkgconfig,
[ --enable-libdir-pkgconfig Install to $libdir/pkgconfig on any OS, default=no],
, enable_libdir_pkgconfig="no")
AC_MSG_CHECKING([for --enable-libdir-pkgconfig])
if test "x$enable_libdir_pkgconfig" = xyes
then
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
fi
AC_MSG_RESULT([$enable_libdir_pkgconfig])
fi
libburnia_pkgconfig_override="no"
AC_ARG_ENABLE(pkgconfig-path,
[ --enable-pkgconfig-path=DIR Absolute path of directory for libisofs-*.pc],
libburnia_pkgconfig_override="yes" , enable_pkgconfig_path="none")
AC_MSG_CHECKING([for overridden pkgconfig directory path])
if test "x$enable_pkgconfig_path" = xno
then
libburnia_pkgconfig_override="no"
fi
if test "x$enable_pkgconfig_path" = x -o "x$enable_pkgconfig_path" = xyes
then
libburnia_pkgconfig_override="invalid argument"
fi
if test "x$libburnia_pkgconfig_override" = xyes
then
LIBBURNIA_PKGCONFDIR="$enable_pkgconfig_path"
AC_MSG_RESULT([$LIBBURNIA_PKGCONFDIR])
else
AC_MSG_RESULT([$libburnia_pkgconfig_override])
fi
AC_SUBST(LIBBURNIA_PKGCONFDIR)
dnl For debugging only
### AC_MSG_RESULT([LIBBURNIA_PKGCONFDIR = $LIBBURNIA_PKGCONFDIR])
])

View File

@ -1,7 +1,11 @@
#!/bin/sh -x
aclocal
aclocal -I .
libtoolize --copy --force
autoconf
# Not with libisoburn
# autoheader
automake --foreign --add-missing --copy --include-deps

View File

@ -1,21 +1,31 @@
AC_INIT([libisoburn], [0.0.1], [http://libburnia-project.org])
AC_INIT([libisoburn], [1.2.6], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
LIBBURNIA_SET_FLAGS
dnl The API version codes are now defined in libisoburn/libisoburn.h
AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_MACRO_DIR([./])
dnl Hint: Search list for version code aspects:
dnl /AC_INIT(
dnl /ISOBURN_.*_VERSION
dnl /LT_.*
dnl /LIB.*_REQUIRED
dnl The API version codes are defined in libisoburn/libisoburn.h
dnl #define isoburn_header_version_*
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=0
ISOBURN_MICRO_VERSION=1
ISOBURN_MAJOR_VERSION=1
ISOBURN_MINOR_VERSION=2
ISOBURN_MICRO_VERSION=6
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -24,12 +34,19 @@ AC_SUBST(ISOBURN_MICRO_VERSION)
dnl AC_SUBST(ISOBURN_VERSION)
dnl Libtool versioning
dnl Generate libisoburn.so.1.0.0
dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE
dnl
dnl ts B20720
dnl ### This is the release version 1.2.6 = libisoburn.so.1.83.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 = 84 - 83 = 1 . Library name = libisoburn.so.1.83.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=1
LT_AGE=0
LT_CURRENT=84
LT_AGE=83
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -57,6 +74,23 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.])
fi
if test x$LIBISOBURN_OLD_ICONV_CONFIGURE = x
then
dnl ts B00410 : To detect the need for -liconv and const argument of iconv()
LIBBURNIA_CHECK_ICONV
else
dnl Outdated: produces double -liconv and warnings about parameter mismatch
dnl If iconv(3) is in an extra lib, then it gets added to variable LIBS.
dnl If not, then no -liconv will be added.
AC_CHECK_LIB(iconv, iconv, , )
dnl GNU iconv has no function iconv() but libiconv() and a macro iconv()
AC_CHECK_LIB(iconv, libiconv, , )
fi
AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent"
@ -70,30 +104,278 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE
AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS)
dnl Determine target directory for libisoburn-*.pc
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
LIBBURNIA_SET_PKGCONFIG
AC_ARG_ENABLE(libreadline,
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
, enable_libreadline=yes)
if test x$enable_libreadline = xyes; then
dnl Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE"
READLINE_DEF="-DXorriso_with_readlinE"
if test x$XORRISO_OLD_READLINE_CONFIGURE = x
then
dnl ts B00411 : To disable readline if not all needed functions are present
LIBBURNIA_ASSERT_READLINE
else
dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
fi
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF)
dnl ts A90329
dnl ACL and xattr do not need to be enabled in libisoburn or xorriso source
dnl but without AC_CHECK_LIB() xorriso will not be linked with -lacl .
dnl On my Linux this does work with an ACL enabled libisofs but in general
dnl it seems not be right.
dnl So for now it seems to be best to do the same configuration for libisoburn
dnl and xorriso as for libisofs.
AC_ARG_ENABLE(libacl,
[ --enable-libacl Enable use of libacl by libisofs, default=yes],
, enable_libacl=yes)
if test x$enable_libacl = xyes; then
dnl Check whether there is libacl-devel and libacl-runtime.
dnl If not, erase this macro which would enable use of acl_to_text and others
LIBACL_DEF="-DLibisofs_with_aaip_acL"
dnl The empty yes case obviously causes -lacl to be linked
AC_CHECK_HEADER(sys/acl.h, AC_CHECK_LIB(acl, acl_to_text, , LIBACL_DEF= ), LIBACL_DEF= )
else
LIBACL_DEF=
fi
AC_SUBST(LIBACL_DEF)
AC_ARG_ENABLE(xattr,
[ --enable-xattr Enable use of xattr by libisofs, default=yes],
, enable_xattr=yes)
if test x$enable_xattr = xyes; then
dnl Check whether there is the header for Linux xattr.
dnl If not, erase this macro which would enable use of listxattr and others
XATTR_DEF="-DLibisofs_with_aaip_xattR"
AC_CHECK_HEADER(attr/xattr.h, AC_CHECK_LIB(c, listxattr, X= , XATTR_DEF= ), XATTR_DEF= )
else
XATTR_DEF=
fi
AC_SUBST(XATTR_DEF)
dnl ts A90409
dnl Same situation as with xattr and ACL: libisoburn does not depend directly
dnl on zlib. But if it is enabled in libisofs then it seems wise to link it
dnl with libisoburn apps.
AC_ARG_ENABLE(zlib,
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
, enable_zlib=yes)
if test x$enable_zlib = xyes; then
dnl Check whether there is the header for zlib.
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"
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
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
dnl with libburn but also with libburn apps like xorriso.
dnl On SuSE 10.2 this is not needed. libburn finds libcdio on its own.
case $host_os in
cygwin*|mingw*)
default_libcdio=yes
;;
*)
default_libcdio=no
;;
esac
AC_ARG_ENABLE(libcdio,
[ --enable-libcdio Enable use of libcdio as system adapter, default=no (except on MSWindows)],
, enable_libcdio=$default_libcdio)
if test x$enable_libcdio = xyes; then
dnl Check whether there is libcdio-devel and libcdio-runtime.
dnl If not, erase this macro
LIBCDIO_DEF="-DLibburn_use_libcdiO"
dnl The empty yes case obviously causes -lcdio to be linked
AC_CHECK_HEADER(cdio/cdio.h, AC_CHECK_LIB(cdio, mmc_last_cmd_sense, , LIBCDIO_DEF= ), LIBCDIO_DEF= )
else
LIBCDIO_DEF=
fi
if test x$LIBCDIO_DEF = x
then
if test x$enable_libcdio = xyes
then
echo "WARNING: could not enable use of libcdio as system adapter"
fi
else
echo "enabled use of libcdio as system adapter"
fi
AC_SUBST(LIBCDIO_DEF)
AC_ARG_ENABLE(external-filters,
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
, enable_external_filters=yes)
if test x"$enable_external_filters" = xyes; then
EXTF_DEF="-DXorriso_allow_external_filterS"
echo "enabled xorriso external filter programs"
else
EXTF_DEF=
echo "disabled xorriso external filter programs"
fi
AC_SUBST(EXTF_DEF)
AC_ARG_ENABLE(external-filters-setuid,
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
, enable_external_filters_setuid=no)
if test x$enable_external_filters_setuid = xyes; then
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso external filter programs under setuid"
else
EXTF_SUID_DEF=
echo "disabled xorriso external filter programs under setuid"
fi
AC_SUBST(EXTF_SUID_DEF)
AC_ARG_ENABLE(launch-frontend,
[ --enable-launch-frontend Enable start of piped frontend program by xorriso, default=yes],
, enable_launch_frontend=yes)
if test x"$enable_launch_frontend" = xyes; then
LFRONT_DEF="-DXorriso_allow_launch_frontenD"
echo "enabled xorriso command -launch_frontend"
else
LFRONT_DEF=
echo "disabled xorriso command -launch_frontend"
fi
AC_SUBST(LFRONT_DEF)
AC_ARG_ENABLE(launch-frontend-setuid,
[ --enable-launch-frontend-setuid Enable start of piped frontend program under setuid, default=no],
, enable_launch_frontend_setuid=no)
if test x$enable_launch_frontend_setuid = xyes; then
LFRONT_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso command -launch_frontend under setuid"
else
LFRONT_SUID_DEF=
echo "disabled xorriso command -launch_frontend under setuid"
fi
AC_SUBST(LFRONT_SUID_DEF)
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for xorriso DVD/BD writing, default=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"
else
XORRISO_DVD_OBS_64K=
echo "disabled xorriso write size default 64 KB on DVD and BD"
fi
AC_SUBST(XORRISO_DVD_OBS_64K)
# Library versioning normally serves a complex purpose.
# Since libisoburn obeys strict ABI backward compatibility, it needs only the
# simple feature to declare function names "global:" or "local:". Only the
# global ones are visible to applications at library load time.
AC_ARG_ENABLE(versioned-libs,
[ --enable-versioned-libs Enable strict symbol encapsulation , default=yes],
, enable_versioned_libs=yes)
if test x$enable_versioned_libs = xyes; then
vers_libs_test=no
LIBISOBURN_ASSERT_VERS_LIBS
if test x$vers_libs_test = xno
then
echo "disabled strict symbol encapsulation (test failed)"
else
echo "enabled strict symbol encapsulation"
fi
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)
dnl >>> How to check for proper library versions ?
dnl >>> would need libburn-0.4.2 or higher .so.4
dnl >>> would need libisofs-0.6.1 or higher .so.6
AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.4.2
LIBISOFS_REQUIRED=0.6.1
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
# ------- Visible mark in configure : Start of library check
# Check for proper library versions if this is desired.
# (It fails too often on too many systems.)
AC_ARG_ENABLE(pkg-check-modules,
[ --enable-pkg-check-modules Enable pkg-config check for libburn and libisofs , default=no],
, enable_pkg_check_modules=no)
if test x$enable_pkg_check_modules = xyes; then
dnl If PKG_CHECK_MODULES is to be used after this if-block,
dnl then it might be necessary to perform PKG_PROG_PKG_CONFIG before the block.
LIBBURN_REQUIRED=1.2.6
LIBISOFS_REQUIRED=1.2.6
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
if test x$LIBCDIO_DEF = x; then
dummy=dummy
else
LIBCDIO_REQUIRED=0.83
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
fi
else
echo "checking for LIBBURN... skipped, no --enable-pkg-check-modules"
echo "checking for LIBISOFS... skipped, no --enable-pkg-check-modules"
if test x$LIBCDIO_DEF = x; then
dummy=dummy
else
echo "checking for LIBCDIO... skipped, no --enable-pkg-check-modules"
fi
fi
# ------- Visible mark in configure : End of library check
dnl Add compiler-specific flags
@ -103,17 +385,19 @@ 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 -Wextra -Wno-unused-parameter $CFLAGS"
fi
CFLAGS="$CFLAGS -DDEBUG"
CFLAGS="-DDEBUG $CFLAGS"
fi
CFLAGS="$READLINE_DEF $LIBACL_DEF $XATTR_DEF $EXTF_DEF $EXTF_SUID_DEF $LFRONT_DEF $LFRONT_SUID_DEF $ZLIB_DEF $LIBJTE_DEF $XORRISO_DVD_OBS_64K $CFLAGS"
AC_CONFIG_FILES([
Makefile
doc/doxygen.conf

85
doc/comments Normal file
View File

@ -0,0 +1,85 @@
/**
@author Mario Danic, Vreixo Formoso, Thomas Schmitt
@mainpage Libisoburn Documentation Index
@section intro Introduction
Libburnia is an open-source project for reading, mastering and writing
optical discs. This page is about its capability to read, manipulate, and
write ISO 9660 filesystems with Rock Ridge extensions. Media can be optical
media or filesystem objects.
Our scope is currently Linux 2.4 and 2.6, or FreeBSD, or OpenSolaris.
libisoburn is an add-on to libburn and libisofs which coordinates both and
also allows to grow ISO-9660 filesystem images on multi-session media as well
as on overwriteable media via the same API.
All media peculiarities are handled automatically.
xorriso is an application of all three libraries which creates, loads,
manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions.
Manipulation is not only adding or overwriting of files but also deletion,
renaming, and attribute changing. An incremental backup feature is provided.
The xorriso features are accessible via built-in command interpreters and
via a C language API.
SONAME:
libisoburn.so.1 (since 0.1.0, February 2008).
@section using Using the libraries
Our build system is based on autotools.
User experience tells us that you will need at least autotools version 1.7.
To build libisoburn go into its toplevel directory and execute:
- ./bootstrap (needed if you downloaded from SVN)
- ./configure
- make
To make the library and the xorriso application accessible for running resp.
software development:
- make install
For direct use as command line tool use the xorriso binary which among many
other features provides a mkisofs emulation via command "-as mkisofs".
See man page xorriso/xorriso.1 or GNU info document xorriso/xorriso.info.
If you want to link an own application with libisoburn, you have
two alternative APIs for choice:
- libisoburn, together with libburn and libisofs.
- xorriso, a complete representation of xorriso command line options.
It encapsulates the three lower level libraries.
Calls of both API families shall not be mixed.
For a description of the lbisoburn API read libisoburn/libisoburn.h
See file README for download and installation of a release tarball.
You will also have to install and understand the two libraries of the
Libburnia project which provide fundamental services:
libburn is the library by which preformatted data get onto optical media.
See libburn/libburn.h for its API description.
libisofs is the library to handle ISO 9660 filesystems with Rock Ridge
extensions. Its API is described in libisofs/libisofs.h .
For xorriso features see its man page xorriso/xorriso.1 or
its GNU info document xorriso/xorriso.info.
For the corresponding C language API see libisoburn/xorriso.h (resp.
xorriso/xorriso.h in the build directory).
The implementation this API is part of libisoburn.
The xorriso command line tool gets installed as dynamically linked
binary together with libisoburn.
There is also a statically linked release named GNU xorriso.
See xorriso/README_gnu_xorriso for its download and installation.
*/

View File

@ -154,13 +154,6 @@ QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = YES
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = YES
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# re-implements.
@ -477,7 +470,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = libburn \
INPUT = libisoburn \
doc \
test
@ -495,9 +488,9 @@ INPUT_ENCODING = UTF-8
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
FILE_PATTERNS = libburn.h \
comments \
libburner.c
FILE_PATTERNS = libisoburn.h \
xorriso.h \
comments
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
@ -1152,7 +1145,8 @@ HIDE_UNDOC_RELATIONS = YES
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)
HAVE_DOT = YES
# ts B10415: dot causes sigsegv on Debian buildd
HAVE_DOT = NO
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and

300
doc/faq.wiki Normal file
View File

@ -0,0 +1,300 @@
'''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 ?]
[#scsi_error What does that SCSI error message mean ?]
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?]
[#partition_offset_apple Partition offset bad on Apple ?]
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.
===== What does that SCSI error message mean ? ===== #scsi_error
Error messages labled as "SCSI" stem from the drive. They are codes of
three hexadecimal numbers, like [3 0C 00]. The first number gives an overall
classification of the problem. The other two numbers give the particular
error description.
libburn translates known error codes into text messages. They consist of
two statements: the overall classification and the error description.
E.g. [3 0C 00] Medium error. Write error.
The classification allows a guess where the problem cause might sit:
2 "Drive not ready" : This is a well normal drive state and should be handled
by libburn. If you see this outside of DEBUG messages then it happened
at an unexpected occasion. Either libburn did its job wrong, or the hardware
suffers from blackouts. Hardware can be: drive, cable, bus controller.
Workaround: Check cables. If possible, try the drive at a different
bus controller.
3 "Medium error" : This indicates a problem between drive and medium. libburn
cannot directly cause such an error by any mistake. If drive and medium
are balancing on the edge of defect, it is possible that optional settings
can cause or prevent such errors. But in many cases of drive-medium conflicts
it is mere incident whether a burn run succeeds or not.
Workaround: Try other media or another drive.
4 "Drive error" : The drive or the bus controller accuse themselves of
doing it wrong. As with "Medium error" this might be aggravated or eased by
optional settings.
Workaround: Check cables. If possible, try the drive at a different
bus controller.
5 "Illegal request" : The drive did not like a command sent by libburn.
This may be normal. But if you see this outside of DEBUG messages, then
either the drive does not comply to MMC or libburn does not do its job right.
Workaround: Submit an error report to
[http://mailman-mail1.webfaction.com/listinfo/libburn-hackers/ libburn-hackers mailing list].
B "Command aborted" : Seems to be generated by some bus controllers or
operating system SCSI drivers.
Workaround: Contact
[http://mailman-mail1.webfaction.com/listinfo/libburn-hackers/ libburn-hackers mailing list]
and be ready for experiments.
----------------------------------------------------------------------------
'''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 may manipulate and augment the MBR.
(See [http://libburnia-project.org/wiki/PartitionOffset Partition Offset Wiki]
for examples.)
There are reports of machines which will not boot from USB stick if
partition offset is 0.
===== Partition offset bad on Apple ? ===== #partition_offset_apple
Apple's "Snow Leopard" operating system refuses to mount Debian CD images
with non-zero partition offset.
The issue is still under investigation. But for now one has to choose
between mountability on Apple "Snow Leopard" or bootability from USB stick
on Kontron CG2100 "carrier grade server".
----------------------------------------------------------------------------
'''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.

232
doc/partition_offset.wiki Normal file
View File

@ -0,0 +1,232 @@
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 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].
According to a
[http://syslinux.zytor.com/archives/2011-March/016201.html thread of march 2011]
on Syslinux mailing list this enabled booting of a Kontron CG2100 server
from USB stick, which otherwise failed.
Regrettably the feature seems to prevent mounting of ISO 9660 images on
Apple "Snow Leopard" systems.
At least this is the outcome of a
[http://lists.debian.org/debian-cd/2011/04/msg00029.html debian-cd thread of april 2011].
--------------------------------------------------------------------------
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 kB.
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 MB.
E.g. by 402 kB to 2 MB.
--------------------------------------------------------------------------
Open questions:
- Shall the partition of an isohybrid image be marked bootable ?
Currently xorriso keeps the 0x80 mark of an imported MBR
resp. the 0x80 mark which xorriso 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.

503
doc/qemu_xorriso.wiki Normal file
View File

@ -0,0 +1,503 @@
This text describes how to set up a qemu virtual machine so that xorriso
on its guest GNU/Linux can operate a CD, DVD or BD recorder of the host
system.
The options follow proposals of Paolo Bonzini on qemu-devel mailing list.
My compliments for his patient guidance.
Basic knowledge about Debian and qemu was learned from
[http://www.gnu.org/s/hurd/hurd/running/qemu.html GNU Hurd qemu page].
----------------------------------------------------------------------
This start command works with with qemu-1.0-rc3:
{{{
$ qemu \
-enable-kvm \
-nographic \
-m 512 \
-net nic,model=ne2k_pci \
-net user,hostfwd=tcp::5557-:22 \
-hda /dvdbuffer/i386-install.qemu \
-drive file=/dev/sr2,if=none,id=scsicd,format=raw \
-device virtio-blk-pci,drive=scsicd,logical_block_size=2048,physical_block_size=2048 \
-cdrom .../some_image.iso
}}}
With this setup of -drive and -device it is necessary to have a
medium in the drive, when qemu gets started. Else it will refuse.
The guest system is accessible via ssh and scp at port 5557 of the
host system.
'''/dev/sr2''' is the address of the DVD drive which is handed over to the
guest system.
'''.../some_image.iso''' may be any readable file which shall serve as
virtual DVD-ROM. qemu is not happy without such a thing.
'''/dvdbuffer/i386-install.qemu''' is the disk image, where the guest operating
system was installed by:
{{{
$ qemu-img create /dvdbuffer/i386-install.qemu 8G
$ qemu \
-enable-kvm \
-m 512 \
-net nic,model=ne2k_pci \
-hda /dvdbuffer/i386-install.qemu \
-cdrom debian-6.0.3-i386-netinst.iso \
-boot d
}}}
Host system of my test is Debian GNU/Linux 6.0.2 amd64,
which had access to the Internet when the guest was installed.
----------------------------------------------------------------------
Preparations on guest system Debian GNU/Linux 6.0.3 i386
There appears no /dev/sr for the passthrough drive. Thus libburn will not
list it by its drive search function. One may use it nevertheless. But
xorriso will only do so if prefix "mmc:" is used with the address:
{{{
-dev mmc:/dev/vda
}}}
The drive will be listed by libburn if there is a symbolic link /dev/sr*
pointing to it. On Debian 6, this link persists only if it is created
by an udev rule.
In /lib/udev/rules.d/50-udev-default.rules:
{{{
KERNEL=="vda", SYMLINK+="sr1"
}}}
libburn on Linux needs rw-permission for the drive's device node.
The virtual device /dev/vda is in group "disk". Usual for CD drives is
group "cdrom", to which i (or the Debian installer ?) have added my
normal user when i installed the guest system.
Like with the symbolic link, such a change persists on Debian 6 only as
udev rule.
In /lib/udev/rules.d/91-permissions.rules:
{{{
KERNEL=="vda", GROUP="cdrom"
}}}
This should yield
{{{
lrwxrwxrwx 1 root root 3 Nov 8 11:19 /dev/sr1 -> vda
brw-rw---- 1 root cdrom 254, 0 Nov 8 11:19 /dev/vda
}}}
xorriso version must be >= 1.1.8
{{{
$ xorriso -version
}}}
tells the versions of its components on stdout:
{{{
...
xorriso version : 1.1.8
...
}}}
If your distro's xorriso is too old, consider to get and build GNU xorriso.
{{{
http://ftpmirror.gnu.org/xorriso/xorriso-1.1.8.tar.gz
}}}
Do
{{{
$ tar xzf xorriso-1.1.8.tar.gz
$ cd xorriso-1.1.8
$ ./configure && make
}}}
Either do as superuser
{{{
# make install
}}}
or execute it where it was built as
{{{
$ ./xorriso/xorriso ...arguments...
}}}
After compilation, this binary does not depend on files in the build
directory. You may move it to any other location.
For details about the following xorriso commands, read
{{{
man xorriso
man ./xorriso/xorriso.1
}}}
or with the same content
{{{
info xorriso
info ./xorriso/xorriso.info
}}}
Or read the [http://scdbackup.sourceforge.net/man_1_xorriso_devel.html online man page of xorriso].
Note that the sequence of xorriso arguments matters. They are commands
which get performed one after the other.
This differs from the behavior of mkisofs, cdrecord, et.al.,
which parse all arguments and then perform actions in a hardcoded
sequence.
Writing happens automatically if ISO filetree changes are pending
at the end of the program run. This is like with other burn tools.
(There is a command -commit for intermediate writing e.g. in dialog
mode.)
----------------------------------------------------------------------
Listing accessible drives:
{{{
$ xorriso -devices
}}}
shows on stdout:
{{{
0 -dev '/dev/sr0' rwrw-- : 'QEMU ' 'QEMU DVD-ROM'
1 -dev '/dev/sr1' rwrw-- : 'Optiarc ' 'BD RW BD-5300S'
}}}
----------------------------------------------------------------------
The burn tests are presented here for unformatted DVD-RW media.
The xorriso commands apply also to other types of optical media.
See "Other applicable media types:" further below.
----------------------------------------------------------------------
Inspecting drive and medium:
{{{
$ xorriso -outdev /dev/sr1 -toc
}}}
should show on stdout something like
{{{
Drive current: -dev '/dev/sr1'
Drive type : vendor 'Optiarc' product 'BD RW BD-5300S' revision '1.04'
Media current: DVD-RW sequential recording
Media product: RITEKW04 , Ritek Corp
Media status : is written , is closed
Media blocks : 306592 readable , 0 writable , 2298496 overall
TOC layout : Idx , sbsector , Size , Volume Id
ISO session : 1 , 0 , 106696s , ISOIMAGE
ISO session : 2 , 135536 , 108385s , ISOIMAGE
ISO session : 3 , 250240 , 56202s , ISOIMAGE
Media summary: 3 sessions, 271744 data blocks, 531m data, 0 free
}}}
----------------------------------------------------------------------
Blanking to single session capability:
This medium has to be blanked before further writing. For the DAO
test, one can save time by fast blanking, which xorriso normally
dislikes because the result is not capable of multi-session:
{{{
$ xorriso -outdev /dev/sr1 -blank deformat_quickest
}}}
should report on stderr
{{{
...
xorriso : UPDATE : Blanking ( 1.0% done in 2 seconds )
...
xorriso : UPDATE : Blanking ( 95.4% done in 36 seconds )
xorriso : UPDATE : Blanking ( 99.0% done in 37 seconds )
...
Media current: DVD-RW sequential recording
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free
}}}
Do not worry if the pacifier messages show no neat percentage progress.
Some drives report "1.0%" until they are done. Some report "1.0%"
after "99%".
----------------------------------------------------------------------
Writing a DAO session:
Use one or more moderately sized directories as input. Here: /usr/bin.
Terminate the list of -add arguments by argument "--".
It is important to have command -close "on" among the arguments.
{{{
$ xorriso -md5 on -outdev /dev/sr1 -close on -add /usr/bin --
}}}
should report on stderr
{{{
...
xorriso : UPDATE : 594 files added in 1 seconds
...
xorriso : UPDATE : Thank you for being patient. Working since 2 seconds.
xorriso : UPDATE : Writing: 32s 0.1% fifo 100% buf 0% 0.1xD
...
xorriso : UPDATE : Writing: 2704s 5.1% fifo 11% buf 0% 3.9xD
...
xorriso : UPDATE : Writing: 20208s 38.2% fifo 52% buf 99% 4.0xD
...
xorriso : UPDATE : Writing: 52885s 100.0% fifo 0% buf 99% 0.0xD
ISO image produced: 52735 sectors
Written to media : 52885 sectors at LBA 0
Writing to '/dev/sr1' completed successfully.
}}}
Do not worry if there is no progress to see for a few dozen seconds
at the beginning.
The run will last at least as long as writing of 1 GB would need.
If you write less data, then there will be a lot of zero progress
messages at the end of writing.
----------------------------------------------------------------------
Checkreading the result:
{{{
$ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / --
}}}
The word "sorry" sets the severity class of the event message, which is
emitted in case of MD5 mismatch. (See man xorriso, "Exception processing".)
This should report on stderr
{{{
...
Drive current: -indev '/dev/sr1'
Media current: DVD-RW sequential recording
Media status : is written , is closed
Media summary: 1 session, 52885 data blocks, 103m data, 0 free
Volume id : 'ISOIMAGE'
xorriso : UPDATE : 568079 content bytes read in 5 seconds
xorriso : UPDATE : 17074k content bytes read in 10 seconds
...
xorriso : UPDATE : 103.7m content bytes read in 35 seconds
File contents and their MD5 checksums match.
}}}
and the exit value should be 0, if no mismatch was reported.
A mismatch message would look like
{{{
...
MD5 MISMATCH: '/usr/bin/ncursesw5-config'
...
Mismatch detected between file contents and MD5 checksums.
xorriso : SORRY : Event triggered by MD5 comparison mismatch
xorriso : NOTE : Tolerated problem event of severity 'SORRY'
xorriso : NOTE : -return_with SORRY 32 triggered by problem severity SORRY
}}}
and the exit value would be non-zero.
----------------------------------------------------------------------
Blanking to multi-session capability:
{{{
$ xorriso -outdev /dev/sr1 -blank as_needed
}}}
This will need as long as writing the DVD-RW up to its end.
Blanking option "as_needed" lets xorriso decide what to do in order
to make the medium writable from scratch. With DVD-RW it will decide for
-blank "all".
The report on stderr should end by
{{{
...
xorriso : UPDATE : Blanking ( 98.9% done in 902 seconds )
xorriso : UPDATE : Blanking ( 99.0% done in 903 seconds )
xorriso : UPDATE : Blanking ( 99.0% done in 904 seconds )
Blanking done
xorriso : NOTE : Re-assessing -outdev '/dev/sr1'
Drive current: -outdev '/dev/sr1'
Media current: DVD-RW sequential recording
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 4489m free
}}}
----------------------------------------------------------------------
Writing multiple sessions (DVD-RW write type Incremental):
This time do not perform command -close "on", so that the medium
stays writable:
{{{
$ xorriso -md5 on -dev /dev/sr1 -add /usr/lib --
...
xorriso : UPDATE : Writing: 105280s 98.6% fifo 0% buf 77% 3.5xD
xorriso : UPDATE : Writing: 106796s 100.0% fifo 0% buf 62% 2.2xD
xorriso : UPDATE : Closing track/session. Working since 44 seconds
...
xorriso : UPDATE : Closing track/session. Working since 77 seconds
ISO image produced: 106646 sectors
Written to media : 106800 sectors at LBA 0
Writing to '/dev/sr1' completed successfully.
}}}
Checkread like after the DAO test:
{{{
$ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / --
...
xorriso : UPDATE : 204.0m content bytes read in 63 seconds
File contents and their MD5 checksums match.
}}}
Writing the second session looks like the first one. Just use another
set of input files to get a visible change in the ISO 9660 file tree:
{{{
$ xorriso -md5 on -dev /dev/sr1 -add /usr/bin --
...
Written to media : 53408 sectors at LBA 135488
Writing to '/dev/sr1' completed successfully.
}}}
And checkread the whole tree of files (i.e. both sessions):
{{{
$ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / --
...
xorriso : UPDATE : 307.8m content bytes read in 89 seconds
File contents and their MD5 checksums match.
}}}
At the end of writing a final session, the medium can be closed.
It will not take more writing unless it gets blanked or formatted.
So use command -close "on" to demand closing after writing.
{{{
$ xorriso -md5 on -dev /dev/sr1 -close on -add /usr/sbin --
...
Written to media : 16160 sectors at LBA 195056
Writing to '/dev/sr1' completed successfully.
}}}
Checkread
{{{
$ xorriso -md5 on -indev /dev/sr1 -check_md5_r sorry / --
...
Media current: DVD-RW sequential recording
Media status : is written , is closed
Media summary: 3 sessions, 176368 data blocks, 344m data, 4064m free
...
xorriso : UPDATE : 337.7m content bytes read in 97 seconds
File contents and their MD5 checksums match.
}}}
-----------------------------------------------------------------------------
If the drive tray can move by itself, you may now eject the medium:
{{{
$ xorriso -outdev /dev/sr1 -eject all
}}}
-----------------------------------------------------------------------------
Other applicable media types:
These test runs for sequential DVD-RW may be performed on CD-RW with the
same xorriso arguments. Be aware that /usr/lib will hardly fit on a CD.
So choose smaller directories for CD.
-blank "deformat_quickest" addresses a peculiarity of DVD-RW.
It will work on other media like -blank "fast".
Except the blanking runs, the tests may also be performed on BD-R, DVD-R,
DVD+R, and CD-R. But you would waste two media by this.
The first session on CD will always be written with write type SAO,
further sessions will be written with TAO.
CD-R and DVD-R have a simulation mode. It can be enabled by xorriso
command -dummy "on", but of course it will not produce readable results.
So this simulation is usable only for first sessions on blank media.
-----------------------------------------------------------------------------
Now for formatted overwritable media:
All blank, write and check runs of above tests "Writing multiple sessions"
may also be performed with DVD+RW, DVD-RAM, formatted DVD-RW, and BD-RE.
There is no way to close formatted media. The command -close "on"
gets silently ignored.
The write methods and states of formatted media differ from those of
sequential media. But xorriso presents to the user a unified
multi-session usage model, under the assumption that all emulated
sessions contain ISO 9660 filesystem images, which successively
build on each other.
So from the view of xorriso commands, the only task which makes
them differ from sequential media, is to apply optional formatting
or re-formatting.
A special case are BD-R, which xorriso may format but will not bring
into (pseudo-) overwritable state. Formatted BD-R perform Defect
Management by default, which checkreads during writing and replaces
bad block.
The mandatory formatting of unused DVD+RW and BD-RE is done by xorriso
automatically. Just start a normal write run. DVD-RAM are sold formatted.
xorriso treats overwritable media with a valid ISO 9660 filesystem as
appendable media. To make then writable from scratch, apply
-blank "as_needed", which will actually write a few bytes into the PVD
(superblock) of the ISO filesystem to invalidate it.
De-formatting is only possible with DVD-RW. E.g. by -blank "deformat".
-----------------------------------------------------------------------------
Format DVD-RW for overwriting without intermediate blanking,
or format BD-R for Defect Management:
{{{
$ xorriso -outdev /dev/sr1 -format as_needed
}}}
should report on stderr
{{{
...
xorriso : UPDATE : Formatting ( 99.0% done in 912 seconds )
Formatting done
xorriso : NOTE : Re-assessing -outdev '/dev/sr1'
Drive current: -outdev '/dev/sr1'
Media current: DVD-RW restricted overwrite
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 4488m free
}}}
As with blanking, one should not worry if the progress messages show
unplausible percentages. Some drives are more equal than others.
Formatting is said to be much stress to the medium. -format option
"as_needed" applies it only to yet unformatted media.
When performing above write tests, take care to use -blank "as_needed"
rather than -blank "deformat_quickest". Else you will get a sequential
unformatted DVD-RW rather than a formatted DVD-RW which xorriso is
willing to write from scratch.
There is no use in a separate "DAO" test on overwritable media anyway.
-----------------------------------------------------------------------------
Change the formatted size of a BD-RE:
First learn about formatted size and proposals of other sizes.
(One can issue own wishes, too. See in man xorriso, command -format.)
{{{
$ xorriso -outdev /dev/sr1 -list_formats
}}}
should tell on stdout
{{{
...
Format status: formatted, with 23610.0 MiB
BD Spare Area: 0 blocks consumed, 131072 blocks available
Format idx 0 : 00h , 11826176s , 23098.0 MiB
Format idx 1 : 01h , 11564032s , 22586.0 MiB
Format idx 2 : 30h , 11826176s , 23098.0 MiB
Format idx 3 : 30h , 11564032s , 22586.0 MiB
Format idx 4 : 30h , 12088320s , 23610.0 MiB
Format idx 5 : 31h , 12219392s , 23866.0 MiB
}}}
So lets go back from 23610.0 MiB to the default size of 23098.0 MiB
{{{
$ xorriso -outdev /dev/sr1 -format by_index_2 -blank as_needed
...
Media summary: 2 sessions, 105470 data blocks, 206m data, 22.4g free
}}}
Although the heads of the old sessions might remain readable after
-format, better do not rely on this and a append -blank "as_needed" to
avoid any data corruption.
If you want to keep the data, then make at least a checkread run.
Check whether the size has changed:
{{{
$ xorriso -outdev /dev/sr1 -list_formats
}}}
should tell on stdout
{{{
...
Format status: formatted, with 23098.0 MiB
BD Spare Area: 0 blocks consumed, 393216 blocks available
...
}}}

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]

120
frontend/README-tcltk Normal file
View File

@ -0,0 +1,120 @@
------------------------------------------------------------------------------
xorriso-tcltk
------------------------------------------------------------------------------
Copyright (C) 2012 - 2013
Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org
Provided under BSD license: Use, modify, and distribute as you like.
------------------------------------------------------------------------------
xorriso-tcltk is mainly a proof of concept for a frontend that operates
xorriso in dialog mode.
Dependencies:
- xorriso ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program
- Tcl programming language
- Tk widget toolkit
- optionally the Tcl/Tk package BWidget
It exercises several fundamental gestures of communication:
- connecting via two pipes
- sending commands
- receiving replies
- inquiring the xorriso message sieve
- using the xorriso parsing service
Note that any other language than Tcl/Tk could be used, if it only can
do i/o via standard input and standard output or via named pipes.
Further it has to perform integer arithmetics and string manipulations.
And, well, a graphical widget set would be nice.
See man xorriso for a documentation of xorriso concepts and commands.
See man xorrecord for details of the burn image file feature.
Quick start
In the xorriso build directory, without installation of xorriso:
xorriso/xorriso -launch_frontend frontend/xorriso-tcltk --stdio --
After installation of xorriso by make install:
xorriso-tcltk
Overview of GUI
The window is separated into three main areas:
- Connection to xorriso.
- Management of drives and image files.
- Inspection, manipulation, and exploitation of xorriso ISO image model.
Click the rightmost mouse button while being over any of the GUI elements
in order to get the particular help text for that element.
There is no need to close the help window. Just click another element to
get another help text.
The "Help" button in the upper right corner gives a short overview and
instructions for several common use cases.
Program start options
The Tcl shell "wish" is allergic to options which start by "-h".
So here is the output of xorriso-tcltk --help :
------------------------------------------------------------------------
Usage:
/usr/bin/xorriso-tcltk [options]
Options:
All options must be given with two dashes ("--option") in
order to distinguish them from any options of the Tcl shell.
--help
Print this text and exit.
--stdio
Establish connection to xorriso via stdin and stdout.
E.g. when letting xorriso start this frontend program:
xorriso -launch_frontend $(which xorriso-tcltk) --stdio --
--named_pipes cmd_fifo reply_fifo
Establish connection to a xorriso process started by:
xorriso -dialog on <cmd_fifo >reply_fifo
which is then ready for a run of:
xorriso-tcltk --named_pipes cmd_fifo reply_fifo
It is important that the parent of xorriso and of this
tcl/tk frontend opens the named pipe for commands before
it opens the named pipe for replies. This avoids deadlock.
--silent_start
Do not issue the start message xorriso-tcltk-version.
This works only if --silent_start is the first argument.
--no_extract
Do not allow extraction of files from ISO filesystem to
hard disk. This is not revokable during the program run.
--no_bwidget
Do not try to load the Tcl/Tk package BWidget which is
a prerequisite for the "/" file browser buttons.
--geometry {+|-}X{+|-}Y
Sets the position of the main window.
--click_to_focus
Chooses that input fields and list boxes get the keyboard
focus only when being clicked by the mouse. (Default)
--auto_focus
Chooses that the keyboard focus is where the mouse
pointer is.
--pipe_log_file path
Set a file address for logging of xorriso commands and
reply messages and enable this logging.
The log lines will be appended. Path "-" means stderr.
--script_log_file path
Set a file address for logging of major xorriso commands
and enable this logging.
The log lines will be appended. Path "-" means stderr.
If neither --stdio nor --named_pipes is given, then this script
will try to locate itself in the filesystem and start a xorriso
run that launches it again.
In the running GUI, click with the rightmost mouse button on
any GUI element to get its particular help text.
------------------------------------------------------------------------

View File

@ -0,0 +1,980 @@
/* Beefed-up example from man 2 pipe
to illustrate how xorriso is to be used by frontend programs via two pipes.
Additionally there is a standalone implementation of Xorriso_parse_line().
Copyright 2012 Thomas Schmitt, <scdbackup@gmx.net>
Unaltered provided under BSD license.
You may issue licenses of your choice for derived code, provided that they
do not infringe anybody's right to do the same for this original code.
Build:
cc -g -o frontend_pipes_xorriso frontend_pipes_xorriso.c
Usage:
./frontend_pipes_xorriso [path_to_xorriso_binary | -h]
*/
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
static int usage()
{
static char helptext[][80] = {
"usage: frontend_pipes_xorriso [path_to_xorriso|-h]",
"",
"Forks a process that runs xorriso and communicates with it via two pipes.",
"The command pipe sends payload commands and -mark commands. The reply pipe",
"receives -pkt_output lines which it dispatches to stdout and stderr.",
"The communication between both processes is made synchronous by the parent",
"awaiting the -mark message of the child.",
"Optionally the reply lines can be parsed into words. This is initiated by",
"meta command",
" @parse [prefix [separators [max_words [flag]]]]",
"which sets the four parameters for a function equivalent to",
"Xorriso_parse_line() (see xorriso.h). All reply will then be parsed and",
"non-empty word arrays are displayed. Meta command",
" @noparse",
"ends this mode.",
"Meta command",
" @drain_sieve",
"reports all recorded results of all installed message sieve filter rules.",
"For illustration perform this xorriso command sequence",
" -msg_op start_sieve - -outdev /dev/sr0 -msg_op clear_sieve - -toc",
"and then @drain_sieve.",
"@END@"
};
int i;
for (i = 0; strcmp(helptext[i], "@END@") != 0; i++)
fprintf(stderr, "%s\n", helptext[i]);
return(1);
}
/* Local helpers of parent process */
struct boss_state {
/* What the parent needs to know about its connection to xorriso */
/* The ends of the dialog pipes */
int command_fd;
int reply_fd;
/* For synchronization between boss and xorriso */
int mark_count;
char pending_mark[16];
/* Parsing_parameters. See xorriso.h Xorriso_parse_line */
int do_parse;
char progname[1024];
char prefix[1024];
char separators[256];
int max_words;
int flag;
/* A primitive catcher for result lines */
int reply_lines_size; /* 0= catching disabled */
char **reply_lines;
int reply_lines_count;
};
#define Frontend_xorriso_max_resulT 1000
/* Some basic gestures of this program: */
static int prompt_for_command(struct boss_state *boss,
char *line, int line_size);
static int transmit_command(struct boss_state *boss, char *line);
static int await_all_replies(struct boss_state *boss);
static int de_pkt_result(struct boss_state *boss);
static int drain_sieve(struct boss_state *boss);
int parse_line(char *progname, char *line,
char *prefix, char *separators, int max_words,
int *argc, char ***argv, int flag);
int dispose_parsed_words(int *argc, char ***argv);
/* Parent and child */
int main(int argc, char *argv[])
{
int command_pipe[2], reply_pipe[2];
pid_t cpid;
char *xorriso_path = "/usr/bin/xorriso";
if (argc > 1) {
if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-help") == 0 ||
strcmp(argv[1], "--help") == 0) {
usage();
exit(0);
}
xorriso_path = argv[1];
}
if (pipe(command_pipe) == -1)
{ perror("pipe"); exit(1); }
if (pipe(reply_pipe) == -1)
{ perror("pipe"); exit(1); }
cpid = fork();
if (cpid == -1)
{ perror("fork"); exit(2); }
if (cpid == 0) {
/* Child redirects stdin and stdout. Then it becomes xorriso. */
char *xargv[8];
close(command_pipe[1]); /* Close unused write end */
close(reply_pipe[0]); /* Close unused read end */
/* Attach pipe ends to stdin and stdout */
close(0);
if (dup2(command_pipe[0], 0) == -1)
{ perror("dup2(,0)"); exit(1); }
close(1);
if (dup2(reply_pipe[1], 1) == -1)
{ perror("dup2(,1)"); exit(1); }
xargv[0] = xorriso_path;
xargv[1] = "-dialog";
xargv[2] = "on";
xargv[3] = "-pkt_output";
xargv[4] = "on";
xargv[5] = "-mark";
xargv[6] = "0"; /* corresponds to mark_count = 0 in parent */
xargv[7] = NULL;
execv(xorriso_path, xargv);
perror("execv"); exit(1);
} else {
/* Parent prompts user for command lines and prints xorriso replies.
It knows when all reply text of the pending command line has arrived
by watching for -mark reply pending_mark.
*/
int ret;
char line[4096];
struct boss_state boss;
close(command_pipe[0]); /* Close unused read end */
close(reply_pipe[1]); /* Close unused write end */
memset(&boss, 0, sizeof(boss));
boss.command_fd = command_pipe[1];
boss.reply_fd = reply_pipe[0];
strcpy(boss.progname, argv[0]);
boss.reply_lines = NULL;
/* Dialog loop */
sprintf(boss.pending_mark, "%d", boss.mark_count);
while (1) {
/* Wait for pending mark and print all replies */
ret = await_all_replies(&boss);
if (ret < 0)
break;
/* Prompt for command line */
ret = prompt_for_command(&boss, line, sizeof(line));
if (ret <= 0)
break;
/* Send line and -mark command */
ret = transmit_command(&boss, line);
if (ret <= 0)
break;
}
/* >>> if child is still operational: send -rollback_end */;
/* >>> wait a short while */;
/* >>> if not yet ended: kill child */;
wait(NULL); /* Wait for child */
exit(0);
}
}
/* ------------------- Local helpers of parent process -------------------- */
static int show_parsed(struct boss_state *boss, char *line);
static int record_reply_line(struct boss_state *boss, char *line);
static int make_reply_lines(struct boss_state *boss);
static int input_interpreter(char *line, struct boss_state *boss);
/* Ask the user for command input and trigger processing of meta commands.
*/
static int prompt_for_command(struct boss_state *boss,
char *line, int line_size)
{
int l, ret;
char *line_res;
while (1) {
fprintf(stderr, "+++ Enter a command and its parameters :\n");
line_res = fgets(line, line_size - 1, stdin);
if (line_res == NULL)
return(0);
l = strlen(line);
if (l == 0) {
line[0] = '\n';
line[1] = 0;
} else if (line[l - 1] != '\n') {
line[l] = '\n';
line[l + 1] = 0;
}
/* Interpret meta commands which begin by @ */
ret = input_interpreter(line, boss);
if (ret == 0)
return(1);
if (ret < 0)
return(-1);
}
}
/* Transmit a command (which must end by white space, e.g. newline)
and its unique synchronization mark.
*/
static int transmit_command(struct boss_state *boss, char *line)
{
int ret;
char mark_line[32];
ret = write(boss->command_fd, line, strlen(line));
if (ret == -1) {
perror("write");
return(0);
}
/* Produce new unique -mark text to watch for */
(boss->mark_count)++;
sprintf(boss->pending_mark, "%d", boss->mark_count);
sprintf(mark_line, "-mark %s\n", boss->pending_mark);
ret = write(boss->command_fd, mark_line, strlen(mark_line));
if (ret == -1) {
perror("write");
return(0);
}
return(1);
}
/* Read reply messages from xorriso and wait for the expected synchronization
mark. Messages can be printed or collected in boss->reply_lines.
*/
static int await_all_replies(struct boss_state *boss)
{
int count, remainder = 0, ret;
char buf[32769], *line, *npt;
while (1) {
count = read(boss->reply_fd, buf + remainder,
sizeof(buf) - 1 - remainder);
if (count == -1) {
perror("read");
return(-1);
}
if (count == 0) {
fprintf(stderr, "+++ EOF encounterd by Master process\n");
return(-2);
}
for (npt = buf + remainder; npt < buf + count; npt++) {
if (*npt == 0) {
fprintf(stderr,
"+++ Protocol error : Reply contains 0-chars\n");
return(-1);
}
}
/* Split buf into lines */
buf[remainder + count] = 0; /* for convenience */
line = buf;
while (1) {
npt = strchr(line, '\n');
if (npt == NULL) {
/* Move line to start of buffer and set remainder */
if (line != buf) {
remainder = 0;
for (npt = line; *npt; npt++)
buf[remainder++] = *npt;
}
/* Now read more data in the hope to get a newline char */
break;
}
/* Interpret line */
*npt = 0;
if (line[0] == 'M') {
/* M-replies will be outdated until the pending command line
is completely done and the appended -mark command gets
into effect.
*/
if (strlen(line) < 6) {
fprintf(stderr,
"+++ Protocol error : M-channel line shorter than 6 chars\n");
return(-1);
}
if (strcmp(line + 5, boss->pending_mark) == 0) {
if ((line - buf) + strlen(line) + 1 < count) {
fprintf(stderr,
"+++ Protocol error : Surplus reply data after M-match\n");
fprintf(stderr, "%s\n", line + strlen(line) + 1);
return(-1);
}
return (1); /* Expected mark has arrived */
}
} else if (line[0] == 'R') {
/* R-replies are result lines of inquiry commands, like -ls.
They should be handled by specialized code which knows
how to parse and interpret them.
*/
if (boss->reply_lines_count < boss->reply_lines_size) {
ret = record_reply_line(boss, line);
if (ret <= 0)
return(ret);
} else
printf("%s\n", line);
} else {
/* I-replies are pacifiers, notifications, warnings, or
error messages. They should be handled by a general
message interpreter which determines their severity
and decides whether to bother the user.
*/
if (boss->reply_lines_count < boss->reply_lines_size) {
ret = record_reply_line(boss, line);
if (ret <= 0)
return(ret);
} else
fprintf(stderr, "%s\n", line);
}
/* Parse line and show words */
if (strlen(line) >= 5)
show_parsed(boss, line + 5);
line = npt + 1;
}
}
return(1);
}
/* Throw away I channel.
Unpack and reconstruct payload of R channel lines.
*/
static int de_pkt_result(struct boss_state *boss)
{
int i, l, w;
char *payload = NULL, *new_payload = NULL;
w = 0;
for (i = 0; i < boss->reply_lines_count; i++) {
if (boss->reply_lines[i][0] != 'R' ||
strlen(boss->reply_lines[i]) < 5)
continue;
if (payload == NULL) {
payload = strdup(boss->reply_lines[i] + 5);
} else {
l = strlen(payload);
new_payload = calloc(l + strlen(boss->reply_lines[i] + 5) + 1, 1);
if (new_payload == NULL)
goto no_mem;
strcpy(new_payload, payload);
strcpy(new_payload + l, boss->reply_lines[i] + 5);
free(payload);
payload = new_payload;
}
if (payload == NULL)
goto no_mem;
l = strlen(payload);
if (l > 0)
if (payload[l - 1] == '\n')
payload[l - 1] = 0;
if (boss->reply_lines[i][2] != '0') {
free(boss->reply_lines[w]);
boss->reply_lines[w] = payload;
w++;
payload = NULL;
}
}
for (i = w ; i < boss->reply_lines_count; i++) {
free(boss->reply_lines[i]);
boss->reply_lines[i] = NULL;
}
boss->reply_lines_count = w;
return(1);
no_mem:;
fprintf(stderr, "FATAL: Out of memory !\n");
return(-1);
}
/* Inquire and print all recorded message sieve results.
*/
static int drain_sieve(struct boss_state *boss)
{
int ret, i, j, names_size = 0, names_count = 0, first_result;
int number_of_strings, available, xorriso_ret, number_of_lines, k, r;
char **names = NULL, line[1024];
/* Install catcher for reply_lines */
ret = make_reply_lines(boss);
if (ret <= 0)
goto ex;
boss->reply_lines_size = Frontend_xorriso_max_resulT;
boss->reply_lines_count = 0;
/* Get list of filter rule names from -msg_op show_sieve */
ret = transmit_command(boss, "-msg_op show_sieve -\n");
if (ret <= 0)
goto ex;
ret = await_all_replies(boss);
if (ret <= 0)
goto ex;
ret = de_pkt_result(boss);
if (ret <= 0)
goto ex;
names = boss->reply_lines;
boss->reply_lines = NULL;
names_size = Frontend_xorriso_max_resulT;
names_count= boss->reply_lines_count;
ret = make_reply_lines(boss);
if (ret <= 0)
goto ex;
boss->reply_lines_size = Frontend_xorriso_max_resulT;
/* Inquire caught results of each name by -msg_op read_sieve
until return value is <= 0
*/
printf("--------------------------------------------------\n");
for (i = 0; i < names_count; i++) {
available = 1;
first_result = 1;
while (available > 0) {
boss->reply_lines_count = 0;
sprintf(line, "-msg_op read_sieve '%s'\n", names[i]);
ret = transmit_command(boss, line);
if (ret <= 0)
goto ex;
ret = await_all_replies(boss);
if (ret <= 0)
goto ex;
ret = de_pkt_result(boss);
if (ret <= 0)
goto ex;
if (boss->reply_lines_count < 2) {
fprintf(stderr, "drain_sieve: illegible result reply\n");
{ret= 0; goto ex;}
}
xorriso_ret = -1;
sscanf(boss->reply_lines[0], "%d", &xorriso_ret);
if(xorriso_ret <= 0)
break;
number_of_strings = -1;
sscanf(boss->reply_lines[1], "%d", &number_of_strings);
if(xorriso_ret < 0)
break;
if (first_result)
printf(" '%s' |\n", names[i]);
first_result = 0;
for (j = 0; names[i][j] != 0; j++)
printf("-");
printf("-----\n");
r = 2;
for (j = 0; j < number_of_strings && r < boss->reply_lines_count;
j++) {
number_of_lines = -1;
sscanf(boss->reply_lines[r], "%d", &number_of_lines);
r++;
printf("|");
for (k = 0; k < number_of_lines
&& r < boss->reply_lines_count; k++) {
printf("%s%s", boss->reply_lines[r],
k < number_of_lines - 1 ? "\n" : "");
r++;
}
printf("|\n");
}
}
if (first_result == 0)
printf("--------------------------------------------------\n");
}
/* Dispose all recorded results */
ret = transmit_command(boss, "-msg_op clear_sieve -\n");
if (ret <= 0)
goto ex;
ret = await_all_replies(boss);
if (ret <= 0)
goto ex;
ret = 1;
ex:;
/* Disable result catcher */
boss->reply_lines_size = 0;
if (names != NULL)
dispose_parsed_words(&names_size, &names);
return(ret);
}
/* ------------------------- Helpers of local helpers ---------------------- */
static int show_parsed(struct boss_state *boss, char *line)
{
int argc, ret = 0, i;
char **argv = NULL;
if (!boss->do_parse)
return(2);
ret = parse_line(boss->progname, line, boss->prefix, boss->separators,
boss->max_words, &argc, &argv, boss->flag);
if (ret <= 0 || argc <= 0)
return(0);
fprintf(stderr, "-----------------------------------------------------\n");
fprintf(stderr, "parse_line returns %d, argc = %d\n", ret, argc);
for (i = 0; i < argc; i++)
fprintf(stderr, "%2d : %s\n", i, argv[i]);
fprintf(stderr, "-----------------------------------------------------\n");
dispose_parsed_words(&argc, &argv); /* release memory */
return(1);
}
static int make_reply_lines(struct boss_state *boss)
{
int i;
if (boss->reply_lines != NULL)
return(1);
boss->reply_lines = calloc(Frontend_xorriso_max_resulT,
sizeof(char *));
if (boss->reply_lines == 0) {
fprintf(stderr, "FATAL: Out of memory !\n");
return(-1);
}
boss->reply_lines_count = 0;
boss->reply_lines_size = 0;
for (i = 0; i < Frontend_xorriso_max_resulT; i++)
boss->reply_lines[i] = NULL;
return(1);
}
static int record_reply_line(struct boss_state *boss, char *line)
{
if (boss->reply_lines[boss->reply_lines_count] != NULL)
free(boss->reply_lines[boss->reply_lines_count]);
boss->reply_lines[boss->reply_lines_count] = strdup(line);
if (boss->reply_lines[boss->reply_lines_count] == NULL) {
fprintf(stderr, "FATAL: Out of memory !\n");
return(-1);
}
boss->reply_lines_count++;
return(1);
}
static int input_interpreter(char *line, struct boss_state *boss)
{
int argc, ret = 0;
char **argv = NULL;
ret = parse_line(boss->progname, line, "", "", 6, &argc, &argv, 0);
if (ret <= 0 || argc <= 0)
return(0);
if (strcmp(argv[0], "@parse") == 0) {
boss->do_parse = 1;
boss->prefix[0] = 0;
if (argc > 1)
strcpy(boss->prefix, argv[1]);
boss->separators[0] = 0;
if (argc > 2)
strcpy(boss->separators, argv[2]);
boss->max_words = 0;
if (argc > 3)
sscanf(argv[3], "%d", &(boss->max_words));
boss->max_words = 0;
if (argc > 4)
sscanf(argv[4], "%d", &(boss->flag));
ret = 1;
} else if(strcmp(argv[0], "@noparse") == 0) {
boss->do_parse = 0;
ret = 1;
} else if(strcmp(argv[0], "@drain_sieve") == 0) {
ret= drain_sieve(boss);
} else {
ret = 0;
}
dispose_parsed_words(&argc, &argv); /* release memory */
return ret;
}
/* -------- Line-to-word parser equivalent to Xorriso_parse_line() -------- */
static int Sfile_sep_make_argv(char *progname, char *line, char *separators,
int max_words, int *argc, char ***argv, int flag);
int parse_line(char *progname, char *line,
char *prefix, char *separators, int max_words,
int *argc, char ***argv, int flag)
{
int ret, bsl_mode;
char *to_parse;
*argc = 0;
*argv = NULL;
to_parse = line;
bsl_mode = (flag >> 1) & 15;
if (prefix[0]) {
if (strncmp(line, prefix, strlen(prefix)) == 0) {
to_parse = line + strlen(prefix);
} else {
ret = 2; goto ex;
}
}
ret = Sfile_sep_make_argv(progname, to_parse, separators,
max_words, argc, argv,
(!(flag & 32)) | 4 | (bsl_mode << 5));
if (ret < 0) {
fprintf(stderr,
"%s : Severe lack of resources during command line parsing\n",
progname);
goto ex;
}
if (ret == 0) {
fprintf(stderr,
"%s : Incomplete quotation in %s line: %s\n",
progname, (flag & 32) ? "command" : "parsed", to_parse);
goto ex;
}
ex:;
if (ret <= 0)
Sfile_sep_make_argv("", "", "", 0, argc, argv, 2); /* release memory */
return(ret);
}
int dispose_parsed_words(int *argc, char ***argv)
{
Sfile_sep_make_argv("", "", "", 0, argc, argv, 2);
return(1);
}
/* -------------- Some helpers copied from xorriso/sfile.c ----------------- */
static int Sfile_destroy_argv(int *argc, char ***argv, int flag)
{
int i;
if(*argc>0 && *argv!=NULL){
for(i=0;i<*argc;i++){
if((*argv)[i]!=NULL)
free((*argv)[i]);
}
free((char *) *argv);
}
*argc= 0;
*argv= NULL;
return(1);
}
/* Converts backslash codes into single characters:
\a BEL 7 , \b BS 8 , \e ESC 27 , \f FF 12 , \n LF 10 , \r CR 13 ,
\t HT 9 , \v VT 11 , \\ \ 92
\[0-9][0-9][0-9] octal code , \x[0-9a-f][0-9a-f] hex code ,
\cX control-x (ascii(X)-64)
@param upto maximum number of characters to examine for backslash.
The scope of a backslash (0 to 3 characters) is not affected.
@param eaten returns the difference in length between input and output
@param flag bit0= only determine *eaten, do not convert
bit1= allow to convert \000 to binary 0
*/
static int Sfile_bsl_interpreter(char *text, int upto, int *eaten, int flag)
{
char *rpt, *wpt, num_text[8], wdummy[8];
unsigned int num= 0;
*eaten= 0;
wpt= text;
for(rpt= text; *rpt != 0 && rpt - text < upto; rpt++) {
if(flag & 1)
wpt= wdummy;
if(*rpt == '\\') {
rpt++;
(*eaten)++;
if(*rpt == 'a') {
*(wpt++)= 7;
} else if(*rpt == 'b') {
*(wpt++)= 8;
} else if(*rpt == 'e') {
*(wpt++)= 27;
} else if(*rpt == 'f') {
*(wpt++)= 12;
} else if(*rpt == 'n') {
*(wpt++)= 10;
} else if(*rpt == 'r') {
*(wpt++)= 13;
} else if(*rpt == 't') {
*(wpt++)= 9;
} else if(*rpt == 'v') {
*(wpt++)= 11;
} else if(*rpt == '\\') {
*(wpt++)= '\\';
} else if(rpt[0] >= '0' && rpt[0] <= '7' &&
rpt[1] >= '0' && rpt[1] <= '7' &&
rpt[2] >= '0' && rpt[2] <= '7') {
num_text[0]= '0';
num_text[1]= *(rpt + 0);
num_text[2]= *(rpt + 1);
num_text[3]= *(rpt + 2);
num_text[4]= 0;
sscanf(num_text, "%o", &num);
if((num > 0 || (flag & 2)) && num <= 255) {
rpt+= 2;
(*eaten)+= 2;
*(wpt++)= num;
} else
goto not_a_code;
} else if(rpt[0] == 'x' &&
((rpt[1] >= '0' && rpt[1] <= '9') ||
(rpt[1] >= 'A' && rpt[1] <= 'F') ||
(rpt[1] >= 'a' && rpt[1] <= 'f'))
&&
((rpt[2] >= '0' && rpt[2] <= '9') ||
(rpt[2] >= 'A' && rpt[2] <= 'F') ||
(rpt[2] >= 'a' && rpt[2] <= 'f'))
) {
num_text[0]= *(rpt + 1);
num_text[1]= *(rpt + 2);
num_text[2]= 0;
sscanf(num_text, "%x", &num);
if(num > 0 && num <= 255) {
rpt+= 2;
(*eaten)+= 2;
*(wpt++)= num;
} else
goto not_a_code;
} else if(*rpt == 'c') {
if(rpt[1] > 64 && rpt[1] < 96) {
*(wpt++)= rpt[1] - 64;
rpt++;
(*eaten)++;
} else
goto not_a_code;
} else {
not_a_code:;
*(wpt++)= '\\';
rpt--;
(*eaten)--;
}
} else
*(wpt++)= *rpt;
}
*wpt= *rpt;
return(1);
}
#define SfileadrL 4096
static int Sfile_sep_make_argv(char *progname, char *line, char *separators,
int max_words, int *argc, char ***argv, int flag)
/*
bit0= read progname as first argument from line
bit1= just release argument list argv and return
bit2= abort with return(0) if incomplete quotes are found
bit3= eventually prepend missing '-' to first argument read from line
bit4= like bit2 but only check quote completeness, do not allocate memory
bit5+6= interpretation of backslashes:
0= no interpretation, leave unchanged
1= only inside double quotes
2= outside single quotes
3= everywhere
bit7= append a NULL element to argv
*/
{
int i,pass,maxl=0,l,argzaehl=0,bufl,line_start_argc, bsl_mode, ret= 0, eaten;
char *cpt,*start;
char *buf= NULL;
Sfile_destroy_argv(argc,argv,0);
if(flag&2)
{ret= 1; goto ex;}
if(flag & 16)
flag|= 4;
bsl_mode= (flag >> 5) & 3;
buf= calloc(strlen(line) + SfileadrL, 1);
if(buf == NULL)
{ret= -1; goto ex;}
for(pass=0;pass<2;pass++) {
cpt= line-1;
if(!(flag&1)){
argzaehl= line_start_argc= 1;
if(pass==0)
maxl= strlen(progname);
else
strcpy((*argv)[0],progname);
} else {
argzaehl= line_start_argc= 0;
if(pass==0) maxl= 0;
}
while(*(++cpt)!=0){
if(*separators) {
if(strchr(separators, *cpt) != NULL)
continue;
} else if(isspace(*cpt))
continue;
start= cpt;
buf[0]= 0;
cpt--;
if(max_words > 0 && argzaehl >= max_words && *cpt != 0) {
/* take uninterpreted up to the end */
cpt+= strlen(cpt) - 1;
}
while(*(++cpt)!=0) {
if(*separators) {
if(strchr(separators, *cpt) != NULL)
break;
} else if(isspace(*cpt))
break;
if(*cpt=='"'){
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
start= cpt+1;
while(*(++cpt)!=0) if(*cpt=='"') break;
if((flag&4) && *cpt==0)
{ret= 0; goto ex;}
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l);
buf[bufl + l]= 0;
if(bsl_mode >= 1) {
ret= Sfile_bsl_interpreter(buf + bufl, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
start= cpt+1;
}else if(*cpt=='\''){
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
start= cpt+1;
while(*(++cpt)!=0) if(*cpt=='\'') break;
if((flag&4) && *cpt==0)
{ret= 0; goto ex;}
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncat(buf,start,l);buf[bufl+l]= 0;
if(bsl_mode >= 2) {
ret= Sfile_bsl_interpreter(buf + bufl, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
start= cpt+1;
}
if(*cpt==0) break;
}
l= cpt-start;
bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
if(pass==0){
if(argzaehl==line_start_argc && (flag&8))
if(buf[0]!='-' && buf[0]!=0 && buf[0]!='#')
l++;
if(l>maxl) maxl= l;
}else{
strcpy((*argv)[argzaehl],buf);
if(argzaehl==line_start_argc && (flag&8))
if(buf[0]!='-' && buf[0]!=0 && buf[0]!='#')
sprintf((*argv)[argzaehl],"-%s", buf);
}
argzaehl++;
if(*cpt==0) break;
}
if(pass==0){
if(flag & 16)
{ret= 1; goto ex;}
*argc= argzaehl;
if(argzaehl>0 || (flag & 128)) {
*argv= (char **) calloc((argzaehl + !!(flag & 128)), sizeof(char *));
if(*argv==NULL)
{ret= -1; goto ex;}
}
for(i=0;i<*argc;i++) {
(*argv)[i]= (char *) calloc(maxl + 1, 1);
if((*argv)[i]==NULL)
{ret= -1; goto ex;}
}
if(flag & 128)
(*argv)[*argc]= NULL;
}
}
ret= 1;
ex:
if(buf != NULL)
free(buf);
return(ret);
}

5838
frontend/xorriso-tcltk Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,15 @@
/*
data source for libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2012 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <stdlib.h>
#include <string.h>
@ -27,164 +33,338 @@
#include "isoburn.h"
/* Cached reading of image tree data */
/* Current implementation : single tile 128 kB */
/* powers of 2 only ! */
#define Libisoburn_cache_blockS 64
struct isoburn_cached_drive {
struct burn_drive *drive;
char cache_data[Libisoburn_cache_blockS * 2048];
uint32_t cache_lba;
uint32_t last_error_lba;
uint32_t last_aligned_error_lba;
int cache_hits;
};
/* Cached reading of image tree data by multiple tiles */
/* Debugging only: This reports cache loads on stderr.
#define Libisoburn_read_cache_reporT 1
*/
#define Libisoburn_use_read_cachE
#ifdef Libisoburn_use_read_cachE
int
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
struct isoburn_cache_tile {
char *cache_data;
uint32_t cache_lba;
uint32_t last_error_lba;
uint32_t last_aligned_error_lba;
int cache_hits;
int age;
};
struct isoburn_cached_drive {
struct burn_drive *drive;
struct isoburn_cache_tile **tiles;
int num_tiles;
int tile_blocks;
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
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag);
int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
{
int ret;
int ret, i, oldest, oldest_age;
struct burn_drive *d;
off_t count;
uint32_t aligned_lba;
char msg[80];
struct isoburn_cache_tile **tiles;
struct isoburn_cached_drive *icd;
if(src == NULL || buffer == NULL)
return -1;
/* It is not required by the specs of libisofs but implicitely assumed
by its current implementation that a data source read result <0 is
a valid libisofs error code.
*/
return ISO_NULL_POINTER;
icd = (struct isoburn_cached_drive *) src->data;
d = (struct burn_drive*) icd->drive;
aligned_lba= lba & ~(Libisoburn_cache_blockS - 1);
if(aligned_lba == icd->cache_lba && icd->cache_lba != 0xffffffff) {
(icd->cache_hits)++;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
if(d == NULL) {
/* This would happen if libisoburn saw output data in the fifo and
performed early drive release and afterwards libisofs still tries
to read data.
That would constitute a bad conceptual problem in libisoburn.
*/
isoburn_msgs_submit(NULL, 0x00060000,
"Programming error: Drive released while libisofs still attempts to read",
0, "FATAL", 0);
return ISO_ASSERT_FAILURE;
}
icd->cache_lba= 0xffffffff; /* invalidate cache */
if(icd->last_aligned_error_lba == aligned_lba) {
tiles = 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 & ~(icd->tile_blocks - 1);
for (i = 0; i < icd->num_tiles; i++) {
if(aligned_lba == tiles[i]->cache_lba &&
tiles[i]->cache_lba != 0xffffffff) {
(tiles[i]->cache_hits)++;
memcpy(buffer, tiles[i]->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
ds_inc_age(icd, i, 0);
return 1;
}
}
/* find oldest tile */
oldest_age= Libisoburn_max_agE;
oldest= 0;
for(i = 0; i < icd->num_tiles; i++) {
if(tiles[i]->cache_lba == 0xffffffff) {
oldest= i;
break;
}
if(tiles[i]->age < oldest_age) {
oldest_age= tiles[i]->age;
oldest= i;
}
}
tiles[oldest]->cache_lba= 0xffffffff; /* invalidate cache */
if(tiles[oldest]->last_aligned_error_lba == aligned_lba) {
ret = 0;
} else {
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
(char *) icd->cache_data,
Libisoburn_cache_blockS * 2048, &count, 0);
(char *) tiles[oldest]->cache_data,
icd->tile_blocks * 2048, &count, 2);
}
if (ret <= 0 ) {
icd->last_aligned_error_lba = aligned_lba;
tiles[oldest]->last_aligned_error_lba = aligned_lba;
/* Read-ahead failure ? Try to read 2048 directly. */
if(icd->last_error_lba == lba)
if(tiles[oldest]->last_error_lba == lba)
ret = 0;
else
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
2048, &count, 0);
if (ret > 0)
return 1;
icd->last_error_lba = lba;
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
return -1;
tiles[oldest]->last_error_lba = lba;
sprintf(msg, "ds_read_block(%lu) returns %lX",
(unsigned long) lba, (unsigned long) ret);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
return ISO_DATA_SOURCE_MISHAP;
}
#ifdef Libisoburn_read_cache_reporT
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
icd->cache_hits, aligned_lba, (int) count);
fprintf(stderr, "Tile %2.2d : After %3d hits, new load from %8x , count= %d\n",
oldest, tiles[oldest]->cache_hits, aligned_lba, (int) count);
#endif
icd->cache_lba= aligned_lba;
icd->cache_hits= 1;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
tiles[oldest]->cache_lba= aligned_lba;
tiles[oldest]->cache_hits= 1;
ds_inc_age(icd, oldest, 0);
memcpy(buffer, tiles[oldest]->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
#else /* Libisoburn_use_read_cachE */
static int
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
{
int ret;
struct burn_drive *d;
off_t count;
if(src == NULL || buffer == NULL)
return -1;
d = (struct burn_drive*) ((struct isoburn_cached_drive *) src->data)->drive;
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
2048, &count, 0);
if (ret <= 0 )
return -1;
return 1;
}
#endif /* ! Libisoburn_use_read_cachE */
static int
ds_open(IsoDataSource *src)
static int ds_open(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static int
ds_close(IsoDataSource *src)
static int ds_close(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static void
ds_free_data(IsoDataSource *src)
static int isoburn_cache_tile_destroy(struct isoburn_cache_tile **o,
int flag)
{
/* nothing to do */;
if(src->data != NULL)
free(src->data);
if (*o == NULL)
return(0);
if ((*o)->cache_data != NULL)
free((*o)->cache_data);
free(*o);
*o = NULL;
return(1);
}
static int isoburn_cache_tile_new(struct isoburn_cache_tile **o,
int tile_blocks, int flag)
{
struct isoburn_cache_tile *t;
*o = t = calloc(1, sizeof(struct isoburn_cache_tile));
if (t == NULL)
goto fail;
t->cache_data = NULL;
t->cache_lba = 0xffffffff;
t->cache_hits = 0;
t->last_error_lba = 0xffffffff;
t->last_aligned_error_lba = 0xffffffff;
t->age= 0;
t->cache_data = calloc(1, tile_blocks * 2048);
if (t->cache_data == NULL)
goto fail;
return(1);
fail:;
isoburn_cache_tile_destroy(o, 0);
return(-1);
}
static int isoburn_cached_drive_destroy(struct isoburn_cached_drive **o,
int flag)
{
struct isoburn_cached_drive *c;
int i;
if (*o == NULL)
return(0);
c= *o;
if (c->tiles != NULL) {
for (i = 0; i < c->num_tiles; i++)
isoburn_cache_tile_destroy(&(c->tiles[i]), 0);
free(c->tiles);
}
free(c);
*o= NULL;
return(1);
}
static int isoburn_cached_drive_new(struct isoburn_cached_drive **o,
struct burn_drive *d, int cache_tiles,
int tile_blocks, int flag)
{
struct isoburn_cached_drive *icd;
int i, ret;
*o = icd = calloc(1,sizeof(struct isoburn_cached_drive));
if (*o == NULL)
return(-1);
icd->drive = d;
icd->tiles = NULL;
icd->num_tiles = cache_tiles;
icd->tile_blocks = tile_blocks;
icd->current_age = 0;
icd->displacement = 0;
icd->displacement_sign = 0;
icd->tiles = calloc(1, sizeof(struct isoburn_cache_tile *) * icd->num_tiles);
if (icd->tiles == NULL)
goto fail;
for (i = 0; i < icd->num_tiles; i++) {
ret = isoburn_cache_tile_new(&(icd->tiles[i]), icd->tile_blocks, 0);
if (ret <= 0)
goto fail;
}
return(1);
fail:;
isoburn_cached_drive_destroy(o, 0);
return(-1);
}
static void ds_free_data(IsoDataSource *src)
{
struct isoburn_cached_drive *icd;
if(src->data != NULL) {
icd= (struct isoburn_cached_drive *) src->data;
isoburn_cached_drive_destroy(&icd, 0);
}
src->data= NULL;
}
IsoDataSource *
isoburn_data_source_new(struct burn_drive *d)
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
{
IsoDataSource *ret;
struct isoburn_cached_drive *icd;
if(src==NULL)
return(0);
icd= (struct isoburn_cached_drive *) src->data;
icd->drive= NULL;
return(1);
}
IsoDataSource *isoburn_data_source_new(struct burn_drive *d,
uint32_t displacement, int displacement_sign,
int cache_tiles, int tile_blocks)
{
IsoDataSource *src;
struct isoburn_cached_drive *icd= NULL;
int ret;
if (d==NULL)
return NULL;
ret = malloc(sizeof(IsoDataSource));
icd = calloc(1,sizeof(struct isoburn_cached_drive));
if (ret == NULL || icd == NULL)
src = malloc(sizeof(IsoDataSource));
if (src == NULL)
return NULL;
ret->refcount = 1;
ret->read_block = ds_read_block;
ret->open = ds_open;
ret->close = ds_close;
ret->free_data = ds_free_data;
ret->data = icd;
icd->drive = d;
icd->cache_lba = 0xffffffff;
icd->cache_hits = 0;
icd->last_error_lba = 0xffffffff;
icd->last_aligned_error_lba = 0xffffffff;
return ret;
ret = isoburn_cached_drive_new(&icd, d, cache_tiles, tile_blocks, 0);
if (ret <= 0) {
free(src);
return NULL;
}
src->version = 0;
src->refcount = 1;
src->read_block = ds_read_block;
src->open = ds_open;
src->close = ds_close;
src->free_data = ds_free_data;
src->data = icd;
icd->displacement = displacement;
icd->displacement_sign = displacement_sign;
return src;
}
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
{
int i;
(icd->current_age)++;
if(icd->current_age>=Libisoburn_max_agE) { /* reset all ages (allow waste) */
for(i = 0; i < icd->num_tiles; i++)
(icd->tiles)[i]->age= 0;
icd->current_age= 1;
}
(icd->tiles)[idx]->age= icd->current_age;
return(1);
}

File diff suppressed because it is too large Load Diff

View File

@ -2,20 +2,64 @@
/*
Class struct of libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 - 2012 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
#ifndef Isoburn_includeD
#define Isoburn_includeD
/* <<< transition macro */
#define Libisoburn_no_fifO 1
/* 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.
*/
struct isoburn_toc_entry {
int session;
int track_no; /* point */
int start_lba;
int track_blocks;
char *volid; /* For caching a volume id from emulated toc on overwriteables */
struct isoburn_toc_entry *next;
};
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
struct isoburn_toc_entry *boss, int flag);
/* @param flag bit0= delete all subordinates too
*/
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
/* Minimal size of target_iso_head which is to be written during
isoburn_activate_session().
Within this size there is everything that is needed for image access with
no partition offset. The actual target_iso_head buffer must be larger by
the evential partition offset.
*/
#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 {
@ -25,9 +69,9 @@ struct isoburn {
Most isoburn calls will use a burn_drive as object handle */
struct burn_drive *drive;
/* -1= inappropriate media state detected
0= libburn multi-session media, resp. undecided yet
1= random access media */
/* -1= inappropriate medium state detected
0= libburn multi-session medium, resp. undecided yet
1= random access medium */
int emulation_mode;
/* Although rarely used, libburn can operate on several
@ -36,22 +80,47 @@ struct isoburn {
struct isoburn *next;
/* If >= 0, this address is used as reply for isoburn_disc_get_msc1()
*/
int fabricated_msc1;
/* If >= 0, this address is used in isoburn_disc_track_lba_nwa()
as reply parameter nwa.
(The other nwa parameters below apply only to the effective write address
on random access media. msc2 is handed to libisofs but not to libburn.)
*/
int fabricated_msc2;
/* The nwa to be used for a first session on the present kind of overwriteable
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
*/
int zero_nwa;
/* Start address as given by image examination (bytes, not blocks) */
off_t min_start_byte;
/* Aligned start address to be used for processing (counted in blocks) */
int nwa;
/* Truncate to .nwa an eventual regular file serving as output drive */
int truncate;
/* Eventual freely fabricated isoburn_disc_get_status().
BURN_DISC_UNREADY means that normally emulated status is in effect.
BURN_DISC_UNREADY means that this variable is disabled
and normally emulated status is in effect.
*/
enum burn_disc_status fabricated_disc_status;
#ifndef Libisoburn_no_fifO
/* The fifo which is installed between track and libisofs burn_source
/* To be set if read errors occured during media evaluation.
*/
struct burn_source *fifo;
#endif /* ! Libisoburn_no_fifO */
int media_read_error;
/* Eventual emulated table of content read from the chain of ISO headers
on overwriteable media.
*/
struct isoburn_toc_entry *toc;
/* Indicator wether the most recent burn run worked :
-1 = undetermined, ask libburn , 0 = failure , 1 = success
@ -60,19 +129,29 @@ struct isoburn {
int wrote_well;
/* Buffered ISO head from media (should that become part of
ecma119_read_opts ?) */
uint8_t target_iso_head[65536];
/* ISO head buffer to be filled by write run */
int target_iso_head_size;
uint8_t *target_iso_head;
/* The 2k offset which was read from a loaded image.
*/
uint32_t loaded_partition_offset;
/* Libisofs image context */
IsoImage *image;
#ifdef Libisoburn_no_fifO
/* The start LBA of the image */
int image_start_lba;
/* The block data source from which the existing image is read.
*/
IsoDataSource *iso_data_source;
/* The burn source which transfers data from libisofs to libburn.
It has its own fifo.
*/
struct burn_source *iso_source;
#endif /* Libisoburn_no_fifO */
/* For iso_tree_set_report_callback() */
int (*read_pacifier)(IsoImage*, IsoFileSource*);
@ -80,6 +159,15 @@ struct isoburn {
/* For iso_image_attach_data() */
void *read_pacifier_handle;
/* An application provided method to immediately deliver messages */
int (*msgs_submit)(void *handle, int error_code, char msg_text[],
int os_errno, char severity[], int flag);
void *msgs_submit_handle; /* specific to application method */
int msgs_submit_flag; /* specific to application method */
/* Forwarding an image generation option to the burn wrapper */
int do_tao;
};
@ -133,14 +221,19 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
with no emulation activated by isoburn.
@param drive The drive to be searched for
@param flag unused yet
@return -1 unsuitable media, 0 generic media, 1 emulated media.
@return -1 unsuitable medium, 0 generic medium, 1 emulated medium.
*/
int isoburn_find_emulator(struct isoburn **pt,
struct burn_drive *drive, int flag);
/* Deliver an event message. Either via a non-NULL o->msgs_submit() method
or via burn_msgs_submit() of libburn.
*/
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
int os_errno, char severity[], int flag);
/** Set the start address for an emulated add-on session. The value will
be rounded up to the alignment necessary for the media. The aligned
be rounded up to the alignment necessary for the medium. The aligned
value will be divided by 2048 and then put into o->nwa .
@param o The isoburn object to be programmed.
@param value The start address in bytes
@ -149,15 +242,68 @@ int isoburn_find_emulator(struct isoburn **pt,
*/
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
/** Obtains the image address offset to be used with image generation.
This is either the (emulated) drive nwa or a value set by
isoburn_prepare_blind_grow().
In any case this is the address to tell to iso_write_opts_set_ms_block().
@param o The isoburn object to be inquired
@param opts If not NULL: write parameters to be set on drive before query
@param msc2 The value to be used with iso_write_opts_set_ms_block()
@param flag unused yet
@return <=0 is failure , >0 success
*/
int isoburn_get_msc2(struct isoburn *o,
struct burn_write_opts *opts, int *msc2, int flag);
/** 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,
int cache_tiles, int tile_blocks);
/** Default settings for above cache_tiles, tile_blocks in newly created
struct isoburn_read_opts.
*/
#define Libisoburn_default_cache_tileS 32
#define Libisoburn_default_tile_blockS 32
/** Maximum size of the cache in 2 kB blocks (1 GB)
*/
#define Libisoburn_cache_max_sizE (1024 * 512)
/** Disable read capabilities of a data source which was originally created
by isoburn_data_source_new(). After this any attempt to read will yield
a FATAL programming error event.
This is usually done to allow libburn to release the drive while libisofs
still holds a reference to the data source object. libisofs is not supposed
to use this object for reading any more, nevertheless. The disabled state
of the data source is a safety fence around this daring situation.
@param src The data source to be disabled
@param flag unused yet
@return <=0 is failure , >0 success
*/
int isoburn_data_source_shutdown(IsoDataSource *src, int flag);
/** Check whether the size of target_iso_head matches the given partition
offset. Eventually adjust size.
*/
int isoburn_adjust_target_iso_head(struct isoburn *o,
uint32_t offst, int flag);
/** Initialize the root directory attributes of a freshly created image.
*/
int isoburn_root_defaults(IsoImage *image, int flag);
/**
@ -167,9 +313,24 @@ isoburn_data_source_new(struct burn_drive *d);
minor correction only.)
*/
struct isoburn_read_opts {
int cache_tiles; /* number of cache tiles */
int cache_tile_blocks;
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
/* ts A90121 */
unsigned int noaaip:1; /* Do not read AAIP for ACL and EA */
unsigned int noacl:1; /* Do not read ACL from external file objects */
unsigned int noea:1; /* Do not read XFS-style EA from externals */
/* ts A90508 */
unsigned int noino:1; /* Discard eventual PX inode numbers */
/* ts A90810 */
unsigned int nomd5:2; /* Do not read eventual MD5 array */
unsigned int preferjoliet:1;
/*< When both Joliet and RR extensions are present, the RR
* tree is used. If you prefer using Joliet, set this to 1. */
@ -184,6 +345,15 @@ struct isoburn_read_opts {
*/
char *input_charset;
/**
* Enable or disable methods to automatically choose an input charset.
* This eventually overrides input_charset.
*
* bit0= allow to set the input character set automatically from
* attribute "isofs.cs" of root directory
*/
int auto_input_charset;
/* modified by the function isoburn_read_image */
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
to 0 if not. */
@ -202,6 +372,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;
};
@ -215,12 +388,42 @@ struct isoburn_imgen_opts {
/* Options for image generation */
int will_cancel :1;
int level; /**< ISO level to write at. */
/** Which extensions to support. */
unsigned int rockridge :1;
unsigned int joliet :1;
unsigned int iso1999 :1;
unsigned int hfsplus :1;
unsigned int fat :1;
/* Whether to mark suitable IsoNode as hardlinks in RRIP PX */
unsigned int hardlinks :1;
/* Write eventual AAIP info containing ACL and EA */
unsigned int aaip :1;
/* Produce and write a MD5 checksum of the whole session stream. */
unsigned int session_md5 :1;
/* Produce and write MD5 checksums for each single IsoFile.
See parameter "files" of iso_write_opts_set_record_md5().
*/
unsigned int file_md5 :2;
/* On overwriteable media or random access files do not write the first
session to LBA 32, but rather to LBA 0 directly.
*/
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 */
@ -229,17 +432,52 @@ 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.
* bit0= omit version number with ECMA-119 and Joliet
* bit1= omit version number with Joliet alone
*/
unsigned int omit_version_numbers :1;
unsigned int omit_version_numbers :2;
/**
* Allow ISO-9660 directory hierarchy to be deeper than 8 levels.
*/
unsigned int allow_deep_paths :1;
/**
* If not allow_deep_paths is in effect, then it may become
* necessary to relocate directories so that no ECMA-119 file path
* has more than 8 components. These directories are grafted into either
* the root directory of the ISO image or into a dedicated relocation
* directory. For details see libisofs.h, iso_write_opts_set_rr_reloc().
*/
char *rr_reloc_dir; /* IsoNode name in root directory. NULL or
empty text means root itself. */
int rr_reloc_flags; /* bit0= mark auto-created rr_reloc_dir by RE
bit1= not settable via API (used internally)
*/
/**
* Allow path in the ISO-9660 tree to have more than 255 characters.
*/
@ -257,8 +495,10 @@ struct isoburn_imgen_opts {
* ISO-9660 forces filenames to have a ".", that separates file name from
* extension. libisofs adds it if original filename doesn't has one. Set
* this to 1 to prevent this behavior
* bit0= no forced dot with ECMA-119
* bit1= no forced dot with Joliet
*/
unsigned int no_force_dots :1;
unsigned int no_force_dots :2;
/**
* Allow lowercase characters in ISO-9660 filenames. By default, only
@ -272,11 +512,52 @@ struct isoburn_imgen_opts {
*/
unsigned int allow_full_ascii :1;
/**
* Like allow_full_ascii, but only allowing 7-bit characters.
* Lowercase letters get mapped to uppercase if not allow_lowercase is set.
* Gets overridden if allow_full_ascii is enabled.
*/
unsigned int allow_7bit_ascii :1;
/**
* Allow paths in the Joliet tree to have more than 240 characters.
*/
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.
*/
unsigned int always_gmt :1;
/**
* Write Rock Ridge info as of specification RRIP-1.10 rather than
* RRIP-1.12: signature "RRIP_1991A" rather than "IEEE_1282",
* field PX without file serial number
*/
unsigned int rrip_version_1_10 :1;
/**
* Store as ECMA-119 Directory Record timestamp the mtime
* of the source rather than the image creation time.
* The same can be ordered for Joliet and ISO 9660:1999
*/
unsigned int dir_rec_mtime :1;
unsigned int joliet_rec_mtime :1;
unsigned int iso1999_rec_mtime :1;
/**
* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12.
* I.e. without announcing it by an ER field and thus without the need
* to preceed the RRIP fields by an ES and to preceed the AA field by ES.
*/
unsigned int aaip_susp_1_10 :1;
unsigned int sort_files:1;
/**< If files should be sorted based on their weight. */
@ -315,6 +596,180 @@ struct isoburn_imgen_opts {
*/
int fifo_size;
/** Output value: Block address of session start as evaluated from medium
and other options by libisoburn and libburn.
If <0 : Invalid
If >=0: Valid block number. Block size is always 2 KiB.
*/
int effective_lba;
/** Output value: Block address of data section start as predicted by
libisofs.
If < 16: Invalid
If >=16: Valid block number. Block size is always 2 KiB.
*/
int data_start_lba;
/**
* If not empty: Parameters "name" and "timestamp" for a scdbackup stream
* checksum tag. See scdbackup/README appendix VERIFY.
* It makes sense only for single session images which start at LBA 0.
* Such a tag may be part of a libisofs checksum tag block after the
* session tag line. It then covers the whole session up to its own start
* position.
* If scdbackup_tag_written is not NULL then it is a pointer to an
* application provided array with at least 512 characters. The effectively
* written scdbackup tag will be copied to this memory location.
*/
char scdbackup_tag_name[81];
char scdbackup_tag_time[19];
char *scdbackup_tag_written;
/* Content of an embedded boot image. Valid if not NULL.
* In that case it must point to a memory buffer at least 32 kB.
*/
char *system_area_data;
/*
* bit0= make bytes 446 - 512 of the system area a partition
* table which reserves partition 1 from byte 63*512 to the
* end of the ISO image. Assumed are 63 secs/hed, 255 head/cyl.
* (GRUB protective msdos label.)
* This works with and without system_area_data.
*/
int system_area_options;
/* User settable PVD time stamps */
time_t vol_creation_time;
time_t vol_modification_time;
time_t vol_expiration_time;
time_t vol_effective_time;
/* To eventually override vol_modification_time by unconverted string
and timezone 0 */
char vol_uuid[17];
/* The number of unclaimed 2K blocks before start of partition 1 as of
the MBR in system area. If not 0 this will cause double volume
descriptor sets and double tree.
*/
uint32_t partition_offset;
/* Partition table parameter: 1 to 63, 0= disabled/default */
int partition_secs_per_head;
/* 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;
/* Disk file paths of content of PreP partition and EFI system partition */
char *prep_partition;
char *efi_boot_partition;
/* 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];
/* HFS+ image serial number.
* 00...00 means that it shall be generated by libisofs.
*/
uint8_t hfsp_serial_number[8];
/* Allocation block size of HFS+ : 0= auto , 512, or 2048
*/
int hfsp_block_size;
/* Block size of and in APM : 0= auto , 512, or 2048
*/
int apm_block_size;
/* Write mode for optical media:
* 0 = auto
* 1 = TAO, Incremental, no RESERVE TRACK
* -1 = SAO, DAO, RESERVE TRACK
*/
int do_tao;
};
/* Alignment for session starts on overwriteable media.
(Increased from 16 to 32 blocks for aligning to BD-RE clusters.)
*/
#define Libisoburn_nwa_alignemenT 32
/* Alignment for outer session scanning with -ROM drives.
(E.g. my DVD-ROM drive shows any DVD type as 0x10 "DVD-ROM" with
more or less false capacity and TOC.)
*/
#define Libisoburn_toc_scan_alignemenT 16
/* Maximum gap to be bridged during a outer TOC scan. Gaps appear between the
end of a session and the start of the next session.
The longest gap found so far was about 38100 after the first session of a
DVD-R.
*/
#define Libisoburn_toc_scan_max_gaP 65536
/* Creating a chain of image headers which form a TOC:
The header of the first session is written after the LBA 0 header.
So it persists and can give the end of its session. By help of
Libisoburn_nwa_alignemenT it should be possible to predict the start
of the next session header.
The LBA 0 header is written by isoburn_activate_session() already
with the first session. So the medium is mountable.
A problem arises with DVD-RW in Intermediate State. They cannot be
written by random access before they were written sequentially.
In this case, no copy of the session 1 header is maintained and no TOC
will be possible. Thus writing begins sequentially at LBA 0.
IMPORTANT: This macro gives the minimal size of an image header.
It has to be enlarged by the eventual partition offset.
*/
#define Libisoburn_overwriteable_starT \
((off_t) (Libisoburn_target_head_sizE/2048))
/* Wrappers for emulation of TOC on overwriteable media */
struct isoburn_toc_track {
/* Either track or toc_entry are supposed to be NULL */
struct burn_track *track;
struct isoburn_toc_entry *toc_entry;
};
struct isoburn_toc_session {
/* Either session or tracks and toc_entry are supposed to be NULL */
struct burn_session *session;
struct isoburn_toc_track **track_pointers;
int track_count;
struct isoburn_toc_entry *toc_entry;
};
struct isoburn_toc_disc {
/* Either disc or sessions and toc are supposed to be NULL */
struct burn_disc *disc;
struct isoburn_toc_session *sessions; /* storage array */
struct isoburn_toc_session **session_pointers; /* storage array */
struct isoburn_toc_track *tracks; /* storage array */
struct isoburn_toc_track **track_pointers; /* storage array */
int session_count;
int track_count;
struct isoburn_toc_entry *toc;
};
#endif /* Isoburn_includeD */

View File

@ -6,12 +6,18 @@
/*
libisofs related functions of libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 - 2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifndef Xorriso_standalonE
@ -26,9 +32,8 @@
#endif /* Xorriso_standalonE */
#include "isoburn.h"
#include "libisoburn.h"
#include "isoburn.h"
#define BP(a,b) [(b) - (a) + 1]
@ -100,41 +105,70 @@ IsoImage *isoburn_get_attached_image(struct burn_drive *d)
}
/* API */
int isoburn_get_attached_start_lba(struct burn_drive *d)
{
int ret;
struct isoburn *o= NULL;
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return -1;
if(o->image == NULL)
return -1;
return o->image_start_lba;
}
static void isoburn_idle_free_function(void *ignored)
{
return;
}
int isoburn_root_defaults(IsoImage *image, int flag)
{
IsoNode *root_node;
mode_t root_mode= 0755;
root_node= (IsoNode *) iso_image_get_root(image);
iso_node_set_permissions(root_node, root_mode);
return(1);
}
/* API function. See libisoburn.h
*/
int isoburn_read_image(struct burn_drive *d,
struct isoburn_read_opts *read_opts,
IsoImage **image)
{
int ret, int_num;
int ret, int_num, dummy;
IsoReadOpts *ropts= NULL;
IsoReadImageFeatures *features= NULL;
uint32_t ms_block;
char *msg= NULL;
enum burn_disc_status status= BURN_DISC_BLANK;
IsoDataSource *ds= NULL;
struct isoburn *o= NULL;
if(read_opts==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: read_opts==NULL",
0, "FATAL", NULL);
return(-1);
}
msg= calloc(1, 160);
if(d != NULL) {
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return 0;
{ret= 0; goto ex;}
status = isoburn_disc_get_status(d);
o->image_start_lba= -1;
}
if(read_opts==NULL) {
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: read_opts==NULL",
0, "FATAL", 0);
{ret= -1; goto ex;}
}
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
create_blank_image:;
/*
* Blank disc, we create a new image without files.
*/
@ -142,56 +176,100 @@ int isoburn_read_image(struct burn_drive *d,
if (d == NULL) {
/* New empty image without relation to a drive */
if (image==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", NULL);
return -1;
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", 0);
{ret= -1; goto ex;}
}
/* create a new image */
ret = iso_image_new("ISOIMAGE", image);
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
return ret;
goto ex;
}
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);
ret = iso_image_new("ISOIMAGE", &o->image);
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
return ret;
goto ex;
}
if (image) {
if (image != NULL) {
*image = o->image;
iso_image_ref(*image); /*protects object from premature free*/
}
iso_image_set_ignore_aclea(o->image,
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
ret= isoburn_root_defaults(o->image, 0);
if(ret <= 0)
goto ex;
}
return 1;
{ret= 1; goto ex;}
}
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
burn_msgs_submit(0x00060000,
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: incorrect disc status",
0, "FATAL", NULL);
return -4;
0, "FATAL", 0);
{ret= -4; goto ex;}
}
memset((char *) &ropts, 0, sizeof(ropts));
ret = isoburn_disc_get_msc1(d, &int_num);
if (ret <= 0)
return -2;
{ret= -2; goto ex;}
ms_block= int_num;
if (o != NULL)
o->image_start_lba= ms_block;
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
if (ret <= 0) {
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
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);
{ret= 0; goto ex;}
}
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;
goto ex;
}
/* 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);
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);
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
@ -200,7 +278,20 @@ int isoburn_read_image(struct burn_drive *d,
iso_read_opts_set_default_uid(ropts, read_opts->uid);
iso_read_opts_set_default_gid(ropts, read_opts->gid);
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
ds = isoburn_data_source_new(d);
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, read_opts->displacement,
read_opts->displacement_sign,
read_opts->cache_tiles, read_opts->cache_tile_blocks);
if (ds == NULL) {
isoburn_report_iso_error(ret, "Cannot create IsoDataSource object", 0,
"FATAL", 0);
ret= -1; goto ex;
}
if(o->iso_data_source!=NULL)
iso_data_source_unref(o->iso_data_source);
o->iso_data_source= ds;
iso_image_attach_data(o->image, o->read_pacifier_handle,
isoburn_idle_free_function);
if(o->read_pacifier_handle==NULL)
@ -210,10 +301,11 @@ int isoburn_read_image(struct burn_drive *d,
ret = iso_image_import(o->image, ds, ropts, &features);
iso_tree_set_report_callback(o->image, NULL);
iso_read_opts_free(ropts);
iso_data_source_unref(ds);
ropts= NULL;
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
return ret;
goto ex;
}
/* Important: do not return until free(features) */
if (image!=NULL) {
@ -225,17 +317,15 @@ int isoburn_read_image(struct burn_drive *d,
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
read_opts->hasElTorito = iso_read_image_features_has_eltorito(features);
read_opts->size = iso_read_image_features_get_size(features);
#ifdef NIX
read_opts->hasRR = features->hasRR;
read_opts->hasJoliet = features->hasJoliet;
read_opts->hasIso1999 = features->hasIso1999;
read_opts->hasElTorito = features->hasElTorito;
read_opts->size = features->size;
#endif
iso_read_image_features_destroy(features);
return 1;
ret= 1;
ex:;
if(msg != NULL)
free(msg);
if(ropts != NULL)
iso_read_opts_free(ropts);
if(features != NULL)
iso_read_image_features_destroy(features);
return(ret);
}
@ -246,22 +336,41 @@ int isoburn_attach_image(struct burn_drive *d, IsoImage *image)
int ret;
struct isoburn *o;
if (image == NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_attach_image: image==NULL",
0, "FATAL", NULL);
return -1;
}
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return 0;
if (image == NULL) {
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_attach_image: image==NULL",
0, "FATAL", 0);
return -1;
}
if(o->image != NULL)
iso_image_unref(o->image);
o->image = image;
o->image_start_lba = -1;
return(1);
}
/* API */
int isoburn_attach_start_lba(struct burn_drive *d, int lba, int flag)
{
int ret;
struct isoburn *o;
ret = isoburn_find_emulator(&o, d, 0);
if(ret < 0)
return ret;
if(o == NULL)
return 0;
if(o->image == NULL)
return 0;
o->image_start_lba = lba;
return 1;
}
/* API function. See libisoburn.h
*/
int isoburn_activate_session(struct burn_drive *drive)
@ -275,64 +384,222 @@ int isoburn_activate_session(struct burn_drive *drive)
if (o->emulation_mode != 1)
return 1; /* don't need to activate session */
if (o->fabricated_msc2 >= 0)
return 1; /* blind growing: do not alter anything outside the session */
if (o->fabricated_disc_status != BURN_DISC_APPENDABLE)
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
o->zero_nwa > 0)))
return 1;
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
32*2048, 1);
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
o->target_iso_head_size, 1);
return ret;
}
/** API @since 0.6.2
*/
int isoburn_get_img_partition_offset(struct burn_drive *drive,
uint32_t *block_offset_2k)
{
int ret;
struct isoburn *o;
ret = isoburn_find_emulator(&o, drive, 0);
if(ret < 0 || o == NULL)
return -1;
*block_offset_2k= o->loaded_partition_offset;
if(o->loaded_partition_offset == 0)
return(0);
if(o->target_iso_head_size == (off_t) Libisoburn_target_head_sizE
+ (off_t) 2048 * (off_t) o->loaded_partition_offset)
return(1);
return(2);
}
/* Check for MBR signature and a first partition that starts at a 2k block
and ends where the image ends.
If not too large or too small, accept its start as partition offset.
*/
static int isoburn_inspect_partition(struct isoburn *o, uint32_t img_size,
int flag)
{
uint8_t *mbr, *part, *buf= NULL;
uint32_t offst, numsec;
struct ecma119_pri_vol_desc *pvm;
off_t data_count;
int ret;
char *msg= NULL;
static int max_offst= 512 - 32;
buf= (uint8_t *) calloc(1, 2048);
msg= calloc(1, 160);
if(buf == NULL || msg == NULL)
{ret= -1; goto ex;}
mbr= o->target_iso_head;
part= mbr + 446;
if(mbr[510] != 0x55 || mbr[511] != 0xAA)
{ret= 2; goto ex;} /* not an MBR */
/* Does the first partition entry look credible ? */
if(part[0] != 0x80 && part[0] != 0x00)
{ret= 2; goto ex;} /* Invalid partition status */
if(part[1] == 0 && part[2] == 0 && part[3] == 0)
{ret= 2; goto ex;} /* Zero C/H/S start address */
/* Does it match the normal ISO image ? */
offst= iso_read_lsb(part + 8, 4);
numsec= iso_read_lsb(part + 12, 4);
if(offst < 64)
{ret= 2; goto ex;} /* Zero or unusably small partition start */
if((offst % 4) || (numsec % 4))
{ret= 2; goto ex;} /* Not aligned to 2k */
if(numsec < 72)
{ret= 2; goto ex;} /* No room for volume descriptors */
offst/= 4;
numsec/= 4;
if(offst + numsec != img_size)
{ret= 2; goto ex;} /* Partition end does not match image end */
/* Is there a PVD at the partition start ? */
ret = burn_read_data(o->drive, (off_t) (offst + 16) * (off_t) 2048,
(char*) buf, 2048, &data_count, 2);
if(ret <= 0)
{ret= 2; goto ex;}
pvm = (struct ecma119_pri_vol_desc *) buf;
if (strncmp((char*) pvm->std_identifier, "CD001", 5) != 0)
{ret= 2; goto ex;} /* not a PVD */
if (pvm->vol_desc_type[0] != 1 || pvm->vol_desc_version[0] != 1
|| pvm->file_structure_version[0] != 1 )
{ret= 2; goto ex;} /* failed sanity check */
if(iso_read_lsb(pvm->vol_space_size, 4) + offst != img_size)
{ret= 2; goto ex;} /* Image ends do not match */
/* Now it is credible. Not yet clear is whether it is acceptable. */
o->loaded_partition_offset= offst;
/* If the partition start is too large: Report but do not accept. */
if(offst > (uint32_t) max_offst) {/* Not more than 1 MB of .target_iso_head */
sprintf(msg,
"Detected partition offset of %.f blocks. Maximum for load buffer is %d",
(double) offst, max_offst);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "WARNING", 0);
{ret= 3; goto ex;}
}
/* Accept partition start and adjust buffer size */
ret= isoburn_adjust_target_iso_head(o, offst, 0);
if(ret <= 0)
goto ex;
ret= 1;
ex:;
if(buf != NULL)
free(buf);
if(msg != NULL)
free(msg);
return(ret);
}
/** Initialize the emulation of multi-session on random access media.
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;
off_t data_count;
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= NULL, *msg= NULL;
path= calloc(1, BURN_DRIVE_ADR_LEN);
msg= calloc(1, 2 * BURN_DRIVE_ADR_LEN);
if(path == NULL || msg == NULL)
{ret= -1; goto ex;}
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", NULL);
return -1;
isoburn_msgs_submit(NULL, 0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", 0);
{ret= -1; goto ex;}
}
drive= o->drive;
/* we can assume 0 as start block for image */
/* TODO what about ms? where we validate valid iso image in ms disc? */
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
sizeof(o->target_iso_head), &data_count, 2);
if(flag & 1)
o->fabricated_disc_status= BURN_DISC_FULL;
/* an error means an empty disc */
if (ret <= 0) {
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
/* We can assume 0 as start block for image.
The data there point to the most recent session.
*/
role = burn_drive_get_drive_role(drive);
ret = burn_get_read_capacity(drive, &capacity, 0);
if (ret <= 0)
capacity = -1;
if (role == 5) { /* random access write-only medium */
s = burn_disc_get_status(drive);
o->fabricated_disc_status= s;
burn_disc_track_lba_nwa(drive, NULL, 0, &dummy, &(o->nwa));
if(o->nwa < o->zero_nwa)
o->zero_nwa= 0;
{ret= 1; goto ex;}
} 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;
memset(o->target_iso_head, 0, to_read);
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 | 8);
if (ret <= 0) {
/* an error means a disc with no ISO image */
o->media_read_error= 1;
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 if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
{ret= 1; goto ex;}
}
} else {
/* No read capacity means blank medium */
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
{ret= 1; goto ex;}
}
/* check first 64K. If 0's, the disc is treated as a blank disc, and thus
overwritten without extra check. */
i = sizeof(o->target_iso_head);
i = Libisoburn_target_head_sizE;
while (i && !o->target_iso_head[i-1])
--i;
if (!i) {
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_BLANK;
{ret= 1; goto ex;}
}
pvm = (struct ecma119_pri_vol_desc *)(o->target_iso_head + 16 * 2048);
if (!strncmp((char*)pvm->std_identifier, "CD001", 5)) {
if (strncmp((char*)pvm->std_identifier, "CD001", 5) == 0) {
off_t size;
/* sanity check */
@ -340,30 +607,44 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|| pvm->file_structure_version[0] != 1 ) {
/* TODO for now I treat this as a full disc */
o->fabricated_disc_status= BURN_DISC_FULL;
return 1;
{ret= 1; goto ex;}
}
/* ok, PVM found, set size */
size = (off_t) iso_read_lsb(pvm->vol_space_size, 4);
ret= isoburn_inspect_partition(o, (uint32_t) size, 0);
if (ret <= 0)
goto ex;
size *= (off_t) 2048; /* block size in bytes */
isoburn_set_start_byte(o, size, 0);
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
if(!(flag & 1))
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
} else if (strncmp((char*)pvm->std_identifier, "CDXX1", 5) == 0 ||
(strncmp((char*)pvm->std_identifier, "CDxx1", 5) == 0 &&
pvm->vol_desc_type[0] == 'x')) {
/* empty image */
isoburn_set_start_byte(o, (off_t) 0, 0);
o->fabricated_disc_status= BURN_DISC_BLANK;
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
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;
}
return 1;
ret= 1;
ex:;
if(path != NULL)
free(path);
if(msg != NULL)
free(msg);
return(ret);
}
/** Alters and writes the first 64 kB of a "media" to invalidate
/** Alters and writes the first 64 kB of a "medium" to invalidate
an ISO image. (It shall stay restorable by skilled humans, though).
The result shall especially keep libisoburn from accepting the media
The result shall especially keep libisoburn from accepting the medium
image as ISO filesystem.
@param o A fully activated isoburn object. isoburn_start_emulation()
was already called.

File diff suppressed because it is too large Load Diff

320
libisoburn/libisoburn.ver Normal file
View File

@ -0,0 +1,320 @@
LIBISOBURN1 {
global:
isoburn_activate_session;
isoburn_attach_image;
isoburn_attach_start_lba;
isoburn_cancel_prepared_write;
isoburn_disc_available_space;
isoburn_disc_erasable;
isoburn_disc_erase;
isoburn_disc_get_msc1;
isoburn_disc_get_status;
isoburn_disc_track_lba_nwa;
isoburn_disc_write;
isoburn_drive_aquire;
isoburn_drive_grab;
isoburn_drive_release;
isoburn_drive_scan_and_grab;
isoburn_drive_set_msgs_submit;
isoburn_drive_wrote_well;
isoburn_finish;
isoburn_get_attached_image;
isoburn_get_attached_start_lba;
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_efi_bootp;
isoburn_igopt_get_extensions;
isoburn_igopt_get_fifo_size;
isoburn_igopt_get_hfsp_block_size;
isoburn_igopt_get_hfsp_serial_number;
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_prep_partition;
isoburn_igopt_get_pvd_times;
isoburn_igopt_get_relaxed;
isoburn_igopt_get_rr_reloc;
isoburn_igopt_get_scdbackup_tag;
isoburn_igopt_get_sort_files;
isoburn_igopt_get_system_area;
isoburn_igopt_get_tail_blocks;
isoburn_igopt_get_untranslated_name_len;
isoburn_igopt_get_write_type;
isoburn_igopt_new;
isoburn_igopt_set_disc_label;
isoburn_igopt_set_efi_bootp;
isoburn_igopt_set_extensions;
isoburn_igopt_set_fifo_size;
isoburn_igopt_set_hfsp_block_size;
isoburn_igopt_set_hfsp_serial_number;
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_prep_partition;
isoburn_igopt_set_pvd_times;
isoburn_igopt_set_relaxed;
isoburn_igopt_set_rr_reloc;
isoburn_igopt_set_scdbackup_tag;
isoburn_igopt_set_sort_files;
isoburn_igopt_set_system_area;
isoburn_igopt_set_tail_blocks;
isoburn_igopt_set_untranslated_name_len;
isoburn_igopt_set_write_type;
isoburn_initialize;
isoburn_is_compatible;
isoburn_libburn_req;
isoburn_libisofs_req;
isoburn_libjte_req;
isoburn_needs_emulation;
isoburn_prepare_blind_grow;
isoburn_prepare_disc;
isoburn_prepare_new_image;
isoburn_read_image;
isoburn_read_iso_head;
isoburn_ropt_destroy;
isoburn_ropt_get_auto_incharset;
isoburn_ropt_get_data_cache;
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;
isoburn_ropt_new;
isoburn_ropt_set_auto_incharset;
isoburn_ropt_set_data_cache;
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;
isoburn_toc_disc_get_sessions;
isoburn_toc_drive_get_disc;
isoburn_toc_session_get_leadout_entry;
isoburn_toc_session_get_sectors;
isoburn_toc_session_get_tracks;
isoburn_toc_track_get_emul;
isoburn_toc_track_get_entry;
isoburn_version;
Xorriso__dispose_words;
Xorriso__get_patch_level_text;
Xorriso__is_compatible;
Xorriso__preset_signal_behavior;
Xorriso__severity_cmp;
Xorriso__severity_list;
Xorriso__version;
Xorriso_change_is_pending;
Xorriso_destroy;
Xorriso_dialog;
Xorriso_eval_problem_status;
Xorriso_execute_option;
Xorriso_fetch_outlists;
Xorriso_get_problem_status;
Xorriso_interpreter;
Xorriso_lst_destroy_all;
Xorriso_lst_get_next;
Xorriso_lst_get_prev;
Xorriso_lst_get_text;
Xorriso_make_return_value;
Xorriso_msgs_submit;
Xorriso_msgs_submit_void;
Xorriso_new;
Xorriso_option_abort_on;
Xorriso_option_abstract_file;
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;
Xorriso_option_auto_charset;
Xorriso_option_backslash_codes;
Xorriso_option_ban_stdio_write;
Xorriso_option_biblio_file;
Xorriso_option_blank;
Xorriso_option_boot_image;
Xorriso_option_calm_drive;
Xorriso_option_cdi;
Xorriso_option_cdx;
Xorriso_option_changes_pending;
Xorriso_option_charset;
Xorriso_option_check_md5;
Xorriso_option_check_media;
Xorriso_option_check_media_defaults;
Xorriso_option_chgrpi;
Xorriso_option_chmodi;
Xorriso_option_chowni;
Xorriso_option_clone;
Xorriso_option_close;
Xorriso_option_close_damaged;
Xorriso_option_close_filter_list;
Xorriso_option_commit;
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;
Xorriso_option_data_cache_size;
Xorriso_option_dev;
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;
Xorriso_option_error_behavior;
Xorriso_option_external_filter;
Xorriso_option_extract;
Xorriso_option_extract_cut;
Xorriso_option_file_size_limit;
Xorriso_option_find;
Xorriso_option_follow;
Xorriso_option_fs;
Xorriso_option_getfacli;
Xorriso_option_gid;
Xorriso_option_grow_blindly;
Xorriso_option_hardlinks;
Xorriso_option_help;
Xorriso_option_hfsplus;
Xorriso_option_hide;
Xorriso_option_history;
Xorriso_option_iso_rr_pattern;
Xorriso_option_jigdo;
Xorriso_option_joliet;
Xorriso_option_launch_frontend;
Xorriso_option_list_arg_sorting;
Xorriso_option_list_delimiter;
Xorriso_option_list_extras;
Xorriso_option_list_formats;
Xorriso_option_list_profiles;
Xorriso_option_list_speeds;
Xorriso_option_lnsi;
Xorriso_option_load;
Xorriso_option_logfile;
Xorriso_option_lsi;
Xorriso_option_lsx;
Xorriso_option_map;
Xorriso_option_map_l;
Xorriso_option_mark;
Xorriso_option_md5;
Xorriso_option_mkdiri;
Xorriso_option_mount;
Xorriso_option_mount_opts;
Xorriso_option_msg_op;
Xorriso_option_mvi;
Xorriso_option_no_rc;
Xorriso_option_not_leaf;
Xorriso_option_not_list;
Xorriso_option_not_mgt;
Xorriso_option_not_paths;
Xorriso_option_options_from_file;
Xorriso_option_osirrox;
Xorriso_option_overwrite;
Xorriso_option_pacifier;
Xorriso_option_padding;
Xorriso_option_page;
Xorriso_option_paste_in;
Xorriso_option_path_list;
Xorriso_option_pathspecs;
Xorriso_option_pkt_output;
Xorriso_option_preparer_id;
Xorriso_option_print;
Xorriso_option_print_size;
Xorriso_option_prog;
Xorriso_option_prog_help;
Xorriso_option_prompt;
Xorriso_option_publisher;
Xorriso_option_pvd_info;
Xorriso_option_pwdi;
Xorriso_option_pwdx;
Xorriso_option_read_mkisofsrc;
Xorriso_option_reassure;
Xorriso_option_report_about;
Xorriso_option_return_with;
Xorriso_option_rmi;
Xorriso_option_rockridge;
Xorriso_option_rollback;
Xorriso_option_rom_toc_scan;
Xorriso_option_rr_reloc_dir;
Xorriso_option_scdbackup_tag;
Xorriso_option_scsi_log;
Xorriso_option_session_log;
Xorriso_option_setfacli;
Xorriso_option_setfacl_listi;
Xorriso_option_setfattri;
Xorriso_option_setfattr_listi;
Xorriso_option_set_filter;
Xorriso_option_signal_handling;
Xorriso_option_sleep;
Xorriso_option_speed;
Xorriso_option_split_size;
Xorriso_option_status;
Xorriso_option_status_history_max;
Xorriso_option_stdio_sync;
Xorriso_option_stream_recording;
Xorriso_option_system_id;
Xorriso_option_tell_media_space;
Xorriso_option_temp_mem_limit;
Xorriso_option_toc;
Xorriso_option_toc_of;
Xorriso_option_uid;
Xorriso_option_unregister_filter;
Xorriso_option_update;
Xorriso_option_use_readline;
Xorriso_option_version;
Xorriso_option_volid;
Xorriso_option_volset_id;
Xorriso_option_volume_date;
Xorriso_option_write_type;
Xorriso_option_xattr;
Xorriso_option_zisofs;
Xorriso_parse_line;
Xorriso_peek_outlists;
Xorriso_prescan_args;
Xorriso_process_errfile;
Xorriso_process_msg_queues;
Xorriso_program_arg_bsl;
Xorriso_pull_outlists;
Xorriso_push_outlists;
Xorriso_read_rc;
Xorriso_set_problem_status;
Xorriso_sieve_add_filter;
Xorriso_sieve_big;
Xorriso_sieve_clear_results;
Xorriso_sieve_dispose;
Xorriso_sieve_get_result;
Xorriso_start_msg_watcher;
Xorriso_startup_libraries;
Xorriso_stop_msg_watcher;
local: *;
};

27
releng/CHECKLIST Normal file
View File

@ -0,0 +1,27 @@
------------------------------------------------------------------------------
http:libburnia-project.org
------------------------------------------------------------------------------
Release Engineering Check List
TEST: releng
auto_* tests could be run altogether by ./run_all_auto
manual_* tests are to be run individually and manually
LOGS: http://people.debian.org/~danchev/libburnia/logs/releng/
TEST: cppcheck - static code checker
LOGS: http://people.debian.org/~danchev/libburnia/logs/cppcheck/
TEST: medistimator - checks the dialog mode of xorriso, size estimation
facility, and its ability of processing large trees. Running this
requires some specific knowledge of how the tool works, in order to
interpret the results and compare them with these from any previous
runs. The source is heavily commented.
FILE: http://anonscm.debian.org/gitweb/?p=users/danchev/medistimator.git;a=summary
LOGS: http://people.debian.org/~danchev/libburnia/logs/medistimator/
TEST: Debian ISO image builder logs
LOGS: http://cdbuilder.debian.org/cdimage-log/
TEST: Debian build daemon logs - several hardware architectures and kernels
LOGS: http://buildd.debian.org

297
releng/README Normal file
View File

@ -0,0 +1,297 @@
------------------------------------------------------------------------------
http:libburnia-project.org
------------------------------------------------------------------------------
libisoburn/releng. By George Danchev <danchev@spnet.net>
and Thomas Schmitt <scdbackup@gmx.net>
Test suite for xorriso and libburnia libraries.
Copyright (C) 2011 - 2012 George Danchev, Thomas Schmitt
Provided under GPL version 2 or later.
------------------------------------------------------------------------------
The impatient tester will build libisoburn according to its README and then do
cd ./releng
./run_all_auto -x ../xorriso/xorriso
More patient testers will first read the following description.
Those who simply lack the interpreter /bin/bash, may do
./change_shell_to_use
and then retry.
The test suite
Directory ./releng of libisoburn contains a collection of test scripts and
auxiliary data. They exercise some typical use cases of building libisoburn
applications and running the ISO 9660 filesystem manipulation and CD/DVD/BD
burn program xorriso.
It is assumed that libburn and libisofs are installed, so that libisoburn
can be configured and built. It is not mandatory that libisoburn is already
installed. The tests may use an installed xorriso program as well as a
freshly built one.
The test scripts explicitely demand /bin/bash as interpreter, although they
would run on certain other shells too. If you get an error message like
./run_all_auto: not found
then consider to install /bin/bash.
If you decide against that, see below "Alternative Shells".
There are two groups of test scripts:
auto_* gets started and watched by script run_all_auto.
These tests have a moderate resource consumption and do
not cause mechanical movements of drive trays.
manual_* gets started by the user if desired.
Manual tests may create larger sets of temporary files,
may download test data from the internet, may need
system privileges beyond the reach of a sandbox user,
and operate the mechanics of a CD drive.
Running automated tests
The test scripts expect to get run while the working directory is
./releng
of a libisoburn source tree. E.g.: libisoburn-1.1.4/releng
They create all their temporary files underneath
./releng/releng_generated_data
Some of these files are persistent between tests.
Nevertheless it is safe to empty ./releng/releng_generated_data after
tests are done. The directory itself must be kept.
To run the unobtrusive automatic tests, build libisoburn and xorriso,
go to directory ./releng, and execute
./run_all_auto -x ../xorriso/xorriso
or if you want to use an installed xorriso program:
./run_all_auto -x $(which xorriso)
resp.
./run_all_auto -x $(type -p xorriso)
There are several options which work with run_all_auto and any single test.
-x absolute or relative path to xorriso binary to be run.
-k keep self-generated data.
-c cleanup temporary data kept from previous run and exit.
-f simulate failure.
-h print this help text.
-- end of general options, begin of test specific options.
After option "--", there may be given options which are specific to
particular manually executable test scripts.
Manually executable tests
Currently there are the following tests which should have the attention of
the user or require sysadmin considerations before they are run:
./manual_devices -x ../xorriso/xorriso [-- [--dev device_file_to_use]
[--priv_cmd 'command [arg [arg ...]]']]
Exercises listing of all accessible optical drives and the examination of
a one of these drives. The user needs the permission to operate the CD
drives. This might involve the need for superuser authority.
The media tray of the examined drive will get loaded if it is not already.
If no option --dev is given, then the user gets asked which of the listed
drives to examine more closely.
If a privilege command and optional arguments are given with --priv_cmd,
then this command and arguments are used to launch the xorriso runs.
Command and arguments must be single words and be submitted altogether
as one single argument. On Solaris use: --priv_cmd pfexec
./manual_burn -x ../xorriso/xorriso [-- [--dev device_file_to_use]
[--priv_cmd 'command [arg [arg ...]]']
[--what ...directory...] [--any_media]]
Burns the content of the directory given with --what onto re-usable
media: CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE.
Other media types get refused, unless option --any_media is given.
Data, which are possibly present on the media, get overwritten.
The result gets check read and compared with the state of the input
directory. MD5 mismatch causes a test failure. Differences to the directory
state are reported but still regarded as success.
If a privilege command and optional arguments are given with --priv_cmd,
then this command and arguments are used to launch the xorriso runs.
Command and arguments must be single words and be submitted altogether
as one single argument. On Solaris use:
--priv_cmd pfexec
./manual_isojigdo -x ../xorriso/xorriso
Exercises the production of a bootable Debian GNU/Linux image and its Jigdo
files. This test downloads a Debian daily image for i386 of about 270 MB,
extracts its content and composes a new image. Thus it needs about 850 MB
of disk space in releng/releng_generated_data when unpacked. Adding the daily
image size itself, the total space used would peak at about 1.2 GB.
This test will only work with GNU xorriso or if libjte was installed already
when libisofs was built. Further it needs the program jigit-mkimage. Both
are part of package jigit, version >= 1.18, available at:
http://www.einval.com/~steve/software/JTE/
Currently jigit builds only in GNU environments.
Any auto_* script can be run on its own. Some of them demand option -x.
All general options are accepted.
./auto_cxx
Not included in GNU xorriso.
Exercises inclusion of xorriso/xorriso.h and libisoburn/libisoburn.h
in C++ programs and linking of the libraries. It might be necessary
to set compiler options by shell variable CFLAGS before running the test.
It might be necessary to hand over the install directory of libburn and
libisofs in shell variable LD_LIBRARY_PATH.
E.g. if on FreeBSD the include headers libisofs.h , libburn.h are not found:
export CFLAGS="-I/usr/local/include"
E.g. on GNU/Hurd, where libburn and libisofs are not found by the linker:
export LD_LIBRARY_PATH="/usr/local/lib"
./auto_isocontent -x ../xorriso/xorriso
Tests whether xorriso is able to record and restore two familes of
hard links.
./auto_printsize -x ../xorriso/xorriso
Tests how long xorriso needs to compose a medium sized directory tree.
If programs mkisofs and/or genisomage are availaible, then the same test
is done with them.
----------------------------------------------------------------------------
What to do with FAIL results
The text output of the automatic tests is recorded in file
releng_generated_data/log.run_all_auto
Script ./run_all_auto will detect failure of particular tests and report
lines from the log file which contain problem indicating keywords:
NEVER,ABORT,FATAL,FAILURE,MISHAP,SORRY,WARNING,HINT,FAIL,ERROR,WRONG
If the program messages in log.run_all_auto do not explain the failure,
please contact mailing list libburn-hackers@pykix.org .
----------------------------------------------------------------------------
Alternative Shells
If you decided against installing /bin/bash, you may try to use your
current $SHELL by running
./change_shell_to_use
which will modify the test scripts named run_all_auto , auto_* ,manual_*.
Known to be suitable are the following shells
GNU/Linux: /bin/bash
FreeBSD 8: /bin/sh
Solaris: /bin/bash , /bin/i86/ksh93
In general, the shell should have Bourne shell ancestry.
The script does not choose an interpreter explicitely and is safe to be run
inline:
. ./change_shell_to_use
One may set any interpreter path by running a sub shell and changing its
variable SHELL. E.g. by:
( SHELL=/bin/my_shell" ; . ./change_shell_to_use )
----------------------------------------------------------------------------
Creating a new test script
If you want to provide an own test, manual or auto, then first invent a name
for it
test_name="releng/manual_"...some.name...
or
test_name="releng/auto_"...some.name...
Then copy file releng/template_new to $test_name.
Edit $test_name and process any line that begins by "# === TEMPLATE:".
Do what the line prescribes and then remove it from the script. You are
not done as long as such a line remains.
Your test must not start if no file
./inc/releng_getopts.inc
exists, i.e. if the current working directory is not ./releng.
If your test creates own files on disk, then it must do this underneath
directory
./releng_generated_data/$test_name (resp. $GEN_DATA_DIR, see below).
In case of failure, issue a line to stdout that begins by the word "FAIL",
followed by " : " and the name of the test (e.g. $SELF, see below).
Make sure that the test script finally returns a non-zero exit value.
This value should be between 1 and 28. Each type of failure should have its
own exit value.
Predefined are:
31 = Unknown option or unusable argument with known option
30 = Unexpected state of own directory for self generated files
29 = Not in ./releng directory or missing essential parts of ./releng
When exiting prematurely, make sure to call function cleanup.
Variables, general options, helper functions
The master script run_all_auto sets this variable:
RELENG_SCRIPT_RUN_BY_RUN_ALL_AUTO
1=supervised, the script is run by run_all_auto script
else=standalone, the script is run in standalone mode
The code piece inc/releng_getopts.inc should get executed inline at the
start of a test script. It initializes the following variables and sets
some of them according to the general options of the test suite:
SELF basename $0
GEN_DATA_DIR releng_generated_data/${SELF}
RELENG_XORRISO Path to xorriso binary. "" or "0" means no xorriso.
Default "0". Adjustable by option -x.
SIMULATE_FAILURE 0=normal operation, 1=test script shall simulate a failure.
Default 0. Setable to 1 by option -f.
CLEANUP 0=do not cleanup temporary data, 1=normal operation
Default 1. Setable to 0 by option -k.
SPECIFIC_HELP 0=normal operation, 1=print help text of script and exit 0
Default 0. Setable to 1 by option -h.
The code piece inc/releng_getopts.inc defines the following functions
for use by the single tests:
standalone_or_supervised This is internally called routine to print out
the running mode of the scripts - standalone,
supervised by run_all_auto.
No need to call it from the scripts themselves.
print_help Prints the help text for general options.
check_for_xorriso [-x]
Will exit with value 31 if no path to a xorriso binary
was defined by option -x of ./run_all_auto or a single
test.
Option -x of check_for_xorriso additionally tests whether
the given path leads to an executable program.
cleanup Removes the directory tree GEN_DATA_DIR after making
some safety checks.
boldify Try to set the terminal mode for future output to a more
noticable style of writing.
unboldify Reset terminal mode to normal style of writing.
Specific options
Options which are specific to the test should begin with a double dash.
They may have further arguments.
Implement them in the prepared interpreter loop which begins after line
next_is=ignore
Specific options shall only be interpreted by tests which get run manually.
If you plan to introduce a specific option, look at the description of
existing tests whether one of them would match your needs. In that case,
please re-use the name of that existing option.

42
releng/TODO Normal file
View File

@ -0,0 +1,42 @@
* Manpage examples turned into tests
Convert most examples from xorriso(1) manpage into tests.
* Enhance 'auto_isocontent'
Extend it to use some more demanding directory tree.
MD5s should be checked.
All file types as of stat(2) should be tested.
Test various comparisons:
xorriso provides built-in means for comparison:
xorriso -compare_r disk_path iso_rr_path
xorriso -indev my.iso -find / vs. find input_dir
bsdtar -xf my.iso vs. input_dir
* Test for wrong CD sizes would need a new test and probably an
automatic CD changer.
* Library unit tests - investigate the possibility to write some
cunit-based tests (http://cunit.sourceforge.net) for both
xorriso.h and libisoburn.h API's. The code samples could be put into
codesamples/ directory and run by auto_cxx or a separate auto_ script.
* ??? Still to decide:
Delete debian-testing-i386-businesscard.iso with ./run_all_auto -c
Contra: Currently remaining large files (like downloaded ISO images) are
simply left behind to be re-used and a boldified info message is shown
so the users can decide for themselves what to remove or leave as well.
Pro: Leaving 70 MB of image is quite obtrusive. Option -c is not run
under normal circumstances. So it could well be used for total cleanup.
Alternative: Specific option --remove_image.
* ??? Still to decide:
Have a script ./run_all_manual
Contra argument: if a releng sctipt is suitable to be run under a master
script run_all*, then this releng script should be put into auto_*
namespace , otherwise it is manual_*.
Pro: Tests may be manual because they demand lots of resources, not
because they need manual attention. In general the run_all_manual script
shall spare the user the plight to read the documentation. Instead it
shall present the manual tests, give an opportunity to skip the test,
and ask for parameters,

86
releng/auto_cxx Executable file
View File

@ -0,0 +1,86 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Licensed under GNU GPL version 2 or later
set -e
not_in_releng_exit() {
printf "\nPlease execute the tests from releng directory.\n\n"
exit 1
}
. inc/releng_getopts.inc || not_in_releng_exit
print_specific_help() {
cat << HLP
Specific options:
none yet.
Overview:
Tests both xorriso/xorriso.h and libisoburn/libisoburn.h
APIs for C++ cleanness.
HLP
}
if test "$SPECIFIC_HELP" = 1; then
print_specific_help
exit 0
fi
# xorriso binary is not needed for that particular test
SAMPLE_CODE_DIR=codesamples
CC=g++
# check compiler
if ! which "${CC}" >/dev/null 2>&1; then
printf "\n${SELF}: Not found: ${CC}. Install ${CC}.\n"
cleanup
exit 5
fi
# check data dir
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c' to remove.\n"
exit 6
else
mkdir "${GEN_DATA_DIR}"
fi
# process sample code tests
for SMPL in `ls "${SAMPLE_CODE_DIR}"/*.cpp`; do
# CMD_CPL="${CC} -I../ -L ../libisoburn/.libs/ ${CFLAGS} -lisoburn -o ${SMPL}.obj ${SMPL}"
CMD_CPL="${CC} -c -I../ -I../../libburn -I../../libisofs ${CFLAGS} -o ${SMPL}.obj ${SMPL}"
printf "${SELF}: ${CMD_CPL}"
set +e
${CMD_CPL}
RET_CPL="$?"
if [ ${RET_CPL} = 0 -a -f ${SMPL}.obj ]; then
mv ${SMPL}.obj ${GEN_DATA_DIR}
printf "...ok\n"
else
printf "\nFAIL : ${SELF}: Compilation of ${SMPL}\n"
cleanup
exit 7
fi
# BASE=$(basename ${SMPL}.obj)
# printf "${SELF}: Running LD_LIBRARY_PATH=../libisoburn/.libs/:${LD_LIBRARY_PATH} ${GEN_DATA_DIR}/${BASE}"
# LD_LIBRARY_PATH=../libisoburn/.libs/:${LD_LIBRARY_PATH} ${GEN_DATA_DIR}/${BASE}
# RET_SMPL="$?"
# case ${RET_SMPL} in
# 0)
# printf "...ok\n"
# ;;
# *)
# printf "exit code: ${RET_SMPL}\n"
# cleanup
# exit 8
# ;;
# esac
set -e
done
# clean
cleanup
exit 0

400
releng/auto_isocontent Executable file
View File

@ -0,0 +1,400 @@
#!/bin/bash
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# Copyright 2011 George Danchev <danchev@spnet.net>
# Licensed under GNU GPL version 2 or later
# Test the correct handling of hardlinks by xorriso options
# -update_r , -hardlinks perform_update , and -extract
# If there is support for ACLs or xattr in xorriso and on the local system,
# then test recording and restoring of these features.
not_in_releng_exit() {
printf "\nPlease execute the tests from releng directory.\n\n"
exit 1
}
. inc/releng_getopts.inc || not_in_releng_exit
print_specific_help() {
cat << HLP
Specific options:
none yet.
Overview:
Tests ISO image contents by performing various
image generation, extractions and comparisons.
HLP
}
if test "$SPECIFIC_HELP" = 1; then
print_specific_help
exit 0
fi
if [ ! -x $RELENG_XORRISO ]; then
print_help
printf "\n${SELF}: -x absolute or relative path to binary to be run.\n\n"
exit 31
fi
# check data dir, if any and after checking -x xorriso
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c' to remove.\n"
exit 8
else
mkdir "${GEN_DATA_DIR}"
fi
export xorriso=${RELENG_XORRISO}
export workdir=${GEN_DATA_DIR}
export image_file="$workdir"/xorriso_hardlinks.iso
export on_disk="$workdir"/xorriso_hardlinks_test_dir
export in_iso=""
export copy_on_disk="$workdir"/xorriso_hardlinks_copy_dir
export failure=0
export simulate_failure=${SIMULATE_FAILURE}
export next_is_xorriso=0
export next_is_rc=0
export bad=0
export report_about="-report_about UPDATE"
test -z "$in_iso" && in_iso="$on_disk"
# mkdir "$workdir" || bad=1
mkdir "$on_disk" || bad=1
if test "$bad" = 1
then
echo -e "\nFAIL : ${SELF} : Test environment error : Cannot make directories"
exit 3
fi
# All must be set at this point
printf "\n${SELF}: Setting up $on_disk with several hardlinks\n" >&2
echo test_content >"$on_disk"/file_1 || exit 1
echo test_content >"$on_disk"/file_2 || exit 1
ln "$on_disk"/file_1 "$on_disk"/file_1_link_a || exit 1
ln "$on_disk"/file_1 "$on_disk"/file_1_link_b || exit 1
ln "$on_disk"/file_2 "$on_disk"/file_2_link_a || exit 1
# trivial ISO 9660 image validation routine
is_valid_iso9660() {
ISOfile="$1"
if ! which file >/dev/null 2>&1; then
printf "\nFAIL : ${SELF}: Not found: file. Please install the file(1) utility.\n"
failure=1
return
fi
if [ ! -f ${ISOfile} ]; then
failure=1
printf "\nFAIL : ${SELF} : Not found: ${ISOfile}\n"
return
fi
file ${ISOfile}
if file ${ISOfile} | grep "ISO *9660" >/dev/null 2>&1; then
printf "\n${SELF}: Resulting ${ISOfile} OK. Looks like ISO 9660 filesystem.\n"
else
failure=1
printf "\nFAIL : ${SELF} : ${ISOfile} DOES NOT look like ISO 9660 filesystem data.\n"
fi
}
# Retrieve and evaluate return value of command run under return_wrapper
check_xorriso_return() {
ret=$(cat "$return_value_file")
rm "$return_value_file"
if test "$ret" = 0
then
return 0
fi
failure=1
echo
echo "FAIL : ${SELF} : xorriso run exited with value $ret"
return 1
}
# Create test file and find out whether ACLs and/or xattr are available.
#
# Users known on GNU/Linux and FreeBSD: root games daemon man
# Groups : daemon games bin sshd sys
# On both systems, ACLs are manipulated by setfacl/getfacl
#
acl_xattr_test_file="$on_disk"/acl_xattr_test_file
acl_xattr_copy_file="$copy_on_disk"/acl_xattr_test_file
acl_xattr_test_dir="$on_disk"/acl_xattr_test_dir
acl_xattr_iso_dir="$in_iso"/acl_xattr_test_dir
acl_xattr_copy_dir="$copy_on_disk"/acl_xattr_test_dir
mkdir "$acl_xattr_test_dir"
echo echo hello world >"$acl_xattr_test_file" || exit 1
sys=$(uname -s)
acls=no
default_acls=no
setfacl_opts=""
if ( setfacl -m u::rwx,g::r-x,o::---,u:root:rwx,g:sys:rwx,u:daemon:r--,mask::rwx \
"$acl_xattr_test_file" ) >/dev/null 2>&1
then
if ( getfacl "$acl_xattr_test_file" ) >/dev/null 2>&1
then
if ( setfacl -m u::rwx,g::r-x,o::---,u:root:rwx,g:sys:rwx,u:daemon:r--,mask::rwx \
"$acl_xattr_test_dir" ) >/dev/null 2>&1
then
acls=yes
# Setting of "default" ACLs will fail on FreeBSD. It will nevertheless be
# done in the image by a xorriso command. Restoring is supposed to skip
# "default" ACLs if none could be recorded.
if setfacl -m u::rwx,g::r-x,o::---,u:root:rwx,g:sys:rwx,u:daemon:r--,mask::rwx,d:u::rwx,d:g::r-x,d:o::---,d:u:root:rwx,d:g:sys:rwx,d:u:daemon:r--,d:mask::rwx "$acl_xattr_iso_dir" 2>/dev/null
then
default_acls=yes
fi
setfacl_opts="-setfacl u::rwx,g::r-x,o::---,u:root:rwx,g:sys:rwx,u:daemon:r--,mask::rwx,d:u::rwx,d:g::r-x,d:o::---,d:u:root:rwx,d:g:sys:rwx,d:u:daemon:r--,d:mask::rwx $acl_xattr_iso_dir --"
fi
fi
fi
# GNU/Linux and FreeBSD have different tools for Extended Attributes
xattrs=no
extattrs=no
# Try GNU/Linux style setattr/getattr
if ( setfattr -n user.test_xattr -v test_value "$acl_xattr_test_file" ) \
>/dev/null 2>&1
then
if ( getfattr -d "$acl_xattr_test_file" ) >/dev/null 2>&1
then
xattrs=yes
setfattr -n user.long_data -v 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 "$acl_xattr_test_file"
setfattr -n user.more_data -v 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 "$acl_xattr_test_file"
fi
fi
if test "$xattrs" = no
then
# Try FreeBSD style setextattr
if ( setextattr user test_xattr test_value "$acl_xattr_test_file" ) \
>/dev/null 2>&1
then
if ( getextattr user test_xattr "$acl_xattr_test_file" ) >/dev/null 2>&1
then
setextattr user long_data 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 "$acl_xattr_test_file"
setextattr user more_data 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 "$acl_xattr_test_file"
if ( lsextattr user "$acl_xattr_test_file" ) >/dev/null 2>&1
then
extattrs=yes
fi
fi
fi
fi
echo
echo "${SELF}: Detected sys='$sys' , acls=$acls , d_acls=$default_acls , xattrs=$xattrs , extattrs=$extattrs"
# Examine capabilities of xorriso
xorriso_acls=no
xorriso_xattrs=no
extras=$("$xorriso" -list_extras all 2>/dev/null)
if test "$?" = 0
then
if echo "$extras" | fgrep 'Local ACL : yes' >/dev/null 2>&1
then
xorriso_acls=yes
fi
if echo "$extras" | fgrep 'Local xattr : yes' >/dev/null 2>&1
then
xorriso_xattrs=yes
fi
fi
if test "$xorriso_acls" = no
then
acls=no
setfacl_opts=
fi
if test "$xorriso_xattrs" = no
then
xattrs=no
extattrs=no
fi
echo "${SELF}: Detected xorriso_acls=$xorriso_acls , xorriso_xattrs=$xorriso_xattrs"
echo
ls -l "$on_disk"/*
echo -e "\n${SELF}: Producing simple image via -o" >&2
"$xorriso" -as mkisofs "$on_disk" -o "$workdir"/image_minus_o.iso
is_valid_iso9660 "$workdir"/image_minus_o.iso
echo -e "\n${SELF}: Producing simple image via redirect" >&2
"$xorriso" -as mkisofs "$on_disk" > "$workdir"/image_redirected.iso
is_valid_iso9660 "$workdir"/image_redirected.iso
echo -e "\n${SELF}: Producing simple image via pipe" >&2
return_wrapper "$xorriso" -as mkisofs "$on_disk" | \
cat > "$workdir"/image_piped.iso
check_xorriso_return
is_valid_iso9660 "$workdir"/image_piped.iso
echo -e "\n${SELF}: Producing simple image with for_backup/update_r/hardlinks" >&2
"$xorriso" \
$report_about \
-version \
-for_backup \
-padding 0 \
-outdev "$image_file" \
-volid TEST_AUTO_ISOCONTENT \
-update_r "$on_disk" "$in_iso" \
$setfacl_opts \
-hardlinks perform_update
ret=$?
if test "$ret" -gt 0 -a "$ret" -lt 32
then
printf "\nFAIL : ${SELF} : xorriso write run failed\n\n"
cleanup
exit 1
fi
is_valid_iso9660 "$image_file"
# It must refuse to load and go on with -assert_volid and non-matching pattern.
msg=$(\
"$xorriso" \
-abort_on FATAL \
-return_with FAILURE 32 \
-assert_volid 'NON_MATCHING*' FATAL \
-indev "$image_file" \
2>&1
)
ret=$?
if test "$ret" -gt 0 -a "$ret" -lt 32
then
printf "\n${SELF}: Ok. -assert_volid snapped.\n"
elif test "$ret" -ne 0
then
failure=1
echo >&2
echo "$msg" >&2
printf "\nFAIL : ${SELF} : -assert_volid test not properly performed\n\n"
else
failure=1
printf "\nFAIL : ${SELF} : -assert_volid did not snap\n\n" >&2
fi
echo -e "\n${SELF}: Copying from image to temporary disk tree" >&2
"$xorriso" \
$report_about \
-for_backup \
-assert_volid 'TEST_AUTO_ISOCONT*' FATAL \
-indev "$image_file" \
-osirrox on \
-find "$in_iso" -exec lsdl -- \
-extract "$in_iso" "$copy_on_disk"
ret=$?
if test "$ret" -gt 0 -a "$ret" -lt 32
then
printf "\nFAIL : ${SELF} : xorriso file extraction run failed\n\n"
cleanup
exit 1
fi
if test "$simulate_failure" = 1
then
echo -e "\n${SELF}: SIMULATING FAILURE BY REMOVING AN EXTRACTED FILE" >&2
echo -e "\nFAIL : ${SELF} : Simulated failure caused by option -fail"
rm "$copy_on_disk"/file_1_link_b
fi
printf "\n${SELF}: Comparing original disk tree and temporary one..." >&2
diff -r "$on_disk" "$copy_on_disk"
if test "$?" -ne 0
then
echo -e "\nFAIL : ${SELF} : diff -r $on_disk $copy_on_disk reports differences" >&2
echo -e "\nFAIL : ${SELF} : diff -r reports differences"
failure=1
else
printf "OK" >&2
fi
printf "\n${SELF}: Checking for hardlinks being siblings...\n"
ls -l "$copy_on_disk"/*
x=$(echo $(ls -ld "$copy_on_disk"/*file* | awk '{print $2}'))
expected="1 3 3 3 2 2"
if test x"$x" = x"$expected"
then
printf "${SELF}: Checking for hardlinks being siblings done: ok.\n" >&2
else
printf "\nFAIL : ${SELF} : Link count of extracted files is not as expected." >&2
printf "\n${SELF}: Expected: $expected" >&2
printf "\n${SELF}: Got : $x\n" >&2
failure=1
fi
if test "$acls" = yes
then
printf "\n${SELF}: Checking ACLs ...\n" >&2
acl_on_disk=$(getfacl "$acl_xattr_test_file" | grep -v '^# file:' | sort)
acl_in_copy=$(getfacl "$acl_xattr_copy_file" | grep -v '^# file:' | sort)
if test "$acl_on_disk" = "$acl_in_copy"
then
printf "${SELF}: Checking ACLs done: ok.\n" >&2
else
printf "\nFAIL : ${SELF} : ACL mismatch between original and extracted copy\n"
printf "\nOriginal:\n${acl_on_disk}\n"
printf "\nCopy:\n${acl_in_copy}\n"
failure=1
fi
fi
if test "$xattrs" = yes
then
printf "\n${SELF}: Checking xattr via getfattr ...\n" >&2
xattr_on_disk=$(getfattr "$acl_xattr_test_file" | \
grep -v '^# file:' | grep -v '^$' | \sort)
xattr_in_copy=$(getfattr "$acl_xattr_copy_file" |
grep -v '^# file:' | grep -v '^$' | sort)
if test "$xattr_on_disk" = "$xattr_in_copy"
then
num_xattr=$(echo "$xattr_on_disk" | wc -l)
printf "${SELF}: Checking xattr done: $num_xattr attributes, ok.\n" >&2
else
printf "\nFAIL : ${SELF} : xattr mismatch between original and extracted copy\n"
printf "\nOriginal:\n${xattr_on_disk}\n"
printf "\nCopy:\n${xattr_in_copy}\n"
failure=1
fi
elif test "$extattrs" = yes
then
printf "\n${SELF}: Checking xattr via lsextattr and getextattr ...\n" >&2
lsext_on_disk=$(lsextattr -q user "$acl_xattr_test_file")
xattr_on_disk=$(for i in $lsext_on_disk ; do echo $i $(getextattr -q user $i "$acl_xattr_test_file"); done | sort)
lsext_in_copy=$(lsextattr -q user "$acl_xattr_copy_file")
xattr_in_copy=$(for i in $lsext_in_copy ; do echo $i $(getextattr -q user $i "$acl_xattr_copy_file"); done | sort)
if test "$xattr_on_disk" = "$xattr_in_copy"
then
num_xattr=$(echo "$xattr_on_disk" | wc -l)
printf "${SELF}: Checking xattr done: $num_xattr attributes, ok.\n" >&2
else
printf "\nFAIL : ${SELF} : xattr mismatch between original and extracted copy\n"
printf "\nOriginal:\n${xattr_on_disk}\n"
printf "\nCopy:\n${xattr_in_copy}\n"
failure=1
fi
fi
#
echo
cleanup
# Report result
echo
if test "$failure" = 1
then
printf "${SELF}: FAILED"
echo
exit 1
else
printf "${SELF}: Passed"
echo
fi
exit 0

149
releng/auto_printsize Executable file
View File

@ -0,0 +1,149 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Licensed under GNU GPL version 2 or later
set -e
not_in_releng_exit() {
printf "\nPlease execute the tests from releng directory.\n\n"
exit 1
}
# Include common bits
. inc/releng_getopts.inc || not_in_releng_exit
print_specific_help() {
cat << HLP
Specific options:
none yet.
Overview:
Test performance of print_size against various input tree.
Optionally compare with genisoimage and mkisofs.
HLP
}
if test "$SPECIFIC_HELP" = 1; then
print_specific_help
exit 0
fi
# Each test should decide whether or not it needs
# a xorriso binary to test, since some do compilations only.
if [ ! -x $RELENG_XORRISO ]; then
print_help
printf "\n${SELF}: -x absolute or relative path to binary to be run.\n\n"
exit 31
fi
# check data dir, if any and after checking -x xorriso
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c' to remove.\n"
exit 8
else
mkdir "${GEN_DATA_DIR}"
fi
#
DIR_UPPER=32
FILE_UPPER=10
# All must be set at this point
# TODO: work out a smarter way to quickly generate different
# types of trees (long, deep, etc)
printf "\n${SELF}: Generating sample tree in ${GEN_DATA_DIR} :\n"
count=0
date
# Hopefully the for-loops are much faster than while-loops with arithmetics
# This needs 7/4*DIR_UPPER+FILE_UPPER (= 66) while-iterations
#
i1_list=
i1=0
o1=$(expr ${DIR_UPPER} / 4)
while test $i1 -lt $o1
do
i1_list="$i1_list $i1"
i1=$(expr $i1 + 1)
done
i2_list=
i2=0
o2=$(expr ${DIR_UPPER} / 2)
while test $i2 -lt $o2
do
i2_list="$i2_list $i2"
i2=$(expr $i2 + 1)
done
i3_list=
i3=0
while test $i3 -lt ${DIR_UPPER}
do
i3_list="$i3_list $i3"
i3=$(expr $i3 + 1)
done
i_file_list=
i_file=0
while test $i_file -lt ${FILE_UPPER}
do
i_file_list="$i_file_list $i_file"
i_file=$(expr $i_file + 1)
done
#
# plus 1/8*DIR_UPPER*DIR_UPPER*DIR_UPPER*FILE_UPPER (= 40960) for-iterations
#
for i1 in $i1_list
do
for i2 in $i2_list
do
for i3 in $i3_list
do
mkdir -p ${GEN_DATA_DIR}/DirOne$i1/DirTwo$i2/DirThree$i3
for i_file in $i_file_list
do
echo -n \
> ${GEN_DATA_DIR}/DirOne$i1/DirTwo$i2/DirThree$i3/File_${i_file}
count=$((count + 1))
done
done
done
echo " ${count} files created ..."
done
printf "done.\n"
date
du -s "${GEN_DATA_DIR}"
printf "\n${SELF}: Performing several print size runs to neutralize possible disk cache impact.\n"
# run xorriso
if [ -x ${RELENG_XORRISO} ]; then
for run in 1 2 3; do
printf "\n${SELF}: Running ${RELENG_XORRISO} -as mkisofs -quiet -print-size ${GEN_DATA_DIR}. Trial: ${run}.\n"
time ${RELENG_XORRISO} -as mkisofs -quiet -print-size ${GEN_DATA_DIR}
done
fi
# try to run genisoimage
if which genisoimage >/dev/null 2>&1; then
RELENG_GENISOIMAGE=`which genisoimage`
for run in 1 2 3; do
printf "\n${SELF}: Running ${RELENG_GENISOIMAGE} -quiet -print-size ${GEN_DATA_DIR}. Trial: ${run}.\n"
time ${RELENG_GENISOIMAGE} -quiet -print-size ${GEN_DATA_DIR}
done
fi
# try to run mkisofs
if which mkisofs >/dev/null 2>&1; then
RELENG_MKISOFS=`which mkisofs`
for run in 1 2 3; do
printf "\n${SELF}: Running ${RELENG_MKISOFS} -quiet -print-size ${GEN_DATA_DIR}. Trial: ${run}.\n"
time ${RELENG_MKISOFS} -quiet -print-size ${GEN_DATA_DIR}
done
fi
#
cleanup
#
exit 0

39
releng/change_shell_to_use Executable file
View File

@ -0,0 +1,39 @@
# check whether we are in releng and create dir
mkdir_ret=29
if test -d releng_generated_data
then
if test -d releng_generated_data/change_shell_to_use
then
mkdir_ret=0
else
mkdir releng_generated_data/change_shell_to_use
mkdir_ret=$?
fi
fi
if test "$mkdir_ret" = 0
then
for i in run_all_auto auto_* manual_*
do
temp=releng_generated_data/change_shell_to_use/temp_file
c=$(wc -l "$i" | awk '{print $1}')
line=$(head -n 1 "$i")
if echo x"$line" | grep '^x#!' >/dev/null 2>&1
then
cp "$i" "$temp"
echo '#!'"$SHELL" > "$temp"
tail -n "$(expr $c - 1)" "$i" >> "$temp"
mv "$temp" "$i"
echo "Changed to #!$SHELL : $i"
fi
done
rmdir releng_generated_data/change_shell_to_use
else
echo "change_shell_to_use: Missing directory ./releng_generated_data" >&2
echo "or cannot create directory ./releng_generated_data/change_shell_to_use" >&2
echo "change_shell_to_use: Run aborted"
test 1 = 0
fi

View File

@ -0,0 +1,34 @@
// Just to ensure we are C++-clean. This should not spit too much noise
/* Copyright 2011 George Danchev <danchev@spnet.net>
* Released into the public domain
*/
#if __WORDSIZE == 32
#define _LARGEFILE_SOURCE 1
#define _FILE_OFFSET_BITS 64
#endif
#include <iostream>
#include <inttypes.h>
//extern "C" {
#include "libburn/libburn.h"
#include "libisofs/libisofs.h"
// using namespace burn;
// (this was needed to before rev.4062 of libisoburn)
#include "libisoburn/libisoburn.h"
//}
int main() {
int major=-1, minor=-1, micro=-1;
isoburn_version(&major, &minor, &micro);
if (major<0 || minor<0 || micro<0)
return -1;
std::cout
<< " major:" << major
<< " minor:" << minor
<< " micro:" << micro
;
return 0;
}

View File

@ -0,0 +1,30 @@
// Just to ensure we are C++-clean. This should not spit too much noise
/* Copyright 2011 George Danchev <danchev@spnet.net>
* Released into the public domain
*/
#if __WORDSIZE == 32
#define _LARGEFILE_SOURCE 1
#define _FILE_OFFSET_BITS 64
#endif
#include <iostream>
#include <inttypes.h>
//extern "C" {
#include "xorriso/xorriso.h"
//}
int main() {
int major=-1, minor=-1, micro=-1;
Xorriso__version(&major, &minor, &micro);
if (major<0 || minor<0 || micro<0)
return -1;
std::cout
<< " major:" << major
<< " minor:" << minor
<< " micro:" << micro
;
return 0;
}

View File

@ -0,0 +1,198 @@
# Copyright 2011 George Danchev <danchev@spnet.net>
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# Licensed under GNU GPL version 2 or later
SELF=$(basename $0)
RELENG_XORRISO=0
SIMULATE_FAILURE=0
CLEANUP=1
SPECIFIC_HELP=0
START_DIR_DONT_CHANGE=`pwd`
GEN_DATA_DIR=releng_generated_data/${SELF}
#############################################
standalone_or_supervised() {
case "${RELENG_SCRIPT_RUN_BY_RUN_ALL_AUTO}" in
1)
echo "${SELF}: Running in Supervised mode"
;;
*)
echo "${SELF}: Running in Standalone mode"
;;
esac
}
# Unconditionally shout out the invocation mode - standalone or supervised
standalone_or_supervised
#############################################
print_help() {
cat << EOF
Usage: $SELF -x path/to/xorriso [-k] [-f] [-c] [-h]
[-- ...test specific options...]
General options:
-x absolute or relative path to xorriso binary to be run.
-k keep self-generated data.
-c cleanup self-generated data kept from previous run and exit.
-f simulate failure.
-h print this help text
-- end of general options, begin of test specific options.
EOF
}
#############################################
boldify() {
if which tput >/dev/null 2>&1; then tput smso; fi
}
#############################################
unboldify() {
if which tput >/dev/null 2>&1; then tput rmso; fi
}
#############################################
cleanup() {
if [ ${CLEANUP} -eq 1 ]; then
# safety net, just in case -> we want to be in the starting
# directory before removing whatever self-generated stuff
if [ -d "${GEN_DATA_DIR}" ]; then
cd "${START_DIR_DONT_CHANGE}" || exit 2
# Verify once again we are in the releng_generated_data directory
# Check for both returned code of grep and returned matching string
# There is no "readlink -e" on FreeBSD
READ_CANON_EXISTS=`cd "${GEN_DATA_DIR}" 2>/dev/null && pwd`
DIR_NAME_GEN_DATA=`dirname "${READ_CANON_EXISTS}"`
set +e
# There is no "grep -P" on FreeBSD
RET_NON_EMPTY_STRING=`echo "${DIR_NAME_GEN_DATA}" | grep "[a-zA-Z0-9_][a-zA-Z0-9_]*/releng_generated_data$"`
GREP_RET_GEN_DATA="$?"
case "${GREP_RET_GEN_DATA}" in
0)
if [ x"${RET_NON_EMPTY_STRING}" != x"" ]; then
# now call the nastiness
chmod -R +w ${GEN_DATA_DIR}
rm -rf ${GEN_DATA_DIR}
# boldify
printf "${SELF}: Removed (self-generated) %s\n" ${GEN_DATA_DIR}
# unboldify
else
printf "FAIL : ${SELF} : Safety check for being in releng_generated_data directory.\n"
printf "FAIL : ${SELF} : GREP returned empty string: ${RET_NON_EMPTY_STRING}.\n"
printf "FAIL : ${SELF} : Skipped trying to remove ${GEN_DATA_DIR} directory. Exiting.\n"
fi
;;
*)
printf "FAIL : ${SELF} : Safety check for being in releng_generated_data directory.\n"
printf "FAIL : ${SELF} : GREP returned code: ${GREP_RET_GEN_DATA}.\n"
printf "FAIL : ${SELF} : Skipped trying to remove ${GEN_DATA_DIR} directory. Exiting.\n"
exit 30
;;
esac
else
printf "${SELF}: ${GEN_DATA_DIR} does not exist. Nothing to clean.\n"
fi
else
# boldify
printf "${SELF}: Leaving (self-generated) %s\n" ${GEN_DATA_DIR}
# unboldify
fi
}
#############################################
check_for_xorriso() {
# $1: if "-x" then check executability
if test -z "$RELENG_XORRISO" -o "$RELENG_XORRISO" = "0"
then
print_help
# print_specific_help
echo
echo "${SELF}: Need -x absolute or relative path to xorriso binary."
echo
exit 31
fi
if [ x"$1" = x"-x" -a ! -x "$RELENG_XORRISO" ]
then
print_help
# print_specific_help
echo
echo "${SELF}: Path given by option -x does not lead to an executable file."
echo "Given is: '$RELENG_XORRISO'"
if test "$RELENG_XORRISO" = "xorriso"
then
xorriso=$(type -p xorriso)
if test -n "xorriso"
then
echo "Hint: Try '$xorriso'"
fi
fi
echo
exit 31
fi
}
#############################################
# To catch the exit value of a command in a pipe
return_value_file="$GEN_DATA_DIR"/wrapper_"$$"_return_value
return_wrapper()
{
cmd="$1"
shift 1
"$cmd" "$@"
RET="$?"
echo "$RET" >"$return_value_file"
return "$RET"
}
#############################################
next_is=
for i in "$@"
do
if test "$next_is" = "ignore"
then :
elif test "$next_is" = "x"
then
RELENG_XORRISO="$i"
next_is=
elif test x"$i" = x"-x"
then
next_is="x"
elif test x"$i" = x"-k"
then
CLEANUP=0
elif test x"$i" = x"-c"
then
CLEANUP=1
cleanup
exit 0
elif test x"$i" = x"-f"
then
SIMULATE_FAILURE=1
elif test x"$i" = x"-h"
then
print_help
SPECIFIC_HELP=1
elif test x"$i" = x"--"
then
# Begin of private arguments for caller
next_is="ignore"
else
echo >&2
echo "Unknown general option: $i" >&2
print_help
exit 31
fi
done
if test "$next_is" = x
then
echo >&2
echo "Option -x expects an argument (the path to the xorriso program)" >&2
print_help
exit 31
fi

20
releng/inc/test_releng_getopt Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
set -e
. releng_getopts.inc
boldify
printf "\ntesting boldify and unboldify..."
unboldify
printf "\nSELF =${SELF}"
printf "\nRELENG_XORRISO =${RELENG_XORRISO}"
printf "\nSIMULATE_FAILURE =${SIMULATE_FAILURE}"
printf "\nCLEANUP =${CLEANUP}"
printf "\nSPECIFIC_HELP =${SPECIFIC_HELP}"
printf "\nSTART_DIR_DONT_CHANGE =${START_DIR_DONT_CHANGE}"
printf "\nGEN_DATA_DIR =${GEN_DATA_DIR}"
printf "\n"
exit 0

175
releng/jigdo-gen-md5-list Executable file
View File

@ -0,0 +1,175 @@
#!/bin/sh
# Copyright (c) 2010, 2011 George Danchev <danchev@spnet.net>
# Copyright (c) 2010, 2011 Thomas Schmitt <scdbackup@gmx.net>
# This script is distributed according to the terms of the GNU GPL v2.
# This should be better rewritten in C at some future point. Ref: pwd code.
# Create a list of MD5sums encoded in hexidecimal format and print to standard output
# Format Description
# A line in the emerging file is to be composed as follows:
#
# The MD5 checksum of the file content must be encoded in 32 hex digits
# [0-9afAF]
#
# Next come two blanks.
#
# The byte size of the file content must be encoded in 12 decimal digits
# or blanks.
#
# Next come two blanks.
#
# The rest of the line up to the newline character is a semi-literal file
# address. Its basename has to be the same as the basename of the data file
# when it is used as one of the input files for the jigdo file generator.
# The semi-literal address and the address mapping define what will be
# listed as file address in the jigdo file.
# The address may bear at its start a literal text that shall be recognized by
# the address mapping (e.g. -jigdo-map) of the jigdo file generator.
# The rest of the address must be usable as file address in both situations:
# When the jigdo file gets generated, and when the jigdo file gets read
# to inflate the template file into the original payload image.
# The address mappings at both occasions can be used to adapt to a change
# of the absolute location of the listed files.
# Between both mappings, the parent directory is represented by a symbolic
# text, like "Debian:".
# A simple strategy to cope with this is to write absolute paths into the
# .md5 file, and to use matching absolute paths in the -jigdo-map
# directives. Keep in mind that mapping is purely literal. Symbolic links
# are neither resolved nor can they confuse the mapping.
set -e
SELF=jigdo-gen-md5-list
VER=0.2
OPT_ABSOLUTE=1
# On FreeBSD there is "md5" rather than "md5sum".
# Furthermore, the FreeBSD shell reports missing commands to inherited stderr,
# regardless that the attempt itself has redirected stderr. Thus a sub shell
# is needed to hide the protest.
if ( md5sum --help ) >/dev/null 2>&1
then
md5_cmd=md5sum
elif ( md5 -s test ) >/dev/null 2>&1
then
md5_cmd=md5
else
echo "$0 : Programs md5sum and md5 failed to work" >&2
exit 2
fi
usage() {
cat << USAGE
usage: $SELF [option] DIR FILE ...
-a, --make-absolute make absolute paths, avoiding any symlinks (default)
-l, --keep-literal leave paths untouched, literally as supplied
-v, --version print version
-h, --help print help
-e, --examples print examples
USAGE
}
examples() {
cat << EXAMPLES
examples:
$SELF datadir datafile
$SELF --keep-literal datadir datafile
find . -type f | xargs $SELF
find . -exec $SELF '{}' ';'
EXAMPLES
}
md5list() {
item="$1"
if test $OPT_ABSOLUTE -eq 1; then
dn=`dirname "$item"` # dirname
fn=`basename "$item"` # filename
od=`pwd -P` # old dir
cd "$dn" || exit 1
item=`pwd -P`/"$fn" # absolute physical file path, avoiding all symlinks
cd "$od" || exit 1
fi
if test "$md5_cmd" = "md5sum"
then
MD5=`md5sum "$item" | awk '{print $1}'`
elif test "$md5_cmd" = "md5"
then
MD5=`md5 -q "$item"`
else
echo "$0 : No MD5 program found" >&2
exit 2
fi
SIZ=`ls -ld "$item" | awk '{print $5}'`
printf '%32s %12s %s\n' "$MD5" "$SIZ" "$item"
}
walkdir() {
DR="$1"
for item in `find "$DR" -type f`
do
md5list "$item"
done
}
# main()
if test "$1" = "" ; then
usage
exit 1
fi
case "$1" in
--make-absolute|-a)
OPT_ABSOLUTE=1;
shift;
;;
--keep-literal|-l)
OPT_ABSOLUTE=0;
shift;
;;
--version|-v)
printf '%s %s\n' "$SELF" "$VER"
exit 0
;;
--help|-h)
usage
exit 0
;;
--examples|-e)
examples
exit 0
# *)
# usage
# exit 1
# ;;
esac
for i in "$@"
do
if test -d "$i" ; then
DR="$i"
if test $OPT_ABSOLUTE -eq 1; then
od=`pwd -P` # old dir
cd "$DR" || exit 1
DR=`pwd -P` # absolute physical dir path, avoiding all symlinks
cd "$od" || exit 1
fi
walkdir "$DR"
elif test -f "$i" ; then
FL="$i"
md5list "$FL"
else
usage
exit 1
fi;
done
exit 0

View File

@ -0,0 +1,30 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.2.
.TH JIGDO-GEN-MD5-LIST "1" "October 2010" "jigdo-gen-md5-list 0.1" "User Commands"
.SH NAME
jigdo-gen-md5-list \- create a list of MD5sums encoded in hexidecimal format and print to standard output
.SH DESCRIPTION
usage: jigdo\-gen\-md5\-list [option] DIR FILE ...
.TP
\fB\-a\fR, \fB\-\-make\-absolute\fR
make absolute paths, avoiding any symlinks (default)
.TP
\fB\-l\fR, \fB\-\-keep\-literal\fR
leave paths untouched, literally as supplied
.TP
\fB\-v\fR, \fB\-\-version\fR
print version
.TP
\fB\-h\fR, \fB\-\-help\fR
print help
.TP
\fB\-e\fR, \fB\-\-examples\fR
print examples
.SH FORMAT
File format is described in the beginning of the script itself.
.SH "SEE ALSO"
xorriso(1), jigdo-lite(1), jigit-mkimage(1)
.SH AUTHOR
Written by George Danchev <danchev@spnet.net> and Thomas Schmitt <scdbackup@gmx.net>

256
releng/manual_burn Executable file
View File

@ -0,0 +1,256 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
#
# Licensed under GNU GPL version 2 or later
set -e
# set -x
print_specific_help() {
cat << HLP
Specific options:
--dev path use path as drive address. Default: /dev/cdrw
--what path use path as address of the directory which shall
be copied into an ISO 9660 filesystem on media.
--any_media allow non re-usable MMC media, like CD-R or DVD+R.
Allow paths to non-existing files, but disallow paths
to existing regular files.
--priv_cmd 'command [arg [arg ...]]'
With drive operations execute xorriso as argument
of the given command (e.g. pfexec, sudo) with the
optionally given arguments: command arg arg xorriso ...
Command and arguments must be single words.
Overview:
Test burning to re-usable media CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE.
By default, one-time usable media will be rejected deliberately.
HLP
}
wait_for_dev () {
# $1 = device address
timeout=30
counter=0
while test "$counter" -lt "$timeout"
do
if test -e "$1"
then
echo
return 0
fi
if test "$counter" = 0
then
echo
echo "Not existing: $dev"
echo "Will wait up to $timeout seconds for it to appear."
fi
counter=$(expr $counter + 1)
echo -n "$counter "
sleep 1
done
echo
return 1
}
getopts_inc=inc/releng_getopts.inc
if test -e "$getopts_inc"
then
. "$getopts_inc"
if test "$SPECIFIC_HELP" = 1
then
print_specific_help
exit 0
fi
else
echo >&2
echo "File not found: $getopts_inc" >&2
echo "Are we in the ./releng directory of a libisoburn SVN checkout ?" >&2
echo "(Please execute the tests from that ./releng directory.)" >&2
echo >&2
exit 29
fi
# Set default values for specific option variables.
dev=/dev/cdrw
what=../xorriso
any_media=0
priv_cmd=
# Interpret specific options, they begin after the first --.
next_is=ignore
for i in "$@"
do
if test "$next_is" = "ignore"
then
if test "$i" = "--"
then
next_is=""
fi
elif test "$next_is" = "dev"
then
dev="$i"
next_is=""
elif test "$next_is" = "what"
then
what="$i"
next_is=""
elif test "$next_is" = "priv_cmd"
then
priv_cmd="$i"
next_is=""
elif test "$i" = "--dev"
then
next_is="dev"
elif test "$i" = "--what"
then
next_is="what"
elif test "$i" = "--any_media"
then
any_media=1
elif test "$i" = "--priv_cmd"
then
next_is="priv_cmd"
else
echo >&2
echo "Unknown test specific option: $i" >&2
print_help
print_specific_help
exit 31
fi
done
check_for_xorriso -x
# check data dir, if any and after checking -x xorriso
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c' to remove.\n"
exit 30
else
mkdir "${GEN_DATA_DIR}"
fi
#####################################################################
# Inspect drive address
if test -e "$dev"
then
if test "$any_media" = 1 -a -f "$dev"
then
echo "FAIL : ${SELF} : --dev $dev leads to an existing regular file"
echo
cleanup
exit 31
fi
else
if test "$any_media" = "0"
then
echo "FAIL : ${SELF} : --dev $dev does not lead to an existing file"
echo
cleanup
exit 31
fi
fi
# Inspect media
set +e
wait_for_dev "$dev"
res=$(${priv_cmd} "$RELENG_XORRISO" -outdev "$dev" 2>&1)
ret=$?
set -e
if test "$ret" -ne 0
then
echo "$res" >&2
echo "FAIL : ${SELF} : Non-zero exit value $ret with: ${priv_cmd} $RELENG_XORRISO -outdev $dev"
echo
cleanup
exit 1
elif echo "$res" | grep '^Media current:' >/dev/null 2>&1
then
media=$(echo "$res" | grep '^Media current:' | \
sed -e 's/^Media current: //')
echo "Detected media: '$media'"
if test "$media" = "CD-RW" -o "$media" = "DVD-RW sequential recording" -o \
"$media" = "DVD-RW restricted overwrite" -o "$media" = "DVD-RAM" -o \
"$media" = "DVD+RW" -o "$media" = "BD-RE"
then
echo "Recognized as re-usable."
elif test "$media" = "is not recognizable"
then
echo "FAIL : ${SELF} : No recognizable media detected in: '$dev'"
echo
cleanup
exit 2
elif test "$any_media" = 1
then
echo "Accepted media only because of option --any_media : '$media'"
else
echo "FAIL : ${SELF} : No re-usable media detected, but: '$media'"
echo
cleanup
exit 2
fi
fi
# Perform burn run
echo ${priv_cmd} "$RELENG_XORRISO" -for_backup -outdev "$dev" -blank as_needed -map "$what" /test
set +e
wait_for_dev "$dev"
${priv_cmd} "$RELENG_XORRISO" \
-for_backup \
-outdev "$dev" \
-blank as_needed \
-map "$what" /test
ret=$?
set -e
if test "$ret" -ne 0
then
echo "FAIL : ${SELF} : Non-zero exit value with burn run: $ret"
echo
cleanup
exit 1
fi
if test "$SIMULATE_FAILURE" = 1
then
echo "FAIL : ${SELF} : Simulated failure caused by option -f"
if test -f "$dev"
then
# Alter image
dd if=/dev/urandom bs=2K count=1 \
of="$dev" conv=notrunc seek=400
else
cleanup
exit 1
fi
fi
# Check read
echo ${priv_cmd} "$RELENG_XORRISO" -for_backup -indev "$dev" \
-check_media event=FATAL -- \ -check_md5_r FATAL / --
set +e
wait_for_dev "$dev"
${priv_cmd} "$RELENG_XORRISO" \
-for_backup \
-indev "$dev" \
-print '---check_media:' -check_media event=FATAL -- \
-print '---check_md5_r:' -check_md5_r FATAL / -- \
-print '---compare_r:' -md5 off -compare_r "$what" /test
ret=$?
set -e
if test "$ret" -ne 0
then
echo "FAIL : ${SELF} : Non-zero exit value with checkread run: $ret"
echo
cleanup
exit 1
fi
echo "Ok. Burn test passed."
echo
cleanup
exit 0

188
releng/manual_devices Executable file
View File

@ -0,0 +1,188 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# Licensed under GNU GPL version 2 or later
# set -e
print_specific_help() {
cat << HLP
Specific options:
--dev path Suppress dialog and use path as drive address.
--priv_cmd 'command [arg [arg ...]]'
With drive operations execute xorriso as argument
of the given command (e.g. pfexec, sudo) with the
optionally given arguments: command arg arg xorriso ...
Command and arguments must be single words.
Overview:
Test device scanning and list of speeds.
HLP
}
# Include common bits and interpret general options
getopts_inc=inc/releng_getopts.inc
if test -e "$getopts_inc"
then
. "$getopts_inc"
if test "$SPECIFIC_HELP" = 1
then
print_specific_help
exit 0
fi
else
echo >&2
echo "File not found: $getopts_inc" >&2
echo "Are we in the ./releng directory of a libisoburn SVN checkout ?" >&2
echo "(Please execute the tests from that ./releng directory.)" >&2
echo >&2
exit 2
fi
# Interpret private options, they begin after the first --.
dev=
priv_cmd=
next_is=ignore
for i in "$@"
do
if test "$next_is" = "ignore"
then
if test "$i" = "--"
then
next_is=""
fi
elif test "$next_is" = "dev"
then
dev="$i"
next_is=""
elif test "$next_is" = "priv_cmd"
then
priv_cmd="$i"
next_is=""
elif test "$i" = "--dev"
then
next_is="dev"
elif test "$i" = "--priv_cmd"
then
next_is="priv_cmd"
else
echo >&2
echo "Unknown test specific option: $i" >&2
print_help
print_specific_help
exit 31
fi
done
# Insist in having a xorriso
check_for_xorriso -x
has_device_links=$("$RELENG_XORRISO" -help 2>/dev/null | fgrep ' -device_links')
if test -n "$has_device_links"
then
devices_opt="-device_links"
else
devices_opt="-devices"
fi
#
get_speeds() {
echo -e "\n${SELF}: Running: ${priv_cmd} ${RELENG_XORRISO} -report_about WARNING -outdev ${1} -toc -list_formats -list_profiles out -list_speeds"
${priv_cmd} "$RELENG_XORRISO" -report_about WARNING -outdev "$1" \
-print '---toc :' -toc \
-print '---list_formats :' -list_formats \
-print '---list_profiles :' -list_profiles out \
-print '---list_speeds :' -list_speeds
}
cat_var() {
# $1 = variable to put out with line feeds
cat <<+
$1
+
}
get_devices() {
# $1 = if not empty: device lines from xorriso -devices or -device_links
# $2 = if not empty: suppress dialog and use $2 as input
if test -n "$1"
then
DEVICES="$1"
else
DEVICES=$( ${priv_cmd} "$RELENG_XORRISO" $devices_opt 2>/dev/null | grep "\-dev")
fi
NUM_DEV=$(cat_var "$DEVICES" | wc -l)
case "${NUM_DEV}" in
0)
echo -e "\n${SELF}: No drives found."
exit 1
;;
1)
echo -e "\n${SELF}: 1 drive found:\n"
;;
*)
echo -e "\n${SELF}: ${NUM_DEV} drives found:\n"
;;
esac
echo =================================================================
echo "$DEVICES"
echo =================================================================
OUTDEV=$( cat_var "$DEVICES" | head -1 | \
sed -e "s/[0-9] *-dev '\//\//" -e "s/'.*$//" )
if test -n "$2"
then
x="$2"
else
echo >&2
echo "WARNING: The following tests might pull in the drive tray." >&2
echo " Best is if you now put in a suitable media and" >&2
echo " load it manually, so nobody gets surprised. :))" >&2
echo >&2
echo "Which drive to examine ? (Empty input = ${OUTDEV})" >&2
read x
fi
if test -n "$x"
then
OUTDEV="$x"
fi
get_speeds "$OUTDEV"
}
# main
"$RELENG_XORRISO" -version
echo -e "\n${SELF}: Running: $RELENG_XORRISO $devices_opt ..."
devices=$( ${priv_cmd} "$RELENG_XORRISO" -report_about WARNING $devices_opt | grep "\-dev")
RET="$?"
if test "$SIMULATE_FAILURE" = 1
then
echo "===" >&2
echo "=== SIMULATING FAILURE BY OVERRIDING EXIT VALUE OF XORRISO" >&2
echo "===" >&2
echo "FAIL : ${SELF} : Simulated failure caused by option -f"
RET=1
fi
case ${RET} in
0)
get_devices "$devices" "$dev"
RET="$?"
if test "$RET" = 0
then :
else
echo "FAIL : ${SELF} : Device scan or single drive listing failed"
exit "$RET"
fi
;;
*)
boldify
echo -ne "\n${SELF}: ${priv_cmd} ${RELENG_XORRISO} $devices_opt returned ${RET}."
unboldify
echo -e "\n${SELF}: Already mounted?"
df -kh
exit 1
esac
exit 0

288
releng/manual_isojigdo Executable file
View File

@ -0,0 +1,288 @@
#!/bin/bash
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# Copyright 2011 George Danchev <danchev@spnet.net>
# Licensed under GNU GPL version 2 or later
set -e
not_in_releng_exit() {
printf "\nPlease execute the tests from releng directory.\n\n"
exit 1
}
. inc/releng_getopts.inc || not_in_releng_exit
print_specific_help() {
cat << HLP
Specific options:
none yet.
Overview:
Match the resulting ISO image representation
against the jigdo representation.
HLP
}
if test "$SPECIFIC_HELP" = 1; then
print_specific_help
exit 0
fi
if [ ! -x $RELENG_XORRISO ]; then
print_help
printf "\n${SELF}: -x absolute or relative path to binary to be run.\n\n"
exit 30
fi
# check data dir, if any and after checking -x xorriso
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use './${SELF} -c' to remove.\n"
exit 1
else
mkdir "${GEN_DATA_DIR}"
fi
TMP_DATA_DIR=releng_generated_data
IMG_EXTRACT_DIR=${GEN_DATA_DIR}/${SELF}_extracted_tree
RELENG_DIR="${IMG_EXTRACT_DIR}"
RELENG_ISOLINUX_BIN="isolinux/isolinux.bin"
RELENG_BOOT_CAT="isolinux/boot.cat"
RELENG_IMG=t1
RES=""
REMOTE_URL="http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd"
REMOTE_IMG="debian-testing-i386-netinst.iso"
# check for required items
if [ "${RELENG_XORRISO}" = "" -o "${RELENG_DIR}" = "" -o "${RELENG_IMG}" = "" ]; then
echo -e "\n${SELF}: xorriso_cmd IN_dir and OUT_image are required\n"
exit 2
fi
# All must be set at this point
printf "${SELF}: Config items:"
printf "\n\txorriso_cmd=${RELENG_XORRISO}\n\tIN_dir=${RELENG_DIR}\n\tOUT_image=${RELENG_IMG}.iso"
printf "\n\tIN_isolinux=${RELENG_ISOLINUX_BIN}\n\tOUT_bootcat=${RELENG_BOOT_CAT}\n"
RES="${RELENG_IMG}.iso ${RELENG_IMG}.new ${RELENG_IMG}.md5 ${RELENG_IMG}.jigdo ${RELENG_IMG}.template"
# xorriso version details, incl. underlying libraries
# "${RELENG_XORRISO}" -version
# check whether the binary support JTE
set +e
RETSTR_VER_JTE=`"${RELENG_XORRISO}" --version 2>/dev/null | grep "libjte * in use"`
RETCODE_VER_JTE="$?"
set -e
case ${RETCODE_VER_JTE} in
0)
printf "\n${SELF}: Found JTE support with ${RELENG_XORRISO} : ${RETSTR_VER_JTE}"
;;
*)
printf "\nFAIL : ${SELF} : Not found JTE support in ${RELENG_XORRISO}. Quit."
printf "\n${SELF}: JTE not supported with this xorriso build. Install jigit >=1.18 and rebuild."
printf "\n${SELF}: http://www.einval.com/~steve/software/JTE/\n"
cleanup
exit 4
;;
esac
# grab remote ISO image, to decompose
if [ ! -f "${TMP_DATA_DIR}"/"${REMOTE_IMG}" ]; then
printf "\n${SELF}: Downloading ${REMOTE_URL}/${REMOTE_IMG}\n"
if wget -V >/dev/null 2>&1
then
set +e
wget --no-check-certificate -T20 -t3 \
-O "${TMP_DATA_DIR}"/"${REMOTE_IMG}" "${REMOTE_URL}"/"${REMOTE_IMG}"
WGET_RET="$?"
set -e
elif fetch -T 20 -o "${TMP_DATA_DIR}"/"${REMOTE_IMG}" \
"${REMOTE_URL}"/"${REMOTE_IMG}"
then
WGET_RET=0
else
echo
echo "FAIL: ${SELF} : Neither wget nor fetch are present and willing to work"
cleanup
exit 10
fi
case ${WGET_RET} in
0)
echo -e "\n${SELF}: Downloading successfully completed.\n"
;;
*)
echo -e "\nFAIL : ${SELF} : wget returned code: $WGET_RET\n"
rm "${TMP_DATA_DIR}"/"${REMOTE_IMG}"
cleanup
exit 5
;;
esac
else
printf "\n${SELF}: Found ISO image: ${TMP_DATA_DIR}/${REMOTE_IMG}\n"
fi
# check for extraction directory existence
if [ -d "${IMG_EXTRACT_DIR}" ]; then
printf "\n${SELF}: Found ${IMG_EXTRACT_DIR}. Please cleanup.\n"
cleanup
exit 6
else
mkdir "${IMG_EXTRACT_DIR}"
fi
# extract image content
CMD_EXTRACT="${RELENG_XORRISO} -indev ${TMP_DATA_DIR}/${REMOTE_IMG} \
-osirrox on:auto_chmod_on \
-extract / ${IMG_EXTRACT_DIR} \
"
# TODO: drop set +e|-e block, catch exit code instead when
# the boot catalog warnings get completely resolved.
echo -e "${SELF}: Extracting ISO image:\n${CMD_EXTRACT}\n"
set +e
${CMD_EXTRACT}
set -e
# grab an MBR
ISOHYBRID_MBR="${GEN_DATA_DIR}/isohybrid.mbr"
dd if="${TMP_DATA_DIR}/${REMOTE_IMG}" bs=1K count=32 of="${ISOHYBRID_MBR}"
# create FAT partition
APPEND_PART="${GEN_DATA_DIR}/fatpart.fat"
MKFS_MSDOS="/sbin/mkfs.msdos"
if [ -x "${MKFS_MSDOS}" ]; then
"${MKFS_MSDOS}" -n Bla -C "${APPEND_PART}" 8192
APPEND_PART_CMD="-append_partition 2 0x01 ${APPEND_PART}"
else
APPEND_PART_CMD=
# printf "\nFAIL : ${SELF} : Not found: ${MKFS_MSDOS}"
# printf "\n${SELF}: Not found: "${MKFS_MSDOS}". Install dosfstools."
# printf "\n${SELF}: http://www.daniel-baumann.ch/software/dosfstools/\n"
# cleanup
# exit 7
fi
# GENERAL section
CMD="${RELENG_XORRISO} \
-as mkisofs \
-quiet \
-o ${GEN_DATA_DIR}/${RELENG_IMG}.iso \
-R \
-V ISOJIGDO \
-partition_offset 16 \
-J -joliet-long \
"
# BOOT section
if [ -f "${IMG_EXTRACT_DIR}"/"${RELENG_ISOLINUX_BIN}" -a -f "${ISOHYBRID_MBR}" ]
then
CMD="$CMD \
-b ${RELENG_ISOLINUX_BIN} \
-c ${RELENG_BOOT_CAT} \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr ${ISOHYBRID_MBR} \
-partition_offset 16 \
"
else
printf "\n${SELF}: FAIL to compose the boot section.\n"
cleanup
exit 8
fi
if [ -n "${APPEND_PART_CMD}" -a -f "${APPEND_PART}" ]; then
CMD="$CMD \
${APPEND_PART_CMD}
"
fi
# JIGDO section
JIGDO_JIGDO=${GEN_DATA_DIR}/${RELENG_IMG}.jigdo
JIGDO_TEMPLATE=${GEN_DATA_DIR}/${RELENG_IMG}.template
JIGDO_MAP_RHV=$(cd ${RELENG_DIR} 2>/dev/null && pwd)
JIGDO_MAP="Debian=${JIGDO_MAP_RHV}/"
# create jigdo MD5 list in base64 format
JIGDO_GEN_MD5=${GEN_DATA_DIR}/${RELENG_IMG}.md5
printf "${SELF}: Creating MD5 list in hex format in ${JIGDO_GEN_MD5}..."
set +e
./jigdo-gen-md5-list ${RELENG_DIR} > ${JIGDO_GEN_MD5}
ret=$?
set -e
if test "$ret" = 0
then
printf "Done.\n"
else
printf "\nFAIL : ${SELF}: ./jigdo-gen-md5-list returns $ret"
cleanup
exit 9
fi
CMD="$CMD \
-jigdo-template-compress gzip \
-checksum_algorithm_iso md5,sha1,sha256,sha512 \
-checksum_algorithm_template md5,sha1,sha256,sha512 \
-jigdo-jigdo ${JIGDO_JIGDO} \
-jigdo-template ${JIGDO_TEMPLATE} \
-jigdo-map ${JIGDO_MAP} \
-md5-list ${JIGDO_GEN_MD5} \
-jigdo-min-file-size 1024 \
"
CMD="$CMD ${RELENG_DIR}"
# Run the whole compound command
echo -e "${SELF}: Creating ISO and jigdo representations:\n$CMD\n"
${CMD}
# Create another imange this time from jigdo files
if which jigit-mkimage >/dev/null 2>&1; then
printf "${SELF}: Creating new ISO from jigdo files..."
jigit-mkimage \
-t ${JIGDO_TEMPLATE} \
-j ${JIGDO_JIGDO} \
-m ${JIGDO_MAP} \
-o ${GEN_DATA_DIR}/${RELENG_IMG}.new
printf "Done.\n"
else
printf "\n${SELF}: Not found: jigit-mkimage. Install jigit."
printf "\n${SELF}: http://www.einval.com/~steve/software/JTE/\n"
cleanup
exit 10
fi
# trap the exit code of diff and let the Universe explode
diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new
DIFF_RET="$?"
case ${DIFF_RET} in
0)
echo -e "${SELF}: Match: diff ${GEN_DATA_DIR}/${RELENG_IMG}.iso ${GEN_DATA_DIR}/${RELENG_IMG}.new"
;;
*)
echo -e "FAIL : ${SELF} : diff returned code: $DIFF_RET\n"
;;
esac
# sort out the cruft
cleanup
# warn about downloaded image left behind
if [ -f "${TMP_DATA_DIR}"/"${REMOTE_IMG}" ]; then
printf "${SELF}: Leaving "
ls -sh "${TMP_DATA_DIR}"/"${REMOTE_IMG}"
fi
# last hints
if [ -d ${GEN_DATA_DIR} ]; then
printf "\n${SELF}: HINT: manual checks remained to be done:\n"
printf " * ${GEN_DATA_DIR}/${RELENG_IMG}.iso boots from USB stick and/or optical media.\n"
printf " * appended FAT partition is mountable.\n"
printf " * xorriso -indev ${GEN_DATA_DIR}/${RELENG_IMG}.iso -pvd_info\n"
printf " * fdisk -lu ${GEN_DATA_DIR}/${RELENG_IMG}.iso\n"
fi
exit 0

254
releng/run_all_auto Executable file
View File

@ -0,0 +1,254 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# Licensed under GNU GPL version 2 or later
set -e
export RELENG_SCRIPT_RUN_BY_RUN_ALL_AUTO=1
SELF=$(basename "$0")
GEN_DATA_DIR=releng_generated_data
CLOG=${GEN_DATA_DIR}/log.${SELF}
CLOG_PREV=${CLOG}.prev
PASSED_OPTIONS="$@"
RELENG_XORRISO=
CLEANUP_LOG=0
# It is not a good idea to include inc/releng_getopts.inc with the
# master script as it calls the subordinate scripts and they include
# this file too, and we want to avoid sharing variable with subshells
if [ ! -f inc/releng_getopts.inc ]; then
printf "\nPlease execute the tests from releng directory.\n\n"
exit 1
fi
# To catch the exit value of a command in a pipe
return_value_file="$GEN_DATA_DIR"/run_all_"$$"_return_value
return_wrapper()
{
cmd="$1"
shift 1
"$cmd" "$@"
RET="$?"
echo "$RET" >"$return_value_file"
return "$RET"
}
# Using only bash builtin commands.
# On 4 year old amd64 x2 3000 MHz, xterm local,it counts 22471 lines per second
# On 2 year old amd64 x4 2600 MHz, ssh remote, it counts 35348 lines per second
count_lines()
{
# $1 if not empty: start count
line=
if test -n "$1"
then
count="$1"
else
count=0
fi
while read line
do
count=$(($count + 1))
printf "\r %4d lines logged ... " "$count" >&2
printf "%s\n" "$line"
done
return 0
}
#############################################
print_usage()
{
cat << HLP
${SELF} runs executables from releng directory starting with auto_*,
and passing them its own options. stdout/stderr output is stored in:
./${CLOG} (last run) and
./${CLOG_PREV} (previous run)
Usage: ${SELF} -x path/to/xorriso [-k] [-c] [-h]
-x absolute or relative path to xorriso binary to be run.
-k keep self-generated data in ./${GEN_DATA_DIR}.
-c cleanup self-generated data kept from previous run and exit.
-h print this help text
Examples:
# run xorriso and keep the self-generated data
$ ./${SELF} -x path/to/xorriso -k
# clean up self-generated data from previous run
$ ./${SELF} -c
HLP
}
#############################################
if [ ! "${1}" ]; then
print_usage
exit 0
fi
next_is=
for i in "$@"
do
if test x"$i" = x"-h" -o x"$i" = x"--h" -o x"$i" = x"-help" -o x"$i" = x"--help"
then :
print_usage
exit 0
fi
if test "$next_is" = "ignore"
then :
elif test "$next_is" = "x"
then
RELENG_XORRISO="$i"
next_is=
elif test x"$i" = x"-x"
then
next_is="x"
elif test x"$i" = x"-c"
then
CLEANUP_LOG=1
fi
done
#############################################
if test "$next_is" = x
then
echo
echo "Option -x expects an argument (the path to the xorriso program)"
exit 31
fi
########################################################
if [ -f "${CLOG}" ]; then
mv "${CLOG}" "${CLOG_PREV}"
fi
> ${CLOG}
if [ -x "${RELENG_XORRISO}" ]; then
echo "_OVERVIEW_______________________________________________________________" >> ${CLOG}
date -u >> ${CLOG}
${RELENG_XORRISO} --version >> ${CLOG}
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ${CLOG}
fi
DSTART=`date -u`
echo "${SELF}: Started at ${DSTART}" | tee -a ${CLOG}
E1=`date '+%s'`
exit_value=0
# require ^auto_, avoid running (your)self explicitly
for s in `ls | grep ^auto_ | grep -v ${SELF} | sort -n`; do
if [ -x ${s} -a ! -d ${s} ]; then
echo >> ${CLOG}
echo >> ${CLOG}
echo "_STARTING_TEST_________________________________________________________" >> ${CLOG}
echo "${SELF}: Running ./${s} ${PASSED_OPTIONS} :" \
| tee -a ${CLOG}
T1=`date '+%s'`
set +e
if test -n "$PIPESTATUS"
then
# PIPESTATUS[0] should be available in bash
./${s} ${PASSED_OPTIONS} 2>&1 | count_lines >> ${CLOG}
RET="${PIPESTATUS[0]}"
else
# a more portable method which uses a temporary file to record exit value
return_wrapper ./${s} ${PASSED_OPTIONS} 2>&1 | count_lines >> ${CLOG}
RET=$(cat "$return_value_file")
rm "$return_value_file"
fi
# echo "RET='$RET'" >/dev/tty
T2=`date '+%s'`
TS=`expr ${T2} - ${T1}`
case ${RET} in
0)
echo "done in ${TS} sec. ok."
;;
*)
exit_value=2
printf "done in ${TS} sec. "
which tput >/dev/null 2>&1 && tput smso
printf "FAIL -> EXIT CODE $RET"
which tput >/dev/null 2>&1 && tput rmso
echo
;;
esac
set -e
fi
done
DEND=`date -u`
echo | tee -a ${CLOG}
echo -n "${SELF}: Stopped at ${DEND}." | tee -a ${CLOG}
if [ "${CLEANUP_LOG}" -eq 1 ]; then
if [ -f "${CLOG}" ]; then
rm -f "${CLOG}"
echo # | tee -a ${CLOG}
echo -n "${SELF}: Removed my own log ${CLOG}." # | tee -a ${CLOG}
fi
if [ -f "${CLOG_PREV}" ]; then
rm -f "${CLOG_PREV}"
echo # | tee -a ${CLOG}
echo "${SELF}: Removed my own log ${CLOG_PREV}." # | tee -a ${CLOG}
fi
else
E2=`date '+%s'`
if [ ${E2} -eq ${E1} ]; then
echo " Total elapsed 0 sec." | tee -a ${CLOG}
else
ES=`expr ${E2} - ${E1}`
echo " Total elapsed ${ES} sec." | tee -a ${CLOG}
fi
#####
echo >> ${CLOG}
echo "_SUMMARY________________________________________________________________" >> ${CLOG}
echo "${SELF}: Trivial log examination: ${CLOG}" | tee -a ${CLOG}
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" | tee -a ${CLOG}
# severity classes of libdax_msgs.h in libburn and libisofs
# List of boring keywords:
# 'UPDATE|NOTE|DEBUG|ALL' - not considered interesting for lazy log inspection.
# List of interesting keywords:
# thrown by xorriso and underlying libraries
LIST_KWD="NEVER|ABORT|FATAL|FAILURE|MISHAP|SORRY|WARNING|HINT"
# thrown by others
LIST_KWD="${LIST_KWD}|FAIL|ERROR|WRONG"
if [ -f "${CLOG}" ]; then
set +e
# lines, perl regex, leading tabs
grep -n -E "${LIST_KWD}" "${CLOG}"
RET_GREP="$?"
case ${RET_GREP} in
0) # found
;;
1) # not found
echo "${SELF}: Log file looks clear." # | tee -a ${CLOG}
;;
*) #
echo "${SELF}: grep returned EXIT CODE: ${RET_GREP}." # | tee -a ${CLOG}
;;
esac
set -e
fi
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" | tee -a ${CLOG}
##### TODO: work out a less noisy diff'ing technique!
if [ -f "${CLOG_PREV}" -a -f "${CLOG}" ]; then
echo "${SELF}: See diff against previous log file (might be long):" | tee -a ${CLOG}
echo "diff -Naur ${CLOG_PREV} ${CLOG} | less" | tee -a ${CLOG}
fi
fi
#
which tput >/dev/null 2>&1 && tput smso
echo # | tee -a ${CLOG}
echo "${SELF}: Leaving the following cruft in ${GEN_DATA_DIR}:" # | tee -a ${CLOG}
which tput >/dev/null 2>&1 && tput rmso
ls -lth "${GEN_DATA_DIR}" # | tee -a ${CLOG}
# Fin
exit $exit_value

135
releng/template_new Executable file
View File

@ -0,0 +1,135 @@
#!/bin/bash
# Copyright 2011 George Danchev <danchev@spnet.net>
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net>
# === TEMPLATE: Add your own copyright here
#
# Licensed under GNU GPL version 2 or later
# === TEMPLATE: Remove this remark before releasing this script.
#
# This is a template for creating a new libisoburn/releng test.
# It is supposed that you have read releng/README before you begin to work
# here.
#
# Step 1: Invent a name for your test
# test_name="manual_"...some.name...
# or
# test_name="auto_"...some.name...
#
# Step 2: Copy releng/template_new to $test_name
#
# Step 3: Edit $test_name and process any line that begins by
# "# === TEMPLATE:". Do what the line prescribes and then remove it
# from the script. You are not done as long as such a line remains.
#
# === TEMPLATE: End of remark to remove
set -e
# === TEMPLATE: Describe your own specific options (if any) and the test
print_specific_help() {
cat << HLP
Specific options:
--option Explanation of specific option
Overview:
Short explanation of test purpose and activities.
HLP
}
getopts_inc=inc/releng_getopts.inc
if test -e "$getopts_inc"
then
. "$getopts_inc"
if test "$SPECIFIC_HELP" = 1
then
print_specific_help
exit 0
fi
else
echo >&2
echo "File not found: $getopts_inc" >&2
echo "Are we in the ./releng directory of a libisoburn SVN checkout ?" >&2
echo "(Please execute the tests from that ./releng directory.)" >&2
echo >&2
exit 29
fi
# === TEMPLATE: Decide whether the test will have own options,
# === TEMPLATE: apart from those interpreted by inc/releng_getopts.inc
# === TEMPLATE: If not, then remove this interpreter code.
# Set default values for specific option variables. E.g.:
# dev=
# Interpret specific options, they begin after the first --.
next_is=ignore
for i in "$@"
do
if test "$next_is" = "ignore"
then
if test "$i" = "--"
then
next_is=""
fi
# === TEMPLATE: Implement interpretation of specific options. Like:
# elif test "$next_is" = "dev"
# then
# dev="$i"
# next_is=""
# elif test "$i" = "--dev"
# then
# next_is="dev"
else
echo >&2
echo "Unknown test specific option: $i" >&2
print_help
print_specific_help
exit 31
fi
done
# === TEMPLATE: End of own option interpreter code.
# Each test should decide whether or not it needs
# a xorriso binary to test, since some do compilations only.
# === TEMPLATE: Decide whether you need a xorriso program.
# === TEMPLATE: If not, then remove this function call
check_for_xorriso -x
# check data dir, if any and after checking -x xorriso
# === TEMPLATE: Decide whether your test will possibly create own files.
# === TEMPLATE: If yes, then create your files underneath ${GEN_DATA_DIR}.
# === TEMPLATE: The name in this variable is set by inc/releng_getopts.inc .
# === TEMPLATE: If not, then remove this if ... fi statement.
if [ -d "${GEN_DATA_DIR}" ]; then
printf "\n${SELF}: directory %s exists!" ${GEN_DATA_DIR}
printf "\n${SELF}: use '${SELF} -c' to remove.\n"
exit 30
else
mkdir "${GEN_DATA_DIR}"
fi
#####################################################################
# === TEMPLATE: Perform your test activities here.
# === TEMPLATE: In case of failure, issue a line to stdout that begins by
# === TEMPLATE: the word "FAIL", and make sure that the test script finally
# === TEMPLATE: returns a non-zero exit value.
# === TEMPLATE: 31 = Unknown option or unusable argument with known option
# === TEMPLATE: 30 = Unexpected state of own directory for self generated files
# === TEMPLATE: 29 = Not in ./releng directory or missing essential parts
# === TEMPLATE: 1 to 28 = test specific exit values
# === TEMPLATE: When exiting prematurely, make sure to call cleanup.
cleanup
exit 0

View File

@ -5,14 +5,18 @@
To compare tree /media/dvd and /original/dir :
find /media/dvd -exec compare_file '{}' /media/dvd /original/dir ';'
Copyright 2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2008 - 2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2.
Provided under GPL version 2 or later.
cc -g -o compare_file compare_file.c
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
@ -22,6 +26,68 @@
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <time.h>
/* @param flag bit0= single letters */
char *Ftypetxt(mode_t st_mode, int flag)
{
if(flag&1)
goto single_letters;
if(S_ISDIR(st_mode))
return("directory");
else if(S_ISREG(st_mode))
return("regular_file");
else if(S_ISLNK(st_mode))
return("symbolic_link");
else if(S_ISBLK(st_mode))
return("block_device");
else if(S_ISCHR(st_mode))
return("char_device");
else if(S_ISFIFO(st_mode))
return("name_pipe");
else if(S_ISSOCK(st_mode))
return("unix_socket");
return("unknown");
single_letters:;
if(S_ISDIR(st_mode))
return("d");
else if(S_ISREG(st_mode))
return("-");
else if(S_ISLNK(st_mode))
return("l");
else if(S_ISBLK(st_mode))
return("b");
else if(S_ISCHR(st_mode))
return("c");
else if(S_ISFIFO(st_mode))
return("p");
else if(S_ISSOCK(st_mode))
return("s");
return("?");
}
char *Ftimetxt(time_t t, char timetext[40], int flag)
{
char *rpt;
struct tm tms, *tmpt;
static char months[12][4]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
tmpt= localtime_r(&t, &tms);
rpt= timetext;
rpt[0]= 0;
if(tmpt==0)
sprintf(rpt+strlen(rpt), "%12.f", (double) t);
else if(time(NULL)-t < 180*86400 && time(NULL)-t >= 0)
sprintf(rpt+strlen(rpt), "%3s %2d %2.2d:%2.2d",
months[tms.tm_mon], tms.tm_mday, tms.tm_hour, tms.tm_min);
else
sprintf(rpt+strlen(rpt), "%3s %2d %4.4d",
months[tms.tm_mon], tms.tm_mday, 1900+tms.tm_year);
return(timetext);
}
/* @param flag bit0= compare atime
@ -31,7 +97,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
{
struct stat s1, s2;
int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done;
char buf1[4096], buf2[4096], a[4096];
char buf1[4096], buf2[4096], a[4096], ttx1[40], ttx2[40];
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
ret= lstat(adr1, &s1);
@ -39,22 +105,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
printf("? %s : cannot lstat() : %s\n", adr1, strerror(errno));
return(0);
}
if(S_ISDIR(s1.st_mode))
strcpy(a, "d");
else if(S_ISREG(s1.st_mode))
strcpy(a, "-");
else if(S_ISLNK(s1.st_mode))
strcpy(a, "l");
else if(S_ISBLK(s1.st_mode))
strcpy(a, "b");
else if(S_ISCHR(s1.st_mode))
strcpy(a, "c");
else if(S_ISFIFO(s1.st_mode))
strcpy(a, "p");
else if(S_ISSOCK(s1.st_mode))
strcpy(a, "s");
else
strcpy(a, "?");
strcpy(a, Ftypetxt(s1.st_mode, 1));
strcat(a, " ");
if(adrc[0])
strcat(a, adrc);
@ -69,51 +120,66 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
/* Attributes */
if(s1.st_mode != s2.st_mode) {
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
printf("%s : st_mode : %7.7o <> %7.7o\n", a,
(unsigned int) (s1.st_mode & ~S_IFMT),
(unsigned int) (s2.st_mode & ~S_IFMT));
if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
printf("%s : type : %s <> %s\n",
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
differs= 1;
}
if(s1.st_uid != s2.st_uid) {
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
printf("%s : st_uid : %lu <> %lu\n",
a, (unsigned long) s1.st_uid, (unsigned long) s2.st_uid);
differs= 1;
}
if(s1.st_gid != s2.st_gid) {
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
printf("%s : st_gid : %lu <> %lu\n",
a, (unsigned long) s1.st_gid, (unsigned long) s2.st_gid);
differs= 1;
}
if((S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode)) ||
(S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode))) {
if(s1.st_rdev != s2.st_rdev) {
printf("%s : %s st_rdev : %lu <> %lu\n", a,
printf("%s : %s st_rdev : %lu <> %lu\n", a,
(S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"),
(unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev);
differs= 1;
}
}
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
printf("%s : st_size : %.f <> %.f\n",
a, (double) s1.st_size, (double) s2.st_size);
printf("%s : st_size : %.f <> %.f diff= %.f\n",
a, (double) s1.st_size, (double) s2.st_size,
((double) s1.st_size) - (double) s2.st_size);
differs= 1;
}
if(s1.st_mtime != s2.st_mtime) {
printf("%s : st_mtime : %u <> %u\n",
a, (unsigned int) s1.st_mtime, (unsigned int) s2.st_mtime);
printf("%s : st_mtime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_mtime, ttx1, 0),
Ftimetxt(s2.st_mtime, ttx2, 0),
((double) s1.st_mtime) - (double) s2.st_mtime);
differs= 1;
}
if(flag&1) {
if(s1.st_atime != s2.st_atime) {
printf("%s : st_atime : %u <> %u\n",
a, (unsigned int) s1.st_atime, (unsigned int) s2.st_atime);
printf("%s : st_atime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_atime, ttx1, 0),
Ftimetxt(s2.st_atime, ttx2, 0),
((double) s1.st_atime) - (double) s2.st_atime);
differs= 1;
}
}
if(flag&2) {
if(s1.st_ctime != s2.st_ctime) {
printf("%s : st_ctime : %u <> %u\n",
a, (unsigned int) s1.st_ctime, (unsigned int) s2.st_ctime);
printf("%s : st_ctime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_ctime, ttx1, 0),
Ftimetxt(s2.st_ctime, ttx2, 0),
((double) s1.st_ctime) - (double) s2.st_ctime);
differs= 1;
}
}
if(S_ISREG(s1.st_mode)) {
if(S_ISREG(s1.st_mode) && S_ISREG(s2.st_mode)) {
fd1= open(adr1, O_RDONLY);
if(fd1==-1) {
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
@ -169,7 +235,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
if(diffcount>0 || r1count!=r2count) {
if(first_diff<0)
first_diff= (r1count>r2count ? r2count : r1count);
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
(s1.st_mtime==s2.st_mtime ? "CONTENT":"content"),
(double) (diffcount + abs(r1count-r2count)), (double) first_diff);
differs= 1;
@ -188,6 +254,12 @@ int main(int argc, char **argv)
int ret, i, with_ctime= 1;
char adr1[4096], adr2[4096], adrc[4096];
if(sizeof(off_t) < 8) {
fprintf(stderr,
"%s : FATAL : Compile time misconfiguration. sizeof(off_t) too small.\n\n",
argv[0]);
exit(4);
}
if(argc<4) {
fprintf(stderr, "usage: %s path prefix1 prefix2\n", argv[0]);
exit(2);
@ -197,7 +269,7 @@ int main(int argc, char **argv)
with_ctime= 0;
else {
fprintf(stderr, "%s : Option not recognized: '%s'\n", argv[0], argv[i]);
exit(1);
exit(2);
}
}
@ -208,7 +280,8 @@ int main(int argc, char **argv)
}
strcpy(adr1, argv[1]);
strcpy(adrc, argv[1]+strlen(argv[2]));
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
sprintf(adr2, "%s%s%s",
argv[3], (adrc[0]=='/' || adrc[0]==0 ? "" : "/"), adrc);
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
exit(ret<=0);

View File

@ -0,0 +1,15 @@
Derek Foreman
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.

674
xorriso/COPYING_gnu_xorriso Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@ -0,0 +1,34 @@
Derek Foreman <derek@signalmarketing.com>
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 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-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
or later as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

View File

@ -1,200 +0,0 @@
------------------------------------------------------------------------------
libburnia-project.org scdbackup.sourceforge.net/xorriso_eng.html
------------------------------------------------------------------------------
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.1.0.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
xorriso is a program which maps file objects from POSIX compliant
filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
Currently it is only supported on Linux with kernels >= 2.4.
A special property of xorriso is that it needs neither an external ISO 9660
formatter program nor an external burn program for CD or DVD but rather
incorporates the libraries of libburnia-project.org .
By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..."
Compilation, First Glimpse, Installation
The most simple way to get xorriso is the xorriso standalone tarball.
Prerequisites:
The tarball contains anything that is needed except libc and libpthread.
libreadline and the libreadline-dev headers will make dialog mode
more convenient, but are not mandatory.
Obtain xorriso-0.1.0.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.1.0.tar.gz
cd xorriso-0.1.0
Within that directory execute:
./configure --prefix=/usr
make
This will produce a binary named
./xorriso/xorriso
which you may strip to reduce it in size
strip ./xorriso/xorriso
You may copy or move it to a directory where it can be found by the shell,
you may execute xorriso at the place where it was built, or you may execute
as superuser:
make install
For general concepts, options and usage examples see
man 1 xorriso
This man page is part of the tarball as
xorriso/xorriso.1
You may get a first glimpse by
man ./xorriso/xorriso.1
It gets installed with "make install" but may also be placed manually in the
./man1 directory below one of the directories mentioned in environment
variable $MANPATH.
Drives and Disk File Objects
The user of xorriso needs rw-permission for the CD burner device.
A list of rw-accessible drives can be obtained by
xorriso -devices
CD devices which offer no rw-permission are invisible to normal users.
The superuser should be able to see any usable drive and then set the
permissions as needed.
The output of xorriso -devices might look like
0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'
1 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'
Full and insecure enabling of both for everybody would look like
chmod a+rw /dev/sr0 /dev/hda
This is equivalent to the traditional setup chmod a+x,u+s cdrecord.
I strongly discourage to run xorriso with setuid root or via sudo !
It is not checked for the necessary degree of hacker safety.
Consider to put all authorized users into group "floppy", to chgrp the
device file to that group and to disallow w-access to others.
A possible source of problems are hald or other automounters.
If you can spot a process "hald-addon-storage" with the address of
your desired drive, then consider to kill it.
If you cannot get rid of the automounter that easily, try whether it helps
to always load the drive tray manually before starting a write run of
xorriso. Wait until the drive light is off.
Better try to unmount an eventually mounted media before a write run.
Besides true optical drives, xorriso can also address disk files as input or
output drives. The addresses of the disk files have to be preceded by "stdio:".
Like:
xorriso -dev stdio:/tmp/pseudo_drive ...more arguments...
Testing
We are quite sure that libisofs produces accurate representations of the disk
files. This opinion is founded on a lot of test burns and checks by a little
test program which compares files from the mounted image with the orignals
on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
This program is not installed systemwide but stays in the installation
directory of the xorriso tarball as test/compare_file . Usually it is
run as -exec payload of a find command. It demands at least three arguments:
The path of the first file to compare, the prefix1 to be cut off from path
and the prefix2 which gets prepended afterwards to obtain the path of the
second file to compare.
As further argument there can be -no_ctime which suppresses the comparison
of ctime date stamps.
The exit value is 0 if no difference was detected, non-0 else.
Example: After
xorriso ... -pathspecs on -add /=/original/dir --
mount /media/dvd
cd test
compare tree /media/dvd with tree /original/dir :
find /original/dir -exec ./compare_file '{}' /original/dir /media/dvd ';' \
| less
and vice versa:
find /media/dvd -exec ./compare_file '{}' /media/dvd /original/dir ';' \
| less
libisoburn
xorriso is based on libisofs which does ISO 9600 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.
libisoburn provides two services:
- Encapsulation of coordination between libisofs and libburn.
- Emulation of ISO 9660 multi-session on overwriteable media
or random access files.
The sourcecode of all three libraries is included in the xorriso standalone
tarball. It is compiled with xorriso and linked statically.
But you may as well get and install releases of libburn and libisofs, in order
to be able to install a release of libisoburn which produces libisoburn.so.1
and a matching dynamically linked xorriso binary.
This binary is leaner but depends on properly installed libraries of suitable
revision.
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
- libburn.so.4 , version libburn-0.4.2 or higher
- libisofs.so.6 , version libisofs-0.6.2 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.
Standalone xorriso has less runtime dependencies and can be moved more freely.
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
Based on and sub project of:
libburnia-project.org
By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components 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

495
xorriso/README_gnu_xorriso Normal file
View File

@ -0,0 +1,495 @@
------------------------------------------------------------------------------
Contribution of libburnia-project.org to the GNU Operating System
------------------------------------------------------------------------------
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
http://www.gnu.org/software/xorriso/xorriso-1.2.5.tar.gz
Provided under GPL version 3 or later. No warranty.
------------------------------------------------------------------------------
xorriso is a program which copies file objects from POSIX compliant
filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
A special property of xorriso is that it needs neither an external ISO 9660
formatter program nor an external burn program for CD or DVD but rather
incorporates the libraries of libburnia-project.org .
Currently it is fully supported on GNU/Linux with kernels >= 2.4,
on FreeBSD with ATAPI/CAM support enabled in the kernel, see atapicam(4),
and on OpenSolaris (tested with kernel 5.11).
On other X/Open compliant systems there will only be POSIX i/o with disk
file objects, but no direct MMC operation on CD/DVD/BD drives.
By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..."
Compilation, First Glimpse, Installation
The most simple way to get xorriso from source code is the GNU xorriso tarball.
Prerequisites:
The tarball contains everything that is needed except the following system
components:
libc, libpthread
plus on FreeBSD: libiconv, libcam, IDE and SATA drives need atapicam
Optional at compile time are:
libreadline and the readline-dev headers make dialog mode more convenient.
zlib and zlib-devel allow zisofs compression.
on GNU/Linux: libacl and libacl-devel allow getting and setting ACLs.
If they were present at compile time, then the optional libraries have to
be present at runtime, too.
Obtain xorriso-1.2.5.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-1.2.5.tar.gz
cd xorriso-1.2.5
Within that directory execute:
./configure --prefix=/usr
make
This will produce a binary named
./xorriso/xorriso
If you want xorriso to report a "Build timestamp" with its option -version :
make buildstamped
You may strip the binary to reduce it in size
strip ./xorriso/xorriso
You may copy or move it to a directory where it can be found by the shell,
or you may execute xorriso at the place where it was built,
or you may execute as superuser:
make install
For general concepts, options and usage examples see
info xorriso
info xorrisofs
info xorrecord
or
man 1 xorriso
man 1 xorrisofs
man 1 xorrecord
You may get a first glimpse by e.g.
info ./xorriso/xorriso.info
man ./xorriso/xorriso.1
The installation creates several alias links pointing to the xorriso binary:
xorrisofs starts xorriso with -as mkisofs emulation already enabled
xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying already enabled
If you want to avoid dependecy on libreadline although the libreadline
development package is installed, then rather build xorriso by:
./configure --prefix=/usr --disable-libreadline
make clean ; make
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() on Linux
resp. extattr_list_file() on FreeBSD
--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.
Alternatively it can use libcdio-0.83 or later for sending commands to
optical drives:
--enable-libcdio
xorriso allows to use external processes as file content filters. This is
a potential security risk which may be avoided by ./configure option
--disable-external-filters
By default the filter feature is disabled if effective user id and real
user id differ. This ban can be lifted by
--enable-external-filters-setuid
Sometimes xorriso will yield better write performance on GNU/Linux if 64 KB are
transmitted in each write operation rather than 32 KB. See option -dvd_obs .
64k can be made default at configure time by:
--enable-dvd-obs-64k
For xorriso -as cdrecord emulation only:
In some situations GNU/Linux may deliver a better write performance to drives
if the track input is read with O_DIRECT (see man 2 open). The included libburn
and the cdrecord emulation of xorriso can be told to use this peculiar read
mode by:
--enable-track-src-odirect
Linux only:
libburn tries to avoid a collision with udev's drive examination by waiting
0.1 seconds before opening the device file for a longer time, after udev
might have been alarmed by drive scanning activities.
The waiting time can be set at ./configure time with microsecond granularity.
E.g. 2 seconds:
CFLAGS="$CFLAGS -DLibburn_udev_wait_useC=2000000"
./configure ...options...
Waiting can be disabled by zero waiting time:
CFLAGS="$CFLAGS -DLibburn_udev_wait_useC=0"
Alternatively, libburn can try to be nice by opening the device file,
closing it immediately, waiting, and only then opening it for real:
CFLAGS="$CFLAGS -DLibburn_udev_extra_open_cyclE -DLibburn_udev_wait_useC=500000"
xorriso under control of a (GUI) frontend process
The dialog mode allows frontend programs to connect via pipes to the standard
input and output of xorriso. Several commands of xorriso help with receiving
and parsing of reply messages.
As a proof of concept, there is the Tcl/Tk script xorriso-tcltk which can
be launched by this shell command:
xorriso-tcltk
Or in the xorriso build directory, without installation of xorriso:
xorriso/xorriso -launch_frontend frontend/xorriso-tcltk --stdio --
In the running GUI, click with the rightmost mouse button on any GUI element
to get its particular help text.
See file frontend/README-tcltk for a short introduction.
See its Tcl code for getting an idea how this gets achieved.
Further there is the C program frontend/frontend_pipes_xorriso.c which
forks a xorriso process and shows the same communication gestures as
xorriso-tcltk.
In particular it connects to xorriso via two pipes, sends commands, waits
for all replies of a command, picks info out of the xorriso message sieve,
and parses reply message lines into words.
Drives and Disk File Objects
The user of libisoburn applications needs rw-permission for the CD/DVD/BD
drives which shall be used, even if only reading is intended.
A list of rw-accessible drives can be obtained by
xorriso -devices
CD devices which offer not enough permission are invisible to normal users.
The superuser should be able to see any usable drive and then set the
permissions as needed.
On Linux and FreeBSD, rw-permissions are needed.
On Solaris, the privilege "sys_devices" and r-permission are needed.
The output of xorriso -devices might look like
0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'
1 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'
On Linux, full and insecure enabling of both for everybody would look like
chmod a+rw /dev/sr0 /dev/hda
This is equivalent to the traditional setup chmod a+x,u+s cdrecord.
On FreeBSD, device permissions are to be set in /etc/devfs.rules.
On Solaris, pfexec privileges may be restricted to "basic,sys_devices".
See below "System Dependent Drive Permission Examples".
I strongly discourage to run xorriso with setuid root or via sudo !
It is not checked for the necessary degree of hacker safety.
Better consider to grant the necessary permissions to group "floppy"
and to add users to it.
A possible source of problems are hald or other automounters.
If you can spot a process "hald-addon-storage" with the address of
your desired drive, then consider to kill it.
A similar process "udisks-daemon: polling ..." can be seen on newer Linuxes.
On Debian GNU/Linux 6.0.2 amd64 there is
/lib/udev/rules.d/80-udisks.rules
where one can remove all CD drives ("sr*") from the list of automountable
devices:
KERNEL=="sd*|hd*|mmcblk*|mspblk*", ENV{UDISKS_PRESENTATION_NOPOLICY}="0"
# KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{UDISKS_PRESENTATION_NOPOLICY}="0"
Copying the recognition criterion from
/etc/udev/rules.d/70-persistent-cd.rules
one can prevent automounting a single drive, too:
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:11.0-scsi-2:0:0:0", ENV{UDISKS_PRESENTATION_NOPOLICY}:="1"
If you cannot get rid of the automounter, try whether it helps to always load
the drive tray manually before starting a write run of xorriso. Wait until the
drive light is off and the mounted media appears.
Then try to unmount the mounted media before a write run.
Besides true optical drives, xorriso can also address disk files as input or
output drives. By default paths to files under /dev are accepted only if the
device represents a real optical drive. Other device files may be addressed
by prepending "stdio:" to the path.
Like:
xorriso -dev stdio:/dev/sdb ...more arguments...
This rule may be changed by xorriso option -drive_class.
Prefix "mmc:" causes a path to be accepted only if it is a real optical drive
which is accessible by generic SCSI/MMC commands.
Testing
For automated and manual tests of xorriso's functionality see file
releng/README
Result comparison with self produced ISO images
We are quite sure that libisofs produces accurate representations of the disk
files. This opinion is founded on a lot of test burns and checks by a little
test program which compares files from the mounted image with the orignals
on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
This program is not installed systemwide but stays in the installation
directory of the xorriso tarball as test/compare_file . Usually it is
run as -exec payload of a find command. It demands at least three arguments:
The path of the first file to compare, the prefix1 to be cut off from path
and the prefix2 which gets prepended afterwards to obtain the path of the
second file to compare.
As further argument there can be -no_ctime which suppresses the comparison
of ctime date stamps.
The exit value is 0 if no difference was detected, non-0 else.
Example: After
xorriso ... -pathspecs on -add /=/original/dir -- -commit_eject all
mount /media/dvd
cd test
compare tree /media/dvd with tree /original/dir :
find /original/dir -exec ./compare_file '{}' /original/dir /media/dvd ';' \
| less
and vice versa:
find /media/dvd -exec ./compare_file '{}' /media/dvd /original/dir ';' \
| less
File Formats
Sector Maps
Sector maps describe the valid and invalid blocks on a media or a disk copy of
a media. xorriso creates and reads these file with its option -check_media.
The file begins with 32 bytes of cleartext of which the last one is a
newline character. The first 25 say "xorriso sector bitmap v2 ", the
remaining six characters give the size of the info text as decimal number.
This number of bytes follows the first 32 and will not be interpreted
by xorriso. They are rather to inform a human reader about the media type
and its track layout.
After the info text there are two 4 byte signed integers, most significant
byte first. The first one, N, gives the number of bits in the following bitmap
and the second number S gives the number of 2 KiB blocks governed by a single
bit in the map. Then come the bits in form of 8-bit bytes.
Data block M is covered by bit B=M/S in the map, bit number B is stored in
byte B/8 as bit B%8. A valid readable data block has its bit set to 1.
Checksum Tags
Checksum tags are data blocks inside an ISO 9660 image which do not belong to
any file but rather tell the MD5 of a certain range of data blocks.
The superblock checksum tag is written after the ECMA-119 volume descriptors.
The tree checksum tag is written after the ECMA-119 directory entries.
The session checksum tag is written after all payload including the checksum
array. (Then follows padding.)
The tags are single lines of printable text, padded by 0 bytes. They have
the following format:
Tag_id pos=# range_start=# range_size=# [session_start|next=#] md5=# self=#\n
Parameters md5= and self= are 32 digit hex, the others are decimal numbers.
Tag_id distinguishes the following tag types
"libisofs_rlsb32_checksum_tag_v1" Relocated 64 kB superblock tag
"libisofs_sb_checksum_tag_v1" Superblock tag
"libisofs_tree_checksum_tag_v1" Directory tree tag
"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+RW, BD-RE).
xorriso records the first session at LBA 32. A 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, 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
up to the last hex digit of md5=. range_start= tells the first block that is
covered by md5=, range_size= tells the number of blocks covered by md5=.
Relocated superblocks tell the block address of their session by session_start=.
Superblock and tree tag tell the block address of the next tag by next=.
The newline character at the end is mandatory.
libisoburn
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.
libisoburn provides several services:
- Encapsulation of coordination between libisofs and libburn.
- Emulation of ISO 9660 multi-session on overwriteable media
or random access files.
- Implementation of the xorriso API.
The sourcecode of all three libraries is included in the xorriso standalone
tarball. It is compiled with xorriso and linked statically.
But you may as well get and install releases of libburn and libisofs, in order
to be able to install a release of libisoburn which produces libisoburn.so.1
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-1.2.4 :
- libburn.so.4 , version libburn-1.2.4 or higher
- libisofs.so.6 , version libisofs-1.2.4 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.
GNU xorriso has less runtime dependencies and can be moved more freely.
System Dependent Drive Permission Examples
Accessing the optical drives requires privileges which usually are granted
only to the superuser. GNU/Linux, FreeBSD and Solaris offer quite different
approaches for avoiding the need for unrestricted privileges.
First check whether some friendly system setting already allows you to
access the drives as normal user:
xorriso -devices
Those drives of which you see address and type strings are already usable.
If there remain drives invisible which the superuser can see by the same
command, then the following examples might help:
---------------------
On all three systems:
---------------------
Add the authorized users of CD drives to group "floppy" in /etc/group.
If missing: create this group.
Changes to /etc/group often only affect new login sessions. So log out and in
before making the first tests.
-------------
On GNU/Linux:
-------------
Allow rw-access to the drives
chgrp floppy /dev/sr0 /dev/sr1
chmod g+rw /dev/sr0 /dev/sr1
It might be necessary to perform chgrp and chmod after each reboot or to
edit distro dependent device configuration files for permanent settings.
-----------
On FreeBSD:
-----------
Edit /etc/devfs.rules and make sure to have these lines
[localrules=10]
add path 'acd*' mode 0664 group floppy
add path 'cd*' mode 0664 group floppy
add path 'pass*' mode 0664 group floppy
add path 'xpt*' mode 0664 group floppy
[localrules=5]
add path 'pass*' mode 0664 group floppy
add path 'cd*' mode 0664 group floppy
add path 'xpt*' mode 0664 group floppy
add path 'acd*' mode 0664 group floppy
Edit /etc/rc.conf and add the following line if missing
devfs_system_ruleset="localrules"
This gets into effect by reboot or by command
/etc/rc.d/devfs start
-----------
On Solaris:
-----------
Run xorriso by
pfexec xorriso ...arguments...
The following settings will make pfexec keep original UID and EUID and prevent
most superuser powers. Be aware that you still can manipulate all device files
if you have the file permissions for that.
Full root privileges for xorriso can then be acquired only by command su.
Edit /etc/security/exec_attr and add this line to the other "Media Backup"
lines:
Media Backup:solaris:cmd:::/usr/local/bin/xorriso:privs=basic,sys_devices
Edit /etc/user_attr and add profile "Media Backup" to the user's line:
thomas::::profiles=Media Backup,Primary Administrator;roles=root
See also man privileges, man exec_attr, man user_attr.
Then allow the group r-access to the drives
pfexec chgrp floppy /dev/rdsk/c3t0d0s2 /dev/rdsk/c4t0d0s2
pfexec chmod g+r /dev/rdsk/c3t0d0s2 /dev/rdsk/c4t0d0s2
The last two commands have to be executed after each boot. I do not know
the relevant device configuration files yet.
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3 or later
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
GNU xorriso is feature-wise equivalent to the dynamic compilation of
libburnia libraries and libburnia program xorriso.
It restricts itself to a technical form where the legal commitments of the
libburnia project and the legal intentions of FSF match completely.
Libburnia project is committed to provide support for this copy in the same
way as for its own software releases. It is further committed to keep its
own licenses open for obtaining future copies under GPLv2+.
------------------------------------------------------------------------------
libburnia program xorriso is based on and sub project of:
libburnia-project.org
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-2012 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 - 2012 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
then you are entitled to modify this text under that same license.

1032
xorriso/aux_objects.c Normal file

File diff suppressed because it is too large Load Diff

186
xorriso/aux_objects.h Normal file
View File

@ -0,0 +1,186 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of classes:
- SplitparT which represents byte intervals of data files.
- DirseQ which crawls along a directory's content list.
- ExclusionS which manages the list of excluded file paths and
leaf patterns.
- Xorriso_lsT which provides a generic double-linked list.
- LinkiteM, PermiteM which temporarily record relations and states.
*/
#ifndef Xorriso_pvt_auxobj_includeD
#define Xorriso_pvt_auxobj_includeD yes
struct SplitparT;
int Splitparts_new(struct SplitparT **o, int count, int flag);
int Splitparts_destroy(struct SplitparT **o, int count, int flag);
int Splitparts_set(struct SplitparT *o, int idx,
char *name, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
int Splitparts_get(struct SplitparT *o, int idx, char **name, int *partno,
int *total_parts, off_t *offset, off_t *bytes,
off_t *total_bytes, int flag);
int Splitpart__parse(char *name, int *partno, int *total_parts,
off_t *offset, off_t *bytes, off_t *total_bytes, int flag);
int Splitpart__is_part_path(char *path, int flag);
int Splitpart__compose(char *adr, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
int Splitpart__read_next_num(char *base_pt, char **next_pt, off_t *num,
int flag);
int Splitparts_sort(struct SplitparT *o, int count, int flag);
struct DirseQ;
int Dirseq_new(struct DirseQ **o, char *adr, int flag);
int Dirseq_destroy(struct DirseQ **o, int flag);
int Dirseq_next_adr(struct DirseQ *o, char reply[SfileadrL], int flag);
int Dirseq_rewind(struct DirseQ *o, int flag);
struct Xorriso_lsT {
char *text;
struct Xorriso_lsT *prev,*next;
};
/** Create a new list item with arbitrary byte content.
@param lstring The newly created object or NULL on failure
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
bit2= attach data directly by pointer rather than by copying
@return <=0 error, 1 ok
*/
int Xorriso_lst_new_binary(struct Xorriso_lsT **lstring, char *data,
int data_len, struct Xorriso_lsT *link, int flag);
/** Create a new list item with a 0-terminated text as content.
@param lstring The newly created object or NULL on failure
@param text A 0-terminated array of bytes
@param link Xorriso_lsT object to which the new object shall be linked
@param flag see Xorriso_lst_new_binary
@return <=0 error, 1 ok
*/
int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
struct Xorriso_lsT *link, int flag);
/** Create a new list item at the end of a given list.
@param entry Contains as input a pointer to a pointer to any existing
list item. As output this list item pointer may be
changed to the address of the new list item:
if ((*entry == 0) || (flag & 1))
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param flag Bitfield for control purposes
bit0= Return new object address in *entry
bit1= do not copy data (e.g. because *data is invalid)
bit2= attach data directly by pointer rather than by copying
bit2= attach data directly by pointer rather than by copying
@return <=0 error, 1 ok
*/
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
char *data, int data_len, int flag);
/** Destroy a single list item and connect its eventual list neighbors.
@param lstring pointer to the pointer to be freed and set to NULL
@param flag unused yet, submit 0
@return 0= *lstring was alredy NULL, 1= ok
*/
int Xorriso_lst_destroy(struct Xorriso_lsT **lstring, int flag);
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
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 Xorriso_lst_concat(struct Xorriso_lsT *first, struct Xorriso_lsT *second,
int flag);
int Exclusions_new(struct ExclusionS **o, int flag);
int Exclusions_destroy(struct ExclusionS **o, int flag);
int Exclusions_get_descrs(struct ExclusionS *o,
struct Xorriso_lsT **not_paths_descr,
struct Xorriso_lsT **not_leafs_descr, int flag);
/* @param flag bit0= whole subtree is banned with -not_paths
@return 0=no match , 1=not_paths , 2=not_leafs, <0=error
*/
int Exclusions_match(struct ExclusionS *o, char *abs_path, int flag);
int Exclusions_add_not_leafs(struct ExclusionS *o, char *not_leafs_descr,
regex_t *re, int flag);
int Exclusions_add_not_paths(struct ExclusionS *o, int descrc, char **descrs,
int pathc, char **paths, int flag);
struct LinkiteM; /* Trace of hops during symbolic link resolution */
int Linkitem_new(struct LinkiteM **o, char *link_path, dev_t target_dev,
ino_t target_ino, struct LinkiteM *next, int flag);
int Linkitem_destroy(struct LinkiteM **o, int flag);
int Linkitem_reset_stack(struct LinkiteM **o, struct LinkiteM *to, int flag);
int Linkitem_find(struct LinkiteM *stack, dev_t target_dev, ino_t target_ino,
struct LinkiteM **result, int flag);
int Linkitem_get_link_count(struct LinkiteM *item, int flag);
struct PermiteM; /* Stack of temporarily altered access permissions */
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
int flag);
int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
struct XorrisO *xorriso, int flag);
#endif /* ! Xorriso_pvt_auxobj_includeD */

727
xorriso/base_obj.c Normal file
View File

@ -0,0 +1,727 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains functions which are needed to read data
from ISO image.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <errno.h>
#include <pthread.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"
#include "base_obj.h"
#include "lib_mgt.h"
/* See Xorriso__preset_signal_behavior() */
static int Xorriso_signal_behavioR= 1;
void Xorriso__version(int *major, int *minor, int *micro)
{
*major= Xorriso_header_version_majoR;
*minor= Xorriso_header_version_minoR;
*micro= Xorriso_header_version_micrO;
}
int Xorriso__is_compatible(int major, int minor, int micro, int flag)
{
int own_major, own_minor, own_micro;
Xorriso__version(&own_major, &own_minor, &own_micro);
return(own_major > major ||
(own_major == major && (own_minor > minor ||
(own_minor == minor && own_micro >= micro))));
}
char *Xorriso__get_patch_level_text(int flag)
{
return(Xorriso_program_patch_leveL);
}
/** The list of startup file names */
#define Xorriso_rc_nuM 4
static char Xorriso_sys_rc_nameS[Xorriso_rc_nuM][80]= {
"/etc/default/xorriso",
"/etc/opt/xorriso/rc",
"/etc/xorriso/xorriso.conf",
"placeholder for $HOME/.xorrisorc"
};
int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
{
int i, ret;
struct XorrisO *m;
char *leafname= NULL;
leafname= TSOB_FELD(char, SfileadrL);
if(leafname == NULL)
return(-1);
*xorriso= m= TSOB_FELD(struct XorrisO,1);
if(m==NULL) {
free(leafname);
return(-1);
}
m->libs_are_started= 0;
strncpy(m->progname,progname,sizeof(m->progname)-1);
m->progname[sizeof(m->progname)-1]= 0;
if(getcwd(m->initial_wdx,sizeof(m->initial_wdx)-1)==NULL)
m->initial_wdx[0]= 0;
m->no_rc= 0;
m->argument_emulation= 0;
m->rc_filename_count= Xorriso_rc_nuM;
for(i=0;i<m->rc_filename_count-1;i++)
strcpy(m->rc_filenames[i],Xorriso_sys_rc_nameS[i]);
m->rc_filenames[m->rc_filename_count-1][0]= 0;
m->arrange_args= 0;
m->mkisofsrc_done= 0;
m->wdi[0]= 0;
strcpy(m->wdx, m->initial_wdx);
m->did_something_useful= 0;
m->add_plainly= 0;
m->split_size= 0;
strcpy(m->list_delimiter, "--");
m->ino_behavior= 7;
m->iso_level= 3;
m->do_joliet= 0;
m->do_hfsplus= 0;
m->do_fat= 0;
m->do_rockridge= 1;
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->rr_reloc_dir[0]= 0;
m->rr_reloc_flags= 1;
m->untranslated_name_len= 0;
m->do_follow_pattern= 1;
m->do_follow_param= 0;
m->do_follow_links= 0;
m->follow_link_limit= 100;
m->do_follow_mount= 1;
m->do_global_uid= 0;
m->global_uid= 0;
strcpy(m->volid, "ISOIMAGE");
m->volid_default= 1;
m->loaded_volid[0]= 0;
m->assert_volid[0]= 0;
m->assert_volid_sev[0]= 0;
m->preparer_id[0]= 0;
m->publisher[0]= 0;
m->application_id[0]= 0;
m->system_id[0]= 0;
m->volset_id[0]= 0;
m->copyright_file[0]= 0;
m->biblio_file[0]= 0;
m->abstract_file[0]= 0;
m->session_logfile[0]= 0;
m->session_lba= -1;
m->session_blocks= 0;
m->do_global_gid= 0;
m->global_gid= 0;
m->do_global_mode= 0;
m->global_dir_mode= 0555;
m->global_file_mode= 0444;
m->do_tao= 0;
m->filters= NULL;
m->filter_list_closed= 0;
m->zlib_level_default= m->zlib_level= 6;
m->zisofs_block_size= m->zisofs_block_size_default= (1 << 15);
m->zisofs_by_magic= 0;
m->do_overwrite= 2;
m->do_reassure= 0;
m->drive_blacklist= NULL;
m->drive_greylist= NULL;
m->drive_whitelist= NULL;
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->cache_num_tiles= 0;
m->cache_tile_blocks= 0;
m->cache_default= 1 | 2;
m->do_calm_drive= 1;
m->indev[0]= 0;
m->in_drive_handle= NULL;
m->in_volset_handle= NULL;
m->in_charset= NULL;
m->isofs_st_out= time(0) - 1;
m->indev_is_exclusive= 1;
m->indev_off_adr[0]= 0;
m->isofs_st_in= 0;
m->volset_change_pending= 0;
m->no_volset_present= 0;
m->in_sector_map= NULL;
m->check_media_default= NULL;
m->check_media_bad_limit= Xorriso_read_quality_invaliD;
m->outdev[0]= 0;
m->out_drive_handle= NULL;
m->out_charset= NULL;
m->dev_fd_1= -1;
m->outdev_is_exclusive= 1;
m->outdev_off_adr[0]= 0;
m->grow_blindly_msc2= -1;
m->ban_stdio_write= 0;
m->do_dummy= 0;
m->do_close= 0;
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;
m->stdio_sync= 0;
m->keep_boot_image= 0;
m->boot_image_cat_path[0]= 0;
m->boot_image_cat_hidden= 0;
m->boot_count= 0;
m->boot_platform_id= 0x00; /* El Torito Boot Catalog Platform ID: 0 = 80x86 */
m->patch_isolinux_image= 0;
m->boot_image_bin_path[0]= 0;
m->boot_image_bin_form[0]= 0;
m->boot_image_emul= 0;
m->boot_image_load_size= 4 * 512; /* hearsay out of libisofs/demo/iso.c */
memset(m->boot_id_string, 0, sizeof(m->boot_id_string));
memset(m->boot_selection_crit, 0, sizeof(m->boot_selection_crit));
#ifdef Xorriso_with_isohybriD
m->boot_image_isohybrid= 1;
#else
m->boot_image_isohybrid= 0;
#endif
m->boot_efi_default= 0;
m->system_area_disk_path[0]= 0;
m->system_area_options= 0;
m->patch_system_area= 0;
m->partition_offset= 0;
m->partition_secs_per_head= 0;
m->partition_heads_per_cyl= 0;
m->prep_partition[0]= 0;
m->efi_boot_partition[0]= 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;
memset(m->hfsp_serial_number, 0, 8);
m->hfsp_block_size= 0;
m->apm_block_size= 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;
m->allow_restore= 0;
m->do_concat_split= 1;
m->do_auto_chmod= 0;
m->do_restore_sort_lba= 0;
m->do_strict_acl= 0;
m->dialog= 0;
m->bsl_interpretation= 0;
m->search_mode= 0;
m->structured_search= 1;
m->do_iso_rr_pattern= 1;
m->do_disk_pattern= 2;
m->temp_mem_limit= 16*1024*1024;
m->file_size_limit= Xorriso_default_file_size_limiT;
m->disk_exclusions= NULL;
m->iso_rr_hidings= NULL;
m->joliet_hidings= NULL;
m->hfsplus_hidings= NULL;
m->disk_excl_mode= 1;
m->use_stdin= 0;
m->result_page_length= 0;
m->result_page_width= 80;
m->mark_text[0]= 0;
m->packet_output= 0;
for(i=0; i<4; i++) {
m->logfile[i][0]= 0;
m->logfile_fp[i]= NULL;
}
m->pktlog_fp= NULL;
m->stderr_fp= NULL;
for(i= 0; i < Xorriso_max_outlist_stacK; i++) {
m->result_msglists[i]= NULL;
m->info_msglists[i]= NULL;
m->msglist_flags[i]= 0;
}
m->lib_msg_queue_lock_ini= 0;
m->result_msglists_lock_ini= 0;
m->write_to_channel_lock_ini= 0;
m->msg_watcher_lock_ini= 0;
m->msg_watcher_state= 0;
m->msgw_result_handler= NULL;
m->msgw_result_handle= NULL;
m->msgw_info_handler= NULL;
m->msgw_info_handle= NULL;
m->msgw_stack_handle= -1;
m->msgw_msg_pending= 0;
m->msgw_fetch_lock_ini= 0;
m->msg_sieve= NULL;
m->msg_sieve_disabled= 0;
m->msglist_stackfill= 0;
m->status_history_max= Xorriso_status_history_maX;
m->scsi_log= 0;
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,"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_lock_ini= 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= 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);
m->return_with_value= 32;
m->eternal_problem_status= 0;
m->eternal_problem_status_text[0]= 0;
m->re= NULL;
/* >>> ??? how to initialize m->match[0] ? */
m->re_constants= NULL;
m->re_count= 0;
m->re_fill= 0;
m->reg_expr[0]= 0;
m->run_state= 0;
m->is_dialog= 0;
m->bar_is_fresh= 0;
m->pending_option[0]= 0;
m->request_to_abort= 0;
m->request_not_to_ask= 0;
m->idle_time= 0.0;
m->re_failed_at= -1;
m->prepended_wd= 0;
m->insert_count= 0;
m->insert_bytes= 0;
m->error_count= 0;
m->launch_frontend_banned= 0;
m->pacifier_style= 0;
m->pacifier_interval= 1.0;
m->pacifier_count= 0;
m->pacifier_prev_count= 0;
m->pacifier_total= 0;
m->pacifier_byte_count= 0;
m->pacifier_fifo= NULL;
m->start_time= 0.0;
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;
m->node_array= NULL;
m->node_disk_prefixes= NULL;
m->node_img_prefixes= NULL;
m->hln_count= 0;
m->hln_array= NULL;
m->hln_targets= NULL;
m->hln_change_pending= 0;
m->di_do_widen= NULL;
m->di_disk_paths= NULL;
m->di_iso_paths= NULL;
m->node_targets_availmem= 0;
m->di_count= 0;
m->di_array= NULL;
m->perm_stack= NULL;
m->update_flags= 0;
m->result_line[0]= 0;
m->result_line_counter= 0;
m->result_page_counter= 0;
m->result_open_line_len= 0;
m->info_text[0]= 0;
ret= Sfile_leafname(progname, leafname, 0);
if(ret<=0)
goto failure;
if(strcmp(leafname, "osirrox")==0) {
m->allow_restore= 1;
m->drives_exclusive= 0;
} else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==0 ||
strcmp(leafname, "mkisofs")==0 || strcmp(leafname, "genisoimage")==0) {
m->argument_emulation= 1;
m->pacifier_style= 1;
Xorriso_protect_stdout(*xorriso, 0);
} else if(strcmp(leafname, "xorrecord")==0 || strcmp(leafname, "wodim")==0 ||
strcmp(leafname, "cdrecord")==0 || strcmp(leafname, "cdrskin")==0) {
m->argument_emulation= 2;
m->pacifier_style= 2;
}
ret= Exclusions_new(&(m->disk_exclusions), 0);
if(ret<=0)
goto failure;
ret= Exclusions_new(&(m->iso_rr_hidings), 0);
if(ret<=0)
goto failure;
ret= Exclusions_new(&(m->joliet_hidings), 0);
if(ret<=0)
goto failure;
ret= Exclusions_new(&(m->hfsplus_hidings), 0);
if(ret<=0)
goto failure;
Xorriso_relax_compliance(m, "default", 0);
ret= Xorriso_lst_new(&(m->drive_greylist), "/dev", m->drive_greylist, 1);
if(ret <= 0)
goto failure;
Xorriso_preparer_string(m, m->preparer_id, 1); /* avoids library calls */
ret= pthread_mutex_init(&(m->lib_msg_queue_lock), NULL);
if(ret != 0)
goto failure;
m->lib_msg_queue_lock_ini= 1;
ret= pthread_mutex_init(&(m->result_msglists_lock), NULL);
if(ret != 0)
goto failure;
m->result_msglists_lock_ini= 1;
ret= pthread_mutex_init(&(m->write_to_channel_lock), NULL);
if(ret != 0)
goto failure;
m->result_msglists_lock_ini= 1;
ret= pthread_mutex_init(&(m->problem_status_lock), NULL);
if(ret != 0)
goto failure;
m->problem_status_lock_ini= 1;
ret= pthread_mutex_init(&(m->msg_watcher_lock), NULL);
if(ret != 0)
goto failure;
m->msg_watcher_lock_ini= 1;
ret= pthread_mutex_init(&(m->msgw_fetch_lock), NULL);
if(ret != 0)
goto failure;
m->msgw_fetch_lock_ini= 1;
if(leafname != NULL)
free(leafname);
return(1);
failure:;
Xorriso_destroy(xorriso, 0);
if(leafname != NULL)
free(leafname);
return(-1);
}
int Xorriso_destroy_re(struct XorrisO *m, int flag)
{
int i;
if(m->re!=NULL) {
for(i=0;i<m->re_fill;i++) {
if(m->re_constants!=NULL)
if(m->re_constants[i]!=NULL)
continue; /* ,->re[i] was never subject to regcomp() */
regfree(&(m->re[i]));
}
free((char *) m->re);
m->re= NULL;
}
if(m->re_constants!=NULL) {
for(i=0;i<m->re_fill;i++)
if(m->re_constants[i]!=NULL)
free(m->re_constants[i]);
free((char *) m->re_constants);
m->re_constants= NULL;
}
m->re_count= 0;
m->re_fill= 0;
return(1);
}
/* @param flag bit0= global shutdown of libraries */
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)
free(m->out_charset);
Xorriso_destroy_re(m,0);
Exclusions_destroy(&(m->disk_exclusions), 0);
Exclusions_destroy(&(m->iso_rr_hidings), 0);
Exclusions_destroy(&(m->joliet_hidings), 0);
Exclusions_destroy(&(m->hfsplus_hidings), 0);
Xorriso_destroy_all_extf(m, 0);
Xorriso_lst_destroy_all(&(m->drive_blacklist), 0);
Xorriso_lst_destroy_all(&(m->drive_greylist), 0);
Xorriso_lst_destroy_all(&(m->drive_whitelist), 0);
Xorriso_destroy_node_array(m, 0);
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);
if(m->lib_msg_queue_lock_ini)
pthread_mutex_destroy(&(m->lib_msg_queue_lock));
if(m->result_msglists_lock_ini)
pthread_mutex_destroy(&(m->result_msglists_lock));
if(m->write_to_channel_lock_ini)
pthread_mutex_destroy(&(m->write_to_channel_lock));
if(m->problem_status_lock_ini)
pthread_mutex_destroy(&(m->problem_status_lock));
if(m->msg_watcher_lock_ini)
pthread_mutex_destroy(&(m->msg_watcher_lock));
if(m->msgw_fetch_lock_ini)
pthread_mutex_destroy(&(m->msgw_fetch_lock));
Xorriso_sieve_dispose(m, 0);
free((char *) m);
*xorriso= NULL;
return(1);
}
int Xorriso_destroy_node_array(struct XorrisO *xorriso, int flag)
{
int i;
if(xorriso->node_array != NULL) {
for(i= 0; i < xorriso->node_counter; i++)
iso_node_unref((IsoNode *) xorriso->node_array[i]);
free(xorriso->node_array);
}
xorriso->node_array= NULL;
xorriso->node_counter= xorriso->node_array_size= 0;
Xorriso_lst_destroy_all(&(xorriso->node_disk_prefixes), 0);
Xorriso_lst_destroy_all(&(xorriso->node_img_prefixes), 0);
return(1);
}
/* @param flag bit0= do not destroy hln_array but only hln_targets
*/
int Xorriso_destroy_hln_array(struct XorrisO *xorriso, int flag)
{
int i;
if(xorriso->hln_array != NULL && !(flag & 1)) {
for(i= 0; i < xorriso->hln_count; i++)
iso_node_unref((IsoNode *) xorriso->hln_array[i]);
free(xorriso->hln_array);
xorriso->hln_array= NULL;
xorriso->hln_count= 0;
}
if(xorriso->hln_targets != NULL) {
for(i= 0; i < xorriso->hln_count; i++)
if(xorriso->hln_targets[i] != NULL)
free(xorriso->hln_targets[i]);
free(xorriso->hln_targets);
xorriso->hln_targets= NULL;
}
xorriso->node_targets_availmem= 0;
return(1);
}
int Xorriso_destroy_di_array(struct XorrisO *xorriso, int flag)
{
int i;
if(xorriso->di_array != NULL) {
for(i= 0; i < xorriso->di_count; i++)
if(xorriso->di_array[i] != NULL)
iso_node_unref((IsoNode *) xorriso->di_array[i]);
free(xorriso->di_array);
xorriso->di_array= NULL;
}
if(xorriso->di_do_widen != NULL) {
free(xorriso->di_do_widen);
xorriso->di_do_widen= NULL;
}
Xorriso_lst_destroy_all(&(xorriso->di_disk_paths), 0);
Xorriso_lst_destroy_all(&(xorriso->di_iso_paths), 0);
xorriso->di_count= 0;
#ifdef NIX
/* <<< */
fprintf(stderr, "xorriso_DEBUG: get_di_count= %lu\n",
Xorriso_get_di_counteR);
#endif /* NIX */
return(1);
}
int Xorriso_new_node_array(struct XorrisO *xorriso, off_t mem_limit,
int addon_nodes, int flag)
{
int i;
if(xorriso->node_counter <= 0)
return(1);
xorriso->node_array= calloc(xorriso->node_counter + addon_nodes,
sizeof(IsoNode *));
if(xorriso->node_array == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
for(i= 0; i < xorriso->node_counter + addon_nodes; i++)
xorriso->node_array[i]= NULL;
xorriso->node_array_size= xorriso->node_counter + addon_nodes;
xorriso->node_counter= 0;
return(1);
}
/* @param flag bit0= do not allocate hln_array but only hln_targets
*/
int Xorriso_new_hln_array(struct XorrisO *xorriso, off_t mem_limit, int flag)
{
int i;
Xorriso_destroy_hln_array(xorriso, flag & 1);
if(xorriso->hln_count <= 0)
return(1);
if(!(flag & 1)) {
xorriso->hln_array= calloc(xorriso->hln_count, sizeof(char *));
if(xorriso->hln_array == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
for(i= 0; i < xorriso->hln_count; i++)
xorriso->hln_array[i]= NULL;
}
xorriso->hln_targets= calloc(xorriso->hln_count, sizeof(char *));
if(xorriso->hln_targets == NULL) {
if(!(flag & 1)) {
free(xorriso->hln_array);
xorriso->hln_array= NULL;
}
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
for(i= 0; i < xorriso->hln_count; i++)
xorriso->hln_targets[i]= NULL;
xorriso->node_targets_availmem= mem_limit
- xorriso->hln_count * sizeof(void *)
- xorriso->hln_count * sizeof(char *);
if(xorriso->node_targets_availmem < 0)
xorriso->node_targets_availmem= 0;
return(1);
}
int Xorriso__preset_signal_behavior(int behavior, int flag)
{
if(behavior < 0 || behavior > 3)
return(0);
Xorriso_signal_behavioR= behavior;
return(1);
}
int Xorriso__get_signal_behavior(int flag)
{
return(Xorriso_signal_behavioR);
}

31
xorriso/base_obj.h Normal file
View File

@ -0,0 +1,31 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which perform the
fundamental operations of the XorrisO object.
*/
#ifndef Xorriso_pvt_base_obj_includeD
#define Xorriso_pvt_base_obj_includeD yes
#ifdef NIX
/* <<< */
unsigned long Xorriso_get_di_counteR= 0;
#endif /* NIX */
struct XorrisO;
int Xorriso_destroy_re(struct XorrisO *m, int flag);
int Xorriso__get_signal_behavior(int flag);
#endif /* ! Xorriso_pvt_base_obj_includeD */

File diff suppressed because it is too large Load Diff

1127
xorriso/check_media.c Normal file

File diff suppressed because it is too large Load Diff

184
xorriso/check_media.h Normal file
View File

@ -0,0 +1,184 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of classes SpotlistiteM, SpotlisT,
SectorbitmaP, CheckmediajoB which represent media checks and their outcome.
*/
#ifndef Xorriso_pvt_check_includeD
#define Xorriso_pvt_check_includeD yes
struct SpotlisT; /* List of intervals with different read qualities */
struct CheckmediajoB; /* Parameters for Xorriso_check_media() */
int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
struct CheckmediajoB *job,
char **argv, int old_idx, int end_idx, int flag);
int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
struct CheckmediajoB *job,
struct SpotlisT **spotlist,
int flag);
/* @param flag bit0= mark untested areas as valid
*/
int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
struct SpotlisT *spotlist,
int read_chunk,
struct SectorbitmaP **map,
int flag);
/* Opens the -check_media data copy in for reading and writing
*/
int Xorriso_open_job_data_to(struct XorrisO *xorriso,
struct CheckmediajoB *job, int flag);
/* @param report Buffer of at least 10*SfileadrL
@param flag bit0= only report non-default settings
@return <=0 error , 1 ok , 2 with bit0: every option is on default setting
*/
int Xorriso_check_media_list_job(struct XorrisO *xorriso,
struct CheckmediajoB *job,
char *report, int flag);
int Xorriso_update_in_sector_map(struct XorrisO *xorriso,
struct SpotlisT *spotlist, int read_chunk,
struct CheckmediajoB *job, int flag);
/* Distiniction between valid and invalid sectors */
struct SectorbitmaP {
int sectors;
int sector_size;
unsigned char *map;
int map_size;
};
int Spotlist_new(struct SpotlisT **o, int flag);
int Spotlist_destroy(struct SpotlisT **o, int flag);
int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
int quality, int flag);
int Spotlist_count(struct SpotlisT *o, int flag);
int Spotlist_block_count(struct SpotlisT *o, int flag);
int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag);
int Spotlist_get_item(struct SpotlisT *o, int idx,
int *start_lba, int *blocks, int *quality, int flag);
char *Spotlist__quality_name(int quality, char name[80], int bad_limit,
int flag);
#define Xorriso_read_quality_gooD 0x7fffffff
#define Xorriso_read_quality_md5_matcH 0x70000000
#define Xorriso_read_quality_sloW 0x60000000
#define Xorriso_read_quality_partiaL 0x50000000
#define Xorriso_read_quality_valiD 0x40000000
#define Xorriso_read_quality_untesteD 0x3fffffff
#define Xorriso_read_quality_invaliD 0x3ffffffe
#define Xorriso_read_quality_tao_enD 0x28000000
#define Xorriso_read_quality_off_tracK 0x20000000
#define Xorriso_read_quality_md5_mismatcH 0x10000000
#define Xorriso_read_quality_unreadablE 0x00000000
struct CheckmediajoB {
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
int min_lba; /* if >=0 : begin checking at this address */
int max_lba; /* if >=0 : read up to this address, else use mode */
int min_block_size; /* granularity desired by user
*/
int async_chunks; /* >= 2 : run MD5 thread, use given number of chunks
else : synchronous
*/
int mode; /* 0= track by track
1= single sweep over libisoburn medium capacity
2= single sweep over libburn medium capacity
*/
time_t start_time;
int time_limit; /* Number of seconds after which to abort */
int item_limit; /* Maximum number of medium check list items as result */
char abort_file_path[SfileadrL];
char data_to_path[SfileadrL];
int data_to_fd;
off_t data_to_offset; /* usually 0 with image copy, negative with file copy */
off_t data_to_limit; /* used with file copy */
int patch_lba0;
int patch_lba0_msc1;
char sector_map_path[SfileadrL];
struct SectorbitmaP *sector_map;
int map_with_volid; /* 0=add quick toc to map file,
1=read ISO heads for toc
*/
int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks
0= retry with CD, full chunk else
*/
int report_mode; /* 0= print MCL items
1= print damaged files
*/
char event_severity[20]; /* If not "ALL": trigger event of given severity
at the end of a check job if bad blocks were
discovered.
*/
double slow_threshold_seq; /* Time limit in seconds for the decision whether
a read operation is considered slow. This does
not apply to thr first read of an interval.
*/
int untested_valid; /* 1= mark untested data blocks as valid when calling
Xorriso_spotlist_to_sectormap()
*/
};
int Checkmediajob_new(struct CheckmediajoB **o, int flag);
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);
int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
int flag);
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
int flag);
int Sectorbitmap_destroy(struct SectorbitmaP **o, int flag);
int Sectorbitmap_from_file(struct SectorbitmaP **o, char *path, char *msg,
int *os_errno, int flag);
int Sectorbitmap_to_file(struct SectorbitmaP *o, char *path, char *info,
char *msg, int *os_errno, int flag);
int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag);
int Sectorbitmap_set_range(struct SectorbitmaP *o,
int start_sector, int sectors, int flag);
int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag);
int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o,
off_t start_byte, off_t end_byte, int flag);
int Sectorbitmap_get_layout(struct SectorbitmaP *o,
int *sectors, int *sector_size, int flag);
int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to,
int flag);
int Sectorbitmap_clone(struct SectorbitmaP *from, struct SectorbitmaP **clone,
int flag);
#endif /* ! Xorriso_pvt_check_includeD */

1013
xorriso/cmp_update.c Normal file

File diff suppressed because it is too large Load Diff

45
xorriso/cmp_update.h Normal file
View File

@ -0,0 +1,45 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of class DirseQ which
crawls along a directory's content list.
*/
#ifndef Xorriso_pvt_cmp_includeD
#define Xorriso_pvt_cmp_includeD yes
int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
char *iso_adr, char *adr_common_tail,
int *result, int flag);
int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
char *iso_prefix, char *disk_prefix,
char disk_path[SfileadrL], 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
@param flag bit0= update rather than compare
*/
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, void *node,
int compare_result, char *disk_path,
char *iso_rr_path, int flag);
#endif /* ! Xorriso_pvt_cmp_includeD */

View File

@ -1,22 +1,36 @@
#!/bin/sh
# compile_xorriso.sh
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
# to be executed in a common parent of the directories given with
# $isofs $isoburn $burn
# compile_xorriso.sh
# Copyright 2005 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
#
# Not intended for general use in production installations !
# Rather use: ./bootstrap ; ./configure ; make
#
# This is a development tool which expects a special setup of directories
# on a Linux system (e.g. SuSE 10.2).
# It is to be executed in a common parent of the directories given with
# $isofs $isoburn $burn $xorr
isofs=./nglibisofs-develop/libisofs
isofs=./nglibisofs-develop/libisofs/libisofs_libisofs_la-
isofs_filter=./nglibisofs-develop/libisofs/filters/libisofs_libisofs_la-
burn=./libburn-develop/libburn
isoburn=./libisoburn-develop/libisoburn
xorr=./libisoburn-develop/xorriso
debug_opts="-O2"
def_opts=
def_opts="-DXorriso_allow_external_filterS -DXorriso_allow_launch_frontenD"
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
do_strip=0
static_opts=
warn_opts="-Wall"
warn_opts="-Wall -Wextra -Wno-unused-parameter"
# warn_opts="-Wall -Wsign-compare"
nglibisofs=1
def_have="-DHAVE_STDINT_H"
def_libreadline="-DXorriso_with_readlinE"
def_libjte="-DXorriso_with_libjtE -DLibisofs_with_libjtE"
link_libreadline="-lreadline"
link_libcdio=
link_libjte="-ljte"
for i in "$@"
do
@ -30,11 +44,29 @@ do
elif test "$i" = "-g"
then
debug_opts="-g -O0"
elif test "$i" = "-no_libreadline"
then
def_libreadline=""
link_libreadline=""
elif test "$i" = "-dvd_obs_64k"
then
def_opts="$def_opts -DXorriso_dvd_obs_default_64K"
elif test "$i" = "-use_libcdio"
then
link_libcdio="-lcdio"
elif test "$i" = "-no_libjte"
then
def_libjte=""
link_libjte=""
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
then
echo \
"$xorr/compile_xorriso.sh : to be executed above top level directories"
echo "Options:"
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
echo " -no_libreadline do not compile for and link with libreadline."
echo " -use_libcdio link with -lcdio because libburn uses it."
echo " -no_libjte do not compile for and link with libjte."
echo " -do_diet produce capability reduced lean version."
echo " -do_strip apply program strip to compiled programs."
echo " -g produce debuggable programm."
@ -47,49 +79,89 @@ do
done
libisofs=
libisofs="$libisofs $isofs"/buffer.o
libisofs="$libisofs $isofs"/builder.o
libisofs="$libisofs $isofs"/data_source.o
libisofs="$libisofs $isofs"/ecma119.o
libisofs="$libisofs $isofs"/ecma119_tree.o
libisofs="$libisofs $isofs"/eltorito.o
libisofs="$libisofs $isofs"/filesrc.o
libisofs="$libisofs $isofs"/fs_image.o
libisofs="$libisofs $isofs"/fs_local.o
libisofs="$libisofs $isofs"/fsource.o
libisofs="$libisofs $isofs"/image.o
libisofs="$libisofs $isofs"/iso1999.o
libisofs="$libisofs $isofs"/joliet.o
libisofs="$libisofs $isofs"/libiso_msgs.o
libisofs="$libisofs $isofs"/messages.o
libisofs="$libisofs $isofs"/node.o
libisofs="$libisofs $isofs"/rockridge.o
libisofs="$libisofs $isofs"/rockridge_read.o
libisofs="$libisofs $isofs"/stream.o
libisofs="$libisofs $isofs"/tree.o
libisofs="$libisofs $isofs"/util.o
libisofs="$libisofs $isofs"/util_htable.o
libisofs="$libisofs $isofs"/util_rbtree.o
libisofs="$libisofs $isofs"buffer.o
libisofs="$libisofs $isofs"builder.o
libisofs="$libisofs $isofs"data_source.o
libisofs="$libisofs $isofs"ecma119.o
libisofs="$libisofs $isofs"ecma119_tree.o
libisofs="$libisofs $isofs"eltorito.o
libisofs="$libisofs $isofs"filesrc.o
libisofs="$libisofs $isofs"fs_image.o
libisofs="$libisofs $isofs"fs_local.o
libisofs="$libisofs $isofs"fsource.o
libisofs="$libisofs $isofs"image.o
libisofs="$libisofs $isofs"iso1999.o
libisofs="$libisofs $isofs"joliet.o
libisofs="$libisofs $isofs"hfsplus.o
libisofs="$libisofs $isofs"hfsplus_decompose.o
libisofs="$libisofs $isofs"hfsplus_classes.o
libisofs="$libisofs $isofs"hfsplus_case.o
libisofs="$libisofs $isofs"libiso_msgs.o
libisofs="$libisofs $isofs"messages.o
libisofs="$libisofs $isofs"node.o
libisofs="$libisofs $isofs"rockridge.o
libisofs="$libisofs $isofs"rockridge_read.o
libisofs="$libisofs $isofs"stream.o
libisofs="$libisofs $isofs"tree.o
libisofs="$libisofs $isofs"util.o
libisofs="$libisofs $isofs"util_htable.o
libisofs="$libisofs $isofs"util_rbtree.o
libisofs="$libisofs $isofs"system_area.o
libisofs="$libisofs $isofs"make_isohybrid_mbr.o
libisofs="$libisofs $isofs"aaip_0_2.o
libisofs="$libisofs $isofs"filter.o
libisofs="$libisofs $isofs_filter"external.o
libisofs="$libisofs $isofs_filter"zisofs.o
libisofs="$libisofs $isofs_filter"gzip.o
libisofs="$libisofs $isofs"md5.o
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
echo "Build timestamp : $timestamp"
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_buildstamp.h
echo "Build timestamp : $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts $link_libcdio"
cc -I. -DXorriso_with_maiN $def_have $def_libreadline $def_libjte \
$warn_opts \
$static_opts \
$debug_opts \
$def_opts \
$largefile_opts \
\
-DXorriso_build_timestamP='"'"$timestamp"'"' \
\
-o "$xorr"/xorriso \
\
"$xorr"/xorriso.c \
"$xorr"/xorriso_main.c \
"$xorr"/sfile.c \
"$xorr"/aux_objects.c \
"$xorr"/findjob.c \
"$xorr"/check_media.c \
"$xorr"/misc_funct.c \
"$xorr"/text_io.c \
"$xorr"/match.c \
"$xorr"/emulators.c \
"$xorr"/disk_ops.c \
"$xorr"/cmp_update.c \
"$xorr"/parse_exec.c \
"$xorr"/opts_a_c.c \
"$xorr"/opts_d_h.c \
"$xorr"/opts_i_o.c \
"$xorr"/opts_p_z.c \
\
"$xorr"/xorrisoburn.c \
"$xorr"/base_obj.c \
"$xorr"/lib_mgt.c \
"$xorr"/sort_cmp.c \
"$xorr"/drive_mgt.c \
"$xorr"/iso_img.c \
"$xorr"/iso_tree.c \
"$xorr"/iso_manip.c \
"$xorr"/write_run.c \
"$xorr"/read_run.c \
"$xorr"/filters.c \
\
"$isoburn"/isoburn.c \
"$isoburn"/burn_wrap.c \
"$isoburn"/data_source.c \
"$isoburn"/isofs_wrap.c \
\
"$burn"/async.o \
"$burn"/debug.o \
@ -106,6 +178,7 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
"$burn"/libdax_audioxtr.o \
"$burn"/libdax_msgs.o \
"$burn"/cleanup.o \
"$burn"/cdtext.o \
\
"$burn"/mmc.o \
"$burn"/sbc.o \
@ -116,18 +189,17 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
"$burn"/toc.o \
\
"$burn"/crc.o \
"$burn"/lec.o \
\
"$isoburn"/isoburn.o \
"$isoburn"/burn_wrap.o \
"$isoburn"/data_source.o \
"$isoburn"/isofs_wrap.o \
"$burn"/ecma130ab.o \
\
$libisofs \
\
-lreadline \
$link_libreadline \
$link_libcdio \
$link_libjte \
\
-lpthread
-lpthread \
-lacl \
-lz
ret=$?
if test "$ret" = 0

View File

@ -1,38 +1,42 @@
AC_INIT([xorriso], [0.1.0], [http://libburnia-project.org])
# configure.ac stems from xorriso/configure_ac.txt and leads to ./configure
# Copyright (c) 2007 - 2013 Thomas Schmitt <scdbackup@gmx.net>
# Provided under GPL version 2 or later.
AC_INIT([xorriso], [1.2.6], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
LIBBURNIA_SET_FLAGS
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4
BURN_MICRO_VERSION=3
AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_MACRO_DIR([./])
dnl Let autoheader produce config.h.in and let configure produce config.h
dnl This saves about 500 characters of compile message per source file.
AC_CONFIG_HEADER(config.h)
AH_TEMPLATE([Xorriso_standalonE], [Define to prepare sources for statically linked xorriso])
AC_DEFINE([Xorriso_standalonE], [])
BURN_MAJOR_VERSION=1
BURN_MINOR_VERSION=2
BURN_MICRO_VERSION=6
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=2
LIBISOFS_MAJOR_VERSION=1
LIBISOFS_MINOR_VERSION=2
LIBISOFS_MICRO_VERSION=6
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)
dnl The API version codes are now defined in libisoburn/libisoburn.h
dnl The API version codes are defined in libisoburn/libisoburn.h
dnl #define isoburn_header_version_*
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
dnl ISOBURN_MAJOR_VERSION=0
dnl ISOBURN_MINOR_VERSION=0
dnl ISOBURN_MICRO_VERSION=1
dnl AC_SUBST(ISOBURN_MAJOR_VERSION)
dnl AC_SUBST(ISOBURN_MINOR_VERSION)
dnl AC_SUBST(ISOBURN_MICRO_VERSION)
AC_PREFIX_DEFAULT([/usr/local])
@ -53,6 +57,26 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.])
fi
AH_TEMPLATE([ICONV_CONST], [Whether to apply const qualifier to iconv inbuf])
if test x$XORRISO_OLD_ICONV_CONFIGURE = x
then
dnl ts B00410 : To detect the need for -liconv and const argument of iconv()
LIBBURNIA_CHECK_ICONV
dnl ts B00411 : To abort configuration if iconv() still cannot be compiled
LIBBURNIA_ASSERT_ICONV
else
dnl Outdated: produces double -liconv and warnings about parameter mismatch
dnl If iconv(3) is in an extra libiconv, then it gets added to variable LIBS.
dnl If not, then no -liconv will be added.
AC_CHECK_LIB(iconv, iconv, , )
dnl GNU iconv has no function iconv() but libiconv() and a macro iconv()
AC_CHECK_LIB(iconv, libiconv, , )
fi
AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent"
@ -84,8 +108,21 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE
AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS)
dnl Check the preconditions for using statvfs() in sg-dummy
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
AH_TEMPLATE([Libburn_os_has_statvfS], [Define to use statvfs() with libburn stdio])
STATVFS_DEF=-DLibburn_os_has_statvfS
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
if test x$STATVFS_DEF = x-DLibburn_os_has_statvfS
then
AC_DEFINE([Libburn_os_has_statvfS], [])
fi
dnl Add compiler-specific flags
dnl See if the user wants aggressive optimizations of the code
@ -94,31 +131,351 @@ 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 -Wextra -Wno-unused-parameter $CFLAGS"
fi
CFLAGS="$CFLAGS -DDEBUG"
CFLAGS="-DDEBUG $CFLAGS"
fi
dnl Determine target directory for libisoburn-*.pc
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
LIBBURNIA_SET_PKGCONFIG
AH_TEMPLATE([Xorriso_with_readlinE], [Define to use libreadline])
AC_ARG_ENABLE(libreadline,
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
, enable_libreadline=yes)
if test x$enable_libreadline = xyes; then
dnl Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE"
READLINE_DEF="-DXorriso_with_readlinE"
if test x$XORRISO_OLD_READLINE_CONFIGURE = x
then
dnl ts B00411 : To disable readline if not all needed functions are present
LIBBURNIA_ASSERT_READLINE
else
dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
AC_SUBST(READLINE_DEF)
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
fi
else
READLINE_DEF=
fi
if test x$READLINE_DEF = x-DXorriso_with_readlinE
then
AC_DEFINE([Xorriso_with_readlinE], [])
fi
AH_TEMPLATE([Libisofs_with_aaip_acL], [Define to use ACL capabilities])
AC_ARG_ENABLE(libacl,
[ --enable-libacl Enable use of ACL functions by libisofs, default=yes],
, enable_libacl=yes)
if test x$enable_libacl = xyes; then
dnl Check whether there is libacl-devel and libacl-runtime.
dnl If not, erase this macro which would enable use of acl_to_text and others
LIBACL_DEF="-DLibisofs_with_aaip_acL"
dnl The empty yes case obviously causes -lacl to be linked
has_acl_h_but_no_func=0
AC_CHECK_HEADER(sys/acl.h, AC_CHECK_LIB(acl, acl_to_text, , has_acl_h_but_no_libacl=1 ), LIBACL_DEF= )
if test "$has_acl_h_but_no_libacl" = 1
then
AC_CHECK_LIB(c, acl_to_text, X= , LIBACL_DEF= )
fi
else
LIBACL_DEF=
fi
if test x$LIBACL_DEF = x-DLibisofs_with_aaip_acL
then
AC_DEFINE([Libisofs_with_aaip_acL], [])
fi
AH_TEMPLATE([Libisofs_with_aaip_xattR], [Define to use xattr capabilities])
AH_TEMPLATE([Libisofs_with_freebsd_extattR], [Define to use extattr capabilities])
AC_ARG_ENABLE(xattr,
[ --enable-xattr Enable use of xattr by libisofs, default=yes],
, enable_xattr=yes)
if test x$enable_xattr = xyes; then
dnl Check whether there is the header for GNU/Linux xattr.
dnl If not, erase this macro which would enable use of listxattr and others
XATTR_DEF="-DLibisofs_with_aaip_xattR"
AC_CHECK_HEADER(attr/xattr.h, AC_CHECK_LIB(c, listxattr, X= , XATTR_DEF= ), XATTR_DEF= )
if test "x$XATTR_DEF" = x
then
XATTR_DEF="-DLibisofs_with_freebsd_extattR"
AC_CHECK_HEADER(sys/extattr.h, AC_CHECK_LIB(c, extattr_list_file, X=, XATTR_DEF= ), XATTR_DEF= )
fi
else
XATTR_DEF=
fi
if test x$XATTR_DEF = x-DLibisofs_with_aaip_xattR
then
AC_DEFINE([Libisofs_with_aaip_xattR], [])
fi
if test x$XATTR_DEF = x-DLibisofs_with_freebsd_extattR
then
AC_DEFINE([Libisofs_with_freebsd_extattR], [])
fi
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)
if test x$enable_zlib = xyes; then
dnl Check whether there is the header for zlib.
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=yes
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
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
case $host_os in
cygwin*|mingw*)
default_libcdio=yes
;;
*)
default_libcdio=no
;;
esac
AH_TEMPLATE([Libburn_use_libcdiO], [Define to use libcdio as system adapter])
AC_ARG_ENABLE(libcdio,
[ --enable-libcdio Enable use of libcdio as system adapter, default=no (except on MSWindows)],
, enable_libcdio=$default_libcdio)
if test x$enable_libcdio = xyes; then
dnl Check whether there is libcdio-devel and libcdio-runtime.
dnl If not, erase this macro
LIBCDIO_DEF="-DLibburn_use_libcdiO"
dnl The empty yes case obviously causes -lcdio to be linked
AC_CHECK_HEADER(cdio/cdio.h, AC_CHECK_LIB(cdio, mmc_last_cmd_sense, , LIBCDIO_DEF= ), LIBCDIO_DEF= )
else
LIBCDIO_DEF=
fi
if test x$LIBCDIO_DEF = x
then
if test x$enable_libcdio = xyes
then
echo "WARNING: could not enable use of libcdio as system adapter"
fi
else
echo "enabled use of libcdio as system adapter"
fi
if test x$LIBCDIO_DEF = x-DLibburn_use_libcdiO
then
AC_DEFINE([Libburn_use_libcdiO], [])
fi
AH_TEMPLATE([Xorriso_allow_external_filterS], [Define to allow xorriso to start external filter processes])
AC_ARG_ENABLE(external-filters,
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
, enable_external_filters=yes)
if test x"$enable_external_filters" = xyes; then
EXTF_DEF="-DXorriso_allow_external_filterS"
echo "enabled xorriso external filter programs"
else
EXTF_DEF=
echo "disabled xorriso external filter programs"
fi
if test x$EXTF_DEF = x-DXorriso_allow_external_filterS
then
AC_DEFINE([Xorriso_allow_external_filterS], [])
fi
AH_TEMPLATE([Xorriso_allow_extf_suiD], [Define to allow external filters to xorriso when running under setuid])
AC_ARG_ENABLE(external-filters-setuid,
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
, enable_external_filters_setuid=no)
if test x$enable_external_filters_setuid = xyes; then
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso external filter programs under setuid"
else
EXTF_SUID_DEF=
echo "disabled xorriso external filter programs under setuid"
fi
if test x$EXTF_SUID_DEF = x-DXorriso_allow_extf_suiD
then
AC_DEFINE([Xorriso_allow_extf_suiD], [])
fi
AH_TEMPLATE([Xorriso_allow_launch_frontenD], [Define to allow xorriso command -launch_frontend])
AC_ARG_ENABLE(launch-frontend,
[ --enable-launch-frontend Enable start of piped frontend program by xorriso, default=yes],
, enable_launch_frontend=yes)
if test x"$enable_launch_frontend" = xyes; then
LFRONT_DEF="-DXorriso_allow_launch_frontenD"
echo "enabled xorriso command -launch_frontend"
else
LFRONT_DEF=
echo "disabled xorriso command -launch_frontend"
fi
if test x$LFRONT_DEF = x-DXorriso_allow_launch_frontenD
then
AC_DEFINE([Xorriso_allow_launch_frontenD], [])
fi
AH_TEMPLATE([Xorriso_allow_extf_suiD], [Define to allow xorriso command -launch_frontend when running under setuid])
AC_ARG_ENABLE(launch-frontend-setuid,
[ --enable-launch-frontend-setuid Enable start of piped frontend program under setuid, default=no],
, enable_launch_frontend_setuid=no)
if test x$enable_launch_frontend_setuid = xyes; then
LFRONT_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso command -launch_frontend under setuid"
else
LFRONT_SUID_DEF=
echo "disabled xorriso command -launch_frontend under setuid"
fi
if test x$LFRONT_SUID_DEF = x-DXorriso_allow_extf_suiD
then
AC_DEFINE([Xorriso_allow_extf_suiD], [])
fi
AH_TEMPLATE([Xorriso_dvd_obs_default_64K], [Define to make 64 KB default size for DVD/BD writing])
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for DVD/BD writing, default=no],
, enable_dvd_obs=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"
else
XORRISO_DVD_OBS_64K=
echo "disabled xorriso write size default 64 KB on DVD and BD"
fi
if test x$XORRISO_DVD_OBS_64K = x-DXorriso_dvd_obs_default_64K
then
AC_DEFINE([Xorriso_dvd_obs_default_64K], [])
fi
AH_TEMPLATE([Libburn_read_o_direcT], [Define to use O_DIRECT with -as cdrskin])
AC_ARG_ENABLE(track-src-odirect,
[ --enable-track-src-odirect Enable use of O_DIRECT with -as cdrskin, default=no],
, enable_track_src_odirect=no)
if test x$enable_track_src_odirect = xyes; then
LIBBURN_O_DIRECT_DEF="-DLibburn_read_o_direcT"
echo "enabled use of O_DIRECT with input of -as cdrskin"
else
LIBBURN_O_DIRECT_DEF=
echo "disabled use of O_DIRECT with input of -as cdrskin"
fi
if test x$LIBBURN_O_DIRECT_DEF = x-DLibburn_read_o_direcT
then
AC_DEFINE([Libburn_read_o_direcT], [])
fi
# ------- Visible mark in configure : Start of library check
# Check for proper library versions if this is desired.
# (It fails too often on too many systems.)
AC_ARG_ENABLE(pkg-check-modules,
[ --enable-pkg-check-modules Enable pkg-config check for libburn and libisofs , default=no],
, enable_pkg_check_modules=no)
if test x$enable_pkg_check_modules = xyes; then
dnl If PKG_CHECK_MODULES is to be used after this if-block,
dnl then it might be necessary to perform PKG_PROG_PKG_CONFIG before the block.
if test x$LIBCDIO_DEF = x; then
dummy=dummy
else
LIBCDIO_REQUIRED=0.83
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
fi
else
if test x$LIBCDIO_DEF = x; then
dummy=dummy
else
echo "checking for LIBCDIO... skipped, no --enable-pkg-check-modules"
fi
fi
# ------- Visible mark in configure : End of library check
AC_CONFIG_FILES([
Makefile
version.h
xorriso.pc
])
AC_OUTPUT
# xorriso.pc

View File

@ -1,107 +1,14 @@
#!/bin/sh
#
# convert_man_to_html.sh - ts A80118
# convert_man_to_html.sh - ts B11024
#
# Generates a HTML version of man page xorriso.1
# Generates a HTML version of man pages xorriso.1 , xorrisofs.1 , xorrecord.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.1.8)
#
# set -x
xorriso/man_xorriso_to_html.sh
xorriso/man_xorrisofs_to_html.sh
xorriso/man_xorrecord_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:<\/b>/\&nbsp;<BR><b>Creating, Growing, Modifying:<\/b>/' \
-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:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open:<\/b>/' \
-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>Data manipulations:<\/b>/\&nbsp;<BR><b>Data manipulations:<\/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>Writing the result:<\/b>/\&nbsp;<BR><b>Writing the result:<\/b><BR>/' \
-e 's/^-find \/ /\&nbsp;\&nbsp;-find \/ /' \
-e 's/<b>Settings for data insertion:<\/b>/\&nbsp;<BR><b>Settings for data 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>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/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>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

1939
xorriso/disk_ops.c Normal file

File diff suppressed because it is too large Load Diff

117
xorriso/disk_ops.h Normal file
View File

@ -0,0 +1,117 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of class DirseQ which
crawls along a directory's content list.
*/
#ifndef Xorriso_pvt_diskop_includeD
#define Xorriso_pvt_diskop_includeD yes
/* @param flag bit0= simple readlink(): no normalization, no multi-hop
*/
int Xorriso_resolve_link(struct XorrisO *xorriso,
char *link_path, char result_path[SfileadrL], int flag);
int Xorriso_convert_gidstring(struct XorrisO *xorriso, char *gid_string,
gid_t *gid, int flag);
int Xorriso_convert_modstring(struct XorrisO *xorriso, char *cmd, char *mode,
mode_t *mode_and, mode_t *mode_or, int flag);
int Xorriso_convert_uidstring(struct XorrisO *xorriso, char *uid_string,
uid_t *uid, int flag);
/* @param flag bit0= for Xorriso_msgs_submit: use pager
*/
int Xorriso_hop_link(struct XorrisO *xorriso, char *link_path,
struct LinkiteM **link_stack, struct stat *stbuf, int flag);
int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag);
int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag);
/* @param flag bit0= long format
bit1= do not print count of nodes
bit2= du format
bit3= print directories as themselves (ls -d)
*/
int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
int filec, char **filev, off_t boss_mem, int flag);
/*
@param flag >>> bit0= remove whole sub tree: rm -r
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
@return <=0 = error
1 = removed leaf file object
2 = removed directory or tree
3 = did not remove on user revocation
*/
int Xorriso_rmx(struct XorrisO *xorriso, off_t boss_mem, char *path, int flag);
int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
char *abs_dir_parm, char *dir_path,
struct stat *dir_stbuf, int depth,
struct LinkiteM *link_stack, int flag);
/* @param flag bit0= no hardlink reconstruction
bit1= do not set xorriso->node_*_prefixes
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 *problem_count, int flag);
/* @param flag bit0= path is a directory
bit2= recursion: do not reassure in mode 2 "tree"
bit3= this is for overwriting and not for plain removal
*/
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag);
/* @param flag bit7= return 4 if restore fails from denied permission
do not issue error message
@return <=0 failure , 1 success ,
4 with bit7: permission to create file was denied
*/
int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
char *tmp_path, int *fd, int flag);
/* @param flag bit0= change regardless of xorriso->do_auto_chmod
bit1= desired is only rx
*/
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
int Xorriso_make_accessible(struct XorrisO *xorriso, char *disk_path,int flag);
/* @param flag bit0= prefer to find a match after *img_prefixes
(but deliver img_prefixes if no other can be found)
*/
int Xorriso_make_restore_path(struct XorrisO *xorriso,
struct Xorriso_lsT **img_prefixes, struct Xorriso_lsT **disk_prefixes,
char img_path[SfileadrL], char disk_path[SfileadrL], int flag);
int Xorriso_restore_make_hl(struct XorrisO *xorriso,
char *old_path, char *new_path, int flag);
int Xorriso_afile_fopen(struct XorrisO *xorriso,
char *filename, char *mode, FILE **ret_fp, int flag);
int Xorriso_make_mount_cmd(struct XorrisO *xorriso, char *cmd,
int lba, int track, int session, char *volid,
char *devadr, char result[SfileadrL], int flag);
int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag);
#endif /* ! Xorriso_pvt_diskop_includeD */

3152
xorriso/drive_mgt.c Normal file

File diff suppressed because it is too large Load Diff

42
xorriso/drive_mgt.h Normal file
View File

@ -0,0 +1,42 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which operate on drives
and media.
*/
#ifndef Xorriso_pvt_drive_mgt_includeD
#define Xorriso_pvt_drive_mgt_includeD yes
int Xorriso_may_burn(struct XorrisO *xorriso, int flag);
int Xorriso_toc_line(struct XorrisO *xorriso, int flag);
int Xorriso_media_product(struct XorrisO *xorriso, int flag);
int Xorriso_check_md5_range(struct XorrisO *xorriso, off_t start_lba,
off_t end_lba, char md5[16], int flag);
int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
struct CheckmediajoB *job,
int from_lba, int block_count, int read_chunk,
int md5_start, int flag);
int Xorriso_get_drive_handles(struct XorrisO *xorriso,
struct burn_drive_info **dinfo,
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 */

2415
xorriso/emulators.c Normal file

File diff suppressed because it is too large Load Diff

37
xorriso/emulators.h Normal file
View File

@ -0,0 +1,37 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of emulators for mkisofs and cdrecord.
*/
#ifndef Xorriso_pvt_emul_includeD
#define Xorriso_pvt_emul_includeD yes
/* micro version of cdrskin */
int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
int flag);
int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag);
int Xorriso_cdrskin_uses_stdout(struct XorrisO *xorriso, int argc, char **argv,
int flag);
int Xorriso_as_cdrskin(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* micro emulation of mkisofs */
int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
int argc, char **argv, int flag);
int Xorriso_genisofs_help(struct XorrisO *xorriso, int flag);
int Xorriso_as_genisofs(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
#endif /* ! Xorriso_pvt_emul_includeD */

701
xorriso/filters.c Normal file
View File

@ -0,0 +1,701 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains functions which operate on data filter objects.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <errno.h>
#include "lib_mgt.h"
#include "iso_tree.h"
/*
#include "xorriso.h"
#include "xorriso_private.h"
#include "xorrisoburn.h"
#include "iso_img.h"
#include "iso_manip.h"
#include "sort_cmp.h"
*/
struct Xorriso_extF {
int flag; /* unused yet */
IsoExternalFilterCommand *cmd;
};
int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
int flag);
/* @param flag see struct Xorriso_extF.flag */
int Xorriso_extf_new(struct XorrisO *xorriso, struct Xorriso_extF **filter,
char *path, int argc, char **argv, int behavior,
char *suffix, char *name, int flag)
{
int i;
struct Xorriso_extF *o= NULL;
IsoExternalFilterCommand *cmd;
*filter= o= calloc(sizeof(struct Xorriso_extF), 1);
if(o == NULL)
goto failure;
o->flag= flag;
o->cmd= NULL;
o->cmd= cmd= calloc(sizeof(IsoExternalFilterCommand), 1);
if(cmd == NULL)
goto failure;
cmd->version= 0;
cmd->refcount= 0;
cmd->name= NULL;
cmd->path= NULL;
cmd->argv= NULL;
cmd->argc= argc + 1;
cmd->behavior= behavior;
cmd->suffix= NULL;
cmd->suffix= strdup(suffix);
if(cmd->suffix == NULL)
goto failure;
cmd->path= strdup(path);
if(cmd->path == NULL)
goto failure;
cmd->argv= calloc(sizeof(char *), argc + 2);
if(cmd->argv == NULL)
goto failure;
for(i= 0; i < argc + 2; i++)
cmd->argv[i]= NULL;
cmd->argv[0]= strdup(path);
if(cmd->argv[0] == NULL)
goto failure;
for(i= 0; i < argc; i++) {
cmd->argv[i + 1]= strdup(argv[i]);
if(cmd->argv[i] == NULL)
goto failure;
}
cmd->name= strdup(name);
if(cmd->name == NULL)
goto failure;
return(1);
failure:;
Xorriso_extf_destroy(xorriso, filter, 0);
return(-1);
}
int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
int flag)
{
int i;
IsoExternalFilterCommand *cmd;
if(*filter == NULL)
return(0);
cmd= (*filter)->cmd;
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) {
for(i= 0; i < cmd->argc; i++)
if(cmd->argv[i] != NULL)
free(cmd->argv[i]);
free((char *) cmd->argv);
}
if(cmd->name != NULL)
free(cmd->name);
free((char *) cmd);
}
free((char *) *filter);
*filter= NULL;
return(1);
}
int Xorriso_lookup_extf(struct XorrisO *xorriso, char *name,
struct Xorriso_lsT **found_lst, int flag)
{
struct Xorriso_extF *filter;
struct Xorriso_lsT *lst;
for(lst= xorriso->filters; lst != NULL; lst= Xorriso_lst_get_next(lst, 0)) {
filter= (struct Xorriso_extF *) Xorriso_lst_get_text(lst, 0);
if(strcmp(filter->cmd->name, name) == 0) {
*found_lst= lst;
return(1);
}
}
return(0);
}
int Xorriso_destroy_all_extf(struct XorrisO *xorriso, int flag)
{
struct Xorriso_extF *filter;
struct Xorriso_lsT *lst, *next_lst;
for(lst= xorriso->filters; lst != NULL; lst= next_lst) {
filter= (struct Xorriso_extF *) Xorriso_lst_get_text(lst, 0);
Xorriso_lst_detach_text(lst, 0);
next_lst= Xorriso_lst_get_next(lst, 0);
Xorriso_lst_destroy(&lst, 0);
Xorriso_extf_destroy(xorriso, &filter, 0);
}
xorriso->filters= NULL;
return(1);
}
/*
@param flag bit0= return 2 if renaming is not possible by libisofs
(always: if demanded strip suffix is missing
or if suffix makes name length > 255)
bit1= strip suffix rather than appending it
*/
int Xorriso_rename_suffix(struct XorrisO *xorriso, IsoNode *node, char *suffix,
char *show_path, char new_name[], int flag)
{
int ret, lo= 0, ls= 0, strip_suffix;
char *old_name= NULL, *show_name;
strip_suffix= !!(flag & 2);
old_name= strdup((char *) iso_node_get_name(node));
show_name= old_name;
if(show_path != NULL)
if(show_path[0] != 0)
show_name= show_path;
lo= strlen(old_name);
ls= strlen(suffix);
if(strip_suffix) {
if(lo <= ls) {
/* refuse gracefully */
ret= 2; goto ex;
}
if(strcmp(old_name + lo - ls, suffix) != 0) {
ret= 2; goto ex;
}
if(lo >= SfileadrL)
goto cannot_remove_suffix;
strcpy(new_name, old_name);
new_name[lo - ls]= 0;
ret = iso_node_set_name(node, new_name);
if (ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
if (!(flag & 1))
Xorriso_report_iso_error(xorriso, "", ret,
"Error when renaming ISO node", 0, "FAILURE", 1);
cannot_remove_suffix:;
strcpy(xorriso->info_text, "-set_filter: Cannot remove suffix from ");
Text_shellsafe(show_name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(flag & 1) ? "WARNING" : "FAILURE", 0);
ret= 2 * (flag & 1); goto ex;
}
} else {
/* check whether suffix already present */
if(lo >= ls)
if(strcmp(old_name + lo - ls, suffix) == 0) {
/* refuse gracefully */
ret= 2; goto ex;
}
if(lo + ls > 255) {
cannot_append_suffix:;
strcpy(xorriso->info_text, "-set_filter: Cannot append suffix to ");
Text_shellsafe(show_name, xorriso->info_text, 1);
strcat(xorriso->info_text, ". Left unfiltered.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(flag & 1) ? "WARNING" : "FAILURE", 0);
ret= 2 * (flag & 1); goto ex;
}
sprintf(new_name, "%s%s", old_name, suffix);
ret = iso_node_set_name(node, new_name);
if (ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
if (!(flag & 1))
Xorriso_report_iso_error(xorriso, "", ret,
"Error when renaming ISO node", 0, "FAILURE", 1);
goto cannot_append_suffix;
}
}
ret= 1;
ex:;
if(old_name != NULL)
free(old_name);
Xorriso_process_msg_queues(xorriso,0);
return(ret);
}
/*
@param flag bit0= return 2 if renaming is not possible
bit1= print pacifier messages
*/
int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
char *path, char *filter_name, int flag)
{
int ret, strip_suffix= 0, strip_filter= 0, filter_ret= 0;
int explicit_suffix= 0, internal_filter= 0;
IsoNode *node;
IsoFile *file;
struct Xorriso_lsT *found_lst;
struct Xorriso_extF *found_filter;
IsoExternalFilterCommand *cmd = NULL;
char *old_name= NULL, *new_name= NULL, *suffix= "";
IsoStream *stream;
Xorriso_alloc_meM(new_name, char, SfileadrL);
new_name[0]= 0;
node= (IsoNode *) in_node;
if(node == NULL) {
ret= Xorriso_get_node_by_path(xorriso, path, NULL, &node, 0);
if(ret <= 0)
goto ex;
}
if(!LIBISO_ISREG(node)) {
strcpy(xorriso->info_text, "-set_filter: Not a regular data file node ");
Text_shellsafe(path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
ret= 0; goto ex;
}
file= (IsoFile *) node;
if(strncmp(filter_name, "--remove-all-filters", 20) == 0) {
strip_filter= 1;
strip_suffix= 1;
if(strlen(filter_name) > 21) {
strip_suffix= (filter_name[20] != '+');
suffix= filter_name + 21;
explicit_suffix= 1;
}
} else if(strcmp(filter_name, "--zisofs") == 0) {
internal_filter= 1;
} else if(strcmp(filter_name, "--zisofs-decode") == 0) {
internal_filter= 2;
} else if(strcmp(filter_name, "--gzip") == 0) {
internal_filter= 3;
suffix= ".gz";
strip_suffix= 0;
explicit_suffix= 1;
} else if(strcmp(filter_name, "--gunzip") == 0 ||
strcmp(filter_name, "--gzip-decode") == 0) {
internal_filter= 4;
suffix= ".gz";
strip_suffix= 1;
explicit_suffix= 1;
} else {
ret= Xorriso_lookup_extf(xorriso, filter_name, &found_lst, 0);
if(ret < 0)
goto ex;
if(ret == 0) {
strcpy(xorriso->info_text, "-set_filter: Not a registered filter name ");
Text_shellsafe(filter_name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
found_filter= (struct Xorriso_extF *) Xorriso_lst_get_text(found_lst, 0);
cmd= found_filter->cmd;
suffix= cmd->suffix;
strip_suffix= cmd->behavior & 8;
}
if(suffix[0]) {
/* >>> would need full iso_rr_path of node for showing */;
old_name= strdup((char *) iso_node_get_name(node));
ret= Xorriso_rename_suffix(xorriso, node, suffix, path, new_name,
(flag & 1) | (strip_suffix ? 2 : 0));
if(ret <= 0 || ret == 2)
goto ex;
}
if(strip_filter) {
while(1) {
if(!explicit_suffix) {
stream= iso_file_get_stream(file);
if(strncmp(stream->class->type, "gzip", 4) == 0) {
suffix= ".gz";
strip_suffix= 1;
} else if(strncmp(stream->class->type, "pizg", 4) == 0) {
suffix= ".gz";
strip_suffix= 0;
} else {
ret= iso_stream_get_external_filter(stream, &cmd, 0);
if(ret > 0) {
suffix= cmd->suffix;
strip_suffix= !(cmd->behavior & 8);
}
}
if(suffix[0]) {
/* >>> would need the current renaming state of path */;
ret= Xorriso_rename_suffix(xorriso, node, suffix, NULL, new_name,
(flag & 1) | (strip_suffix << 1));
if(ret <= 0 || ret == 2)
goto ex;
}
}
ret= iso_file_remove_filter(file, 0);
if(ret != 1)
break;
}
filter_ret= 1;
} else if (internal_filter == 1 || internal_filter == 2) {
filter_ret = iso_file_add_zisofs_filter(file, 1 | (internal_filter & 2));
if(filter_ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
if(!(internal_filter == 2 && filter_ret == (int) ISO_ZISOFS_WRONG_INPUT))
Xorriso_report_iso_error(xorriso, "", filter_ret,
"Error when setting filter to ISO node", 0, "FAILURE", 1);
}
} else if (internal_filter == 3 || internal_filter == 4) {
filter_ret = iso_file_add_gzip_filter(file,
1 | ((internal_filter == 4) << 1));
if(filter_ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", filter_ret,
"Error when setting filter to ISO node", 0, "FAILURE", 1);
}
} else {
#ifndef Xorriso_allow_extf_suiD
/* This is a final safety precaution before iso_file_add_external_filter()
performs fork() and executes the alleged filter program.
*/
if(getuid() != geteuid()) {
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);
ret= 0; goto ex;
}
#endif /* ! Xorriso_allow_extf_suiD */
filter_ret = iso_file_add_external_filter(file, cmd, 0);
if(filter_ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", filter_ret,
"Error when setting filter to ISO node", 0, "FAILURE", 1);
}
}
if(filter_ret != 1 && new_name[0] && old_name != NULL) {
ret = iso_node_set_name(node, old_name);
if (ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
if (!(flag & 1))
Xorriso_report_iso_error(xorriso, "", ret,
"Error when renaming ISO node", 0, "FAILURE", 1);
}
}
if(flag & 2) {
xorriso->pacifier_count++;
Xorriso_pacifier_callback(xorriso, "file filters processed",
xorriso->pacifier_count, xorriso->pacifier_total, "", 0);
}
if(filter_ret < 0) {
ret= 0; goto ex;
}
ret= filter_ret;
ex:;
if(old_name != NULL)
free(old_name);
Xorriso_free_meM(new_name);
Xorriso_process_msg_queues(xorriso,0);
return(ret);
}
/* @param flag bit0= delete filter with the given name
*/
int Xorriso_external_filter(struct XorrisO *xorriso,
char *name, char *options, char *path,
int argc, char **argv, int flag)
{
int ret, delete= 0, behavior= 0, extf_flag= 0, is_banned= 0;
char *what, *what_next, *suffix= "";
struct Xorriso_lsT *lst;
struct Xorriso_extF *found_filter, *new_filter= NULL;
#ifndef Xorriso_allow_external_filterS
/* To be controlled by: configure --enable-external-filters */
sprintf(xorriso->info_text, "%s : Banned at compile time.",
flag & 1 ? "-unregister_filter" : "-external_filter");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
sprintf(xorriso->info_text,
"This may be changed at compile time by ./configure option --enable-external-filters");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
is_banned= 1;
#endif /* ! Xorriso_allow_external_filterS */
#ifndef Xorriso_allow_extf_suiD
/* To be controlled by: configure --enable-external-filters-setuid */
if(getuid() != geteuid()) {
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);
sprintf(xorriso->info_text,
"This may be changed at compile time by ./configure option --enable-external-filters-setuid");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
is_banned= 1;
}
#endif /* ! Xorriso_allow_extf_suiD */
if(is_banned)
return(0);
if(xorriso->filter_list_closed) {
sprintf(xorriso->info_text,
"%s : Banned by previous command -close_filter_list",
flag & 1 ? "-unregister_filter" : "-external_filter");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
if((!(flag & 1)) && path[0] != '/') {
sprintf(xorriso->info_text,
"-external_filter : Given command path does not begin by '/' : ");
Text_shellsafe(path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
delete= flag & 1;
ret= Xorriso_lookup_extf(xorriso, name, &lst, 0);
if(ret < 0)
return(ret);
if(ret > 0) {
if(delete) {
found_filter= (struct Xorriso_extF *) Xorriso_lst_get_text(lst, 0);
if(found_filter->cmd->refcount > 0) {
sprintf(xorriso->info_text,
"-external_filter: Cannot remove filter because it is in use by %.f nodes : ",
(double) found_filter->cmd->refcount);
Text_shellsafe(name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
Xorriso_lst_detach_text(lst, 0);
if(xorriso->filters == lst)
xorriso->filters= Xorriso_lst_get_next(lst, 0);
Xorriso_lst_destroy(&lst, 0);
Xorriso_extf_destroy(xorriso, &found_filter, 0);
ret= 1; goto ex;
}
strcpy(xorriso->info_text,
"-external_filter: filter with given name already existing: ");
Text_shellsafe(name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
if(delete) {
strcpy(xorriso->info_text,
"-external_filter: filter with given name does not exist: ");
Text_shellsafe(name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
for(what= options; what!=NULL; what= what_next) {
what_next= strchr(what, ':');
if(what_next!=NULL) {
*what_next= 0;
what_next++;
}
if(strncmp(what, "default", 7) == 0) {
suffix= "";
behavior= 0;
} else if(strncmp(what, "suffix=", 7) == 0) {
suffix= what + 7;
} else if(strcmp(what, "remove_suffix") == 0) {
behavior|= 8;
} else if(strcmp(what, "if_nonempty") == 0) {
behavior|= 1;
} else if(strcmp(what, "if_reduction") == 0) {
behavior|= 2;
} else if(strcmp(what, "if_block_reduction") == 0) {
behavior|= 4;
} else if(strncmp(what, "used=", 5) == 0) {
; /* this is informational output from -status */
} else if(what[0]) {
strcpy(xorriso->info_text,
"-external_filter: unknown option ");
Text_shellsafe(what, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
ret= Xorriso_extf_new(xorriso, &new_filter, path, argc, argv, behavior,
suffix, name, extf_flag);
if(ret <= 0) {
could_not_create:;
strcpy(xorriso->info_text,
"-external_filter: Could not create filter object");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto ex;
}
ret= Xorriso_lst_append_binary(&(xorriso->filters), (char *) new_filter,0, 4);
if(ret <= 0)
goto could_not_create;
ret= 1;
ex:;
if(ret <= 0) {
if(new_filter != NULL)
Xorriso_extf_destroy(xorriso, &new_filter, 0);
}
return(ret);
}
int Xorriso_status_extf(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag)
/*
bit1= do only report to fp
*/
{
int i, maxl= 4 * SfileadrL;
struct Xorriso_extF *extf;
struct Xorriso_lsT *lst;
char *line;
line= xorriso->result_line;
for(lst= xorriso->filters; lst != NULL; lst= Xorriso_lst_get_next(lst, 0)) {
extf= (struct Xorriso_extF *) Xorriso_lst_get_text(lst, 0);
strcpy(xorriso->result_line, "-external_filter ");
Text_shellsafe(extf->cmd->name, line, 1);
if((int) strlen(line) > maxl)
continue;
strcat(line, " ");
if(extf->cmd->suffix[0]) {
strcat(line, "suffix=");
Text_shellsafe(extf->cmd->suffix, line, 1);
if((int) strlen(line) > maxl)
continue;
strcat(line, ":");
}
if(extf->cmd->behavior & 8)
strcat(line, "remove_suffix:");
if(extf->cmd->behavior & 1)
strcat(line, "if_nonempty:");
if(extf->cmd->behavior & 2)
strcat(line, "if_reduction:");
if(extf->cmd->behavior & 4)
strcat(line, "if_block_reduction:");
sprintf(line + strlen(line), "used=%.f ", (double) extf->cmd->refcount);
if((int) strlen(line) > maxl)
continue;
Text_shellsafe(extf->cmd->path, line, 1);
if((int) strlen(line) > maxl)
continue;
for(i= 1; i < extf->cmd->argc; i++) {
strcat(line, " ");
Text_shellsafe(extf->cmd->argv[i], line, 1);
if((int) strlen(line) > maxl)
break;
}
if(i < extf->cmd->argc)
continue;
strcat(line, " --\n");
Xorriso_status_result(xorriso, filter, fp, flag&2);
}
if(xorriso->filter_list_closed) {
strcpy(line, "-close_filter_list\n");
Xorriso_status_result(xorriso, filter, fp, flag&2);
}
return(1);
}
int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag)
{
int ret;
struct iso_zisofs_ctrl ctrl;
ctrl.version= 0;
ctrl.compression_level= xorriso->zlib_level;
if(xorriso->zisofs_block_size == (1 << 16))
ctrl.block_size_log2= 16;
else if(xorriso->zisofs_block_size == (1 << 17))
ctrl.block_size_log2= 17;
else
ctrl.block_size_log2= 15;
ret= iso_zisofs_set_params(&ctrl, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret < 0) {
Xorriso_report_iso_error(xorriso, "", ret,
"Error when setting zisofs parameters", 0, "FAILURE", 1);
return(0);
}
return(1);
}
int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag)
/*
bit0= do only report non-default settings
bit1= do only report to fp
*/
{
off_t ziso_count= 0, osiz_count= 0;
off_t gzip_count= 0, gunzip_count= 0;
iso_zisofs_get_refcounts(&ziso_count, &osiz_count, 0);
iso_gzip_get_refcounts(&gzip_count, &gunzip_count, 0);
if((flag & 1) && xorriso->zlib_level == xorriso->zlib_level_default &&
xorriso->zisofs_block_size == xorriso->zisofs_block_size_default &&
xorriso->zisofs_by_magic == 0 &&
ziso_count == 0 && osiz_count == 0 &&
gzip_count == 0 && gunzip_count == 0) {
if(filter == NULL)
return(2);
if(filter[0] == 0)
return 2;
}
sprintf(xorriso->result_line,
"-zisofs level=%d:block_size=%dk:by_magic=%s:ziso_used=%.f:osiz_used=%.f",
xorriso->zlib_level, xorriso->zisofs_block_size / 1024,
xorriso->zisofs_by_magic ? "on" : "off",
(double) ziso_count, (double) osiz_count);
sprintf(xorriso->result_line + strlen(xorriso->result_line),
":gzip_used=%.f:gunzip_used=%.f\n",
(double) gzip_count, (double) gunzip_count);
Xorriso_status_result(xorriso, filter, fp, flag&2);
return(1);
}

31
xorriso/filters.h Normal file
View File

@ -0,0 +1,31 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which operate on
data filter objects.
*/
#ifndef Xorriso_pvt_filters_includeD
#define Xorriso_pvt_filters_includeD yes
int Xorriso_extf_new(struct XorrisO *xorriso, struct Xorriso_extF **filter,
char *path, int argc, char **argv, int behavior,
char *suffix, char *name, int flag);
int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
int flag);
int Xorriso_lookup_extf(struct XorrisO *xorriso, char *name,
struct Xorriso_lsT **found_lst, int flag);
int Xorriso_rename_suffix(struct XorrisO *xorriso, IsoNode *node, char *suffix,
char *show_path, char new_name[], int flag);
#endif /* ! Xorriso_pvt_filters_includeD */

1269
xorriso/findjob.c Normal file

File diff suppressed because it is too large Load Diff

430
xorriso/findjob.h Normal file
View File

@ -0,0 +1,430 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of classes FindjoB, ExprnodE, ExprtesT
which perform tree searches in libisofs or in POSIX filesystem.
*/
#ifndef Xorriso_pvt_findjob_includeD
#define Xorriso_pvt_findjob_includeD yes
#define Xorriso_findjob_on_expR yes
#ifdef Xorriso_findjob_on_expR
/*
A single Testnode.
*/
struct ExprtesT {
struct FindjoB *boss;
int invert; /* 0=normal 1=invert result */
/*
0= -false (with invert : -true)
1= -name char *arg1 (regex_t in *arg2)
2= -type char *arg1
3= -damaged
4= -lba_range int *arg1 int *arg2
5= -has_acl
6= -has_xattr
7= -has_aaip
8= -has_filter
9= -wanted_node IsoNode *arg1 (for internal use, arg1 not allocated)
10= -pending_data
11= -decision char *arg1 ("yes", "no")
12= -prune
13= -wholename char *arg1 (regex_t in *arg2)
14= -has_any_xattr
15= -has_md5
16= -disk_name char *arg1 (regex_t in *arg2)
17= -hidden int *arg1 (bit0=iso_rr, bit1=joliet)
18= -has_hfs_crtp char *creator char *type
19= -has_hfs_bless int bless_index
20= -disk_path char *arg1
*/
int test_type;
void *arg1;
void *arg2;
};
/*
A computational node.
A tree of these nodes forms the expression.
Sequences of AND/OR operations form branches, brackets spawn new branches,
NOT inverts node's test resp. subtree result.
*/
struct ExprnodE {
struct ExprnodE *up;
char origin[8];
/* Operators */
int invert; /* 0=normal 1=invert own result (subtree or test, but not op) */
int assoc; /*
0= left : compute own value, combine with left value,
compute right value, combine with current value
1= right: compute own value, compute right value,
combine own and right, combine with left value
*/
int use_shortcuts; /* 0= evaluate all tests of -and and -or,
1= evaluate only until the combined result is known
*/
struct ExprnodE *left;
int left_op; /* 0=OR , 1=AND */
struct ExprnodE *right;
int right_op; /* see left_op */
/* Brackets : a pointer to the first node in a subchain */
struct ExprnodE *sub;
int is_if_then_else;
struct ExprnodE *true_branch;
struct ExprnodE *false_branch;
/* elementary test : if sub!=NULL , test is ignored */
struct ExprtesT *test;
/* Result */
int own_value;
int composed_value;
};
struct FindjoB {
char *start_path;
struct ExprnodE *test_tree;
struct ExprnodE *cursor;
int invert; /* 0=normal 1=set invert-property for next new test node */
int use_shortcuts;
/* 0= echo
1= rm (also rmdir)
2= rm_r
>>> 3= mv target
4= chown user
5= chgrp group
6= chmod mode_and mode_or
7= alter_date type date
8= lsdl
9= chown_r user
10= chgrp_r group
11= chmod_r mode_and mode_or
12= alter_date_r type date
13= find
14= compare disk_equivalent_of_start_path
15= in_iso iso_rr_equivalent_of_start_path
16= not_in_iso iso_rr_equiv
17= update disk_equiv
18= add_missing iso_rr_equiv
19= empty_iso_dir iso_rr_equiv
20= is_full_in_iso iso_rr_equiv
21= report_damage
22= report_lba
23= internal: memorize path of last matching node in found_path
24= getfacl
25= setfacl access_acl default_acl
26= getfattr
27= setfattr
28= set_filter name
29= show_stream
30= internal: count by xorriso->node_counter
31= internal: register in xorriso->node_array
32= internal: widen_hardlinks disk_equiv: update nodes marked in di_do_widen
33= get_any_xattr
34= get_md5
35= check_md5
36= make_md5
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
44= list_extattr
45= set_hfs_crtp creator type
46= get_hfs_crtp
47= set_hfs_bless blessing
48= get_hfs_bless
49= internal: update creator, type, and blessings from persistent isofs.*
*/
int action;
int prune;
/* action specific parameters */
char *target;
char *text_2;
uid_t user;
gid_t group;
mode_t mode_and, mode_or;
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 */
char errmsg[4096];
int errn; /*
>0 = UNIX errno
-1 = close_bracket: no bracket open
-2 = binary operator or closing bracket expected
-3 = unexpected binary operator or closing bracket
-4 = unsupported command
-5 = -then -elseif -else -endif without -if or at wrong place
*/
/* Counts the test matches */
unsigned long match_count;
};
int Exprnode_destroy(struct ExprnodE **fnode, int flag);
int Exprnode_tree_value(struct XorrisO *xorriso, struct ExprnodE *fnode,
int left_value, void *node, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
int Findjob_new(struct FindjoB **o, char *start_path, int flag);
int Findjob_destroy(struct FindjoB **o, int flag);
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
int Findjob_set_commit_filter_2(struct FindjoB *o, int flag);
int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count,
int flag);
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
/* @param value -1= only undamaged files, 1= only damaged files
*/
int Findjob_set_damage_filter(struct FindjoB *o, int value, int flag);
int Findjob_set_test_hidden(struct FindjoB *o, int mode, int flag);
int Findjob_set_crtp_filter(struct FindjoB *o, char *creator, char *hfs_type,
int flag);
int Findjob_set_bless_filter(struct XorrisO *xorriso, struct FindjoB *o,
char *blessing, int flag);
int Findjob_set_decision(struct FindjoB *o, char *decision, int flag);
int Findjob_open_bracket(struct FindjoB *job, int flag);
int Findjob_close_bracket(struct FindjoB *job, int flag);
int Findjob_not(struct FindjoB *job, int flag);
int Findjob_and(struct FindjoB *job, int flag);
int Findjob_or(struct FindjoB *job, int flag);
int Findjob_if(struct FindjoB *job, int flag);
int Findjob_then(struct FindjoB *job, int flag);
int Findjob_else(struct FindjoB *job, int flag);
int Findjob_elseif(struct FindjoB *job, int flag);
int Findjob_endif(struct FindjoB *job, int flag);
int Findjob_test_2(struct XorrisO *xorriso, struct FindjoB *o,
void *node, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
int Findjob_set_action_found_path(struct FindjoB *o, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_target(struct FindjoB *o, int action, char *target,
int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_chgrp(struct FindjoB *o, gid_t group, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_chmod(struct FindjoB *o,
mode_t mode_and, mode_t mode_or, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_chown(struct FindjoB *o, uid_t user,int flag);
/* @param flag bit0= -wholename rather than -name
*/
int Findjob_set_name_expr(struct FindjoB *o, char *name_expr, int flag);
int Findjob_set_file_type(struct FindjoB *o, char file_type, int flag);
/* @param value -1= files without ACL, 1= only files with ACL
*/
int Findjob_set_acl_filter(struct FindjoB *o, int value, int flag);
/* @param value -1= files without xattr, 1= only files with xattr
@param flag bit0=-has_any_xattr rather than -has_xattr
*/
int Findjob_set_xattr_filter(struct FindjoB *o, int value, int flag);
/* @param value -1= files without aaip, 1= only files with aaip
*/
int Findjob_set_aaip_filter(struct FindjoB *o, int value, int flag);
/* @param value -1= files without filter, 1= files with filter
*/
int Findjob_set_filter_filter(struct FindjoB *o, int value, int flag);
/* @param value -1= only without property, 1= only with property
@param flag bit0= pseudo-test:
if no operator is open, do nothing and return 2
*/
int Findjob_set_prop_filter(struct FindjoB *o, int test_type, int value,
int flag);
/* @param value -1= true, 1= false
@param flag bit0= pseudo-test:
if no operator is open, do nothing and return 2
*/
int Findjob_set_false(struct FindjoB *o, int value, int flag);
int Findjob_set_prune(struct FindjoB *o, int flag);
int Findjob_set_action_subjob(struct FindjoB *o, int action,
struct FindjoB *subjob, int flag);
int Findjob_set_action_text_2(struct FindjoB *o, int action, char *target,
char* text_2, int flag);
int Findjob_set_action_type(struct FindjoB *o, int action, int type, int flag);
int Findjob_get_action(struct FindjoB *o, int flag);
int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
uid_t *user, gid_t *group,
mode_t *mode_and, mode_t *mode_or,
int *type, time_t *date, struct FindjoB **subjob,
int flag);
int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
#else /* Xorriso_findjob_on_expR */
struct FindjoB;
int Findjob_new(struct FindjoB **o, char *start_path, int flag);
int Findjob_destroy(struct FindjoB **job, int flag);
/* @return 0=no match , 1=match , <0 = error
*/
int Findjob_test(struct FindjoB *job, char *name,
struct stat *boss_stbuf, struct stat *stbuf,
int depth, int flag);
/* @return <0 error, >=0 see xorriso.c struct FindjoB.action
*/
int Findjob_get_action(struct FindjoB *o, int flag);
/* @return <0 error, >=0 see xorriso.c struct FindjoB.action
*/
int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
uid_t *user, gid_t *group,
mode_t *mode_and, mode_t *mode_or,
int *type, time_t *date, struct FindjoB **subjob,
int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_target(struct FindjoB *o, int action, char *target,
int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_chgrp(struct FindjoB *o, gid_t group, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_chmod(struct FindjoB *o,
mode_t mode_and, mode_t mode_or, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
int Findjob_set_action_found_path(struct FindjoB *o, int flag);
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count,
int flag);
int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
int *end_lba, int *damage_filter, int flag);
int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag);
int Findjob_get_acl_filter(struct FindjoB *o, int *acl_filter, int flag);
int Findjob_get_xattr_filter(struct FindjoB *o, int *xattr_filter, int flag);
int Findjob_get_aaip_filter(struct FindjoB *o, int *aaip_filter, int flag);
int Findjob_get_filter_filter(struct FindjoB *o, int *value, int flag);
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
int Findjob_get_wanted_node(struct FindjoB *o, void **wanted_node, int flag);
int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
#endif /* ! Xorriso_findjob_on_expR */
#endif /* ! Xorriso_pvt_findjob_includeD */

1186
xorriso/iso_img.c Normal file

File diff suppressed because it is too large Load Diff

44
xorriso/iso_img.h Normal file
View File

@ -0,0 +1,44 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which operate on ISO images
and their global properties.
*/
#ifndef Xorriso_pvt_iso_img_includeD
#define Xorriso_pvt_iso_img_includeD yes
int Xorriso_update_volid(struct XorrisO *xorriso, int flag);
int Xorriso_record_boot_info(struct XorrisO *xorriso, int flag);
int Xorriso_assert_volid(struct XorrisO *xorriso, int msc1, int flag);
int Xorriso_is_isohybrid(struct XorrisO *xorriso, IsoFile *bootimg_node,
int flag);
int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
char *bin_path, int platform_id,
int patch_isolinux, int emul, off_t load_size,
unsigned char *id_string,
unsigned char *selection_crit, char *form,
char *filter, FILE *fp, int flag);
int Xorriso__append_boot_params(char *line, ElToritoBootImage *bootimg,
int flag);
int Xorriso_get_volume(struct XorrisO *xorriso, IsoImage **volume,
int flag);
#endif /* ! Xorriso_pvt_iso_img_includeD */

3954
xorriso/iso_manip.c Normal file

File diff suppressed because it is too large Load Diff

77
xorriso/iso_manip.h Normal file
View File

@ -0,0 +1,77 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which manipulate the
libisofs tree model.
*/
#ifndef Xorriso_pvt_iso_manip_includeD
#define Xorriso_pvt_iso_manip_includeD yes
int Xorriso_transfer_properties(struct XorrisO *xorriso, struct stat *stbuf,
char *disk_path, IsoNode *node, int flag);
int Xorriso_graft_split(struct XorrisO *xorriso, IsoImage *volume,
IsoDir *dir, char *disk_path, char *img_name,
char *nominal_source, char *nominal_target,
off_t size, IsoNode **node, int flag);
int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
IsoDir *dir, char *disk_path, char *img_name,
char *nominal_source, char *nominal_target,
off_t offset, off_t cut_size,
IsoNode **node, int flag);
int Xorriso_add_tree(struct XorrisO *xorriso, IsoDir *dir,
char *img_dir_path, char *disk_dir_path,
struct LinkiteM *link_stack, int flag);
int Xorriso_copy_implicit_properties(struct XorrisO *xorriso, IsoDir *dir,
char *full_img_path, char *img_path, char *full_disk_path, int flag);
int Xorriso_mkisofs_lower_r(struct XorrisO *xorriso, IsoNode *node, int flag);
int Xorriso_widen_hardlink(struct XorrisO *xorriso, void * boss_iter,
IsoNode *node,
char *abs_path, char *iso_prefix, char *disk_prefix,
int flag);
int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,
int flag);
int Xorriso_findi_iter(struct XorrisO *xorriso, IsoDir *dir_node, off_t *mem,
IsoDirIter **iter,
IsoNode ***node_array, int *node_count, int *node_idx,
IsoNode **iterated_node, int flag);
int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
IsoDirIter *boss_iter, off_t boss_mem,
char *abs_path, char *show_path,
IsoNode *node, int depth, int flag);
int Xorriso_findi_headline(struct XorrisO *xorriso, struct FindjoB *job,
int flag);
int Xorriso_findi_sorted(struct XorrisO *xorriso, struct FindjoB *job,
off_t boss_mem, int filec, char **filev, int flag);
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);
int Xorriso_get_blessing(struct XorrisO *xorriso, IsoNode *node,
int *bless_idx, char bless_code[17], int flag);
#endif /* ! Xorriso_pvt_iso_manip_includeD */

2519
xorriso/iso_tree.c Normal file

File diff suppressed because it is too large Load Diff

97
xorriso/iso_tree.h Normal file
View File

@ -0,0 +1,97 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which access nodes of the
libisofs tree model.
*/
#ifndef Xorriso_pvt_iso_tree_includeD
#define Xorriso_pvt_iso_tree_includeD yes
#define LIBISO_ISDIR(node) (iso_node_get_type(node) == LIBISO_DIR)
#define LIBISO_ISREG(node) (iso_node_get_type(node) == LIBISO_FILE)
#define LIBISO_ISLNK(node) (iso_node_get_type(node) == LIBISO_SYMLINK)
#define LIBISO_ISCHR(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
S_ISCHR(iso_node_get_mode(node)))
#define LIBISO_ISBLK(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
S_ISBLK(iso_node_get_mode(node)))
#define LIBISO_ISFIFO(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
S_ISFIFO(iso_node_get_mode(node)))
#define LIBISO_ISSOCK(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
S_ISSOCK(iso_node_get_mode(node)))
#define LIBISO_ISBOOT(node) (iso_node_get_type(node) == LIBISO_BOOT)
int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume,
char *path, IsoNode **node, int flag);
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);
int Xorriso_fake_stbuf(struct XorrisO *xorriso, char *path, struct stat *stbuf,
IsoNode **node, int flag);
int Xorriso_node_is_valid(struct XorrisO *xorriso, IsoNode *in_node, int flag);
int Xorriso_path_from_node(struct XorrisO *xorriso, IsoNode *in_node,
char path[SfileadrL], int flag);
int Xorriso_path_from_lba(struct XorrisO *xorriso, IsoNode *node, int lba,
char path[SfileadrL], int flag);
int Xorriso_get_attr_value(struct XorrisO *xorriso, void *in_node, char *path,
char *name, size_t *value_length, char **value, int flag);
int Xorriso_stream_type(struct XorrisO *xorriso, IsoNode *node,
IsoStream *stream, char type_text[], int flag);
int Xorriso_show_du_subs(struct XorrisO *xorriso, IsoDir *dir_node,
char *abs_path, char *rel_path, off_t *size,
off_t boss_mem, int flag);
int Xorriso_sorted_dir_i(struct XorrisO *xorriso, IsoDir *dir_node,
int *filec, char ***filev, off_t boss_mem, int flag);
int Xorriso_obtain_pattern_files_i(
struct XorrisO *xorriso, char *wd, IsoDir *dir,
int *filec, char **filev, int count_limit, off_t *mem,
int *dive_count, int flag);
int Xorriso__start_end_lbas(IsoNode *node,
int *lba_count, int **start_lbas, int **end_lbas,
off_t *size, int flag);
int Xorriso__file_start_lba(IsoNode *node,
int *lba, int flag);
int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
off_t *damage_start, off_t *damage_end,
int flag);
int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path,
IsoNode *node, int flag);
int Xorriso_report_damage(struct XorrisO *xorriso, char *show_path,
IsoNode *node, int flag);
int Xorriso_getfname(struct XorrisO *xorriso, char *path, int flag);
int Xorriso_retrieve_disk_path(struct XorrisO *xorriso, IsoNode *node,
char disk_path[SfileadrL], int flag);
#endif /* ! Xorriso_pvt_iso_tree_includeD */

963
xorriso/lib_mgt.c Normal file
View File

@ -0,0 +1,963 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains functions which manage the relation between xorriso
and the libraries: libburn, libisofs, libisoburn.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <errno.h>
#include <pthread.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)
{
int ret;
ret= burn_abort(4440, burn_abort_pacifier, "xorriso : ");
if(ret<=0) {
fprintf(stderr,
"\nxorriso : ABORT : Cannot cancel burn session and release drive.\n");
return(0);
}
fprintf(stderr,
"xorriso : ABORT : Drive is released and library is shut down now.\n");
fprintf(stderr,
"xorriso : ABORT : Program done. Even if you do not see a shell prompt.\n");
fprintf(stderr, "\n");
exit(1);
}
/* @param flag bit0= asynchronous handling (else catch thread, wait, and exit)
bit1= dealing with MMC drive in critical state
behavior 2 -> behavior 1
*/
int Xorriso_set_signal_handling(struct XorrisO *xorriso, int flag)
{
char *handler_prefix= NULL;
int behavior, mode;
behavior= Xorriso__get_signal_behavior(0);
if(behavior == 0)
return(2);
if(behavior == 2 && !(flag & 2))
mode= 1;
else if(behavior == 3)
mode= 2;
else
mode= (flag & 1) * 0x30;
handler_prefix= calloc(strlen(xorriso->progname)+3+1, 1);
if(handler_prefix==NULL) {
sprintf(xorriso->info_text,
"Cannot allocate memory for setting signal handler");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1);
}
/* <<< */
sprintf(xorriso->info_text, "burn_set_signal_handling(%d)", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
sprintf(handler_prefix, "%s : ", xorriso->progname);
burn_set_signal_handling(handler_prefix, NULL, mode);
free(handler_prefix);
return(1);
}
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag)
{
int ret, major, minor, micro;
char *queue_sev, *print_sev, reason[1024];
struct iso_zisofs_ctrl zisofs_ctrl= {0, 6, 15};
/* First an ugly compile time check for header version compatibility.
If everthing matches, then no C code is produced. In case of mismatch,
intentionally faulty C code will be inserted.
*/
/* The minimum requirement of xorriso towards the libisoburn header
at compile time is defined in xorriso/xorrisoburn.h
xorriso_libisoburn_req_major
xorriso_libisoburn_req_minor
xorriso_libisoburn_req_micro
It gets compared against the version macros in libburn/libburn.h :
isoburn_header_version_major
isoburn_header_version_minor
isoburn_header_version_micro
If the header is too old then the following code shall cause failure of
cdrskin compilation rather than to allow production of a program with
unpredictable bugs or memory corruption.
The compiler messages supposed to appear in this case are:
error: 'LIBISOBURN_MISCONFIGURATION' undeclared (first use in this function)
error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisoburn_dot_h_TOO_OLD__SEE_xorrisoburn_dot_c' undeclared (first use in this function)
error: 'LIBISOBURN_MISCONFIGURATION_' undeclared (first use in this function)
*/
/* The indendation is an advise of man gcc to help old compilers ignoring */
#if xorriso_libisoburn_req_major > isoburn_header_version_major
#define Isoburn_libisoburn_dot_h_too_olD 1
#endif
#if xorriso_libisoburn_req_major == isoburn_header_version_major && xorriso_libisoburn_req_minor > isoburn_header_version_minor
#define Isoburn_libisoburn_dot_h_too_olD 1
#endif
#if xorriso_libisoburn_req_minor == isoburn_header_version_minor && xorriso_libisoburn_req_micro > isoburn_header_version_micro
#define Isoburn_libisoburn_dot_h_too_olD 1
#endif
#ifdef Isoburn_libisoburn_dot_h_too_olD
LIBISOBURN_MISCONFIGURATION = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisoburn_dot_h_TOO_OLD__SEE_xorrisoburn_dot_c = 0;
LIBISOBURN_MISCONFIGURATION_ = 0;
#endif
/* End of ugly compile time test (scroll up for explanation) */
reason[0]= 0;
ret= isoburn_initialize(reason, 0);
if(ret==0) {
sprintf(xorriso->info_text, "Cannot initialize libraries");
if(reason[0])
sprintf(xorriso->info_text+strlen(xorriso->info_text),
". Reason given:\n%s", reason);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(0);
}
ret= isoburn_is_compatible(isoburn_header_version_major,
isoburn_header_version_minor,
isoburn_header_version_micro, 0);
if(ret<=0) {
isoburn_version(&major, &minor, &micro);
sprintf(xorriso->info_text,
"libisoburn version too old: %d.%d.%d . Need at least: %d.%d.%d .\n",
major, minor, micro,
isoburn_header_version_major, isoburn_header_version_minor,
isoburn_header_version_micro);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1);
}
xorriso->libs_are_started= 1;
queue_sev= "ALL";
if(xorriso->library_msg_direct_print) {
/* >>> need option for controlling this in XorrisO.
See also Xorriso_msgs_submit */;
print_sev= xorriso->report_about_text;
} else
print_sev= "NEVER";
iso_set_msgs_severities(queue_sev, print_sev, "libsofs : ");
burn_msgs_set_severities(queue_sev, print_sev, "libburn : ");
/* ??? >>> do we want united queues ? */
/* burn_set_messenger(iso_get_messenger()); */
isoburn_set_msgs_submit(Xorriso_msgs_submit_void, (void *) xorriso,
(3<<2) | 128 , 0);
ret= Xorriso_set_signal_handling(xorriso, 0);
if(ret <= 0)
return(ret);
ret = iso_zisofs_get_params(&zisofs_ctrl, 0);
if (ret == 1) {
xorriso->zisofs_block_size= xorriso->zisofs_block_size_default=
(1 << zisofs_ctrl.block_size_log2);
xorriso->zlib_level= xorriso->zlib_level_default=
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);
Xorriso_process_msg_queues(xorriso,0);
if(reason[0]) {
sprintf(xorriso->info_text, "%s", reason);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
}
strcpy(xorriso->info_text, "Using ");
strncat(xorriso->info_text, burn_scsi_transport_id(0), 1024);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
return(1);
}
/* @param flag bit0= global shutdown of libraries */
int Xorriso_detach_libraries(struct XorrisO *xorriso, int flag)
{
Xorriso_give_up_drive(xorriso, 3);
if(xorriso->in_volset_handle!=NULL) { /* standalone image */
iso_image_unref((IsoImage *) xorriso->in_volset_handle);
xorriso->in_volset_handle= NULL;
Sectorbitmap_destroy(&(xorriso->in_sector_map), 0);
Xorriso_destroy_di_array(xorriso, 0);
Xorriso_destroy_hln_array(xorriso, 0);
xorriso->boot_count= 0;
}
if(flag&1) {
if(xorriso->libs_are_started==0)
return(0);
isoburn_finish();
}
return(1);
}
/* @param flag bit0= suppress messages below UPDATE
bit1= suppress messages below FAILURE
*/
int Xorriso_set_image_severities(struct XorrisO *xorriso, int flag)
{
char *queue_sev, *print_sev;
if(flag&2)
queue_sev= "FAILURE";
else if(flag&1)
queue_sev= "UPDATE";
else
queue_sev= "ALL";
if(xorriso->library_msg_direct_print)
print_sev= xorriso->report_about_text;
else
print_sev= "NEVER";
iso_set_msgs_severities(queue_sev, print_sev, "libisofs : ");
return(1);
}
/* @param flag bit0=prepare for a burn run */
int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag)
{
int ret, abort_on_number;
char *sev_text;
static int note_number= -1, failure_number= -1;
if(note_number==-1)
Xorriso__text_to_sev("NOTE", &note_number, 0);
if(failure_number==-1)
Xorriso__text_to_sev("FAILURE", &failure_number, 0);
sev_text= xorriso->abort_on_text;
ret= Xorriso__text_to_sev(xorriso->abort_on_text, &abort_on_number, 0);
if(ret<=0)
return(ret);
if(abort_on_number<note_number)
sev_text= "NOTE";
else if(abort_on_number>failure_number)
sev_text= "FAILURE";
ret= iso_set_abort_severity(sev_text);
return(ret>=0);
}
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag)
{
int major, minor, micro;
int req_major, req_minor, req_micro;
iso_lib_version(&major, &minor, &micro);
isoburn_libisofs_req(&req_major, &req_minor, &req_micro);
sprintf(xorriso->result_line,
"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,
"libburn in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro, req_major, req_minor, req_micro);
Xorriso_result(xorriso, 0);
strcpy(xorriso->result_line, "libburn OS adapter: ");
strncat(xorriso->result_line, burn_scsi_transport_id(0), 1024);
strcat(xorriso->result_line, "\n");
Xorriso_result(xorriso, 0);
isoburn_version(&major, &minor, &micro);
sprintf(xorriso->result_line,
"libisoburn in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro,
isoburn_header_version_major, isoburn_header_version_minor,
isoburn_header_version_micro);
Xorriso_result(xorriso, 0);
return(1);
}
int Xorriso__sev_to_text(int severity, char **severity_name,
int flag)
{
int ret;
ret= iso_sev_to_text(severity, severity_name);
if(ret>0)
return(ret);
ret= burn_sev_to_text(severity, severity_name, 0);
if(ret>0)
return(ret);
*severity_name= "";
return(0);
}
int Xorriso__text_to_sev(char *severity_name, int *severity_number, int flag)
{
int ret= 1;
char severity[20];
Xorriso__to_upper(severity_name, severity, (int) sizeof(severity), 0);
ret= iso_text_to_sev(severity, severity_number);
if(ret>0)
return(ret);
ret= burn_text_to_sev(severity, severity_number, 0);
return(ret);
}
int Xorriso__severity_cmp(char *sev1, char *sev2)
{
int s1= 0x7fffffff, s2= 0x7fffffff, ret;
char *default_sev= "FATAL";
ret= Xorriso__text_to_sev(sev1, &s1, 0);
if(ret <= 0)
Xorriso__text_to_sev(default_sev, &s1, 0);
ret= Xorriso__text_to_sev(sev2, &s2, 0);
if(ret <= 0)
Xorriso__text_to_sev(default_sev, &s2, 0);
if(s1 < s2)
return -1;
if(s1 > s2)
return(1);
return(0);
}
char *Xorriso__severity_list(int flag)
{
return(burn_list_sev_texts(0));
}
/* @param flag bit0= report libisofs error text
bit1= victim is disk_path
bit2= do not inquire libisofs, report msg_text and min_severity
*/
int Xorriso_report_iso_error(struct XorrisO *xorriso, char *victim,
int iso_error_code, char msg_text[], int os_errno,
char min_severity[], int flag)
{
int error_code, iso_sev, min_sev, ret;
char *sev_text_pt, *msg_text_pt= NULL;
char *sfe= NULL;
static int sorry_sev= -1;
Xorriso_alloc_meM(sfe, char, 6 * SfileadrL);
if(sorry_sev<0)
Xorriso__text_to_sev("SORRY", &sorry_sev, 0);
if(flag&4) {
error_code= 0x00050000;
Xorriso__text_to_sev(min_severity, &iso_sev, 0);
} else {
error_code= iso_error_get_code(iso_error_code);
if(error_code < 0x00030000 || error_code >= 0x00040000)
error_code= (error_code & 0xffff) | 0x00050000;
if(flag&1)
msg_text_pt= (char *) iso_error_to_msg(iso_error_code);
iso_sev= iso_error_get_severity(iso_error_code);
}
if(msg_text_pt==NULL)
msg_text_pt= msg_text;
if(iso_sev >= sorry_sev && (flag & 2) && victim[0])
Xorriso_msgs_submit(xorriso, 0, victim, 0, "ERRFILE", 0);
sev_text_pt= min_severity;
Xorriso__text_to_sev(min_severity, &min_sev, 0);
if(min_sev < iso_sev && !(flag&4))
Xorriso__sev_to_text(iso_sev, &sev_text_pt, 0);
strcpy(sfe, msg_text_pt);
if(victim[0]) {
strcat(sfe, ": ");
Text_shellsafe(victim, sfe+strlen(sfe), 0);
}
ret= Xorriso_msgs_submit(xorriso, error_code, sfe, os_errno, sev_text_pt, 4);
ex:;
Xorriso_free_meM(sfe);
return(ret);
}
int Xorriso_get_local_charset(struct XorrisO *xorriso, char **name, int flag)
{
(*name)= iso_get_local_charset(0);
return(1);
}
int Xorriso_set_local_charset(struct XorrisO *xorriso, char *name, int flag)
{
int ret;
char *nl_charset;
iconv_t iconv_ret= (iconv_t) -1;
nl_charset= nl_langinfo(CODESET);
if(name == NULL)
name= nl_charset;
if(name != NULL) {
iconv_ret= iconv_open(nl_charset, name);
if(iconv_ret == (iconv_t) -1)
goto cannot;
else
iconv_close(iconv_ret);
}
ret= iso_set_local_charset(name, 0);
if(ret <= 0) {
cannot:;
sprintf(xorriso->info_text,
"-local_charset: Cannot assume as local character set: ");
Text_shellsafe(name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(0);
}
sprintf(xorriso->info_text, "Local character set is now assumed as: ");
Text_shellsafe(name, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(1);
}
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], *text= NULL;
#ifdef Xorriso_fetch_with_msg_queueS
int locked= 0, uret;
#endif
#ifdef Xorriso_with_libjtE
char *msg;
#endif
if(!xorriso->libs_are_started) {
ret= 1; goto ex;
}
#ifdef Xorriso_fetch_with_msg_queueS
Xorriso_alloc_meM(text, char, sizeof(xorriso->info_text));
ret= pthread_mutex_lock(&(xorriso->lib_msg_queue_lock));
if(ret != 0) {
Xorriso_msgs_submit(xorriso, 0,
"Cannot aquire mutex lock for processing library message queues",
ret, "FATAL", 0);
} else
locked= 1;
#else /* Xorriso_fetch_with_msg_queueS */
text= xorriso->info_text;
#endif /* ! Xorriso_fetch_with_msg_queueS */
for(pass= 0; pass< 3; pass++) {
while(1) {
tunneled= 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(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, text, severity);
else {
ret= burn_msgs_obtain("ALL", &error_code, text, &os_errno, severity);
if((error_code>=0x00030000 && error_code<0x00040000) ||
(error_code>=0x00050000 && error_code<0x00060000))
tunneled= -1; /* "libisofs:" */
else if(error_code>=0x00060000 && error_code<0x00070000)
tunneled= 1; /* "libisoburn:" */
}
if(ret<=0)
break;
/* <<< tunneled MISHAP from libisoburn through libburn
or well known error codes of MISHAP events
With libburn-0.4.4 this is not necessary */
if(error_code==0x5ff73 || error_code==0x3ff73 ||
error_code==0x3feb9 || error_code==0x3feb2)
strcpy(severity, "MISHAP");
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, text, os_errno,
severity, name_prefix_code << 2);
count++;
}
}
if(xorriso->library_msg_direct_print && count>0) {
sprintf(text," (%d library messages repeated by xorriso)\n", count);
#ifdef Xorriso_fetch_with_msg_queueS
Xorriso_msgs_submit(xorriso, 0, text, 0, "NOTE", 256);
#else /* Xorriso_fetch_with_msg_queueS */
Xorriso_info(xorriso, 0);
#endif /* Xorriso_fetch_with_msg_queueS */
}
ret= 1;
ex:;
#ifdef Xorriso_fetch_with_msg_queueS
if(locked) {
uret= pthread_mutex_unlock(&(xorriso->lib_msg_queue_lock));
if(uret != 0) {
Xorriso_msgs_submit(xorriso, 0,
"Cannot release mutex lock for processing library message queues",
uret, "FATAL", 0);
ret= -1;
}
}
Xorriso_free_meM(text);
#endif /* Xorriso_fetch_with_msg_queueS */
return(ret);
}
int Xorriso_md5_start(struct XorrisO *xorriso, void **ctx, int flag)
{
int ret;
ret= iso_md5_start(ctx);
if(ret == 1)
return(1);
Xorriso_no_malloc_memory(xorriso, NULL, 0);
return(-1);
}
int Xorriso_md5_compute(struct XorrisO *xorriso, void *ctx,
char *data, int datalen, int flag)
{
iso_md5_compute(ctx, data, datalen);
return(1);
}
int Xorriso_md5_end(struct XorrisO *xorriso, void **ctx, char md5[16],
int flag)
{
int ret;
ret= iso_md5_end(ctx, md5);
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
return(0);
return(1);
}
/* @param flag bit0= avoid library calls
*/
int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
int flag)
{
int major, minor, micro;
xorriso_id[0]= 0;
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)
strcat(xorriso_id, Xorriso_timestamP);
if(flag & 1)
return(1);
isoburn_version(&major, &minor, &micro);
if(strlen(xorriso_id) < 100)
sprintf(xorriso_id + strlen(xorriso_id),
", LIBISOBURN-%d.%d.%d", major, minor, micro);
iso_lib_version(&major, &minor, &micro);
if(strlen(xorriso_id) < 100)
sprintf(xorriso_id + strlen(xorriso_id),
", LIBISOFS-%d.%d.%d", major, minor, micro);
burn_version(&major, &minor, &micro);
if(strlen(xorriso_id) < 100)
sprintf(xorriso_id + strlen(xorriso_id),
", LIBBURN-%d.%d.%d", major, minor, micro);
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 */
}
int Xorriso_list_extras_result(struct XorrisO *xorriso, char *mode,
char *what, int flag)
{
if(mode[0] != 0 && strcmp(mode, "all") != 0) {
if(strcmp(mode, what) != 0 &&
(mode[0] != '-' || strcmp(mode + 1, what) != 0))
return(2);
}
Xorriso_result(xorriso, 0);
return(1);
}
int Xorriso_list_extras(struct XorrisO *xorriso, char *mode, int flag)
{
int ret;
if(strcmp(mode, "codes") == 0) {
sprintf(xorriso->result_line,
"List of xorriso extra feature codes. Usable with or without dash.\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "Local ACL : -acl\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "Local xattr : -xattr\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "Jigdo files : -jigdo\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "zisofs : -zisofs\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "Ext. filters : -external_filter\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "DVD obs 64 kB: -dvd_obs\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line, "Readline : -use_readline\n");
Xorriso_result(xorriso, 0);
return(1);
}
sprintf(xorriso->result_line,
"List of xorriso extra features. yes = enabled , no = disabled\n");
Xorriso_list_extras_result(xorriso, mode, "list_extras", 0);
ret= iso_local_attr_support(3);
sprintf(xorriso->result_line, "Local ACL : %s\n", ret & 1 ? "yes" : "no");
Xorriso_list_extras_result(xorriso, mode, "acl", 0);
sprintf(xorriso->result_line, "Local xattr : %s\n", ret & 2 ? "yes" : "no");
Xorriso_list_extras_result(xorriso, mode, "xattr", 0);
sprintf(xorriso->result_line, "Jigdo files : %s\n",
#ifdef Xorriso_with_libjtE
"yes");
#else
"no");
#endif
Xorriso_list_extras_result(xorriso, mode, "jigdo", 0);
ret= iso_file_add_zisofs_filter(NULL, 4);
sprintf(xorriso->result_line, "zisofs : %s\n", ret == 2 ? "yes" : "no");
Xorriso_list_extras_result(xorriso, mode, "zisofs", 0);
sprintf(xorriso->result_line, "Ext. filters : %s\n",
#ifdef Xorriso_allow_external_filterS
#ifdef Xorriso_allow_extf_suiD
"yes , setuid allowed");
#else
"yes , setuid banned");
#endif
#else
"no");
#endif
Xorriso_list_extras_result(xorriso, mode, "external_filter", 0);
sprintf(xorriso->result_line, "DVD obs 64 kB: %s\n",
#ifdef Xorriso_dvd_obs_default_64K
"yes");
#else
"no");
#endif
Xorriso_list_extras_result(xorriso, mode, "dvd_obs", 0);
sprintf(xorriso->result_line, "Readline : %s\n",
#ifdef Xorriso_with_readlinE
"yes");
#else
"no");
#endif
Xorriso_list_extras_result(xorriso, mode, "use_readline", 0);
return(1);
}
/* @param flag bit0= set num_tiles to default value
bit1= set tile_blocks to default value
*/
int Xorriso_set_data_cache(struct XorrisO *xorriso, void *o,
int num_tiles, int tile_blocks, int flag)
{
int ret, tiles, blocks, set_flag;
struct isoburn_read_opts *ropts;
ropts= (struct isoburn_read_opts *) o;
if(flag & (1 | 2)) {
isoburn_ropt_get_data_cache(ropts, &tiles, &blocks, &set_flag, 1);
if(flag & 1)
num_tiles= tiles;
if(flag & 2)
tile_blocks= blocks;
}
ret= isoburn_ropt_set_data_cache(ropts, num_tiles, tile_blocks, 0);
return(ret);
}

73
xorriso/lib_mgt.h Normal file
View File

@ -0,0 +1,73 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which manage the relation
between xorriso and the libraries: libburn, libisofs, and libisoburn.
*/
#ifndef Xorriso_pvt_x_includeD
#define Xorriso_pvt_x_includeD yes
#ifndef Xorriso_standalonE
/* The library which does the ISO 9660 / RockRidge manipulations */
#include <libisofs/libisofs.h>
/* The library which does MMC optical drive operations */
#include <libburn/libburn.h>
/* The library which enhances overwriteable media with ISO 9660 multi-session
capabilities via the method invented by Andy Polyakov for growisofs */
#include <libisoburn/libisoburn.h>
/* The official xorriso options API. "No shortcuts" */
#include "xorriso.h"
/* The inner description of XorrisO */
#include "xorriso_private.h"
/* The inner isofs- and burn-library interface */
#include "xorrisoburn.h"
#else /* ! Xorriso_standalonE */
#include "../libisofs/libisofs.h"
#include "../libburn/libburn.h"
#include "../libisoburn/libisoburn.h"
#include "xorriso.h"
#include "xorriso_private.h"
#include "xorrisoburn.h"
#endif /* Xorriso_standalonE */
int Xorriso_abort(struct XorrisO *xorriso, int flag);
/* @param flag bit0= suppress messages below UPDATE
bit1= suppress messages below FAILURE
*/
int Xorriso_set_image_severities(struct XorrisO *xorriso, int flag);
int Xorriso__sev_to_text(int severity, char **severity_name,
int flag);
/* @param flag bit0= report libisofs error text
bit1= victim is disk_path
bit2= do not inquire libisofs, report msg_text and min_severity
*/
int Xorriso_report_iso_error(struct XorrisO *xorriso, char *victim,
int iso_error_code, char msg_text[], int os_errno,
char min_severity[], int flag);
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
#endif /* ! Xorriso_pvt_x_includeD */

15
xorriso/make_docs.sh Executable file
View File

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

527
xorriso/make_xorriso_1.c Normal file
View File

@ -0,0 +1,527 @@
/*
( cd xorriso ; cc -g -Wall -o make_xorriso_1 make_xorriso_1.c )
*/
/*
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 - 2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
/* The conversion state
*/
struct Mx1 {
char prog[4096];
int count_in;
int count_out;
int skipping; /* <0 stacked skipping , 0= no , >0 counting down */
};
int Mx1_substitute(struct Mx1 *m, char line_in[256], char line_out[256],
int raw, int upto, int flag);
int Mx1_init(struct Mx1 *m, char *prog, int flag)
{
strncpy(m->prog, prog, sizeof(m->prog) - 1);
m->prog[sizeof(m->prog) - 1]= 0;
m->count_in= 0;
m->count_out= 0;
m->skipping= 0;
return(1);
}
int Mx1_report_error(struct Mx1 *m, char *text, int flag)
{
fprintf(stderr, "%s : line %d : %s\n", m->prog, m->count_in, text);
return(1);
}
int Mx1__get_word(char *line, char word[256], char **remainder, int flag)
{
char *cpt, *start;
int l;
word[0]= 0;
*remainder= NULL;
for(cpt= line; *cpt != 0 && isspace(*cpt); cpt++);
if(*cpt == 0)
return(0);
start= cpt;
for(cpt= line; *cpt != 0 && ! isspace(*cpt); cpt++);
l= cpt - start;
if(l > 0)
strncpy(word, start, l);
word[l]= 0;
*remainder= cpt;
return(1);
}
int Mx1_is_wrap(struct Mx1 *m, char wraps[][20], char *start, char **found,
int flag)
{
int i;
for(i= 0; wraps[i][0] != 0; i++)
if(strncmp(start, wraps[i], strlen(wraps[i])) == 0)
break;
if(wraps[i][0] != 0) {
if(found != NULL)
*found= wraps[i];
return(1);
}
return(0);
}
int Mx1_is_bold_wrap(struct Mx1 *m, char *start, char **found, int flag)
{
int ret;
static char bold_wraps[][20]= {
"@b{", "@dfn{", "@emph{", "@strong{", "@command{",
"" };
ret= Mx1_is_wrap(m, bold_wraps, start, found, 0);
return(ret);
}
int Mx1_is_normal_wrap(struct Mx1 *m, char *start, char **found, int flag)
{
int ret;
static char normal_wraps[][20]= {
"@var{", "@code{", "@i{", "@abbr{", "@file{", "@option{", "@samp{", "@r{",
"" };
ret= Mx1_is_wrap(m, normal_wraps, start, found, 0);
return(ret);
}
int Mx1_is_ignored_wrap(struct Mx1 *m, char *start, char **found, int flag)
{
int ret;
static char ignored_wraps[][20]= {
"@ref{", "@xref{",
"" };
ret= Mx1_is_wrap(m, ignored_wraps, start, found, 0);
return(ret);
}
int Mx1_is_any_wrap(struct Mx1 *m, char *start, char **found, int flag)
{
int ret;
ret= Mx1_is_bold_wrap(m, start, found, 0);
if(ret > 0)
return(1);
ret= Mx1_is_normal_wrap(m, start, found, 0);
if(ret > 0)
return(2);
ret= Mx1_is_ignored_wrap(m, start, found, 0);
if(ret > 0)
return(3);
return(0);
}
/* @param flag bit0= recursion
bit1= drop content of brackets
*/
int Mx1_rewrap(struct Mx1 *m, char **read_pt, char **write_pt,
char *write_base, char *envelope,
char *front, char *back, int flag)
{
char *rpt, *wpt, *ept, content[256], msg[256];
int l, ret;
rpt= *read_pt;
wpt= *write_pt;
ept= strchr(rpt, '}');
if(ept == NULL) {
sprintf(msg, "No closing bracket found for '%s'", envelope);
Mx1_report_error(m, msg, 0);
return(-1);
}
/* Mapped {...} content is subject to the rules except {...} mapping. */
l= ept - rpt;
if(flag & 2)
l= 0;
if(l > 0) {
ret= Mx1_substitute(m, rpt, content, 0, l, 1);
if(ret <= 0)
return(ret);
l= strlen(content);
}
if((wpt - write_base) + l + strlen(front) + strlen(back) > 255) {
Mx1_report_error(m, "Line length overflow while text substitution", 0);
return(-1);
}
strcpy(wpt, front);
wpt+= strlen(front);
if(l > 0)
strncpy(wpt, content, l);
wpt+= l;
strcpy(wpt, back);
wpt+= strlen(back);
(*read_pt)+= ept - rpt;
(*write_pt)= wpt;
return(1);
}
/* @param flag bit0= recursion
*/
int Mx1_substitute(struct Mx1 *m, char line_in[256], char line_out[256],
int raw, int upto, int flag)
{
char *rpt, *wpt, *found;
int ret, typ= 0;
wpt= line_out;
for(rpt= line_in; rpt - line_in < upto && *rpt != 0; rpt++) {
if(rpt - line_in < raw) {
*(wpt++)= *rpt;
continue;
}
if(*rpt == '@') {
typ= 0;
if(!(flag & 1))
typ= Mx1_is_any_wrap(m, rpt, &found, 0);
if(typ == 1) {
/* @b{...}, @command{...}, @dfn{...}, @emph{...}, @strong{...}
get mapped to \fB...\fR .
*/
rpt+= strlen(found);
ret= Mx1_rewrap(m, &rpt, &wpt, line_out,
found , "\\fB", "\\fR", flag & 1);
if(ret <= 0)
return(ret);
} else if(typ == 2) {
/* @abbr{...}, @code{...}, @file{...}, @i{...}, @option{...}, @r{...},
@ref{...}, @samp{...},@var{...}, get mapped to ... .
*/
rpt+= strlen(found);
ret= Mx1_rewrap(m, &rpt, &wpt, line_out, found, "", "", flag & 1);
if(ret <= 0)
return(ret);
} else if(typ == 3) {
/* @ref{...}, @xref{...} get mapped to empty text.
*/
rpt+= strlen(found);
ret= Mx1_rewrap(m, &rpt, &wpt, line_out, found , "", "",
(flag & 1) | 2);
if(ret <= 0)
return(ret);
} else if(strncmp(rpt, "@email{", 7) == 0 && !(flag & 1)) {
/* @email{...} gets mapped to <...> . */
rpt+= 7;
ret= Mx1_rewrap(m, &rpt, &wpt, line_out, "@email{", "<", ">", 0);
if(ret <= 0)
return(ret);
} else if(strncmp(rpt, "@minus{}", 8) == 0) {
/* @minus{} will become "-". */
if((wpt - line_out) + 1 > 255)
goto overflow;
*(wpt++)= '-';
rpt+= 7;
} else if(strncmp(rpt, "@@", 2) == 0 ||
strncmp(rpt, "@{", 2) == 0 ||
strncmp(rpt, "@}", 2) == 0) {
/* @@ , @{, @} will get stripped of their first @. */
if((wpt - line_out) + 1 > 255)
goto overflow;
*(wpt++)= *(rpt + 1);
rpt++;
} else {
if((wpt - line_out) + 1 > 255)
goto overflow;
*(wpt++)= *(rpt);
}
} else if(*rpt == '\\') {
/* "\" becomes "\\" */
if((wpt - line_out) + 2 > 255)
goto overflow;
*(wpt++)= '\\';
*(wpt++)= '\\';
} else if((wpt - line_out) + 1 > 255) {
overflow:;
Mx1_report_error(m, "Line length overflow while text substitution", 0);
return(-1);
} else
*(wpt++)= *rpt;
}
*wpt= 0;
return(1);
}
/*
@return 1= line_out is valid, 0= do not put out line_out, -1 = error
*/
int Mx1_convert(struct Mx1 *m, char line_in[256], char line_out[256], int flag)
{
int l, num, keep= 0, ret, raw, i, backslash_count;
char word[256], buf[256], *remainder, *wpt;
m->count_in++;
l= strlen(line_in);
if(m->skipping > 0) {
m->skipping--;
return(0);
}
/* The first line gets discarded. */
if(m->count_in == 1)
return(0);
/* Line start "@c man " will become "", the remainder is put out unaltered. */
if(strncmp(line_in, "@c man ", 7) == 0) {
strcpy(line_out, line_in + 7);
m->count_out++;
return(1);
}
/* Lines "@*" will be converted to ".br" */
if(strcmp(line_in, "@*") == 0) {
strcpy(line_out, ".br");
m->count_out++;
return(1);
}
/* @c man-ignore-lines N will discard N following lines.
"@c man-ignore-lines begin" discards all following lines
up to "@c man-ignore-lines end".
*/
if(strncmp(line_in, "@c man-ignore-lines ", 20) == 0) {
if(strcmp(line_in + 20, "begin") == 0) {
m->skipping--;
return(0);
} else if(strcmp(line_in + 20, "end") == 0) {
if(m->skipping < 0)
m->skipping++;
return(0);
} else if(m->skipping == 0) {
num= 0;
sscanf(line_in + 20, "%d", &num);
if(num > 0) {
m->skipping= num;
return(0);
}
}
Mx1_report_error(m, "Inappropriate use of '@c man-ignore-lines'", 0);
return(-1);
}
/* Line blocks of "@menu" "@end menu" will be discarded. */
if(strcmp(line_in, "@menu") == 0) {
m->skipping--;
return(0);
}
if(strcmp(line_in, "@end menu") == 0) {
if(m->skipping < 0)
m->skipping++;
return(0);
}
if(m->skipping)
return(0);
/* "@item -word words" becomes "\fB\-word\fR words". */
/* "@item word words" becomes "\fBword\fR words". */
if(strncmp(line_in, "@item ", 6) == 0) {
ret= Mx1__get_word(line_in + 6, word, &remainder, 0);
if(ret <= 0) {
Mx1_report_error(m, "Found no word after @item", 0);
return(0);
}
strcpy(buf, "\\fB");
if(word[0] == '-') {
if(l >= 255) {
Mx1_report_error(m, "Line length overflow while converting @item", 0);
return(-1);
}
strcat(buf, "\\");
}
/* Substitute option text */
raw= strlen(buf);
strcat(buf, word);
ret= Mx1_substitute(m, buf, line_out, raw, strlen(buf), 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, strlen(buf), 0);
if(ret <= 0)
return(-1);
m->count_out++;
return(1);
}
/* @strong{... } gets mapped to \fB...\fR . */
/* @command{... } gets mapped to \fB...\fR . */
/* @minus{} will become "-". */
/* Mapped {...} content is subject to the rules except {...} mapping. */
/* @@ , @{, @} will get stripped of their first @. */
/* "\" becomes "\\" */
if(line_in[0] != '@' ||
Mx1_is_any_wrap(m, line_in, NULL, 0) > 0 ||
strncmp(line_in, "@minus{}", 8) == 0 ||
strncmp(line_in, "@@", 2) == 0 ||
strncmp(line_in, "@{", 2) == 0 ||
strncmp(line_in, "@}", 2) == 0 ) {
keep= 1;
ret= Mx1_substitute(m, line_in, line_out, 0, strlen(line_in), 0);
if(ret <= 0)
return(-1);
}
/* Other lines which begin by "@" will be discarded. */
if(! keep) {
if(line_in[0] == '@')
return(0);
strcpy(line_out, line_in);
}
/* "-" which are not preceded by an uneven number of "\" will get
prepended one "\".
*/
l= strlen(line_out);
backslash_count= 0;
wpt= buf;
for(i= 0; i < l; i++) {
if(line_out[i] == '\\')
backslash_count++;
else if(line_out[i] == '-') {
if(backslash_count % 2 == 0)
*(wpt++)= '\\';
backslash_count= 0;
} else
backslash_count= 0;
*(wpt++)= line_out[i];
}
*wpt= 0;
strcpy(line_out, buf);
m->count_out++;
return(1);
}
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[1024]= {"xorriso/xorriso.texi"};
static char name_out[1024]= {"xorriso/xorriso.1"};
struct Mx1 m;
FILE *fp_in= stdin, *fp_out= stdout;
Mx1_init(&m, argv[0], 0);
if(argc < 2) {
usage:;
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");
fprintf(stderr, " -xorrecord process xorriso/xorrecord.texi\n");
exit(2);
}
for(i= 1; i < argc; i++) {
if(strcmp(argv[i], "-filter") == 0) {
as_filter= 1;
} else if(strcmp(argv[i], "-auto") == 0) {
as_filter= 0;
} else if(strcmp(argv[i], "-xorrisofs") == 0) {
strcpy(name_in, "xorriso/xorrisofs.texi");
strcpy(name_out, "xorriso/xorrisofs.1");
} else if(strcmp(argv[i], "-xorrecord") == 0) {
strcpy(name_in, "xorriso/xorrecord.texi");
strcpy(name_out, "xorriso/xorrecord.1");
} else {
fprintf(stderr, "%s : unknown option %s\n", argv[0], argv[i]);
goto usage;
}
}
if(!as_filter) {
fp_in= fopen(name_in, "r");
if(fp_in == NULL) {
fprintf(stderr, "%s : failed to fopen( %s ,r) : %d %s\n",
argv[0], name_in, errno, strerror(errno));
exit(3);
}
fp_out= fopen(name_out, "w");
if(fp_out == NULL) {
fprintf(stderr, "%s : failed to fopen( %s ,w) : %d %s\n",
argv[0], name_out, errno, strerror(errno));
exit(4);
}
}
while(1) {
got= fgets(line_in, sizeof(line_in), fp_in);
if(got == NULL)
break;
l= strlen(line_in);
while(l > 0) {
if(line_in[l - 1] == '\r' || line_in[l - 1] == '\n') {
line_in[l - 1] = 0;
l--;
} else
break;
}
ret= Mx1_convert(&m, line_in, line_out, 0);
if(ret < 0)
exit(1);
if(ret == 0)
continue;
fprintf(fp_out, "%s\n", line_out);
}
exit(0);
}

View File

@ -1,29 +1,50 @@
#!/bin/sh
# make_xorriso_standalone.sh
# Copyright 2008 - 2013 Thomas Schmitt, scdbackup@gmx.net, GPLv2+
#
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
# 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 jte-develop libburn-develop libisoburn-develop
# where tarballs or repository copies have been installed of
# libisofs jte libburn libisoburn
# obtained according to instructions on http://libburnia-project.org.
#
# It creates a new directory tree
# xorriso-standalone
# for building GNU xorriso.
#
# Creates a standalone tree for building xorriso
# from the contents of a unified libburnia development tree.
# The ./bootstrap script gets applied and a source tarball
# is made.
#
# To be executed in the parent of the *-develop directories.
#
# From that tree can be build a binary xorriso/xorriso
# which at runtime depends only on libc and libpthread.
# Execute in $lone_dir :
# From that tree can be build a binary xorriso/xorriso which at runtime
# does not depend on installed libburnia libraries.
# Execute in xorriso-standalone :
#
# ./configure && make
#
# By the variable setting create_gnu_xorriso="yes"
# the result will become a GNU xorriso tarball under GPLv3+.
# Without this setting, the result is technically equivalent but
# stays under GPLv2+. In that case the files xorriso/*_gnu_xorriso
# are merely informative.
# Note that it is not permissible to revert the transition from
# GPLv2+ to GPLv3+. (Rather derive a new GPLv2+ from libburnia.)
create_gnu_xorriso="yes"
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.0.1
xorriso_rev=1.2.6
# For unstable uploads and patch level 0 of stable releases:
xorriso_pl=""
# For stable releases:
# xorriso_pl=".pl00"
# For higher patch levels of stable releases:
## xorriso_pl=".pl01"
with_bootstrap_tarball=1
@ -32,7 +53,7 @@ create_dir() {
then
dummy=dummy
else
echo "Failed to create : $r1o" >&2
echo "Failed to create : $1" >&2
exit 1
fi
}
@ -57,6 +78,16 @@ copy_files() {
fi
}
copy_tree() {
if cp -a "$@"
then
dummy=dummy
else
echo "Failed to : cp -a " "$@" >&2
exit 1
fi
}
if test -e "$lone_dir"
then
echo "Already existing : $lone_dir" >&2
@ -73,6 +104,10 @@ create_dir "$lone_dir"
copy_files \
AUTHORS \
CONTRIBUTORS \
COPYRIGHT \
COPYING \
ChangeLog \
INSTALL \
acinclude.m4 \
aclocal.m4 \
bootstrap \
@ -90,16 +125,12 @@ copy_files \
\
"$lone_dir"
copy_files xorriso/xorriso_bootstrap.txt "$lone_dir"/bootstrap
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
copy_files xorriso/README "$lone_dir"/README
echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
# libisoburn
@ -107,68 +138,147 @@ create_dir "$lone_dir"/libisoburn
copy_files \
libisoburn/*.[ch] \
"$lone_dir"/libisoburn
copy_files COPYRIGHT "$lone_dir"/libisoburn
xorriso/convert_man_to_html.sh
create_dir "$lone_dir"/xorriso
copy_files \
xorriso/xorrisoburn.[ch] \
xorriso/xorriso.[ch1] \
xorriso/xorriso.h \
xorriso/xorriso_private.h \
xorriso/sfile.h \
xorriso/sfile.c \
xorriso/aux_objects.h \
xorriso/aux_objects.c \
xorriso/findjob.h \
xorriso/findjob.c \
xorriso/check_media.h \
xorriso/check_media.c \
xorriso/misc_funct.h \
xorriso/misc_funct.c \
xorriso/text_io.h \
xorriso/text_io.c \
xorriso/match.h \
xorriso/match.c \
xorriso/emulators.h \
xorriso/emulators.c \
xorriso/disk_ops.h \
xorriso/disk_ops.c \
xorriso/cmp_update.h \
xorriso/cmp_update.c \
xorriso/parse_exec.h \
xorriso/parse_exec.c \
xorriso/opts_a_c.c \
xorriso/opts_d_h.c \
xorriso/opts_i_o.c \
xorriso/opts_p_z.c \
\
xorriso/xorrisoburn.h \
xorriso/base_obj.h \
xorriso/base_obj.c \
xorriso/lib_mgt.h \
xorriso/lib_mgt.c \
xorriso/sort_cmp.h \
xorriso/sort_cmp.c \
xorriso/drive_mgt.h \
xorriso/drive_mgt.c \
xorriso/iso_img.h \
xorriso/iso_img.c \
xorriso/iso_tree.h \
xorriso/iso_tree.c \
xorriso/iso_manip.h \
xorriso/iso_manip.c \
xorriso/write_run.h \
xorriso/write_run.c \
xorriso/read_run.h \
xorriso/read_run.c \
xorriso/filters.h \
xorriso/filters.c \
\
xorriso/xorriso_main.c \
xorriso/xorriso_timestamp.h \
\
xorriso/changelog.txt \
xorriso/xorriso_eng.html \
xorriso/make_docs.sh \
xorriso/xorriso.texi \
xorriso/xorriso.info \
xorriso/xorrisofs.texi \
xorriso/xorrisofs.info \
xorriso/xorrecord.texi \
xorriso/xorrecord.info \
xorriso/make_xorriso_1.c \
xorriso/xorriso.1 \
xorriso/xorrisofs.1 \
xorriso/xorrecord.1 \
xorriso/man_1_xorriso.html \
xorriso/man_1_xorrisofs.html \
xorriso/man_1_xorrecord.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 \
doc/qemu_xorriso.wiki \
"$lone_dir"/doc
create_dir "$lone_dir"/test
copy_files \
test/compare_file.c \
"$lone_dir"/test/compare_file.c
"$lone_dir"/test
create_dir "$lone_dir"/frontend
copy_files \
frontend/frontend_pipes_xorriso.c \
frontend/README-tcltk \
frontend/xorriso-tcltk \
"$lone_dir"/frontend
# >>> create compile_xorriso.sh for standalone
# releng
copy_tree releng "$lone_dir"/releng
rm "$lone_dir"/releng/auto_cxx
rm -r "$lone_dir"/releng/releng_generated_data
create_dir "$lone_dir"/releng/releng_generated_data
# nglibisofs
create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters
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
# To get a common version.h
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 COPYRIGHT "$lone_dir"/libjte
#
# Now using libisoburn/releng/jigdo-gen-md5-list because in jigit it is
# restricted to Linux and FreeBSD.
goto_dir "$current_dir"/libisoburn-develop/releng
copy_files jigdo-gen-md5-list jigdo-gen-md5-list.1 "$lone_dir"/libjte
# libburn
@ -176,19 +286,44 @@ fi
create_dir "$lone_dir"/libburn
goto_dir "$current_dir"/libburn-develop
copy_files libburn/*.[ch] "$lone_dir"/libburn
copy_files COPYRIGHT "$lone_dir"/libburn
cat CONTRIBUTORS >>"$lone_dir"/CONTRIBUTORS
# Delete a source module of yet unclear ancestry.
# The build process will avoid to use it.
rm "$lone_dir"/libburn/crc.c
copy_files COPYING "$lone_dir"/COPYING
# To get a common version.h
cat version.h.in >> "$lone_dir"/version.h.in
# Decision about legal situation
goto_dir "$current_dir"/libisoburn-develop
if test "$create_gnu_xorriso" = "yes"
then
copy_files xorriso/README_gnu_xorriso "$lone_dir"/README
copy_files xorriso/COPYRIGHT_gnu_xorriso "$lone_dir"/COPYRIGHT
copy_files xorriso/COPYING_gnu_xorriso "$lone_dir"/COPYING
copy_files xorriso/AUTHORS_gnu_xorriso "$lone_dir"/AUTHORS
# 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
else
copy_files README "$lone_dir"/README
fi
# tarball
if test "$with_bootstrap_tarball" = 1
then
tarball_dir="$current_dir"/xorriso-"$xorriso_rev"
tarball_dir="$current_dir"/xorriso-"$xorriso_rev""$xorriso_pl"
mv "$lone_dir" "$tarball_dir"
goto_dir "$tarball_dir"
@ -211,6 +346,16 @@ rm -r ./autom4te.cache
chmod a+rx,go-w,u+w ./configure
)
if test "$create_gnu_xorriso" = "yes"
then
# ftp-upload@gnu.org rejects Makefile.in with a dangerous chmod on make dist
sed -e 's/-perm -777 -exec chmod a+rwx/-perm -755 -exec chmod u+rwx,go+rx/' \
< Makefile.in > new_Makefile.in
mv new_Makefile.in Makefile.in
fi
cd "$current_dir"
tar czf ./xorriso-"$xorriso_rev""$xorriso_pl".tar.gz $(basename "$tarball_dir")

View File

@ -0,0 +1,73 @@
#!/bin/sh
#
# man_xorrecord_to_html.sh - ts A80118 , B10309
#
# Generates a HTML version of man page xorrecord.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="xorrecord"
raw_html=$(pwd)/"xorriso/raw_man_1_xorrecord.html"
htmlpage=$(pwd)/"xorriso/man_1_xorrecord.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 xorrecord, manual, xorrecord, CD, DVD, BD, cdrecord, compatible"><META NAME="robots" CONTENT="follow">/' \
-e 's/<title>XORRECORD<\/title>/<title>man 1 xorrecord<\/title>/' \
-e 's/<h1 align=center>XORRECORD<\/h1>/<h1 align=center>man 1 xorrecord<\/h1>/' \
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
-e 's/<b>MMC, Session, Track, Media types:<\/b>/\&nbsp;<BR><b>MMC, Session, Track, Media types:<\/b>/' \
-e 's/<b>MMC, Session, Track, Media types:<\/b>/\&nbsp;<BR><b>MMC, Session, Track, Media types:<\/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>Drive addressing:<\/b>/\&nbsp;<BR><b>Drive addressing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Inquiring drive and media:<\/b>/\&nbsp;<BR><b>Inquiring drive and media:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for the burn run<\/b>/\&nbsp;<BR><b>Settings for the burn run:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Program version and verbosity:<\/b>/\&nbsp;<BR><b>Program version and verbosity:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Options not compatible to cdrecord:<\/b>/\&nbsp;<BR><b>Options not compatible to cdrecord:<\/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>/' \
-e 's/&minus;/-/g' \
<"$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

127
xorriso/man_xorriso_to_html.sh Executable file
View File

@ -0,0 +1,127 @@
#!/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><A NAME="Overview"><\/A><b>Overview of features:<\/b>/' \
-e 's/<b>General information paragraphs:<\/b>/\&nbsp;<BR><A NAME="General"><\/A><b>General information paragraphs:<\/b>/' \
-e 's/^<p>Session model<br>/<p><A HREF="#Model">Session model<\/A><br>/' \
-e 's/^Media types and states/<A HREF="#Media">Media types and states/' \
-e 's/^Creating, Growing, Modifying, Blind Growing/<A HREF="#Methods">Creating, Growing, Modifying, Blind Growing<\/A>/' \
-e 's/^Libburn drives/<A HREF="#Drives">Libburn drives<\/A>/' \
-e 's/^Rock Ridge, POSIX, X\/Open, El Torito, ACL, xattr/<A HREF="#Extras">Rock Ridge, POSIX, X\/Open, El Torito, ACL, xattr<\/A>/' \
-e 's/^Command processing/<A HREF="#Processing">Command processing<\/A>/' \
-e 's/^Dialog, Readline, Result pager/<A HREF="#Dialog">Dialog, Readline, Result pager<\/A>/' \
-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><A NAME="Model"><\/A><b>Session model:<\/b>/' \
-e 's/<b>Media types and states:<\/b>/\&nbsp;<BR><A NAME="Media"><\/A><b>Media types and states:<\/b>/' \
-e 's/<b>Creating, Growing, Modifying, Blind/\&nbsp;<BR><A NAME="Methods"><\/A><b>Creating, Growing, Modifying, Blind/' \
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b><A NAME="Drives"><\/A>/' \
-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><A NAME="Extras"><\/A><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><A NAME="Processing"><\/A><b>Command processing:<\/b>/' \
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><A NAME="Dialog"><\/A<b>Dialog, Readline, Result pager:<\/b>/' \
-e 's/<b>Execution order of program arguments:<\/b>/\&nbsp;<BR><A NAME="ArgSort"><\/A><b>Execution order of program arguments:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Acquiring source and target drive:<\/b>/\&nbsp;<BR><A NAME="AqDrive"><\/A><b>Acquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Influencing the behavior of image/\&nbsp;<BR><A NAME="Loading"><\/A><b>Influencing the behavior of image/' \
-e 's/<b>Inserting files into ISO image:<\/b>/\&nbsp;<BR><A NAME="Insert"><\/A><b>Inserting files into ISO image:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Settings for file insertion:<\/b>/\&nbsp;<BR><A NAME="SetInsert"><\/A><b>Settings for file insertion:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>File manipulations:<\/b>/\&nbsp;<BR><A NAME="Manip"><\/A><b>File manipulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Tree traversal command -find:<\/b>/\&nbsp;<BR><A NAME="CmdFind"><\/A><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><A NAME="Filter"><\/A><b>Filters for data file content:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Writing the result, drive control:<\/b>/\&nbsp;<BR><A NAME="Writing"><\/A><b>Writing the result, drive control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^-find \/ /\&nbsp;\&nbsp;-find \/ /' \
-e 's/^$<\/b> ln -s/\&nbsp;\&nbsp;$<\/b> ln -s/' \
-e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><A NAME="SetWrite"><\/A><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>Bootable ISO images:<\/b>/\&nbsp;<BR><A NAME="Bootable"><\/A><b>Bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Jigdo Template Extraction:<\/b>/\&nbsp;<BR><A NAME="Jigdo"><\/A><b>Jigdo Template Extraction:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><A NAME="Charset"><\/A><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><A NAME="Exception"><\/A><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><A NAME="DialogCtl"><\/A><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><A NAME="Inquiry"><\/A><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><A NAME="Navigate"><\/A><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><A NAME="Verify"><\/A><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox ISO-to-disk restore commands:<\/b>/\&nbsp;<BR><A NAME="Restore"><\/A><b>osirrox ISO-to-disk restore commands:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><A NAME="Emulation"><\/A><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><A NAME="Scripting"><\/A><b>Scripting, dialog and/' \
-e 's/^features:<\/b>/features:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Support for frontend/\&nbsp;<BR><A NAME="Frontend"><\/A><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>/' \
-e 's/&minus;/-/g' \
<"$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,80 @@
#!/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, HFS+:<\/b>/\&nbsp;<BR><b>ISO 9660, Rock Ridge, Joliet, HFS+:<\/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>/' \
-e 's/&minus;/-/g' \
<"$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

775
xorriso/match.c Normal file
View File

@ -0,0 +1,775 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains the implementation of functions for pattern matching.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <fcntl.h>
#include <errno.h>
#include "xorriso.h"
#include "xorriso_private.h"
#include "xorrisoburn.h"
/* @param flag bit0= do not augment relative structured search by xorriso->wdi
bit1= return 2 if bonked at start point by ..
(caller then aborts or retries without bit0)
bit2= eventually prepend wdx rather than wdi
@return <=0 error, 1= ok, 2= with bit1: relative pattern exceeds start point
*/
int Xorriso_prepare_regex(struct XorrisO *xorriso, char *adr, int flag)
{
int l,ret,i,count,bonked= 0,is_constant,is_still_relative= 0, adr_size;
char *cpt,*npt,*adr_part= NULL, *absolute_adr= NULL, *adr_start,*wd;
adr_size= 2 * SfileadrL;
Xorriso_alloc_meM(adr_part, char, adr_size);
Xorriso_alloc_meM(absolute_adr, char, adr_size);
if(flag&4)
wd= xorriso->wdx;
else
wd= xorriso->wdi;
if(xorriso->search_mode>=2 && xorriso->search_mode<=4) {
if(xorriso->search_mode==3 || xorriso->search_mode==4) {
l= strlen(adr)+strlen(wd)+1;
if(l * 2 + 2 > ((int) sizeof(xorriso->reg_expr)) || l * 2 + 2 > adr_size){
sprintf(xorriso->info_text,"Search pattern too long");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
}
Xorriso_destroy_re(xorriso,0);
if(xorriso->structured_search && xorriso->search_mode==3) {
if(adr[0]!='/')
is_still_relative= 1;
if(is_still_relative && !(flag&1)) {
/* relative expression : prepend working directory */
sprintf(absolute_adr,"%s/%s",wd,adr);
adr_start= absolute_adr;
xorriso->prepended_wd= 1;
is_still_relative= 0;
} else
adr_start= adr;
/* count slashes */;
cpt= adr_start;
while(*cpt=='/')
cpt++;
for(i= 0;1;i++) {
cpt= strchr(cpt,'/');
if(cpt==NULL)
break;
while(*cpt=='/')
cpt++;
}
count= i+1;
xorriso->re= TSOB_FELD(regex_t,count);
if(xorriso->re==NULL)
{ret= -1; goto ex;}
xorriso->re_constants= TSOB_FELD(char *,count);
if(xorriso->re_constants==NULL)
{ret= -1; goto ex;}
for(i= 0;i<count;i++)
xorriso->re_constants[i]= NULL;
xorriso->re_count= count;
xorriso->re_fill= 0;
/* loop over slash chunks*/;
cpt= adr_start;
xorriso->re_fill= 0;
while(*cpt=='/')
cpt++;
for(i= 0;i<count;i++) {
npt= strchr(cpt,'/');
if(npt==NULL) {
if((int) strlen(cpt) >= adr_size)
{ret= -1; goto ex;}
strcpy(adr_part,cpt);
} else {
if(npt-cpt >= adr_size)
{ret= -1; goto ex;}
strncpy(adr_part,cpt,npt-cpt);
adr_part[npt-cpt]= 0;
}
if(adr_part[0]==0)
goto next_adr_part;
if(adr_part[0]=='.' && adr_part[1]==0 &&
(xorriso->re_fill>0 || i<count-1))
goto next_adr_part;
if(adr_part[0]=='.' && adr_part[1]=='.' && adr_part[2]==0) {
/* delete previous part */
if(xorriso->re_fill <= 0) {
bonked= 1;
goto next_adr_part;
}
if(xorriso->re_constants[xorriso->re_fill-1]!=NULL) {
free(xorriso->re_constants[xorriso->re_fill-1]);
xorriso->re_constants[xorriso->re_fill-1]= NULL;
} else
regfree(&(xorriso->re[xorriso->re_fill-1]));
(xorriso->re_fill)--;
goto next_adr_part;
}
if(strcmp(adr_part,"*")==0) {
adr_part[0]= 0;
ret= 2;
} else
ret= Xorriso__bourne_to_reg(adr_part,xorriso->reg_expr,0);
if(ret==2) {
if(Sregex_string(&(xorriso->re_constants[xorriso->re_fill]),adr_part,0)
<=0)
{ret= -1; goto ex;}
} else {
if(regcomp(&(xorriso->re[xorriso->re_fill]),xorriso->reg_expr,0)!=0)
goto cannot_compile;
}
xorriso->re_fill++;
next_adr_part:;
if(i==count-1)
break;
cpt= npt+1;
while(*cpt=='/')
cpt++;
}
if(bonked) {
if(flag&2)
{ret= 2; goto ex;}
sprintf(xorriso->info_text, "Your '..' bonked at the %s directory.",
is_still_relative ? "working" : "root");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE",0);
{ret= 0; goto ex;}
}
Xorriso__bourne_to_reg(adr_start,xorriso->reg_expr,0); /* just for show */
} else {
is_constant= 0;
if(strcmp(adr,"*")==0 || adr[0]==0) {
is_constant= 1;
} else if(xorriso->search_mode==3 || xorriso->search_mode==4) {
ret= Xorriso__bourne_to_reg(adr,xorriso->reg_expr,0);
is_constant= (ret==2);
} else {
if(strlen(adr)>=sizeof(xorriso->reg_expr))
{ret= -1; goto ex;}
strcpy(xorriso->reg_expr,adr);
}
xorriso->re_count= 0; /* tells matcher that this is not structured */
xorriso->re_constants= TSOB_FELD(char *,1);
if(xorriso->re_constants==NULL)
{ret= -1; goto ex;}
xorriso->re_constants[0]= NULL;
if(is_constant) {
if(strcmp(adr,"*")==0) {
if(Sregex_string(&(xorriso->re_constants[0]),"",0)<=0)
{ret= -1; goto ex;}
} else {
if(Sregex_string(&(xorriso->re_constants[0]),adr,0)<=0)
{ret= -1; goto ex;}
}
xorriso->re_fill= 1;
} else {
xorriso->re= TSOB_FELD(regex_t,1);
if(xorriso->re==NULL)
{ret= -1; goto ex;}
if(regcomp(&(xorriso->re[0]),xorriso->reg_expr,0)!=0) {
cannot_compile:;
sprintf(xorriso->info_text, "Cannot compile regular expression : %s",
xorriso->reg_expr);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE",0);
{ret= 0; goto ex;}
}
}
}
}
ret= 1;
ex:;
Xorriso_free_meM(adr_part);
Xorriso_free_meM(absolute_adr);
return(ret);
}
/* @param flag bit0= do not shortcut last component of to_match
bit1= consider match if regex matches parent of path
bit2= retry beginning at failed last component
@return 0=match , else no match
*/
int Xorriso_regexec(struct XorrisO *xorriso, char *to_match, int *failed_at,
int flag)
{
int ret,i,re_start= 0,reg_nomatch= -1;
char *cpt,*npt, *adr_part= NULL, *mpt;
Xorriso_alloc_meM(adr_part, char, SfileadrL);
reg_nomatch= REG_NOMATCH;
*failed_at= 0;
if(!(xorriso->structured_search && xorriso->re_count>0)) {
if(xorriso->re_constants!=NULL)
if(xorriso->re_constants[0]!=NULL) {
if(xorriso->re_constants[0][0]==0)
{ret= 0; goto ex;}
if(strcmp(xorriso->re_constants[0],to_match)!=0)
{ret= reg_nomatch; goto ex;}
{ret= 0; goto ex;}
}
ret= regexec(&(xorriso->re[0]),to_match,1,xorriso->match,0);
goto ex;
}
cpt= to_match;
while(*cpt=='/')
cpt++;
if(flag&4)
re_start= xorriso->re_failed_at;
if(re_start<0)
re_start= 0;
for(i= re_start;i<xorriso->re_fill;i++) {
*failed_at= i;
npt= strchr(cpt,'/');
if(npt==NULL) {
if(i<xorriso->re_fill-1 && !(flag&1))
{ret= reg_nomatch; goto ex;} /* this must be the last expression part */
mpt= cpt;
} else {
strncpy(adr_part,cpt,npt-cpt);
adr_part[npt-cpt]= 0;
mpt= adr_part;
}
if(xorriso->re_constants[i]!=NULL) {
if(xorriso->re_constants[i][0]!=0) /* empty constant matches anything */
if(strcmp(xorriso->re_constants[i],mpt)!=0)
{ret= reg_nomatch; goto ex;}
} else {
ret= regexec(&(xorriso->re[i]),mpt,1,xorriso->match,0);
if(ret!=0)
goto ex;
}
if(npt==NULL) {
if(i>=xorriso->re_fill-1)
{ret= 0; goto ex;} /* MATCH */
*failed_at= i+1;
{ret= reg_nomatch; goto ex;}
}
cpt= npt+1;
while(*cpt=='/')
cpt++;
}
*failed_at= xorriso->re_fill;
if(flag & 2)
{ret= 0; goto ex;} /* MATCH */
ret= reg_nomatch;
ex:;
Xorriso_free_meM(adr_part);
return(ret);
}
int Xorriso_is_in_patternlist(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, char *path,
int flag)
{
int ret, failed_at, i= 0;
struct Xorriso_lsT *s;
xorriso->search_mode= 3;
xorriso->structured_search= 1;
for(s= patternlist; s != NULL; s= Xorriso_lst_get_next(s, 0)) {
ret= Xorriso_prepare_regex(xorriso, Xorriso_lst_get_text(s, 0), 0);
if(ret <= 0)
return(-1);
/* Match path or parent of path */
ret= Xorriso_regexec(xorriso, path, &failed_at, 2);
if(ret == 0)
return(i + 1);
i++;
}
return(0);
}
char *Xorriso_get_pattern(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, int index, int flag)
{
int i= 0;
struct Xorriso_lsT *s;
for(s= patternlist; s != NULL; s= Xorriso_lst_get_next(s, 0)) {
if(i == index)
return(Xorriso_lst_get_text(s, 0));
i++;
}
return(NULL);
}
/* @param flag bit2= this is a disk_pattern
@return <=0 failure , 1 pattern ok , 2 pattern needed prepended wd */
int Xorriso_prepare_expansion_pattern(struct XorrisO *xorriso, char *pattern,
int flag)
{
int ret, prepwd= 0;
ret= Xorriso_prepare_regex(xorriso, pattern, 1|2|(flag&4));
if(ret==2) {
ret= Xorriso_prepare_regex(xorriso, pattern, flag&4);
prepwd= 1;
}
if(ret<=0) {
sprintf(xorriso->info_text,
"Cannot compile pattern to regular expression: %s", pattern);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
return(1+prepwd);
}
/* @param flag bit0= count results rather than storing them
bit1= unexpected change of number is a FATAL event
@return <=0 error , 1 is root (end processing) ,
2 is not root (go on processing)
*/
int Xorriso_check_for_root_pattern(struct XorrisO *xorriso,
int *filec, char **filev, int count_limit, off_t *mem, int flag)
{
if(xorriso->re_fill!=0)
return(2);
/* This is the empty pattern representing root */
if(flag&1) {
(*filec)++;
(*mem)+= 8;
} else {
if(*filec >= count_limit) {
sprintf(xorriso->info_text,
"Number of matching files changed unexpectedly (> %d)",
count_limit);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(flag&2 ? "FATAL" : "WARNING"), 0);
return(flag&2 ? -1 : 0);
}
filev[*filec]= strdup("/");
if(filev[*filec]==NULL) {
Xorriso_no_pattern_memory(xorriso, (off_t) 2, 0);
return(-1);
}
(*filec)++;
}
return(1);
}
/* @param flag bit0= count result rather than storing it
bit1= unexpected change of number is a FATAL event
*/
int Xorriso_register_matched_adr(struct XorrisO *xorriso,
char *adr, int count_limit,
int *filec, char **filev, off_t *mem, int flag)
{
int l;
if(flag&1) {
(*filec)++;
l= strlen(adr)+1;
(*mem)+= sizeof(char *)+l;
if(l % sizeof(char *))
(*mem)+= sizeof(char *)-(l % sizeof(char *));
} else {
if(*filec >= count_limit) {
sprintf(xorriso->info_text,
"Number of matching files changed unexpectedly (> %d)",
count_limit);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(flag&2 ? "FATAL" : "WARNING"), 0);
return(flag&2 ? -1 : 0);
}
filev[*filec]= strdup(adr);
if(filev[*filec]==NULL) {
Xorriso_no_pattern_memory(xorriso, (off_t) (strlen(adr)+1), 0);
return(-1);
}
(*filec)++;
}
return(1);
}
/* @param flag bit0= count results rather than storing them
bit1= this is a recursion
bit2= prepend wd (automatically done if wd[0]!=0)
@return <=0 error , 1 ok , 2 could not open directory
*/
int Xorriso_obtain_pattern_files_x(
struct XorrisO *xorriso, char *wd, char *dir_adr,
int *filec, char **filev, int count_limit, off_t *mem,
int *dive_count, int flag)
{
int ret, failed_at, follow_mount, follow_links;
struct DirseQ *dirseq= NULL;
struct stat stbuf;
dev_t dir_dev;
char *path;
char *adr= NULL, *name= NULL, *path_data= NULL;
adr= malloc(SfileadrL);
name= malloc(SfileadrL);
path_data= malloc(SfileadrL);
if(adr==NULL || name==NULL || path_data==NULL) {
Xorriso_no_malloc_memory(xorriso, &adr, 0);
{ret= -1; goto ex;}
}
follow_mount= (xorriso->do_follow_mount || xorriso->do_follow_pattern);
follow_links= (xorriso->do_follow_links || xorriso->do_follow_pattern);
if(!(flag&2))
*dive_count= 0;
else
(*dive_count)++;
ret= Xorriso_check_for_root_pattern(xorriso, filec, filev, count_limit,
mem, flag&1);
if(ret!=2)
goto ex;
if(lstat(dir_adr, &stbuf)==-1)
{ret= 2; goto ex;}
dir_dev= stbuf.st_dev;
if(S_ISLNK(stbuf.st_mode)) {
if(stat(dir_adr, &stbuf)==-1)
{ret= 2; goto ex;}
if(dir_dev != stbuf.st_dev && !follow_mount)
{ret= 2; goto ex;}
}
ret= Dirseq_new(&dirseq, dir_adr, 1);
if(ret<0) {
sprintf(xorriso->info_text, "Cannot obtain disk directory iterator");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
{ret= -1; goto ex;}
}
if(ret==0)
{ret= 2; goto ex;}
while(1) {
ret= Dirseq_next_adr(dirseq,name,0);
if(ret==0)
break;
if(ret<0) {
sprintf(xorriso->info_text,"Failed to obtain next directory entry");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
{ret= -1; goto ex;}
}
ret= Xorriso_make_abs_adr(xorriso, wd, name, adr, flag&4);
if(ret<=0)
goto ex;
ret= Xorriso_regexec(xorriso, adr, &failed_at, 1);
if(ret>0) { /* no match */
if(failed_at <= *dive_count) /* no hope for a match */
continue;
path= adr;
if(adr[0]!='/') {
path= path_data;
ret= Xorriso_make_abs_adr(xorriso, xorriso->wdx, adr, path, 1|4);
if(ret<=0)
goto ex;
}
if(follow_links)
ret= stat(path,&stbuf);
else
ret= lstat(path,&stbuf);
if(ret==-1)
continue;
if(!S_ISDIR(stbuf.st_mode))
continue;
if(dir_dev != stbuf.st_dev && !follow_mount)
continue;
/* dive deeper */
ret= Xorriso_obtain_pattern_files_x(xorriso, adr, path,
filec, filev, count_limit, mem, dive_count, flag|2);
if(ret<=0)
goto ex;
} else {
ret= Xorriso_register_matched_adr(xorriso, adr, count_limit,
filec, filev, mem, flag&1);
if(ret<0)
goto ex;
if(ret==0)
break;
}
}
ret= 1;
ex:;
if(adr!=NULL)
free(adr);
if(name!=NULL)
free(name);
if(path_data!=NULL)
free(path_data);
Dirseq_destroy(&dirseq,0);
if(flag&2)
(*dive_count)--;
return(ret);
}
int Xorriso_eval_nonmatch(struct XorrisO *xorriso, char *pattern,
int *nonconst_mismatches, off_t *mem, int flag)
{
int k,l;
/* Is this a constant pattern ? */
for(k= 0; k<xorriso->re_fill; k++) {
if(xorriso->re_constants[k]==NULL)
break;
if(xorriso->re_constants[k][0]==0)
break;
}
if(k<xorriso->re_fill)
(*nonconst_mismatches)++; /* it is not */
l= strlen(pattern)+1;
(*mem)+= sizeof(char *)+l;
if(l % sizeof(char *))
(*mem)+= sizeof(char *)-(l % sizeof(char *));
return(1);
}
/* @param flag bit0= a match count !=1 is a SORRY event
bit1= a match count !=1 is a FAILURE event
*/
int Xorriso_check_matchcount(struct XorrisO *xorriso,
int count, int nonconst_mismatches, int num_patterns,
char **patterns, int flag)
{
if((flag&1) && (count!=1 || nonconst_mismatches)){
if(count-nonconst_mismatches>0)
sprintf(xorriso->info_text,
"Pattern match with more than one file object");
else
sprintf(xorriso->info_text, "No pattern match with any file object");
if(num_patterns==1)
sprintf(xorriso->info_text+strlen(xorriso->info_text), ": ");
Text_shellsafe(patterns[0], xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
(flag&2 ? "FAILURE" : "SORRY"), 0);
return(0);
}
return(1);
}
int Xorriso_no_pattern_memory(struct XorrisO *xorriso, off_t mem, int flag)
{
char mem_text[80];
Sfile_scale((double) mem, mem_text,5,1e4,1);
sprintf(xorriso->info_text,
"Cannot allocate enough memory (%s) for pattern expansion",
mem_text);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(1);
}
int Xorriso_alloc_pattern_mem(struct XorrisO *xorriso, off_t mem,
int count, char ***filev, int flag)
{
char mem_text[80], limit_text[80];
Sfile_scale((double) mem, mem_text,5,1e4,0);
sprintf(xorriso->info_text,
"Temporary memory needed for pattern expansion : %s", mem_text);
if(!(flag&1))
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
if(mem > xorriso->temp_mem_limit) {
Sfile_scale((double) xorriso->temp_mem_limit, limit_text,5,1e4,1);
sprintf(xorriso->info_text,
"List of matching file addresses exceeds -temp_mem_limit (%s > %s)",
mem_text, limit_text);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
(*filev)= (char **) calloc(count, sizeof(char *));
if(*filev==NULL) {
Xorriso_no_pattern_memory(xorriso, mem, 0);
return(-1);
}
return(1);
}
/* @param flag bit0= a match count !=1 is a FAILURE event
bit1= with bit0 tolerate 0 matches if pattern is a constant
*/
int Xorriso_expand_disk_pattern(struct XorrisO *xorriso,
int num_patterns, char **patterns, int extra_filec,
int *filec, char ***filev, off_t *mem, int flag)
{
int ret, count= 0, abs_adr= 0, i, was_count, was_filec;
int nonconst_mismatches= 0, dive_count= 0;
char *dir_adr= NULL;
Xorriso_alloc_meM(dir_adr, char, SfileadrL);
*filec= 0;
*filev= NULL;
xorriso->search_mode= 3;
xorriso->structured_search= 1;
for(i= 0; i<num_patterns; i++) {
ret= Xorriso_prepare_expansion_pattern(xorriso, patterns[i], 4);
if(ret<=0)
goto ex;
if(ret==2)
abs_adr= 4;
if(patterns[i][0]=='/' || abs_adr) {
strcpy(dir_adr, "/");
abs_adr= 4;
} else {
strcpy(dir_adr, xorriso->wdx);
if(dir_adr[0]==0)
strcpy(dir_adr, "/");
ret= Sfile_type(dir_adr, 1|4);
if(ret!=2) {
Xorriso_msgs_submit(xorriso, 0, dir_adr, 0, "ERRFILE", 0);
sprintf(xorriso->info_text, "Address set by -cdx is not a directory: ");
Text_shellsafe(dir_adr, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
/* count the matches */
was_count= count;
ret= Xorriso_obtain_pattern_files_x(xorriso, "", dir_adr, &count, NULL, 0,
mem, &dive_count, 1 | abs_adr);
if(ret<=0)
goto ex;
if(was_count==count && strcmp(patterns[i],"*")!=0 && (flag&3)!=1) {
count++;
ret= Xorriso_eval_nonmatch(xorriso, patterns[i],
&nonconst_mismatches, mem, 0);
if(ret<=0)
goto ex;
}
}
ret= Xorriso_check_matchcount(xorriso, count, nonconst_mismatches,
num_patterns, patterns, (flag&1)|2);
if(ret<=0)
goto ex;
count+= extra_filec;
mem+= extra_filec*sizeof(char *);
if(count<=0)
{ret= 0; goto ex;}
ret= Xorriso_alloc_pattern_mem(xorriso, *mem, count, filev, 0);
if(ret<=0)
goto ex;
/* now store addresses */
for(i= 0; i<num_patterns; i++) {
ret= Xorriso_prepare_expansion_pattern(xorriso, patterns[i], 4);
if(ret<=0)
goto ex;
if(patterns[i][0]=='/' || abs_adr) {
strcpy(dir_adr, "/");
abs_adr= 4;
} else {
strcpy(dir_adr, xorriso->wdx);
if(dir_adr[0]==0)
strcpy(dir_adr, "/");
}
was_filec= *filec;
ret= Xorriso_obtain_pattern_files_x(xorriso, "", dir_adr, filec, *filev,
count, mem, &dive_count, abs_adr);
if(ret<=0)
goto ex;
if(was_filec == *filec && strcmp(patterns[i],"*")!=0) {
(*filev)[*filec]= strdup(patterns[i]);
if((*filev)[*filec]==NULL) {
(*mem)= strlen(patterns[i])+1;
Xorriso_no_pattern_memory(xorriso, *mem, 0);
ret= -1; goto ex;
}
(*filec)++;
}
}
ret= 1;
ex:;
if(ret<=0) {
if(filev!=NULL)
Sfile_destroy_argv(&count, filev, 0);
*filec= 0;
}
Xorriso_free_meM(dir_adr);
return(ret);
}
/* @param flag bit0= command without pattern capability
bit1= disk_pattern rather than iso_rr_pattern
*/
int Xorriso_warn_of_wildcards(struct XorrisO *xorriso, char *path, int flag)
{
if(strchr(path,'*')!=NULL || strchr(path,'?')!=NULL ||
strchr(path,'[')!=NULL) {
if(flag&1) {
sprintf(xorriso->info_text,
"Pattern expansion of wildcards \"*?[\" does not apply to this command");
} else {
sprintf(xorriso->info_text,
"Pattern expansion of wildcards \"*?[\" is disabled by command %s",
(flag&2) ? "-disk_pattern or -pathspecs" : "-iso_rr_pattern");
}
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
sprintf(xorriso->info_text,"Pattern seen: ");
Text_shellsafe(path, xorriso->info_text, 1);
strcat(xorriso->info_text, "\n");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
return(1);
}
return(0);
}

74
xorriso/match.h Normal file
View File

@ -0,0 +1,74 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains the implementation of functions for pattern matching.
*/
#ifndef Xorriso_pvt_match_includeD
#define Xorriso_pvt_match_includeD yes
int Xorriso_prepare_regex(struct XorrisO *xorriso, char *adr, int flag);
/* @return 0=match , else no match
*/
int Xorriso_regexec(struct XorrisO *xorriso, char *to_match, int *failed_at,
int flag);
int Xorriso_is_in_patternlist(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, char *path, int flag);
char *Xorriso_get_pattern(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, int index, int flag);
int Xorriso_prepare_expansion_pattern(struct XorrisO *xorriso, char *pattern,
int flag);
/* @param flag bit0= count results rather than storing them
@return <=0 error , 1 is root (end processing) ,
2 is not root (go on processing)
*/
int Xorriso_check_for_root_pattern(struct XorrisO *xorriso,
int *filec, char **filev, int count_limit, off_t *mem, int flag);
/* @param flag bit0= count result rather than storing it
bit1= unexpected change of number is a FATAL event
*/
int Xorriso_register_matched_adr(struct XorrisO *xorriso,
char *adr, int count_limit,
int *filec, char **filev, off_t *mem, int flag);
int Xorriso_eval_nonmatch(struct XorrisO *xorriso, char *pattern,
int *nonconst_mismatches, off_t *mem, int flag);
/* @param flag bit0= a match count !=1 is a SORRY event
*/
int Xorriso_check_matchcount(struct XorrisO *xorriso,
int count, int nonconst_mismatches, int num_patterns,
char **patterns, int flag);
int Xorriso_no_pattern_memory(struct XorrisO *xorriso, off_t mem, int flag);
int Xorriso_alloc_pattern_mem(struct XorrisO *xorriso, off_t mem,
int count, char ***filev, int flag);
/* @param flag bit0= command without pattern capability
bit1= disk_pattern rather than iso_rr_pattern
*/
int Xorriso_warn_of_wildcards(struct XorrisO *xorriso, char *path, int flag);
/* @param flag bit0= a match count !=1 is a FAILURE event
bit1= with bit0 tolerate 0 matches if pattern is a constant
*/
int Xorriso_expand_disk_pattern(struct XorrisO *xorriso,
int num_patterns, char **patterns, int extra_filec,
int *filec, char ***filev, off_t *mem, int flag);
#endif /* ! Xorriso_pvt_match_includeD */

1285
xorriso/misc_funct.c Normal file

File diff suppressed because it is too large Load Diff

99
xorriso/misc_funct.h Normal file
View File

@ -0,0 +1,99 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of cellaneous helper functions of xorriso.
*/
#ifndef Xorriso_pvt_misc_includeD
#define Xorriso_pvt_misc_includeD yes
#include <regex.h>
char *Text_shellsafe(char *in_text, char *out_text, int flag);
int Sort_argv(int argc, char **argv, int flag);
/* @param flag bit0= single letters */
char *Ftypetxt(mode_t st_mode, int flag);
/* @param flag bit0=with year and seconds
bit1=timestamp format YYYY.MM.DD.hhmmss
*/
char *Ftimetxt(time_t t, char timetext[40], int flag);
int System_uname(char **sysname, char **release, char **version,
char **machine, int flag);
/** Convert a text into a number of type double and multiply it by unit code
[kmgtpe] (2^10 to 2^60) or [s] (2048). (Also accepts capital letters.)
@param text Input like "42", "2k", "3.14m" or "-1g"
@param flag Bitfield for control purposes:
bit0= return -1 rathern than 0 on failure
@return The derived double value
*/
double Scanf_io_size(char *text, int flag);
/*
@flag bit0= do not initialize *diff_count
@return <0 error , 0 = mismatch , 1 = match
*/
int Compare_text_lines(char *text1, char *text2, int *diff_count, int flag);
time_t Decode_timestring(char *code, time_t *date, int flag);
int Decode_ecma119_format(struct tm *erg, char *text, int flag);
int Wait_for_input(int fd, int microsec, int flag);
int Fileliste__target_source_limit(char *line, char sep, char **limit_pt,
int flag);
int Fileliste__escape_source_path(char *line, int size, int flag);
int Hex_to_bin(char *hex,
int bin_size, int *bin_count, unsigned char *bin_data, int flag);
/* bit0= append (text!=NULL) */
int Sregex_string(char **handle, char *text, int flag);
/* @param flag bit0= only test expression whether compilable
*/
int Sregex_match(char *pattern, char *text, int flag);
/*
vars[][0] points to the variable names, vars[][1] to their contents.
start marks the begin of variable names. It must be non-empty. esc before
start disables this meaning. start and esc may be equal but else they must
have disjoint character sets.
end marks the end of a variable name. It may be empty but if non-empty it
must not appear in vars[][0].
@param flag bit0= Substitute unknown variables by empty text
(else copy start,name,end unaltered to result).
Parameter end must be non-empty for that.
*/
int Sregex_resolve_var(char *form, char *vars[][2], int num_vars,
char *start, char *end, char *esc,
char *result, int result_size, int flag);
/* reg_expr should be twice as large as bourne_expr ( + 2 to be exact) */
/* return: 2= bourne_expr is surely a constant */
int Xorriso__bourne_to_reg(char bourne_expr[], char reg_expr[], int flag);
int Xorriso__hide_mode(char *mode, int flag);
char *Xorriso__hide_mode_text(int hide_mode, int flag);
/* @return 0=truncated, 1=ok
*/
int Xorriso__to_upper(char *in, char *out, int out_size, int flag);
#endif /* ! Xorriso_pvt_misc_includeD */

2448
xorriso/opts_a_c.c Normal file

File diff suppressed because it is too large Load Diff

2247
xorriso/opts_d_h.c Normal file

File diff suppressed because it is too large Load Diff

1544
xorriso/opts_i_o.c Normal file

File diff suppressed because it is too large Load Diff

2084
xorriso/opts_p_z.c Normal file

File diff suppressed because it is too large Load Diff

2922
xorriso/parse_exec.c Normal file

File diff suppressed because it is too large Load Diff

97
xorriso/parse_exec.h Normal file
View File

@ -0,0 +1,97 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which deal with parsing
and interpretation of command input.
*/
#ifndef Xorriso_pvt_cmd_includeD
#define Xorriso_pvt_cmd_includeD yes
/* @param flag bit0= do not warn of wildcards
bit1= these are disk_paths
*/
int Xorriso_end_idx(struct XorrisO *xorriso,
int argc, char **argv, int idx, int flag);
int Xorriso_opt_args(struct XorrisO *xorriso, char *cmd,
int argc, char **argv, int idx,
int *end_idx, int *optc, char ***optv, int flag);
int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
int flag);
int Xorriso_set_problem_status(struct XorrisO *xorriso, char *severity,
int flag);
/**
@param flag bit0= do not issue own event messages
bit1= take xorriso->request_to_abort as reason for abort
@return Gives the advice:
2= pardon was given, go on
1= no problem, go on
0= function failed but xorriso would not abort, go on
<0= do abort
-1 = due to problem_status
-2 = due to xorriso->request_to_abort
*/
int Xorriso_eval_problem_status(struct XorrisO *xorriso, int ret, int flag);
int Xorriso_cpmv_args(struct XorrisO *xorriso, char *cmd,
int argc, char **argv, int *idx,
int *optc, char ***optv, char eff_dest[SfileadrL],
int flag);
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
*/
int Xorriso_decode_load_adr(struct XorrisO *xorriso, char *cmd,
char *adr_mode, char *adr_value,
int *entity_code, char entity_id[81],
int flag);
int Xorriso_check_name_len(struct XorrisO *xorriso, char *name, int size,
char *cmd, int flag);
/* @param flag bit0= prepend wd only if name does not begin by '/'
bit2= prepend wd (automatically done if wd[0]!=0)
*/
int Xorriso_make_abs_adr(struct XorrisO *xorriso, char *wd, char *name,
char adr[], int flag);
/* @param flag bit0= do not complain in case of error, but set info_text */
int Xorriso_convert_datestring(struct XorrisO *xorriso, char *cmd,
char *time_type, char *timestring,
int *t_type, time_t *t, int flag);
int Xorriso_check_temp_mem_limit(struct XorrisO *xorriso, off_t mem, int flag);
/* @param flag bit0= use env_path to find the desired program
*/
int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
int *status, int flag);
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
int Xorriso_path_is_hidden(struct XorrisO *xorriso, char *path, int flag);
/* Normalize ACL and sort apart "access" ACL from "default" ACL.
*/
int Xorriso_normalize_acl_text(struct XorrisO *xorriso, char *in_text,
char **access_acl_text, char **default_acl_text, int flag);
int Xorriso_read_mkisofsrc(struct XorrisO *xorriso, int flag);
/* @param flag bit0= list sorting order rather than looking for argv[idx]
*/
int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
int argc, char **argv, int idx, int flag);
#endif /* ! Xorriso_pvt_cmd_includeD */

2143
xorriso/read_run.c Normal file

File diff suppressed because it is too large Load Diff

70
xorriso/read_run.h Normal file
View File

@ -0,0 +1,70 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which
*/
#ifndef Xorriso_pvt_read_run_includeD
#define Xorriso_pvt_read_run_includeD yes
int Xorriso__read_pacifier(IsoImage *image, IsoFileSource *filesource);
int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
IsoNode *node, int flag);
int Xorriso_restore_implicit_properties(struct XorrisO *xorriso,
char *full_disk_path, char *disk_path, char *full_img_path, int flag);
int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
char *img_path, off_t img_offset,
char *disk_path, off_t disk_offset, off_t bytes,
int flag);
int Xorriso_restore_overwrite(struct XorrisO *xorriso,
IsoNode *node, char *img_path,
char *path, char *nominal_path,
struct stat *stbuf, int flag);
int Xorriso_restore_target_hl(struct XorrisO *xorriso, IsoNode *node,
char *disk_path, int *node_idx, int flag);
int Xorriso_restore_prefix_hl(struct XorrisO *xorriso, IsoNode *node,
char *disk_path, int node_idx, int flag);
int Xorriso_register_node_target(struct XorrisO *xorriso, int node_idx,
char *disk_path, int flag);
int Xorriso_restore_disk_object(struct XorrisO *xorriso,
char *img_path, IsoNode *node,
char *disk_path,
off_t offset, off_t bytes, int flag);
int Xorriso_handle_collision(struct XorrisO *xorriso,
IsoNode *node, char *img_path,
char *disk_path, char *nominal_disk_path,
int *stbuf_ret, int flag);
int Xorriso_restore_tree(struct XorrisO *xorriso, IsoDir *dir,
char *img_dir_path, char *disk_dir_path,
off_t boss_mem,
struct LinkiteM *link_stack, int flag);
int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
char *img_path, char *disk_path,
off_t img_offset, off_t disk_offset,
off_t bytes, int flag);
#endif /* ! Xorriso_pvt_read_run_includeD */

938
xorriso/sfile.c Normal file
View File

@ -0,0 +1,938 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains the implementation of functions around files and strings.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
#include "sfile.h"
/* @param flag bit0= do not clip off carriage return at line end
*/
char *Sfile_fgets_n(char *line, int maxl, FILE *fp, int flag)
{
int l;
char *ret;
ret= fgets(line,maxl,fp);
if(ret==NULL)
return(NULL);
l= strlen(line);
if(l > 0 && !(flag & 1)) if(line[l-1] == '\r') line[--l]= 0;
if(l > 0) if(line[l-1] == '\n') line[--l]= 0;
if(l > 0 && !(flag & 1)) if(line[l-1] == '\r') line[--l]= 0;
return(ret);
}
int Sfile_count_char(char *text, char to_count)
{
int count= 0;
char *cpt;
for(cpt= text; *cpt != 0; cpt++)
if(*cpt == to_count)
count++;
return count;
}
int Sfile_count_components(char *path, int flag)
/*
bit0= do not ignore trailing slash
bit1= do not ignore empty components (other than the empty root name)
*/
{
int l,count= 0;
char *cpt;
l= strlen(path);
if(l==0)
return(0);
count= 1;
for(cpt= path+l-1;cpt>=path;cpt--) {
if(*cpt=='/') {
if(*(cpt+1)==0 && !(flag&1))
continue;
if(*(cpt+1)=='/' && !(flag&2))
continue;
count++;
}
}
return(count);
}
int Sfile_component_pointer(char *path, char **sourcept, int idx, int flag)
/*
bit0= do not ignore trailing slash
bit1= do not ignore empty components (other than the empty root name)
bit2= accept 0 as '/'
*/
{
int count= 0;
char *spt;
for(spt= path;*spt!=0 || (flag&4);spt++) {
if(count>=idx) {
*sourcept= spt;
return(1);
}
if(*spt=='/' || *spt==0) {
if(*(spt+1)=='/' && !(flag&2))
continue;
if(*(spt+1)==0 && !(flag&1))
continue;
count++;
}
}
if((flag&1) && count>=idx)
return(1);
return(0);
}
int Sfile_leafname(char *path, char leafname[SfileadrL], int flag)
{
int count, ret;
char *lpt;
leafname[0]= 0;
count= Sfile_count_components(path, 0);
if(count==0)
return(0);
ret= Sfile_component_pointer(path, &lpt, count-1, 0);
if(ret<=0)
return(ret);
if(Sfile_str(leafname, lpt, 0)<=0)
return(0);
lpt= strchr(leafname, '/');
if(lpt!=NULL)
*lpt= 0;
return(1);
}
int Sfile_add_to_path(char path[SfileadrL], char *addon, int flag)
{
int l;
l= strlen(path);
if(l+1>=SfileadrL)
return(0);
if(l==0) {
strcpy(path,"/");
l= 1;
} else if(path[l-1]!='/') {
path[l++]= '/';
path[l]= 0;
}
if(l+strlen(addon)>=SfileadrL)
return(0);
if(addon[0]=='/')
strcpy(path+l,addon+1);
else
strcpy(path+l,addon);
return(1);
}
int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag)
{
int l, i, slashes, prefix_len, path_len;
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
/* >>> ??? how to transport messages to xorriso ? */
sprintf(xorriso->info_text,
"Combination of wd and relative address too long (%d > %d)",
l,SfileadrL-1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
#endif
return(-1);
}
l-= strlen(path);
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);
}
int Sfile_being_group_member(struct stat *stbuf, int flag)
{
int i, suppl_groups;
gid_t *suppl_glist;
if (getegid()==stbuf->st_gid)
return(1);
suppl_groups= getgroups(0, NULL);
suppl_glist= (gid_t *) malloc((suppl_groups + 1) * sizeof(gid_t));
if (suppl_glist==NULL)
return(-1);
suppl_groups= getgroups(suppl_groups+1,suppl_glist);
for (i= 0; i<suppl_groups; i++) {
if (suppl_glist[i]==stbuf->st_gid) {
free((char *) suppl_glist);
return(1);
}
}
free((char *) suppl_glist);
return(0);
}
int Sfile_type(char *filename, int flag)
/*
bit0= return -1 if file is missing
bit1= return a hardlink with siblings as type 5
bit2= evaluate eventual link target rather than the link object itself
bit3= return a socket or a char device as types 7 or 8 rather than 0
*/
/*
return:
0=unknown
1=regular
2=directory
3=symbolic link
4=named pipe
5=multiple hardlink (with bit1)
6=block device
7=socket (with bit3)
8=character device (with bit3)
*/
{
struct stat stbuf;
if(flag&4) {
if(stat(filename,&stbuf)==-1) {
if(flag&1) return(-1);
else return(0);
}
} else {
if(lstat(filename,&stbuf)==-1) {
if(flag&1) return(-1);
else return(0);
}
}
if(S_ISREG(stbuf.st_mode)) {
if(flag&2)
if(stbuf.st_nlink>1)
return(5);
return(1);
}
if(S_ISDIR(stbuf.st_mode))
return(2);
if((stbuf.st_mode&S_IFMT)==S_IFLNK)
return(3);
if(S_ISFIFO(stbuf.st_mode))
return(4);
if(S_ISBLK(stbuf.st_mode))
return(6);
if(flag&8)
if((stbuf.st_mode&S_IFMT)==S_IFSOCK)
return(7);
if(flag&8)
if(S_ISCHR(stbuf.st_mode))
return(8);
return(0);
}
char *Sfile_datestr(time_t tim, short int flag)
/*
bit0=with hours+minutes
bit1=with seconds
bit8= local time rather than UTC
*/
{
static char zeitcode[80]={"000000"};
char puff[80];
struct tm *azt;
if(flag&256)
azt = localtime(&tim);
else
azt = gmtime(&tim);
if(azt->tm_year>99)
sprintf(zeitcode,"%c%1.1d%2.2d%2.2d",
'A'+(azt->tm_year-100)/10,azt->tm_year%10,
azt->tm_mon+1,azt->tm_mday);
else
sprintf(zeitcode,"%2.2d%2.2d%2.2d",
azt->tm_year,azt->tm_mon+1,azt->tm_mday);
if(flag&1){
sprintf(puff,".%2.2d%2.2d",azt->tm_hour,azt->tm_min);
strcat(zeitcode,puff);
}
if(flag&2){
sprintf(puff,"%2.2d",azt->tm_sec);
strcat(zeitcode,puff);
}
return(zeitcode);
}
int Sfile_scale(double value, char *result, int siz, double thresh, int flag)
/*
bit0= eventually ommit 'b'
bit1= make text as short as possible
bit2= no fraction (if it would fit at all)
*/
{
char scale_c,scales[7],form[80], *negpt= NULL, *cpt;
int i,dec_siz= 0,avail_siz= 1;
if(value<0) {
value= -value;
siz--;
result[0]= '-';
negpt= result;
result++;
}
strcpy(scales,"bkmgtp");
scale_c= scales[0];
for(i=1;scales[i]!=0;i++) {
if(value<thresh-0.5)
break;
value/= 1024.0;
scale_c= scales[i];
}
if(scale_c!='b' && !(flag&4)) { /* is there room for fractional part ? */
avail_siz= siz-1;
sprintf(form,"%%.f");
sprintf(result,"%.f",value);
if(((int) strlen(result)) <= avail_siz - 2)
dec_siz= 1; /* we are very modest */
}
if(scale_c=='b' && (flag&1)) {
if(flag&2)
sprintf(form,"%%.f");
else
sprintf(form,"%%%d.f",siz);
sprintf(result,form,value);
} else {
if(flag&2)
sprintf(form,"%%.f%%c");
else if(dec_siz>0)
sprintf(form,"%%%d.%df%%c",avail_siz,dec_siz);
else
sprintf(form,"%%%d.f%%c",siz-1);
sprintf(result,form,value,scale_c);
}
if(negpt != NULL) {
for(cpt= result; *cpt==' '; cpt++);
if(cpt > result) {
*negpt= ' ';
*(cpt - 1)= '-';
}
}
return(1);
}
int Sfile_off_t_text(char text[80], off_t num, int flag)
{
char *tpt;
off_t hnum, scale= 1;
int digits= 0, d, i;
tpt= text;
hnum= num;
if(hnum<0) {
*(tpt++)= '-';
hnum= -num;
}
if(hnum<0) { /* it can stay nastily persistent */
strcpy(text, "_overflow_");
return(0);
}
for(i= 0; i<23; i++) { /* good for up to 70 bit = 10 exp 21.07... */
if(hnum==0)
break;
hnum/= 10;
if(hnum)
scale*= 10;
}
if(i==0) {
strcpy(text, "0");
return(1);
}
if(i==23) {
strcpy(text, "_overflow_");
return(0);
}
digits= i;
hnum= num;
for(; i>0; i--) {
d= hnum/scale;
tpt[digits-i]= '0'+d;
hnum= hnum%scale;
scale/= 10;
}
tpt[digits]= 0;
return(1);
}
/* Converts backslash codes into single characters:
\a BEL 7 , \b BS 8 , \e ESC 27 , \f FF 12 , \n LF 10 , \r CR 13 ,
\t HT 9 , \v VT 11 , \\ \ 92
\[0-9][0-9][0-9] octal code , \x[0-9a-f][0-9a-f] hex code ,
\cX control-x (ascii(X)-64)
@param upto maximum number of characters to examine for backslash.
The scope of a backslash (0 to 3 characters) is not affected.
@param eaten returns the difference in length between input and output
@param flag bit0= only determine *eaten, do not convert
bit1= allow to convert \000 to binary 0
*/
int Sfile_bsl_interpreter(char *text, int upto, int *eaten, int flag)
{
char *rpt, *wpt, num_text[8], wdummy[8];
unsigned int num= 0;
*eaten= 0;
wpt= text;
for(rpt= text; *rpt != 0 && rpt - text < upto; rpt++) {
if(flag & 1)
wpt= wdummy;
if(*rpt == '\\') {
rpt++;
(*eaten)++;
if(*rpt == 'a') {
*(wpt++)= 7;
} else if(*rpt == 'b') {
*(wpt++)= 8;
} else if(*rpt == 'e') {
*(wpt++)= 27;
} else if(*rpt == 'f') {
*(wpt++)= 12;
} else if(*rpt == 'n') {
*(wpt++)= 10;
} else if(*rpt == 'r') {
*(wpt++)= 13;
} else if(*rpt == 't') {
*(wpt++)= 9;
} else if(*rpt == 'v') {
*(wpt++)= 11;
} else if(*rpt == '\\') {
*(wpt++)= '\\';
} else if(rpt[0] >= '0' && rpt[0] <= '7' &&
rpt[1] >= '0' && rpt[1] <= '7' &&
rpt[2] >= '0' && rpt[2] <= '7') {
num_text[0]= '0';
num_text[1]= *(rpt + 0);
num_text[2]= *(rpt + 1);
num_text[3]= *(rpt + 2);
num_text[4]= 0;
sscanf(num_text, "%o", &num);
if((num > 0 || (flag & 2)) && num <= 255) {
rpt+= 2;
(*eaten)+= 2;
*(wpt++)= num;
} else
goto not_a_code;
} else if(rpt[0] == 'x' &&
((rpt[1] >= '0' && rpt[1] <= '9') ||
(rpt[1] >= 'A' && rpt[1] <= 'F') ||
(rpt[1] >= 'a' && rpt[1] <= 'f'))
&&
((rpt[2] >= '0' && rpt[2] <= '9') ||
(rpt[2] >= 'A' && rpt[2] <= 'F') ||
(rpt[2] >= 'a' && rpt[2] <= 'f'))
) {
num_text[0]= *(rpt + 1);
num_text[1]= *(rpt + 2);
num_text[2]= 0;
sscanf(num_text, "%x", &num);
if(num > 0 && num <= 255) {
rpt+= 2;
(*eaten)+= 2;
*(wpt++)= num;
} else
goto not_a_code;
} else if(*rpt == 'c') {
if(rpt[1] > 64 && rpt[1] < 96) {
*(wpt++)= rpt[1] - 64;
rpt++;
(*eaten)++;
} else
goto not_a_code;
} else {
not_a_code:;
*(wpt++)= '\\';
rpt--;
(*eaten)--;
}
} else
*(wpt++)= *rpt;
}
*wpt= *rpt;
return(1);
}
int Sfile_argv_bsl(int argc, char ***argv, int flag)
{
int i, ret, eaten;
char **new_argv= NULL;
if(argc <= 0)
return(0);
new_argv= (char **) Smem_malloC(argc * sizeof(char *));
if(new_argv == NULL)
return(-1);
for(i= 0; i < argc; i++) {
new_argv[i]= strdup((*argv)[i]);
if(new_argv[i] == NULL)
{ret= -1; goto ex;}
ret= Sfile_bsl_interpreter(new_argv[i], strlen(new_argv[i]), &eaten, 0);
if(ret <= 0)
goto ex;
}
ret= 1;
ex:;
if(ret <= 0) {
if(new_argv != NULL)
free((char *) new_argv);
} else
*argv= new_argv;
return(ret);
}
/* @param flag bit0= only encode inside quotes
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
bit2= encode in any case above 126
bit3= encode in any case shellsafe and name-value-safe:
<=42 , 59, 60, 61, 62, 63, 92, 94, 96, >=123
*/
int Sfile_bsl_encoder(char **result, char *text, size_t text_len, int flag)
{
signed char *rpt;
char *wpt;
int count, sq_open= 0, dq_open= 0;
count= 0;
for(rpt= (signed char *) text; (size_t) (((char *) rpt) - text) < text_len;
rpt++) {
count++;
if(flag & 8) {
if(!(*rpt <= 42 || (*rpt >= 59 && *rpt <= 63) ||
*rpt == 92 || *rpt == 94 || *rpt == 96 || *rpt >= 123))
continue;
} else if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\')
continue;
if(((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\') && !(flag & 8))
count++;
else
count+= 3;
}
(*result)= wpt= calloc(count + 1, 1);
if(wpt == NULL)
return(-1);
for(rpt= (signed char *) text; (size_t) (((char *) rpt) - text) < text_len;
rpt++) {
if(*rpt == '\'')
sq_open= !(sq_open || dq_open);
if(*rpt == '"')
dq_open= !(sq_open || dq_open);
if(flag & 8) {
if(!(*rpt <= 42 || (*rpt >= 59 && *rpt <= 63) ||
*rpt == 92 || *rpt == 94 || *rpt == 96 || *rpt >= 123)) {
*(wpt++)= *rpt;
continue;
}
} else if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\') {
*(wpt++)= *rpt;
continue;
} else if( ((flag & 1) && !(sq_open || dq_open)) &&
!((flag & 2) && (*rpt >= 1 && * rpt <= 31 &&
!(*rpt == 7 || *rpt == 8 || *rpt == 9 || *rpt == 10 ||
*rpt == 12 || *rpt == 13))) &&
!((flag & 4) && (*rpt > 126 || *rpt < 0)) &&
!((flag & 6) && *rpt == '\\')) {
*(wpt++)= *rpt;
continue;
}
*(wpt++)= '\\';
if(((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\') && !(flag&8)) {
if(*rpt == 7)
*(wpt++)= 'a';
else if(*rpt == 8)
*(wpt++)= 'b';
else if(*rpt == 9)
*(wpt++)= 't';
else if(*rpt == 10) {
*(wpt++)= 'n';
} else if(*rpt == 11)
*(wpt++)= 'v';
else if(*rpt == 12)
*(wpt++)= 'f';
else if(*rpt == 13)
*(wpt++)= 'c';
else if(*rpt == 27)
*(wpt++)= 'e';
else if(*rpt == '\\')
*(wpt++)= '\\';
} else {
sprintf(wpt, "%-3.3o", (unsigned int) *((unsigned char *) rpt));
wpt+= 3;
}
}
*wpt= 0;
return(1);
}
int Sfile_destroy_argv(int *argc, char ***argv, int flag)
{
int i;
if(*argc>0 && *argv!=NULL){
for(i=0;i<*argc;i++){
if((*argv)[i]!=NULL)
Smem_freE((*argv)[i]);
}
Smem_freE((char *) *argv);
}
*argc= 0;
*argv= NULL;
return(1);
}
int Sfile_sep_make_argv(char *progname, char *line, char *separators,
int max_words, int *argc, char ***argv, int flag)
/*
bit0= read progname as first argument from line
bit1= just release argument list argv and return
bit2= abort with return(0) if incomplete quotes are found
bit3= eventually prepend missing '-' to first argument read from line
bit4= like bit2 but only check quote completeness, do not allocate memory
bit5+6= interpretation of backslashes:
0= no interpretation, leave unchanged
1= only inside double quotes
2= outside single quotes
3= everywhere
bit7= append a NULL element to argv
*/
{
int i,pass,maxl=0,l,argzaehl=0,bufl,line_start_argc, bsl_mode, ret= 0, eaten;
char *cpt,*start;
char *buf= NULL;
Sfile_destroy_argv(argc,argv,0);
if(flag&2)
{ret= 1; goto ex;}
if(flag & 16)
flag|= 4;
bsl_mode= (flag >> 5) & 3;
buf= calloc(strlen(line) + SfileadrL, 1);
if(buf == NULL)
{ret= -1; goto ex;}
for(pass=0;pass<2;pass++) {
cpt= line-1;
if(!(flag&1)){
argzaehl= line_start_argc= 1;
if(pass==0)
maxl= strlen(progname);
else
strcpy((*argv)[0],progname);
} else {
argzaehl= line_start_argc= 0;
if(pass==0) maxl= 0;
}
while(*(++cpt)!=0){
if(*separators) {
if(strchr(separators, *cpt) != NULL)
continue;
} else if(isspace(*cpt))
continue;
start= cpt;
buf[0]= 0;
cpt--;
if(max_words > 0 && argzaehl >= max_words && *cpt != 0) {
/* take uninterpreted up to the end */
cpt+= strlen(cpt) - 1;
}
while(*(++cpt)!=0) {
if(*separators) {
if(strchr(separators, *cpt) != NULL)
break;
} else if(isspace(*cpt))
break;
if(*cpt=='"'){
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
start= cpt+1;
while(*(++cpt)!=0) if(*cpt=='"') break;
if((flag&4) && *cpt==0)
{ret= 0; goto ex;}
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l);
buf[bufl + l]= 0;
if(bsl_mode >= 1) {
ret= Sfile_bsl_interpreter(buf + bufl, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
start= cpt+1;
}else if(*cpt=='\''){
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
start= cpt+1;
while(*(++cpt)!=0) if(*cpt=='\'') break;
if((flag&4) && *cpt==0)
{ret= 0; goto ex;}
l= cpt-start; bufl= strlen(buf);
if(l>0) {
strncat(buf,start,l);buf[bufl+l]= 0;
if(bsl_mode >= 2) {
ret= Sfile_bsl_interpreter(buf + bufl, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
start= cpt+1;
}
if(*cpt==0) break;
}
l= cpt-start;
bufl= strlen(buf);
if(l>0) {
strncpy(buf + bufl, start, l); buf[bufl + l]= 0;
if(bsl_mode >= 3) {
ret= Sfile_bsl_interpreter(buf, l, &eaten, 0);
if(ret <= 0)
goto ex;
}
}
l= strlen(buf);
if(pass==0){
if(argzaehl==line_start_argc && (flag&8))
if(buf[0]!='-' && buf[0]!=0 && buf[0]!='#')
l++;
if(l>maxl) maxl= l;
}else{
strcpy((*argv)[argzaehl],buf);
if(argzaehl==line_start_argc && (flag&8))
if(buf[0]!='-' && buf[0]!=0 && buf[0]!='#')
sprintf((*argv)[argzaehl],"-%s", buf);
}
argzaehl++;
if(*cpt==0) break;
}
if(pass==0){
if(flag & 16)
{ret= 1; goto ex;}
*argc= argzaehl;
if(argzaehl>0 || (flag & 128)) {
*argv= (char **) Smem_malloC((argzaehl + !!(flag & 128))
* sizeof(char *));
if(*argv==NULL)
{ret= -1; goto ex;}
}
for(i=0;i<*argc;i++) {
(*argv)[i]= (char *) Smem_malloC((maxl+1));
if((*argv)[i]==NULL)
{ret= -1; goto ex;}
}
if(flag & 128)
(*argv)[*argc]= NULL;
}
}
ret= 1;
ex:
if(buf != NULL)
free(buf);
return(ret);
}
int Sfile_make_argv(char *progname, char *line, int *argc, char ***argv,
int flag)
{
return Sfile_sep_make_argv(progname, line, "", 0, argc, argv, flag);
}
/* @param flag bit0= append */
int Sfile_str(char target[SfileadrL], char *source, int flag)
{
int l;
l= strlen(source);
if(flag&1)
l+= strlen(target);
if(l>=SfileadrL) {
fprintf(stderr, "--- Path string overflow (%d > %d). Malicious input ?\n",
l,SfileadrL-1);
return(0);
}
if(flag&1)
strcat(target, source);
else
strcpy(target, source);
return(1);
}
/** Combine environment variable HOME with given filename
@param filename Address relative to $HOME
@param fileadr Resulting combined address
@param fa_size Size of array fileadr
@param flag Unused yet
@return 1=ok , 0=no HOME variable , -1=result address too long
*/
int Sfile_home_adr_s(char *filename, char *fileadr, int fa_size, int flag)
{
char *home;
strcpy(fileadr,filename);
home= getenv("HOME");
if(home==NULL)
return(0);
if((int) (strlen(home) + strlen(filename) + 1) >= fa_size)
return(-1);
strcpy(fileadr,home);
if(filename[0]!=0){
strcat(fileadr,"/");
strcat(fileadr,filename);
}
return(1);
}
/** Return a double representing seconds and microseconds since 1 Jan 1970 */
double Sfile_microtime(int flag)
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv,&tz);
return((double) (tv.tv_sec+1.0e-6*tv.tv_usec));
}
int Sfile_decode_datestr(struct tm *reply, char *text, int flag)
/* YYMMDD[.hhmm[ss]] */
{
int i,l;
time_t current_time;
struct tm *now;
current_time= time(0);
now= localtime(&current_time);
for(i=0; i < (int) sizeof(struct tm); i++)
((char *) reply)[i]= ((char *) now)[i];
if(text[0]<'0'|| (text[0]>'9' && text[0]<'A') || text[0]>'Z')
return(0);
l= strlen(text);
for(i=1;i<l;i++)
if(text[i]<'0'||text[i]>'9')
break;
if(i!=6)
return(0);
if(text[i]==0)
goto decode;
if(text[i]!='.' || (l!=11 && l!=13))
return(0);
for(i++;i<l;i++)
if(text[i]<'0'||text[i]>'9')
break;
if(i!=l)
return(0);
decode:;
reply->tm_hour= 0;
reply->tm_min= 0;
reply->tm_sec= 0;
i= 0;
if(text[0]>='A')
reply->tm_year= 100+(text[i]-'A')*10+text[1]-'0';
else
reply->tm_year= 10*(text[0]-'0')+text[1]-'0';
reply->tm_mon= 10*(text[2]-'0')+text[3]-'0'-1;
reply->tm_mday= 10*(text[4]-'0')+text[5]-'0';
if(l==6)
return(1);
reply->tm_hour= 10*(text[7]-'0')+text[8]-'0';
reply->tm_min= 10*(text[9]-'0')+text[10]-'0';
if(l==11)
return(1);
reply->tm_sec= 10*(text[11]-'0')+text[12]-'0';
return(1);
}

140
xorriso/sfile.h Normal file
View File

@ -0,0 +1,140 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions around files and strings.
*/
#ifndef Xorriso_pvt_sfile_includeD
#define Xorriso_pvt_sfile_includeD yes
#define TSOB_FELD(typ, count) (typ *) calloc(1, (count)*sizeof(typ));
#define Smem_malloC malloc
#define Smem_freE free
#define Xorriso_alloc_meM(pt, typ, count) { \
pt= (typ *) calloc(1, (count) * sizeof(typ)); \
if(pt == NULL) { \
Xorriso_no_malloc_memory(xorriso, NULL, 0); \
ret= -1; \
goto ex; \
} }
#define Xorriso_free_meM(pt) { \
if(pt != NULL) \
free((char *) pt); \
}
#define SfileadrL 4096
int Sfile_str(char target[SfileadrL], char *source, int flag);
double Sfile_microtime(int flag);
int Sfile_add_to_path(char path[SfileadrL], char *addon, int flag);
int Sfile_scale(double value, char *result, int siz, double thresh, int flag);
int Sfile_destroy_argv(int *argc, char ***argv, int flag);
int Sfile_count_char(char *text, char to_count);
/*
bit0= do not ignore trailing slash
bit1= do not ignore empty components (other than the empty root name)
*/
int Sfile_count_components(char *path, int flag);
/*
@param flag
bit0= return -1 if file is missing
bit1= return a hardlink with siblings as type 5
bit2= evaluate eventual link target rather than the link object itself
bit3= return a socket or a char device as types 7 or 8 rather than 0
@return
0=unknown
1=regular
2=directory
3=symbolic link
4=named pipe
5=multiple hardlink (with bit1)
6=block device
7=socket (with bit3)
8=character device (with bit3)
*/
int Sfile_type(char *filename, int flag);
/* @param flag bit0= only encode inside quotes
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
bit2= encode in any case above 126
bit3= encode in any case shellsafe:
<=42 , 59, 60, 62, 63, 92, 94, 96, >=123
*/
int Sfile_bsl_encoder(char **result, char *text, size_t text_len, int flag);
int Sfile_argv_bsl(int argc, char ***argv, int flag);
/*
bit0= read progname as first argument from line
bit1= just release argument list argv and return
bit2= abort with return(0) if incomplete quotes are found
bit3= eventually prepend missing '-' to first argument read from line
bit4= like bit2 but only check quote completeness, do not allocate memory
bit5+6= interpretation of backslashes:
0= no interpretation, leave unchanged
1= only inside double quotes
2= outside single quotes
3= everywhere
bit7= append a NULL element to argv
*/
int Sfile_make_argv(char *progname, char *line, int *argc, char ***argv,
int flag);
int Sfile_sep_make_argv(char *progname, char *line, char *separators,
int max_argc, int *argc, char ***argv, int flag);
/* YYMMDD[.hhmm[ss]] */
int Sfile_decode_datestr(struct tm *reply, char *text, int flag);
int Sfile_off_t_text(char text[80], off_t num, int flag);
int Sfile_leafname(char *path, char leafname[SfileadrL], int flag);
/* @param flag bit0= do not clip of carriage return at line end
*/
char *Sfile_fgets_n(char *line, int maxl, FILE *fp, int flag);
/*
bit0=with hours+minutes
bit1=with seconds
bit8= local time rather than UTC
*/
char *Sfile_datestr(time_t tim, short int flag);
/* Converts backslash codes into single characters:
\a BEL 7 , \b BS 8 , \e ESC 27 , \f FF 12 , \n LF 10 , \r CR 13 ,
\t HT 9 , \v VT 11 , \\ \ 92
\[0-9][0-9][0-9] octal code , \x[0-9a-f][0-9a-f] hex code ,
\cX control-x (ascii(X)-64)
@param upto maximum number of characters to examine for backslash.
The scope of a backslash (0 to 3 characters) is not affected.
@param eaten returns the difference in length between input and output
@param flag bit0= only determine *eaten, do not convert
bit1= allow to convert \000 to binary 0
*/
int Sfile_bsl_interpreter(char *text, int upto, int *eaten, int flag);
int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag);
int Sfile_home_adr_s(char *filename, char *fileadr, int fa_size, int flag);
#endif /* ! Xorriso_pvt_sfile_includeD */

722
xorriso/sort_cmp.c Normal file
View File

@ -0,0 +1,722 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains functions which sort and compare tree nodes.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <errno.h>
#include "base_obj.h"
#include "lib_mgt.h"
#include "sort_cmp.h"
#include "iso_tree.h"
#include "iso_manip.h"
int Xorriso__findi_sorted_ino_cmp(const void *p1, const void *p2)
{
int ret;
IsoNode *n1, *n2;
n1= *((IsoNode **) p1);
n2= *((IsoNode **) p2);
ret= Xorriso__node_lba_cmp(&n1, &n2);
if(ret)
return (ret > 0 ? 1 : -1);
ret= iso_node_cmp_ino(n1, n2, 0);
return(ret);
}
/* Not suitable for qsort() but for cross-array comparisons.
p1 and p2 are actually IsoNode *p1, IsoNode *p2
*/
int Xorriso__hln_cmp(const void *p1, const void *p2)
{
int ret;
ret= Xorriso__findi_sorted_ino_cmp(&p1, &p2);
if(ret)
return (ret > 0 ? 1 : -1);
if(p1 != p2)
return(p1 < p2 ? -1 : 1);
return(0);
}
/*
p1 and p2 are actually IsoNode **p1, IsoNode **p2
*/
int Xorriso__findi_sorted_cmp(const void *p1, const void *p2)
{
int ret;
ret= Xorriso__findi_sorted_ino_cmp(p1, p2);
if(ret)
return (ret > 0 ? 1 : -1);
if(p1 != p2)
return(p1 < p2 ? -1 : 1);
return(0);
}
int Xorriso_sort_node_array(struct XorrisO *xorriso, int flag)
{
if(xorriso->node_counter <= 0)
return(0);
qsort(xorriso->node_array, xorriso->node_counter, sizeof(IsoNode *),
Xorriso__findi_sorted_cmp);
return(1);
}
int Xorriso__search_node(void *node_array[], int n,
int (*cmp)(const void *p1, const void *p2),
void *node, int *idx, int flag)
{
int ret, l, r, p, pos;
if(n == 0)
return(0);
l= 0;
r= n + 1;
while(1) {
p= (r - l) / 2;
if(p == 0)
break;
p+= l;
/* NULL elements may indicate invalid nodes. Their first valid right neigbor
will serve as proxy. If none exists, then the test pushes leftwards.
*/
for(pos= p - 1; pos < n; pos++)
if(node_array[pos] != NULL)
break;
if(pos < n)
ret= (*cmp)(&(node_array[pos]), &node);
else
ret= 1;
if(ret < 0)
l= p;
else if(ret > 0)
r= p;
else {
*idx= pos;
return(1);
}
}
return(0);
}
int Xorriso_search_in_hln_array(struct XorrisO *xorriso,
void *node, int *idx, int flag)
{
int ret;
if(xorriso->hln_array == NULL || xorriso->hln_count <= 0)
return(0);
ret= Xorriso__search_node(xorriso->hln_array, xorriso->hln_count,
Xorriso__findi_sorted_ino_cmp, node, idx, 0);
return ret;
}
int Xorriso__get_di(IsoNode *node, dev_t *dev, ino_t *ino, int flag)
{
int ret, i, i_end, imgid, error_code;
size_t value_length= 0;
char *value= NULL, *msg= NULL, severity[80];
unsigned char *vpt;
static char *name= "isofs.di";
#ifdef NIX
/* <<< */
Xorriso_get_di_counteR++;
#endif /* NIX */
msg= TSOB_FELD(char, ISO_MSGS_MESSAGE_LEN);
if(msg == NULL)
{ret= -1; goto ex;}
*dev= 0;
*ino= 0;
ret= iso_node_lookup_attr(node, name, &value_length, &value, 0);
if(ret <= 0) {
/* Drop any pending messages because there is no xorriso to take them */
iso_obtain_msgs("NEVER", &error_code, &imgid, msg, severity);
goto ex;
}
vpt= (unsigned char *) value;
for(i= 1; i <= vpt[0] && i < (int) value_length; i++)
*dev= ((*dev) << 8) | vpt[i];
i_end= i + vpt[i] + 1;
for(i++; i < i_end && i < (int) value_length; i++)
*ino= ((*ino) << 8) | vpt[i];
free(value);
ret= 1;
ex:;
if(msg != NULL)
free(msg);
return(ret);
}
int Xorriso__di_ino_cmp(const void *p1, const void *p2)
{
int ret;
IsoNode *n1, *n2;
dev_t d1, d2;
ino_t i1, i2;
n1= *((IsoNode **) p1);
n2= *((IsoNode **) p2);
ret= Xorriso__get_di(n1, &d1, &i1, 0);
if(ret <= 0)
{d1= 0; i1= 0;}
ret= Xorriso__get_di(n2, &d2, &i2, 0);
if(ret <= 0)
{d2= 0; i2= 0;}
if(d1 < d2)
return(-1);
if(d1 > d2)
return(1);
if(i1 < i2)
return(-1);
if(i1 > i2)
return(1);
if(d1 == 0 && i1 == 0 && n1 != n2)
return(n1 < n2 ? -1 : 1);
return(0);
}
int Xorriso__di_cmp(const void *p1, const void *p2)
{
int ret;
IsoNode *n1, *n2;
ret= Xorriso__di_ino_cmp(p1, p2);
if(ret)
return(ret);
n1= *((IsoNode **) p1);
n2= *((IsoNode **) p2);
if(n1 != n2)
return(n1 < n2 ? -1 : 1);
return(0);
}
int Xorriso__sort_di(void *node_array[], int count, int flag)
{
if(count <= 0)
return(0);
qsort(node_array, count, sizeof(IsoNode *), Xorriso__di_cmp);
return(1);
}
int Xorriso_invalidate_di_item(struct XorrisO *xorriso, IsoNode *node,
int flag)
{
int ret, idx;
if(xorriso->di_array == NULL)
return(1);
ret= Xorriso__search_node(xorriso->di_array, xorriso->di_count,
Xorriso__di_cmp, node, &idx, 0);
if(ret <= 0)
return(ret == 0);
if(xorriso->di_array[idx] != NULL)
iso_node_unref(xorriso->di_array[idx]);
xorriso->di_array[idx]= NULL;
return(1);
}
/* @param flag bit0= return 1 even if matching nodes were found but node is
not among them
bit1= use Xorriso__di_cmp() rather than Xorriso__di_ino_cmp()
*/
int Xorriso_search_di_range(struct XorrisO *xorriso, IsoNode *node,
int *idx, int *low, int *high, int flag)
{
int ret, i, found;
int (*cmp)(const void *p1, const void *p2)= Xorriso__di_ino_cmp;
if(flag & 2)
cmp= Xorriso__di_cmp;
*high= *low= *idx= -1;
ret= Xorriso__search_node(xorriso->di_array, xorriso->di_count,
cmp, node, &found, 0);
if(ret <= 0)
return(0);
*low= *high= found;
for(i= found + 1; i < xorriso->di_count; i++)
if(xorriso->di_array[i] != NULL) {
if((*cmp)(&node, &(xorriso->di_array[i])) != 0)
break;
*high= i;
}
for(i= found - 1; i >= 0; i--)
if(xorriso->di_array[i] != NULL) {
if((*cmp)(&node, &(xorriso->di_array[i])) != 0)
break;
*low= i;
}
for(i= *low; i <= *high; i++)
if(xorriso->di_array[i] == node) {
*idx= i;
break;
}
return(*idx >= 0 || (flag & 1));
}
int Xorriso__node_lba_cmp(const void *node1, const void *node2)
{
int ret;
int lba1= 0, lba2= 0;
ret= Xorriso__file_start_lba(*((IsoNode **) node1), &lba1, 0);
if(ret!=1)
lba1= 0;
ret= Xorriso__file_start_lba(*((IsoNode **) node2), &lba2, 0);
if(ret!=1)
lba2= 0;
return(lba1-lba2);
}
int Xorriso__node_name_cmp(const void *node1, const void *node2)
{
char *name1, *name2;
name1= (char *) iso_node_get_name(*((IsoNode **) node1));
name2= (char *) iso_node_get_name(*((IsoNode **) node2));
return(strcmp(name1,name2));
}
/* @param flag bit0= only accept directory nodes
bit1= do not report memory usage as DEBUG
bit2= do not apply search pattern but accept any node
*/
int Xorriso_sorted_node_array(struct XorrisO *xorriso,
IsoDir *dir_node,
int *nodec, IsoNode ***node_array,
off_t boss_mem, int flag)
{
int i, ret, failed_at;
char *npt;
IsoDirIter *iter= NULL;
IsoNode *node;
off_t mem;
mem= ((*nodec)+1)*sizeof(IsoNode *);
ret= Xorriso_check_temp_mem_limit(xorriso, mem+boss_mem, flag&2);
if(ret<=0)
return(ret);
*node_array= calloc(sizeof(IsoNode *), (*nodec)+1);
if(*node_array==NULL) {
sprintf(xorriso->info_text,
"Cannot allocate memory for %d directory entries", *nodec);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1);
}
ret= iso_dir_get_children(dir_node, &iter);
if(ret<0) {
Xorriso_cannot_create_iter(xorriso, ret, 0);
return(-1);
}
for(i= 0; iso_dir_iter_next(iter, &node) == 1 && i<*nodec; ) {
npt= (char *) iso_node_get_name(node);
if(!(flag&4)) {
ret= Xorriso_regexec(xorriso, npt, &failed_at, 0);
if(ret)
continue; /* no match */
}
if(flag&1)
if(!LIBISO_ISDIR(node))
continue;
(*node_array)[i++]= node;
}
iso_dir_iter_free(iter);
*nodec= i;
if(*nodec<=0)
return(1);
qsort(*node_array, *nodec, sizeof(IsoNode *), Xorriso__node_name_cmp);
return(1);
}
int Xorriso_remake_hln_array(struct XorrisO *xorriso, int flag)
{
int ret, addon_nodes= 0, i, old_count, old_pt, new_pt;
IsoNode **old_nodes;
char **old_targets;
/* Count hln_targets of which the node has been deleted meanwhile */
for(i= 0; i < xorriso->hln_count; i++) {
if(xorriso->hln_targets[i] == NULL)
continue;
if(Xorriso_node_is_valid(xorriso, xorriso->hln_array[i], 0))
continue;
addon_nodes++;
}
ret= Xorriso_all_node_array(xorriso, addon_nodes, 0);
if(ret <= 0)
goto ex;
if(addon_nodes > 0) {
/* Transfer delete nodes with hln_target to node array */
for(i= 0; i < xorriso->hln_count; i++) {
if(xorriso->hln_targets[i] == NULL)
continue;
if(Xorriso_node_is_valid(xorriso, xorriso->hln_array[i], 0))
continue;
if(xorriso->node_counter < xorriso->node_array_size) {
xorriso->node_array[xorriso->node_counter++]= xorriso->hln_array[i];
iso_node_ref(xorriso->node_array[xorriso->node_counter - 1]);
}
}
}
Xorriso_sort_node_array(xorriso, 0);
old_nodes= (IsoNode **) xorriso->hln_array;
old_targets= (char **) xorriso->hln_targets;
old_count= xorriso->hln_count;
xorriso->hln_array= 0;
xorriso->hln_targets= NULL;
/* Transfer node_array to di_array without unrefering nodes */
xorriso->hln_count= xorriso->node_counter;
xorriso->hln_array= xorriso->node_array;
xorriso->node_counter= 0;
xorriso->node_array_size= 0;
xorriso->node_array= NULL;
/* Allocate hln_targets */
ret= Xorriso_new_hln_array(xorriso, xorriso->temp_mem_limit, 1);
if(ret<=0)
goto ex;
xorriso->node_targets_availmem= xorriso->temp_mem_limit;
if(old_targets != NULL) {
/* Transfer targets from old target array */;
new_pt= old_pt= 0;
while(new_pt < xorriso->hln_count && old_pt < old_count) {
ret= Xorriso__hln_cmp(xorriso->hln_array[new_pt], old_nodes[old_pt]);
if(ret < 0) {
new_pt++;
} else if(ret > 0) {
old_pt++;
} else {
xorriso->hln_targets[new_pt]= old_targets[old_pt];
if(old_targets[old_pt] != NULL)
xorriso->temp_mem_limit-= strlen(old_targets[old_pt]) + 1;
old_targets[old_pt]= NULL;
new_pt++;
old_pt++;
}
}
for(old_pt= 0; old_pt < old_count; old_pt++)
if(old_targets[old_pt] != NULL) /* (should not happen) */
free(old_targets[old_pt]);
free((char *) old_targets);
}
if(old_nodes != NULL) {
for(old_pt= 0; old_pt < old_count; old_pt++)
if(old_nodes[old_pt] != NULL)
iso_node_unref(old_nodes[old_pt]);
free((char *) old_nodes);
}
xorriso->hln_change_pending= 0;
ret= 1;
ex:;
return(ret);
}
/* @param flag bit0= overwrite existing hln_array (else return 2)
*/
int Xorriso_make_hln_array(struct XorrisO *xorriso, int flag)
{
int ret;
if(xorriso->hln_array != NULL && !(flag & 1)) {
/* If no fresh image manipulations occured: keep old array */
if(!xorriso->hln_change_pending)
return(2);
ret= Xorriso_remake_hln_array(xorriso, 0);
return(ret);
}
Xorriso_destroy_hln_array(xorriso, 0);
ret= Xorriso_all_node_array(xorriso, 0, 0);
if(ret <= 0)
goto ex;
Xorriso_sort_node_array(xorriso, 0);
/* Transfer node_array to di_array without unrefering nodes */
xorriso->hln_count= xorriso->node_counter;
xorriso->hln_array= xorriso->node_array;
xorriso->node_counter= 0;
xorriso->node_array_size= 0;
xorriso->node_array= NULL;
/* Allocate hln_targets */
ret= Xorriso_new_hln_array(xorriso, xorriso->temp_mem_limit, 1);
if(ret<=0) {
Xorriso_destroy_hln_array(xorriso, 0);
goto ex;
}
xorriso->node_targets_availmem= xorriso->temp_mem_limit;
xorriso->hln_change_pending= 0;
ret= 1;
ex:;
return(ret);
}
/* @param flag bit0= overwrite existing di_array (else return 2)
bit1= make di_array despite xorriso->ino_behavior bit 3
*/
int Xorriso_make_di_array(struct XorrisO *xorriso, int flag)
{
int ret, bytes;
#ifdef NIX
/* <<< */
unsigned long old_gdic;
old_gdic= Xorriso_get_di_counteR;
#endif /* NIX */
if((xorriso->ino_behavior & 8 ) && !(flag & 2))
return(2);
if(xorriso->di_array != NULL && !(flag & 1))
return(2);
Xorriso_finish_hl_update(xorriso, 0);
ret= Xorriso_all_node_array(xorriso, 0, 0);
if(ret <= 0)
goto ex;
bytes= xorriso->node_array_size / 8 + 1;
xorriso->di_do_widen= calloc(bytes, 1);
if(xorriso->di_do_widen == NULL) {
Xorriso_no_malloc_memory(xorriso, NULL, 0);
ret= -1; goto ex;
}
/* Transfer node_array to di_array without unrefering nodes */
xorriso->di_count= xorriso->node_counter;
xorriso->di_array= xorriso->node_array;
xorriso->node_counter= 0;
xorriso->node_array_size= 0;
xorriso->node_array= NULL;
Xorriso__sort_di((void *) xorriso->di_array, xorriso->di_count, 0);
ret= 1;
ex:;
#ifdef NIX
/* <<< */
fprintf(stderr, "xorriso_DEBUG: sort_count= %lu\n",
Xorriso_get_di_counteR - old_gdic);
#endif /* NIX */
return(ret);
}
/*
@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
1= go on with processing
2= iso_rr_path is fully updated
*/
int Xorriso_hardlink_update(struct XorrisO *xorriso, int *compare_result,
char *disk_path, char *iso_rr_path, int flag)
{
int ret, hret, idx, low, high, i, do_overwrite= 0, did_fake_di= 0;
int follow_links, old_idx= -1;
IsoNode *node;
struct stat stbuf;
dev_t old_dev;
ino_t old_ino;
if(xorriso->di_array == NULL)
return(1);
follow_links= xorriso->do_follow_links ||
(xorriso->do_follow_param && !(flag & 4));
ret= Xorriso_node_from_path(xorriso, NULL, iso_rr_path, &node, 0);
if(ret <= 0)
return(ret);
if(LIBISO_ISDIR(node))
return(1);
/* Handle eventual hardlink split : */
/* This is achieved by setting the content change bit. Reason:
The node needs to be removed from di_array because its di is
not matching its array index any more. So it becomes invisible for
the join check of eventual later hardlink siblings. Therefore
it must be updated now, even if it has currently no siblings
which it leaves or which it joins.
*/
if(!(flag & (1 | 2)))
do_overwrite= 1;
Xorriso__get_di(node, &old_dev, &old_ino, 0);
ret= Xorriso__search_node(xorriso->di_array, xorriso->di_count,
Xorriso__di_cmp, node, &idx, 0);
if(ret < 0)
{ret= 0; goto ex;}
if(ret > 0)
old_idx= idx;
/* Handle eventual hardlink joining : */
if(follow_links)
ret= stat(disk_path, &stbuf);
else
ret= lstat(disk_path, &stbuf);
if(ret==-1)
{ret= 0; goto ex;}
/* Are there new dev-ino-siblings in the image ? */
/* Fake isofs.di */
if(!(flag & 1)) {
ret= Xorriso_record_dev_inode(xorriso, disk_path, stbuf.st_dev,
stbuf.st_ino, node, iso_rr_path, 1);
if(ret <= 0)
{ret= -1; goto ex;}
did_fake_di= 1;
/* temporarily remove node from di_array so it does not disturb
search by its fake di info */;
if(old_idx >= 0)
xorriso->di_array[old_idx]= NULL;
}
ret= Xorriso_search_di_range(xorriso, node, &idx, &low, &high, 1);
if(did_fake_di) {
/* Revoke fake of isofs.di */
hret= Xorriso_record_dev_inode(xorriso, disk_path, old_dev, old_ino,
node, iso_rr_path, 1);
if(hret <= 0)
{ret= -1; goto ex;}
if(old_idx >= 0)
xorriso->di_array[old_idx]= node;
}
if(ret == 0)
{ret= 1; goto ex;}
if(ret < 0)
{ret= 0; goto ex;}
#ifdef Xorriso_hardlink_update_debuG
/* <<< */
if(low < high || idx < 0) {
fprintf(stderr,
"xorriso_DEBUG: old_idx= %d , low= %d , high= %d , iso= '%s' , disk='%s'\n",
old_idx, low, high, iso_rr_path, disk_path);
fprintf(stderr,
"xorriso_DEBUG: old_dev= %lu , old_ino= %lu , dev= %lu , ino= %lu\n",
(unsigned long) old_dev, (unsigned long) old_ino,
(unsigned long) stbuf.st_dev, (unsigned long) stbuf.st_ino);
if(idx >= 0 && idx != old_idx)
fprintf(stderr, "xorriso_DEBUG: idx= %d , old_idx = %d\n", idx, old_idx);
}
#endif /* Xorriso_hardlink_update_debuG */
/* Overwrite all valid siblings : */
for(i= low; i <= high; i++) {
if(i == idx || xorriso->di_array[i] == NULL)
continue;
#ifdef Xorriso_hardlink_update_debuG
/* <<< */
{
ino_t ino;
dev_t dev;
Xorriso__get_di(xorriso->di_array[i], &dev, &ino, 0);
fprintf(stderr, "xorriso_DEBUG: iso_sibling= '%s' , dev= %lu , ino= %lu\n",
node_path, (unsigned long) dev, (unsigned long) ino);
}
#endif /* Xorriso_hardlink_update_debuG */
xorriso->di_do_widen[i / 8]|= 1 << (i % 8);
}
ret= 1;
ex:;
if(do_overwrite)
*compare_result|= (1<<15);
if(old_idx >= 0 && (*compare_result & (3 << 21))) {
/* The old di info is obsolete */
if(xorriso->di_array[old_idx] != NULL)
iso_node_unref(xorriso->di_array[old_idx]);
xorriso->di_array[old_idx]= NULL;
}
return(ret);
}
/* @param flag bit0= do not destroy di_array
*/
int Xorriso_finish_hl_update(struct XorrisO *xorriso, int flag)
{
int ret, zero= 0;
char *argv[4];
struct Xorriso_lsT *disk_lst, *iso_lst;
if(xorriso->di_array == NULL)
{ret= 1; goto ex;}
disk_lst= xorriso->di_disk_paths;
iso_lst= xorriso->di_iso_paths;
while(disk_lst != NULL && iso_lst != NULL) {
argv[0]= Xorriso_lst_get_text(iso_lst, 0);
argv[1]= "-exec";
argv[2]= "widen_hardlinks";
argv[3]= Xorriso_lst_get_text(disk_lst, 0);
zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 0); /* -findi */
if(ret < 0)
goto ex;
disk_lst= Xorriso_lst_get_next(disk_lst, 0);
iso_lst= Xorriso_lst_get_next(iso_lst, 0);
}
ret= 1;
ex:;
if(!(flag & 1))
Xorriso_destroy_di_array(xorriso, 0);
return(ret);
}

62
xorriso/sort_cmp.h Normal file
View File

@ -0,0 +1,62 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
This file contains declarations of functions which sort and compare
tree nodes.
*/
#ifndef Xorriso_pvt_sort_cmp_includeD
#define Xorriso_pvt_sort_cmp_includeD yes
int Xorriso__findi_sorted_ino_cmp(const void *p1, const void *p2);
int Xorriso__hln_cmp(const void *p1, const void *p2);
int Xorriso__findi_sorted_cmp(const void *p1, const void *p2);
int Xorriso__search_node(void *node_array[], int n,
int (*cmp)(const void *p1, const void *p2),
void *node, int *idx, int flag);
int Xorriso_search_in_hln_array(struct XorrisO *xorriso,
void *node, int *idx, int flag);
int Xorriso__get_di(IsoNode *node, dev_t *dev, ino_t *ino, int flag);
int Xorriso__di_ino_cmp(const void *p1, const void *p2);
int Xorriso__di_cmp(const void *p1, const void *p2);
int Xorriso__sort_di(void *node_array[], int count, int flag);
int Xorriso_invalidate_di_item(struct XorrisO *xorriso, IsoNode *node,
int flag);
int Xorriso_search_di_range(struct XorrisO *xorriso, IsoNode *node,
int *idx, int *low, int *high, int flag);
int Xorriso__node_lba_cmp(const void *node1, const void *node2);
int Xorriso__node_name_cmp(const void *node1, const void *node2);
int Xorriso_sorted_node_array(struct XorrisO *xorriso,
IsoDir *dir_node,
int *nodec, IsoNode ***node_array,
off_t boss_mem, int flag);
int Xorriso_remake_hln_array(struct XorrisO *xorriso, int flag);
int Xorriso_make_di_array(struct XorrisO *xorriso, int flag);
int Xorriso_search_hardlinks(struct XorrisO *xorriso, IsoNode *node,
int *node_idx, int *min_hl, int *max_hl, int flag);
#endif /* ! Xorriso_pvt_sort_cmp_includeD */

3897
xorriso/text_io.c Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More