Compare commits

...

313 Commits

Author SHA1 Message Date
924cfa82c1 Promoted branch to tag 2010-01-25 15:52:13 +00:00
6019efeb85 Documented changes and release timestamp 2010-01-25 15:07:48 +00:00
c3d41f05e4 Corrected wrong micro version number 2010-01-25 14:16:05 +00:00
710cb1ab69 Lifted ban to derive GPLv3, extended copyright range to 2010 2010-01-25 13:00:56 +00:00
753ff7cca8 Version leap to libisoburn-0.4.8 2010-01-25 12:58:12 +00:00
a63d86effb Branching for libisoburn release 0.4.8 2010-01-25 11:08:30 +00:00
f5c66d9e14 Adapted xorriso-standalone to version leap libburn-0.7.7 2010-01-23 15:34:21 +00:00
6ae505a0a2 Requiring libburn-0.7.6 now 2010-01-23 15:33:37 +00:00
425932eb68 Updated xorriso webpage 2010-01-20 11:04:14 +00:00
3686509e91 Adapted xorriso-standalone to version leap libisofs-0.6.27 2010-01-20 10:57:52 +00:00
9f9985f06f Requiring libisofs-0.6.26 now 2010-01-20 10:56:28 +00:00
6950650a82 Avoided SORRY event for missing disk file during hardlink update 2010-01-19 13:35:39 +00:00
42cf661ef8 Fixed a bug in configure.ac introduced with rev 3003 2010-01-17 14:56:16 +00:00
3a10093e3d Made xorriso issue a filure message if blanking was not successful 2010-01-17 14:50:00 +00:00
f39b0be7d6 Bug fix: xorriso did not blank CD-RW with images that were prepared on hard disk 2010-01-17 14:49:12 +00:00
249190ede2 Changed a comment in xorrisoburn.c 2010-01-11 11:33:25 +00:00
5a48f5542a Re-enabled recognition of missiong or empty disk files as blank drive (rev 2997) 2010-01-11 11:31:36 +00:00
25ba888769 Changed configure test for zlib from compress2() to compressBound() 2010-01-07 09:03:46 +00:00
581caf1007 Updated xorriso homepage 2010-01-01 13:26:48 +00:00
320eadaf0b Removed a stray option argument from xorriso man page 2010-01-01 13:02:00 +00:00
ab1336dc29 Updated copyright marks to 2010 2010-01-01 13:00:47 +00:00
ea9cb3ab4b Do not believe libburn if it says a role 2 drive is empty 2010-01-01 12:56:12 +00:00
45277ed62b Reacted on compiler warnings of Debian kfreebsd-amd64 buildd 2010-01-01 12:44:54 +00:00
aebaca8b99 Reacted on doxygen errors of Debian buildd 2009-12-31 14:42:09 +00:00
c7a6796ba7 Reacted on compiler warning of Debian buildd 2009-12-31 14:23:17 +00:00
f223373b0b Changed report title "System adapter" to "libburn OS adapter" 2009-12-31 11:48:35 +00:00
2b9b7974f0 Handling -mount on Debian kfreebsd like on FreeBSD 2009-12-30 16:35:12 +00:00
af39f58e71 Reporting system adapter with xorriso -version 2009-12-27 09:49:23 +00:00
6f5cb55568 Made xorriso-standalone aware of libcdio system adaptor 2009-12-26 23:10:07 +00:00
2669117d84 Requiring libburn-0.7.5 now 2009-12-26 22:42:50 +00:00
192518f70b Mentioned stream_recording=number in helptext of xorriso -as cdrecord 2009-12-14 12:15:15 +00:00
e9f9d03fac Corrected a harmless name error in xorriso standalone configuration 2009-12-10 12:08:32 +00:00
8666adfe70 Silenced harmless compiler warning of FreeBSD 6.3 2009-12-10 12:06:10 +00:00
2d00b2075b Documented changes and release timestamp 2009-12-08 14:53:59 +00:00
9e6c43ed0b Version leap to libisoburn-0.4.7 2009-12-08 14:52:25 +00:00
59dec6ac9e Requiring libburn-0.7.4 now 2009-12-07 08:20:19 +00:00
783ad87750 Adapted xorriso-standalone to version leap libburn-0.7.5 2009-12-07 08:17:40 +00:00
74d9c0069b New configure option --enable-track-src-odirect 2009-11-28 12:41:16 +00:00
5f23abebf1 Made use of burn_fifo_source_new() flag bit0 and of burn_os_open_track_src() 2009-11-28 12:37:39 +00:00
cc67c36003 New configure option --enable-dvd-obs-64k 2009-11-17 14:23:28 +00:00
f7e469528d New options -dvd_obs and -stdio_sync 2009-11-17 13:41:28 +00:00
7b653579a0 Requiring libburn-0.7.3 now 2009-11-17 12:30:31 +00:00
f95011d5e0 New -calm_drive mode "revoke" 2009-11-12 20:44:09 +00:00
64d8349316 Documented changes and release timestamp 2009-10-28 05:46:15 +00:00
a93589ecba Version leap to libisoburn-0.4.5 2009-10-27 20:56:57 +00:00
73e740f822 Adjustments of xorriso man page 2009-10-27 14:21:54 +00:00
071a7c8279 Added man page example: Burn an existing ISO image file to media 2009-10-22 20:08:17 +00:00
4e52b191b6 Added a "NOT READBLE" result line to -check_md5 2009-10-22 15:56:39 +00:00
b97e328da2 Added libburn/ecma130ab.[cho] to xorriso standalone and development scripts 2009-10-17 19:11:25 +00:00
b5847a4633 Requiring libburn-0.7.2 now 2009-10-14 11:51:10 +00:00
87d263de34 Adapted xorriso-standalone to version leap libburn-0.7.3 2009-10-14 11:48:31 +00:00
5405e08b5c Changed FreeBSD mount command to mount_cd9660 2009-10-11 14:17:09 +00:00
b3ea97f18c Made -application_id, -publisher, -system_id, -volset_id pending image changes 2009-10-11 14:14:20 +00:00
0e3dafe5e4 New option -mount_opts 2009-10-10 14:22:50 +00:00
13746bfc58 Adapted xorriso-standalone to version leap libisofs-0.6.25 2009-10-08 15:56:39 +00:00
e3610ee989 Requiring libisofs-0.6.24 now 2009-10-08 15:55:04 +00:00
9444c7f1cb New options -system_id , -volset_id 2009-10-07 18:04:53 +00:00
bafe16c3a3 Avoided FATAL event with -rom_toc_scan force and non-ISO media 2009-10-07 14:04:23 +00:00
dafcb1e56a Aligned sessions on overwriteables to full 32 blocks 2009-10-07 12:39:45 +00:00
7288680d48 New -rom_toc_scan sub option "force" to get DVD/BD table-of-content on Solaris 2009-10-07 08:05:00 +00:00
a811361577 New bit7 with isoburn_drive_aquire(): pretend read-only 2009-10-07 07:55:23 +00:00
cf046f9533 Declared as closed those media which have read errors in the first 64 kB 2009-10-07 07:25:40 +00:00
259e00f8c8 Made sure that -pvd_info reports the actual PVD address 2009-10-06 07:15:58 +00:00
e1b1e09d71 Added code to xorriso for repairing "_" in all three PVD id file names 2009-10-05 19:01:38 +00:00
f99e2cc41a Adjusted -pvd_info to the peculiarities of -volid 2009-10-05 18:35:12 +00:00
38a3059748 New option -pvd_info 2009-10-05 17:20:38 +00:00
9766c28d4f Avoided FAILURE event with welcoming empty disk files 2009-10-05 16:55:36 +00:00
7a5d8ca174 New -check_media sub options bad_limit=, slow_limit=, chunk_size= 2009-09-30 09:25:34 +00:00
9f26cadda4 Restricted split part recognition to directories with a complete part set 2009-09-28 17:32:27 +00:00
3adb23071f Narrowed rules for recognizing split file parts 2009-09-27 08:04:05 +00:00
57da7013d3 Bug fix: -cut_out deleted previously cut-out pieces of the same file 2009-09-22 14:34:33 +00:00
35c760ba30 Adjusted xorriso -as cdrecord fifo chunk size to -xa1 2009-09-20 11:06:21 +00:00
de4f98c03e Bug fix: Corrected handling of -as cdrecord -mode2, -xa, -xa2, -xa2, -xamix, xorrisofs -help, xorrecord -help 2009-09-20 09:27:29 +00:00
4feba8b2df New -osirrox sub-options o_excl_on/off. Program osirrox starts with o_excl_off. 2009-09-19 16:09:21 +00:00
d9665979ab Changing new option -scdbackup_tag 2009-09-17 14:47:43 +00:00
72ac8a4ab1 Expanded new API call isoburn_igopt_set_scdbackup_tag 2009-09-17 14:43:54 +00:00
7a1f61afaa Avoiding a potential memory leak in xorriso main() 2009-09-16 16:23:21 +00:00
22e2d6d12d Eventually truncate stdio: track size to file size and issue warning 2009-09-13 09:50:36 +00:00
b2192ec4f7 Avoided to use MD5 on filtered streams with compare and update 2009-09-07 16:11:46 +00:00
5fde82ba76 Reporting media product info with -as cdrecord -atip 2009-09-06 14:56:36 +00:00
18438856c8 Reporting "Media product:" with xorriso option -toc 2009-09-06 11:27:47 +00:00
b43d90d736 Requiring libburn-0.7.1 now 2009-09-06 09:41:06 +00:00
23e4f34482 Removed libburn/lec.c from xorriso standalone and development scripts 2009-09-01 11:00:03 +00:00
a6b287db7d New option -scdbackup_tag 2009-08-31 21:09:16 +00:00
b638398a75 New API call iso_write_opts_set_scdbackup_tag() 2009-08-31 21:04:29 +00:00
7b3bfed4d4 Requiring libisofs-0.6.23 now 2009-08-31 19:38:23 +00:00
2bcb098612 Bug fix: -for_backup did not enable -xattr and -md5 if no drive was chosen yet 2009-08-31 16:26:42 +00:00
8c49031f4b Added libisofs/doc/checksums.txt to xorriso standalone tarball 2009-08-31 16:24:27 +00:00
a5ba8cc3be Documented changes and release timestamp 2009-08-29 18:22:06 +00:00
e9f27e15a1 Version leap to libisoburn-0.4.3 2009-08-29 18:18:56 +00:00
5f6bc35b3a Some updates and corrections in xorriso man page 2009-08-29 18:14:36 +00:00
c6407f66c2 Small correction with reporting profile "Remoovable disk" 2009-08-28 11:40:56 +00:00
912355039c Forgot to commit xorriso_private.h 2009-08-28 10:16:28 +00:00
cc5bd34298 Forgot to store before committing 2009-08-28 10:13:07 +00:00
abb045a26f New option -list_profiles 2009-08-28 10:07:30 +00:00
36b200e0e9 Adapted xorriso-standalone to version leap libburn-0.7.1 2009-08-27 17:57:15 +00:00
b8790971d9 Requiring libburn-0.7.0 now 2009-08-27 17:56:19 +00:00
5d33c841d6 Updated helptext about -find actions, new -as mkisofs option --for_backup 2009-08-27 17:55:17 +00:00
d284f662da Adapted xorriso-standalone to version leap libisofs-0.6.23 2009-08-25 19:14:46 +00:00
97a3eb5b1f Requiring libisofs-0.6.22 now 2009-08-25 19:13:36 +00:00
a38c256789 Updated incremental backup example 2009-08-25 19:12:23 +00:00
4234319cff More timely report of library messages with -check_md5 2009-08-25 19:11:29 +00:00
543df52274 New option -calm_drive 2009-08-24 18:36:49 +00:00
e146eccd5c Demanding libburn-0.6.9 now 2009-08-24 18:27:38 +00:00
56abdd0c2c New -find action make_md5 to equip files from old images with MD5 2009-08-22 18:41:45 +00:00
5f06ee19c5 Made -compare and -update work with recorded MD5 sums 2009-08-20 20:42:14 +00:00
3a88ef260c Corrections with xorriso web page 2009-08-19 18:08:56 +00:00
bddf8008a1 New -md5 mode "all" 2009-08-19 18:07:44 +00:00
7543f5d940 Adapted to enhanced iso_write_opts_set_record_md5() 2009-08-19 18:05:36 +00:00
7c4cf26163 Included -md5 on with option -for_backup 2009-08-18 19:09:15 +00:00
6d05a2f7fc Making use of new API call iso_md5_match() and adapted to MD5 image mismatches 2009-08-18 17:34:08 +00:00
f0c12594c1 -check_media recognizes relocated 64kB superblock tag and hops over session gaps 2009-08-17 16:27:37 +00:00
1b8f2cc0ee Giving overwriteable media a single-session toc with isoburn_drive_aquire(bit4) 2009-08-17 16:23:58 +00:00
489a1b6c98 Adapted to a change in iso_util_decode_md5_tag() 2009-08-16 20:08:10 +00:00
f155241628 Introduced -check_media event= for mismatch events 2009-08-15 17:34:00 +00:00
7e40478a75 Letting -check_media look for session checksum tags 2009-08-14 21:15:52 +00:00
11fe78ffb1 More timely abort of find jobs if the result pager gets aborted 2009-08-14 10:22:59 +00:00
4d1d3732be Better reaction wich -check_md5 if no MD5 array is loaded 2009-08-13 20:36:21 +00:00
d152de91f4 Checking MD5 of whole session with -check_md5 and empty path list 2009-08-12 20:23:31 +00:00
16d84807da Completed find action check_md5 2009-08-12 13:03:07 +00:00
3b05800e08 New options -check_md5, -check_md5_r, find action check_md5, test -has_md5 2009-08-11 19:55:08 +00:00
bc9eac552a Requiring at least libisofs-0.6.21 now 2009-08-11 19:47:39 +00:00
fbaa612ae9 Missing changes in rev 2710 and 2712 2009-08-10 19:43:17 +00:00
bfd82b2ccf New option -md5, new -as mkisofs option --md5 2009-08-10 19:37:47 +00:00
219aa7e4b6 New write options session_md5, file_md5, read option nomd5 2009-08-10 19:21:43 +00:00
d1490aa95e New find actions get_md5, get_any_xattr, test -has_any_xattr 2009-08-10 12:30:49 +00:00
6de5c8d9d4 Hints about -hardlinks and file content filtering 2009-08-03 10:20:03 +00:00
7966b52a5b Bug fix: Use of freed memory with -hardlinks on and -update 2009-08-03 07:59:04 +00:00
b3bdfec3b1 Updating sorted link array before usage after image manipulations 2009-07-25 18:18:05 +00:00
d69acf1374 Showing a better link count with -hardlinks on -lsl 2009-07-23 10:36:36 +00:00
1fe5898dc1 Adopted new libisofs source module md5.[cho] 2009-07-23 10:32:48 +00:00
ea91d591c3 More emphasis on early use of -hardlinks, -acl, -xattr etc. 2009-07-23 10:31:07 +00:00
920adb9e9f Bug fix: xorriso -as mkisofs did not understand the -C option of growisofs any more 2009-07-19 21:46:55 +00:00
29de8cf843 Adapted xorriso-standalone to version leap libburn-0.6.9 2009-07-14 13:43:58 +00:00
fde2cbfd64 configure options --enable-libdir-pkgconfig and --enable-pkgconfig-path=DIR 2009-07-07 19:39:35 +00:00
1cd1cf1662 Aligned configure --help texts provided by own code in configure.ac 2009-07-07 17:57:26 +00:00
7981c59a7c Bug fix: Ticket 149, one byte overflow of local variable. 2009-06-30 15:45:44 +00:00
d47a1702a7 Provisory patch on ticket 152: GNU libiconv needs -liconv but offers no iconv() 2009-06-30 12:03:09 +00:00
b627db78ff Documented changes and release timestamp 2009-06-28 12:23:58 +00:00
d135e33b9e Version leap to libisoburn-0.4.1 2009-06-28 11:17:25 +00:00
e21150e227 With -extract : made hardlink registration combinable with sort_lba 2009-06-27 11:23:59 +00:00
9a96d6a175 Bug fix: Copies of overwriteable media onto sequential were mistaken in ROM drives 2009-06-25 12:50:57 +00:00
2774cbce07 Reverted order of memorized hardlink update parameters 2009-06-24 13:35:02 +00:00
2946631551 Updated xorriso man page 2009-06-23 16:49:48 +00:00
4ddc39adaf Deprecated -hardlinks modes "start_update", "end_update" for "perform_update" 2009-06-23 16:43:33 +00:00
d478d4ebb4 Rough test for compile time and run time libxorriso version mismatches 2009-06-23 13:31:46 +00:00
794fd96fb2 Removed from xorriso main() any dependency on non-API features 2009-06-23 12:31:23 +00:00
44b74461f3 Added missing function declaration 2009-06-23 07:09:27 +00:00
852941cf58 Introduced alternative Makefile.am for libxorriso production 2009-06-23 06:57:34 +00:00
67d7e8821b Gave up risky direct update of hardlink siblings 2009-06-22 11:28:34 +00:00
40e0333edb Wider scope of hardlink reconstruction with extract operations 2009-06-20 06:38:36 +00:00
4d266bc2f5 With -update_r : detecting hardlink splits and fusions on disk 2009-06-15 12:15:12 +00:00
11ed23ff02 Removed xorriso.pc.in from xorriso-standalone tarball 2009-06-13 12:40:17 +00:00
2bf71d14e0 Adapted xorriso-standalone to version leap libisofs-0.6.21 2009-05-31 18:58:02 +00:00
2c41942b7e Adapted xorriso-standalone to version leap libisofs-0.6.20 2009-05-31 10:03:03 +00:00
72cd8d6e76 Requiring libisofs-0.6.20 now 2009-05-31 10:01:45 +00:00
2b3841264a Avoided unconditional output of -hardlinks with option -status 2009-05-30 16:18:00 +00:00
bcb54ccaba Avoided unnecessary sorting during -extract 2009-05-29 16:22:53 +00:00
94e6000db2 New option -for_backup as shortcut for -acl -xattr -hardlinks 2009-05-29 11:08:18 +00:00
7aee4b45a7 Revoked LBA sorted reading with -compare_r. It was ugly. 2009-05-26 14:28:58 +00:00
5b13b266db Enabled -hardlinks for options -extract, -extract_l and -cp*x 2009-05-26 14:00:54 +00:00
5fcd3217f3 New pseudo test with -find : -sort_lba which is actually an option 2009-05-17 11:51:26 +00:00
183fda33a6 Disabled use of iso_tree_add_new_symlink() in favor of iso_tree_add_new_node() 2009-05-16 16:59:25 +00:00
2237469e18 LBA sorted processing of -compare_r and -update_r for smoother MMC reading 2009-05-16 16:56:21 +00:00
2faac5462e Enhanced option -extract_cut for handling filtered files 2009-05-14 08:20:33 +00:00
eea365ce35 New option -hardlinks 2009-05-09 20:17:35 +00:00
f70287eaf8 New API options isoburn_ropt_noino and isoburn_igopt_hardlinks 2009-05-09 20:12:39 +00:00
9704cb8ce1 Adapted xorriso-standalone to version leap libburn-0.6.7 2009-05-08 07:36:29 +00:00
91955a715a Bug fix: -load volid did not perform pattern searc 2009-05-06 17:43:30 +00:00
1a3297b658 Bug fix: SIGSEGV with option -status and no search string 2009-05-06 17:35:52 +00:00
3a6ecc53c3 Issueing pacifier messages from within isoburn_set_msc1() 2009-04-25 16:28:48 +00:00
61e22bb9e9 Moved call of isoburn_set_msgs_submit() to Xorriso_startup_libraries() 2009-04-25 16:22:05 +00:00
f7aed1806f Used isoburn_toc_track_get_emul() in isoburn_set_msc1() 2009-04-25 16:00:13 +00:00
b06bac1c06 New -find tests -wholename, -prune 2009-04-23 10:32:57 +00:00
29a3048803 Made use of new libisoburn call to accelerate option -toc for large TOC 2009-04-22 17:37:00 +00:00
cc66b5b3a4 New API call isoburn_toc_track_get_emul() 2009-04-22 17:36:04 +00:00
4f41e7aa41 Updated xorriso web page 2009-04-22 10:21:54 +00:00
2499047b82 Allowed implicit -and operator with -not, -if and -sub 2009-04-21 18:42:07 +00:00
6052e04b72 Enhanced -find testing by operators -not, -or, -and, (, ), -if, -else, -endif 2009-04-21 17:36:05 +00:00
a7a5be1689 Documented changes and release timestamp 2009-04-18 15:09:44 +00:00
5a6eb5b141 Version leap to libisoburn-0.3.9 2009-04-18 15:09:06 +00:00
0380c1d6a2 Last minute correction in xorriso man page 2009-04-18 15:00:41 +00:00
3c3e5af65e Adapted xorriso-standalone to version leap libisofs-0.6.19 2009-04-18 11:44:30 +00:00
ac9a406a64 Fixed bugs with rarely used make dist 2009-04-16 14:56:13 +00:00
ebeb0f22b3 Adapted xorriso-standalone to version leap libisofs-0.6.18 2009-04-15 18:53:56 +00:00
36ad5e412d Requiring libisofs-0.6.18 now 2009-04-15 18:52:41 +00:00
fedb8fdfba Removed dependency on Libisofs_has_auto_input_charseT 2009-04-15 18:51:31 +00:00
41b61970bb Adopted new libisofs filter module gzip.c, builtin filters --gzip, --gunzip 2009-04-15 07:19:47 +00:00
1ee9e2a16f New -zisofs option by_magic=on 2009-04-14 09:23:06 +00:00
572dfb1584 Updated README texts of libisoburn and xorriso 2009-04-14 09:19:37 +00:00
2404b9d8a5 Updated xorriso web page 2009-04-12 12:08:09 +00:00
a3f5ffeb11 New option -zisofs, builtin filters --zisofs and --zisofs-decode 2009-04-11 17:26:48 +00:00
5676ae2eab Adjustments with filter --zisofs-decode 2009-04-11 12:53:27 +00:00
1229c276fe Included a copy of doc/zisofs_format.txt in xorriso-standalone 2009-04-11 12:51:39 +00:00
8007b3ae8d Introduced builtin filters --zisofs and --zisofs-decode 2009-04-10 10:32:53 +00:00
25bf8fc5cb Took into respect optional libz dependency of libisofs 2009-04-10 10:25:58 +00:00
13b24ca32f Removed some unused old code branches 2009-04-07 12:21:13 +00:00
f9db31f5a1 New -find tests -has_filter, -has_no_filter 2009-04-07 12:02:53 +00:00
7e3b7f3b7f Fixed bug introduced with 2575 2009-04-06 16:15:39 +00:00
1615fea70d Changed appearance of -show_stream, fixed bug introduced with rev 2575 2009-04-06 14:31:07 +00:00
c84e0e0a44 New options -show_stream, -show_stream_r, -exec show_stream 2009-04-06 13:20:05 +00:00
f99b7182f5 Suffix rollback with -set_filter --remove-all-filters 2009-04-06 10:08:48 +00:00
9192380e90 Updated xorriso web page 2009-04-05 18:29:19 +00:00
48436bee11 New -osirrox mode "banned" 2009-04-05 14:30:45 +00:00
4baa62cb18 Included sys/select.h as prescribed by POSIX and Linux, FreeBSD man pages 2009-04-05 13:15:36 +00:00
3f0f1c72a5 Fixed a bug about detection of failure with -set_filter 2009-04-05 11:06:49 +00:00
f109865cc4 Reporting number of processed filters with -set_filter and -set_filter_r 2009-04-05 11:05:37 +00:00
c89febb7a1 configure options to control availability of external filters in xorriso 2009-04-04 14:42:41 +00:00
a50a17c075 New option -close_filter_list 2009-04-04 14:40:11 +00:00
6033dd8ea8 Fixed a bug with the error message about external filters and setuid 2009-04-04 08:26:32 +00:00
b4952da4e6 Fixed a potential blind spot of 1 second in -disk_dev_ino comparison 2009-04-03 17:20:33 +00:00
e3eaea1a4e New options -external_filter , -unregister_filter, -set_filter , -set_filter_r 2009-04-02 16:25:33 +00:00
25bc0d4101 Experimental -find action -exec set_filter with some hardcoded filter commands 2009-03-29 16:49:38 +00:00
f4efc5c3fc Adapted to new libisofs feature iso_file_add_external_filter() 2009-03-29 16:46:50 +00:00
e95dee1fea libisoburn now demands libisofs-0.6.17 2009-03-29 16:44:26 +00:00
60675d21b7 Revoked revision 2552. Dynamic xorriso did not get linked with -lacl any more. 2009-03-29 16:43:25 +00:00
adff1dd16b Stuffed memory leaks on -commit and loading of El Torito records 2009-03-22 09:02:21 +00:00
bc1453ad0e Clarification about -auto_charset pitfalls 2009-03-22 08:59:18 +00:00
b4332a8387 Now option -auto_charset based on xattr "isofs.cs" 2009-03-20 19:33:51 +00:00
d5cb4aa3d0 New API functions isoburn_ropt_[sg]et_auto_incharset() 2009-03-20 19:29:04 +00:00
359333effa Unified -status filtering decision 2009-03-19 17:27:59 +00:00
146cfddf78 Removed useless libisoburn configure options --enable-libacl --enable-xattr 2009-03-18 10:54:08 +00:00
90fba13419 Adapted xorriso-standalone to version leap libisofs-0.6.17 and FreeBSD libdata 2009-03-18 10:40:25 +00:00
33aec8f935 Get on FreeBSD pkgconfigdir=.../libdata , on Linux and others: .../lib 2009-03-18 10:39:35 +00:00
5da590372c Documented changes and release timestamp 2009-03-16 12:08:17 +00:00
31c61344aa Version leap to libisoburn-0.3.7 2009-03-16 12:07:24 +00:00
57430a9feb Requiring libburn-0.6.4 now 2009-03-14 11:57:02 +00:00
d29c2bd0af Fixed the inappropriate refusal on paths like /u/test/../.. 2009-03-14 11:38:05 +00:00
268d49efb8 Adapted xorriso-standalone to version leap libburn-0.6.5 2009-03-13 15:08:27 +00:00
bb93624293 Defaulting -stream_ecording "data" to "100m" 2009-03-13 15:07:24 +00:00
d59a2c5907 Made -compliance old_rr the default 2009-03-12 14:16:36 +00:00
3795660f3c Minor changes in xorriso man page 2009-03-11 21:24:11 +00:00
14e408c6e0 Mentioned bug fixes in libisofs 2009-03-11 17:12:34 +00:00
b83fa3ef61 Adapted xorriso-standalone to version leap libisofs-0.6.16 2009-03-11 17:03:39 +00:00
73db0be503 Requiring libisofs-0.6.16 now 2009-03-11 17:01:20 +00:00
7ba923cbbc Made -compliance old_rr imply -compliance aaip_susp_1_10 2009-03-10 09:22:16 +00:00
0987ced379 Reacted on compiler warnings of SchilliX-0.6.7 (based on Solaris 5.11) 2009-03-08 13:59:57 +00:00
5f110f1a03 Lifted the ban on operating systems other than Linux and FreeBSD 2009-03-05 12:18:41 +00:00
3f4b8b60e0 Making optional use of statvfs() in sg-dummy 2009-03-03 10:37:20 +00:00
723dcbcb89 isoburn_igopt_get_data_start() @since 0.3.6 because not announced in 0.3.4 2009-03-03 10:34:15 +00:00
1615f39550 Documented changes and release timestamp 2009-03-01 11:44:13 +00:00
a41b4769b3 Version leap to 0.3.5 2009-03-01 11:39:18 +00:00
8a1574b632 Switched standalone version to libisofs-0.6.15 2009-02-28 18:17:47 +00:00
1af09c3ac8 New -stream_recording mode with start address, "on" is now 32s 2009-02-28 18:13:56 +00:00
f0734966ff New API function isoburn_igopt_get_data_start() 2009-02-28 17:59:20 +00:00
da07c22d31 Requiring libisofs-0.6.14 now, libburn-0.6.0 still suffices 2009-02-28 17:57:55 +00:00
c8122f4659 -disk_dev_ino mode ino_only 2009-02-25 14:40:47 +00:00
b6a998318c Adapted to version leap libburn-0.6.2 2009-02-20 13:12:30 +00:00
659fb43291 Committing forgotten xorriso_private.h 2009-02-19 18:37:28 +00:00
237113e1af Adapted to version leap libisofs-0.6.14 2009-02-19 16:29:24 +00:00
8e08cf3c57 Adapted to removal of Libburn_with_aaiP macro 2009-02-19 12:36:09 +00:00
ca4777fba9 Adapted to removal of Libburn_with_aaiP macro 2009-02-19 12:35:22 +00:00
e69f4e1234 New option -disk_dev_ino 2009-02-17 18:42:41 +00:00
1251c6e135 Took into respect ACL and xattr with -compare and -update 2009-02-16 08:26:53 +00:00
ef8333effe -as mkisofs --acl and --xattr was not properly recognized 2009-02-14 13:30:27 +00:00
333a7d95bb New option -setfattr_list 2009-02-13 20:25:42 +00:00
d9e76c54a6 Updated xorriso man page 2009-02-12 11:06:30 +00:00
5d9f43c7de New -as mkisofs options --acl and --xattr 2009-02-12 11:05:17 +00:00
26dc31682a Adapted html man page generator to textchanges 2009-02-12 07:26:49 +00:00
e4b8310812 Closed a memory leak with unreleased IsoImage in boot image inquiry 2009-02-10 12:58:36 +00:00
d2cc6531c0 Updated xorriso home page 2009-02-10 11:47:57 +00:00
c8fbf6ac4b New options -setfattr, -setfattr_r, new find -exec setfattr 2009-02-09 18:59:41 +00:00
af43ee46fd Displaying "+" with lslx if ACL is detected 2009-02-08 15:14:05 +00:00
5d21c97de7 First code for -setfattr (have to fix some ACL problems before going on) 2009-02-08 13:21:36 +00:00
27c45c6df6 Correct group permission bits with -acl off and disk file that has ACL 2009-02-07 14:26:12 +00:00
f5e6a8147b Correct group permission bits with -acl off and -extract file that has ACL 2009-02-07 09:01:26 +00:00
c854275d51 Checking for iconv(3) in separate libiconv (e.g. on FreeBSD) 2009-02-04 20:06:56 +00:00
0e26c05593 Took into respect eventual resolution of symbolic links 2009-02-04 20:01:22 +00:00
03e92f4f72 Linking with $LIBBURN_ARCH_LIBS to get -lcam on FreeBSD 2009-02-03 16:24:48 +00:00
efa1164328 Enabled restoring of xattr 2009-02-02 20:11:26 +00:00
f861321c45 New options -xattr, -getfattr, find -has_xattr, -has_aaip, -exec getfattr 2009-02-02 13:44:00 +00:00
4ceee394f7 Equipped output of lsl with '+' perm if ACL is present 2009-01-31 10:11:37 +00:00
002ba5d6d2 Followed changes in iso_node_*acl_text API 2009-01-30 14:56:31 +00:00
2756789dfe Bug fix: included sys/wait.h rather than wrong wait.h 2009-01-29 21:06:14 +00:00
db02a5e88a Added aaip-os-dummy.c to xorriso-standalone 2009-01-29 21:04:49 +00:00
767b0c3840 Updated xorriso web page 2009-01-29 16:56:01 +00:00
4bc34cc0ed New option -setfacl_list 2009-01-29 16:53:45 +00:00
78a3402bf3 Made -getfacl file name escaping more similar to shell command behavior 2009-01-28 19:01:47 +00:00
0e70724dc2 Bug fixes and enhancements about "default" ACL 2009-01-28 11:48:04 +00:00
d048fc4710 Bug fixes and enhancements about "default" ACL 2009-01-28 07:49:56 +00:00
a74260d09f Mentioned the need for 64 bit file i/o 2009-01-27 12:14:28 +00:00
aaf0c184d1 Including doc/susp_aaip_0_2.txt in xorriso-standalone 2009-01-26 17:38:33 +00:00
0cd2d869c3 Gave user control over isoburn_igopt_aaip_susp_1_10 2009-01-26 17:36:15 +00:00
e0fc368105 New macro isoburn_igopt_aaip_susp_1_10 controls writing of AAIP ER and ES 2009-01-26 17:33:02 +00:00
fc2d3655b0 AAIP code now resides in libisofs 2009-01-25 15:04:35 +00:00
02f2954bd5 New option -setfacl, -setfacl_r, new -find action setfacl 2009-01-25 14:11:37 +00:00
40d4330bcc Took into respect changed .o file names of libisofs 2009-01-24 16:38:13 +00:00
75ae510390 Updated xorriso web page 2009-01-23 17:53:26 +00:00
86b5ffda4f Silenced a FAILURE message with -acl if no image is loaded 2009-01-23 17:28:02 +00:00
5e1adef785 xorriso compilation detects availability of libacl and of Linux listxattr call 2009-01-23 17:27:04 +00:00
21adcfc5b3 Updated xorriso web page 2009-01-23 14:57:38 +00:00
e7036f90dc New find tests -has_acl, -has_no_acl, new action getfacl, new option getfacl_r 2009-01-23 14:08:31 +00:00
41619c2763 Demanding libisofs 0.6.13 now 2009-01-23 10:28:47 +00:00
b3b9381dad Promoted standalone libisofs to 0.6.13 2009-01-23 10:13:10 +00:00
b55cea36b1 Removing leading slash from -getfacl output of file path 2009-01-22 15:50:54 +00:00
8bb3c084e3 Restoring ACL only if -acl "on" 2009-01-22 15:22:57 +00:00
2c11219da5 Making use of new libisoburn macro isoburn_igopt_aaip 2009-01-22 14:33:09 +00:00
2e7f566be0 New macro isoburn_igopt_aaip controls writing of AAIP info into images 2009-01-22 14:32:15 +00:00
a1dd938400 Adapted to new macro situation in libisoburn 2009-01-22 13:03:02 +00:00
d03734211f Now it is isoburn_ropt_noaaip , isoburn_ropt_noacl and isoburn_ropt_noea 2009-01-22 13:01:13 +00:00
ecbf829ea9 New option -acl enables ACL loading 2009-01-21 20:45:22 +00:00
d678296449 Had to split isoburn_ropt_noaaip into isoburn_ropt_noacl and isoburn_ropt_noea 2009-01-21 20:39:00 +00:00
9716ac2333 New API macro isoburn_ropt_noaaip controls enabling of AAIP loading 2009-01-21 15:02:56 +00:00
acfdb36e73 Restoring ACLs with -extract and others 2009-01-18 21:40:42 +00:00
72743ca23b New option -getfacl 2009-01-17 18:15:22 +00:00
c4ced566b1 Introduced AAIP code. Now linking with libacl. 2009-01-14 11:10:53 +00:00
2fdd8738ef Clarified that AAIP is only allowed if RRIP is present 2009-01-14 11:04:55 +00:00
bca4682e63 Avoiding use of function parameter name "class" 2009-01-10 15:40:45 +00:00
50ebdac74f Mentioned bug fix and pl01 2009-01-09 10:33:59 +00:00
e415034e60 Some small corrections of documentation 2009-01-06 12:31:11 +00:00
55ac4a7305 Documented changes and release timestamp 2009-01-05 15:36:02 +00:00
f803da91b4 Version leap to 0.3.3 2009-01-05 15:33:46 +00:00
b07e37454a Updated copyright marks to 2009 2009-01-05 14:57:55 +00:00
34 changed files with 15703 additions and 5494 deletions

