Compare commits

...

476 Commits

Author SHA1 Message Date
18ae4164f9 Patched libisoburn to level 01 2009-09-24 15:54:20 +00:00
e6a2f5f8c7 Bug fix: xorriso -cut_out deleted previously cut-out pieces of the same file 2009-09-24 15:52:16 +00:00
8357f64287 Patching libisoburn to level 01 2009-09-24 15:35:40 +00:00
29e6852014 Promoted branch to tag 2009-08-30 10:14:21 +00:00
ca67cce3f5 Document changes and release timestamp 2009-08-29 18:20:55 +00:00
a551125a6d Some updates and corrections in xorriso man page 2009-08-29 14:35:45 +00:00
a15232537c Version leap to libisoburn-0.4.2 2009-08-29 14:34:36 +00:00
f9441ad5e4 Branching for libisoburn release 0.4.2 2009-08-29 11:17:59 +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
32 changed files with 23973 additions and 2384 deletions

View File

@ -1,11 +1,11 @@
Mario Danic <mario.danic@gmail.com>, Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt libisoburn is Copyright (C) 2007-2009 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2008 Thomas Schmitt xorriso is Copyright (C) 2007-2009 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso, Mario Danic libisofs (if included) is Copyright (C) 2007-2009 Vreixo Formoso, Mario Danic
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt and Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify

View File

@ -1,4 +1,8 @@
pkgconfigdir=$(libdir)/pkgconfig
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
# was: pkgconfigdir=$(libdir)/pkgconfig
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
libincludedir=$(includedir)/libisoburn libincludedir=$(includedir)/libisoburn
lib_LTLIBRARIES = libisoburn/libisoburn.la lib_LTLIBRARIES = libisoburn/libisoburn.la
@ -16,9 +20,11 @@ libisoburn_libisoburn_la_SOURCES = \
libisoburn/isofs_wrap.c \ libisoburn/isofs_wrap.c \
libisoburn/libisoburn.h \ libisoburn/libisoburn.h \
version.h version.h
libisoburn_libisoburn_la_LIBADD = \ libisoburn_libisoburn_la_LIBADD = \
-lisofs \ -lisofs \
-lburn -lburn
libinclude_HEADERS = \ libinclude_HEADERS = \
libisoburn/libisoburn.h libisoburn/libisoburn.h
@ -30,16 +36,59 @@ libinclude_HEADERS = \
bin_PROGRAMS = \ bin_PROGRAMS = \
xorriso/xorriso 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_CPPFLAGS = -Ilibisoburn
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF) xorriso_xorriso_CFLAGS = -DXorriso_with_maiN \
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS) $(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
xorriso_xorriso_SOURCES = \ xorriso_xorriso_SOURCES = \
xorriso/xorriso.h \ xorriso/xorriso.h \
xorriso/xorriso_private.h \ xorriso/xorriso_private.h \
xorriso/xorriso.c \ xorriso/xorriso.c \
xorriso/xorrisoburn.h \ xorriso/xorrisoburn.h \
xorriso/xorrisoburn.c \ xorriso/xorrisoburn.c \
xorriso/xorriso_timestamp.h xorriso/xorriso_timestamp.h \
xorriso/xorriso_buildstamp.h
# 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
# 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
## Build test applications ## Build test applications
@ -55,13 +104,6 @@ test_compare_file_CFLAGS =
test_compare_file_LDADD = test_compare_file_LDADD =
test_compare_file_SOURCES = test/compare_file.c test_compare_file_SOURCES = test/compare_file.c
# ts A80110 - A80210 : we need as minimal demo something better than test.c
# test/test
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
# test_test_SOURCES = test/test.c
## ========================================================================= ## ## ========================================================================= ##
@ -119,6 +161,8 @@ man_MANS = xorriso/xorriso.1
EXTRA_DIST = \ EXTRA_DIST = \
libisoburn-1.pc.in \ libisoburn-1.pc.in \
version.h.in \ version.h.in \
doc/comments \
doc/doxygen.conf.in \
README \ README \
AUTHORS \ AUTHORS \
CONTRIBUTORS \ CONTRIBUTORS \
@ -126,6 +170,7 @@ EXTRA_DIST = \
COPYING \ COPYING \
INSTALL \ INSTALL \
xorriso/changelog.txt \ xorriso/changelog.txt \
xorriso/xorriso_buildstamp_none.h \
xorriso/README \ xorriso/README \
$(man_MANS) $(man_MANS)

61
README
View File

@ -4,13 +4,13 @@
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es> libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org. Integrated sub project of libburnia-project.org.
http://files.libburnia-project.org/releases/libisoburn-0.1.9.tar.gz http://files.libburnia-project.org/releases/libisoburn-0.4.2.pl01.tar.gz
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2009 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2. Provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
libisoburn is a frontend for libraries libburn and libisofs which enables 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 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. management on media level and even plain disk files or block devices.
@ -18,7 +18,10 @@ 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 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. other CD layout which does not entirely consist of ISO-9660 sessions.
Currently it is only supported on Linux with kernels >= 2.4. Currently it is fully supported on Linux with kernels >= 2.4 and on
FreeBSD versions with ATAPI/CAM support enabled in the kernel, see atapicam(4).
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: By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..." "... without even the implied warranty ..."
@ -26,18 +29,17 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.1.9 : Dynamic library and compile time header requirements for libisoburn-0.4.2 :
- libburn.so.4 , version libburn-0.4.8 or higher - libburn.so.4 , version libburn-0.7.0 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher - libisofs.so.6 , version libisofs-0.6.22 or higher
libisoburn and xorriso will not start with libraries which are older than their 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 headers seen at compile time.
setup unless you have reason to enforce a newer bug fix level.
Obtain libisoburn-0.1.9.tar.gz, take it to a directory of your choice Obtain libisoburn-0.4.2.pl01.tar.gz, take it to a directory of your choice
and do: and do:
tar xzf libisoburn-0.1.9.tar.gz tar xzf libisoburn-0.4.2.pl01.tar.gz
cd libisoburn-0.1.9 cd libisoburn-0.4.2
Within that directory execute: Within that directory execute:
@ -46,7 +48,7 @@ Within that directory execute:
Then become superuser and execute Then become superuser and execute
make install make install
which will make available libisoburn.so.1 and program xorriso. which will make available libisoburn.so.1 and the program xorriso.
For the API concepts and calls see For the API concepts and calls see
./libisoburn/libisoburn.h ./libisoburn/libisoburn.h
@ -57,7 +59,7 @@ as well as
xorriso xorriso
libisoburn includes a command line and dialog application named xorriso, libisoburn comes with a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and which offers a substantial part of libisoburn features to shell scripts and
users. Its file xorriso/README describes a standalone tarball as first users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation. preference for statically linked xorriso installation.
@ -67,11 +69,33 @@ xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
After installation documentation is available via After installation documentation is available via
man xorriso man xorriso
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()
--disable-zlib avoid use of zlib functions like compress2()
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
Drives and Disk File Objects Drives and Disk File Objects
The user of libisoburn applications needs rw-permission for the CD/DVD burner The user of libisoburn applications needs rw-permission for the CD/DVD/BD
devices which shall be used. drives which shall be used, even if only reading is intended.
A list of rw-accessible drives can be obtained by A list of rw-accessible drives can be obtained by
xorriso -devices xorriso -devices
resp. by libburn API call resp. by libburn API call
@ -93,6 +117,9 @@ output drives. The addresses of the disk files have to be preceded by "stdio:".
Like: Like:
"stdio:/tmp/pseudo_drive" "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 Testing
@ -144,7 +171,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>, By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components still containing libburnia-project.org is inspired by and in other components still containing
parts of old parts of old

View File

@ -1,6 +1,7 @@
AC_DEFUN([TARGET_SHIZZLE], AC_DEFUN([TARGET_SHIZZLE],
[ [
ARCH="" ARCH=""
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
AC_MSG_CHECKING([target operating system]) AC_MSG_CHECKING([target operating system])
@ -12,11 +13,108 @@ AC_DEFUN([TARGET_SHIZZLE],
*-*-freebsd*) *-*-freebsd*)
ARCH=freebsd ARCH=freebsd
LIBBURN_ARCH_LIBS=-lcam 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 esac
AC_MSG_RESULT([$ARCH]) 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 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])
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"]
)
AC_DEFINE_UNQUOTED([ICONV_CONST], [$libburnia_iconv_const])
test -z "$libburnia_iconv_const" && libburnia_iconv_const="no"
AC_MSG_RESULT([$libburnia_iconv_const])
])
dnl LIBBURNIA_SET_PKGCONFIG 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,4 +1,4 @@
AC_INIT([libisoburn], [0.1.9], [http://libburnia-project.org]) AC_INIT([libisoburn], [0.4.2], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@ -8,7 +8,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects]) AM_INIT_AUTOMAKE([subdir-objects])
dnl Hint: Search list for version code aspects: dnl Hint: Search list for version code aspects:
dnl /AC_INT( dnl /AC_INIT(
dnl /ISOBURN_.*_VERSION dnl /ISOBURN_.*_VERSION
dnl /LT_.* dnl /LT_.*
dnl /LIB.*_REQUIRED dnl /LIB.*_REQUIRED
@ -20,8 +20,9 @@ dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0 ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=1 ISOBURN_MINOR_VERSION=4
ISOBURN_MICRO_VERSION=8 ISOBURN_MICRO_VERSION=2
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION) AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -33,15 +34,16 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE dnl SONAME will become LT_CURRENT - LT_AGE
dnl dnl
dnl ts A80602 dnl ts A90829
dnl ### This is the release version 0.1.8 = libisoburn.so.1.7.0 dnl This is the release version 0.4.2 = libisoburn.so.1.31.0
dnl This is the development version after above stable release dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet. dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl dnl
dnl SONAME = 8 - 7 = 1 . Library name = libburn.so.1.7.0 dnl SONAME = 32 - 31 = 1 . Library name = libisoburn.so.1.31.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=8 LT_CURRENT=32
LT_AGE=7 LT_AGE=31
LT_REVISION=0 LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -69,6 +71,12 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.]) AC_ERROR([Libburn requires largefile support.])
fi fi
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, , )
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS) AC_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent" LIBTOOL="$LIBTOOL --silent"
@ -82,25 +90,119 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE TARGET_SHIZZLE
AC_SUBST(ARCH) AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS) 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 Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history() dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE" READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked 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 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= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF) 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 The empty parameter after "compress2" causes -lz.
ZLIB_DEF="-DLibisofs_with_zliB"
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compress2, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
AC_SUBST(ZLIB_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_CHECK_HEADER(libburn/libburn.h) AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h) AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions dnl Check for proper library versions
LIBBURN_REQUIRED=0.4.8 LIBBURN_REQUIRED=0.7.0
LIBISOFS_REQUIRED=0.6.6 LIBISOFS_REQUIRED=0.6.22
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED) PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED) PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

58
doc/comments Normal file
View File

@ -0,0 +1,58 @@
/**
@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 .
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.
See xorriso/README for more
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 libraries accessible for running resp. developing applications
- make install
Read libisoburn/libisoburn.h for a description of the API.
See also README, xorriso/README, and the man page xorriso/xorriso.1 which
gives an idea of the capabilities provided by Libburnia.
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 .
*/

View File

@ -477,7 +477,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories # directories like "/usr/src/myproject". Separate the files or directories
# with spaces. # with spaces.
INPUT = libburn \ INPUT = libisoburn \
doc \ doc \
test test
@ -495,9 +495,7 @@ INPUT_ENCODING = UTF-8
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.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 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
FILE_PATTERNS = libburn.h \ FILE_PATTERNS =
comments \
libburner.c
# The RECURSIVE tag can be used to turn specify whether or not subdirectories # 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. # should be searched for input files as well. Possible values are YES and NO.

View File