View File

@ -1,11 +1,11 @@
Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso, Mario Danic
libisoburn is Copyright (C) 2007-2010 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2010 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2010 Vreixo Formoso, Mario Danic
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
and Copyright (C) 2006-2010 Mario Danic, Thomas Schmitt
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
lib_LTLIBRARIES = libisoburn/libisoburn.la
@ -46,8 +50,14 @@ bin_PROGRAMS = \
# cat xorriso/xorriso_buildstamp.h
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN $(READLINE_DEF)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN \
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF) \
$(XORRISO_DVD_OBS_64K)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
xorriso_xorriso_SOURCES = \
xorriso/xorriso.h \
xorriso/xorriso_private.h \

67
README
View File

@ -4,9 +4,9 @@
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org.
http://files.libburnia-project.org/releases/libisoburn-0.3.1.tar.gz
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2.
http://files.libburnia-project.org/releases/libisoburn-0.4.8.pl00.tar.gz
Copyright (C) 2006-2010 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2 or later.
------------------------------------------------------------------------------
libisoburn is a frontend for libraries libburn and libisofs which enables
@ -18,8 +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
other CD layout which does not entirely consist of ISO-9660 sessions.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(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:
"... without even the implied warranty ..."
@ -27,18 +29,17 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.3.1 :
- libburn.so.4 , version libburn-0.5.8 or higher
- libisofs.so.6 , version libisofs-0.6.12 or higher
Dynamic library and compile time header requirements for libisoburn-0.4.8 :
- libburn.so.4 , version libburn-0.7.6 or higher
- libisofs.so.6 , version libisofs-0.6.26 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.
headers seen at compile time.
Obtain libisoburn-0.3.1.tar.gz, take it to a directory of your choice
Obtain libisoburn-0.4.8.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.3.1.tar.gz
cd libisoburn-0.3.1
tar xzf libisoburn-0.4.8.pl00.tar.gz
cd libisoburn-0.4.8
Within that directory execute:
@ -47,7 +48,7 @@ Within that directory execute:
Then become superuser and execute
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
./libisoburn/libisoburn.h
@ -78,12 +79,28 @@ 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
In some situations Linux may deliver a better write performance to DVD drives
if 64 KB rather than 32 KB are transmitted in each write operation.
64k can be made default at configure time by:
--enable-dvd-obs-64k
Drives and Disk File Objects
The user of libisoburn applications needs rw-permission for the CD/DVD burner
devices which shall be used.
The user of libisoburn applications needs rw-permission for the CD/DVD/BD
drives which shall be used, even if only reading is intended.
A list of rw-accessible drives can be obtained by
xorriso -devices
resp. by libburn API call
@ -105,6 +122,9 @@ output drives. The addresses of the disk files have to be preceded by "stdio:".
Like:
"stdio:/tmp/pseudo_drive"
Note: xorriso by default prefixes "stdio:" to addresses outside the /dev tree
if they do not lead to an optical drive device file.
Testing
@ -156,11 +176,24 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
We, the copyright holders, agree on the interpretation that dynamical linking
of our libraries constitutes "use of" and not "derivation from" our work in
the sense of GPL, provided those libraries are compiled from our unaltered
code or from altered code published under GPL.
So we will not raise any legal protest to dynamic linking of our
libraries with applications not under GPL, as long as they fulfill
the condition of offering the library source code used, whether
altered or unaltered, under the GPL, along with the application.
Nevertheless, the safest legal position is not to link libburn with
non-GPL compatible programs.
libburnia-project.org is inspired by and in other components still containing
parts of old
Libburn. By Derek Foreman <derek@signalmarketing.com> and
Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
libisoburn does not stem from their code.

View File

@ -1,6 +1,7 @@
AC_DEFUN([TARGET_SHIZZLE],
[
ARCH=""
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
AC_MSG_CHECKING([target operating system])
@ -12,11 +13,108 @@ AC_DEFUN([TARGET_SHIZZLE],
*-*-freebsd*)
ARCH=freebsd
LIBBURN_ARCH_LIBS=-lcam
# This may later be overridden by configure --enable-libdir-pkgconfig
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
;;
*)
AC_ERROR([You are attempting to compile for an unsupported platform])
ARCH=
LIBBURN_ARCH_LIBS=
# AC_ERROR([You are attempting to compile for an unsupported platform])
;;
esac
AC_MSG_RESULT([$ARCH])
])
dnl LIBBURNIA_CHECK_ICONV is by Thomas Schmitt, libburnia project
dnl It is based on gestures from:
dnl iconv.m4 serial AM7 (gettext-0.18)
dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl
AC_DEFUN([LIBBURNIA_CHECK_ICONV],
[
dnl Check whether it is allowed to link with -liconv
AC_MSG_CHECKING([for 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.3.1], [http://libburnia-project.org])
AC_INIT([libisoburn], [0.4.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -8,7 +8,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
dnl Hint: Search list for version code aspects:
dnl /AC_INT(
dnl /AC_INIT(
dnl /ISOBURN_.*_VERSION
dnl /LT_.*
dnl /LIB.*_REQUIRED
@ -20,8 +20,9 @@ dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=3
ISOBURN_MICRO_VERSION=1
ISOBURN_MINOR_VERSION=4
ISOBURN_MICRO_VERSION=8
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -33,16 +34,16 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE
dnl
dnl ts A81201
dnl ### This is the release version 0.3.0 = libisoburn.so.1.19.0
dnl This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl ts B00125
dnl This is the release version 0.4.8 = libisoburn.so.1.37.0
dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 20 - 19 = 1 . Library name = libisoburn.so.1.19.0
dnl SONAME = 38 - 37 = 1 . Library name = libisoburn.so.1.37.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=20
LT_AGE=19
LT_CURRENT=38
LT_AGE=37
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -70,6 +71,12 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.])
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_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent"
@ -83,9 +90,16 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE
AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS)
dnl Determine target directory for libisoburn-*.pc
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
LIBBURNIA_SET_PKGCONFIG
AC_ARG_ENABLE(libreadline,
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
, enable_libreadline=yes)
@ -102,15 +116,144 @@ else
fi
AC_SUBST(READLINE_DEF)
dnl ts A90329
dnl ACL and xattr do not need to be enabled in libisoburn or xorriso source
dnl but without AC_CHECK_LIB() xorriso will not be linked with -lacl .
dnl On my Linux this does work with an ACL enabled libisofs but in general
dnl it seems not be right.
dnl So for now it seems to be best to do the same configuration for libisoburn
dnl and xorriso as for libisofs.
AC_ARG_ENABLE(libacl,
[ --enable-libacl Enable use of libacl by libisofs, default=yes],
, enable_libacl=yes)
if test x$enable_libacl = xyes; then
dnl Check whether there is libacl-devel and libacl-runtime.
dnl If not, erase this macro which would enable use of acl_to_text and others
LIBACL_DEF="-DLibisofs_with_aaip_acL"
dnl The empty yes case obviously causes -lacl to be linked
AC_CHECK_HEADER(sys/acl.h, AC_CHECK_LIB(acl, acl_to_text, , LIBACL_DEF= ), LIBACL_DEF= )
else
LIBACL_DEF=
fi
AC_SUBST(LIBACL_DEF)
AC_ARG_ENABLE(xattr,
[ --enable-xattr Enable use of xattr by libisofs, default=yes],
, enable_xattr=yes)
if test x$enable_xattr = xyes; then
dnl Check whether there is the header for Linux xattr.
dnl If not, erase this macro which would enable use of listxattr and others
XATTR_DEF="-DLibisofs_with_aaip_xattR"
AC_CHECK_HEADER(attr/xattr.h, AC_CHECK_LIB(c, listxattr, X= , XATTR_DEF= ), XATTR_DEF= )
else
XATTR_DEF=
fi
AC_SUBST(XATTR_DEF)
dnl ts A90409
dnl Same situation as with xattr and ACL: libisoburn does not depend directly
dnl on zlib. But if it is enabled in libisofs then it seems wise to link it
dnl with libisoburn apps.
AC_ARG_ENABLE(zlib,
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
, enable_zlib=yes)
if test x$enable_zlib = xyes; then
dnl Check whether there is the header for zlib.
dnl If not, erase this macro which would enable use of compress2() and others.
dnl Linking fails on SuSE 9.0 because zlib has compress2() but lacks
dnl compressBound(). So compressBound is the more modern thing to test.
dnl The empty parameter after "compressBound" causes -lz.
ZLIB_DEF="-DLibisofs_with_zliB"
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
AC_SUBST(ZLIB_DEF)
dnl ts B00107
dnl Just for the case that it is necessary to give link option -lcdio not only
dnl with libburn but also with libburn apps like xorriso.
dnl On SuSE 10.2 this is not needed. libburn finds libcdio on its own.
AC_ARG_ENABLE(libcdio,
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
, enable_libcdio=no)
if test x$enable_libcdio = xyes; then
dnl Check whether there is libcdio-devel and libcdio-runtime.
dnl If not, erase this macro
LIBCDIO_DEF="-DLibburn_use_libcdiO"
dnl The empty yes case obviously causes -lcdio to be linked
AC_CHECK_HEADER(cdio/cdio.h, AC_CHECK_LIB(cdio, mmc_last_cmd_sense, , LIBCDIO_DEF= ), LIBCDIO_DEF= )
else
LIBCDIO_DEF=
fi
AC_SUBST(LIBCDIO_DEF)
AC_ARG_ENABLE(external-filters,
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
, enable_external_filters=yes)
if test x"$enable_external_filters" = xyes; then
EXTF_DEF="-DXorriso_allow_external_filterS"
echo "enabled xorriso external filter programs"
else
EXTF_DEF=
echo "disabled xorriso external filter programs"
fi
AC_SUBST(EXTF_DEF)
AC_ARG_ENABLE(external-filters-setuid,
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
, enable_external_filters_setuid=no)
if test x$enable_external_filters_setuid = xyes; then
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso external filter programs under setuid"
else
EXTF_SUID_DEF=
echo "disabled xorriso external filter programs under setuid"
fi
AC_SUBST(EXTF_SUID_DEF)
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for xorriso DVD/BD writing, default=no],
, enable_fifo_odirect=no)
if test x$enable_dvd_obs_64k = xyes; then
XORRISO_DVD_OBS_64K="-DXorriso_dvd_obs_default_64K"
echo "enabled xorriso write size default 64 KB on DVD and BD"
else
XORRISO_DVD_OBS_64K=
echo "disabled xorriso write size default 64 KB on DVD and BD"
fi
AC_SUBST(XORRISO_DVD_OBS_64K)
AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.5.9
LIBISOFS_REQUIRED=0.6.12
LIBBURN_REQUIRED=0.7.6
LIBISOFS_REQUIRED=0.6.26
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
if test x$LIBCDIO_DEF = x
then
if test x$enable_libcdio = xyes
then
echo "WARNING: could not enable use of libcdio as system adapter"
fi
else
echo "enabled EXPERIMENTAL use of libcdio as system adapter"
dnl For some reason this check may not be done earlier or else pkg-config
dnl is not found.
LIBCDIO_REQUIRED=0.83
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
fi
dnl Add compiler-specific flags
dnl See if the user wants aggressive optimizations of the code

View File

@ -1,328 +0,0 @@
Arbitrary Attribute Interchange Protocol
Draft version 0.2
Dec 19 2008
Interchange of Persistent File Attributes
by Thomas Schmitt - mailto:scdbackup@gmx.net
Libburnia project - mailto:libburn-hackers@pykix.org
AAIP is intended as companion of the Rock Ridge Interchange Protocol RRIP
which under the general design of System Use Sharing Protocol SUSP extends
ISO 9660 aka ECMA-119 filesystem semantics to match POSIX needs.
Goal is to have for each file an arbitrary number of attributes which consist
of two components (Name and Value) of arbitrary length and to have a compact
representation of ACLs.
This document describes a SUSP field with adjustable name (Signature Word).
The name is defined in an ER field of which the content form is described here.
Recommended is to use the name "AA" which collides neither with SUSP 1.12 nor
with RRIP 1.12.
The field has been designed to be as similar to the RRIP field SL as possible.
Since the size of a SUSP field is limited to 255, multiple fields may be
needed to describe one component. The CE mechanism of SUSP shall be used to
address enough storage if needed.
-------------------------------------------------------------------------------
System Entries Provided by this Specification
* AA (or another name which does not disturb other co-existing SUSP protocols)
Description of the "AA" System Use Entry
The field has exactly the same layout as RRIP field SL. One has to expect
more data bytes than with SL, though, and any of the 256 possible byte values.
The reader shall be prepared to detect and handle oversized data.
One or more AA fields form the Attribute List of a file object with
a pare number of components. Each two consequtive components form a pair of
Name and Value. The empty name is reserved for a compact representation of
ALCs. The meaning of any other name is not specified by this document.
All AA fields except the last one shall have the CONTINUE flag set. An AA
field with CONTINUE set to 0 indicates the end of the Attribute List.
The format of the "AA" System Use Field is as follows:
[1] "BP 1 to BP 2 - Signature Word" shall be (41)(41) ("AA") resp. the word
that is defined in the ER field. See below.
[2] "BP 3 - Length" shall specify as an 8-bit number the length in bytes of
the "AA" entry recorded according to ISO 9660:7.1.1.
[3] "BP 4 - System Use Entry Version" shall be 1 as in ISO 9660:7.1.1.
[4] "BP 5 - Flags" shall contain bit field flags numbered 0 to 7 starting
with the least significant bit as follows:
0 CONTINUE This AA field continues in the next AA field.
All other bits shall be set to 0.
[5] "BP 6 to Length - Component Area" shall contain Component Records
as described below.
| 'A' | 'A' | LENGTH | 1 | FLAGS | COMPONENT AREA |
Within "AA" fields each component (Name or Value) shall be recorded as one
or more component records. If a component does not fit into the remaining
space of an AA field then it shall be continued in following AA fields.
All Component Records of a component except the last one shall have the
CONTINUE flag set. A Component Record with CONTINUE set to 0 indicates the end
of the component. An eventually following Component Record starts the next
component.
-------------------------------------------------------------------------------
The Component Record format is identical to the one of the SL field.
The complete form of the following summary can be found in RRIP 1.12 "4.1.3.1".
In case of discrepancies, RRIP 1.12 is the decisive specification.
Component Records shall be recorded contiguously within each Component Area,
starting in the first byte of the Component Area. The last Component Record
in the Component Area of an "AA" System Use Entry may be continued in the
Component Area of the next recorded "AA" System Use Entry in the same
System Use Area.
Each Component Record shall have the following format:
[A] "BP 1 - Component Flags" shall contain bit field flags numbered 0 to 7,
starting with the least significant bit, as follows:
0 CONTINUE This Component Record continues in the next
AA Component Record.
The following bits are defined but may not be set if the Component
Record shall carry payload. (Their use case is unclear yet.)
1 CURRENT This Component Record refers to the current
directory.
2 PARENT This Component Record refers to the parent of
the current directory.
3 ROOT This Component Record refers to root directory.
all others are RESERVED and shall be 0.
No more than one of "AA" Component Flag Bits 0-3 shall be set to ONE.
[B] "BP 2 - Component Length (LEN_CP)" shall specify as an 8-bit number the
number of component bytes in the Component Record. This length shall not
include the first two bytes of the Component Record.
If any of the bit positions 1-3 is set, the value of this field shall be
set to ZERO and no Component Content shall be recorded.
This field shall be recorded according to ISO 9660 Format section 7.1.1.
[C] "BP 3 to 2 + LEN_CP - Component Content" shall contain the component
bytes in the Component Record.
| COMPONENT FLAGS | LEN_CP | COMPONENT BYTES |
Example: Two pairs of "name"="long...content" and "one"="more" encoded as
two AA fields
Field 1 contains the Component Record of Name and one Component Record of
Value :
{ 'A', 'A', 255, 1, 1,
0, 4, 'n', 'a', 'm', 'e',
1, 255, 'l', 'o', 'n', 'g', ... 238 more bytes, 13 go to next AA ... }
Field 2 contains the rest of "long...content" and the complete second pair.
It marks the end of the Attribute List :
{ 'A', 'A', 38, 1, 0,
... 13 remaining bytes of the Component Record in first field ...
0, 7, 'c', 'o', 'n', 't', 'e', 'n', 't',
0, 3, 'o', 'n', 'e',
0, 4, 'm', 'o', 'r', 'e' }
-------------------------------------------------------------------------------
Specification of binary ACL representation as special Arbitrary Attribute
The Name component of a binary ACL shall be of length 0.
The Value shall be an arbitrary number of ACL Entries:
[a] "BP 1 - Entry Flags" shall contain bit field flags numbered 0 to 7,
starting with the least significant bit, as follows:
0 EXEC indicates that this entry grants execute permission
1 WRITE write permission
2 READ read permission
3 QUALIFIER indicates that one or more Qualifier Records follow
4 - 7 TYPE
shall contain the tag type of the ACL entry as four bit code:
0 TRANSLATE entry for a global map of name to numeric id
1 ACL_USER_OBJ permissions of owning user (as of PX field)
2 ACL_USER of arbitrary user, with name as qualifier
3 ACL_GROUP_OBJ permissions of owning group (as of PX field)
4 ACL_GROUP of arbitrary group, with name as qualifier
5 ACL_MASK restricts 2, 3, and 4 via logical AND
6 ACL_OTHER permissions of non-listed, non-owning users
8 SWITCH_MARK switch from "access" ACL to "default" ACL
10 ACL_USER_N like 2, with numeric user id as qualifier
12 ACL_GROUP_N like 4, with numeric group id as qualifier
15 FUTURE_VERSION will indicate that this document
does not apply to the entry.
The other values are reserved. Readers shall ignore them if
they are not aware of updates of this document which would
assign a meaning to them.
If any of ACL_USER_OBJ, ACL_GROUP_OBJ, ACL_OTHER are missing then the settings
from the PX field shall get into effect. If they exist then they shall override
the PX field.
A numeric qualifier is a binary number of variable length. The Most Significant
Byte comes first. The number shall be the "POSIX File User ID" resp.
"POSIX File Group ID" as also used in RRIP PX fields. The ids of owning user
and owning group shall be taken from the PX field of the file object.
Optional TRANSLATE entries may associate user or group names with numeric
ids to allow the reading system to remap the numeric ids. See below.
The writer is not obliged to write them and the reader is not obliged to
interpret them.
The ACL entries belong to the "access" ACL of a file object. An optional
SWITCH_MARK entry may direct further entries to the "default" ACL which
is defined for directory objects. The switching is controlled by the EXEC bit.
0 "access" ACL
1 "default" ACL
The bits for WRITE, READ, QUALIFIER shall be 0 with SWITCH_MARK.
The eventually needed qualifier is stored in one or more Qualifier Records.
[b] "BP 2 - Qualifier Record Head" shall be present only if QUALIFIER is set
to 1. It shall give the number of Qualifier Bytes and eventually
indicate that the qualifier continues in a Qualifier Record which comes
imediately after this record.
0 to 127 Q_LENGTH, the qualifier is complete by this record
128 to 255 Q_LENGTH+128, the qualifier is continued by next record
So a Qualifier Record can contain at most 127 Qualifier Bytes.
This field shall be recorded according to ISO 9660 Format section 7.1.1.
[c] "BP 3 to BP 2 + Q_LENGTH - Qualifier Bytes" shall be present only if
QUALIFIER is set to 1 and hold the announced number of bytes of the
user or group name.
| ENTRY FLAGS [ | QUALIFIER HEAD | QUALIFIER BYTES | ]
Example: From man 5 acl: u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r--
{ 'A', 'A', 28, 1, 0,
0, 0,
0, 19, 0x16,
0x2E, 4, 'l', 'i', 's', 'a',
0x34,
0x4E, 7, 't', 'o', 'o', 'l', 'i', 'e', 's',
0x54,
0x64 }
Example: An entry with very long qualifier u:His_Excellency_..._the_Boss:r--
0x2C, 255, 'H', 'i', 's', '_', 'E', 'x', 'c', 'e', 'l', 'e',
... 117 more bytes ...,
8, 't', 'h', 'e', '_', 'B', 'o', 's', 's',
Example: User number 71 in numerical form gets rwx
0xAF, 1, 71,
Group number 65534 gets r-x
0xCD, 2, 255, 254,
-------------------------------------------------------------------------------
About Names and Numeric Identifiers
It makes an important difference whether qualifiers are represented as names
or as id numbers. By storing names (and usually wasting space) it is possible
to control permissions in a way that is portable between uncoordinated
computers as long as the human readable user/group names are present on both
sides. POSIX File ID numbers make most sense in backups which shall be read
by the same system which wrote it.
Rock Ridge can only record POSIX File Ids but not user or group names.
The entry flag value 0x08 TRANSLATE is not a ACL entry of the hosting object
but rather a global hint about the relation of roles, names and numeric ids.
If it is recorded at all, then it shall be recorded with the first Directory
Entry of the volume's root directory. According to the description of SUSP
field ER, this has to be "dot" or (00). Other than with ER, a TRANSLATE entry
may not appear in the root of directory sub trees.
An interested reader shall examine the Arbitrary Attributes of this Directory
Entry in order to collect a translation table.
The advised translation is: PX or AA Id number -> name -> local id number.
The Qualifier Bytes of a TRANSLATE entry shall have the following format:
[i] "BP 0 - Role" shall tell whether it is about a user name (role 0) or
a group name (role 1). Other values are not allowed.
[ii] "BP 1 to BP 8 - Numeric Id" shall hold the 32 bit POSIX Id number of the
entry. This field shall be recorded according to ISO 9660:7.3.3.
[iii] "BP 9 to End Of Qualifier - Name" shall hold the name bytes of this
entry.
| ROLE | NUMERIC ID | NAME |
Example: User id number 1001 gets associated with user name "lisa"
0x08, 13, 0, 233,3,0,0, 0,0,3,233, 'l', 'i', 's', 'a',
-------------------------------------------------------------------------------
Specification of the ER System Use Entry Values for AAIP:
The Extension Version number for this version of AAIP shall be 1.
The Extension Identifier field shall be "AAIP_0002" with Identifier Length 9.
The mandatory content form of the Extension Descriptor is
"AA PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES IN ISO 9660 IMAGES"
with possibly two letters other than "AA" at the start of the string.
The Description Length is 81.
The reader of AAIP shall take the actual name of the AA field from BP 19 and
BP 20 of the ER field.
The recommended content of the Extension Source is
"PLEASE CONTACT THE LIBBURNIA PROJECT VIA LIBBURNIA-PROJECT.ORG".
The corresponding Source Length is 62.
-------------------------------------------------------------------------------
Model Relations:
Attribute List ------------- [1:0..1] ------------- ACL
[1:0..n] [1:0..n]
Arbitrary Attribute ( [1:0..1] ACL ) Entry
[1:2..2n] [1:0..1]
Component ( [1..m:1..n] AA Field ) Qualifier
[1:1..n] << one of >>
Component Record / \ \
[1..m:1..n] Translation Entry , Name , Numeric Id
AA Field | | |
[1:1..n] [1:1..n] [1:1]
\ | /
Qualifier Record
-------------------------------------------------------------------------------
Revoked drafts:
There was a draft AAIP 0.0 with ER signature "AAIP_2008A". It did not resemble
the existing field SL and therefore shall not be used by writers of ISO images.
-------------------------------------------------------------------------------
References:
ECMA-119 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
SUSP 1.12 ftp://ftp.ymi.com/pub/rockridge/susp112.ps
RRIP 1.12 ftp://ftp.ymi.com/pub/rockridge/rrip112.ps
(especially field SL)

View File

@ -6,7 +6,7 @@
*/
/* libburn wrappers for libisoburn
Copyright 2007 - 2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007 - 2010 Thomas Schmitt, <scdbackup@gmx.net>
*/
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo
@ -83,11 +83,11 @@ int isoburn_initialize(char msg[1024], int flag)
iso_lib_header_version_minor
iso_lib_header_version_micro
If the header is too old then the following code shall cause failure of
cdrskin compilation rather than to allow production of a program with
libisoburn compilation rather than to allow production of a program with
unpredictable bugs or memory corruption.
The compiler messages supposed to appear in this case are:
error: '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)
*/
/* The indendation is an advise of man gcc to help old compilers ignoring */
@ -103,7 +103,7 @@ int isoburn_initialize(char msg[1024], int flag)
#ifdef Isoburn_libisofs_dot_h_too_olD
LIBISOFS_MISCONFIGURATION = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_and_burn_wrap_dot_h = 0;
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h = 0;
LIBISOFS_MISCONFIGURATION_ = 0;
#endif
@ -265,6 +265,9 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
bit3= if the drive reports a -ROM profile then try to read
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
bit7= pretend -ROM and scan for table of content
*/
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag)
@ -273,6 +276,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
struct burn_multi_caps *caps= NULL;
struct isoburn_toc_entry *t;
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;
ret= burn_disc_get_profile(d, &profile, profile_name);
@ -281,8 +289,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
ret= burn_disc_get_multi_caps(d, BURN_WRITE_NONE, &caps, 0);
if(ret<0) /* == 0 is read-only media, but it is too early to reject it here */
goto ex;
if(ret==0)
if(ret==0 || (flag & 128))
readonly= 1;
if(flag & 128)
flag = (flag & ~ 16) | 8;
ret= isoburn_new(o, 0);
if(ret<=0)
goto ex;
@ -290,6 +301,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->msgs_submit= libisoburn_default_msgs_submit;
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
iso_image_set_ignore_aclea((*o)->image, (flag >> 5 ) & 3);
#ifdef Hardcoded_cd_rW
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
@ -297,8 +309,9 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->fabricated_disc_status= BURN_DISC_APPENDABLE;
#endif
if(caps->start_adr) { /* set emulation to overwriteable */
if(caps->start_adr)
(*o)->emulation_mode= 1;
if(caps->start_adr && !readonly) { /* set emulation to overwriteable */
ret= isoburn_is_intermediate_dvd_rw(d, 0);
if(ret>0) {
(*o)->min_start_byte= 0;
@ -314,30 +327,53 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->emulation_mode= -1;
goto ex;
}
if(!(flag & 16)) {
/* try to read emulated toc */
ret= isoburn_emulate_toc(d, 0);
if(ret<0) {
(*o)->emulation_mode= -1;
goto ex;
}
/* try to read emulated toc */
ret= isoburn_emulate_toc(d, flag & 16);
if(ret<0) {
(*o)->emulation_mode= -1;
goto ex;
}
}
} else {
/* >>> recognize unsuitable media (but allow read-only media) */;
if(readonly) {
/* This might be overwriteable media in a -ROM drive */
if((flag & 16)) {
ret= 0;
(*o)->fabricated_disc_status= BURN_DISC_FULL;
/* This might be overwriteable media in a -ROM drive.
Pitfall:
Multi-session media which bear a xorriso image for overwriteables
in their first session would get a TOC of that first image rather
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;
else if(ret > 0)
(*o)->emulation_mode= 1;
}
if(ret==0 && profile !=0x08 && (flag&8)) {
if(ret == 0 && (profile != 0x08 || (flag & 128)) && (flag & 8)) {
/* This might also be multi-session media which do not
get shown with a decent TOC.
CD-R TOC (profile 0x08) can be trusted. Others not.
@ -382,6 +418,9 @@ ex:
(depending on media type and drive state this might
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
bit7= pretend -ROM profile and scan for table of content
*/
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag)
@ -412,7 +451,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
goto ex;
drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag & 24) | !!(flag&2));
(flag & (8 | 16 | 32 | 64 | 128)) | !!(flag&2));
if(ret<=0)
goto ex;
@ -523,19 +562,26 @@ int isoburn_disc_erasable(struct burn_drive *d)
void isoburn_disc_erase(struct burn_drive *drive, int fast)
{
int ret;
int ret, do_pseudo_blank= 0;
struct isoburn *o;
enum burn_disc_status s;
char zero_buffer[Libisoburn_target_head_sizE];
struct burn_multi_caps *caps= NULL;
ret= isoburn_find_emulator(&o, drive, 0);
if(ret>0) {
if(o->emulation_mode==-1) {
/* To cause a negative reply with burn_drive_wrote_well() */
burn_drive_cancel(drive);
return;
goto ex;
}
if(o->emulation_mode>0) {
if(o->emulation_mode > 0) { /* might be readonly with emulated sessions */
ret= burn_disc_get_multi_caps(drive, BURN_WRITE_NONE, &caps, 0);
if(ret > 0 && caps->start_adr)
do_pseudo_blank= 1;
}
if(do_pseudo_blank) {
s= isoburn_disc_get_status(drive);
if(s==BURN_DISC_FULL) { /* unknown data format in first 64 kB */
memset(zero_buffer, 0, Libisoburn_target_head_sizE);
@ -546,10 +592,13 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast)
}
if(ret<=0)
burn_drive_cancel(drive); /* mark run as failure */
return;
goto ex;
}
}
burn_disc_erase(drive, fast);
ex:;
if(caps!=NULL)
burn_disc_free_multi_caps(&caps);
}
@ -1017,7 +1066,7 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
int *image_blocks, char *info, int flag)
{
unsigned char buffer[64*1024];
int ret, info_mode;
int ret, info_mode, capacity, role;
off_t data_count;
info_mode= flag&255;
@ -1025,8 +1074,19 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
if(flag&(1<<13)) {
memcpy(buffer, info, 64*1024);
} else {
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
role = burn_drive_get_drive_role(d);
ret = burn_get_read_capacity(d, &capacity, 0);
if (ret <= 0 && role == 2) {
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
capacity = 0x7ffffff0;
ret = 1;
}
if(ret > 0 && (off_t) capacity * (off_t) 2048 >= (off_t) (64 * 1024)) {
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
(off_t) 64*1024, &data_count, 2); /* no error messages */
} else
ret= 0;
if(ret<=0)
return(-1*!!(flag&(1<<15)));
if(info_mode==2)
@ -1049,13 +1109,14 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
int track_blocks, int flag)
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);
@ -1068,21 +1129,28 @@ int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
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
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
*/
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 scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
int with_enclosure= 0;
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa, role;
int with_enclosure= 0, readable_blocks= -1;
struct isoburn *o;
char msg[160], size_text[80], *sev;
char msg[160], size_text[80], *sev, volid[33], *volid_pt= NULL;
time_t start_time, last_pacifier, now;
/* is the media emulated multi-session ? */
@ -1094,6 +1162,18 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(o->emulation_mode<=0 && !(flag&1))
return(0);
ret= burn_get_read_capacity(d, &readable_blocks, 0);
if(ret <= 0) {
role = burn_drive_get_drive_role(d);
if (role == 2)
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
readable_blocks= 0x7ffffff0; /* try to read anyway */
else
readable_blocks= -1;
}
start_time= last_pacifier= time(NULL);
lba= 0;
if(!(flag&2)) {
@ -1102,6 +1182,10 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
{ret= 0; goto failure;}
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)) {
now= time(NULL);
@ -1115,7 +1199,7 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
session_count, size_text, (double) (now - start_time));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
}
read_flag= 0;
read_flag= 1;
if(flag&2)
read_flag|= (1<<15)|((session_count>0)<<14);
else {
@ -1133,8 +1217,11 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
probe_minus_16= 0;
}
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag);
if(ret<=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(flag&2) {
if(ret==0) {
@ -1152,7 +1239,7 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
if(with_enclosure) {
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL,0);
if(ret<=0)
goto failure;
}
@ -1164,7 +1251,14 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(ret==2) /* ISO header was found in first half block */
lba-= 16;
ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, 0);
if(readable_blocks >= 0 && lba + track_blocks > readable_blocks) {
sprintf(msg, "ISO image size %ds larger than readable size %ds",
lba + track_blocks, readable_blocks);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
track_blocks= readable_blocks - lba;
}
ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, volid_pt,
0);
if(ret<=0)
goto failure;
lba+= track_blocks;
@ -1196,8 +1290,14 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
failure:;
isoburn_toc_entry_destroy(&(o->toc), 1);
if(with_enclosure && o->emulation_mode == 1) {
if(readable_blocks >= 0 && image_size > readable_blocks) {
sprintf(msg, "ISO image size %ds larger than readable size %ds",
image_size, readable_blocks);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
image_size= readable_blocks;
}
session_count= 0;
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL, 0);
}
return(ret);
}
@ -1470,6 +1570,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)
{
if(d->disc!=NULL)
@ -1519,7 +1634,8 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag)
{
int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks;
int lba, best_lba, size, re_valid= 0;
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];
struct isoburn *o;
struct isoburn_toc_disc *disc= NULL;
@ -1536,6 +1652,7 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
if(o==NULL)
return(-1);
start_time= last_pacifier= time(NULL);
adr_num= atoi(adr_value);
if(adr_mode!=3 || (flag & 2)) {
disc= isoburn_toc_drive_get_disc(d);
@ -1609,10 +1726,24 @@ not_found:;
if(tracks==NULL)
continue;
for(j= 0; j<num_tracks; j++) {
isoburn_get_track_lba(tracks[0], &lba, 0);
ret= isoburn_read_iso_head(d, lba, &size, volid, 1);
if(ret<=0)
now= time(NULL);
if(now - last_pacifier >= 5 && track_count > 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;
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;
}
if(flag & 4) {
ret= regexec(&re, volid, 1, match, 0);
if(ret != 0)
@ -1636,6 +1767,13 @@ unknown_mode:;
}
ret= 1;
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)
isoburn_toc_disc_free(disc);
if((flag & 4) && re_valid)

View File

@ -1,7 +1,7 @@
/*
data source for libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
*/

View File

@ -6,7 +6,7 @@
/*
Class core of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
*/
@ -68,6 +68,7 @@ int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
o->track_no= 0;
o->start_lba= -1;
o->track_blocks= 0;
o->volid= NULL;
o->next= NULL;
if(boss!=NULL) {
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);
if(flag&1)
isoburn_toc_entry_destroy(&((*o)->next), flag);
if((*o)->volid != NULL)
free((*o)->volid);
free((char *) (*o));
*o= NULL;
return(1);
@ -353,17 +356,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
IsoWriteOpts *wopts= NULL;
enum burn_disc_status state;
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);
if(ret<0 || in_o==NULL)
@ -374,6 +372,13 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
/* early end will be registered as failure */
in_o->wrote_well= out_o->wrote_well= 0;
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;}
}
state = isoburn_disc_get_status(in_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
state != BURN_DISC_FULL) {
@ -404,6 +409,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_joliet(wopts, opts->joliet);
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_allow_deep_paths(wopts, opts->allow_deep_paths);
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
@ -416,7 +432,13 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
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_record_md5(wopts, opts->session_md5, opts->file_md5 & 3);
if(opts->scdbackup_tag_name[0] && opts->scdbackup_tag_time[0])
iso_write_opts_set_scdbackup_tag(wopts, opts->scdbackup_tag_name,
opts->scdbackup_tag_time,
opts->scdbackup_tag_written);
iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode,
opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
iso_write_opts_set_default_dir_mode(wopts, opts->dir_mode);
@ -468,6 +490,11 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
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 */
@ -629,6 +656,11 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o->norock= 0;
o->nojoliet= 0;
o->noiso1999= 1;
o->noaaip= 1;
o->noacl= 1;
o->noea= 1;
o->noino= 1;
o->nomd5= 1;
o->preferjoliet= 0;
o->uid= geteuid();
o->gid= getegid();
@ -662,6 +694,11 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
o->noiso1999= !!(ext&4);
o->preferjoliet= !!(ext&8);
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);
}
@ -669,7 +706,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)
{
*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);
}
@ -728,14 +767,28 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
}
int isoburn_igopt_get_in_charset(struct isoburn_read_opts *o,
char **input_charset)
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
char **input_charset)
{
*input_charset= o->input_charset;
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,
uint32_t *size, int *has_what)
{
@ -768,6 +821,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->rockridge= 1;
o->joliet= 0;
o->iso1999= 0;
o->hardlinks= 0;
o->aaip = 0;
o->omit_version_numbers= 0;
o->allow_deep_paths= 1;
o->allow_longer_paths= 0;
@ -779,6 +834,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
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->replace_dir_mode= 0;
o->replace_file_mode= 0;
@ -791,6 +847,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->output_charset= NULL;
o->fifo_size= 4*1024*1024;
o->effective_lba= -1;
o->data_start_lba= -1;
return(1);
}
@ -824,13 +881,19 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
o->rockridge= !!(ext&1);
o->joliet= !!(ext&2);
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);
}
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);
}
@ -848,6 +911,7 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
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);
}
@ -857,7 +921,9 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
((!!o->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);
}
@ -960,3 +1026,36 @@ 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);
}
int isoburn_igopt_set_scdbackup_tag(struct isoburn_imgen_opts *o, char *name,
char *timestamp, char *tag_written)
{
strncpy(o->scdbackup_tag_name, name, 80);
o->scdbackup_tag_name[80]= 0;
strncpy(o->scdbackup_tag_time, timestamp, 18);
o->scdbackup_tag_time[18]= 0;
o->scdbackup_tag_written = tag_written;
if(tag_written != NULL)
tag_written[0]= 0;
return(1);
}
int isoburn_igopt_get_scdbackup_tag(struct isoburn_imgen_opts *o,
char name[81], char timestamp[19],
char **tag_written)
{
strncpy(name, o->scdbackup_tag_name, 80);
name[80]= 0;
strncpy(timestamp, o->scdbackup_tag_time, 18);
timestamp[18]= 0;
*tag_written= o->scdbackup_tag_written;
return(1);
}