@ -6,7 +6,7 @@
*/ */
/* libburn wrappers for libisoburn /* libburn wrappers for libisoburn
Copyright 2007 - 2008 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007 - 2009 Thomas Schmitt, <scdbackup@gmx.net>
*/ */
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo /* <<< A70929 : hardcoded CD-RW with fabricated -msinfo
@ -24,6 +24,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
#include <regex.h>
#ifndef Xorriso_standalonE #ifndef Xorriso_standalonE
@ -58,7 +59,7 @@ extern void *libisoburn_default_msgs_submit_handle;
extern int libisoburn_default_msgs_submit_flag; extern int libisoburn_default_msgs_submit_flag;
int isoburn_emulate_toc(struct burn_drive *d, int flag); static int isoburn_emulate_toc(struct burn_drive *d, int flag);
int isoburn_initialize(char msg[1024], int flag) int isoburn_initialize(char msg[1024], int flag)
@ -82,11 +83,11 @@ int isoburn_initialize(char msg[1024], int flag)
iso_lib_header_version_minor iso_lib_header_version_minor
iso_lib_header_version_micro iso_lib_header_version_micro
If the header is too old then the following code shall cause failure of 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 libisoburn compilation rather than to allow production of a program with
unpredictable bugs or memory corruption. unpredictable bugs or memory corruption.
The compiler messages supposed to appear in this case are: The compiler messages supposed to appear in this case are:
error: 'LIBISOFS_MISCONFIGURATION' undeclared (first use in this function) error: 'LIBISOFS_MISCONFIGURATION' undeclared (first use in this function)
error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_and_burn_wrap_dot_h' undeclared (first use in this function) error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h' undeclared (first use in this function)
error: 'LIBISOFS_MISCONFIGURATION_' undeclared (first use in this function) error: 'LIBISOFS_MISCONFIGURATION_' undeclared (first use in this function)
*/ */
/* The indendation is an advise of man gcc to help old compilers ignoring */ /* The indendation is an advise of man gcc to help old compilers ignoring */
@ -102,7 +103,7 @@ int isoburn_initialize(char msg[1024], int flag)
#ifdef Isoburn_libisofs_dot_h_too_olD #ifdef Isoburn_libisofs_dot_h_too_olD
LIBISOFS_MISCONFIGURATION = 0; LIBISOFS_MISCONFIGURATION = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_and_burn_wrap_dot_h = 0; INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h = 0;
LIBISOFS_MISCONFIGURATION_ = 0; LIBISOFS_MISCONFIGURATION_ = 0;
#endif #endif
@ -263,6 +264,9 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
@param flag bit0= pretent blank on overwriteable media @param flag bit0= pretent blank on overwriteable media
bit3= if the drive reports a -ROM profile then try to read bit3= if the drive reports a -ROM profile then try to read
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
bit4= do not emulate TOC on overwriteable media
bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external filesystems
*/ */
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag) int flag)
@ -271,6 +275,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
struct burn_multi_caps *caps= NULL; struct burn_multi_caps *caps= NULL;
struct isoburn_toc_entry *t; struct isoburn_toc_entry *t;
char profile_name[80]; char profile_name[80];
struct isoburn_toc_disc *disc= NULL;
struct isoburn_toc_session **sessions;
struct isoburn_toc_track **tracks;
int num_sessions= 0, num_tracks= 0, track_count= 0, session_no= 0;
char msg[80];
profile_name[0]= 0; profile_name[0]= 0;
ret= burn_disc_get_profile(d, &profile, profile_name); ret= burn_disc_get_profile(d, &profile, profile_name);
@ -288,6 +297,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->msgs_submit= libisoburn_default_msgs_submit; (*o)->msgs_submit= libisoburn_default_msgs_submit;
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle; (*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag; (*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
iso_image_set_ignore_aclea((*o)->image, (flag >> 5 ) & 3);
#ifdef Hardcoded_cd_rW #ifdef Hardcoded_cd_rW
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */ /* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
@ -313,23 +323,49 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
goto ex; goto ex;
} }
/* try to read emulated toc */ /* try to read emulated toc */
ret= isoburn_emulate_toc(d, 0); ret= isoburn_emulate_toc(d, flag & 16);
if(ret<0) { if(ret<0) {
(*o)->emulation_mode= -1; (*o)->emulation_mode= -1;
goto ex; goto ex;
} }
} }
} else { } else {
/* >>> recognize unsuitable media (but allow read-only media) */; /* >>> recognize unsuitable media (but allow read-only media) */;
if(readonly) { if(readonly) {
/* This might be overwriteable media in a -ROM drive */ /* This might be overwriteable media in a -ROM drive.
ret= isoburn_emulate_toc(d, 1); Pitfall:
if(ret<0) Multi-session media which bear a xorriso image for overwriteables
goto ex; in their first session would get a TOC of that first image rather
if(ret==0 && profile !=0x08 && (flag&8)) { than of the media.
It is not possible to distinguish a BD-RE from a single session
BD-R with an image for overwriteables. But as soon as the media
bears 2 logical tracks it cannot be overwriteable.
So count the number of tracks first.
*/
disc= isoburn_toc_drive_get_disc(d);
if(disc != NULL) {
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
for(session_no= 0; session_no < num_sessions; session_no++) {
tracks= isoburn_toc_session_get_tracks(sessions[session_no],
&num_tracks);
track_count+= num_tracks;
}
isoburn_toc_disc_free(disc);
}
sprintf(msg, "ROM media has libburn track count = %d", track_count);
isoburn_msgs_submit(*o, 0x00060000, msg, 0, "DEBUG", 0);
if((flag & 16) || track_count >= 2) {
ret= 0; /* toc emulation off, or not overwriteable */
} else {
ret= isoburn_emulate_toc(d, 1);
if(ret<0)
goto ex;
}
if(ret == 0 && profile != 0x08 && (flag&8)) {
/* This might also be multi-session media which do not /* This might also be multi-session media which do not
get shown with a decent TOC. get shown with a decent TOC.
CD-R TOC (profile 0x08) can be trusted. Others not. CD-R TOC (profile 0x08) can be trusted. Others not.
@ -373,29 +409,40 @@ ex:
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
(depending on media type and drive state this might (depending on media type and drive state this might
help or it might make the resulting toc even worse) help or it might make the resulting toc even worse)
bit4= do not emulate TOC on overwriteable media
bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external filesystems
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag) char *adr, int flag)
{ {
int ret, conv_ret, drive_grabbed= 0; int ret, drive_grabbed= 0;
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
struct isoburn *o= NULL; struct isoburn *o= NULL;
char msg[BURN_MSGS_MESSAGE_LEN+4096];
#ifndef NIX
/* <<< should be obsolete by new drive addressing of libburn-0.5.2 */
/* >>> but helps with kernel 2.4 to use /dev/sr */
int conv_ret;
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr); conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
if(conv_ret<=0) { if(conv_ret<=0)
sprintf(msg, "Unsuitable drive address: '%s'\n",adr); strcpy(libburn_drive_adr, adr);
msg[BURN_MSGS_MESSAGE_LEN-1]= 0;
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
ret= 0; goto ex;
}
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1); ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
#else
ret= burn_drive_scan_and_grab(drive_infos, adr, flag & 1);
#endif /* ! NIX */
if(ret<=0) if(ret<=0)
goto ex; goto ex;
drive_grabbed= 1; drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive, ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag&8) | !!(flag&2)); (flag & (8 | 16 | 32 | 64)) | !!(flag&2));
if(ret<=0) if(ret<=0)
goto ex; goto ex;
@ -625,6 +672,23 @@ int isoburn_disc_track_lba_nwa(struct burn_drive *d,
} }
int isoburn_get_msc2(struct isoburn *o,
struct burn_write_opts *opts, int *msc2, int flag)
{
int ret, lba, nwa;
if(o->fabricated_msc2>=0)
*msc2= o->fabricated_msc2;
else {
ret= isoburn_disc_track_lba_nwa(o->drive, opts, 0, &lba, &nwa);
if(ret<=0)
return(ret);
*msc2= nwa;
}
return(1);
}
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc) void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
{ {
int ret; int ret;
@ -925,7 +989,8 @@ int isoburn_report_iso_error(int iso_error_code, char msg_text[], int os_errno,
/* @param flag bit0-7: info return mode /* @param flag bit0-7: info return mode
0= do not return anything in info (do not even touch it) 0= do not return anything in info (do not even touch it)
1= return volume id 1= copy volume id to info (info needs 33 bytes)
2= do not touch info (caller will copy 64 kB header to it)
bit14= -reserved - bit14= -reserved -
bit15= -reserved- bit15= -reserved-
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error @return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
@ -954,6 +1019,8 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
break; break;
else else
info[i]= 0; info[i]= 0;
} else if(info_mode==2) {
;
} else { } else {
isoburn_msgs_submit(NULL, 0x00060000, isoburn_msgs_submit(NULL, 0x00060000,
"Program error: Unknown info mode with isoburn_read_iso_head()", "Program error: Unknown info mode with isoburn_read_iso_head()",
@ -967,7 +1034,9 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
/* API /* API
@param flag bit0-7: info return mode @param flag bit0-7: info return mode
0= do not return anything in info (do not even touch it) 0= do not return anything in info (do not even touch it)
1= return volume id 1= copy volume id to info (info needs 33 bytes)
2= copy 64 kB header to info (needs 65536 bytes)
bit13= do not read head from media but use first 64 kB from info
bit14= check both half buffers (not only second) bit14= check both half buffers (not only second)
return 2 if found in first block return 2 if found in first block
bit15= return-1 on read error bit15= return-1 on read error
@ -978,40 +1047,80 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
int *image_blocks, char *info, int flag) int *image_blocks, char *info, int flag)
{ {
unsigned char buffer[64*1024]; unsigned char buffer[64*1024];
int ret; int ret, info_mode;
off_t data_count; off_t data_count;
info_mode= flag&255;
*image_blocks= 0; *image_blocks= 0;
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer, if(flag&(1<<13)) {
memcpy(buffer, info, 64*1024);
} else {
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
(off_t) 64*1024, &data_count, 2); /* no error messages */ (off_t) 64*1024, &data_count, 2); /* no error messages */
if(ret<=0) if(ret<=0)
return(-1*!!(flag&(1<<15))); return(-1*!!(flag&(1<<15)));
if(info_mode==2)
memcpy(info, buffer, 64*1024);
}
if(flag&(1<<14)) { if(flag&(1<<14)) {
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info, ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info, info_mode);
flag&255);
if(ret<0) if(ret<0)
return(ret); return(ret);
if(ret>0) if(ret>0)
return(2); return(2);
} }
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info, ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
flag&255); info_mode);
return(ret); if(ret<=0)
return(ret);
return(1);
}
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
int track_blocks, char *volid, int flag)
{
int ret;
struct isoburn_toc_entry *item;
ret= isoburn_toc_entry_new(&item, o->toc, 0);
if(ret<=0) {
no_memory:;
isoburn_msgs_submit(o, 0x00060000,
"Not enough memory for emulated TOC entry object",
0, "FATAL", 0);
return(-1);
}
if(o->toc==NULL)
o->toc= item;
(*session_count)++;
item->session= *session_count;
item->track_no= *session_count;
item->start_lba= lba;
item->track_blocks= track_blocks;
if(volid != NULL) {
item->volid= strdup(volid);
if(item->volid == NULL)
goto no_memory;
}
return(1);
} }
/* @param flag bit0= allow unemulated media /* @param flag bit0= allow unemulated media
bit1= free scanning without enclosing LBA-0-header bit1= free scanning without enclosing LBA-0-header
bit4= represent emulated media as one single session
(not with bit1)
@return -1 severe error, 0= no neat header chain, 1= credible chain read @return -1 severe error, 0= no neat header chain, 1= credible chain read
*/ */
int isoburn_emulate_toc(struct burn_drive *d, int flag) int isoburn_emulate_toc(struct burn_drive *d, int flag)
{ {
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0; int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
int scan_start= 0, scan_count= 0; int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
int with_enclosure= 0;
struct isoburn *o; struct isoburn *o;
struct isoburn_toc_entry *item; char msg[160], size_text[80], *sev, volid[33], *volid_pt= NULL;
char msg[160], size_text[80], *sev;
time_t start_time, last_pacifier, now; time_t start_time, last_pacifier, now;
/* is the media emulated multi-session ? */ /* is the media emulated multi-session ? */
@ -1030,6 +1139,11 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(ret<=0) if(ret<=0)
{ret= 0; goto failure;} {ret= 0; goto failure;}
lba= Libisoburn_overwriteable_starT; lba= Libisoburn_overwriteable_starT;
with_enclosure= 1;
if((flag & 16) && o->emulation_mode == 1) {
ret= 1;
goto failure; /* This will represent the media as single session */
}
} }
while(lba<image_size || (flag&2)) { while(lba<image_size || (flag&2)) {
now= time(NULL); now= time(NULL);
@ -1038,16 +1152,34 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(scan_count>=10*512) if(scan_count>=10*512)
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0); sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
else else
sprintf(size_text, "%.f MB", 2 * (double) scan_count); sprintf(size_text, "%.f kB", 2 * (double) scan_count);
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds", sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
session_count, size_text, (double) (now - start_time)); session_count, size_text, (double) (now - start_time));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0); isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
} }
read_flag= 0; read_flag= 1;
if(flag&2) if(flag&2)
read_flag= (1<<15)|((session_count>0)<<14); read_flag|= (1<<15)|((session_count>0)<<14);
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag); else {
if(ret<=0) {
/* growisofs aligns to 16 rather than 32. Overwriteable TOC emulation
relies on not accidentially seeing inter-session trash data.
But one can safely access 16 blocks earlier because a xorriso header
would have overwritten with the unused 16 blocks at its start.
If libisoburn alignment would increase, then this would not be
possible any more.
*/
if(probe_minus_16)
read_flag|= (1<<14);
probe_minus_16= 0;
}
ret= isoburn_read_iso_head(d, lba, &track_blocks, volid, read_flag);
if(ret > 0) {
volid_pt= volid;
} else {
volid_pt= NULL;
if(session_count>0) { if(session_count>0) {
if(flag&2) { if(flag&2) {
if(ret==0) { if(ret==0) {
@ -1063,30 +1195,36 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
"Chain of ISO session headers broken at #%d, LBA %ds", "Chain of ISO session headers broken at #%d, LBA %ds",
session_count+1, lba); session_count+1, lba);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0); isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
if(with_enclosure) {
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL,0);
if(ret<=0)
goto failure;
}
break; /* do not return failure */
} }
{ret= 0; goto failure;} {ret= 0; goto failure;}
} }
if(ret==2) /* ISO header was found in first half block */ if(ret==2) /* ISO header was found in first half block */
lba-= 16; lba-= 16;
ret= isoburn_toc_entry_new(&item, o->toc, 0);
if(ret<=0) { ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, volid_pt,
isoburn_msgs_submit(o, 0x00060000, 0);
"Not enough memory for emulated TOC entry object", if(ret<=0)
0, "FATAL", 0); goto failure;
ret= -1; goto failure;
}
if(o->toc==NULL)
o->toc= item;
session_count++;
scan_count+= 32;
item->session= session_count;
item->track_no= session_count;
item->start_lba= lba;
item->track_blocks= track_blocks;
lba+= track_blocks; lba+= track_blocks;
scan_count+= 32;
/* growisofs aligns to 16 rather than 32 */
growisofs_nwa= lba;
if(growisofs_nwa % 16)
growisofs_nwa+= 16 - (growisofs_nwa % 16);
if(lba % Libisoburn_nwa_alignemenT) if(lba % Libisoburn_nwa_alignemenT)
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT); lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
scan_start= lba; scan_start= lba;
if(lba - growisofs_nwa == 16)
probe_minus_16= 1;
} }
if(last_pacifier != start_time) if(last_pacifier != start_time)
sev= "UPDATE"; sev= "UPDATE";
@ -1103,6 +1241,10 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
return(1); return(1);
failure:; failure:;
isoburn_toc_entry_destroy(&(o->toc), 1); isoburn_toc_entry_destroy(&(o->toc), 1);
if(with_enclosure && o->emulation_mode == 1) {
session_count= 0;
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL, 0);
}
return(ret); return(ret);
} }
@ -1247,15 +1389,31 @@ failure:;
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc) int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
{ {
struct isoburn_toc_entry *t; struct isoburn_toc_entry *t;
int ret= 0; int ret= 0, num_sessions, num_tracks;
struct burn_session **sessions;
struct burn_track **tracks;
struct burn_toc_entry entry;
if(disc==NULL) if(disc==NULL)
return(0); return(0);
if(disc->toc!=NULL) { if(disc->toc!=NULL) {
for(t= disc->toc; t!=NULL; t= t->next) for(t= disc->toc; t!=NULL; t= t->next)
ret= t->start_lba + t->track_blocks; ret= t->start_lba + t->track_blocks;
} else if(disc->disc!=NULL) } else if(disc->disc!=NULL) {
sessions= burn_disc_get_sessions(disc->disc, &num_sessions);
if(num_sessions > 0) {
tracks = burn_session_get_tracks(sessions[num_sessions - 1],
&num_tracks);
if(num_tracks > 0) {
burn_track_get_entry(tracks[num_tracks - 1], &entry);
if(entry.extensions_valid & 1)
ret= entry.start_lba + entry.track_blocks;
}
}
/*
ret= burn_disc_get_sectors(disc->disc); ret= burn_disc_get_sectors(disc->disc);
*/
}
return(ret); return(ret);
} }
@ -1358,6 +1516,21 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
} }
int isoburn_toc_track_get_emul(struct isoburn_toc_track *t, int *start_lba,
int *image_blocks, char volid[33], int flag)
{
if(t->toc_entry == NULL)
return(0);
if(t->toc_entry->volid == NULL)
return(0);
*start_lba= t->toc_entry->start_lba;
*image_blocks= t->toc_entry->track_blocks;
strncpy(volid, t->toc_entry->volid, 32);
volid[32]= 0;
return(1);
}
void isoburn_toc_disc_free(struct isoburn_toc_disc *d) void isoburn_toc_disc_free(struct isoburn_toc_disc *d)
{ {
if(d->disc!=NULL) if(d->disc!=NULL)
@ -1399,11 +1572,16 @@ int isoburn_drive_set_msgs_submit(struct burn_drive *d,
} }
/* @param flag bit0= with adr_mode 3: adr_value might be 16 blocks too high
bit1= insist in seeing a disc object with at least one session
bit2= with adr_mode 4: use adr_value as regular expression
*/
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value, int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag) int flag)
{ {
int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks; int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks;
int lba, best_lba, size; int lba, best_lba, size, re_valid= 0, track_count= 0;
time_t start_time= 0, last_pacifier= 0, now;
char volid[33], msg[160]; char volid[33], msg[160];
struct isoburn *o; struct isoburn *o;
struct isoburn_toc_disc *disc= NULL; struct isoburn_toc_disc *disc= NULL;
@ -1411,6 +1589,8 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
struct isoburn_toc_track **tracks= NULL; struct isoburn_toc_track **tracks= NULL;
static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"}; static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_mode_names= 4; static int max_mode_names= 4;
regex_t re;
regmatch_t match[1];
ret= isoburn_find_emulator(&o, d, 0); ret= isoburn_find_emulator(&o, d, 0);
if(ret<0) if(ret<0)
@ -1418,8 +1598,9 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
if(o==NULL) if(o==NULL)
return(-1); return(-1);
start_time= last_pacifier= time(NULL);
adr_num= atoi(adr_value); adr_num= atoi(adr_value);
if(adr_mode!=3) { if(adr_mode!=3 || (flag & 2)) {
disc= isoburn_toc_drive_get_disc(d); disc= isoburn_toc_drive_get_disc(d);
if(disc==NULL) { if(disc==NULL) {
not_found:; not_found:;
@ -1470,21 +1651,53 @@ not_found:;
} else if(adr_mode==3) { } else if(adr_mode==3) {
o->fabricated_msc1= adr_num; o->fabricated_msc1= adr_num;
if((flag & 1) && o->fabricated_msc1 >= 16) {
/* adr_num is possibly 16 blocks too high */
ret= isoburn_read_iso_head(d, o->fabricated_msc1, &size,volid, 1|(1<<14));
if(ret==2)
o->fabricated_msc1-= 16;
}
} else if(adr_mode==4) { } else if(adr_mode==4) {
/* search for volume id that is equal to adr_value */ /* search for volume id that is equal to adr_value */
if(flag & 4) {
ret= regcomp(&re, adr_value, 0);
if(ret != 0)
flag&= ~4;
else
re_valid= 1;
}
best_lba= -1; best_lba= -1;
for(i=0; i<num_sessions; i++) { for(i=0; i<num_sessions; i++) {
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks); tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
if(tracks==NULL) if(tracks==NULL)
continue; continue;
for(j= 0; j<num_tracks; j++) { for(j= 0; j<num_tracks; j++) {
isoburn_get_track_lba(tracks[0], &lba, 0); now= time(NULL);
ret= isoburn_read_iso_head(d, lba, &size, volid, 1); if(now - last_pacifier >= 5 && track_count > 0) {
if(ret<=0) last_pacifier= now;
sprintf(msg,
"Scanned %d tracks for matching volid in %.f seconds",
track_count, (double) (now - start_time));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
}
track_count++;
ret= isoburn_toc_track_get_emul(tracks[0], &lba, &size, volid, 0);
if(ret < 0)
continue; continue;
if(strcmp(volid, adr_value)!=0) if(ret == 0) {
isoburn_get_track_lba(tracks[0], &lba, 0);
ret= isoburn_read_iso_head(d, lba, &size, volid, 1);
if(ret<=0)
continue; continue;
}
if(flag & 4) {
ret= regexec(&re, volid, 1, match, 0);
if(ret != 0)
continue;
} else {
if(strcmp(volid, adr_value)!=0)
continue;
}
best_lba= lba; best_lba= lba;
} }
} }
@ -1500,9 +1713,73 @@ unknown_mode:;
} }
ret= 1; ret= 1;
ex:; ex:;
if(start_time != last_pacifier && track_count > 0) {
now= time(NULL);
sprintf(msg,
"Scanned %d tracks for matching volid in %.f seconds",
track_count, (double) (now - start_time));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
}
if(disc!=NULL) if(disc!=NULL)
isoburn_toc_disc_free(disc); isoburn_toc_disc_free(disc);
if((flag & 4) && re_valid)
regfree(&re);
return(ret); return(ret);
} }
int isoburn_get_mount_params(struct burn_drive *d,
int adr_mode, char *adr_value,
int *lba, int *track, int *session,
char volid[33], int flag)
{
int msc1_mem, ret, total_tracks, num_sessions, num_tracks, i, j, track_lba;
int size, is_iso= 0;
struct isoburn *o;
struct isoburn_toc_disc *disc= NULL;
struct isoburn_toc_session **sessions= NULL;
struct isoburn_toc_track **tracks= NULL;
*lba= *track= *session= -1;
volid[0]= 0;
ret= isoburn_find_emulator(&o, d, 0);
if(ret < 0 || o == NULL)
return(-1);
msc1_mem= o->fabricated_msc1;
ret= isoburn_set_msc1(d, adr_mode, adr_value, 2 | (flag & 4));
if(ret <= 0)
return(ret);
*lba= o->fabricated_msc1;
disc= isoburn_toc_drive_get_disc(d);
if(disc==NULL)
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
if(sessions==NULL || num_sessions<=0)
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
total_tracks= 0;
for(i=0; i<num_sessions && *session < 0; i++) {
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
if(tracks==NULL)
continue;
for(j= 0; j<num_tracks && *track < 0; j++) {
total_tracks++;
isoburn_get_track_lba(tracks[j], &track_lba, 0);
if(track_lba == *lba) {
*track= total_tracks;
*session= i + 1;
}
}
}
ret= isoburn_read_iso_head(d, *lba, &size, volid, 1);
if(ret <= 0)
volid[0]= 0;
else
is_iso= 1;
ex:;
o->fabricated_msc1= msc1_mem;
return(2 - is_iso);
}

View File

@ -1,7 +1,7 @@
/* /*
data source for libisoburn. data source for libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -85,6 +85,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
icd = (struct isoburn_cached_drive *) src->data; icd = (struct isoburn_cached_drive *) src->data;
d = (struct burn_drive*) icd->drive; d = (struct burn_drive*) icd->drive;
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;
}
tiles = (struct isoburn_cache_tile *) icd->tiles; tiles = (struct isoburn_cache_tile *) icd->tiles;
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1); aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
@ -134,6 +147,10 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
return 1; return 1;
tiles[oldest].last_error_lba = lba; tiles[oldest].last_error_lba = lba;
#ifdef ISO_DATA_SOURCE_MISHAP
ret= ISO_DATA_SOURCE_MISHAP;
#else
/* <<< pre libisofs-0.6.7 */
/* It is not required by the specs of libisofs but implicitely assumed /* It is not required by the specs of libisofs but implicitely assumed
... ...
But it is not possible to ignore FAILURE. But it is not possible to ignore FAILURE.
@ -146,6 +163,8 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
enough to make it appear plausible. enough to make it appear plausible.
*/ */
ret= ISO_FILE_CANT_WRITE; ret= ISO_FILE_CANT_WRITE;
#endif
if(ret >= 0) if(ret >= 0)
ret = -1; ret = -1;
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret); sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
@ -189,6 +208,19 @@ static void ds_free_data(IsoDataSource *src)
src->data= NULL; src->data= NULL;
} }
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
{
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) IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
{ {
IsoDataSource *ret; IsoDataSource *ret;

View File

@ -6,7 +6,7 @@
/* /*
Class core of libisoburn. Class core of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -68,6 +68,7 @@ int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
o->track_no= 0; o->track_no= 0;
o->start_lba= -1; o->start_lba= -1;
o->track_blocks= 0; o->track_blocks= 0;
o->volid= NULL;
o->next= NULL; o->next= NULL;
if(boss!=NULL) { if(boss!=NULL) {
for(s= boss; s->next!=NULL; s= s->next); for(s= boss; s->next!=NULL; s= s->next);
@ -85,6 +86,8 @@ int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag)
return(0); return(0);
if(flag&1) if(flag&1)
isoburn_toc_entry_destroy(&((*o)->next), flag); isoburn_toc_entry_destroy(&((*o)->next), flag);
if((*o)->volid != NULL)
free((*o)->volid);
free((char *) (*o)); free((char *) (*o));
*o= NULL; *o= NULL;
return(1); return(1);
@ -119,6 +122,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
o->drive= NULL; o->drive= NULL;
o->emulation_mode= 0; o->emulation_mode= 0;
o->fabricated_msc1= -1; o->fabricated_msc1= -1;
o->fabricated_msc2= -1;
o->zero_nwa= Libisoburn_overwriteable_starT; o->zero_nwa= Libisoburn_overwriteable_starT;
o->min_start_byte= o->zero_nwa * 2048; o->min_start_byte= o->zero_nwa * 2048;
o->nwa= o->zero_nwa; o->nwa= o->zero_nwa;
@ -130,6 +134,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
for(i=0;i<Libisoburn_target_head_sizE;i++) for(i=0;i<Libisoburn_target_head_sizE;i++)
o->target_iso_head[i]= 0; o->target_iso_head[i]= 0;
o->image= NULL; o->image= NULL;
o->iso_data_source= NULL;
o->read_pacifier= NULL; o->read_pacifier= NULL;
o->read_pacifier_handle= NULL; o->read_pacifier_handle= NULL;
o->msgs_submit= NULL; o->msgs_submit= NULL;
@ -175,7 +180,8 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */ isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
if(o->iso_source!=NULL) if(o->iso_source!=NULL)
burn_source_free(o->iso_source); burn_source_free(o->iso_source);
if(o->iso_data_source!=NULL)
iso_data_source_unref(o->iso_data_source);
free((char *) o); free((char *) o);
*objpt= NULL; *objpt= NULL;
return(1); return(1);
@ -334,10 +340,14 @@ int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
} }
/* @param flag bit0= modifying rather than growing
bit1= prepare for early release of input drive:
wait until input and then disable image data source
*/
static static
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d, int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
struct burn_disc **disc, struct burn_disc **disc,
struct isoburn_imgen_opts *opts, int new_img) struct isoburn_imgen_opts *opts, int flag)
{ {
struct burn_source *wsrc; struct burn_source *wsrc;
struct burn_session *session; struct burn_session *session;
@ -345,7 +355,19 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
struct isoburn *in_o, *out_o; struct isoburn *in_o, *out_o;
IsoWriteOpts *wopts= NULL; IsoWriteOpts *wopts= NULL;
enum burn_disc_status state; enum burn_disc_status state;
int ret, fifo_chunks, lba, nwa; int ret, fifo_chunks, lba, nwa, i, new_img, early_indev_release;
uint32_t data_start= -1;
size_t buffer_size= 0, buffer_free= 0;
char msg[160];
new_img= flag&1;
early_indev_release= flag&2;
if(new_img && early_indev_release) {
isoburn_msgs_submit(in_o, 0x00060000,
"Programming error: Wrong session setup: new_img && early_indev_release",
0, "FATAL", 0);
{ret= -4; goto ex;}
}
ret= isoburn_find_emulator(&in_o, in_d, 0); ret= isoburn_find_emulator(&in_o, in_d, 0);
if(ret<0 || in_o==NULL) if(ret<0 || in_o==NULL)
@ -386,6 +408,17 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_rockridge(wopts, opts->rockridge); iso_write_opts_set_rockridge(wopts, opts->rockridge);
iso_write_opts_set_joliet(wopts, opts->joliet); iso_write_opts_set_joliet(wopts, opts->joliet);
iso_write_opts_set_iso1999(wopts, opts->iso1999); iso_write_opts_set_iso1999(wopts, opts->iso1999);
/* <<< #ifdef shall be removed when libisofs-0.6.20 is released */
#ifdef Libisofs_hardlink_prooF
iso_write_opts_set_hardlinks(wopts, opts->hardlinks);
if(opts->hardlinks)
iso_write_opts_set_rrip_1_10_px_ino(wopts, 1);
#endif
iso_write_opts_set_aaip(wopts, opts->aaip);
iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers); iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers);
iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths); iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths);
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths); iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
@ -395,7 +428,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii); iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
iso_write_opts_set_relaxed_vol_atts(wopts, 1); iso_write_opts_set_relaxed_vol_atts(wopts, 1);
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths); iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
iso_write_opts_set_always_gmt(wopts, opts->always_gmt);
iso_write_opts_set_rrip_version_1_10(wopts, opts->rrip_version_1_10);
iso_write_opts_set_dir_rec_mtime(wopts, opts->dir_rec_mtime);
iso_write_opts_set_aaip_susp_1_10(wopts, opts->aaip_susp_1_10);
iso_write_opts_set_sort_files(wopts, opts->sort_files); iso_write_opts_set_sort_files(wopts, opts->sort_files);
iso_write_opts_set_record_md5(wopts, opts->session_md5, opts->file_md5 & 3);
iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode, iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode,
opts->replace_file_mode, opts->replace_uid, opts->replace_gid); opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
iso_write_opts_set_default_dir_mode(wopts, opts->dir_mode); iso_write_opts_set_default_dir_mode(wopts, opts->dir_mode);
@ -404,22 +442,16 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_default_gid(wopts, opts->gid); iso_write_opts_set_default_gid(wopts, opts->gid);
iso_write_opts_set_output_charset(wopts, opts->output_charset); iso_write_opts_set_output_charset(wopts, opts->output_charset);
iso_write_opts_set_fifo_size(wopts, fifo_chunks); iso_write_opts_set_fifo_size(wopts, fifo_chunks);
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa); ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
opts->effective_lba= nwa;
ret= isoburn_get_msc2(out_o, NULL, &nwa, 0);
if (ret != 1) { if (ret != 1) {
isoburn_msgs_submit(out_o, 0x00060000, isoburn_msgs_submit(out_o, 0x00060000,
"Cannot determine next writeable address", 0, "FAILURE", 0); "Cannot determine next writeable address", 0, "FAILURE", 0);
{ret= -3; goto ex;} {ret= -3; goto ex;}
} }
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
isoburn_msgs_submit(out_o, 0x00060000,
"Encountered 0 as next writeable address of appendable",
0, "FAILURE", 0);
{ret= -4; goto ex;}
}
iso_write_opts_set_ms_block(wopts, nwa); iso_write_opts_set_ms_block(wopts, nwa);
opts->effective_lba= nwa;
iso_write_opts_set_appendable(wopts, !new_img); iso_write_opts_set_appendable(wopts, !new_img);
iso_write_opts_set_overwrite_buf(wopts, iso_write_opts_set_overwrite_buf(wopts,
nwa>0 ? out_o->target_iso_head : NULL); nwa>0 ? out_o->target_iso_head : NULL);
@ -429,6 +461,35 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0); isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
{ret= -1; goto ex;} {ret= -1; goto ex;}
} }
if (early_indev_release) {
for(i= 0; i<300; i++) {
/* <<< ??? */
if((i%30) == 0) {
sprintf(msg, "Waiting for data in fifo since %d seconds", i/30);
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
}
usleep(100000);
ret= iso_ring_buffer_get_status(wsrc, &buffer_size, &buffer_free);
if(ret >0 && buffer_size != buffer_free)
break;
}
/* <<< ??? */
sprintf(msg,
"After %.1f seconds: %d bytes of output available (fifo state=%d)",
((double) i+1) / 10.0, (int) (buffer_size - buffer_free), ret);
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
if(in_o->iso_data_source!=NULL)
isoburn_data_source_shutdown(in_o->iso_data_source, 0);
}
ret= iso_write_opts_get_data_start(wopts, &data_start, 0);
opts->data_start_lba= -1;
if(ret > 0 && data_start <= 0x7FFFFFFF)
opts->data_start_lba= data_start;
/* TODO check return values for failure. propertly clean-up on error */ /* TODO check return values for failure. propertly clean-up on error */
@ -474,6 +535,30 @@ int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
} }
/* API since 0.2.2 */
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive, int nwa)
{
int ret;
struct isoburn *o= NULL;
ret= isoburn_find_emulator(&o, out_drive, 0);
if(ret<0 || o==NULL)
return(-1);
if(nwa >= 0)
o->fabricated_msc2= nwa;
if(o->nwa == o->zero_nwa)
o->nwa= o->zero_nwa= 0;
else
o->zero_nwa= 0;
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 2);
if (ret<=0)
return ret;
return(1);
}
/* API @since 0.1.0 /* API @since 0.1.0
@param flag bit0= this is a regular end, not an abort @param flag bit0= this is a regular end, not an abort
give up source reference give up source reference
@ -566,6 +651,11 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o->norock= 0; o->norock= 0;
o->nojoliet= 0; o->nojoliet= 0;
o->noiso1999= 1; o->noiso1999= 1;
o->noaaip= 1;
o->noacl= 1;
o->noea= 1;
o->noino= 1;
o->nomd5= 1;
o->preferjoliet= 0; o->preferjoliet= 0;
o->uid= geteuid(); o->uid= geteuid();
o->gid= getegid(); o->gid= getegid();
@ -599,6 +689,11 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
o->noiso1999= !!(ext&4); o->noiso1999= !!(ext&4);
o->preferjoliet= !!(ext&8); o->preferjoliet= !!(ext&8);
o->pretend_blank= !!(ext&16); o->pretend_blank= !!(ext&16);
o->noaaip= !!(ext & 32);
o->noacl= !!(ext & 64);
o->noea= !!(ext & 128);
o->noino= !!(ext & 256);
o->nomd5= !!(ext & 512);
return(1); return(1);
} }
@ -606,7 +701,9 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext) int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
{ {
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) | *ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4); ((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4) |
((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7) |
((!!o->noino) << 8) | ((!!o->nomd5) << 9);
return(1); return(1);
} }
@ -665,14 +762,28 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
} }
int isoburn_igopt_get_in_charset(struct isoburn_read_opts *o, int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
char **input_charset) char **input_charset)
{ {
*input_charset= o->input_charset; *input_charset= o->input_charset;
return(1); return(1);
} }
int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode)
{
o->auto_input_charset= mode & 1;
return(1);
}
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode)
{
*mode= o->auto_input_charset;
return(1);
}
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o, int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
uint32_t *size, int *has_what) uint32_t *size, int *has_what)
{ {
@ -705,6 +816,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->rockridge= 1; o->rockridge= 1;
o->joliet= 0; o->joliet= 0;
o->iso1999= 0; o->iso1999= 0;
o->hardlinks= 0;
o->aaip = 0;
o->omit_version_numbers= 0; o->omit_version_numbers= 0;
o->allow_deep_paths= 1; o->allow_deep_paths= 1;
o->allow_longer_paths= 0; o->allow_longer_paths= 0;
@ -713,6 +826,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->allow_lowercase= 0; o->allow_lowercase= 0;
o->allow_full_ascii= 0; o->allow_full_ascii= 0;
o->joliet_longer_paths= 0; o->joliet_longer_paths= 0;
o->always_gmt= 0;
o->rrip_version_1_10= 0;
o->dir_rec_mtime= 0;
o->aaip_susp_1_10= 0;
o->sort_files= 0; o->sort_files= 0;
o->replace_dir_mode= 0; o->replace_dir_mode= 0;
o->replace_file_mode= 0; o->replace_file_mode= 0;
@ -722,9 +839,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->file_mode= 0444; o->file_mode= 0444;
o->uid= 0; o->uid= 0;
o->gid= 0; o->gid= 0;
o->output_charset= 0; o->output_charset= NULL;
o->fifo_size= 4*1024*1024; o->fifo_size= 4*1024*1024;
o->effective_lba= -1; o->effective_lba= -1;
o->data_start_lba= -1;
return(1); return(1);
} }
@ -758,13 +876,19 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
o->rockridge= !!(ext&1); o->rockridge= !!(ext&1);
o->joliet= !!(ext&2); o->joliet= !!(ext&2);
o->iso1999= !!(ext&4); o->iso1999= !!(ext&4);
o->hardlinks= !!(ext & 8);
o->aaip= !!(ext & 32);
o->session_md5= !!(ext & 64);
o->file_md5= (ext & (128 | 256)) >> 7;
return(1); return(1);
} }
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext) int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext)
{ {
*ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2); *ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2) |
((!!o->hardlinks) << 3) | ((!!o->aaip) << 5) |
((!!o->session_md5) << 6) | ((o->file_md5 & 3) << 7);
return(1); return(1);
} }
@ -779,6 +903,10 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
o->allow_lowercase= !!(relax&32); o->allow_lowercase= !!(relax&32);
o->allow_full_ascii= !!(relax&64); o->allow_full_ascii= !!(relax&64);
o->joliet_longer_paths= !!(relax&128); o->joliet_longer_paths= !!(relax&128);
o->always_gmt= !!(relax & isoburn_igopt_always_gmt);
o->rrip_version_1_10= !!(relax & isoburn_igopt_rrip_version_1_10);
o->dir_rec_mtime= !!(relax & isoburn_igopt_dir_rec_mtime);
o->aaip_susp_1_10= !!(relax & isoburn_igopt_aaip_susp_1_10);
return(1); return(1);
} }
@ -788,7 +916,9 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) | *relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) | ((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) | ((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7); ((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7) |
((!!o->always_gmt)<<8) | ((!!o->rrip_version_1_10)<<9) |
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11);
return(1); return(1);
} }
@ -891,3 +1021,9 @@ int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba)
} }
int isoburn_igopt_get_data_start(struct isoburn_imgen_opts *o, int *lba)
{
*lba= o->data_start_lba;
return(1);
}

View File

@ -22,6 +22,8 @@ struct isoburn_toc_entry {
int start_lba; int start_lba;
int track_blocks; int track_blocks;
char *volid; /* For caching a volume id from emulated toc on overwriteables */
struct isoburn_toc_entry *next; struct isoburn_toc_entry *next;
}; };
@ -60,9 +62,17 @@ struct isoburn {
*/ */
int fabricated_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 /* 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) media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
*/ */
int zero_nwa; int zero_nwa;
/* Start address as given by image examination (bytes, not blocks) */ /* Start address as given by image examination (bytes, not blocks) */
@ -71,6 +81,7 @@ struct isoburn {
/* Aligned start address to be used for processing (counted in blocks) */ /* Aligned start address to be used for processing (counted in blocks) */
int nwa; int nwa;
/* Truncate to .nwa an eventual regular file serving as output drive */ /* Truncate to .nwa an eventual regular file serving as output drive */
int truncate; int truncate;
@ -99,6 +110,10 @@ struct isoburn {
/* Libisofs image context */ /* Libisofs image context */
IsoImage *image; IsoImage *image;
/* 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. /* The burn source which transfers data from libisofs to libburn.
It has its own fifo. It has its own fifo.
*/ */
@ -190,6 +205,19 @@ int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
*/ */
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag); 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() /** Get a data source suitable for read from a drive using burn_read_data()
function. function.
@param d drive to read from. Must be grabbed. @param d drive to read from. Must be grabbed.
@ -200,6 +228,19 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
IsoDataSource * IsoDataSource *
isoburn_data_source_new(struct burn_drive *d); isoburn_data_source_new(struct burn_drive *d);
/** 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);
/** /**
* Options for image reading. * Options for image reading.
@ -211,6 +252,18 @@ struct isoburn_read_opts {
unsigned int norock:1; /*< Do not read Rock Ridge extensions */ unsigned int norock:1; /*< Do not read Rock Ridge extensions */
unsigned int nojoliet:1; /*< Do not read Joliet extensions */ unsigned int nojoliet:1; /*< Do not read Joliet extensions */
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */ 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:1; /* Do not read eventual MD5 array */
unsigned int preferjoliet:1; unsigned int preferjoliet:1;
/*< When both Joliet and RR extensions are present, the RR /*< When both Joliet and RR extensions are present, the RR
* tree is used. If you prefer using Joliet, set this to 1. */ * tree is used. If you prefer using Joliet, set this to 1. */
@ -225,6 +278,15 @@ struct isoburn_read_opts {
*/ */
char *input_charset; 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 */ /* modified by the function isoburn_read_image */
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present, unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
to 0 if not. */ to 0 if not. */
@ -263,6 +325,20 @@ struct isoburn_imgen_opts {
unsigned int joliet :1; unsigned int joliet :1;
unsigned int iso1999 :1; unsigned int iso1999 :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;
/* relaxed constraints */ /* relaxed constraints */
/* /*
@ -318,6 +394,31 @@ struct isoburn_imgen_opts {
*/ */
unsigned int joliet_longer_paths :1; unsigned int joliet_longer_paths :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.
*/
unsigned int dir_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; unsigned int sort_files:1;
/**< If files should be sorted based on their weight. */ /**< If files should be sorted based on their weight. */
@ -357,12 +458,19 @@ struct isoburn_imgen_opts {
int fifo_size; int fifo_size;
/** Output value: Block address of session start as evaluatedfrom media /** Output value: Block address of session start as evaluated from media
and other options by libisoburn and libburn. and other options by libisoburn and libburn.
If <0 : Invalid If <0 : Invalid
If >=0: Valid block number. Block size is always 2 KiB. If >=0: Valid block number. Block size is always 2 KiB.
*/ */
int effective_lba; 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;
}; };

View File

@ -6,7 +6,7 @@
/* /*
libisofs related functions of libisoburn. libisofs related functions of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -166,6 +166,8 @@ create_blank_image:;
iso_image_ref(*image); /*protects object from premature free*/ iso_image_ref(*image); /*protects object from premature free*/
} }
} }
iso_image_set_ignore_aclea(*image,
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
return 1; return 1;
} }
@ -198,6 +200,11 @@ create_blank_image:;
/* Important: do not return until iso_read_opts_free() */ /* Important: do not return until iso_read_opts_free() */
iso_read_opts_set_start_block(ropts, ms_block); iso_read_opts_set_start_block(ropts, ms_block);
iso_read_opts_set_no_rockridge(ropts, read_opts->norock); iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
iso_read_opts_set_no_md5(ropts, read_opts->nomd5);
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_joliet(ropts, read_opts->nojoliet);
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999); iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet); iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
@ -206,12 +213,12 @@ create_blank_image:;
iso_read_opts_set_default_uid(ropts, read_opts->uid); iso_read_opts_set_default_uid(ropts, read_opts->uid);
iso_read_opts_set_default_gid(ropts, read_opts->gid); iso_read_opts_set_default_gid(ropts, read_opts->gid);
iso_read_opts_set_input_charset(ropts, read_opts->input_charset); iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
/* <<< experimental API call of libisofs
iso_read_opts_set_error_behavior(ropts, 1);
*/
ds = isoburn_data_source_new(d); ds = isoburn_data_source_new(d);
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, iso_image_attach_data(o->image, o->read_pacifier_handle,
isoburn_idle_free_function); isoburn_idle_free_function);
if(o->read_pacifier_handle==NULL) if(o->read_pacifier_handle==NULL)
@ -221,7 +228,7 @@ create_blank_image:;
ret = iso_image_import(o->image, ds, ropts, &features); ret = iso_image_import(o->image, ds, ropts, &features);
iso_tree_set_report_callback(o->image, NULL); iso_tree_set_report_callback(o->image, NULL);
iso_read_opts_free(ropts); iso_read_opts_free(ropts);
iso_data_source_unref(ds);
if (ret < 0) { if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0); isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
return ret; return ret;
@ -277,6 +284,8 @@ int isoburn_activate_session(struct burn_drive *drive)
if (o->emulation_mode != 1) if (o->emulation_mode != 1)
return 1; /* don't need to activate session */ 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->fabricated_disc_status == BURN_DISC_BLANK &&

View File

@ -2,7 +2,7 @@
/* /*
API definition of libisoburn. API definition of libisoburn.
Copyright 2007-2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007-2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -75,23 +75,35 @@ job parameters. It rather states its desires which libisoburn tries to
fulfill, or else will refuse to start the write run. fulfill, or else will refuse to start the write run.
Setup for Growing or Modifying Setup for Growing, Modifying or Blind Growing
The connector function family offers two alternative API calls for performing The connector function family offers alternative API calls for performing
the setup for two alternative image generation strategies. the setup for several alternative image generation strategies.
Growing: Growing:
If input and output drive is the same, then isoburn_prepare_disc() is to If input and output drive are the same, then isoburn_prepare_disc() is to
be used. It will lead to an add-on session on appendable or overwriteable be used. It will lead to an add-on session on appendable or overwriteable
media with existing ISO image. With blank media it will produce a first media with existing ISO image. With blank media it will produce a first
session. session.
Modifying: Modifying:
If the output drive is not the input drive, then it has to bear blank media If the output drive is not the input drive, and if it bears blank media
or overwriteable without a valid ISO image. To prepare for such an image or overwriteable without a valid ISO image, then one may produce a consolidated
generation run, use isoburn_prepare_new_image(). The run will copy file data image with old and new data. This will copy file data from an eventual input
from an eventual input drive with valid image, add any newly introduced data drive with valid image, add any newly introduced data from the local
from the local filesystem, and produce a first session on output media. filesystem, and produce a first session on output media.
To prepare for such an image generation run, use isoburn_prepare_new_image().
Blind Growing:
This method reads the old image from one drive and writes the add-on session
to a different drive. That output drive is nevertheless supposed to
finally lead to the same media from where the session was loaded. Usually it
will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program
like with this classic gesture:
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
Blind growing is prepared by the call isoburn_prepare_blind_grow().
The input drive should be released immediately after this call in order
to allow the consumer of the output stream to access that drive for writing.
After either of these setups, some peripheral libburn drive parameter settings After either of these setups, some peripheral libburn drive parameter settings
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(), like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
@ -112,6 +124,22 @@ One should inquire isoburn_drive_wrote_well() to learn about overall success.
Finally one must call isoburn_activate_session() which will complete any Finally one must call isoburn_activate_session() which will complete any
eventual multi-session emulation. eventual multi-session emulation.
Application Constraints
Applications shall include libisofs/libisofs.h , libburn/libburn.h and this
file itself: libisoburn/libisoburn.h .
They shall link with -lisofs -lburn -lisoburn or with the .o files emerging
from building those libraries from their sources.
Applications must use 64 bit off_t, e.g. on 32-bit Linux by defining
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
or take special precautions to interface with the library by 64 bit integers
where above .h files prescribe off_t. Not to use 64 bit file i/o will keep
the application from producing and processing ISO images of more than 2 GB
size.
*/ */
@ -188,15 +216,15 @@ void isoburn_version(int *major, int *minor, int *micro);
*/ */
#define isoburn_libisofs_req_major 0 #define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6 #define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 6 #define isoburn_libisofs_req_micro 22
/** The minimum version of libburn to be used with this version of libisoburn /** The minimum version of libburn to be used with this version of libisoburn
at compile time. at compile time.
@since 0.1.0 @since 0.1.0
*/ */
#define isoburn_libburn_req_major 0 #define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 4 #define isoburn_libburn_req_minor 7
#define isoburn_libburn_req_micro 8 #define isoburn_libburn_req_micro 0
/** The minimum version of libisofs to be used with this version of libisoburn /** The minimum version of libisofs to be used with this version of libisoburn
@ -231,8 +259,8 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
@since 0.1.0 @since 0.1.0
*/ */
#define isoburn_header_version_major 0 #define isoburn_header_version_major 0
#define isoburn_header_version_minor 1 #define isoburn_header_version_minor 4
#define isoburn_header_version_micro 9 #define isoburn_header_version_micro 2
/** Note: /** Note:
Above version numbers are also recorded in configure.ac because libtool Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time. wants them as parameters at build time.
@ -324,7 +352,8 @@ int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
(cdrom/burner). Thus use with driveno 0 only. On failure (cdrom/burner). Thus use with driveno 0 only. On failure
the array has no valid elements at all. the array has no valid elements at all.
The returned array should be freed via burn_drive_info_free() The returned array should be freed via burn_drive_info_free()
when the drive is no longer needed. when the drive is no longer needed. But before this is done
one has to call isoburn_drive_release(drive_infos[0].drive).
@param adr The persistent address of the desired drive. @param adr The persistent address of the desired drive.
@param load 1 attempt to load the disc tray. 0 no attempt,rather failure. @param load 1 attempt to load the disc tray. 0 no attempt,rather failure.
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
@ -341,7 +370,8 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
(cdrom/burner). Thus use with driveno 0 only. On failure (cdrom/burner). Thus use with driveno 0 only. On failure
the array has no valid elements at all. the array has no valid elements at all.
The returned array should be freed via burn_drive_info_free() The returned array should be freed via burn_drive_info_free()
when the drive is no longer needed. when the drive is no longer needed. But before this is done
one has to call isoburn_drive_release(drive_infos[0].drive).
@param adr The persistent address of the desired drive. @param adr The persistent address of the desired drive.
@param flag bit0= attempt to load the disc tray. @param flag bit0= attempt to load the disc tray.
Else: failure if not loaded. Else: failure if not loaded.
@ -352,6 +382,10 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
(depending on media type and drive this might (depending on media type and drive this might
help or it might make the resulting toc even worse) help or it might make the resulting toc even worse)
bit4= do not emulate table of content on overwriteable media
bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external
filesystems
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
@ -362,6 +396,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
Wrapper for: burn_drive_grab() Wrapper for: burn_drive_grab()
@since 0.1.0 @since 0.1.0
@param drive The drive to grab. E.g. drive_infos[1].drive . @param drive The drive to grab. E.g. drive_infos[1].drive .
Call isoburn_drive_release(drive) when it it no longer needed.
@param load 1 attempt to load the disc tray. 0 no attempt, rather failure. @param load 1 attempt to load the disc tray. 0 no attempt, rather failure.
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
@ -421,7 +456,7 @@ int isoburn_disc_erasable(struct burn_drive *d);
void isoburn_disc_erase(struct burn_drive *drive, int fast); void isoburn_disc_erase(struct burn_drive *drive, int fast);
/** Program isoburn_disc_get_msc1() to return a fabricated value. /** Set up isoburn_disc_get_msc1() to return a fabricated value.
This makes only sense between aquiring the drive and reading the This makes only sense between aquiring the drive and reading the
image. After isoburn_read_image() it will confuse the coordination image. After isoburn_read_image() it will confuse the coordination
of libisoburn and libisofs. of libisoburn and libisofs.
@ -437,8 +472,14 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
3= adr_value itself is the lba to be used 3= adr_value itself is the lba to be used
4= start lba of last session with volume id 4= start lba of last session with volume id
given by adr_value given by adr_value
@parm adr_value A string describing the value to be eventually used. @param adr_value A string describing the value to be eventually used.
@param flag Bitfield for control purposes. Unused yet. Submit 0. @param flag Bitfield for control purposes.
bit0= @since 0.2.2
with adr_mode 3: adr_value might be 16 blocks too high
(e.g. -C stemming from growisofs). Probe for ISO head
at adr_value-16 and eventually adjust setting.
bit1= insist in seeing a disc object with at least one session
bit2= with adr_mode 4: use adr_value as regular expression
*/ */
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value, int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag); int flag);
@ -486,7 +527,8 @@ struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
/** Tell the number of 2048 byte blocks covered by the table of content. /** Tell the number of 2048 byte blocks covered by the table of content.
Wrapper for: burn_disc_get_sectors() This number includes the eventual gaps between sessions and tracks.
So this call is not really a wrapper for burn_disc_get_sectors().
@since 0.1.6 @since 0.1.6
@param disc The master handle of the media @param disc The master handle of the media
@return number of blocks, <=0 indicates unknown or unreadable state @return number of blocks, <=0 indicates unknown or unreadable state
@ -537,10 +579,10 @@ struct isoburn_toc_track **isoburn_toc_session_get_tracks(
struct isoburn_toc_session *s, int *num); struct isoburn_toc_session *s, int *num);
/** Obtain a copy of the entry which describes a particular itrack. /** Obtain a copy of the entry which describes a particular track.
Wrapper for: burn_track_get_entry() Wrapper for: burn_track_get_entry()
@since 0.1.6 @since 0.1.6
@param s The track handle @param t The track handle
@param entry A pointer to memory provided by the caller. It will be filled @param entry A pointer to memory provided by the caller. It will be filled
with info according to struct burn_toc_entry as defined with info according to struct burn_toc_entry as defined
in libburn.h in libburn.h
@ -549,6 +591,23 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
struct burn_toc_entry *entry); struct burn_toc_entry *entry);
/** Obtain eventual ISO image parameters of an emulated track. This info was
gained with much effort and thus gets cached in the track object.
If this call returns 1 then one can save a call of isoburn_read_iso_head()
with return mode 1 which could cause an expensive read operation.
@since 0.4.0
@param t The track handle
@param start_lba Returns the start address of the ISO session
@param image_blocks Returns the number of 2048 bytes blocks
@param volid Caller provided memory for the volume id
@param flag unused yet, submit 0
@return 0= not an emulated ISO session , 1= reply is valid
*/
int isoburn_toc_track_get_emul(struct isoburn_toc_track *t, int *start_lba,
int *image_blocks, char volid[33], int flag);
/** Release the memory associated with a master handle of media. /** Release the memory associated with a master handle of media.
The handle is invalid afterwards and may not be used any more. The handle is invalid afterwards and may not be used any more.
Wrapper for: burn_disc_free() Wrapper for: burn_disc_free()
@ -558,7 +617,7 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc); void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
/** Try whether at the data at the given address look like a ISO 9660 /** Try whether the data at the given address look like a ISO 9660
image header and obtain its alleged size. Depending on the info mode image header and obtain its alleged size. Depending on the info mode
one other string of text information can be retrieved too. one other string of text information can be retrieved too.
@since 0.1.6 @since 0.1.6
@ -567,14 +626,50 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
@param image_blocks The number of 2048 bytes blocks @param image_blocks The number of 2048 bytes blocks
@param info Caller provided memory, enough to take eventual info reply @param info Caller provided memory, enough to take eventual info reply
@param flag bit0-7: info return mode @param flag bit0-7: info return mode
0= do not return anything in info (do not even touch it) 0= do not return anything in info (do not even touch it)
1= return volume id (info needs 33 bytes) 1= copy volume id to info (info needs 33 bytes)
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error 2= @since 0.2.2 :
copy 64 kB header to info (needs 65536 bytes)
bit13= @since 0.2.2:
do not read head from media but use first 64 kB from info
bit14= check both half buffers (not only second)
return 2 if found in first block
bit15= return -1 on read error
@return >0 seems to be a valid ISO image, 0 format not recognized, <0 error
*/ */
int isoburn_read_iso_head(struct burn_drive *d, int lba, int isoburn_read_iso_head(struct burn_drive *d, int lba,
int *image_blocks, char *info, int flag); int *image_blocks, char *info, int flag);
/** Try to convert the given entity address into various entity addresses
which would describe it.
Note: Sessions and tracks are counted beginning with 1, not with 0.
@since 0.3.2
@param drive The drive where msc1 is to be set
@param adr_mode Determines how to interpret the input adr_value.
If adr_value shall represent a number then decimal ASCII
digits are expected.
0= start lba of last session in TOC, ignore adr_value
1= start lba of session number given by adr_value
2= start lba of track given number by adr_value
3= adr_value itself is the lba to be used
4= start lba of last session with volume id
given by adr_value
@param adr_value A string describing the value to be eventually used.
@param lba returns the block address of the entity, -1 means invalid
@param track returns the track number of the entity, -1 means invalid
@param session returns the session number of the entity, -1 means invalid
@param volid returns the volume id of the entity if it is a ISO session
@param flag Bitfield for control purposes.
bit2= with adr_mode 4: use adr_value as regular expression
@return <=0 error , 1 ok, ISO session, 2 ok, not an ISO session
*/
int isoburn_get_mount_params(struct burn_drive *d,
int adr_mode, char *adr_value,
int *lba, int *track, int *session,
char volid[33], int flag);
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
/* /*
@ -623,6 +718,30 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
tree is used. If you prefer using Joliet, set this to 1. tree is used. If you prefer using Joliet, set this to 1.
bit4= pretend_blank bit4= pretend_blank
Always create empty image.Ignore any image on input drive. Always create empty image.Ignore any image on input drive.
bit5= noaaip
@since 0.3.4
Do not load AAIP information from image. This information
eventually contains ACL or XFS-style Extended Attributes.
bit6= noacl
@since 0.3.4
Do not obtain ACL from external filesystem objects (e.g.
local filesystem files).
bit7= noea
@since 0.3.4
Do not obtain XFS-style Extended Attributes from external
filesystem objects (e.g. local filesystem files).
bit8= noino
@since 0.4.0
Do not load eventual inode numbers from RRIP entry PX,
but generate a new unique inode number for each imported
IsoNode object.
PX inode numbers allow to mark families of hardlinks by
giving all family members the same inode number. libisofs
keeps the PX inode numbers unaltered when IsoNode objects
get written into an ISO image.
bit9= nomd5
@since 0.4.2
Do not load the eventual MD5 checksum array.
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
#define isoburn_ropt_norock 1 #define isoburn_ropt_norock 1
@ -630,6 +749,12 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
#define isoburn_ropt_noiso1999 4 #define isoburn_ropt_noiso1999 4
#define isoburn_ropt_preferjoliet 8 #define isoburn_ropt_preferjoliet 8
#define isoburn_ropt_pretend_blank 16 #define isoburn_ropt_pretend_blank 16
#define isoburn_ropt_noaaip 32
#define isoburn_ropt_noacl 64
#define isoburn_ropt_noea 128
#define isoburn_ropt_noino 256
#define isoburn_ropt_nomd5 512
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext); int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext); int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
@ -670,7 +795,7 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
/** Set the character set for reading RR file names from ISO images. /** Set the character set for reading RR file names from ISO images.
@since 0.1.0 @since 0.1.0
@param o The option set to work on @param o The option set to work on
@param input_charset Set this to NULL to use the default locale charset. @param input_charset Set this to NULL to use the default locale charset
For selecting a particular character set, submit its For selecting a particular character set, submit its
name, e.g. as listed by program iconv -l. name, e.g. as listed by program iconv -l.
Example: "UTF-8". Example: "UTF-8".
@ -681,6 +806,20 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o, int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
char **input_charset); char **input_charset);
/**
Enable or disable methods to automatically choose an input charset.
This eventually overrides the name set via isoburn_ropt_set_input_charset()
@since 0.3.8
@param mode Bitfield for control purposes:
bit0= allow to set the input character set automatically from
attribute "isofs.cs" of root directory.
Submit any other bits with value 0.
@return 1 success, <=0 failure
*/
int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode);
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
/** After calling function isoburn_read_image() there are informations /** After calling function isoburn_read_image() there are informations
available in the option set. available in the option set.
@ -705,6 +844,13 @@ int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
#define isoburn_ropt_has_joliet 2 #define isoburn_ropt_has_joliet 2
#define isoburn_ropt_has_iso1999 4 #define isoburn_ropt_has_iso1999 4
#define isoburn_ropt_has_el_torito 8 #define isoburn_ropt_has_el_torito 8
/* ts A90122 */
/* >>> to be implemented:
#define isoburn_ropt_has_acl 64
#define isoburn_ropt_has_ea 128
*/
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o, int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
uint32_t *size, int *has_what); uint32_t *size, int *has_what);
@ -772,11 +918,38 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
Weaker than RockRidge, but also readable with Linux. Weaker than RockRidge, but also readable with Linux.
bit2= iso1999 bit2= iso1999
This is rather exotic. Better do not surprise the readers. This is rather exotic. Better do not surprise the readers.
bit3= hardlinks
Enable hardlink consolidation. IsoNodes which refer to the
same source object and have the same properties will get
the same ISO image inode numbers.
If combined with isoburn_igopt_rrip_version_1_10 below,
then the PX entry layout of RRIP-1.12 will be used within
RRIP-1.10 (mkisofs does this without causing visible trouble).
bit5= aaip
The libisofs specific SUSP based extension of ECMA-119 which
can encode ACL and XFS-style Extended Attributes.
bit6= session_md5
@since 0.4.2
Produce and write a MD5 checksum of the whole session stream.
bit7= file_md5
@since 0.4.2
Produce and write MD5 checksums for each single IsoFile.
bit8= file_stability (only together with file_md5)
@since 0.4.2
Compute MD5 of each file before copying it into the image and
compare this with the MD5 of the actual copying. If they do
not match then issue MISHAP event.
See also libisofs.h iso_write_opts_set_record_md5()
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
#define isoburn_igopt_rockridge 1 #define isoburn_igopt_rockridge 1
#define isoburn_igopt_joliet 2 #define isoburn_igopt_joliet 2
#define isoburn_igopt_iso1999 4 #define isoburn_igopt_iso1999 4
#define isoburn_igopt_hardlinks 8
#define isoburn_igopt_aaip 32
#define isoburn_igopt_session_md5 64
#define isoburn_igopt_file_md5 128
#define isoburn_igopt_file_stability 256
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext); int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext); int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
@ -817,6 +990,27 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
bit7= joliet_longer_paths bit7= joliet_longer_paths
Allow paths in the Joliet tree to have more than Allow paths in the Joliet tree to have more than
240 characters. 240 characters.
bit8= always_gmt
Write timestamps as GMT although the specs prescribe local
time with eventual non-zero timezone offset. Negative
timezones (west of GMT) can trigger bugs in some operating
systems which typically appear in mounted ISO images as if
the timezone shift from GMT was applied twice
(e.g. in New York 22:36 becomes 17:36).
bit9= rrip_version_1_10
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.
bit10= dir_rec_mtime
Store as ECMA-119 Directory Record timestamp the mtime
of the source rather than the image creation time.
bit11= aaip_susp_1_10
Write AAIP fields without announcing AAIP by an ER field and
without distinguishing RRIP fields from the AAIP field by
prefixed ES fields. This saves 5 to 10 bytes per file and
might avoid problems with readers which only accept RRIP.
SUSP-1.10 allows it, SUSP-1.12 frowns on it.
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
#define isoburn_igopt_omit_version_numbers 1 #define isoburn_igopt_omit_version_numbers 1
@ -827,6 +1021,10 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
#define isoburn_igopt_allow_lowercase 32 #define isoburn_igopt_allow_lowercase 32
#define isoburn_igopt_allow_full_ascii 64 #define isoburn_igopt_allow_full_ascii 64
#define isoburn_igopt_joliet_longer_paths 128 #define isoburn_igopt_joliet_longer_paths 128
#define isoburn_igopt_always_gmt 256
#define isoburn_igopt_rrip_version_1_10 512
#define isoburn_igopt_dir_rec_mtime 1024
#define isoburn_igopt_aaip_susp_1_10 2048
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax); int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax); int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
@ -929,6 +1127,21 @@ int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba); int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba);
/** Obtain after image preparation the lowest block address of file content
data. Failure can occur if libisofs is too old to provide this information,
if the result exceeds 31 bit, or if the call is made before image
preparation.
This value cannot be set by the application but only be inquired.
@since 0.3.6
@param o The option set to work on
@param lba The block number of the session start on media.
<0 means that no address has been determined yet.
@return 1 success, <=0 failure
*/
int isoburn_igopt_get_data_start(struct isoburn_imgen_opts *o, int *lba);
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
/* End of Options for image generation */ /* End of Options for image generation */
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
@ -1028,9 +1241,13 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
/** Obtain the start block number of the most recent session on media. In /** Obtain the start block number of the most recent session on media. In
case of random access media this will always be 0. Succesfull return is case of random access media this will normally be 0. Successfull return is
not a guarantee that there is a ISO-9660 image at all. The call will fail, not a guarantee that there is a ISO-9660 image at all. The call will fail,
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE. nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE
or BURN_DISC_FULL.
Note: The result of this call may be fabricated by a previous call of
isoburn_set_msc1() which can override the rule to load the most recent
session.
Wrapper for: burn_disc_get_msc1() Wrapper for: burn_disc_get_msc1()
@since 0.1.0 @since 0.1.0
@param d The drive to inquire @param d The drive to inquire
@ -1068,7 +1285,8 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
int flag); int flag);
/** Create a disc object for writing the new session from the created or loaded /** To choose the expansion method of Growing:
Create a disc object for writing the new session from the created or loaded
iso_volset which has been manipulated via libisofs, to the same media from iso_volset which has been manipulated via libisofs, to the same media from
where the image was eventually loaded. This struct burn_disc is ready for where the image was eventually loaded. This struct burn_disc is ready for
use by a subsequent call to isoburn_disc_write(). use by a subsequent call to isoburn_disc_write().
@ -1085,9 +1303,10 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
struct isoburn_imgen_opts *opts); struct isoburn_imgen_opts *opts);
/** Create a disc object for producing a new image from a previous image /** To choose the expansion method of Modifying:
Create a disc object for producing a new image from a previous image
plus the changes made by user. The generated burn_disc is suitable plus the changes made by user. The generated burn_disc is suitable
to be written to any grabbed libburn drive with blank writeable media. to be written to a grabbed drive with blank writeable media.
But you must not use the same drive for input and output, because data But you must not use the same drive for input and output, because data
will be read from the source drive while at the same time the target will be read from the source drive while at the same time the target
drive is already writing. drive is already writing.
@ -1095,15 +1314,11 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
is done and the drive is BURN_DRIVE_IDLE again after asynchronous is done and the drive is BURN_DRIVE_IDLE again after asynchronous
burn_disc_write(). burn_disc_write().
@since 0.1.0 @since 0.1.0
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab(). @param in_drive The input drive, grabbed with isoburn_drive_aquire() or
one of its alternatives.
@param disc Returns the newly created burn_disc object. @param disc Returns the newly created burn_disc object.
@param opts Options for image generation and data transport to media. @param opts Options for image generation and data transport to media.
@param out_drive The libburn drive which shall be write target. @param out_drive The output drive, from isoburn_drive_aquire() et.al..
If the drive was grabbed via libisoburn then it can later
access the libisofs source fifo via
isoburn_get_fifo_status().
Mere libburn drives cannot obtain this info.
In that case out_drive may be NULL, as well.
@return <=0 error , 1 = success @return <=0 error , 1 = success
*/ */
int isoburn_prepare_new_image(struct burn_drive *in_drive, int isoburn_prepare_new_image(struct burn_drive *in_drive,
@ -1111,11 +1326,55 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
struct isoburn_imgen_opts *opts, struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive); struct burn_drive *out_drive);
/** @since 0.1.0
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of /** To choose the expansion method of Blind Growing:
running isoburn_disc_write(). Create a disc object for writing an add-on session from the created or
loaded IsoImage which has been manipulated via libisofs, to a different
drive than the one from where it was loaded.
Usually output will be stdio:/dev/fd/1 (i.e. stdout) being piped
into some burn program like with this classic gesture:
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
Parameter translation into libisoburn:
$dev is the address by which parameter in_drive of this call was aquired
$msc1 was set by isoburn_set_msc1() before image reading
or was detected from the in_drive media
$nwa is a parameter of this call
or can be used as detected from the in_drive media
This call waits for libisofs output to become available and then detaches
the input drive object from the data source object by which libisofs was
reading from the input drive.
So, as far as libisofs is concerned, that drive may be released immediately
after this call in order to allow the consumer to access the drive for
writing.
The consumer should wait for input to become available and only then open
its burn drive. With cdrecord this is caused by option -waiti.
The resulting burn_disc object has to be disposed when all its writing
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
burn_disc_write().
@since 0.2.2
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
@param disc Returns the newly created burn_disc object.
@param opts Options for image generation and data transport to media.
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
typically stdio:/dev/fd/1 .
@param nwa The address (2048 byte block count) where the add-on
session will be finally stored on a mountable media
or in a mountable file.
If nwa is -1 then the address is used as determined from
the in_drive media.
@return <=0 error , 1 = success
*/
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive, int nwa);
/**
Revoke isoburn_prepare_*() instead of running isoburn_disc_write().
libisofs reserves resources and maybe already starts generating the libisofs reserves resources and maybe already starts generating the
image stream when one of above two calls is performed. It is mandatory to image stream when one of above three calls is performed. It is mandatory to
either run isoburn_disc_write() or to revoke the preparations by the either run isoburn_disc_write() or to revoke the preparations by the
call described here. call described here.
@since 0.1.0 @since 0.1.0
@ -1154,7 +1413,7 @@ void isoburn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
Hint: If only burn_write_opts and not burn_drive is known, then the drive Hint: If only burn_write_opts and not burn_drive is known, then the drive
can be obtained by burn_write_opts_get_drive(). can be obtained by burn_write_opts_get_drive().
@since 0.1.0 @since 0.1.0
@parm d The drive to which the track with the fifo gets burned. @param d The drive to which the track with the fifo gets burned.
@param size The total size of the fifo @param size The total size of the fifo
@param free_bytes The current free capacity of the fifo @param free_bytes The current free capacity of the fifo
@param status_text Returns a pointer to a constant text, see below @param status_text Returns a pointer to a constant text, see below
@ -1193,8 +1452,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
int isoburn_activate_session(struct burn_drive *drive); int isoburn_activate_session(struct burn_drive *drive);
/** @since 0.1.0 /** Wait after normal end of operations until libisofs ended all write
Wait after normal end of operations until libisofs ended all write
threads and freed resource reservations. threads and freed resource reservations.
This call is not mandatory. But without it, messages from the ending This call is not mandatory. But without it, messages from the ending
threads might appear after the application ended its write procedure. threads might appear after the application ended its write procedure.
@ -1210,21 +1468,6 @@ int isoburn_sync_after_write(struct burn_drive *input_drive,
struct burn_drive *output_drive, int flag); struct burn_drive *output_drive, int flag);
#if 0
/* >>> NOT YET IMPLEMENTED <<< */
/** Write a new session to a disc.
This is a synchronous call equivalent to isoburn_prepare_disc +
isoburn_disc_write + isoburn_activate_session
@param pacifier_func If not NULL: a function to produce appeasing messages.
See burn_abort_pacifier() in libburn.h for an example.
*/
/* TODO implement this */
int isoburn_perform_write(struct burn_write_opts *o,
int (*pacifier_func)(void *handle, int patience,
int elapsed));
#endif /* 0 */
/** Release an aquired drive. /** Release an aquired drive.
Wrapper for: burn_drive_release() Wrapper for: burn_drive_release()
@since 0.1.0 @since 0.1.0

View File

@ -117,7 +117,9 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
/* Attributes */ /* Attributes */
if(s1.st_mode != s2.st_mode) { if(s1.st_mode != s2.st_mode) {
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT)) if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode); 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)) if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
printf("%s : type : %s <> %s\n", printf("%s : type : %s <> %s\n",
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0)); a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));