View File

@ -22,6 +22,8 @@ struct isoburn_toc_entry {
int start_lba;
int track_blocks;
char *volid; /* For caching a volume id from emulated toc on overwriteables */
struct isoburn_toc_entry *next;
};
@ -250,6 +252,18 @@ struct isoburn_read_opts {
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
/* ts A90121 */
unsigned int noaaip:1; /* Do not read AAIP for ACL and EA */
unsigned int noacl:1; /* Do not read ACL from external file objects */
unsigned int noea:1; /* Do not read XFS-style EA from externals */
/* ts A90508 */
unsigned int noino:1; /* Discard eventual PX inode numbers */
/* ts A90810 */
unsigned int nomd5:1; /* Do not read eventual MD5 array */
unsigned int preferjoliet:1;
/*< When both Joliet and RR extensions are present, the RR
* tree is used. If you prefer using Joliet, set this to 1. */
@ -264,6 +278,15 @@ struct isoburn_read_opts {
*/
char *input_charset;
/**
* Enable or disable methods to automatically choose an input charset.
* This eventually overrides input_charset.
*
* bit0= allow to set the input character set automatically from
* attribute "isofs.cs" of root directory
*/
int auto_input_charset;
/* modified by the function isoburn_read_image */
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
to 0 if not. */
@ -302,6 +325,20 @@ struct isoburn_imgen_opts {
unsigned int joliet :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 */
/*
@ -375,6 +412,13 @@ struct isoburn_imgen_opts {
*/
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;
/**< If files should be sorted based on their weight. */
@ -414,12 +458,35 @@ struct isoburn_imgen_opts {
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.
If <0 : Invalid
If >=0: Valid block number. Block size is always 2 KiB.
*/
int effective_lba;
/** Output value: Block address of data section start as predicted by
libisofs.
If < 16: Invalid
If >=16: Valid block number. Block size is always 2 KiB.
*/
int data_start_lba;
/**
* If not empty: Parameters "name" and "timestamp" for a scdbackup stream
* checksum tag. See scdbackup/README appendix VERIFY.
* It makes sense only for single session images which start at LBA 0.
* Such a tag may be part of a libisofs checksum tag block after the
* session tag line. It then covers the whole session up to its own start
* position.
* If scdbackup_tag_written is not NULL then it is a pointer to an
* application provided array with at least 512 characters. The effectively
* written scdbackup tag will be copied to this memory location.
*/
char scdbackup_tag_name[81];
char scdbackup_tag_time[19];
char *scdbackup_tag_written;
};

View File

@ -6,7 +6,7 @@
/*
libisofs related functions of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
*/
@ -166,6 +166,8 @@ create_blank_image:;
iso_image_ref(*image); /*protects object from premature free*/
}
}
iso_image_set_ignore_aclea(*image,
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
return 1;
}
@ -198,6 +200,11 @@ create_blank_image:;
/* Important: do not return until iso_read_opts_free() */
iso_read_opts_set_start_block(ropts, ms_block);
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
iso_read_opts_set_no_md5(ropts, read_opts->nomd5);
iso_read_opts_set_new_inos(ropts, read_opts->noino);
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
@ -206,10 +213,7 @@ create_blank_image:;
iso_read_opts_set_default_uid(ropts, read_opts->uid);
iso_read_opts_set_default_gid(ropts, read_opts->gid);
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
/* <<< experimental API call of libisofs
iso_read_opts_set_error_behavior(ropts, 1);
*/
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
ds = isoburn_data_source_new(d);
if(o->iso_data_source!=NULL)
@ -303,8 +307,8 @@ int isoburn_activate_session(struct burn_drive *drive)
*/
int isoburn_start_emulation(struct isoburn *o, int flag)
{
int ret, i;
off_t data_count;
int ret, i, capacity = -1, role;
off_t data_count, to_read;
struct burn_drive *drive;
struct ecma119_pri_vol_desc *pvm;
@ -317,13 +321,32 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
drive= o->drive;
/* we can assume 0 as start block for image */
/* TODO what about ms? where we validate valid iso image in ms disc? */
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
(off_t) Libisoburn_target_head_sizE, &data_count, 2);
/* an error means an empty disc */
if (ret <= 0) {
/* We can assume 0 as start block for image.
The data there point to the most recent session.
*/
role = burn_drive_get_drive_role(drive);
ret = burn_get_read_capacity(drive, &capacity, 0);
if (ret <= 0)
capacity = -1;
if (capacity > 0 || role == 2) {
/* Might be a block device on a system where libburn cannot determine its
size. Try to read anyway. */
memset(o->target_iso_head, 0, Libisoburn_target_head_sizE);
to_read = Libisoburn_target_head_sizE;
if(capacity > 0 && (off_t) capacity * (off_t) 2048 < to_read)
to_read = (off_t) capacity * (off_t) 2048;
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
to_read, &data_count, 2);
if (ret <= 0) {
/* an error means a disc with no ISO image */
if (capacity > 0)
o->fabricated_disc_status= BURN_DISC_FULL;
else
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
}
} else {
/* No read capacity means blank media */
o->fabricated_disc_status= BURN_DISC_BLANK;
return 1;
}

View File

@ -2,7 +2,7 @@
/*
API definition of libisoburn.
Copyright 2007-2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007-2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
*/
@ -124,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
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.
*/
@ -200,15 +216,15 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 12
#define isoburn_libisofs_req_micro 26
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@since 0.1.0
*/
#define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 5
#define isoburn_libburn_req_micro 9
#define isoburn_libburn_req_minor 7
#define isoburn_libburn_req_micro 6
/** The minimum version of libisofs to be used with this version of libisoburn
@ -243,8 +259,8 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
@since 0.1.0
*/
#define isoburn_header_version_major 0
#define isoburn_header_version_minor 3
#define isoburn_header_version_micro 1
#define isoburn_header_version_minor 4
#define isoburn_header_version_micro 8
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -367,10 +383,14 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
(depending on media type and drive this might
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
bit7= pretend read-only profile and scan for table of content
@return 1 = success , 0 = drive not found , <0 = other error
*/
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char* adr, int flag);
char* adr, int flag);
/** Aquire a drive from the burn_drive_info[] array which was obtained by
a previous call of burn_drive_scan().
@ -418,7 +438,7 @@ enum burn_disc_status isoburn_disc_get_status(struct burn_drive *drive);
/** Tells whether the media can be treated by isoburn_disc_erase().
Wrapper for: burn_disc_erasable()
@since 0.1.0
@param drive The drive to inquire.
@param d The drive to inquire.
@return 0=not erasable , else erasable
*/
int isoburn_disc_erasable(struct burn_drive *d);
@ -443,7 +463,7 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
of libisoburn and libisofs.
Note: Sessions and tracks are counted beginning with 1, not with 0.
@since 0.1.6
@param drive The drive where msc1 is to be set
@param d The drive where msc1 is to be set
@param adr_mode Determines how to interpret adr_value and to set msc1.
If adr_value shall represent a number then decimal ASCII
digits are expected.
@ -501,8 +521,8 @@ struct isoburn_toc_track;
isoburn_toc_disc_free() when no longer needed.
Wrapper for: burn_drive_get_disc()
@since 0.1.6
@param drive The drive with the media to inspect
@return NULL in case there is no content info, else it is a valid handle
@param d The drive with the media to inspect
@return NULL in case there is no content info, else it is a valid handle
*/
struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
@ -511,8 +531,8 @@ struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
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
@param disc The master handle of the media
@return number of blocks, <=0 indicates unknown or unreadable state
@param disc The master handle of the media
@return Number of blocks, <=0 indicates unknown or unreadable state
*/
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc);
@ -563,7 +583,7 @@ struct isoburn_toc_track **isoburn_toc_session_get_tracks(
/** Obtain a copy of the entry which describes a particular track.
Wrapper for: burn_track_get_entry()
@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
with info according to struct burn_toc_entry as defined
in libburn.h
@ -572,6 +592,23 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
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.
The handle is invalid afterwards and may not be used any more.
Wrapper for: burn_disc_free()
@ -585,7 +622,7 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
image header and obtain its alleged size. Depending on the info mode
one other string of text information can be retrieved too.
@since 0.1.6
@param drive The drive with the media to inspect
@param d The drive with the media to inspect
@param lba The block number from where to read
@param image_blocks The number of 2048 bytes blocks
@param info Caller provided memory, enough to take eventual info reply
@ -598,7 +635,7 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
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
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,
@ -609,7 +646,7 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
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 d 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.
@ -682,6 +719,30 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
tree is used. If you prefer using Joliet, set this to 1.
bit4= pretend_blank
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
*/
#define isoburn_ropt_norock 1
@ -689,6 +750,12 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
#define isoburn_ropt_noiso1999 4
#define isoburn_ropt_preferjoliet 8
#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_get_extensions(struct isoburn_read_opts *o, int *ext);
@ -729,7 +796,7 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
/** Set the character set for reading RR file names from ISO images.
@since 0.1.0
@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
name, e.g. as listed by program iconv -l.
Example: "UTF-8".
@ -740,6 +807,20 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
char **input_charset);
/**
Enable or disable methods to automatically choose an input charset.
This eventually overrides the name set via isoburn_ropt_set_input_charset()
@since 0.3.8
@param o The option set to work on
@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
available in the option set.
@ -764,6 +845,13 @@ int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
#define isoburn_ropt_has_joliet 2
#define isoburn_ropt_has_iso1999 4
#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,
uint32_t *size, int *has_what);
@ -831,11 +919,38 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
Weaker than RockRidge, but also readable with Linux.
bit2= iso1999
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
*/
#define isoburn_igopt_rockridge 1
#define isoburn_igopt_joliet 2
#define isoburn_igopt_iso1999 4
#define isoburn_igopt_rockridge 1
#define isoburn_igopt_joliet 2
#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_get_extensions(struct isoburn_imgen_opts *o, int *ext);
@ -890,6 +1005,12 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
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
*/
@ -904,6 +1025,7 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
#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_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
@ -1006,6 +1128,44 @@ 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);
/** 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);
/** Set resp. get parameters "name" and "timestamp" for a scdbackup checksum
tag. It will be appended to the libisofs session tag if the image starts at
LBA 0. See isoburn_disc_track_lba_nwa. The scdbackup tag can be used
to verify the image by command scdbackup_verify <device> -auto_end.
See scdbackup/README appendix VERIFY for its inner details.
@since 0.4.4
@param o The option set to work on
@param name The tag name. 80 characters max.
@param timestamp A string of up to 13 characters YYMMDD.hhmmss
A9 = 2009, B0 = 2010, B1 = 2011, ... C0 = 2020, ...
@param tag_written Either NULL or the address of an array with at least 512
characters. In the latter case the eventually produced
scdbackup tag will be copied to this array when the image
gets written. This call sets scdbackup_tag_written[0] = 0
to mark its preliminary invalidity.
@return 1 success, <=0 failure
*/
int isoburn_igopt_set_scdbackup_tag(struct isoburn_imgen_opts *o, char *name,
char *timestamp, char *tag_written);
int isoburn_igopt_get_scdbackup_tag(struct isoburn_imgen_opts *o,
char name[81], char timestamp[19],
char **tag_written);
/* ----------------------------------------------------------------------- */
/* End of Options for image generation */
/* ----------------------------------------------------------------------- */
@ -1140,7 +1300,7 @@ int isoburn_disc_track_lba_nwa(struct burn_drive *d, struct burn_write_opts *o,
overwriteable media. This value is supposed to be <= 2048 * nwa as of
isoburn_disc_track_lba_nwa().
@since 0.1.0
@param drive The drive holding the media.
@param d The drive holding the media.
@param start_byte The reply value counted in bytes, not in sectors.
@param flag Unused yet. Submit 0.
@return 1=stat_byte is valid, 0=not an emulated appendable, -1=error
@ -1230,9 +1390,10 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
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);
int isoburn_prepare_blind_grow(struct burn_drive *in_drive,
struct burn_disc **disc,
struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive, int nwa);
/**
@ -1313,7 +1474,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
@param d The output drive to which the session was written
@return 1 success , <=0 failure
*/
int isoburn_activate_session(struct burn_drive *drive);
int isoburn_activate_session(struct burn_drive *d);
/** Wait after normal end of operations until libisofs ended all write
@ -1362,6 +1523,6 @@ void isoburn_finish(void);
1 is emulated multi-session
-1 is not suitable for isoburn
*/
int isoburn_needs_emulation(struct burn_drive *drive);
int isoburn_needs_emulation(struct burn_drive *d);