View File

@ -4,23 +4,27 @@
xorriso. By Thomas Schmitt <scdbackup@gmx.net> xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via: Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.1.9.tar.gz http://scdbackup.sourceforge.net/xorriso-0.4.2.pl01.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2. Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
xorriso is a program which maps file objects from POSIX compliant xorriso is a program which copies file objects from POSIX compliant
filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to information of existing ISO images and it writes the session results to
optical media or to filesystem objects. optical media or to filesystem objects.
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
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 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 formatter program nor an external burn program for CD or DVD but rather
incorporates the libraries of libburnia-project.org . incorporates the libraries of libburnia-project.org .
Currently it is fully supported on Linux with kernels >= 2.4 and on
FreeBSD versions with ATAPI/CAM support enabled in the kernel, see atapicam(4).
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: By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..." "... without even the implied warranty ..."
@ -31,14 +35,21 @@ The most simple way to get xorriso from source code is the xorriso standalone
tarball. tarball.
Prerequisites: Prerequisites:
The tarball contains anything that is needed except libc and libpthread. The tarball contains anything that is needed except the following system
libreadline and the readline-dev headers will make dialog mode more convenient, components:
but are not mandatory. libc, libpthread
plus on FreeBSD: libiconv, libcam
Optional at compile time are:
libreadline and the readline-dev headers make dialog mode more convenient.
on Linux: libacl and libacl-devel allow getting and setting ACLs.
zlib and zlib-devel allow zisofs compression.
If they were present at compile time, then the optional libraries have to
be present at runtime, too.
Obtain xorriso-0.1.9.tar.gz, take it to a directory of your choice and do: Obtain xorriso-0.4.2.pl01.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.1.9.tar.gz tar xzf xorriso-0.4.2.pl01.tar.gz
cd xorriso-0.1.9 cd xorriso-0.4.2
Within that directory execute: Within that directory execute:
@ -52,8 +63,8 @@ which you may strip to reduce it in size
strip ./xorriso/xorriso strip ./xorriso/xorriso
You may copy or move it to a directory where it can be found by the shell, 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 or you may execute xorriso at the place where it was built,
as superuser: or you may execute as superuser:
make install make install
For general concepts, options and usage examples see For general concepts, options and usage examples see
@ -68,10 +79,37 @@ It gets installed with "make install" but may also be placed manually in the
./man1 directory below one of the directories mentioned in environment ./man1 directory below one of the directories mentioned in environment
variable $MANPATH. variable $MANPATH.
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()
--disable-zlib avoid use of zlib functions like compress2()
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
If you want xorriso to report a "Build timestamp" with its option -version:
make buildstamped
Drives and Disk File Objects Drives and Disk File Objects
The user of xorriso needs rw-permission for the CD burner device. 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 A list of rw-accessible drives can be obtained by
xorriso -devices xorriso -devices
@ -107,9 +145,14 @@ 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 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:". 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: Like:
xorriso -dev stdio:/tmp/pseudo_drive ...more arguments... 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 Testing
@ -141,6 +184,66 @@ and vice versa:
| less | 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 eventual 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 tag
A relocated superblock may appear at LBA 0 of an image which was produced for
being stored in a disk file or on overwriteable media (e.g. DVD+R, BD-RE).
xorriso records a first session recorded with its superblock at LBA 32 and
the may follow at the next block address after the session tag which is
divisible by 32. Normally no session starts after the address given by
relocated superblock parameter session_start=.
Session oriented media like CD-R[W], DVD+R, BD-R will have no relocated
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 libisoburn
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
@ -160,9 +263,9 @@ and a matching dynamically linked xorriso binary.
This binary is leaner but depends on properly installed libraries of suitable This binary is leaner but depends on properly installed libraries of suitable
revision. revision.
Dynamic library and compile time header requirements for libisoburn-0.1.9 : Dynamic library and compile time header requirements for libisoburn-0.4.0 :
- libburn.so.4 , version libburn-0.4.8 or higher - libburn.so.4 , version libburn-0.7.0 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher - libisofs.so.6 , version libisofs-0.6.22 or higher
libisoburn and xorriso will not start with libraries which are older than their 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 headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level. setup unless you have reason to enforce a newer bug fix level.
@ -191,7 +294,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>, By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components still containing libburnia-project.org is inspired by and in other components still containing
parts of old parts of old

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,31 @@
#!/bin/sh #!/bin/sh
# compile_xorriso.sh # compile_xorriso.sh
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL # Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
# #
# Not intended for general use in production installations ! # Not intended for general use in production installations !
# Rather use: ./bootstrap ; ./configure ; make # Rather use: ./bootstrap ; ./configure ; make
# #
# This is a development tool which expects a special setup of directories. # 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 # It is to be executed in a common parent of the directories given with
# $isofs $isoburn $burn $xorr # $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 burn=./libburn-develop/libburn
isoburn=./libisoburn-develop/libisoburn isoburn=./libisoburn-develop/libisoburn
xorr=./libisoburn-develop/xorriso xorr=./libisoburn-develop/xorriso
debug_opts="-O2" debug_opts="-O2"
def_opts= def_opts="-DXorriso_allow_external_filterS"
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1" largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
do_strip=0 do_strip=0
static_opts= static_opts=
warn_opts="-Wall" warn_opts="-Wall"
nglibisofs=1 nglibisofs=1
def_libreadline="-DXorriso_with_readlinE"
link_libreadline="-lreadline"
for i in "$@" for i in "$@"
do do
@ -35,11 +39,16 @@ do
elif test "$i" = "-g" elif test "$i" = "-g"
then then
debug_opts="-g -O0" debug_opts="-g -O0"
elif test "$i" = "-no_libreadline"
then
def_libreadline=""
link_libreadline=""
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h" elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
then then
echo \ echo \
"$xorr/compile_xorriso.sh : to be executed above top level directories" "$xorr/compile_xorriso.sh : to be executed above top level directories"
echo "Options:" echo "Options:"
echo " -no_libreadline do not compile for and link with libreadline."
echo " -do_diet produce capability reduced lean version." echo " -do_diet produce capability reduced lean version."
echo " -do_strip apply program strip to compiled programs." echo " -do_strip apply program strip to compiled programs."
echo " -g produce debuggable programm." echo " -g produce debuggable programm."
@ -52,44 +61,51 @@ do
done done
libisofs= libisofs=
libisofs="$libisofs $isofs"/buffer.o libisofs="$libisofs $isofs"buffer.o
libisofs="$libisofs $isofs"/builder.o libisofs="$libisofs $isofs"builder.o
libisofs="$libisofs $isofs"/data_source.o libisofs="$libisofs $isofs"data_source.o
libisofs="$libisofs $isofs"/ecma119.o libisofs="$libisofs $isofs"ecma119.o
libisofs="$libisofs $isofs"/ecma119_tree.o libisofs="$libisofs $isofs"ecma119_tree.o
libisofs="$libisofs $isofs"/eltorito.o libisofs="$libisofs $isofs"eltorito.o
libisofs="$libisofs $isofs"/filesrc.o libisofs="$libisofs $isofs"filesrc.o
libisofs="$libisofs $isofs"/fs_image.o libisofs="$libisofs $isofs"fs_image.o
libisofs="$libisofs $isofs"/fs_local.o libisofs="$libisofs $isofs"fs_local.o
libisofs="$libisofs $isofs"/fsource.o libisofs="$libisofs $isofs"fsource.o
libisofs="$libisofs $isofs"/image.o libisofs="$libisofs $isofs"image.o
libisofs="$libisofs $isofs"/iso1999.o libisofs="$libisofs $isofs"iso1999.o
libisofs="$libisofs $isofs"/joliet.o libisofs="$libisofs $isofs"joliet.o
libisofs="$libisofs $isofs"/libiso_msgs.o libisofs="$libisofs $isofs"libiso_msgs.o
libisofs="$libisofs $isofs"/messages.o libisofs="$libisofs $isofs"messages.o
libisofs="$libisofs $isofs"/node.o libisofs="$libisofs $isofs"node.o
libisofs="$libisofs $isofs"/rockridge.o libisofs="$libisofs $isofs"rockridge.o
libisofs="$libisofs $isofs"/rockridge_read.o libisofs="$libisofs $isofs"rockridge_read.o
libisofs="$libisofs $isofs"/stream.o libisofs="$libisofs $isofs"stream.o
libisofs="$libisofs $isofs"/tree.o libisofs="$libisofs $isofs"tree.o
libisofs="$libisofs $isofs"/util.o libisofs="$libisofs $isofs"util.o
libisofs="$libisofs $isofs"/util_htable.o libisofs="$libisofs $isofs"util_htable.o
libisofs="$libisofs $isofs"/util_rbtree.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 "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
echo "Build timestamp : $timestamp"
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" echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \ cc -I. -DXorriso_with_maiN $def_libreadline \
$warn_opts \ $warn_opts \
$static_opts \ $static_opts \
$debug_opts \ $debug_opts \
$def_opts \ $def_opts \
$largefile_opts \ $largefile_opts \
\ \
-DXorriso_build_timestamP='"'"$timestamp"'"' \
\
-o "$xorr"/xorriso \ -o "$xorr"/xorriso \
\ \
"$xorr"/xorriso.c \ "$xorr"/xorriso.c \
@ -130,9 +146,11 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
\ \
$libisofs \ $libisofs \
\ \
-lreadline \ $link_libreadline \
\ \
-lpthread -lpthread \
-lacl \
-lz
ret=$? ret=$?
if test "$ret" = 0 if test "$ret" = 0

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.1.9], [http://libburnia-project.org]) AC_INIT([xorriso], [0.4.2], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@ -8,15 +8,15 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects]) AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0 BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4 BURN_MINOR_VERSION=7
BURN_MICRO_VERSION=9 BURN_MICRO_VERSION=1
AC_SUBST(BURN_MAJOR_VERSION) AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION) AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION) AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0 LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6 LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=6 LIBISOFS_MICRO_VERSION=23
AC_SUBST(LIBISOFS_MAJOR_VERSION) AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION) AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION) AC_SUBST(LIBISOFS_MICRO_VERSION)
@ -43,6 +43,12 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.]) AC_ERROR([Libburn requires largefile support.])
fi fi
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, , )
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS) AC_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent" LIBTOOL="$LIBTOOL --silent"
@ -74,8 +80,19 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE TARGET_SHIZZLE
AC_SUBST(ARCH) AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS) AC_SUBST(LIBBURN_ARCH_LIBS)
dnl ts A90303
dnl Check the preconditions for using statvfs() in sg-dummy
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
STATVFS_DEF=-DLibburn_os_has_statvfS
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
CFLAGS="$CFLAGS $STATVFS_DEF"
dnl Add compiler-specific flags dnl Add compiler-specific flags
dnl See if the user wants aggressive optimizations of the code dnl See if the user wants aggressive optimizations of the code
@ -96,19 +113,103 @@ else
fi fi
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 Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history() dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE" READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked 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 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= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF) AC_SUBST(READLINE_DEF)
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)
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 The empty parameter after "compress2" causes -lz.
ZLIB_DEF="-DLibisofs_with_zliB"
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compress2, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
AC_SUBST(ZLIB_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_CONFIG_FILES([ AC_CONFIG_FILES([
Makefile Makefile
version.h version.h
xorriso.pc
]) ])
AC_OUTPUT AC_OUTPUT
# xorriso.pc

View File

@ -47,11 +47,11 @@ then
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/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><b>Session model:<\/b>/' \ -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>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>Creating, Growing, Modifying, Blind/\&nbsp;<BR><b>Creating, Growing, Modifying, Blind/' \
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \ -e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \ -e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \ -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>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \ -e 's/<b>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>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>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
@ -65,11 +65,14 @@ then
-e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><b>Settings for result writing:<\/b><BR>\&nbsp;<BR>/' \ -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/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \
-e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \ -e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>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>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/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \ -e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Evaluation of readability and recovery:<\/b>/\&nbsp;<BR><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \ -e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# make_xorriso_standalone.sh # make_xorriso_standalone.sh
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL # Copyright 2008 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL
# #
# Not intended for general use in production installations ! # Not intended for general use in production installations !
# #
@ -25,11 +25,11 @@
current_dir=$(pwd) current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone" lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.1.9 xorriso_rev=0.4.2
# For unstable uploads: # For unstable uploads:
xorriso_pl="" ## xorriso_pl=""
# For stable releases: # For stable releases:
# xorriso_pl=".pl00" xorriso_pl=".pl00"
with_bootstrap_tarball=1 with_bootstrap_tarball=1
@ -103,7 +103,7 @@ 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_makefile_am.txt "$lone_dir"/Makefile.am
copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in # copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
copy_files xorriso/README "$lone_dir"/README copy_files xorriso/README "$lone_dir"/README
@ -124,12 +124,19 @@ copy_files \
xorriso/xorrisoburn.[ch] \ xorriso/xorrisoburn.[ch] \
xorriso/xorriso.[ch1] \ xorriso/xorriso.[ch1] \
xorriso/xorriso_private.h \ xorriso/xorriso_private.h \
\
xorriso/xorriso_timestamp.h \ xorriso/xorriso_timestamp.h \
\
xorriso/changelog.txt \ xorriso/changelog.txt \
xorriso/xorriso_eng.html \ xorriso/xorriso_eng.html \
xorriso/man_1_xorriso.html \ xorriso/man_1_xorriso.html \
"$lone_dir"/xorriso "$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"/test create_dir "$lone_dir"/test
copy_files \ copy_files \
test/compare_file.c \ test/compare_file.c \
@ -140,9 +147,12 @@ copy_files \
create_dir "$lone_dir"/libisofs create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters create_dir "$lone_dir"/libisofs/filters
create_dir "$lone_dir"/doc
goto_dir "$current_dir"/nglibisofs-develop goto_dir "$current_dir"/nglibisofs-develop
copy_files libisofs/*.[ch] "$lone_dir"/libisofs copy_files libisofs/*.[ch] "$lone_dir"/libisofs
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters 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 COPYRIGHT "$lone_dir"/libisofs copy_files COPYRIGHT "$lone_dir"/libisofs
# To get a common version.h # To get a common version.h

View File

@ -0,0 +1,196 @@
# 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 libxorriso/libxorriso.la
## ========================================================================= ##
# Build libraries
libisoburn_libisoburn_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
libisoburn_libisoburn_la_SOURCES = \
libisoburn/burn_wrap.c \
libisoburn/data_source.c \
libisoburn/isoburn.c \
libisoburn/isoburn.h \
libisoburn/isofs_wrap.c \
libisoburn/libisoburn.h \
version.h
libisoburn_libisoburn_la_LIBADD = \
-lisofs \
-lburn
libxorriso_libxorriso_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
libxorriso_libxorriso_la_SOURCES = \
xorriso/xorriso.h \
xorriso/xorriso_private.h \
xorriso/xorriso.c \
xorriso/xorrisoburn.h \
xorriso/xorrisoburn.c \
xorriso/xorriso_timestamp.h \
xorriso/xorriso_buildstamp.h \
version.h
libxorriso_libxorriso_la_LIBADD = \
-lisofs \
-lburn \
-lisoburn
libinclude_HEADERS = \
libisoburn/libisoburn.h \
xorriso/xorriso.h
## ========================================================================= ##
# This is the reference application of libisoburn. See man xorriso/xorriso.1
#
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_without_subS \
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
libxorriso/libxorriso.la \
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
xorriso_xorriso_SOURCES = \
xorriso/xorriso.h \
xorriso/xorriso_private.h \
xorriso/xorriso.c \
xorriso/xorrisoburn.h \
xorriso/xorriso_timestamp.h \
xorriso/xorriso_buildstamp.h
# xorriso/xorrisoburn.c \
#
# 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
# 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
## Build test applications
noinst_PROGRAMS = \
test/compare_file
# A program to compare two files in mirrored trees in mounted filesystems
# To compare tree /media/dvd and /original/dir :
# find /media/dvd -exec test/compare_file '{}' /media/dvd /original/dir ';'
#
test_compare_file_CPPFLAGS =
test_compare_file_CFLAGS =
test_compare_file_LDADD =
test_compare_file_SOURCES = test/compare_file.c
## ========================================================================= ##
## Build documentation (You need Doxygen for this to work)
webhost = http://libburn-api.pykix.org
webpath = /
docdir = $(DESTDIR)$(prefix)/share/doc/$(PACKAGE)-$(VERSION)
doc: doc/html
doc/html: doc/doxygen.conf
if [ -f ./doc/doc.lock ]; then \
$(RM) -r doc/html; \
doxygen doc/doxygen.conf; \
fi
doc-upload: doc/html
scp -r $</* $(webhost):$(webpath)
all: doc
install-data-local:
if [ -f ./doc/doc.lock ]; then \
$(mkinstalldirs) $(docdir)/html; \
$(INSTALL_DATA) doc/html/* $(docdir)/html; \
fi
uninstall-local:
rm -rf $(docdir)
## ========================================================================= ##
# Indent source files
indent_files = \
$(libisoburn_libisoburn_la_SOURCES)
indent: $(indent_files)
indent -bad -bap -nbbb -nbbo -nbc -bli0 -br -bls \
-cdw -ce -cli0 -ncs -nbfda -i8 -l79 -lc79 \
-lp -saf -sai -nprs -npsl -saw -sob -ss -ut \
-sbi0 -nsc -ts8 -npcs -ncdb -fca \
$^
.PHONY: indent
## ========================================================================= ##
# Extra things
nodist_pkgconfig_DATA = \
libisoburn-1.pc
man_MANS = xorriso/xorriso.1
EXTRA_DIST = \
libisoburn-1.pc.in \
version.h.in \
doc/comments \
doc/doxygen.conf.in \
README \
AUTHORS \
CONTRIBUTORS \
COPYRIGHT \
COPYING \
INSTALL \
xorriso/changelog.txt \
xorriso/xorriso_buildstamp_none.h \
xorriso/README \
$(man_MANS)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
/* Command line oriented batch and dialog tool which creates, loads, /* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2. Provided under GPL version 2.
@ -16,25 +16,171 @@
struct XorrisO; struct XorrisO;
#define Xorriso_program_versioN "0.4.2"
/* --------------------- Fundamental Management ------------------- */ /* --------------------- Fundamental Management ------------------- */
/* Create a new xorriso object and tell it the program name to be used
with messages. /* Get the version text (e.g. "0.4.2") of the program code.
@param flag unused yet, submit 0
@return readonly character string
*/
char *Xorriso__get_version_text(int flag);
/* Mandatory call:
Create a new xorriso object and tell it the program name to be used
with messages and for decision of special behavior.
@param xorriso returns the newly created XorrisO object
@param progname typically argv[0] of main(). Some leafnames of the progname
path have special meaning and trigger special behavior:
"osirrox" allows image-to-disk copying: -osirrox "on"
"xorrisofs" activates permanent mkisofs emulation
"genisofs" alias of "xorrisofs"
"mkisofs" alias of "xorrisofs"
"genisoimage" alias of "xorrisofs"
@param flag unused yet, submit 0
@return >0 success , <=0 failure, no object created
*/ */
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag); int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
/* Make global library initializations. /* Interpret certain commands which shall get into effect before the
libraries get initialized:
-abort_on , -report_about , -return_with , -list_delimiter
Some commands get executed only if they are the only command in argv:
-prog_help , -help , -no_rc
Some get examined for the need to redirect stdout messages
-dev , -outdev , -indev , -as
@param xorriso The context object in which to perform the commands.
@param argc Number of arguments.
@param argv The arguments. argv[0] contains the program name.
argv[1] to argv[argc-1] contain commands and parameters.
@param idx Argument cursor. When this function is called, *idx must
be at least 1, argv[*idx] must be to a command.
*idx will iterate over commands and parameters until this
function aborts or until argc is reached.
@param flag bit0= do not interpret argv[1]
@return <0 error
0 end program
1 ok, go on
*/
int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
int flag);
/* Mandatory call:
It has to be made before calling any function listed below this point.
Make global library initializations.
This must be done with the first xorriso object that gets created and This must be done with the first xorriso object that gets created and
with the first xorriso object that gets created after Xorriso_destroy(,1). with the first xorriso object that gets created after Xorriso_destroy(,1).
@param xorriso The context object.
@param flag unused yet, submit 0
@return <=0 error , >0 success
*/ */
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag); int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
/* Destroy xorriso object when it is no longer needed. /* Read and interpret commands from eventual startup files as listed in
@param flag bit0= Make global librariy shutdown. man xorriso.
Use only with last xorriso object to be destroyed. @param xorriso The context object in which to perform the commands.
@param flag unused yet, submit 0
@return <=0 = error
1 = success
3 = end program run (e.g. because command -end was encountered)
*/
int Xorriso_read_rc(struct XorrisO *xorriso, int flag);
/* Check whether program arguments shall be backslash decoded and eventually
replace *argv by a new argument vector. The old one will not be freed
by this call. If it is dynamic memory then you need to keep a copy of
the pointer and free it yourself after this call.
@param xorriso The context object
@param argc Number of arguments.
@param argv The arguments. (*argv)[0] contains the program name.
(*argv)[1] to (*argv)[argc-1] contain commands and parameters
@param flag unused yet, submit 0
@return <= 0 error , > 0 success
*/
int Xorriso_program_arg_bsl(struct XorrisO *xorriso, int argc, char ***argv,
int flag);
/* Interpret argv as xorriso command options and their parameters.
(An alternative is to call functions of the options API directly and to
perform own error status evaluation. See below: Options API.)
After the first command and its parameters there may be more commands and
parameters. All parameters must be given in the same call as their command.
@param xorriso The context object in which to perform the commands.
@param argc Number of arguments.
@param argv The arguments. argv[0] contains the program name.
argv[1] to argv[argc-1] contain commands and parameters.
@param idx Argument cursor. When this function is called, *idx must
be at least 1, argv[*idx] must be a command.
*idx will iterate over commands and parameters until this
function aborts or until argc is reached.
@param flag bit0= recursion
bit1= these are the main() program start arguments
@return <=0 = error
1 = success
2 = problem event ignored
3 = end program run (e.g. because command -end was encountered)
*/
int Xorriso_interpreter(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Parse a command line into words and use them as argv for a call of
Xorriso_interpreter(). Put out some info lines about the outcome.
@param xorriso The context object in which to perform the commands.
@param line A text of one or more words according to man xorriso
paragraph "Command processing" up to and including
"Backslash Interpretation".
@param flag bit0 to bit15 are forwarded to Xorriso_interpreter()
bit16= no pageing of info lines
bit17= print === bar even if xorriso->found<0
@return see return of Xorriso_interpreter()
*/
int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag);
/* Enter xorriso command line dialog mode, eventually using libreadline.
This call returns immediately if not option -dialog "on" was performed
before.
@param xorriso The context object in which to perform the commands.
@param flag unused yet, submit 0
@return <=0 error, 1= dialog mode ended normally ,
3= dialog mode ended normally,interpreter asks to end program
*/
int Xorriso_dialog(struct XorrisO *xorriso, int flag);
/* Inquire whether option -commit would make sense.
@param xorriso The context object to inquire.
@param flag unused yet, submit 0
@return 0= -commit would have nothing to do
1= a new image session would emerge at -commit
*/
int Xorriso_change_is_pending(struct XorrisO *xorriso, int flag);
/* Compute the exit value from the recorded maximum event severity.
@param xorriso The context object to inquire.
@param flag unused yet, submit 0
@return The computed exit value
*/
int Xorriso_make_return_value(struct XorrisO *xorriso, int flag);
/* Mandatory call:
Destroy xorriso object when it is no longer needed.
@param xorriso The context object to destroy. *xorriso will become NULL.
@param flag bit0= Perform global library shutdown.
Use only with last xorriso object to be destroyed.
@return <=0 error, >0 success
*/ */
int Xorriso_destroy(struct XorrisO **xorriso, int flag); int Xorriso_destroy(struct XorrisO **xorriso, int flag);
@ -139,6 +285,121 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag); int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
/** Write a message for option -errfile_log.
@param xorriso The environment handle
@param error_code The unique error code of your message.
Submit 0 if you do not have reserved error codes within
the libburnia project.
@param msg_text Not more than 8196 characters of message text.
@param os_errno Eventual errno related to the message. Submit 0 if
the message is not related to a operating system error.
@param flag bit0-7= meaning of msg_text
( 0= ERRFILE path , for internal use mainly )
1= mark line text (only to be put out if enabled)
@return <=0 error , >0 success
*/
int Xorriso_process_errfile(struct XorrisO *xorriso,
int error_code, char msg_text[], int os_errno,
int flag);
/* The outlist stack allows to redirect the info and result messages from
their normal channels into a pair of string lists which can at some
later time be retrieved by the application.
These redirection caches can be stacked to allow stacked applications.
xorriso itself uses them for internal purposes.
*/
/* A list item able of forming double chained lists */
struct Xorriso_lsT;
/** Maximum number of stacked redirections */
#define Xorriso_max_outlist_stacK 32
/** Enable a new redirection of info and/or result channel. The normal message
output and eventual older redirections will not see new messages until
the redirection is ended by a call to Xorriso_pull_outlists() with the
stack_handle value returned by this call.
Redirected output is not written to the files of Xorriso_option_logfile()
and the Xorriso_option_pkt_output() protocol will not be applied.
@param xorriso The environment handle
@param stack_handle returns an id number which is unique as long as
its redirection is stacked. It may be re-used after
its redirection was pulled from the stack.
@param flag Bitfield for control purposes
bit0= redirect result channel
bit1= redirect info channel
If bit0 and bit1 are 0, both channels get redirected.
@return 1 on success, <=0 if failure
*/
int Xorriso_push_outlists(struct XorrisO *xorriso, int *stack_handle,
int flag);
/** Disable the redirection given by stack_handle. If it was the current
receiver of messages then switch output to the next older redirection
resp. to the normal channels if no redirections are stacked any more.
The messages collected by the disabled redirection are handed out as
two lists. Both lists have to be disposed via Xorriso_lst_destroy_all()
when they are no longer needed.
The message lists are either NULL or represented by their first
Xorriso_lsT item.
@param xorriso The environment handle
@param stack_handle The id number returned by Xorriso_push_outlists()
@param result_list Result and mark messages (usually directed to stdout)
@param info_list Info and mark messages (usually directed to stderr)
@param flag unused yet, submit 0
@return 1 on success, <=0 if failure
*/
int Xorriso_pull_outlists(struct XorrisO *xorriso, int stack_handle,
struct Xorriso_lsT **result_list,
struct Xorriso_lsT **info_list, int flag);
/** Obtain the text message from the current list item.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the text content of the list item.
This pointer does not have to be freed.
*/
char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
/** Obtain the address of the next item in the chain of messages.
An iteration over the output of Xorriso_pull_outlists() starts at the
returned result_list resp. info_list and ends when this function returns
NULL.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the next list item or NULL if end of list.
This pointer does not have to be freed.
*/
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
/** Obtain the address of the previous item in the chain of messages.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the previous list item or NULL if start of list.
This pointer does not have to be freed.
*/
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
/** Destroy all list items which are directly or indirectly connected to
the given link item.
Apply this to each of the two list handles obtained by
Xorriso_pull_outlists() when the lists are no longer needed.
@param lstring *lstring will be freed and set to NULL.
It is not dangerous to submit a pointer to a NULL-pointer.
@param flag unused yet, submit 0
@return -1= lstring was NULL (i.e. wrong use of this call),
0= *lstring was already NULL,
1= item actually disposed
*/
int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
/* ---------------------------- Options API ------------------------ */ /* ---------------------------- Options API ------------------------ */
/* See man 1 xorriso for explanation of the particular options */ /* See man 1 xorriso for explanation of the particular options */
@ -149,12 +410,27 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
After each call to an option function, there should happen: After each call to an option function, there should happen:
Xorriso_eval_problem_status() Xorriso_eval_problem_status()
One should follow its eventual advice to abort. One should follow its eventual advice to abort.
Options with a varying number of arguments get them passed like
Xorriso_interpreter(). E.g.:
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
They begin to read the arguments at position *idx and will see the list
end either at the next argv which contains the -list_delimiter text or
at argv[argc-1]. After the call, *idx will be the index of the first not
yet interpreted argv.
*/ */
/* Option -abort_on */ /* Option -abort_on */
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag); int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
/* Option -acl "on"|"off" */
int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag);
/* Option -add */ /* Option -add */
/* @param flag bit0=do not report the added item /* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message bit1=do not reset pacifier, no final pacifier message
@ -174,6 +450,28 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
char *time_type, char *timestring, char *time_type, char *timestring,
int argc, char **argv, int *idx, int flag); int argc, char **argv, int *idx, int flag);
/* Option -application_id */
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
int flag);
/* Option -as */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
*/
int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -assert_volid */
int Xorriso_option_assert_volid(struct XorrisO *xorriso, char *pattern,
char *severity, int flag);
/* Option -auto_charset "on"|"off" */
int Xorriso_option_auto_charset(struct XorrisO *xorriso, char *mode, int flag);
/* Option -backslash_codes */
int Xorriso_option_backslash_codes(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -ban_stdio_write */ /* Option -ban_stdio_write */
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag); int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
@ -193,6 +491,29 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
/* Option -cdx */ /* Option -cdx */
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag); int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
/* Option -charset */
/* @param flag bit0= set in_charset
bit1= set out_charset
*/
int Xorriso_option_charset(struct XorrisO *xorriso, char *name, int flag);
/* Options -check_md5 and -check_md5_r
@param flag bit0= issue summary message
bit1= do not reset pacifier, no final pacifier message
bit2= do not issue pacifier messages at all
bit3= recursive: -check_md5_r
*/
int Xorriso_option_check_md5(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -check_media */
int Xorriso_option_check_media(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -check_media_defaults */
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */ /* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
/* @param flag bit0=recursive (-chgrp_r) /* @param flag bit0=recursive (-chgrp_r)
*/ */
@ -265,9 +586,16 @@ int Xorriso_option_devices(struct XorrisO *xorriso, int flag);
/* Option -dialog "on"|"off" */ /* Option -dialog "on"|"off" */
int Xorriso_option_dialog(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_dialog(struct XorrisO *xorriso, char *mode, int flag);
/* Option -disk_dev_ino "on"|"off" */
int Xorriso_option_disk_dev_ino(struct XorrisO *xorriso, char *mode, int flag);
/* Option -disk_pattern "on"|"ls"|"off" */ /* Option -disk_pattern "on"|"ls"|"off" */
int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag);
/* Option -drive_class */
int Xorriso_option_drive_class(struct XorrisO *xorriso,
char *d_class, char *pattern, int flag);
/* Option -dummy "on"|"off" */ /* Option -dummy "on"|"off" */
int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
@ -290,6 +618,10 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
int Xorriso_option_error_behavior(struct XorrisO *xorriso, int Xorriso_option_error_behavior(struct XorrisO *xorriso,
char *occasion, char *behavior, int flag); char *occasion, char *behavior, int flag);
/* Option -external_filter */
int Xorriso_option_external_filter(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Options -extract , -extract_single */ /* Options -extract , -extract_single */
/* @param flag bit0=do not report the restored item /* @param flag bit0=do not report the restored item
bit1=do not reset pacifier, no final pacifier message bit1=do not reset pacifier, no final pacifier message
@ -298,6 +630,10 @@ int Xorriso_option_error_behavior(struct XorrisO *xorriso,
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path, int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag); char *iso_path, int flag);
/* Option -extract_cut */
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
char *start, char *count, char *disk_path, int flag);
/* Option -follow */ /* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
@ -312,9 +648,21 @@ int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
/* Option -fs */ /* Option -fs */
int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag); int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag);
/* Option -getfacl alias -getfacli, -getfacl_r alias -getfacl_ri */
/* @param flag bit0=recursive -getfacl_r
*/
int Xorriso_option_getfacli(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -gid */ /* Option -gid */
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag); int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
/* Option -grow_blindly */
int Xorriso_option_grow_blindly(struct XorrisO *xorriso, char *msc2, int flag);
/* Option -hardlinks "on"|"off" */
int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag);
/* Option -help and part of -prog_help */ /* Option -help and part of -prog_help */
int Xorriso_option_help(struct XorrisO *xorriso, int flag); int Xorriso_option_help(struct XorrisO *xorriso, int flag);
@ -328,11 +676,16 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
/* Option -joliet "on"|"off" */ /* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
/* Option -list_delimiter */
int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
int flag);
/* Option -list_formats */ /* Option -list_formats */
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag); int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
/* Option -load session|track|sbsector value */ /* Option -load session|track|sbsector value */
/* @return <=0 error , 1 success, 2 revoked by -reassure /* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
@return <=0 error , 1 success, 2 revoked by -reassure
*/ */
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode, int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
char *adr_value, int flag); char *adr_value, int flag);
@ -380,10 +733,20 @@ int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
/* Option -mark */ /* Option -mark */
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag); int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
/* Option -md5 */
int Xorriso_option_md5(struct XorrisO *xorriso, char *mode, int flag);
/* Option -mkdir alias -mkdiri */ /* Option -mkdir alias -mkdiri */
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
/* Option -mount */
/* @param bit0= print mount command to result channel rather than performing it
*/
int Xorriso_option_mount(struct XorrisO *xorriso, char *dev, char *adr_mode,
char *adr, char *cmd, int flag);
/* Option -mv alias -mvi */ /* Option -mv alias -mvi */
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
@ -394,11 +757,15 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
/* Option -not_leaf */ /* Option -not_leaf */
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag); int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
/* Option -not_list , -quoted_not_list */
/* @param flag bit0= -quoted_not_list */
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
/* Option -not_paths */ /* Option -not_paths */
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
/* Option -options_from_file*/ /* Option -options_from_file */
/* @return <=0 error , 1 = success , 3 = request to end program run */ /* @return <=0 error , 1 = success , 3 = request to end program run */
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr, int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
int flag); int flag);
@ -409,6 +776,9 @@ int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
/* Option -overwrite "on"|"nondir"|"off" */ /* Option -overwrite "on"|"nondir"|"off" */
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
/* Option -pacifier */
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag);
/* Option -padding */ /* Option -padding */
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag); int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
@ -419,7 +789,8 @@ int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path, int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
char *disk_path, char *start, char *count, int flag); char *disk_path, char *start, char *count, int flag);
/* Option -path-list */ /* Option -path_list , -quoted_path_list */
/* @param flag bit0= -quoted_path_list */
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag); int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
/* Option -pathspecs */ /* Option -pathspecs */
@ -454,6 +825,10 @@ int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */ /* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Option -relax_compliance */
int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -report_about */ /* Option -report_about */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity, int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag); int flag);
@ -483,6 +858,32 @@ int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
/* Option -session_log */ /* Option -session_log */
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag); int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
/* Option -setfacl_list alias -setfacl_listi */
int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *disk_path,
int flag);
/* Option -setfacl alias -setfacli , -setfacl_r alias -setfacl_ri */
/* @param flag bit0=recursive -setfacl_r
*/
int Xorriso_option_setfacli(struct XorrisO *xorriso, char *acl_text,
int argc, char **argv, int *idx, int flag);
/* Options -setfattr alias -setfattri, -setfattr_r alias -setfattr_ri */
/* @param flag bit0=recursive -setfattr_r
*/
int Xorriso_option_setfattri(struct XorrisO *xorriso, char *name, char *value,
int argc, char **argv, int *idx, int flag);
/* Option -setfattr_list alias -setfattr_listi */
int Xorriso_option_setfattr_listi(struct XorrisO *xorriso, char *path,
int flag);
/* Options -set_filter , -set_filter_r */
/* @param flag bit0=recursive -set_filter_r
*/
int Xorriso_option_set_filter(struct XorrisO *xorriso, char *name,
int argc, char **argv, int *idx, int flag);
/* Option -speed */ /* Option -speed */
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag); int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
@ -513,6 +914,10 @@ int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
/* Option -uid */ /* Option -uid */
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag); int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
/* Option -unregister_filter */
int Xorriso_option_unregister_filter(struct XorrisO *xorriso, char *name,
int flag);
/* Options -update and -update_r /* Options -update and -update_r
@param flag bit0= issue summary message @param flag bit0= issue summary message
bit1= do not reset pacifier, no final pacifier message bit1= do not reset pacifier, no final pacifier message
@ -531,6 +936,12 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag);
/* Option -volid */ /* Option -volid */
int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag); int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag);
/* Option -xattr "on"|"off" */
int Xorriso_option_xattr(struct XorrisO *xorriso, char *mode, int flag);
/* Option -zisofs */
int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag);
#endif /* Xorriso_includeD */ #endif /* Xorriso_includeD */

View File

@ -0,0 +1,3 @@
#ifndef Xorriso_build_timestamP
#define Xorriso_build_timestamP "-none-given-"
#endif

View File

@ -0,0 +1,3 @@
#ifndef Xorriso_build_timestamP
#define Xorriso_build_timestamP "-none-given-"
#endif

View File

@ -2,7 +2,7 @@
<HEAD> <HEAD>
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions"> <META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup"> <META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, Linux, FreeBSD, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
<META NAME="robots" CONTENT="follow"> <META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE> <TITLE>xorriso homepage english</TITLE>
</HEAD> </HEAD>
@ -14,16 +14,18 @@
<P><H2> Homepage of </H2> <P><H2> Homepage of </H2>
<H1> xorriso </H1> <H1> xorriso </H1>
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux</H2> <H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux and FreeBSD</H2>
</CENTER> </CENTER>
<P> <P>
<H2>Purpose:</H2> <H2>Purpose:</H2>
xorriso maps file objects from POSIX compliant filesystems xorriso copies file objects from POSIX compliant filesystems
into Rock Ridge enhanced ISO 9660 filesystems and allows into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to information of existing ISO images and it writes the session results to
optical media or to filesystem objects. optical media or to filesystem objects.
<BR>
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
</P> </P>
<P> <P>
@ -33,50 +35,49 @@ optical media or to filesystem objects.
<P> <P>
<H2>Hardware requirements:</H2> <H2>Hardware requirements:</H2>
A CD/DVD/BD recorder suitable for About any CD, DVD, or BD recorder produced in the recent ten years.
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR> <BR>
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD <A HREF="http://libburnia-project.org">libburn</A>
and to MMC-5 for DVD or BD). supports recorders which are compliant to standards MMC-1 for CD and
MMC-5 for DVD or BD. Linux and FreeBSD allow to access drives connected
via SCSI, PATA (aka IDE, ATA), USB, or SATA.
<BR> <BR>
</P> </P>
<P> <P>
<H2>Software requirements :</H2> <H2>Software requirements :</H2>
<DL> <DL>
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT> <DT>Linux with kernel 2.4 or higher, libc, libpthread :</DT>
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD> <DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD> <DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
<DT>libpthread</DT> <DT>or FreeBSD, libc, libpthread :</DT>
<DD>is supposed to be a standard system component.</DD> <DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
<DT>libreadline and libreadline-dev</DT> <DD>libcam has to be installed.</DD>
<DD>are optional and eventually make dialog more convenient.</DD> <DD>libiconv has to be installed.</DD>
</DL> <DT>or some other X/Open system, libc, libpthread :</DT>
</P> <DD>
There will be no direct operation of optical drives, but only POSIX i/o
<P> with objects of the local filesystem.
<H2>
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.4.9</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by team of libburnia-project.org)</DD>
<DT>libisofs-0.6.6</DT>
<DD>operates ISO 9660 images.</DD>
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
<DT>libisoburn-0.1.8</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD>
</DL>
<DD>The source code of this software is independent of
cdrecord and mkisofs.</A>
</DD> </DD>
<DD>
Might work with DVD-RAM, DVD+RW, BD-RE
but rather not with CD, DVD-R, DVD+R, BD-R.
</DD>
</DL>
<H3>Optional supporting software:</H2>
<DL>
<DT>libreadline and libreadline-dev</DT>
<DD>eventually make dialog more convenient.</DD>
<DT>libacl and libacl-devel</DT>
<DD>eventually allow on Linux to get and set ACLs.</DD>
<DT>zlib and zlib-devel</DT>
<DD>eventually allow zisofs and gzip compression.</DD>
</DL>
</P> </P>
<P> <P>
This program system has been tested on Intel/AMD Linux systems only.<BR> This program has been tested on Linux, FreeBSD, and Solaris systems.<BR>
For ports to other usable systems <A HREF="#contact">contact us</A>. For ports to other usable systems <A HREF="#contact">contact us</A>.
</P> </P>
@ -86,40 +87,52 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
<H2>Special features:</H2> <H2>Special features:</H2>
<UL> <UL>
<LI> <LI>
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated. ISO 9660 formatter and burner for CD, DVD, BD are fixely integrated.
</LI> </LI>
<LI> <LI>
Operates on an existing ISO image or creates a new one. Operates on an existing ISO image or creates a new one.
</LI> </LI>
<LI> <LI>
Copies files from filesystem into the ISO image. Copies files from filesystem into the ISO image and vice versa.
</LI> </LI>
<LI> <LI>
Renames or deletes file objects in the ISO image. Changes file properties, renames or deletes file objects in the ISO image.
</LI>
<LI>
Changes file properties in the ISO image.
</LI> </LI>
<LI> <LI>
Updates ISO subtrees incrementally to match given disk subtrees. Updates ISO subtrees incrementally to match given disk subtrees.
</LI> </LI>
<LI> <LI>
Can write result as completely new image to optical media or Can record and restore hard link relations, ACL, and xattr.
filesystem objects.
</LI> </LI>
<LI> <LI>
Can write result as add-on session to appendable multi-session media, Can attach MD5 checksums to each data file and the whole session.
to overwriteable media, to regular files, and to block devices.
</LI> </LI>
<LI> <LI>
Can copy single files from ISO image to disk filesystem. File content may get zisofs or gzip compressed or filtered by external
processes.
</LI>
<LI>
Writes result as completely new image or as add-on session
to optical media or filesystem objects.
</LI>
<LI>
Can activate ISOLINUX boot images by El Torito boot record.
</LI>
<LI>
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
</LI>
<LI>
Can issue commands to mount older sessions on Linux or FreeBSD.
</LI>
<LI>
Can check media for damages and copy readable blocks to disk.
</LI> </LI>
<LI> <LI>
Scans for optical drives, blanks re-useable optical media, formats media. Scans for optical drives, blanks re-useable optical media, formats media.
</LI> </LI>
<LI> <LI>
Suitable for: Suitable for:
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-RE. CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-R, BD-RE.
</LI> </LI>
<LI> <LI>
Reads its instructions from command line arguments, dialog, and batch files. Reads its instructions from command line arguments, dialog, and batch files.
@ -127,9 +140,6 @@ Reads its instructions from command line arguments, dialog, and batch files.
<LI> <LI>
Provides navigation commands for interactive ISO image manipulation. Provides navigation commands for interactive ISO image manipulation.
</LI> </LI>
<LI>
Adjustable thresholds for abort, exit value, and problem reporting.
</LI>
</UL> </UL>
</P> </P>
@ -137,8 +147,14 @@ Adjustable thresholds for abort, exit value, and problem reporting.
<P> <P>
<H2>Command Examples:</H2> <H2>Command Examples:</H2>
<DL> <DL>
<DT>Get an overview of drives and their addresses</DT> <DT>Get an overview of drives and their addresses</DT>
<DD>#<KBD>&nbsp;xorriso -devices</KBD></DD> <DD>#<KBD>&nbsp;xorriso -devices</KBD></DD>
<DD><KBD>...</KBD></DD>
<DD><KBD>0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'</KBD></DD>
<DD><KBD>1 -dev '/dev/scd1' rwrw-- : 'PHILIPS ' 'SPD3300L'</KBD></DD>
<DD><KBD>2 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'</KBD></DD>
<DD><KBD>...</KBD></DD>
<DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX . <DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX .
</DT> </DT>
<DT>Ordinary users should then get granted rw access to the /dev files <DT>Ordinary users should then get granted rw access to the /dev files
@ -167,7 +183,7 @@ eventually prepare yet unused BD-RE:</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures <DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
</KBD></DD> </KBD></DD>
<DT>Check the result:</DT> <DT>Have a look at the result:</DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD> <DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD>
<DT> <DT>
@ -229,16 +245,21 @@ Important: -indev and -outdev have to be different drives.
</DT> </DT>
<DT>Dialog mode accepts one or more options per line. An option and all its <DT>Dialog mode accepts one or more options per line. An option and all its
arguments have to be given in one single line. Command -end stops the program arguments have to be given in one single line. Backslash may be used to mark
run. It will write eventually pending changes to media, if that has not a line as incomplete so it gets continued by the next input line.
already been done by a previous -commit.</DT> <BR>
Command -end stops the program run. It will write eventually pending changes
to media, if that has not already been done by a previous -commit.</DT>
<DD>$<KBD>&nbsp;xorriso -dialog on</KBD></DD> <DD>$<KBD>&nbsp;xorriso -dialog on</KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD> <DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD> <DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD> <DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD> <DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD> <DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies /movies</B></KBD></DD> <DD><KBD><B>-map /home/me/prepared_for_dvd/movies \</B></KBD></DD>
<DD><KBD>Trailing backslash : Enter rest of line (or @@@ to clear it) :
</KBD></DD>
<DD><KBD><B> /movies</B></KBD></DD>
<DD>Available navigation commands: -cd, -ls, -du, -find</DD> <DD>Available navigation commands: -cd, -ls, -du, -find</DD>
<DD><KBD>enter option and arguments :</KBD></DD> <DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-commit</B></KBD></DD> <DD><KBD><B>-commit</B></KBD></DD>
@ -250,48 +271,149 @@ already been done by a previous -commit.</DT>
<HR> <HR>
</DT> </DT>
<DT>The following command can be run on blank media to create a <DT>The following command performs incremental backup.
copy of the mentioned disk directory trees, and it can be run on appendable It can be run on blank media to create a copy of the mentioned disk
media to perform a minimal set of change operations which update the directory trees, and it can be run on appendable media to perform a
old ISO copies to match the new disk trees. minimal set of change operations which update the old ISO copies
Older states can be retrieved by help of mount option "session=" from CD-R[W], to match the new disk trees.
by help of "sbsector=" from other media. Older states can be retrieved by help of mount options like "sbsector="
So this constitutes true incremental backup. or by help of xorriso option -mount.
<BR> <BR>
The copies will be complete, except all file names ending Eventual ACL, xattr and hardlink relations will be recorded. MD5 checksums
with ".o" or ".swp" which are excluded by options -not_leaf. will be computed and recorded. Data reading will be avoided by accelerator
option -disk_dev_ino. After writing, the new session will be checked
by its recorded MD5.
<BR>
Only blank media or media with volume id "PROJECTS_MAIL_..." will be accepted.
Files with names ending by ".o" or ".swp" are excluded by options -not_leaf.
</DT> </DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 \</KBD></DD> <DD>$<KBD>&nbsp;xorriso -for_backup -disk_dev_ino on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -assert_volid 'PROJECTS_MAIL_*' FATAL \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -dev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -commit -toc -eject all</KBD></DD> <DD><KBD>&nbsp;&nbsp; -commit -toc -check_md5 FAILURE -- -eject all</KBD></DD>
<DT>
To apply zisofs compression to those data files which get newly copied from
the local filesystem, perform immediately before -commit :
<DD><KBD>&nbsp;&nbsp; -hardlinks perform_update \</KBD></DD>
<DD>
<KBD>&nbsp;&nbsp; -find / -type f -pending_data -exec set_filter --zisofs -- \</KBD></DD>
</DD>
</DT>
<DT> <DT>
<HR> <HR>
</DT> </DT>
<DT>
Operating systems usually mount the most recent session on media.
xorriso can issue the appropriate mount commands for older sessions.
First get an overview of the sessions on the media:
</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -toc</KBD></DD>
<PRE>
TOC layout : Idx , sbsector , Size , Volume Id
ISO session : 1 , 0 , 104719s , PROJECTS_MAIL_2008_08_10_231435
ISO session : 2 , 106928 , 6785s , PROJECTS_MAIL_2008_08_14_184548
...
ISO session : 76 , 820384 , 11035s , PROJECTS_MAIL_2009_01_04_191150
</PRE>
<DT>
Then become superuser and let xorriso mount the session of August 14, 2008
to directory /mnt:
</DT>
<DD>#<KBD>
&nbsp;xorriso -osirrox on -mount /dev/sr0 volid '*_2008_08_14_*' /mnt
</KBD></DD>
<DT>
To be later unmounted by: <KBD>umount /mnt</KBD>
</DT>
<DT>
<HR>
</DT>
<DT>
After the user has already created a suitable file tree on disk
and copied the ISOLINUX files into subdirectory ./boot/isolinux of
that tree, xorriso can burn an El Torito bootable media:
</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -map /home/me/ISOLINUX_prepared_tree / \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -boot_image isolinux dir=/boot/isolinux</KBD></DD>
<DT>
An additional MBR is generated if the file isolinux.bin is modern enough
(syslinux version 3.72) and ready for "isohybrid". An MBR enables booting
from hard disk or USB stick.
<HR>
</DT>
<DT>ISO images may not only be stored on optical media but also in
regular disk files or block devices for full multi-session operation.
</DT>
<DD>$<KBD>&nbsp;xorriso -dev /tmp/regular_file ...other.options...</DD>
<DT>
A default setting for safety reasons requires that files below /dev/
need prefix &quot;stdio:&quot; if they do not lead to MMC burner devices.
Be cautious not to overwrite your hard disk instead of your USB stick:
</DT>
<DD>$<KBD>&nbsp;xorriso -dev stdio:/dev/sdb ...other.options...</DD>
<DT>Other file types are suitable only for writing but not for reading:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /tmp/named_pipe ...other.options...</DD>
<DT>In batch mode it is possible to operate xorriso in a pipeline <DT>In batch mode it is possible to operate xorriso in a pipeline
with an external consumer of the generated ISO image. Any message with an external consumer of the generated ISO image. Any message
output will be redirected to stderr in this case.</DT> output will be redirected to stderr in this case.
Examples for consumers are cdrecord or growisofs on operating systems
where xorriso cannot operate the burner drive directly,
or a ssh pipe to another system which has the desired drive
and a suitable burn program.</DT>
<DD>$<KBD>&nbsp;xorriso -outdev - ...other.options... | consumer</KBD></DD> <DD>$<KBD>&nbsp;xorriso -outdev - ...other.options... | consumer</KBD></DD>
<DT> <DT>
<HR> <HR>
</DT> </DT>
<DT>Enable reverse operation of xorriso and copy some single files to disk: <DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD> Let xorriso serve underneath growisofs via its alias name "xorrisofs"
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD> which enables mkisofs emulation:
<DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD> </DT>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir \</KBD> <DD>$<KBD>&nbsp;export MKISOFS="xorrisofs"</KBD></DD>
</DD> <DD>$<KBD>&nbsp;growisofs -Z /dev/dvd /some/files</KBD></DD>
<DD>$<KBD>&nbsp;growisofs -M /dev/dvd /more/files</KBD></DD>
<DT>
One may switch from mkisofs emulation to xorriso's own command mode:
</DT>
<DD>$<KBD>&nbsp;growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
</KBD></DD>
<DT> <DT>
<HR> <HR>
</DT> </DT>
<DT>If for any reason the reading operating system mishandles the ISO image
or some files in it, one may enable reverse operation of xorriso and copy
files or trees to disk:
<DD>$<KBD>&nbsp;xorriso -acl on -xattr on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx '/pictures/private/horses*/*buttercup*' \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT>Consider to enter dialog mode and use commands like
<KBD>-cd , -du , -lsl , -find<KBD>.
<DT>
<HR>
</DT>
<DT>Get overview of the options:</DT> <DT>Get overview of the options:</DT>
<DD>$<KBD>&nbsp;<A HREF="xorriso_help">xorriso -help</A></KBD></DD> <DD>$<KBD>&nbsp;<A HREF="xorriso_help">xorriso -help</A></KBD></DD>
@ -300,10 +422,6 @@ output will be redirected to stderr in this case.</DT>
<DD>$<KBD>&nbsp;<A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD> <DD>$<KBD>&nbsp;<A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD>
</DL> </DL>
Testers wanted who are willing to risk some double layer DVD media or
are interested in using BD-R media.
</P> </P>
<HR> <HR>
@ -311,9 +429,10 @@ are interested in using BD-R media.
<P> <P>
<DL> <DL>
<DT><H3>Download as source code (see README):</H3></DT> <DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.1.8.pl00.tar.gz">xorriso-0.1.8.pl00.tar.gz</A> <DD><A HREF="xorriso-0.4.2.pl01.tar.gz">xorriso-0.4.2.pl01.tar.gz</A>
(990 KB). (1295 KB).
</DD> </DD>
<DD>(Released 29 Aug 2009)</DD>
</DL> </DL>
</DD> </DD>
</DL> </DL>
@ -336,52 +455,100 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
</P> </P>
<HR> <HR>
<P> <P>
Bug fixes towards xorriso-0.1.6.pl00: Bug fixes towards xorriso-0.4.0.pl00:
<UL> <UL>
<LI>-indev -outdev modifying to overwriteable target yielded unmountable results</LI> <LI>xorriso -as mkisofs did not understand the -C option of growisofs any more
<LI>Major,minor numbers of device files appeared as 0,1 in next session</LI> <LI>Option -devices stalled if a U3 enhanced memory stick was present</LI>
<!--
<LI>- none -</LI>
-->
</UL>
</P>
<P>
Bug fixes towards xorriso-0.4.2.pl00:
<UL>
<LI>-cut_out deleted previously cut-out pieces of the same file</LI>
</UL> </UL>
</P> </P>
<P> <P>
Enhancements towards previous stable version xorriso-0.1.6.pl00: Enhancements towards previous stable version xorriso-0.4.0.pl00:
<UL> <UL>
<LI>New option -stream_recording for full speed with DVD-RAM and BD-RE</LI> <LI>New option -md5, new -as mkisofs option --md5</LI>
<LI>New options -osirrox and -cpx allow to extract single files from ISO image <LI>New options -check_md5, -check_md5_r</LI>
<LI>New find actions check_md5 get_md5, get_any_xattr, make_md5</LI>
<LI>New find tests -has_md5, -has_any_xattr</LI>
<LI>New option -list_profiles</LI>
<LI>New option -calm_drive</LI>
<LI>Options -lsl and -lsdl now display correct link counts if -hardlinks is on
<!--
<LI>- none -</LI>
-->
</UL> </UL>
</P> </P>
<HR> <HR>
<P> <P>
<H3>
Library copies included in xorriso tarballs:
</H3>
<DL> <DL>
<DT><H3>Development snapshot, version 0.1.9 :</H3></DT> <DT>libburn-0.7.1</DT>
<DD>Bug fixes towards xorriso-0.1.8.pl00: <DD>reads and writes data from and to CD, DVD, BD.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.23</DT>
<DD>operates on ISO 9660 filesystem images.</DD>
<DD>(By Vreixo Formoso, Mario Danic and Thomas Schmitt
from team of libburnia-project.org)</DD>
<DT>libisoburn-0.4.2</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD>
<DD>&nbsp;</DD>
<DT>The source code of this software is independent of
cdrecord and mkisofs.</DT>
</DL>
</P>
<HR>
<P>
<DL>
<DT><H3>Development snapshot, version 0.4.3 :</H3></DT>
<DD>Bug fixes towards xorriso-0.4.2.pl00:
<UL> <UL>
<LI> <LI>-cut_out deleted previously cut-out pieces of the same file</LI>
-chmod unintentionally performed o-x as first operation <LI>-for_backup did not enable -xattr and -md5 if no drive was chosen yet</LI>
</LI> <LI>With -as cdrecord : -xa1 and -xamix were ignored although they do matter</LI>
<LI>xorrisofs -help, xorrecord -help displayed original xorriso -help</LI>
<!-- <!--
<LI>- none yet -</LI> <LI>- none yet -</LI>
--> -->
</UL> </UL>
</DD> </DD>
<DD>Enhancements towards stable version 0.1.8.pl00: <DD>Enhancements towards stable version 0.4.2.pl01:
<UL> <UL>
<LI>
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
</LI> </LI>
<LI>New option -paste_in to copy ISO files into parts of disk files</LI>
<LI>New option -extract restores with arguments of -map or -update_r</LI> <LI>New option -scdbackup_tag</LI>
<LI>Option -toc now reports "Media product:"</LI>
<!-- <!--
<LI>- none yet -</LI> <LI>- none yet -</LI>
--> -->
</UL> </UL>
</DD> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.1.9</A> <DD><A HREF="README_xorriso_devel">README 0.4.3</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.1.9 -help</A></DD> <DD><A HREF="xorriso_help_devel">xorriso_0.4.3 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.9)</A></DD> <DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.4.3)</A></DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use <DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the this tarball which produces static linking between xorriso and the
@ -391,8 +558,8 @@ libburnia libraries.
installation see README) installation see README)
</DD> </DD>
<DD> <DD>
<A HREF="xorriso-0.1.9.tar.gz">xorriso-0.1.9.tar.gz</A> <A HREF="xorriso-0.4.3.tar.gz">xorriso-0.4.3.tar.gz</A>
(990 KB). (1310 KB).
</DD> </DD>
<DT>A dynamically linked development version of xorriso can be obtained <DT>A dynamically linked development version of xorriso can be obtained
from repositories of from repositories of
@ -407,7 +574,9 @@ versions for dynamic linking. Only release versions are safe for that.
</KBD></DD> </KBD></DD>
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B> <DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
</KBD></DD> </KBD></DD>
<DD>Download: <KBD><B>bzr branch lp:libisofs</B></KBD></DD> <DD>Download:
<KBD><B>bzr branch lp:~libburnia-team/libisofs/scdbackup</B></KBD>
</DD>
<DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B> <DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
</KBD></DD> </KBD></DD>
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B> <DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
@ -433,7 +602,6 @@ Very special thanks to Andy Polyakov whose
provide the libburnia project with invaluable examples on how to deal provide the libburnia project with invaluable examples on how to deal
with DVD media and how to emulate multi-session on overwriteable media. with DVD media and how to emulate multi-session on overwriteable media.
</P> </P>
<HR> <HR>
@ -449,6 +617,11 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
<A href="http://sourceforge.net"> <A href="http://sourceforge.net">
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A> <IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
<!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> --> <!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> -->
<P>
Enjoying a FreeBSD shell account with the opportunity to
build, install and test xorriso at<BR>
<A HREF="http://www.en.free-shells.com.ar">free-shells.com.ar</A>
</P>
</FONT></CENTER> </FONT></CENTER>
<HR> <HR>
<DL> <DL>