View File

@ -1,283 +0,0 @@
/*
aaip-os-freebsd.c
Arbitrary Attribute Interchange Protocol , system adapter for getting and
setting of ACLs and XFS-style Extended Attributes.
To be included by aaip_0_2.c
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/acl.h>
/* ------------------------------ Getters --------------------------------- */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag)
{
acl_t acl= NULL;
if(flag & (1 << 15)) {
if(*text != NULL)
acl_free(text);
*text= NULL;
return(1);
}
*text= NULL;
/* Note: no ACL_TYPE_DEFAULT in FreeBSD */
if(flag & 1)
return(0);
acl= acl_get_file(path, ACL_TYPE_ACCESS);
if(acl == NULL)
return(-1);
*text= acl_to_text(acl, NULL);
acl_free(acl);
if(*text == NULL)
return(-1);
return(1);
}
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode().
Note: There are no Extended Attributes in FreeBSD. So only ACL will be
obtained.
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACL (access and eventually default)
bit1= use numeric ACL qualifiers rather than names
bit2= do not encode attributes other than ACL
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
int ret, retry= 0;
char *list= NULL;
ssize_t list_size= 0, i, num_names, value_ret;
size_t a_acl_len= 0, d_acl_len= 0, acl_len= 0;
unsigned char *a_acl= NULL, *d_acl= NULL, *acl= NULL;
char *acl_text= NULL;
if(flag & (1 << 15)) { /* Free memory */
if(*names != NULL)
list= (*names)[0];
{ret= 1; goto ex;}
}
*num_attrs= 0;
*names= NULL;
*value_lengths= NULL;
*values= NULL;
if(flag & 1)
num_names++;
if(num_names == 0)
{ret= 1; goto ex;}
(*names)= calloc(num_names, sizeof(char *));
(*value_lengths)= calloc(num_names, sizeof(size_t));
(*values)= calloc(num_names, sizeof(char *));
if(*names == NULL || *value_lengths == NULL || *values == NULL)
{ret= -1; goto ex;}
for(i= *num_attrs; i < num_names; i++)
(*names)[i]= NULL;
for(i= 0; i < num_names; i++) {
(*values)[i]= NULL;
(*value_lengths)[i]= 0;
}
if(flag & 1) { /* Obtain ACL */
/* access-ACL */
ret= aaip_get_acl_text(path, &acl_text, 0);
if(ret <= 0)
goto ex;
ret= aaip_encode_acl(acl_text, &a_acl_len, &a_acl, flag & 2);
if(ret <= 0)
goto ex;
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
/* Note: There are no default-ACL in FreeBSD */
/* Set as attribute with empty name */;
(*names)[*num_attrs]= strdup("");
if((*names)[*num_attrs] == NULL)
{ret= -1; goto ex;}
(*values)[*num_attrs]= (char *) acl;
(*value_lengths)[*num_attrs]= acl_len;
(*num_attrs)++;
}
ret= 1;
ex:;
if(a_acl != NULL)
free(a_acl);
if(d_acl != NULL)
free(d_acl);
if(acl_text != NULL)
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
if(ret <= 0 || (flag & (1 << 15))) {
if(list != NULL)
free(list);
if(*names != NULL)
free(*names);
*names= NULL;
if(*value_lengths != NULL)
free(*value_lengths);
*value_lengths= NULL;
if(*values != NULL) {
for(i= 0; i < *num_attrs; i++)
free((*values)[i]);
free(*values);
}
if(acl != NULL)
free(acl);
*values= NULL;
*num_attrs= 0;
}
return(ret);
}
/* ------------------------------ Setters --------------------------------- */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag)
{
int ret;
acl_t acl= NULL;
acl= acl_from_text(text);
if(acl == NULL) {
ret= -1; goto ex;
}
/* Note: no ACL_TYPE_DEFAULT in FreeBSD */
if(flag & 1)
{ret= 0; goto ex;}
ret= acl_set_file(path, ACL_TYPE_ACCESS, acl);
if(ret == -1)
goto ex;
ret= 1;
ex:
if(acl != NULL)
acl_free(acl);
return(ret);
}
/* Bring the given attributes and/or ACLs into effect with the given file.
Note: There are no Extended Attributes in FreeBSD. So only ACL get set.
@param flag Bitfield for control purposes
bit0= decode and set ACLs
( bit1= first clear all existing attributes of the file )
( bit2= do not set attributes other than ACLs )
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
( -4 error with setting attribute )
( -5 error with deleting attribute )
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
int ret, has_default_acl= 0;
size_t i, consumed, acl_text_fill, list_size= 0;
char *acl_text= NULL, *list= NULL;
for(i= 0; i < num_attrs; i++) {
if(names[i] == NULL || values[i] == NULL)
continue;
if(names[i][0] == 0) { /* Decode ACLs */
/* access ACL */
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
has_default_acl= (ret == 2);
ret= aaip_set_acl_text(path, acl_text, 0);
if(ret <= 0)
{ret= -3; goto ex;}
if(has_default_acl) {
free(acl_text);
acl_text= NULL;
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
ret= aaip_set_acl_text(path, acl_text, 1);
if(ret <= 0)
{ret= -3; goto ex;}
}
}
}
ret= 1;
ex:;
if(acl_text != NULL)
free(acl_text);
if(list != NULL)
free(list);
return(ret);
}

View File

@ -1,371 +0,0 @@
/*
aaip-os-linux.c
Arbitrary Attribute Interchange Protocol , system adapter for getting and
setting of ACLs and XFS-style Extended Attributes.
To be included by aaip_0_2.c
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/acl.h>
#include <attr/xattr.h>
#define Aaip_acl_attrnamE "system.posix_acl_access"
/* ------------------------------ Getters --------------------------------- */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag)
{
acl_t acl= NULL;
if(flag & (1 << 15)) {
if(*text != NULL)
acl_free(text);
*text= NULL;
return(1);
}
*text= NULL;
acl= acl_get_file(path, (flag & 1) ? ACL_TYPE_DEFAULT : ACL_TYPE_ACCESS);
if(acl == NULL)
return(-1);
*text= acl_to_text(acl, NULL);
acl_free(acl);
if(*text == NULL)
return(-1);
return(1);
}
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode().
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACL (access and eventually default)
bit1= use numeric ACL qualifiers rather than names
bit2= do not obtain attributes other than ACL
bit3= do not ignore eventual local ACL attribute
(e.g. system.posix_acl_access)
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
int ret, retry= 0;
char *list= NULL;
ssize_t list_size= 0, i, num_names= 0, value_ret;
size_t a_acl_len= 0, d_acl_len= 0, acl_len= 0;
unsigned char *a_acl= NULL, *d_acl= NULL, *acl= NULL;
char *acl_text= NULL;
if(flag & (1 << 15)) { /* Free memory */
if(*names != NULL)
list= (*names)[0];
{ret= 1; goto ex;}
}
*num_attrs= 0;
*names= NULL;
*value_lengths= NULL;
*values= NULL;
/* Set up arrays */
if(!(flag & 4)) { /* Get xattr names */
list_size= listxattr(path, list, 0);
if(list_size == -1)
{ret= -1; goto ex;}
list= calloc(list_size, 1);
if(list == NULL)
{ret= -1; goto ex;}
list_size= listxattr(path, list, list_size);
if(list_size == -1)
{ret= -1; goto ex;}
for(i= 0; i < list_size; i+= strlen(list + i) + 1)
num_names++;
}
if(flag & 1)
num_names++;
if(num_names == 0)
{ret= 1; goto ex;}
(*names)= calloc(num_names, sizeof(char *));
(*value_lengths)= calloc(num_names, sizeof(size_t));
(*values)= calloc(num_names, sizeof(char *));
if(*names == NULL || *value_lengths == NULL || *values == NULL)
{ret= -1; goto ex;}
if(!(flag & 4))
for(i= 0; i < list_size && num_names > *num_attrs;
i+= strlen(list + i) + 1) {
if(!(flag & 8))
if(strcmp(list + i, Aaip_acl_attrnamE) == 0)
continue;
(*names)[(*num_attrs)++]= list + i;
}
for(i= *num_attrs; i < num_names; i++)
(*names)[i]= NULL;
for(i= 0; i < num_names; i++) {
(*values)[i]= NULL;
(*value_lengths)[i]= 0;
}
if(!(flag & 4)) { /* Get xattr values */
for(i= 0; i < *num_attrs; i++) {
if(!(flag & 8))
if(strcmp((*names)[i], Aaip_acl_attrnamE) == 0)
continue;
value_ret= getxattr(path, (*names)[i], NULL, 0);
if(value_ret == -1)
continue;
(*values)[i]= calloc(value_ret + 1, 1);
if((*values)[i] == NULL)
{ret= -1; goto ex;}
(*value_lengths)[i]= getxattr(path, (*names)[i], (*values)[i], value_ret);
if(value_ret == -1) { /* there could be a race condition */
if(retry++ > 5)
{ret= -1; goto ex;}
i--;
continue;
}
(*value_lengths)[i]= value_ret;
retry= 0;
}
}
if(flag & 1) { /* Obtain ACL */
/* access-ACL */
ret= aaip_get_acl_text(path, &acl_text, 0);
if(ret <= 0)
goto ex;
ret= aaip_encode_acl(acl_text, &a_acl_len, &a_acl, flag & 2);
if(ret <= 0)
goto ex;
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
/* eventually default-ACL */
ret= aaip_get_acl_text(path, &acl_text, 1);
if(ret > 0) {
/* encode and append to a_acl */;
ret= aaip_encode_acl(acl_text, &d_acl_len, &d_acl, (flag & 2) | 4);
if(ret <= 0)
goto ex;
acl= calloc(a_acl_len + d_acl_len + 1, 1);
if(acl == NULL)
{ret= -1; goto ex;}
if(a_acl_len)
memcpy(acl, a_acl, a_acl_len);
if(d_acl_len)
memcpy(acl + a_acl_len, d_acl, d_acl_len);
acl_len= a_acl_len + d_acl_len;
} else {
acl= a_acl;
a_acl= NULL;
acl_len= a_acl_len;
}
/* Set as attribute with empty name */;
(*names)[*num_attrs]= strdup("");
if((*names)[*num_attrs] == NULL)
{ret= -1; goto ex;}
(*values)[*num_attrs]= (char *) acl;
(*value_lengths)[*num_attrs]= acl_len;
(*num_attrs)++;
}
ret= 1;
ex:;
if(a_acl != NULL)
free(a_acl);
if(d_acl != NULL)
free(d_acl);
if(acl_text != NULL)
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
if(ret <= 0 || (flag & (1 << 15))) {
if(list != NULL)
free(list);
if(*names != NULL)
free(*names);
*names= NULL;
if(*value_lengths != NULL)
free(*value_lengths);
*value_lengths= NULL;
if(*values != NULL) {
for(i= 0; i < *num_attrs; i++)
free((*values)[i]);
free(*values);
}
if(acl != NULL)
free(acl);
*values= NULL;
*num_attrs= 0;
}
return(ret);
}
/* ------------------------------ Setters --------------------------------- */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag)
{
int ret;
acl_t acl= NULL;
acl= acl_from_text(text);
if(acl == NULL) {
ret= -1; goto ex;
}
ret= acl_set_file(path, (flag & 1) ? ACL_TYPE_DEFAULT : ACL_TYPE_ACCESS, acl);
if(ret == -1)
goto ex;
ret= 1;
ex:
if(acl != NULL)
acl_free(acl);
return(ret);
}
/* Bring the given attributes and/or ACLs into effect with the given file.
@param flag Bitfield for control purposes
bit0= decode and set ACLs
bit1= first clear all existing attributes of the file
bit2= do not set attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
-4 error with setting attribute
-5 error with deleting attributes
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
int ret, has_default_acl= 0;
size_t i, consumed, acl_text_fill, list_size= 0, acl_idx= 0;
char *acl_text= NULL, *list= NULL;
if(flag & 2) /* Delete all file attributes */
list_size= listxattr(path, list, 0);
if(list_size > 0) { /* Delete all file attributes */
list= calloc(list_size, 1);
if(list == NULL)
{ret= -5; goto ex;}
list_size= listxattr(path, list, list_size);
if(list_size == -1)
{ret= -5; goto ex;}
for(i= 0; i < list_size; i+= strlen(list + i) + 1) {
if(!(flag & 8))
if(strcmp(list + i, Aaip_acl_attrnamE) == 0)
continue;
ret= removexattr(path, list + i);
if(ret == -1)
{ret= -5; goto ex;}
}
free(list); list= NULL;
}
for(i= 0; i < num_attrs; i++) {
if(names[i] == NULL || values[i] == NULL)
continue;
if(names[i][0] == 0) { /* ACLs */
if(flag & 1)
acl_idx= i + 1;
continue;
}
/* Extended Attribute */
if((flag & 1) && !(flag & 8))
if(strcmp(names[i], Aaip_acl_attrnamE) == 0)
continue;
ret= setxattr(path, names[i], values[i], value_lengths[i], 0);
if(ret == -1)
{ret= -4; goto ex;}
}
/* Decode ACLs */
if(acl_idx == 0)
{ret= 1; goto ex;}
i= acl_idx - 1;
/* "access" ACL */
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
has_default_acl= (ret == 2);
ret= aaip_set_acl_text(path, acl_text, 0);
if(ret <= 0)
{ret= -3; goto ex;}
/* "default" ACL */
if(has_default_acl) {
free(acl_text);
acl_text= NULL;
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
ret= aaip_set_acl_text(path, acl_text, 1);
if(ret <= 0)
{ret= -3; goto ex;}
}
ret= 1;
ex:;
if(acl_text != NULL)
free(acl_text);
if(list != NULL)
free(list);
return(ret);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,381 +0,0 @@
/*
Arbitrary Attribute Interchange Protocol , AAIP version 0.2
Demonstration program for encoding and decoding EA and ACL.
See http://libburnia-project.org/wiki/AAIP
or doc/susp_aaip_0_2.txt
test/aaip_0.2.h - Public declarations
*/
#ifndef Aaip_h_is_includeD
#define Aaip_h_is_includeD yes
/* --------------------------------- Encoder ---------------------------- */
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
@param aa_name The 2 byte SUSP Signature Word of the fields
@param num_attrs Number of attributes
@param names Array of pointers to 0 terminated name strings
@param value_lengths Array of byte lengths for each value
@param values Array of pointers to the value bytes
@param result_len Number of bytes in the resulting SUSP field string
@param result *result will point to the start of the result string.
This is malloc() memory which needs to be freed when
no longer needed
@param flag Bitfield for control purposes
bit0= set CONTINUE bit of last AA field to 1
@return >0 is the number of SUSP fields generated,
0 means error
*/
unsigned int aaip_encode(char aa_name[2],
unsigned int num_attrs, char **names,
size_t *value_lengths, char **values,
size_t *result_len, unsigned char **result, int flag);
/* ------ ACL representation ------ */
/* Convert an ACL from long text form into the value of an Arbitrary
Attribute. According to AAIP 0.2 this value is to be stored together with
an empty name.
@param acl_text The ACL in long text form
@param result_len Number of bytes in the resulting value
@param result *result will point to the start of the result string.
This is malloc() memory which needs to be freed when
no longer needed
@param flag Bitfield for control purposes
bit0= count only
bit1= use numeric qualifiers rather than names
@return >0 means ok
0 means error
*/
int aaip_encode_acl(char *acl_text,
size_t *result_len, unsigned char **result, int flag);
/* ------ OS interface ------ */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag);
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode(). The returned data objects finally have
to be freed by a call with flag bit 15.
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACLs (access and eventually default) via
system ACL API and encode
bit1= use numeric ACL qualifiers rather than names
bit2= do not obtain attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag);
/* --------------------------------- Decoder ---------------------------- */
/*
The AAIP decoder offers several levels of abstraction of which the
lower two avoid the use of dynamic memory. It provides a stateful decoding
context with a small buffer which delivers results to caller provided
memory locations.
The lowest level is the stream-like Component Level Interface. It allows
to decode very many very long attributes.
Next is the Pair Level Interface which delivers to fixly sized storage for
name and value. It allows to decode very many attributes.
The List Level Interface uses dynamic memory allocation to provide arrays
of names, values and value lengths. It is intended for moderately sized
attribute lists but may also be used as alternative to Pair Level.
*/
/* The AAIP decoder context.
*/
struct aaip_state;
/* Obtain the size in bytes of an aaip_state object.
*/
size_t aaip_sizeof_aaip_state(void);
/* Initialize a AAIP decoder context.
This has to be done before the first AA field of a node is processed.
The caller has to provide the storage of the struct aaip_state.
@param aaip The AAIP decoder context to be initialized
@param aa_name The Signature Word (advised is "AA")
@param flag Bitfield for control purposes
submit 0
@return <=0 error , >0 ok
*/
int aaip_init_aaip_state(struct aaip_state *aaip, char aa_name[2], int flag);
/* ------------------------- Component Level Interface ------------------- */
/*
Provides support for unlimited component size but demands the caller
to have a growing storage facility resp. to do own oversize handling.
This interface expects moderatly sized input pieces and will hand out
moderately sized result pieces. The number of transactions is virtually
unlimited.
*/
/* Submit small data chunk for decoding.
The return value will tell whether data are pending for being fetched.
@param aaip The AAIP decoder context
@param data Not more than 2048 bytes input for the decoder
@param num_data Number of bytes in data
0 inquires the buffer status avoiding replies <= 0
@param ready_bytes Number of decoded bytes ready for delivery
@param flag Bitfield for control purposes
@return -1= non-AA field detected
*ready_bytes gives number of consumed bytes in data
0= cannot accept data because buffer full
1= no component record complete, submit more data
2= component record complete, may be delivered
3= component complete, may be delivered
4= no component available, no more data expected, done
*/
int aaip_submit_data(struct aaip_state *aaip,
unsigned char *data, size_t num_data,
size_t *ready_bytes, int flag);
/* Fetch the available part of current component.
The return value will tell whether it belongs to name or to value and
whether that name or value is completed now.
@param aaip The AAIP decoder context
@param result Has to point to storage for the component data
@param result_size Gives the amount of provided result storage
@param num_result Will tell the number of fetched result bytes
@param flag Bitfield for control purposes
bit0= discard data rather than copying to result
@return -2 = insufficient result_size
-1 = no data ready for delivery
0 = result holds the final part of a name
1 = result holds an intermediate part of a name
2 = result holds the final part of a value
3 = result holds an intermediate part of a value
*/
int aaip_fetch_data(struct aaip_state *aaip,
char *result, size_t result_size, size_t *num_result,
int flag);
/* Skip the current component and eventually the following value component.
This has to be called if fetching of a component shall be aborted
but the next component resp. pair shall be fetchable again.
aaip_submit_data() will not indicate readiness for fetching until all
bytes of the skipped components are submitted. Those bytes get discarded.
@param aaip The AAIP decoder context
@param flag Bitfield for control purposes
bit0= do not skip value if current component is name
@return <=0 error , 1= now in skip state, 2= not in skip state
*/
int aaip_skip_component(struct aaip_state *aaip, int flag);
/* ------------------------- Pair Level Interface ------------------------ */
/*
Provides support for names and values of limited size. The limits are
given by the caller who has to provide the storage for name and value.
This interface expects moderatly sized input pieces.
The number of input transcations is virtually unlimited.
The number of pair transactions after aaip_init() should be limited
to 4 billion.
*/
/* Accept raw input data and collect a pair of name and value.
The return value will indicate whether the pair is complete, whether more
pairs are complete or whether more data are desired. No input data will be
accepted as long as complete pairs are pending. The end of the attribute
list will be indicated.
@param aaip The AAIP decoder context
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param name Buffer to build the name string
@param name_size Maximum number of bytes in name
@param name_fill Holds the current buffer fill of name
@param value Buffer to build the value string
@param value_size Maximum number of bytes in value
@param value_fill Holds the current buffer fill of value
@param flag Bitfield for control purposes - submit 0 for now
@return <0 error
0 data not accepted, first fetch pending pairs with num_data == 0
1 name and value are not valid yet, submit more data
2 name and value are valid, submit more data
3 name and value are valid, pairs pending, fetch with num_data == 0
4 name and value are valid, no more data expected
5 name and value are not valid, no more data expected
*/
int aaip_decode_pair(struct aaip_state *aaip,
unsigned char *data, size_t num_data, size_t *consumed,
char *name, size_t name_size, size_t *name_fill,
char *value, size_t value_size, size_t *value_fill,
int flag);
/* Inquire the number of pairs which were skipped because being oversized.
@param aaip The AAIP decoder context
@param flag Bitfield for control purposes - submit 0 for now
@return The number of pairs skipped since aaip_init()
*/
unsigned int aaip_get_pairs_skipped(struct aaip_state *aaip, int flag);
/* ------------------------- List Level Interface ------------------------ */
/*
Provides support for names and values of limited size. The limits are
given for total memory consumption and for number of attributes.
Iterated decoding is supported as long as no single attribute exceeds
the memory limit.
*/
/* Accept raw input data and collect arrays of name pointers, value lengths
and value pointers. A handle object will emerge which finally has to be
be freed by a call with bit 15.
@param handle The decoding context.
It will be created by this call with flag bit 0 or if
*handle == NULL. This handle has to be the same as long
as decoding goes on and finally has to be freed by a
call with bit15.
@param aa_name The Signature Word (advised is "AA")
@param memory_limit Maximum number of bytes to allocate
@param num_attr_limit Maximum number of name-value pairs to allocate
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param flag Bitfield for control purposes
bit0= this is the first call for a file object
bit15= end decoding :
Free handle and its intermediate list memory.
@return <=0 error
1 not complete yet, submit more data
2 arrays are complete, call aaip_get_decoded_attrs()
3 limit exceeded, not complete yet, call with bit15 and give up
4 limit exceeded, call aaip_get_decoded_attrs() and try again
*/
int aaip_decode_attrs(struct aaip_state **handle, char aa_name[2],
size_t memory_limit, size_t num_attr_limit,
unsigned char *data, size_t num_data, size_t *consumed,
int flag);
/* Obtain the resulting attributes when aaip_decode_attrs() indicates to
be done or to have the maximum possible amount of result ready.
The returned data objects get detached from handle making it ready for
the next round of decoding with possibly a different input source. The
returned data objects finally have to be freed by a call with flag bit 15.
@param handle The decoding context created by aaip_decode_attrs()
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit15= free memory of names, value_lengths, values
*/
int aaip_get_decoded_attrs(struct aaip_state **handle, size_t *num_attrs,
char ***names, size_t **value_lengths, char ***values,
int flag);
/* ------ ACL representation ------ */
/* Convert an AAIP 0.2 ACL attribute value into the long text form of ACL.
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param acl_text Will be filled with ACL long text form
@param acl_text_size Maximum number of bytes to be written to acl_text
@param acl_text_fill Will return the number of bytes in acl_text
@param flag Bitfield for control purposes
bit0= count only, do not really produce bytes:
acl_text will not be touched,
acl_text_size will be ignored,
*acl_text_fill will return the counted number
bit1= expected is a default ACL (see return value 2)
@return 1 success
2 success, begin of default/access ACL encountered,
submit data + *consumed for access/default ACL
-1 error with reading of qualifier
-2 error with writing of ACL text line
-3 version mismatch
-4 unknown tag type encountered
*/
int aaip_decode_acl(unsigned char *data, size_t num_data, size_t *consumed,
char *acl_text, size_t acl_text_size,
size_t *acl_text_fill, int flag);
/* ------ OS interface ------ */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag);
/* Bring the given attributes and/or ACLs into effect with the given file.
@param path Path to the file
@param num_attrs Number of attributes
@param names Array of pointers to 0 terminated name strings
@param value_lengths Array of byte lengths for each attribute payload
@param values Array of pointers to the attribute payload bytes
@param flag Bitfield for control purposes
bit0= decode and set ACLs
bit1= first clear all existing attributes of the file
bit2= do not set attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
-4 error with setting attribute
-5 error with deleting attributes
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag);
#endif /* ! Aaip_h_is_includeD */

View File

@ -1,443 +0,0 @@
/*
Arbitrary Attribute Interchange Protocol , AAIP version 0.2
Demonstration program for encoding and decoding EA and ACL.
See http://libburnia-project.org/wiki/AAIP
test/aaip_0_2_test.c - Main program for test binary
Compile:
cc -g -Wall -o test/aaip test/aaip_0_2.c test/aaip_0_2_test.c -lacl
Usage: ./aaip name value
Long parameters ./aaip -name"x100" -value"x100"
>>> ACLs
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/acl.h>
#include "aaip_0_2.h"
#define Aaip_test_name_sizE 1024
#define Aaip_test_value_sizE 1024
static int print_result(unsigned char *result, size_t result_len, int flag)
{
int i;
printf(
" - - - - - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9\n");
printf("\n");
printf("%4u : ", 0);
for(i= 0; i < result_len; i++) {
if(result[i] >= 32 && result[i] <= 126)
printf("'%c' ", result[i]);
else
printf("%3u ", (unsigned int) ((unsigned char *) result)[i]);
if((i % 10) == 9)
printf("\n%4u : ", (unsigned int) (i + 1));
}
printf("\n\n");
printf(
" - - - - - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9\n");
printf("\n");
return(1);
}
static int print_attrs(size_t num_attrs, char **names, size_t *value_lengths,
char **values, int flag)
{
size_t i, j;
for(i= 0; i < num_attrs; i++) {
printf("name='");
for(j= 0; names[i][j] != 0; j++) {
if(names[i][j] >= 32 && names[i][j] <= 126 &&
names[i][j] != '\\' && names[i][j] != '\'')
printf("%c", names[i][j]);
else
printf("\\%o", (unsigned int) ((unsigned char **) names)[i][j]);
}
printf("' (%d)\n", (int) j);
printf("value='");
for(j= 0; j < value_lengths[i]; j++) {
if(values[i][j] >= 32 && values[i][j] <= 126 &&
values[i][j] != '\\' && values[i][j] != '\'')
printf("%c", values[i][j]);
else
printf("\\%3.3o", (unsigned int) ((unsigned char **) values)[i][j]);
}
printf("' (%d)\n\n", (int) j);
}
return(1);
}
static int do_touch(char *path, int flag)
{
FILE *fp;
fp= fopen(path, "a");
if(fp == NULL) {
fprintf(stderr, "fopen(\"%s\") failed: %d %s\n",
path, errno, errno != 0 ? strerror(errno) : "");
return(0);
}
fclose(fp);
return(1);
}
static int decode_acl(unsigned char *result, size_t result_len,
char *out_path, int flag)
{
int ret;
size_t consumed, text_fill;
char *text= NULL;
ret= aaip_decode_acl(result, result_len, &consumed, NULL, 0, &text_fill, 1);
if(ret <= 0) {
fprintf(stderr, "aaip_decode_acl(,1) failed: ret= %d\n", ret);
ret= 0; goto ex;
}
text= calloc(text_fill, 1);
ret= aaip_decode_acl(result, result_len, &consumed, text, text_fill,
&text_fill, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_decode_acl(,0) failed: ret= %d\n", ret);
ret= 0; goto ex;
}
printf("--- ret= %d , text=\n%s--- end of text\n\n", ret, text);
if(out_path == NULL)
{ret= 1; goto ex;}
ret= do_touch(out_path, 0);
if(ret <= 0)
goto ex;
ret= aaip_set_acl_text(out_path, text, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_set_acl_text() failed");
if(ret == -1)
fprintf(stderr, ": %d %s\n", errno, errno != 0 ? strerror(errno) : "");
else
fprintf(stderr, "\n");
ret= 0; goto ex;
}
ret= 1;
ex:
if(text != NULL)
free(text);
return(ret);
}
static int test_acl(char *in_path, char *out_path, int flag)
{
int ret;
char *acl_text= NULL;
unsigned char *result= NULL;
size_t result_len;
ret= aaip_get_acl_text(in_path, &acl_text, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_get_acl_text() failed");
if(ret == -1)
fprintf(stderr, ": %d %s\n", errno, errno != 0 ? strerror(errno) : "");
else
fprintf(stderr, "\n");
ret= 6; goto ex;
}
printf("--- ACL:\n%s--- end of ACL\n\n", acl_text);
ret= aaip_encode_acl(acl_text, &result_len, &result, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_encode_acl(text) failed: ret= %d\n", ret);
ret= 7; goto ex;
}
print_result(result, result_len, 0);
ret= decode_acl(result, result_len, out_path, 0);
if(ret <= 0)
{ret= 8; goto ex;}
free(result); result= NULL;
ret= aaip_encode_acl(acl_text, &result_len, &result, 2);
if(ret <= 0) {
fprintf(stderr, "aaip_encode_acl(num) failed: ret= %d\n", ret);
ret= 9; goto ex;
}
print_result(result, result_len, 0);
ret= decode_acl(result, result_len, out_path, 0);
if(ret <= 0)
{ret= 10; goto ex;}
ret= 0;
ex:;
aaip_get_acl_text("", &acl_text, 1 << 15);
if(result != NULL)
free(result);
return(ret);
}
int synthetic_pairs(char *prog, int argc, char **argv, int flag)
{
int ret, l, mult= 0, k;
size_t result_len, i;
unsigned char *result= NULL;
char **names= NULL, **values= NULL, *cpt, **param;
size_t *value_lengths= NULL;
struct aaip_state *aaip;
size_t consumed= 0;
char name[Aaip_test_name_sizE + 1];
size_t name_fill;
char value[Aaip_test_value_sizE + 1];
size_t value_fill;
size_t todo;
int submit_data, is_done;
unsigned char *rpt;
unsigned int skipped, was_skipped= 0;
aaip= (struct aaip_state *) calloc(aaip_sizeof_aaip_state(), 1);
names= calloc(sizeof(char *), argc / 2);
values= calloc(sizeof(char *), argc / 2);
value_lengths= calloc(sizeof(size_t), argc / 2);
for(i= 0; i < argc; i++) {
if(i % 2)
param= values + i / 2;
else
param= names + i / 2;
(*param)= argv[i];
if(argv[i][0] == '-') {
cpt= strchr(argv[i], 'x');
if(cpt != NULL) {
l= cpt - argv[i] - 1;
if(l > 0)
sscanf(cpt + 1, "%d", &mult);
if(l > 0 && mult > 0) {
(*param)= calloc(1, l * mult + 1);
if((*param) != NULL) {
for(k= 0; k < mult; k++)
memcpy((*param) + k * l, argv[i] + 1, l);
(*param)[mult * l]= 0;
} else
(*param)= argv[i];
}
}
}
if(i % 2)
value_lengths[i / 2]= strlen(values[i / 2]);
}
ret= aaip_encode("AA", (unsigned int) (argc / 2), names,
value_lengths, values,
&result_len, &result, 0);
if(ret <= 0) {
fprintf(stderr, "%s : aaip_encode failed with ret= %d\n", prog, ret);
return(2);
}
print_result(result, result_len, 0);
aaip_init_aaip_state(aaip, "AA", 0);
rpt= result;
submit_data= 1;
is_done= 0;
while(!is_done) {
if(submit_data) {
todo= result_len - (rpt - result);
if(todo > 2048)
todo= 2048;
if(todo == 0) {
fprintf(stderr, "%s : Out of data while still prompted to submit\n",
prog);
return(5);
}
} else
todo= 0;
ret= aaip_decode_pair(aaip, rpt, todo, &consumed,
name, Aaip_test_name_sizE, &name_fill,
value, Aaip_test_value_sizE, &value_fill, 0);
skipped= aaip_get_pairs_skipped(aaip, 0);
if(skipped > was_skipped) {
printf("- skipped %d pair%s -\n\n", skipped - was_skipped,
skipped - was_skipped > 1 ? "s" : "");
was_skipped= skipped;
}
if(ret < 0) {
fprintf(stderr, "%s : aaip_decode_pair failed with ret= %d\n", prog, ret);
return(3);
}
rpt+= todo;
if(ret == 0) {
rpt-= todo;
submit_data= 0;
continue;
} else if(ret == 1) {
submit_data= 1;
continue;
} else if(ret == 2) {
submit_data= 1;
} else if(ret == 3) {
submit_data= 0;
} else if(ret == 4) {
is_done= 1;
} else if(ret == 5) {
is_done= 1;
break;
} else {
fprintf(stderr, "%s : Unknown return %d from aaip_decode_pair()\n",
prog, ret);
return(4);
}
name[name_fill]= 0;
value[value_fill]= 0;
if((name_fill < 1000 && value_fill < 1000)) {
printf("name = '%s' (%lu)\n", name, (unsigned long) name_fill);
printf("value= '%s' (%lu)\n", value, (unsigned long) value_fill);
} else {
printf("name = (%lu)\n", (unsigned long) name_fill);
printf("value= (%lu)\n", (unsigned long) value_fill);
}
printf("\n");
}
return(0);
}
/*
@param flag bit0= use numeric qualifiers
*/
static int copy_all(char *in_path, char *out_path, int flag)
{
int ret;
struct aaip_state *aaip= NULL;
size_t in_num_attrs, *in_value_lengths= NULL;
char **in_names= NULL, **in_values= NULL;
int is_done= 0, first_round= 1;
unsigned char *result= NULL, *rpt;
size_t result_len, todo, consumed;
size_t out_num_attrs, *out_value_lengths= NULL;
char **out_names= NULL, **out_values= NULL;
ret= aaip_get_attr_list(in_path, &in_num_attrs, &in_names, &in_value_lengths,
&in_values, 1 | ((flag & 1) << 1));
if(ret <= 0)
{ret= 11; goto ex;}
print_attrs(in_num_attrs, in_names, in_value_lengths, in_values, 0);
ret= aaip_encode("AA", (unsigned int) in_num_attrs, in_names,
in_value_lengths, in_values, &result_len, &result, 0);
if(ret == 0)
{ret= 12; goto ex;}
if(result_len <= 0) {
fprintf(stderr, "No result\n");
ret= 13; goto ex;
}
print_result(result, result_len, 0);
rpt= result;
while(!is_done) {
todo= result_len - (rpt - result);
if(todo > 2048)
todo= 2048;
if(todo == 0) {
fprintf(stderr, "Out of data while still prompted to submit\n");
ret= 14; goto ex;
}
/* Allow 1 million bytes of memory consumption, 100,000 attributes */
ret= aaip_decode_attrs(&aaip, "AA", (size_t) 1000000, (size_t) 100000,
rpt, todo, &consumed, first_round);
rpt+= consumed;
first_round= 0;
if(ret == 1)
continue;
if(ret == 2)
break;
fprintf(stderr, "aaip_decode_attrs() returns %d\n", ret);
ret= 15; goto ex;
}
if(rpt - result != result_len) {
fprintf(stderr, "aaip_decode_attrs() returns 2 but %d bytes are left\n",
(int) (result_len - (rpt - result)));
ret= 16; goto ex;
}
ret= aaip_get_decoded_attrs(&aaip, &out_num_attrs, &out_names,
&out_value_lengths, &out_values, 0);
if(ret != 1) {
fprintf(stderr, "aaip_get_decoded_attrs() returns %d\n", ret);
ret= 17; goto ex;
}
print_attrs(out_num_attrs, out_names, out_value_lengths, out_values, 0);
ret= do_touch(out_path, 0);
if(ret <= 0)
{ret= 19; goto ex;}
ret= aaip_set_attr_list(out_path, out_num_attrs, out_names, out_value_lengths,
out_values, 1 | 2);
if(ret != 1) {
fprintf(stderr, "aaip_set_attr_list() returns %d\n", ret);
ret= 18; goto ex;
}
ret= 0;
ex:;
if(in_names != NULL || in_value_lengths != NULL || in_values != NULL)
aaip_get_attr_list(in_path, &in_num_attrs, &in_names, &in_value_lengths,
&in_values, 1 << 15);
if(out_names != NULL || out_value_lengths != NULL || out_values != NULL)
aaip_get_decoded_attrs(&aaip, &out_num_attrs, &out_names,
&out_value_lengths, &out_values, 15);
aaip_decode_attrs(&aaip, "AA", (size_t) 0, (size_t) 0, NULL, (size_t) 0,
&consumed, 1 << 15);
return(ret);
}
int main(int argc, char **argv)
{
int ret;
if(argc < 2) {
usage:
fprintf(stderr, "usage : %s options\n", argv[0]);
fprintf(stderr, " -pairs [-]name[xNNN] [-]value[xNNN] [...]\n");
fprintf(stderr, " -copy_acl source_path target_path\n");
fprintf(stderr, " -copy source_path target_path\n");
exit(1);
}
if(strcmp(argv[1], "-pairs") == 0) {
if(argc < 4 || (argc % 2) != 0)
goto usage;
ret= synthetic_pairs(argv[0], argc - 2, argv + 2, 0);
} else if(strcmp(argv[1], "-copy_acl") == 0) {
if(argc != 4)
goto usage;
ret= test_acl(argv[2], argv[3], 0);
} else if(strcmp(argv[1], "-copy") == 0) {
if(argc != 4)
goto usage;
ret= copy_all(argv[2], argv[3], 1);
} else
goto usage;
exit(ret);
}

View File

@ -5,9 +5,9 @@
To compare tree /media/dvd and /original/dir :
find /media/dvd -exec compare_file '{}' /media/dvd /original/dir ';'
Copyright 2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2008 - 2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2.
Provided under GPL version 2 or later.
cc -g -o compare_file compare_file.c
@ -117,7 +117,9 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
/* Attributes */
if(s1.st_mode != s2.st_mode) {
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
printf("%s : st_mode : %7.7o <> %7.7o\n", a, 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))
printf("%s : type : %s <> %s\n",
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));

View File

@ -4,25 +4,27 @@
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.3.1.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
http://scdbackup.sourceforge.net/xorriso-0.4.8.pl00.tar.gz
Copyright (C) 2006-2010 Thomas Schmitt, provided under GPL version 2 or later.
------------------------------------------------------------------------------
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
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
A special property of xorriso is that it needs neither an external ISO 9660
formatter program nor an external burn program for CD or DVD but rather
incorporates the libraries of libburnia-project.org .
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:
"... without even the implied warranty ..."
@ -33,14 +35,21 @@ The most simple way to get xorriso from source code is the xorriso standalone
tarball.
Prerequisites:
The tarball contains anything that is needed except libc and libpthread.
libreadline and the readline-dev headers will make dialog mode more convenient,
but are not mandatory.
The tarball contains everything that is needed except the following system
components:
libc, libpthread
plus on FreeBSD: libiconv, libcam, IDE and SATA drives need atapicam
Optional at compile time are:
libreadline and the readline-dev headers make dialog mode more convenient.
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.3.1.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-0.4.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.3.1.tar.gz
cd xorriso-0.3.1
tar xzf xorriso-0.4.8.pl00.tar.gz
cd xorriso-0.4.8
Within that directory execute:
@ -50,7 +59,10 @@ Within that directory execute:
This will produce a binary named
./xorriso/xorriso
which you may strip to reduce it in size
If you want xorriso to report a "Build timestamp" with its option -version :
make buildstamped
You may strip the binary to reduce it in size
strip ./xorriso/xorriso
You may copy or move it to a directory where it can be found by the shell,
@ -80,14 +92,41 @@ 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()
If you want xorriso to report a "Build timestamp" with its option -version:
make buildstamped
xorriso brings own system adapters which allow burning optical media on Linux
and FreeBSD. Alternatively it can use libcdio-0.83 or later for sending
commands to optical drives:
--enable-libcdio
xorriso allows to use external processes as file content filters. This is
a potential security risk which may be avoided by ./configure option
--disable-external-filters
By default the filter feature is disabled if effective user id and real
user id differ. This ban can be lifted by
--enable-external-filters-setuid
Sometimes xorriso will yield better write performance on Linux if 64 KB are
transmitted in each write operation rather than 32 KB. See option -dvd_obs .
64k can be made default at configure time by:
--enable-dvd-obs-64k
For xorriso -as cdrecord emulation only:
In some situations Linux may deliver a better write performance to drives if
the track input is read with O_DIRECT (see man 2 open). The included libburn
and the cdrecord emulation of xorriso can be told to use this peculiar read
mode by:
--enable-track-src-odirect
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
xorriso -devices
@ -129,7 +168,8 @@ by prepending "stdio:" to the path.
Like:
xorriso -dev stdio:/dev/sdb ...more arguments...
This rule may be changed by xorriso option -drive_class.
Prefix "mmc:" causes a path to be accepted only if it is a real optical drive.
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
@ -163,8 +203,9 @@ and vice versa:
File Formats
Currently there is only one file format peculiar to xorriso : sector maps
which describe the valid and invalid blocks on a media or a disk copy of
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
@ -180,6 +221,45 @@ 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 end tag
A relocated superblock may appear at LBA 0 of an image which was produced for
being stored in a disk file or on overwriteable media (e.g. DVD+R, BD-RE).
xorriso records the first session at LBA 32. An eventual follow-up session
begins at the next block address which is divisible by 32 and higher than the
address of the previous session's end tag. Normally no session starts after the
address given by relocated superblock parameter session_start=.
Session oriented media like CD-R[W], DVD+R, BD-R will have no relocated
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
@ -200,9 +280,9 @@ and a matching dynamically linked xorriso binary.
This binary is leaner but depends on properly installed libraries of suitable
revision.
Dynamic library and compile time header requirements for libisoburn-0.3.1 :
- libburn.so.4 , version libburn-0.5.8 or higher
- libisofs.so.6 , version libisofs-0.6.12 or higher
Dynamic library and compile time header requirements for libisoburn-0.4.8 :
- libburn.so.4 , version libburn-0.7.6 or higher
- libisofs.so.6 , version libisofs-0.6.26 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.
@ -213,8 +293,8 @@ Standalone xorriso has less runtime dependencies and can be moved more freely.
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
it under the terms of the GNU General Public License version 2 or later
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -231,7 +311,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components still containing
parts of old

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,24 @@
#!/bin/sh
# compile_xorriso.sh
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
# Copyright 2005 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
#
# Not intended for general use in production installations !
# Rather use: ./bootstrap ; ./configure ; make
#
# This is a development tool which expects a special setup of directories.
# This is a development tool which expects a special setup of directories
# on a Linux system (e.g. SuSE 10.2).
# It is to be executed in a common parent of the directories given with
# $isofs $isoburn $burn $xorr
isofs=./nglibisofs-develop/libisofs
isofs=./nglibisofs-develop/libisofs/libisofs_libisofs_la-
isofs_filter=./nglibisofs-develop/libisofs/filters/libisofs_libisofs_la-
burn=./libburn-develop/libburn
isoburn=./libisoburn-develop/libisoburn
xorr=./libisoburn-develop/xorriso
debug_opts="-O2"
def_opts=
def_opts="-DXorriso_allow_external_filterS"
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
do_strip=0
static_opts=
@ -24,6 +26,7 @@ warn_opts="-Wall"
nglibisofs=1
def_libreadline="-DXorriso_with_readlinE"
link_libreadline="-lreadline"
link_libcdio=
for i in "$@"
do
@ -41,12 +44,20 @@ do
then
def_libreadline=""
link_libreadline=""
elif test "$i" = "-dvd_obs_64k"
then
def_opts="$def_opts -DXorriso_dvd_obs_default_64K"
elif test "$i" = "-use_libcdio"
then
link_libcdio="-lcdio"
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
then
echo \
"$xorr/compile_xorriso.sh : to be executed above top level directories"
echo "Options:"
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
echo " -no_libreadline do not compile for and link with libreadline."
echo " -use_libcdio link with -lcdio because libburn uses it."
echo " -do_diet produce capability reduced lean version."
echo " -do_strip apply program strip to compiled programs."
echo " -g produce debuggable programm."
@ -59,39 +70,44 @@ do
done
libisofs=
libisofs="$libisofs $isofs"/buffer.o
libisofs="$libisofs $isofs"/builder.o
libisofs="$libisofs $isofs"/data_source.o
libisofs="$libisofs $isofs"/ecma119.o
libisofs="$libisofs $isofs"/ecma119_tree.o
libisofs="$libisofs $isofs"/eltorito.o
libisofs="$libisofs $isofs"/filesrc.o
libisofs="$libisofs $isofs"/fs_image.o
libisofs="$libisofs $isofs"/fs_local.o
libisofs="$libisofs $isofs"/fsource.o
libisofs="$libisofs $isofs"/image.o
libisofs="$libisofs $isofs"/iso1999.o
libisofs="$libisofs $isofs"/joliet.o
libisofs="$libisofs $isofs"/libiso_msgs.o
libisofs="$libisofs $isofs"/messages.o
libisofs="$libisofs $isofs"/node.o
libisofs="$libisofs $isofs"/rockridge.o
libisofs="$libisofs $isofs"/rockridge_read.o
libisofs="$libisofs $isofs"/stream.o
libisofs="$libisofs $isofs"/tree.o
libisofs="$libisofs $isofs"/util.o
libisofs="$libisofs $isofs"/util_htable.o
libisofs="$libisofs $isofs"/util_rbtree.o
libisofs="$libisofs $isofs"/system_area.o
libisofs="$libisofs $isofs"/make_isohybrid_mbr.o
libisofs="$libisofs $isofs"buffer.o
libisofs="$libisofs $isofs"builder.o
libisofs="$libisofs $isofs"data_source.o
libisofs="$libisofs $isofs"ecma119.o
libisofs="$libisofs $isofs"ecma119_tree.o
libisofs="$libisofs $isofs"eltorito.o
libisofs="$libisofs $isofs"filesrc.o
libisofs="$libisofs $isofs"fs_image.o
libisofs="$libisofs $isofs"fs_local.o
libisofs="$libisofs $isofs"fsource.o
libisofs="$libisofs $isofs"image.o
libisofs="$libisofs $isofs"iso1999.o
libisofs="$libisofs $isofs"joliet.o
libisofs="$libisofs $isofs"libiso_msgs.o
libisofs="$libisofs $isofs"messages.o
libisofs="$libisofs $isofs"node.o
libisofs="$libisofs $isofs"rockridge.o
libisofs="$libisofs $isofs"rockridge_read.o
libisofs="$libisofs $isofs"stream.o
libisofs="$libisofs $isofs"tree.o
libisofs="$libisofs $isofs"util.o
libisofs="$libisofs $isofs"util_htable.o
libisofs="$libisofs $isofs"util_rbtree.o
libisofs="$libisofs $isofs"system_area.o
libisofs="$libisofs $isofs"make_isohybrid_mbr.o
libisofs="$libisofs $isofs"aaip_0_2.o
libisofs="$libisofs $isofs"filter.o
libisofs="$libisofs $isofs_filter"external.o
libisofs="$libisofs $isofs_filter"zisofs.o
libisofs="$libisofs $isofs_filter"gzip.o
libisofs="$libisofs $isofs"md5.o
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
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 $link_libcdio"
cc -I. -DXorriso_with_maiN $def_libreadline \
$warn_opts \
$static_opts \
@ -130,7 +146,7 @@ cc -I. -DXorriso_with_maiN $def_libreadline \
"$burn"/toc.o \
\
"$burn"/crc.o \
"$burn"/lec.o \
"$burn"/ecma130ab.o \
\
"$isoburn"/isoburn.o \
"$isoburn"/burn_wrap.o \
@ -140,8 +156,11 @@ cc -I. -DXorriso_with_maiN $def_libreadline \
$libisofs \
\
$link_libreadline \
$link_libcdio \
\
-lpthread
-lpthread \
-lacl \
-lz
ret=$?
if test "$ret" = 0

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.3.1], [http://libburnia-project.org])
AC_INIT([xorriso], [0.4.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -8,15 +8,15 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=6
BURN_MICRO_VERSION=1
BURN_MINOR_VERSION=7
BURN_MICRO_VERSION=7
AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=12
LIBISOFS_MICRO_VERSION=27
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)
@ -43,6 +43,12 @@ if test ! $ac_cv_func_fseeko; then
AC_ERROR([Libburn requires largefile support.])
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_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent"
@ -74,8 +80,19 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE
AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
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 See if the user wants aggressive optimizations of the code
@ -95,6 +112,13 @@ else
CFLAGS="$CFLAGS -DDEBUG"
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)
@ -112,9 +136,131 @@ fi
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 Linking fails on SuSE 9.0 because zlib has compress2() but lacks
dnl compressBound(). So compressBound is the more modern thing to test.
dnl The empty parameter after "compressBound" causes -lz.
ZLIB_DEF="-DLibisofs_with_zliB"
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
else
ZLIB_DEF=
fi
AC_SUBST(ZLIB_DEF)
AC_ARG_ENABLE(libcdio,
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
, enable_libcdio=no)
if test x$enable_libcdio = xyes; then
dnl Check whether there is libcdio-devel and libcdio-runtime.
dnl If not, erase this macro
LIBCDIO_DEF="-DLibburn_use_libcdiO"
dnl The empty yes case obviously causes -lcdio to be linked
AC_CHECK_HEADER(cdio/cdio.h, AC_CHECK_LIB(cdio, mmc_last_cmd_sense, , LIBCDIO_DEF= ), LIBCDIO_DEF= )
else
LIBCDIO_DEF=
fi
if test x$LIBCDIO_DEF = x
then
if test x$enable_libcdio = xyes
then
echo "WARNING: could not enable use of libcdio as system adapter"
fi
else
echo "enabled EXPERIMENTAL use of libcdio as system adapter"
LIBCDIO_REQUIRED=0.83
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
fi
AC_SUBST(LIBCDIO_DEF)
AC_ARG_ENABLE(external-filters,
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
, enable_external_filters=yes)
if test x"$enable_external_filters" = xyes; then
EXTF_DEF="-DXorriso_allow_external_filterS"
echo "enabled xorriso external filter programs"
else
EXTF_DEF=
echo "disabled xorriso external filter programs"
fi
AC_SUBST(EXTF_DEF)
AC_ARG_ENABLE(external-filters-setuid,
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
, enable_external_filters_setuid=no)
if test x$enable_external_filters_setuid = xyes; then
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
echo "enabled xorriso external filter programs under setuid"
else
EXTF_SUID_DEF=
echo "disabled xorriso external filter programs under setuid"
fi
AC_SUBST(EXTF_SUID_DEF)
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for DVD/BD writing, default=no],
, enable_dvd_obs=no)
if test x$enable_dvd_obs_64k = xyes; then
XORRISO_DVD_OBS_64K="-DXorriso_dvd_obs_default_64K"
echo "enabled xorriso write size default 64 KB on DVD and BD"
else
XORRISO_DVD_OBS_64K=
echo "disabled xorriso write size default 64 KB on DVD and BD"
fi
AC_SUBST(XORRISO_DVD_OBS_64K)
AC_ARG_ENABLE(track-src-odirect,
[ --enable-track-src-odirect Enable use of O_DIRECT with -as cdrskin, default=no],
, enable_track_src_odirect=no)
if test x$enable_track_src_odirect = xyes; then
LIBBURN_O_DIRECT_DEF="-DLibburn_read_o_direcT"
echo "enabled use of O_DIRECT with input of -as cdrskin"
else
LIBBURN_O_DIRECT_DEF=
echo "disabled use of O_DIRECT with input of -as cdrskin"
fi
AC_SUBST(LIBBURN_O_DIRECT_DEF)
AC_CONFIG_FILES([
Makefile
version.h
xorriso.pc
])
AC_OUTPUT
# xorriso.pc

View File

@ -51,7 +51,7 @@ then
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
-e 's/<b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/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>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>/' \

View File

@ -1,7 +1,7 @@
#!/bin/sh
# make_xorriso_standalone.sh
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
# Copyright 2008 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPL
#
# Not intended for general use in production installations !
#
@ -25,11 +25,11 @@
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.3.1
xorriso_rev=0.4.8
# For unstable uploads:
xorriso_pl=""
## xorriso_pl=""
# For stable releases:
# xorriso_pl=".pl00"
xorriso_pl=".pl00"
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_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
@ -134,6 +134,8 @@ copy_files \
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
copy_files \
@ -145,9 +147,13 @@ copy_files \
create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters
create_dir "$lone_dir"/doc
goto_dir "$current_dir"/nglibisofs-develop
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
copy_files doc/susp_aaip*.txt "$lone_dir"/doc
copy_files doc/zisofs_format.txt "$lone_dir"/doc
copy_files doc/checksums.txt "$lone_dir"/doc
copy_files COPYRIGHT "$lone_dir"/libisofs
# To get a common version.h

View File

@ -0,0 +1,197 @@
# 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_DVD_OBS_64K)
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,9 +2,9 @@
/* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2.
Provided under GPL version 2 or later.
This file contains the public option interface of xorriso.
*/
@ -16,35 +16,181 @@
struct XorrisO;
#define Xorriso_program_versioN "0.4.8"
/* --------------------- Fundamental Management ------------------- */
/* Create a new xorriso object and tell it the program name to be used
/* 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
"xorrisofs" activates -as "mkisofs" emulation from start
"genisofs" alias of "xorrisofs"
"mkisofs" alias of "xorrisofs"
"genisoimage" alias of "xorrisofs"
@parm flag unused yet, submit 0
"xorrecord" activates -as "cdrecord" emulation from start
"cdrecord" alias of "xorrecord"
"wodim" alias of "xorrecord"
"cdrskin" alias of "xorrecord"
@param flag unused yet, submit 0
@return >0 success , <=0 failure, no object created
*/
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
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);
/* Destroy xorriso object when it is no longer needed.
@param flag bit0= Make global librariy shutdown.
Use only with last xorriso object to be destroyed.
/* Read and interpret commands from eventual startup files as listed in
man xorriso.
@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
If argv after the call differs from argv before the call,
then one should dispose it later by:
for(i= 0; i < argc; i++)
if(argv[i] != NULL)
free(argv[i]);
free(argv);
@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);
@ -93,7 +239,7 @@ int Xorriso_msgs_submit_void(void *xorriso,
/** Evaluate an advise whether to abort or whether to go on with option
processing. This should be called after any option function was processed.
It updates the problem status by processing the library message queues
and then it uses this status and the submitted return value ot the
and then it uses this status and the submitted return value of the
option function to evaluate the situation.
@param xorriso The environment handle
@param ret The return value of the previously called option function
@ -122,8 +268,7 @@ int Xorriso_set_problem_status(struct XorrisO *xorriso, char *severity,
/* The next two functions are part of Xorriso_eval_problem_status().
You may use them to build an own advisor function or to drain the
library message queues more frequently.
You may use them to build an own advisor function.
*/
/** Obtain the current problem status of the xorriso handle.
@ -141,7 +286,10 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
the severity of the library events like the severity of a message submitted
via Xorriso_msgs_submit().
xorriso sets the message queues of the libraries to queuing "ALL".
So it is essential that they get drained regularly.
Many inner functions of xorriso call Xorriso_process_msg_queues() on their
own because they expect library output pending. Nevertheless, a loop of
xorriso option calls should either call Xorriso_eval_problem_status() or
Xorriso_process_msg_queues() with each cycle.
@param xorriso The environment handle
@param flag Unused yet. Submit 0.
@return 1 on success, <=0 if failure
@ -149,6 +297,23 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
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
@ -257,12 +422,27 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
After each call to an option function, there should happen:
Xorriso_eval_problem_status()
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 */
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 */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
@ -297,6 +477,9 @@ int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
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);
@ -314,6 +497,9 @@ int Xorriso_option_blank(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
char *treatment, int flag);
/* Option -calm_drive */
int Xorriso_option_calm_drive(struct XorrisO *xorriso, char *which, int flag);
/* Option -cd alias -cdi */
int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
@ -326,6 +512,15 @@ int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
*/
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);
@ -406,12 +601,22 @@ int Xorriso_option_devices(struct XorrisO *xorriso, int flag);
/* Option -dialog "on"|"off" */
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" */
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" */
int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
/* Option -dvd_obs "default"|"32k"|"64k" */
int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag);
/* Option -eject */
/* @param flag bit0=do not report toc of eventually remaining drives
*/
@ -431,6 +636,10 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
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 */
/* @param flag bit0=do not report the restored item
bit1=do not reset pacifier, no final pacifier message
@ -457,12 +666,21 @@ int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
/* Option -fs */
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 */
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 */
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
@ -483,6 +701,10 @@ int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
/* Option -list_formats */
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
/* Option -list_profiles */
int Xorriso_option_list_profiles(struct XorrisO *xorriso, char *which,
int flag);
/* Option -load session|track|sbsector value */
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
@return <=0 error , 1 success, 2 revoked by -reassure
@ -533,16 +755,23 @@ int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
/* Option -mark */
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 */
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -mount */
/* @param bit0= print mount command to result channel rather than performing it
*/
/* Options -mount , -mount_cmd , -session_string */
/* @param bit0= -mount_cmd: print mount command to result channel rather
than performing it
bit1= perform -session_string rather than -mount_cmd
*/
int Xorriso_option_mount(struct XorrisO *xorriso, char *dev, char *adr_mode,
char *adr, char *cmd, int flag);
/* Option -mount_opts option[:...] */
int Xorriso_option_mount_opts(struct XorrisO *xorriso, char *mode, int flag);
/* Option -mv alias -mvi */
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
@ -613,6 +842,9 @@ int Xorriso_option_prog_help(struct XorrisO *xorriso, char *name, int flag);
/* Option -publisher */
int Xorriso_option_publisher(struct XorrisO *xorriso, char *name, int flag);
/* Option -pvd_info */
int Xorriso_option_pvd_info(struct XorrisO *xorriso, int flag);
/* Option -pwd alias -pwdi */
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
@ -652,9 +884,39 @@ int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -scdbackup_tag */
int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *list_path,
char *record_name, int flag);
/* Option -session_log */
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 */
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
@ -668,10 +930,16 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
int flag);
/* Option -stdio_sync "on"|"off"|size */
int Xorriso_option_stdio_sync(struct XorrisO *xorriso, char *rythm, int flag);
/* Option -stream_recording */
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -system_id */
int Xorriso_option_system_id(struct XorrisO *xorriso, char *name, int flag);
/* Option -tell_media_space */
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
@ -685,6 +953,10 @@ int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
/* Option -uid */
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
@param flag bit0= issue summary message
bit1= do not reset pacifier, no final pacifier message
@ -703,6 +975,15 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag);
/* Option -volid */
int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag);
/* Option -volset_id */
int Xorriso_option_volset_id(struct XorrisO *xorriso, char *name, 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 */

View File

@ -25,7 +25,7 @@ session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
<BR>
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
Vice versa xorriso is able to copy file objects out of ISO 9660 filesystems.
</P>
<P>
@ -35,54 +35,49 @@ Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
<P>
<H2>Hardware requirements:</H2>
A CD/DVD/BD recorder suitable for
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
and to MMC-5 for DVD or BD).
About any CD, DVD, or BD recorder produced in the recent ten years.
<BR>
<A HREF="http://libburnia-project.org">libburn</A>
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>
</P>
<P>
<H2>Software requirements :</H2>
<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.6 the drive should not be under ide-scsi.</DD>
<DT>or FreeBSD (with libc, of course) :</DT>
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
<DT>libpthread</DT>
<DD>is supposed to be a standard system component.</DD>
<DT>libreadline and libreadline-dev</DT>
<DD>are optional and eventually make dialog more convenient.</DD>
</DL>
</P>
<P>
<H2>
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.5.7</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</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.12</DT>
<DD>operates on ISO 9660 filesystem images.</DD>
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
<DT>libisoburn-0.3.0</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>With kernel 2.6 ide-scsi is not needed.</DD>
<DT>or FreeBSD, libc, libpthread :</DT>
<DD>PATA/IDE and SATA drives need atapicam running.</DD>
<DD>libcam has to be installed.</DD>
<DD>libiconv has to be installed.</DD>
<DT>or some other X/Open system, libc, libpthread :</DT>
<DD>
There will be no direct operation of optical drives, but only POSIX i/o
with objects of the local filesystem.
</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>
This program has been tested on Intel/AMD Linux
and on FreeBSD systems.<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>.
</P>
@ -92,13 +87,13 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
<H2>Special features:</H2>
<UL>
<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>
Operates on an existing ISO image or creates a new one.
</LI>
<LI>
Copies files from filesystem into the ISO image.
Copies files from filesystem into the ISO image and vice versa.
</LI>
<LI>
Changes file properties, renames or deletes file objects in the ISO image.
@ -107,23 +102,28 @@ Changes file properties, renames or deletes file objects in the ISO image.
Updates ISO subtrees incrementally to match given disk subtrees.
</LI>
<LI>
Can record and restore hard link relations, ACL, and xattr.
</LI>
<LI>
Can attach MD5 checksums to each data file and the whole session.
</LI>
<LI>
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 and by MBR.
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 restore single files and whole trees from ISO image to disk filesystem.
</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>
@ -132,7 +132,7 @@ Scans for optical drives, blanks re-useable optical media, formats media.
</LI>
<LI>
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>
Reads its instructions from command line arguments, dialog, and batch files.
@ -147,6 +147,7 @@ Provides navigation commands for interactive ISO image manipulation.
<P>
<H2>Command Examples:</H2>
<DL>
<DT>Get an overview of drives and their addresses</DT>
<DD>#<KBD>&nbsp;xorriso -devices</KBD></DD>
<DD><KBD>...</KBD></DD>
@ -244,16 +245,21 @@ Important: -indev and -outdev have to be different drives.
</DT>
<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
run. It will write eventually pending changes to media, if that has not
already been done by a previous -commit.</DT>
arguments have to be given in one single line. Backslash may be used to mark
a line as incomplete so it gets continued by the next input line.
<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>enter option and arguments :</KBD></DD>
<DD><KBD><B>-dev /dev/sr0</B></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>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><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-commit</B></KBD></DD>
@ -265,23 +271,68 @@ already been done by a previous -commit.</DT>
<HR>
</DT>
<DT>The following command can be run on blank media to create a
copy of the mentioned disk directory trees, and it can be run on appendable
media to perform a minimal set of change operations which update the
old ISO copies to match the new disk trees.
Older states can be retrieved by help of mount option "session=" from CD-R[W],
by help of "sbsector=" from other media.
So this constitutes true incremental backup.
<DT>The following command performs incremental backup.
It can be run on blank media to create a copy of the mentioned disk
directory trees, and it can be run on appendable media to perform a
minimal set of change operations which update the old ISO copies
to match the new disk trees.
Older states can be retrieved by help of mount options like "sbsector="
or by help of xorriso option -mount.
<BR>
The copies will be complete, except all file names ending
with ".o" or ".swp" which are excluded by options -not_leaf.
Eventual ACL, xattr and hardlink relations will be recorded. MD5 checksums
will be computed and recorded. Data comparison 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>
<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; -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/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>
<HR>
</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>
@ -304,17 +355,25 @@ from hard disk or USB stick.
<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.
The prefix &quot;stdio:&quot; indicates that normal file operations are
desired rather than MMC drive commands:
</DT>
<DD>$<KBD>&nbsp;xorriso -dev stdio:/tmp/regular_file ...other.options...</DD>
<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 stdio:/tmp/named_pipe ...other.options...</DD>
<DD>$<KBD>&nbsp;xorriso -outdev /tmp/named_pipe ...other.options...</DD>
<DT>In batch mode it is possible to operate xorriso in a pipeline
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>
@ -342,7 +401,8 @@ One may switch from mkisofs emulation to xorriso's own command mode:
<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 -indev /dev/sr0 \</KBD></DD>
<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>
@ -369,9 +429,10 @@ files or trees to disk:
<P>
<DL>
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.3.0.pl00.tar.gz">xorriso-0.3.0.pl00.tar.gz</A>
(1080 KB).
<DD><A HREF="xorriso-0.4.8.pl00.tar.gz">xorriso-0.4.8.pl00.tar.gz</A>
(1360 KB).
</DD>
<DD>(Released 25 Jan 2010)</DD>
</DL>
</DD>
</DL>
@ -387,7 +448,7 @@ files or trees to disk:
<A HREF="mailto:libburn-hackers@pykix.org">libburn-hackers@pykix.org</A></DD>
</DL>
<DL><DT>License:</DT>
<DD><A HREF="COPYING_xorriso">GPL version 2</A>,
<DD><A HREF="COPYING_xorriso">GPL version 2 or later</A>,
an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
<DD>&nbsp;</DD>
</DL>
@ -396,64 +457,105 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
<HR>
<P>
Bug fixes towards xorriso-0.2.8.pl01:
Bug fixes towards xorriso-0.4.6.pl00:
<UL>
<LI>Forgot exit value registration to -return_with. Thanks to Steve Dodd.</LI>
<LI>-format "as_needed" did not recognize unformatted BD-RE</LI>
<LI>disk patterns with relative addresses were not properly resolved</LI>
<LI>
With non-Linux system adapters there were 0 readable bytes on block devices
which acted as pseudo drives.
</LI>
<LI>
xorriso did not blank CD-RW with images that were prepared on hard disk
</LI>
<LI>
Invalid checksum tags were preserved if the new session produced no checksums
</LI>
<!--
<LI>- none -</LI>
-->
</UL>
</P>
<!--
<P>
Enhancements towards previous stable version xorriso-0.2.8.pl01:
Bug fixes towards xorriso-0.4.4.pl00:
<UL>
</UL>
</P>
-->
<LI>Suitable ISOLINUX boot images are made alternatively bootable via MBR</LI>
<LI>New options -quoted_path_list, -quoted_not_list</LI>
<LI>New option -backslash_codes for terminal safety with weird file names</LI>
<LI>New options -charset, -in_charset, -out_charset </LI>
<LI>New option -application_id</LI>
<LI>New option -compliance</LI>
<P>
Enhancements towards previous stable version xorriso-0.4.6.pl00:
<UL>
<LI>
New configure option --enable-libcdio for system adapter to libcdio-0.83git
</LI>
<LI>
The checksum buffer for the emerging image gets now marked as invalid if
image generation is canceled.
</LI>
<LI>
More graceful reaction on filesystems where ACL are not enabled but
nevertheless requested by the application.
</LI>
<LI>
Made FreeBSD system adapter safe from mutal burn spoiling and drive deadlock.
</LI>
<!--
<LI>- none -</LI>
-->
</UL>
</P>
<HR>
<P>
<H3>
Library copies included in xorriso tarballs:
</H3>
<DL>
<DT><H3>Development snapshot, version 0.3.1 :</H3></DT>
<DD>Bug fixes towards xorriso-0.3.0.pl00:
<UL>
<DT>libburn-0.7.7</DT>
<DD>reads and writes data from and to CD, DVD, BD.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.27</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.6</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>
<LI>Options -extract and -extract_single were not disabled with -osirrox off
</LI>
<!--
<HR>
<P>
<DL>
<DT><H3>Development snapshot, version 0.4.9 :</H3></DT>
<DD>Bug fixes towards xorriso-0.4.8.pl00:
<UL>
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>Enhancements towards stable version 0.3.0.pl00:
<DD>Enhancements towards stable version 0.4.8.pl00:
<UL>
<LI>New options -mount, -mount_cmd, -session_string</LI>
<LI>By using libburn-0.5.9: support for BD-R media</LI>
<LI>New -format modes by_size_ and fast_by_size_</LI>
<LI>New option -assert_volid</LI>
<LI>New option -drive_class for safety management of pseudo-drive access</LI>
<!--
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.3.1</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.3.1 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.3.1)</A></DD>
<DD><A HREF="README_xorriso_devel">README 0.4.9</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.4.9 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.4.9)</A></DD>
<DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
@ -463,8 +565,8 @@ libburnia libraries.
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.3.1.tar.gz">xorriso-0.3.1.tar.gz</A>
(1080 KB).
<A HREF="xorriso-0.4.9.tar.gz">xorriso-0.4.9.tar.gz</A>
(1360 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained
from repositories of
@ -479,7 +581,9 @@ versions for dynamic linking. Only release versions are safe for that.
</KBD></DD>
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
</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>
</KBD></DD>
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
@ -505,7 +609,6 @@ Very special thanks to Andy Polyakov whose
provide the libburnia project with invaluable examples on how to deal
with DVD media and how to emulate multi-session on overwriteable media.
</P>
<HR>
@ -521,6 +624,11 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
<A href="http://sourceforge.net">
<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> -->
<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>
<HR>
<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=
lib_LTLIBRARIES =
@ -16,9 +20,13 @@ xorriso_xorriso_CPPFLAGS = -I./libburn -I./libisofs -I./libisoburn -I./xorriso
# No readline in the vanilla version because the necessary headers
# are in a separate readline-development package.
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN $(READLINE_DEF)
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN \
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF) \
$(LIBCDIO_DEF) \
$(XORRISO_DVD_OBS_64K) $(LIBBURN_O_DIRECT_DEF)
xorriso_xorriso_LDADD = $(THREAD_LIBS)
xorriso_xorriso_LDADD = $(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
# This looks quite ugly with make install: xorriso.c is compiled twice again
@ -50,9 +58,9 @@ xorriso_xorriso_SOURCES = \
libisoburn/burn_wrap.c \
libisoburn/data_source.c \
\
libisofs/libisofs.h \
libisofs/builder.h \
libisofs/builder.c \
libisofs/error.h \
libisofs/node.h \
libisofs/node.c \
libisofs/tree.h \
@ -64,7 +72,6 @@ xorriso_xorriso_SOURCES = \
libisofs/fsource.h \
libisofs/fsource.c \
libisofs/fs_local.c \
libisofs/fs_image.h \
libisofs/fs_image.c \
libisofs/messages.h \
libisofs/messages.c \
@ -83,6 +90,7 @@ xorriso_xorriso_SOURCES = \
libisofs/ecma119_tree.h \
libisofs/ecma119_tree.c \
libisofs/writer.h \
libisofs/buffer.h \
libisofs/buffer.c \
libisofs/rockridge.h \
libisofs/rockridge.c \
@ -95,10 +103,16 @@ xorriso_xorriso_SOURCES = \
libisofs/find.c \
libisofs/filter.h \
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.h \
@ -111,13 +125,13 @@ xorriso_xorriso_SOURCES = \
libburn/debug.h \
libburn/drive.c \
libburn/drive.h \
libburn/ecma130ab.c \
libburn/ecma130ab.h \
libburn/error.h \
libburn/file.c \
libburn/file.h \
libburn/init.c \
libburn/init.h \
libburn/lec.c \
libburn/lec.h \
libburn/libburn.h \
libburn/libdax_audioxtr.h \
libburn/libdax_audioxtr.c \
@ -209,8 +223,8 @@ indent: $(indent_files)
## ========================================================================= ##
# Extra things
nodist_pkgconfig_DATA = \
xorriso.pc
# nodist_pkgconfig_DATA = \
# xorriso.pc
man_MANS = xorriso/xorriso.1
@ -225,6 +239,18 @@ EXTRA_DIST = \
INSTALL \
xorriso/changelog.txt \
xorriso/xorriso_buildstamp_none.h \
$(man_MANS)
$(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-libcdio.h \
libburn/os-linux.h \
libburn/sg-dummy.c \
libburn/sg-freebsd.c \
libburn/sg-libcdio.c \
libburn/sg-linux.c

View File

@ -2,9 +2,9 @@
/* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2.
Provided under GPL version 2 or later.
This file contains inner declarations of xorriso.
The public interface is in xorriso.h
@ -18,8 +18,6 @@
#ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.3.1"
/** The source code release timestamp */
#include "xorriso_timestamp.h"
#ifndef Xorriso_timestamP
@ -99,7 +97,45 @@ struct XorrisO { /* the global context of xorriso */
/* >>> put libisofs aspects here <<< */
int ino_behavior; /* bit0= at image load time:
Do not load PX inode numbers but generate new
unique ones for all loaded IsoNode.
bit1= at image generation time:
Do not consolidate suitable nodes to hardlinks.
bit2= at restore-to-disk time:
Do not consolidate suitable nodes to hardlinks.
bit3= with update:
Do not try to detect hardlink splits and joinings.
bit4= with extract:
Do not create or use hln arrays if sort_lba_on
*/
int do_joliet;
int do_aaip; /* bit0= ACL in
bit1= ACL out
bit2= EA in
bit3= EA out
bit4= record dev,inode per node, isofs_st_out in root
bit5= check dev,inode,isofs_st_in
bit6= omit content check if bit5 check is conclusive
bit7= omit dev check with bit5
bit8= store output charset in xattr "isofs.cs"
bit9= allow to set input charset from xattr "isofs.cs"
*/
int do_md5; /* bit0= read MD5 array
bit1= write session MD5
bit2= write MD5 for each data file
bit3= make file content stability check by double reading
bit4= use recorded MD5 as proxy of ISO file
*/
char scdbackup_tag_name[81];
char scdbackup_tag_time[19];
char scdbackup_tag_written[512];
char scdbackup_tag_listname[SfileadrL];
int relax_compliance; /* opaque bitfield to be set by xorrisoburn */
int do_follow_pattern;
int do_follow_param;
@ -114,6 +150,15 @@ struct XorrisO { /* the global context of xorriso */
mode_t global_dir_mode;
mode_t global_file_mode;
struct Xorriso_lsT *filters;
int filter_list_closed;
int zlib_level;
int zlib_level_default;
int zisofs_block_size;
int zisofs_block_size_default;
int zisofs_by_magic;
int do_overwrite; /* 0=off, 1=on, 2=nondir */
int do_reassure; /* 0=off, 1=on, 2=tree */
@ -125,6 +170,8 @@ struct XorrisO { /* the global context of xorriso */
char publisher[129];
char application_id[129];
char system_id[33];
char volset_id[129];
char session_logfile[SfileadrL];
int session_lba;
@ -140,6 +187,8 @@ struct XorrisO { /* the global context of xorriso */
scan -ROM profiles for ISO sessions
bit1= bit4 for isoburn_drive_aquire()
do not emulate TOC on overwriteable media
bit2= bit7 for isoburn_drive_aquire()
pretend any media to be -ROM
*/
int image_start_mode; /* From what address to load the ISO image
@ -159,15 +208,27 @@ struct XorrisO { /* the global context of xorriso */
*/
char image_start_value[81]; /* value according image_start_mode */
int drives_exclusive; /* burn_preset_device_open() param exclusive */
int do_calm_drive; /* bit0= calm down drive after aquiring it */
char indev[SfileadrL];
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
char *in_charset; /* The charset to interpret the filename bytes */
int indev_is_exclusive;
time_t isofs_st_out; /* A time point at least 1 second before image
composition began. To be stored with image as
xattr "isofs.st". */
time_t isofs_st_in; /* That time point as read from "isofs.st" of the
loaded image. */
int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */
struct CheckmediajoB *check_media_default;
int check_media_bad_limit; /* values defined as Xorriso_read_quality_* */
struct SectorbitmaP *in_sector_map; /* eventual sector validity bitmap */
@ -177,6 +238,7 @@ struct XorrisO { /* the global context of xorriso */
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
connected to externaly perveived stdout.
*/
int outdev_is_exclusive;
int grow_blindly_msc2; /* if >= 0 this causes growing from drive to drive.
The value is used as block address offset for
@ -194,7 +256,11 @@ struct XorrisO { /* the global context of xorriso */
/* <<< not sure whether to keep this after libisofs will have
learned to pad up MBR images to full MB */
int do_stream_recording;
int do_stream_recording; /* 0=no, 1=yes, 2=for data, not for dir
>=16 means yes with number as start LBA */
int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */
int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */
int keep_boot_image;
int patch_isolinux_image;
@ -215,13 +281,26 @@ struct XorrisO { /* the global context of xorriso */
/* XORRISO options */
int allow_graft_points;
int allow_restore; /* 0= disallowed, 1=allowed, 2=device files allowed */
int allow_restore; /* -1=permanently disallowed
0=disallowed, 1=allowed, 2=device files allowed */
int do_concat_split; /* 1= restore complete split file directories as
regular files
*/
int do_auto_chmod; /* 1= eventually temporarily open access permissions
of self-owned directories during restore
*/
int do_restore_sort_lba; /* 1= restore via node_array rather than via
tree traversal. Better read performance,
no directory mtime restore, needs do_auto_chmod
*/
int mount_opts_flag; /* bit0= "shared" = not "exclusive"
Try to emit non-exclusive mount command.
Do not give up drives.
Linux: use loop device even on block devices
in order to circumvent the ban to mount a
device twice (with different sbsector=)
FreeBSD: ?
*/
int dialog; /* 0=off , 1=single-line , 2=multi-line */
@ -346,6 +425,38 @@ struct XorrisO { /* the global context of xorriso */
void *pacifier_fifo;
int find_compare_result; /* 1=everything matches , 0=mismatch , -1=error */
int find_check_md5_result; /* bit0= seen mismatch
bit1= seen error
bit2= seen data file without MD5
bit3= seen match
*/
/* Tree node collection and LBA sorting facility */
int node_counter;
int node_array_size;
void **node_array;
struct Xorriso_lsT *node_disk_prefixes;
struct Xorriso_lsT *node_img_prefixes;
/* Hardlink matching at restore time memorizes hardlink target paths.
Array of nodes sorted by LBA. */
int hln_count;
void **hln_array;
void **hln_targets;
int hln_change_pending; /* whether a change was made since hln creation */
/* >>> this should count all temp_mem and thus change its name */
off_t node_targets_availmem;
/* Hardlink matching at update time:
Array of all nodes in the tree, sorted by disk dev,ino.
Bitmap of nodes which possibly got new hardlink siblings.
List of involved disk-iso path pairs. */
int di_count;
void **di_array;
char *di_do_widen;
struct Xorriso_lsT *di_disk_paths;
struct Xorriso_lsT *di_iso_paths;
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
@ -370,11 +481,6 @@ int Xorriso_info(struct XorrisO *xorriso, int flag);
int Xorriso_request_confirmation(struct XorrisO *xorriso, int flag);
int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
int flag);
int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag);
/* @return 0=match , else no match
*/
int Xorriso_regexec(struct XorrisO *xorriso, char *to_match, int *failed_at,
@ -383,7 +489,7 @@ int Xorriso_regexec(struct XorrisO *xorriso, char *to_match, int *failed_at,
int Xorriso_prepare_expansion_pattern(struct XorrisO *xorriso, char *pattern,
int flag);
int Xorriso__mode_to_perms(mode_t st_mode, char perms[10], int flag);
int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag);
int Xorriso_much_too_long(struct XorrisO *xorriso, int len, int flag);
@ -461,6 +567,10 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
off_t count, off_t todo, char *current_object,
int flag);
int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
char *iso_prefix, char *disk_prefix,
char disk_path[SfileadrL], int flag);
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
@param flag bit0= update rather than compare
@ -501,6 +611,11 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
int Xorriso_rmx(struct XorrisO *xorriso, off_t boss_mem, char *path, int flag);
/* @param flag bit7= return 4 if restore fails from denied permission
do not issue error message
@return <=0 failure , 1 success ,
4 with bit7: permission to create file was denied
*/
int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
char *tmp_path, int *fd, int flag);
@ -511,8 +626,24 @@ int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag);
/* @param flag bit0= change regardless of xorriso->do_auto_chmod
bit1= desired is only rx
*/
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
int Xorriso_make_accessible(struct XorrisO *xorriso, char *disk_path,int flag);
/* @param flag bit0= prefer to find a match after *img_prefixes
(but deliver img_prefixes if no other can be found)
*/
int Xorriso_make_restore_path(struct XorrisO *xorriso,
struct Xorriso_lsT **img_prefixes, struct Xorriso_lsT **disk_prefixes,
char img_path[SfileadrL], char disk_path[SfileadrL], int flag);
int Xorriso_restore_make_hl(struct XorrisO *xorriso,
char *old_path, char *new_path, int flag);
int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag);
@ -533,58 +664,6 @@ int Xorriso_toc_to_string(struct XorrisO *xorriso, char **toc_text, int flag);
int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag);
struct Xorriso_lsT {
char *text;
struct Xorriso_lsT *prev,*next;
};
/** Create a new list item with arbitrary byte content.
@param lstring The newly created object or NULL on failure
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
@return <=0 error, 1 ok
*/
int Xorriso_lst_new_binary(struct Xorriso_lsT **lstring, char *data,
int data_len, struct Xorriso_lsT *link, int flag);
/** Create a new list item with a 0-terminated text as content.
@param lstring The newly created object or NULL on failure
@param text A 0-terminated array of bytes
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
@return <=0 error, 1 ok
*/
int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
struct Xorriso_lsT *link, int flag);
/** Create a new list item at the end of a given list.
@param lstring Contains as input a pointer to a pointer to any existing
list item. As output this list item pointer will be
changed to the address of the new list item.
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param flag unused yet, submit 0
@return <=0 error, 1 ok
*/
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
char *data, int data_len, int flag);
/** Destroy a single list item and connect its eventual list neighbors.
@param lstring pointer to the pointer to be freed and set to NULL
@param flag unused yet, submit 0
@return 0= *lstring was alredy NULL, 1= ok
*/
int Xorriso_lst_destroy(struct Xorriso_lsT **lstring, int flag);
/* Opens the -check_media data copy in for reading and writing
*/
int Xorriso_open_job_data_to(struct XorrisO *xorriso,
@ -610,6 +689,29 @@ char *Xorriso_get_pattern(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, int index, int flag);
/* Normalize ACL and sort apart "access" ACL from "default" ACL.
*/
int Xorriso_normalize_acl_text(struct XorrisO *xorriso, char *in_text,
char **access_acl_text, char **default_acl_text, int flag);
int Xorriso_path_setfattr(struct XorrisO *xorriso, void *in_node, char *path,
char *name, size_t value_length, char *value, int flag);
int Xorriso_status_result(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag);
int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
char *iso_adr, char *adr_common_tail,
int *result, int flag);
int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
int flag);
int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag);
int Xorriso_may_burn(struct XorrisO *xorriso, int flag);
int Sfile_str(char target[SfileadrL], char *source, int flag);
double Sfile_microtime(int flag);
@ -645,6 +747,80 @@ int Sfile_count_components(char *path, int flag);
*/
int Sfile_type(char *filename, int flag);
/* @param flag bit0= only encode inside quotes
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
bit2= encode in any case above 126
bit3= encode in any case shellsafe:
<=42 , 59, 60, 62, 63, 92, 94, 96, >=123
*/
int Sfile_bsl_encoder(char **result, char *text, size_t text_len, int flag);
int Sfile_argv_bsl(int argc, char ***argv, int flag);
struct Xorriso_lsT {
char *text;
struct Xorriso_lsT *prev,*next;
};
/** Create a new list item with arbitrary byte content.
@param lstring The newly created object or NULL on failure
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
bit2= attach data directly by pointer rather than by copying
@return <=0 error, 1 ok
*/
int Xorriso_lst_new_binary(struct Xorriso_lsT **lstring, char *data,
int data_len, struct Xorriso_lsT *link, int flag);
/** Create a new list item with a 0-terminated text as content.
@param lstring The newly created object or NULL on failure
@param text A 0-terminated array of bytes
@param link Xorriso_lsT object to which the new object shall be linked
@param flag see Xorriso_lst_new_binary
@return <=0 error, 1 ok
*/
int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
struct Xorriso_lsT *link, int flag);
/** Create a new list item at the end of a given list.
@param entry Contains as input a pointer to a pointer to any existing
list item. As output this list item pointer may be
changed to the address of the new list item:
if ((*entry == 0) || (flag & 1))
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param flag Bitfield for control purposes
bit0= Return new object address in *entry
bit1= do not copy data (e.g. because *data is invalid)
bit2= attach data directly by pointer rather than by copying
@return <=0 error, 1 ok
*/
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
char *data, int data_len, int flag);
/** Destroy a single list item and connect its eventual list neighbors.
@param lstring pointer to the pointer to be freed and set to NULL
@param flag unused yet, submit 0
@return 0= *lstring was alredy NULL, 1= ok
*/
int Xorriso_lst_destroy(struct Xorriso_lsT **lstring, int flag);
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
int Xorriso_lst_detach_text(struct Xorriso_lsT *entry, int flag);
char *Text_shellsafe(char *in_text, char *out_text, int flag);
@ -675,6 +851,245 @@ int Dirseq_next_adr(struct DirseQ *o, char reply[SfileadrL], int flag);
int Linkitem_reset_stack(struct LinkiteM **o, struct LinkiteM *to, int flag);
#define Xorriso_findjob_on_expR yes
#ifdef Xorriso_findjob_on_expR
/*
A single Testnode.
*/
struct ExprtesT {
struct FindjoB *boss;
int invert; /* 0=normal 1=invert result */
/*
0= -false (with invert : -true)
1= -name char *arg1 (regex_t in *arg2)
2= -type char *arg1
3= -damaged
4= -lba_range int *arg1 int *arg2
5= -has_acl
6= -has_xattr
7= -has_aaip
8= -has_filter
9= -wanted_node IsoNode *arg1 (for internal use, arg1 not allocated)
10= -pending_data
11= -decision char *arg1 ("yes", "no")
12= -prune
13= -wholename char *arg1 (regex_t in *arg2)
14= -has_any_xattr
15= -has_md5
*/
int test_type;
void *arg1;
void *arg2;
};
/*
A computational node.
A tree of these nodes forms the expression.
Sequences of AND/OR operations form branches, brackets spawn new branches,
NOT inverts node's test resp. subtree result.
*/
struct ExprnodE {
struct ExprnodE *up;
char origin[8];
/* Operators */
int invert; /* 0=normal 1=invert own result (subtree or test, but not op) */
int assoc; /*
0= left : compute own value, combine with left value,
compute right value, combine with current value
1= right: compute own value, compute right value,
combine own and right, combine with left value
*/
int use_shortcuts; /* 0= evaluate all tests of -and and -or,
1= evaluate only until the combined result is known
*/
struct ExprnodE *left;
int left_op; /* 0=OR , 1=AND */
struct ExprnodE *right;
int right_op; /* see left_op */
/* Brackets : a pointer to the first node in a subchain */
struct ExprnodE *sub;
int is_if_then_else;
struct ExprnodE *true_branch;
struct ExprnodE *false_branch;
/* elementary test : if sub!=NULL , test is ignored */
struct ExprtesT *test;
/* Result */
int own_value;
int composed_value;
};
struct FindjoB {
char *start_path;
struct ExprnodE *test_tree;
struct ExprnodE *cursor;
int invert; /* 0=normal 1=set invert-property for next new test node */
int use_shortcuts;
/* 0= echo
1= rm (also rmdir)
2= rm_r
>>> 3= mv target
4= chown user
5= chgrp group
6= chmod mode_and mode_or
7= alter_date type date
8= lsdl
9= chown_r user
10= chgrp_r group
11= chmod_r mode_and mode_or
12= alter_date_r type date
13= find
14= compare disk_equivalent_of_start_path
15= in_iso iso_rr_equivalent_of_start_path
16= not_in_iso iso_rr_equiv
17= update disk_equiv
18= add_missing iso_rr_equiv
19= empty_iso_dir iso_rr_equiv
20= is_full_in_iso iso_rr_equiv
21= report_damage
22= report_lba
23= internal: memorize path of last matching node in found_path
24= getfacl
25= setfacl access_acl default_acl
26= getfattr
27= setfattr
28= set_filter name
29= show_stream
30= internal: count by xorriso->node_counter
31= internal: register in xorriso->node_array
32= internal: widen_hardlinks disk_equiv: update nodes marked in di_do_widen
33= get_any_xattr
34= get_md5
35= check_md5
36= make_md5
*/
int action;
int prune;
/* action specific parameters */
char *target;
char *text_2;
uid_t user;
gid_t group;
mode_t mode_and, mode_or;
int type; /* see Xorriso_set_time flag */
time_t date;
char *found_path;
struct FindjoB *subjob;
/* Errors */
char errmsg[4096];
int errn; /*
>0 = UNIX errno
-1 = close_bracket: no bracket open
-2 = binary operator or closing bracket expected
-3 = unexpected binary operator or closing bracket
-4 = unsupported command
-5 = -then -elseif -else -endif without -if or at wrong place
*/
};
int Exprtest_match(struct XorrisO *xorriso, struct ExprtesT *ftest,
void *node_pt, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
int Exprnode_destroy(struct ExprnodE **fnode, int flag);
int Exprnode_tree_value(struct XorrisO *xorriso, struct ExprnodE *fnode,
int left_value, void *node, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
int Findjob_new(struct FindjoB **o, char *start_path, int flag);
int Findjob_destroy(struct FindjoB **o, int flag);
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
int Findjob_set_commit_filter_2(struct FindjoB *o, int flag);
int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count,
int flag);
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
int Findjob_set_decision(struct FindjoB *o, char *decision, int flag);
int Findjob_open_bracket(struct FindjoB *job, int flag);
int Findjob_close_bracket(struct FindjoB *job, int flag);
int Findjob_not(struct FindjoB *job, int flag);
int Findjob_and(struct FindjoB *job, int flag);
int Findjob_or(struct FindjoB *job, int flag);
int Findjob_if(struct FindjoB *job, int flag);
int Findjob_then(struct FindjoB *job, int flag);
int Findjob_else(struct FindjoB *job, int flag);
int Findjob_elseif(struct FindjoB *job, int flag);
int Findjob_endif(struct FindjoB *job, int flag);
int Findjob_test_2(struct XorrisO *xorriso, struct FindjoB *o,
void *node, char *name, char *path,
struct stat *boss_stbuf, struct stat *stbuf, int flag);
int Findjob_set_action_found_path(struct FindjoB *o, int flag);
/* @param flag bit0= recursive
*/
int Findjob_set_action_target(struct FindjoB *o, int action, char *target,
int flag);
int Findjob_get_action(struct FindjoB *o, int flag);
int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
uid_t *user, gid_t *group,
mode_t *mode_and, mode_t *mode_or,
int *type, time_t *date, struct FindjoB **subjob,
int flag);
int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
#else /* Xorriso_findjob_on_expR */
struct FindjoB;
@ -695,7 +1110,7 @@ int Findjob_get_action(struct FindjoB *o, int flag);
/* @return <0 error, >=0 see xorriso.c struct FindjoB.action
*/
int Findjob_get_action_parms(struct FindjoB *o, char **target,
int Findjob_get_action_parms(struct FindjoB *o, char **target, char **text_2,
uid_t *user, gid_t *group,
mode_t *mode_and, mode_t *mode_or,
int *type, time_t *date, struct FindjoB **subjob,
@ -733,6 +1148,14 @@ int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag);
int Findjob_get_acl_filter(struct FindjoB *o, int *acl_filter, int flag);
int Findjob_get_xattr_filter(struct FindjoB *o, int *xattr_filter, int flag);
int Findjob_get_aaip_filter(struct FindjoB *o, int *aaip_filter, int flag);
int Findjob_get_filter_filter(struct FindjoB *o, int *value, int flag);
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
int Findjob_get_wanted_node(struct FindjoB *o, void **wanted_node, int flag);
@ -741,6 +1164,8 @@ int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
#endif /* ! Xorriso_findjob_on_expR */
struct SplitparT;
@ -759,6 +1184,8 @@ int Splitparts_get(struct SplitparT *o, int idx, char **name, int *partno,
int Splitpart__parse(char *name, int *partno, int *total_parts,
off_t *offset, off_t *bytes, off_t *total_bytes, int flag);
int Splitpart__is_part_path(char *path, int flag);
int Splitpart__compose(char *adr, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
@ -788,10 +1215,12 @@ int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag);
int Spotlist_get_item(struct SpotlisT *o, int idx,
int *start_lba, int *blocks, int *quality, int flag);
char *Spotlist__quality_name(int quality, char name[80], int flag);
char *Spotlist__quality_name(int quality, char name[80], int bad_limit,
int flag);
#define Xorriso_read_quality_gooD 0x7fffffff
#define Xorriso_read_quality_md5_matcH 0x70000000
#define Xorriso_read_quality_sloW 0x60000000
#define Xorriso_read_quality_partiaL 0x50000000
#define Xorriso_read_quality_valiD 0x40000000
@ -799,9 +1228,65 @@ char *Spotlist__quality_name(int quality, char name[80], int flag);
#define Xorriso_read_quality_invaliD 0x3ffffffe
#define Xorriso_read_quality_tao_enD 0x28000000
#define Xorriso_read_quality_off_tracK 0x20000000
#define Xorriso_read_quality_md5_mismatcH 0x10000000
#define Xorriso_read_quality_unreadablE 0x00000000
struct CheckmediajoB {
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
int min_lba; /* if >=0 : begin checking at this address */
int max_lba; /* if >=0 : read up to this address, else use mode */
int min_block_size; /* granularity desired by user
*/
int mode; /* 0= track by track
1= single sweep over libisoburn media capacity
>>> 2= single sweep over libburn media capacity
*/
time_t start_time;
int time_limit; /* Number of seconds after which to abort */
int item_limit; /* Maximum number of media check list items as result */
char abort_file_path[SfileadrL];
char data_to_path[SfileadrL];
int data_to_fd;
off_t data_to_offset; /* usually 0 with image copy, negative with file copy */
off_t data_to_limit; /* used with file copy */
int patch_lba0;
int patch_lba0_msc1;
char sector_map_path[SfileadrL];
struct SectorbitmaP *sector_map;
int map_with_volid; /* 0=add quick toc to map file,
1=read ISO heads for toc
*/
int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks
0= retry with CD, full chunk else
*/
int report_mode; /* 0= print MCL items
1= print damaged files
*/
char event_severity[20]; /* If not "ALL": trigger event of given severity
at the end of a check job if bad blocks were
discovered.
*/
double slow_threshold_seq; /* Time limit in seconds for the decision whether
a read operation is considered slow. This does
not apply to thr first read of an interval.
*/
int untested_valid; /* 1= mark untested data blocks as valid when calling
Xorriso_spotlist_to_sectormap()
*/
};
int Checkmediajob_new(struct CheckmediajoB **o, int flag);
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.12.21.101705"
#define Xorriso_timestamP "2010.01.25.120001"

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,9 @@
a command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2.
Provided under GPL version 2 or later.
This file contains the inner isofs- and burn-library interface of xorriso.
*/
@ -18,8 +18,13 @@
/* The minimum version of libisoburn to be used with this version of xorriso
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 3
#define xorriso_libisoburn_req_micro 1
#define xorriso_libisoburn_req_minor 4
#define xorriso_libisoburn_req_micro 8
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);
@ -87,6 +92,11 @@ int Xorriso_format_media(struct XorrisO *xorriso, off_t size, 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
@return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media
@ -177,6 +187,12 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
void *dir_node_generic, char *dir_path,
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 */
int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag);
@ -211,17 +227,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
char profile_name[80], int flag);
#ifdef NIX
/* @param flag bit0= do not mark image as changed */
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
/* @param flag bit0= do not mark image as changed */
int Xorriso_set_application_id(struct XorrisO *xorriso, char *name, int flag);
#endif /* NIX */
/* @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,
void *node_pt, void **stream, int flag);
@ -308,50 +315,31 @@ 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);
struct CheckmediajoB {
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
int Xorriso_destroy_di_array(struct XorrisO *xorriso, int flag);
int min_lba; /* if >=0 : begin checking at this address */
int max_lba; /* if >=0 : read up to this address, else use mode */
int Xorriso_new_node_array(struct XorrisO *xorriso, off_t mem_limit,
int addon_nodes, int flag);
int min_block_size; /* >>> not yet implemented:
granularity desired by user
*/
int mode; /* 0= track by track
1= single sweep over libisoburn media capacity
>>> 2= single sweep over libburn media capacity
*/
time_t start_time;
int time_limit; /* Number of seconds after which to abort */
int Xorriso_sort_node_array(struct XorrisO *xorriso, int flag);
int item_limit; /* Maximum number of media check list items as result */
int Xorriso_new_hln_array(struct XorrisO *xorriso, off_t mem_limit, int flag);
char abort_file_path[SfileadrL];
/* @param flag bit0= allocate xorriso->node_targets too
*/
int Xorriso_restore_node_array(struct XorrisO *xorriso, int flag);
char data_to_path[SfileadrL];
int data_to_fd;
off_t data_to_offset; /* usually 0 with image copy, negative with file copy */
off_t data_to_limit; /* used with file copy */
int patch_lba0;
int patch_lba0_msc1;
int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
int flag);
char sector_map_path[SfileadrL];
struct SectorbitmaP *sector_map;
int map_with_volid; /* 0=add quick toc to map file,
1=read ISO heads for toc
*/
int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
int flag);
int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks
0= retry with CD, full chunk else
*/
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag);
int report_mode; /* 0= print MCL items
1= print damaged files
*/
};
int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
struct CheckmediajoB *job, int flag);
@ -382,6 +370,125 @@ 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);
int Xorriso_is_plain_image_file(struct XorrisO *xorriso, void *in_node,
char *path, int flag);
int Xorriso_pvd_info(struct XorrisO *xorriso, int flag);
/* @param flag bit0= do not set hln_change_pending */
int Xorriso_set_change_pending(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.
*/