View File

@ -1,4 +1,8 @@
pkgconfigdir=$(libdir)/pkgconfig
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
# was: pkgconfigdir=$(libdir)/pkgconfig
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
libincludedir= libincludedir=
lib_LTLIBRARIES = lib_LTLIBRARIES =
@ -16,9 +20,24 @@ xorriso_xorriso_CPPFLAGS = -I./libburn -I./libisofs -I./libisoburn -I./xorriso
# No readline in the vanilla version because the necessary headers # No readline in the vanilla version because the necessary headers
# are in a separate readline-development package. # are in a separate readline-development package.
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF) xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN \
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
xorriso_xorriso_LDADD = $(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
# This looks quite ugly with make install: xorriso.c is compiled twice again
#
# Trying to create a build timestamp file
#
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
# phony targets get rebuilt every time
# .PHONY: xorriso/xorriso_buildstamp.h
# xorriso/xorriso_buildstamp.h:
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
# cat xorriso/xorriso_buildstamp.h
xorriso_xorriso_LDADD = $(THREAD_LIBS)
xorriso_xorriso_SOURCES = \ xorriso_xorriso_SOURCES = \
\ \
@ -28,6 +47,7 @@ xorriso_xorriso_SOURCES = \
xorriso/xorrisoburn.h \ xorriso/xorrisoburn.h \
xorriso/xorrisoburn.c \ xorriso/xorrisoburn.c \
xorriso/xorriso_timestamp.h \ xorriso/xorriso_timestamp.h \
xorriso/xorriso_buildstamp.h \
\ \
libisoburn/libisoburn.h \ libisoburn/libisoburn.h \
libisoburn/isoburn.h \ libisoburn/isoburn.h \
@ -36,9 +56,9 @@ xorriso_xorriso_SOURCES = \
libisoburn/burn_wrap.c \ libisoburn/burn_wrap.c \
libisoburn/data_source.c \ libisoburn/data_source.c \
\ \
libisofs/libisofs.h \
libisofs/builder.h \ libisofs/builder.h \
libisofs/builder.c \ libisofs/builder.c \
libisofs/error.h \
libisofs/node.h \ libisofs/node.h \
libisofs/node.c \ libisofs/node.c \
libisofs/tree.h \ libisofs/tree.h \
@ -50,7 +70,6 @@ xorriso_xorriso_SOURCES = \
libisofs/fsource.h \ libisofs/fsource.h \
libisofs/fsource.c \ libisofs/fsource.c \
libisofs/fs_local.c \ libisofs/fs_local.c \
libisofs/fs_image.h \
libisofs/fs_image.c \ libisofs/fs_image.c \
libisofs/messages.h \ libisofs/messages.h \
libisofs/messages.c \ libisofs/messages.c \
@ -69,6 +88,7 @@ xorriso_xorriso_SOURCES = \
libisofs/ecma119_tree.h \ libisofs/ecma119_tree.h \
libisofs/ecma119_tree.c \ libisofs/ecma119_tree.c \
libisofs/writer.h \ libisofs/writer.h \
libisofs/buffer.h \
libisofs/buffer.c \ libisofs/buffer.c \
libisofs/rockridge.h \ libisofs/rockridge.h \
libisofs/rockridge.c \ libisofs/rockridge.c \
@ -81,7 +101,16 @@ xorriso_xorriso_SOURCES = \
libisofs/find.c \ libisofs/find.c \
libisofs/filter.h \ libisofs/filter.h \
libisofs/filter.c \ libisofs/filter.c \
libisofs/filters/xor_encrypt.c \ libisofs/filters/external.c \
libisofs/filters/zisofs.c \
libisofs/filters/gzip.c \
libisofs/system_area.h \
libisofs/system_area.c \
libisofs/make_isohybrid_mbr.c \
libisofs/aaip_0_2.h \
libisofs/aaip_0_2.c \
libisofs/md5.h \
libisofs/md5.c \
\ \
libburn/async.c \ libburn/async.c \
libburn/async.h \ libburn/async.h \
@ -137,7 +166,6 @@ xorriso_xorriso_SOURCES = \
\ \
version.h version.h
noinst_PROGRAMS = \ noinst_PROGRAMS = \
test/compare_file test/compare_file
@ -151,6 +179,30 @@ test_compare_file_LDADD =
test_compare_file_SOURCES = test/compare_file.c test_compare_file_SOURCES = test/compare_file.c
# 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
# 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 manually.
buildstamped: buildstamp
make
## ========================================================================= ## ## ========================================================================= ##
# Indent source files # Indent source files
@ -169,8 +221,8 @@ indent: $(indent_files)
## ========================================================================= ## ## ========================================================================= ##
# Extra things # Extra things
nodist_pkgconfig_DATA = \ # nodist_pkgconfig_DATA = \
xorriso.pc # xorriso.pc
man_MANS = xorriso/xorriso.1 man_MANS = xorriso/xorriso.1
@ -184,6 +236,17 @@ EXTRA_DIST = \
COPYING \ COPYING \
INSTALL \ INSTALL \
xorriso/changelog.txt \ xorriso/changelog.txt \
$(man_MANS) xorriso/xorriso_buildstamp_none.h \
$(man_MANS) \
doc/susp_aaip_2_0.txt \
doc/susp_aaip_isofs_names.txt \
doc/zisofs_format.txt \
libisofs/aaip-os-dummy.c \
libisofs/aaip-os-linux.c \
libisofs/aaip-os-freebsd.c \
libburn/os-dummy.h \
libburn/os-freebsd.h \
libburn/os-linux.h \
libburn/sg-dummy.c \
libburn/sg-freebsd.c \
libburn/sg-linux.c

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.06.21.180701" #define Xorriso_timestamP "2009.09.22.153001"

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
a command line oriented batch and dialog tool which creates, loads, a command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2. Provided under GPL version 2.
@ -14,14 +14,17 @@
#ifndef Xorrisoburn_includeD #ifndef Xorrisoburn_includeD
#define Xorrisoburn_includeD yes #define Xorrisoburn_includeD yes
struct XorrisO;
struct FindjoB;
/* The minimum version of libisoburn to be used with this version of xorriso /* The minimum version of libisoburn to be used with this version of xorriso
*/ */
#define xorriso_libisoburn_req_major 0 #define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 1 #define xorriso_libisoburn_req_minor 4
#define xorriso_libisoburn_req_micro 9 #define xorriso_libisoburn_req_micro 2
struct SpotlisT; /* List of intervals with different read qualities */
struct CheckmediajoB; /* Parameters for Xorriso_check_media() */
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag); int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -54,9 +57,16 @@ int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
/* @param flag bit0=report about output drive /* @param flag bit0=report about output drive
bit1=short report form bit1=short report form
bit2=do not try to read ISO heads
bit3=report to info channel (else to result channel)
*/ */
int Xorriso_toc(struct XorrisO *xorriso, int flag); int Xorriso_toc(struct XorrisO *xorriso, int flag);
/* @param flag bit0= no output if no boot record was found
bit3= report to info channel (else to result channel)
*/
int Xorriso_show_boot_info(struct XorrisO *xorriso, int flag);
int Xorriso_show_devices(struct XorrisO *xorriso, int flag); int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
int Xorriso_tell_media_space(struct XorrisO *xorriso, int Xorriso_tell_media_space(struct XorrisO *xorriso,
@ -69,15 +79,24 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso,
int Xorriso_blank_media(struct XorrisO *xorriso, int flag); int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
/* @param flag bit0= try to achieve faster formatting /* @param flag bit0= try to achieve faster formatting
bit1= use parameter size (else use default size)
bit2= do not re-aquire drive
bit7= by_index mode:
bit8 to bit15 contain the index of the format to use.
@return 0=failure, did not touch media , -1=failure, altered media @return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media 1=success, altered media , 2=success, did not touch media
*/ */
int Xorriso_format_media(struct XorrisO *xorriso, int flag); int Xorriso_format_media(struct XorrisO *xorriso, off_t size, int flag);
/* @return <=0 error, 1 success /* @return <=0 error, 1 success
*/ */
int Xorriso_list_formats(struct XorrisO *xorriso, int flag); int Xorriso_list_formats(struct XorrisO *xorriso, int flag);
/* @param flag bit1= obtain outdrive, else indrive
@return <=0 error, 1 success
*/
int Xorriso_list_profiles(struct XorrisO *xorriso, int flag);
/* @param flag bit2= formatting rather than blanking /* @param flag bit2= formatting rather than blanking
@return 0=failure, did not touch media , -1=failure, altered media @return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media 1=success, altered media , 2=success, did not touch media
@ -168,6 +187,12 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
void *dir_node_generic, char *dir_path, void *dir_node_generic, char *dir_path,
struct stat *dir_stbuf, int depth, int flag); struct stat *dir_stbuf, int depth, int flag);
/* @param flag bit0= do not dive into trees
bit1= do not perform job->action on resulting node array
*/
int Xorriso_findi_sorted(struct XorrisO *xorriso, struct FindjoB *job,
off_t boss_mem, int filec, char **filev, int flag);
/* @param flag bit0= do not mark image as changed */ /* @param flag bit0= do not mark image as changed */
int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag); int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag);
@ -188,7 +213,13 @@ int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
*/ */
int Xorriso_atip(struct XorrisO *xorriso, int flag); int Xorriso_atip(struct XorrisO *xorriso, int flag);
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag); /* @param write_start_address is valid if >=0
@param tsize is valid if >0
@param flag bit0= grow_overwriteable_iso
bit1= do_isosize
*/
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
char *track_source, off_t tsize, int flag);
/* @param flag bit1= outdev rather than indev /* @param flag bit1= outdev rather than indev
@return <=0 = failure , 1= ok , 2= ok, is CD profile @return <=0 = failure , 1= ok , 2= ok, is CD profile
@ -196,11 +227,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number, int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
char profile_name[80], int flag); char profile_name[80], int flag);
/* @param flag bit0= do not mark image as changed */
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname /* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
bit1= dig out the most original stream for reading
*/ */
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname, int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
void *node_pt, void **stream, int flag); void *node_pt, void **stream, int flag);
@ -259,5 +287,205 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
char *img_path, char *disk_path, char *img_path, char *disk_path,
char type_text[5], int flag); char type_text[5], int flag);
/* Return the official libburn address of an address string. This may fail
if the string does not constitute a valid drive address.
@param official_adr must offer SfileadrL bytes of reply buffer
@return 1 = success , 0 = failure , -1 = severe error
*/
int Xorriso_libburn_adr(struct XorrisO *xorriso, char *address_string,
char official_adr[], int flag);
/* @param flag bit1= obtain info from outdev
*/
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag);
/*
@param flag bit0= obtain iso_lba from indev
bit1= head_buffer already contains a valid head
bit2= issue message about success
bit3= check whether source blocks are banned by in_sector_map
*/
int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
char *head_buffer, struct CheckmediajoB *job,
int flag);
int Xorriso_get_local_charset(struct XorrisO *xorriso, char **name, int flag);
int Xorriso_set_local_charset(struct XorrisO *xorriso, char *name, int flag);
int Xorriso_destroy_node_array(struct XorrisO *xorriso, int flag);
int Xorriso_destroy_hln_array(struct XorrisO *xorriso, int flag);
int Xorriso_destroy_di_array(struct XorrisO *xorriso, int flag);
int Xorriso_new_node_array(struct XorrisO *xorriso, off_t mem_limit,
int addon_nodes, int flag);
int Xorriso_sort_node_array(struct XorrisO *xorriso, int flag);
int Xorriso_new_hln_array(struct XorrisO *xorriso, off_t mem_limit, int flag);
/* @param flag bit0= allocate xorriso->node_targets too
*/
int Xorriso_restore_node_array(struct XorrisO *xorriso, int flag);
int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
int flag);
int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
int flag);
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag);
int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
struct CheckmediajoB *job, int flag);
int Xorriso_extract_cut(struct XorrisO *xorriso,
char *img_path, char *disk_path,
off_t img_offset, off_t bytes, int flag);
int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
int flag);
/* @return 1=ok 2=ok, is default setting */
int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
int flag);
/**
@param flag bit0= print mount command to result channel rather than
performing it
*/
int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
char *adr_value, char *cmd, int flag);
int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
int flag);
/* @param node Opaque handle to IsoNode which is to be inquired instead of
path if it is not NULL.
@param path is used as address if node is NULL.
@param acl_text if acl_text is not NULL, then *acl_text will be set to the
ACL text (without comments) of the file object. In this
case it finally has to be freed by the caller.
@param flag bit0= do not report to result but only retrieve ACL text
bit1= just check for existence of ACL, do not allocate and
set acl_text but return 1 or 2
@return 2 ok, no ACL available, eventual *acl_text will be NULL
1 ok, ACL available, eventual *acl_text stems from malloc()
<=0 error
*/
int Xorriso_getfacl(struct XorrisO *xorriso, void *node,
char *path, char **acl_text, int flag);
int Xorriso_getfattr(struct XorrisO *xorriso, void *in_node, char *path,
char **attr_text, int flag);
/* Calls iso_image_set_ignore_aclea() according to xorriso->do_aaip */
int Xorriso_set_ignore_aclea(struct XorrisO *xorriso, int flag);
/* @param node Opaque handle to IsoNode which is to be manipulated
instead of path if it is not NULL.
@param path is used as address if node is NULL.
@param access_text "access" ACL in long text form
@param default_text "default" ACL in long text form
@param flag Unused yet, submit 0
@return >0 success , <=0 failure
*/
int Xorriso_setfacl(struct XorrisO *xorriso, void *in_node, char *path,
char *access_text, char *default_text, int flag);
int Xorriso_get_attrs(struct XorrisO *xorriso, void *in_node, char *path,
size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag);
int Xorriso_setfattr(struct XorrisO *xorriso, void *in_node, char *path,
size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag);
int Xorriso_record_dev_inode(struct XorrisO *xorriso, char *disk_path,
dev_t dev, ino_t ino,
void *in_node, char *iso_path, int flag);
int Xorriso_local_getfacl(struct XorrisO *xorriso, char *disk_path,
char **text, int flag);
int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
char *path, char *filter_name, int flag);
/* @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 Xorriso_status_extf(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag);
int Xorriso_destroy_all_extf(struct XorrisO *xorriso, int flag);
int Xorriso_show_stream(struct XorrisO *xorriso, void *in_node,
char *path, int flag);
int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag);
int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag);
/* @param flag bit0= overwrite existing di_array (else return 2)
*/
int Xorriso_make_di_array(struct XorrisO *xorriso, int flag);
/* @param flag bit0= overwrite existing hln_array (else return 2)
*/
int Xorriso_make_hln_array(struct XorrisO *xorriso, int flag);
/*
@param flag 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 Xorriso_finish_hl_update(struct XorrisO *xorriso, int flag);
int Xorriso_get_md5(struct XorrisO *xorriso, void *in_node, char *path,
char md5[16], int flag);
int Xorriso_make_md5(struct XorrisO *xorriso, void *in_node, char *path,
int flag);
int Xorriso_md5_start(struct XorrisO *xorriso, void **ctx, int flag);
int Xorriso_md5_compute(struct XorrisO *xorriso, void *ctx,
char *data, int datalen, int flag);
int Xorriso_md5_end(struct XorrisO *xorriso, void **ctx, char md5[16],
int flag);
/* @param flag bit0=input drive
bit1=output drive
*/
int Xorriso_drive_snooze(struct XorrisO *xorriso, int flag);
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
For now take the highest possible value.
*/
#define Xorriso_IFBOOT S_IFMT
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */