Compare commits

...

192 Commits

Author SHA1 Message Date
4d864281a7 Tagged a libisoburn/xorriso release 2008-06-22 17:45:42 +00:00
382626010e Documented changes and release timestamp 2008-06-22 10:45:18 +00:00
33915de0d3 Version leap to 0.2.0 2008-06-22 10:37:43 +00:00
49fdad6f48 Removed duplicated help text snippet 2008-06-22 10:31:51 +00:00
554651dc68 Preparing for 0.2.0 release 2008-06-22 07:52:02 +00:00
0557d1653f Corrected mistake in xorriso man page 2008-06-21 18:08:19 +00:00
9dd400d630 Fixed several bugs with restorie operations 2008-06-20 16:41:08 +00:00
883551a41e New -osirrox option auto_chmod_on 2008-06-20 09:16:34 +00:00
bad48be6a9 Corrected wrong size unit MB to kB in toc scan pacifier text 2008-06-19 09:28:35 +00:00
973383bb9b Renamed isoburn_*set_msgs_submit() and slightly changed meaning 2008-06-19 09:04:04 +00:00
a1968a431d Improved pacifier with -rom_toc_scan 2008-06-18 19:28:52 +00:00
4de452fb94 Made use of isoburn_preset_msgs_submit() 2008-06-18 16:16:49 +00:00
ae5ad5a143 New API functions isoburn_preset_msgs_submit(), isoburn_set_msgs_submit() 2008-06-18 16:14:44 +00:00
ceca17e946 Made -rom_toc_scan work on closed DVD-R in a DVD-ROM drive 2008-06-18 13:20:29 +00:00
32e15b5432 Fixed a bug about -update_l 2008-06-17 17:06:25 +00:00
510ff61bf3 Reacted on harmless compiler warning 2008-06-17 13:38:44 +00:00
a14af44951 New options -map_l, -compare_l, -update_l, -extract_l 2008-06-17 12:15:16 +00:00
818de9128d Gave up the unusual parameter sequences of -extract and -paste_in 2008-06-14 18:44:42 +00:00
a15e636952 Correction about -extract / / 2008-06-14 14:04:30 +00:00
96d4e1fe92 Beautification of HTML man page 2008-06-14 10:52:16 +00:00
0d2e79ece8 New options -extract and -extract_single 2008-06-14 10:47:19 +00:00
26b3dcb1f5 New option -paste_in 2008-06-13 15:16:03 +00:00
0d407b63ad Corrections about restoring of directories 2008-06-12 11:26:31 +00:00
24ad7e5abe Proper handling of restore overwrite situations with directories and softlinks 2008-06-11 13:15:43 +00:00
d784d8f2e9 Removed outdated code parts 2008-06-10 10:02:02 +00:00
b61ca07f13 Removed outdated code parts 2008-06-10 09:42:50 +00:00
a7cfdfeadb Removed some outdated code parts 2008-06-09 16:57:07 +00:00
25c4acaf79 Allowing to restore from image with pending changes 2008-06-09 13:44:06 +00:00
daa98e8008 Fine tuning of directory attribute copying with -cp_rx 2008-06-06 10:37:13 +00:00
cada9d4ba3 Bug fix: -chmod unintentionally performed o-x as first operation 2008-06-06 08:34:02 +00:00
b595c7f836 New options -cpax, -cp_rx, cp_rax to restore files and trees from ISO to disk 2008-06-05 16:51:04 +00:00
440247dc98 Beautified HTML man page 2008-06-05 16:36:20 +00:00
fca0648618 Beautified documentation of -osirrox 2008-06-02 15:32:53 +00:00
2b55dd08fe Documented changes and release timestamp 2008-06-02 15:31:44 +00:00
df05ccc14c Version leap to 0.1.9 2008-06-02 15:29:46 +00:00
5aab9a006a Switched requirements to libisofs-0.6.6 2008-06-01 14:51:29 +00:00
e13615cff6 standalone version switch to libisofs-0.6.6 2008-06-01 14:50:21 +00:00
dc2664f753 Reacted on harmless compiler warning 2008-06-01 13:42:56 +00:00
27f8339527 Implemented oncatenation of split files during -cpx 2008-05-31 17:40:18 +00:00
b9f01ef512 New option -stream_recording 2008-05-27 20:14:51 +00:00
106ab1fb0c Improved access permission restauration by osirrox 2008-05-26 18:11:51 +00:00
8ad34a7c76 standalone version switch to libisofs-0.6.5 2008-05-26 18:09:02 +00:00
e69cd236df Some polishing with -cpx 2008-05-24 17:00:47 +00:00
751530f44e Bug fix: modifying to overwriteable target yielded unmountable results 2008-05-24 09:28:35 +00:00
6ba4b25045 Enabled osirrox of more file types, curbed with device files 2008-05-24 09:25:26 +00:00
69fd5ff008 New options -osirrox and -cpx 2008-05-22 21:08:26 +00:00
c410093711 Removed outdated code branch 2008-05-22 19:27:13 +00:00
53f462b406 First experiments of osirrox ISO-to-disk copying 2008-05-22 19:25:59 +00:00
ad33b43f99 Making Xorriso_prescan_args() safe against misunderstandings 2008-05-20 07:51:37 +00:00
a2c7c523aa Version leap to 0.1.7, requiring libburn-0.4.8 now 2008-05-18 08:48:07 +00:00
de589419da Bug fix: -findi operated on nodes which ceased existence shortly before 2008-05-18 08:21:48 +00:00
ddf698c1c4 Bug fix: -update_r and others did not work properly with relative paths 2008-05-15 19:20:59 +00:00
74da4d1749 New options -map and -map_single 2008-05-15 15:00:39 +00:00
c66cfdf72c Enabled a pacifier for compare_r 2008-05-15 09:20:05 +00:00
4866be0555 Uploaded forgotten enhancements 2008-05-14 17:48:27 +00:00
d7c4fadba3 Automatic fast format on attempt to write to unformatted DVD-RAM or BD-RE 2008-05-14 17:34:09 +00:00
b287c109c3 Required libburn version is now 0.4.7 (because of DVD-RAM BD-RE bug fix) 2008-05-14 17:31:43 +00:00
8abcf1c238 New -format types by_index and fast_by_index 2008-05-14 11:45:28 +00:00
073da62d73 Eat up leading dashes with command options, convert inner dashes to underscores 2008-05-13 18:08:53 +00:00
191f54eca2 Handled -list_format with non MMC drives 2008-05-13 18:06:04 +00:00
421693bb73 Prepared Xorriso_get_profile() for potential call without flag bit1 2008-05-13 15:38:17 +00:00
5f5b0c7016 Corrected strange behavior with non-ISO images on overwriteable media 2008-05-13 13:52:33 +00:00
6bc2d3e0a3 New option -list_formats 2008-05-13 11:58:43 +00:00
0f8e6f24db New -blank and -format modes as_needed 2008-05-12 19:36:23 +00:00
9b7451f893 Reacted on harmless compiler warning 2008-05-12 19:33:21 +00:00
fc8d4b8dbe New option -load session|track|sbsector|volid 2008-05-12 08:27:18 +00:00
96b808e0c5 New API call isoburn_set_msc1() 2008-05-12 08:13:16 +00:00
ad6585dbd7 Switched requirements to libburn-0.4.6 2008-05-12 08:07:59 +00:00
6b1eb7d79f Better behavior of update_r with no image present 2008-05-10 19:43:16 +00:00
eeab74920f Minor change in -update_r example 2008-05-10 19:41:52 +00:00
ca0179ad57 Adapted xorriso standalone production to new libburn cycle 0.4.7 2008-05-10 19:40:35 +00:00
36aa59297a Trying to better handle non ISO images on -indev 2008-05-09 20:54:58 +00:00
aeef058800 Updated details in web page 2008-05-09 20:50:07 +00:00
6b459b1cfb Updated man page examples 2008-05-08 20:54:51 +00:00
1d8e7620f0 Updated man page examples 2008-05-08 19:54:10 +00:00
cf103ac180 Adjusted reply of isoburn_disc_get_msc1() to eventual -rom_toc_scan result 2008-05-08 18:53:31 +00:00
3a4dc252f0 Mentioned new features 2008-05-08 15:24:59 +00:00
0e1f89d7c3 New TOC layout with volume id and sbsector=, new option -rom_toc_scan 2008-05-08 14:19:09 +00:00
7f1b8b07a6 Try to read header chain from alleged -ROM media (e.g. DVD+RW in -ROM drive) 2008-05-08 14:10:43 +00:00
252521f930 New format with -toc is more concise and shows volume id 2008-05-07 21:44:28 +00:00
e92b796215 New API function isoburn_read_iso_head() 2008-05-07 21:43:25 +00:00
585445ccc8 Making use of new isoburn_toc_* functions 2008-05-07 17:56:23 +00:00
e9171b5133 Reading emulated toc info from overwriteable media, new API isoburn_toc_*() 2008-05-07 17:54:55 +00:00
947bb33173 Removed some outdated ifdef cases 2008-05-07 07:14:10 +00:00
3eae8634cd Experiment for TOC on overwriteables: Keep a target_head copy of session #1 2008-05-06 14:45:49 +00:00
f830c30196 Calling isoburn_cancel_prepared_write() after failed isoburn_disc_write() 2008-05-06 08:44:28 +00:00
e412f65656 After formatting DVD-RW write 128 MB and close track to end Intermediate State 2008-05-05 21:03:28 +00:00
b7caaed66c Mentioned new options 2008-05-04 14:08:52 +00:00
8ffcf40fc4 New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m, 2008-05-04 13:36:15 +00:00
28d68a79a5 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-03 22:32:51 +00:00
1576983e17 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-03 15:11:58 +00:00
97c22f86a4 Working towards exclusion of user defined absolute paths and leaf patterns 2008-05-02 20:50:40 +00:00
f0b1cbddf3 Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-02 07:25:50 +00:00
19e803ba0d Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-01 17:41:58 +00:00
a4c4026446 Adjusted ds_read_block() to inofficial libisofs expectations 2008-05-01 13:55:09 +00:00
68d70682dd Clarified "best_effort" behavior 2008-05-01 13:52:43 +00:00
26eb9e659d Fine tuning of HTML man page appearance 2008-05-01 12:44:26 +00:00
c3048d6282 New option -error_behavior with a first occasion image_loading 2008-05-01 12:43:39 +00:00
1a2d3bc70c Documented changes and release timestamp 2008-04-28 13:57:26 +00:00
adeaf8b749 Version leap to 0.1.5 2008-04-28 12:34:39 +00:00
4d35893fd0 Updated libisofs version number in xorriso-standalone 2008-04-28 08:24:52 +00:00
b937313bb5 Displaying free space rather than "non-data" on drive aquiry and -toc 2008-04-20 11:15:07 +00:00
e1c46f5023 Mentioned stdin with option -path_list 2008-04-20 11:12:42 +00:00
1fbe8b8010 Corrected maximum age value for read buffer tiles 2008-04-20 11:11:42 +00:00
c7355e90aa Restricted ds_read_block() messages about unreadable data to actual data block 2008-04-18 18:45:13 +00:00
26b87932a0 Changed behavior of -commit_eject "" 2008-04-12 11:21:59 +00:00
1798a8441c Corrected behavior around image data read error 2008-04-09 11:48:14 +00:00
a6b8794c7c Made libisoburn and xorriso require libburn >= 0.4.4 2008-04-08 15:35:17 +00:00
56a1512732 Followed version leaps of libburn 2008-04-08 15:33:10 +00:00
1a1694d595 Removed some unused code 2008-04-07 20:13:01 +00:00
f7b656183e Added prototype of Xorriso_option_session_log() 2008-04-07 18:57:27 +00:00
e4e6635a71 Mentioned new features 2008-04-05 11:58:20 +00:00
1c4a14c8bd Reporting amount of non-data with -toc media summary 2008-04-05 11:20:56 +00:00
529959878a Mentioned that drives close full media automatically 2008-04-05 11:17:21 +00:00
9992f64247 New option -session_log 2008-04-03 20:41:00 +00:00
992996f902 Corrected GPL version 2008-04-02 07:44:31 +00:00
0e394bca6a Replaced single 128 kB cache tile by 32 tiles of 64 kB each 2008-04-01 21:31:25 +00:00
27cde95ca0 Adjusted documentation of -split_size 2008-03-31 08:13:54 +00:00
691955d387 New option -split_size, automated splitting of oversized files 2008-03-29 16:44:39 +00:00
3474a6a981 Published coordination rules for -cut_out, -compare and -update 2008-03-27 11:33:41 +00:00
7ea03c4079 Working towards coordination of -update and -cut_out 2008-03-27 10:34:06 +00:00
f9afb4a2f9 Gave up obsoleted macros and their code branches 2008-03-26 09:21:30 +00:00
6cfbe6fcd0 Working towards coordination of -compare, -update and -cut_out 2008-03-25 17:07:58 +00:00
052f992488 Correction about Linux mount which does not accept session= with DVD. 2008-03-22 19:44:59 +00:00
a44e7db9ea Bug fix: Implicite directory attribute copying with -cut_out was wrong 2008-03-22 13:05:25 +00:00
07b54e308a Working towards coordination of -compare, -update and -cut_out 2008-03-22 13:00:38 +00:00
b0ac8b67ae Better handling of attempt to manipulate non-existent ISO image 2008-03-20 21:20:19 +00:00
3309d84dc3 Changed messages of -update and -update_r 2008-03-20 19:23:25 +00:00
65d1be4310 Added -commit_eject all to an example which involves mount 2008-03-20 19:22:32 +00:00
c90cf38e70 Added a hint about alternating media with -update_r 2008-03-19 08:21:26 +00:00
50b4c033bf Bug fix: -as mkisofs -nopad must be -no-pad 2008-03-19 08:18:51 +00:00
3bc81537a2 Documented changes and release timestamp 2008-03-12 13:35:54 +00:00
5e06e3c724 Version leap to 0.1.3 2008-03-12 13:19:10 +00:00
47c72f3059 Updated description of -cut_out 2008-03-11 13:09:56 +00:00
2309710729 Sketched split file scheme with partno,totalparts,offset,count,totalsize 2008-03-11 11:35:04 +00:00
4f047c0cf6 Some polishing about -cut_out 2008-03-09 21:11:00 +00:00
ddc230bcda New option -cut_out 2008-03-09 14:22:14 +00:00
77300abd94 Example use case for -update_r "Incremental backup of a few directory trees" 2008-03-08 12:27:22 +00:00
a4b392ef70 Adapted to iso_tree_add_new_node() 2008-03-08 10:42:45 +00:00
e9c02ebcb1 Made -update_r and -compare_r obey disabling of -follow "mount" 2008-03-07 22:04:58 +00:00
005a317059 New -findx -exec action "empty_iso_dir", workaround for ticket 132 2008-03-07 18:24:26 +00:00
5982c8e6b3 New -findx -type "m" for active mount points 2008-03-07 07:53:59 +00:00
fb1de29cfa Re-arranged development download part 2008-03-07 07:52:17 +00:00
f760da0016 Fixed bug about non existing disk_path with -update_r 2008-03-06 17:48:02 +00:00
2c00ae34ae Fixed ticket #130 - libs linking - thanks eostapets 2008-03-06 13:31:00 +00:00
1fb2d8c392 New -find actions "rm" and "rm_r", silenced comparison results with -update* 2008-03-06 11:43:08 +00:00
5a72e86936 Some man page clarification 2008-03-05 17:35:28 +00:00
10a8ce35e8 Made -compare* and -update* obey -follow links (-follow mount still not correct) 2008-03-05 17:34:06 +00:00
f01488b574 Bug fix: -follow param did not work for symbolic links 2008-03-05 12:53:20 +00:00
5f5ebb1956 Improvements about -update_r and -compare_r 2008-03-04 18:08:14 +00:00
01983365aa Adapted to libisofs Vreixo 378 2008-03-04 17:41:43 +00:00
2528d00aba Made IsoDirIter workaround obey -temp_mem_limit 2008-03-02 20:15:36 +00:00
0dfc79bd4e Made -update_r and -find -exec update safe against IsoDirIter pitfalls 2008-03-02 17:28:38 +00:00
1fb2576e93 New option update_r, -find actions "update" and "add_missing" (not yet completed) 2008-03-01 15:13:13 +00:00
4200446ffe New option -update (not yet completed) 2008-02-29 20:09:12 +00:00
c41d072448 Better handling of disk to iso address mapping during compare runs 2008-02-28 21:54:20 +00:00
2d73d52f7a Micro bug fix ported from xorriso 2008-02-28 21:44:11 +00:00
460a04fb47 New option -compare_r, new -findx -exec in_iso, -exec no_in_iso 2008-02-28 21:42:37 +00:00
388996150e 2008-02-28 21:22:50 +00:00
869c8090f4 Mentioned capability to write DVD+R/DL. 2008-02-28 13:34:34 +00:00
41ea389118 Added new action "compare" to -find 2008-02-28 13:27:44 +00:00
1aac97caf3 Installed pacifier for data reading 2008-02-27 18:58:21 +00:00
3f039e4b08 New option -compare 2008-02-26 21:45:28 +00:00
dd4dd5e1e8 Avoided to read content of non-regular files 2008-02-26 21:28:51 +00:00
e51ace31b1 Updated changelog 2008-02-25 20:46:26 +00:00
55a70f1463 Adaptions of -as mkisofs and -as cdrecord to enable full use by scdbackup 2008-02-25 20:44:41 +00:00
cc3b6f75db Adapted to libisofs 362 from Vreixo bzr 2008-02-25 17:43:16 +00:00
d8b0d85ad4 Wrong description text 2008-02-23 13:19:03 +00:00
f717634242 Various bugs and deviations around -as mkisofs -print-size 2008-02-23 12:56:18 +00:00
584aeb7dab Directed -as mkisofs -print-size to real stdout 2008-02-23 11:40:42 +00:00
d3cdbc2bfb Made libisofs version leap in xorriso-standalone 2008-02-23 10:30:32 +00:00
69056e7a2b New option -errfile_log 2008-02-23 10:28:58 +00:00
e947bdece4 Testwise implementation of libisofs.0.6.3 features 2008-02-23 10:27:19 +00:00
fa4b90c968 Changed libisofs requirements to 0.6.3 2008-02-23 10:17:04 +00:00
5fe8ac9f7f Producing ERRFILE messages where appropriate 2008-02-22 11:49:57 +00:00
1f01e954d4 Updated -help text 2008-02-21 21:11:40 +00:00
212fa7ba72 Introduced new severity ERRFILE 2008-02-21 20:46:51 +00:00
25a68fcf77 Implemented a more reasonable solution for drive truncation with regular files 2008-02-21 18:52:52 +00:00
43ea3bdef2 New option -publisher 2008-02-21 13:01:34 +00:00
aaeb1204b7 New option -as mkisofs emulates a narrow set of mkisofs gestures 2008-02-20 23:48:08 +00:00
df83afc55b Revoked inflation of file type characters to words 2008-02-20 23:29:46 +00:00
be272a685b Improved -as cdrecord 2008-02-19 21:24:05 +00:00
08c68166f3 New option -as cdrecord emulates a narrow set of cdrecord gestures 2008-02-19 18:45:17 +00:00
4a8f206aa2 Improved report format 2008-02-19 18:41:12 +00:00
40af376f57 Bug fix: -report_about higher than NOTE did not report at all 2008-02-18 21:04:55 +00:00
20dec92aab Mentioned better directory attribute copying 2008-02-16 21:17:22 +00:00
c0fc786875 Transfering properties from disk to implicit directories in image path 2008-02-16 20:26:21 +00:00
655d7a2463 Adjusted CREDITS text 2008-02-16 20:24:40 +00:00
87053caf26 Updated changelog 2008-02-15 21:59:49 +00:00
7720153674 Changed pacifier text for 0 nodes read from blank image 2008-02-15 21:21:14 +00:00
db9c0f7e0d Corrected according to content of libisofs/COPYRIGHT 2008-02-15 21:20:11 +00:00
5163a66a02 Version leap to 0.1.1 2008-02-15 21:19:24 +00:00
26 changed files with 12176 additions and 2133 deletions

View File

@ -1,16 +1,16 @@
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
libisofs (if included) is Copyright (C) 2007-2008 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
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
it under the terms of the GNU General Public License version 2 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

View File

@ -16,7 +16,9 @@ libisoburn_libisoburn_la_SOURCES = \
libisoburn/isofs_wrap.c \
libisoburn/libisoburn.h \
version.h
libisoburn_libisoburn_la_LIBADD = \
-lisofs \
-lburn
libinclude_HEADERS = \
libisoburn/libisoburn.h

31
README
View File

@ -1,9 +1,10 @@
------------------------------------------------------------------------------
libburnia-project.org
http:libburnia-project.org
------------------------------------------------------------------------------
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.2.0.pl00.tar.gz
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2.
------------------------------------------------------------------------------
@ -25,17 +26,18 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
- libburn.so.4 , version libburn-0.4.2 or higher
- libisofs.so.6 , version libisofs-0.6.2 or higher
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
- libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.
Obtain libisoburn-0.1.0.tar.gz, take it to a directory of your choice and do:
Obtain libisoburn-0.2.0.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.1.0.tar.gz
cd libisoburn-0.1.0
tar xzf libisoburn-0.2.0.pl00.tar.gz
cd libisoburn-0.2.0
Within that directory execute:
@ -44,7 +46,7 @@ Within that directory execute:
Then become superuser and execute
make install
which will make available libisoburn.so.1 .
which will make available libisoburn.so.1 and program xorriso.
For the API concepts and calls see
./libisoburn/libisoburn.h
@ -53,12 +55,17 @@ as well as
/usr/lib/libburn/libburn.h
xorriso
libisoburn includes a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and
users.
After installation its documentation is available via
man xorriso
users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation.
The libisoburn installation described above produces a dynamically linked
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
After installation documentation is available via
man xorriso
Drives and Disk File Objects
@ -97,7 +104,7 @@ on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
This program is not installed systemwide but stays in the installation
directory of the xorriso tarball as test/compare_file . Usually it is
run as -exec payload of a find command. It demands at least three arguments:
The path of the first file to compare, the prefix1 to be cut off from path
The path of the file to compare, the prefix1 to be cut off from path
and the prefix2 which gets prepended afterwards to obtain the path of the
second file to compare.
As further argument there can be -no_ctime which suppresses the comparison

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.0.1], [http://libburnia-project.org])
AC_INIT([libisoburn], [0.2.0], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -7,15 +7,21 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
dnl The API version codes are now defined in libisoburn/libisoburn.h
dnl Hint: Search list for version code aspects:
dnl /AC_INT(
dnl /ISOBURN_.*_VERSION
dnl /LT_.*
dnl /LIB.*_REQUIRED
dnl The API version codes are defined in libisoburn/libisoburn.h
dnl #define isoburn_header_version_*
dnl configure.ac only rules the libtool revision numbering about
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=0
ISOBURN_MICRO_VERSION=1
ISOBURN_MINOR_VERSION=2
ISOBURN_MICRO_VERSION=0
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -24,12 +30,18 @@ AC_SUBST(ISOBURN_MICRO_VERSION)
dnl AC_SUBST(ISOBURN_VERSION)
dnl Libtool versioning
dnl Generate libisoburn.so.1.0.0
dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE
dnl
dnl ts A80622
dnl This is the release version 0.2.0 = libisoburn.so.1.9.0
dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl
dnl SONAME = 10 - 9 = 1 . Library name = libburn.so.1.9.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=1
LT_AGE=0
LT_CURRENT=10
LT_AGE=9
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -83,15 +95,12 @@ AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , REA
AC_SUBST(READLINE_DEF)
dnl >>> How to check for proper library versions ?
dnl >>> would need libburn-0.4.2 or higher .so.4
dnl >>> would need libisofs-0.6.1 or higher .so.6
AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.4.2
LIBISOFS_REQUIRED=0.6.1
LIBBURN_REQUIRED=0.4.8
LIBISOFS_REQUIRED=0.6.6
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,8 @@
/*
data source for libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
*/
#include <stdlib.h>
@ -28,133 +29,159 @@
/* Cached reading of image tree data */
/* Current implementation : single tile 128 kB */
/* Multi tile: 32 * 64 kB */
/* powers of 2 only ! */
#define Libisoburn_cache_blockS 64
/* The size of a single tile.
Powers of 2 only ! Less than 16 makes not much sense.
*/
#define Libisoburn_tile_blockS 32
struct isoburn_cached_drive {
struct burn_drive *drive;
char cache_data[Libisoburn_cache_blockS * 2048];
uint32_t cache_lba;
uint32_t last_error_lba;
uint32_t last_aligned_error_lba;
int cache_hits;
};
/* The number of tiles in the cache
*/
#define Libisoburn_cache_tileS 32
/* Debugging only: This reports cache loads on stderr.
#define Libisoburn_read_cache_reporT 1
*/
#define Libisoburn_use_read_cachE
#ifdef Libisoburn_use_read_cachE
int
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
struct isoburn_cache_tile {
char cache_data[Libisoburn_tile_blockS * 2048];
uint32_t cache_lba;
uint32_t last_error_lba;
uint32_t last_aligned_error_lba;
int cache_hits;
int age;
};
struct isoburn_cached_drive {
struct burn_drive *drive;
struct isoburn_cache_tile tiles[Libisoburn_cache_tileS];
int current_age;
};
#define Libisoburn_max_agE 2000000000
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag);
int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
{
int ret;
int ret, i, oldest, oldest_age;
struct burn_drive *d;
off_t count;
uint32_t aligned_lba;
char msg[80];
struct isoburn_cache_tile *tiles;
struct isoburn_cached_drive *icd;
if(src == NULL || buffer == NULL)
return -1;
/* It is not required by the specs of libisofs but implicitely assumed
by its current implementation that a data source read result <0 is
a valid libisofs error code.
*/
return ISO_NULL_POINTER;
icd = (struct isoburn_cached_drive *) src->data;
d = (struct burn_drive*) icd->drive;
tiles = (struct isoburn_cache_tile *) icd->tiles;
aligned_lba= lba & ~(Libisoburn_cache_blockS - 1);
if(aligned_lba == icd->cache_lba && icd->cache_lba != 0xffffffff) {
(icd->cache_hits)++;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
icd->cache_lba= 0xffffffff; /* invalidate cache */
if(icd->last_aligned_error_lba == aligned_lba) {
for(i=0; i<Libisoburn_cache_tileS; i++) {
if(aligned_lba == tiles[i].cache_lba && tiles[i].cache_lba != 0xffffffff) {
(tiles[i].cache_hits)++;
memcpy(buffer, tiles[i].cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
ds_inc_age(icd, i, 0);
return 1;
}
}
/* find oldest tile */
oldest_age= Libisoburn_max_agE;
oldest= 0;
for(i= 0; i<Libisoburn_cache_tileS; i++) {
if(tiles[i].cache_lba == 0xffffffff) {
oldest= i;
break;
}
if(tiles[i].age<oldest_age) {
oldest_age= tiles[i].age;
oldest= i;
}
}
tiles[oldest].cache_lba= 0xffffffff; /* invalidate cache */
if(tiles[oldest].last_aligned_error_lba == aligned_lba) {
ret = 0;
} else {
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
(char *) icd->cache_data,
Libisoburn_cache_blockS * 2048, &count, 0);
(char *) tiles[oldest].cache_data,
Libisoburn_tile_blockS * 2048, &count, 2);
}
if (ret <= 0 ) {
icd->last_aligned_error_lba = aligned_lba;
tiles[oldest].last_aligned_error_lba = aligned_lba;
/* Read-ahead failure ? Try to read 2048 directly. */
if(icd->last_error_lba == lba)
if(tiles[oldest].last_error_lba == lba)
ret = 0;
else
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
2048, &count, 0);
if (ret > 0)
return 1;
icd->last_error_lba = lba;
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
return -1;
tiles[oldest].last_error_lba = lba;
/* It is not required by the specs of libisofs but implicitely assumed
...
But it is not possible to ignore FAILURE.
libisofs insists in original error codes, i.e. libisoburn cannot
change severity FAILURE associated with ISO_FILE_READ_ERROR.
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
and not for image reading.
This is quite wrong, although the error message text is unclear
enough to make it appear plausible.
*/
ret= ISO_FILE_CANT_WRITE;
if(ret >= 0)
ret = -1;
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
return ret;
}
#ifdef Libisoburn_read_cache_reporT
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
icd->cache_hits, aligned_lba, (int) count);
fprintf(stderr, "Tile %2.2d : After %3d hits, new load from %8x , count= %d\n",
oldest, tiles[oldest].cache_hits, aligned_lba, (int) count);
#endif
icd->cache_lba= aligned_lba;
icd->cache_hits= 1;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
tiles[oldest].cache_lba= aligned_lba;
tiles[oldest].cache_hits= 1;
ds_inc_age(icd, oldest, 0);
memcpy(buffer, tiles[oldest].cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
#else /* Libisoburn_use_read_cachE */
static int
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
{
int ret;
struct burn_drive *d;
off_t count;
if(src == NULL || buffer == NULL)
return -1;
d = (struct burn_drive*) ((struct isoburn_cached_drive *) src->data)->drive;
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
2048, &count, 0);
if (ret <= 0 )
return -1;
return 1;
}
#endif /* ! Libisoburn_use_read_cachE */
static int
ds_open(IsoDataSource *src)
static int ds_open(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static int
ds_close(IsoDataSource *src)
static int ds_close(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static void
ds_free_data(IsoDataSource *src)
static void ds_free_data(IsoDataSource *src)
{
/* nothing to do */;
if(src->data != NULL)
@ -162,11 +189,11 @@ ds_free_data(IsoDataSource *src)
src->data= NULL;
}
IsoDataSource *
isoburn_data_source_new(struct burn_drive *d)
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
{
IsoDataSource *ret;
struct isoburn_cached_drive *icd= NULL;
int i;
if (d==NULL)
return NULL;
@ -181,10 +208,30 @@ isoburn_data_source_new(struct burn_drive *d)
ret->free_data = ds_free_data;
ret->data = icd;
icd->drive = d;
icd->cache_lba = 0xffffffff;
icd->cache_hits = 0;
icd->last_error_lba = 0xffffffff;
icd->last_aligned_error_lba = 0xffffffff;
icd->current_age= 0;
for(i= 0; i<Libisoburn_cache_tileS; i++) {
icd->tiles[i].cache_lba = 0xffffffff;
icd->tiles[i].cache_hits = 0;
icd->tiles[i].last_error_lba = 0xffffffff;
icd->tiles[i].last_aligned_error_lba = 0xffffffff;
icd->tiles[i].age= 0;
}
return ret;
}
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
{
int i;
(icd->current_age)++;
if(icd->current_age>=Libisoburn_max_agE) { /* reset all ages (allow waste) */
for(i= 0; i<Libisoburn_cache_tileS; i++)
(icd->tiles)[i].age= 0;
icd->current_age= 1;
}
(icd->tiles)[idx].age= icd->current_age;
return(1);
}

View File

@ -6,8 +6,8 @@
/*
Class core of libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
*/
/* ( derived from stub generated by CgeN on Sat, 01 Sep 2007 12:04:36 GMT ) */
@ -37,10 +37,61 @@
#include "isoburn.h"
/* No more: version numbers out of configure.ac
major.minor.micro now comes from libisoburn.h
#include "../version.h"
/* Default values for application provided msgs_submit methods.
To be attached to newly aquired drives.
*/
int (*libisoburn_default_msgs_submit)
(void *handle, int error_code, char msg_text[],
int os_errno, char severity[], int flag)= NULL;
void *libisoburn_default_msgs_submit_handle= NULL;
int libisoburn_default_msgs_submit_flag= 0;
/* ----------------------- isoburn_toc_entry ---------------------- */
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
struct isoburn_toc_entry *boss, int flag)
{
struct isoburn_toc_entry *o, *s;
*objpt= o= (struct isoburn_toc_entry *)
malloc(sizeof(struct isoburn_toc_entry));
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for isoburn toc entry",
0, "FATAL", 0);
return(-1);
}
o->session= 0;
o->track_no= 0;
o->start_lba= -1;
o->track_blocks= 0;
o->next= NULL;
if(boss!=NULL) {
for(s= boss; s->next!=NULL; s= s->next);
s->next= o;
}
return(1);
}
/* @param flag bit0= delete all subordinates too
*/
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag)
{
if(*o==NULL)
return(0);
if(flag&1)
isoburn_toc_entry_destroy(&((*o)->next), flag);
free((char *) (*o));
*o= NULL;
return(1);
}
/* --------------------- end isoburn_toc_entry -------------------- */
/* -------------------------- isoburn ----------------------- */
@ -59,30 +110,31 @@ int isoburn_new(struct isoburn **objpt, int flag)
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", 0);
return(-1);
}
o->drive= NULL;
o->emulation_mode= 0;
o->min_start_byte= 0;
o->nwa= 0;
#ifdef Libisoburn_no_fifO
o->fabricated_msc1= -1;
o->zero_nwa= Libisoburn_overwriteable_starT;
o->min_start_byte= o->zero_nwa * 2048;
o->nwa= o->zero_nwa;
o->truncate= 0;
o->iso_source= NULL;
#else
o->fifo= NULL;
#endif
o->wrote_well= -1;
o->fabricated_disc_status= BURN_DISC_UNREADY;
for(i=0;i<65536;i++)
o->toc= NULL;
o->wrote_well= -1;
for(i=0;i<Libisoburn_target_head_sizE;i++)
o->target_iso_head[i]= 0;
o->image= NULL;
o->read_pacifier= NULL;
o->read_pacifier_handle= NULL;
o->msgs_submit= NULL;
o->msgs_submit_handle= NULL;
o->msgs_submit_flag= 0;
o->prev= NULL;
o->next= NULL;
ret= iso_image_new("ISOIMAGE", &o->image);
@ -119,15 +171,10 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
if(o->image!=NULL)
iso_image_unref(o->image);
#ifdef Libisoburn_no_fifO
if(o->toc!=NULL)
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
if(o->iso_source!=NULL)
burn_source_free(o->iso_source);
#else
if(o->fifo!=NULL)
burn_source_free(o->fifo);
#endif /* ! Libisoburn_no_fifO */
free((char *) o);
*objpt= NULL;
@ -261,28 +308,65 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
return(0);
}
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
int os_errno, char severity[], int flag)
{
int ret, use_drive_method= 0;
if(o!=NULL)
if(o->msgs_submit!=NULL)
use_drive_method= 1;
if(use_drive_method) {
ret= o->msgs_submit(o->msgs_submit_handle, error_code, msg_text, os_errno,
severity, o->msgs_submit_flag);
return(ret);
}
if(libisoburn_default_msgs_submit != NULL) {
ret= libisoburn_default_msgs_submit(libisoburn_default_msgs_submit_handle,
error_code, msg_text, os_errno, severity,
libisoburn_default_msgs_submit_flag);
return(ret);
}
/* Fallback: use message queue of libburn */
burn_msgs_submit(error_code, msg_text, os_errno, severity, NULL);
return(1);
}
static
int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
struct burn_disc **disc,
struct isoburn_imgen_opts *opts, int new_img)
{
struct burn_source *wsrc;
struct burn_session *session;
struct burn_track *track;
struct isoburn *o;
struct isoburn *in_o, *out_o;
IsoWriteOpts *wopts= NULL;
enum burn_disc_status state;
int ret, fifo_chunks;
int ret, fifo_chunks, lba, nwa;
ret= isoburn_find_emulator(&o, d, 0);
if(ret<0 || o==NULL)
ret= isoburn_find_emulator(&in_o, in_d, 0);
if(ret<0 || in_o==NULL)
{ret= -1; goto ex;}
o->wrote_well= 0; /* early end will be registered as failure */
ret= isoburn_find_emulator(&out_o, out_d, 0);
if(ret<0 || out_o==NULL)
{ret= -1; goto ex;}
/* early end will be registered as failure */
in_o->wrote_well= out_o->wrote_well= 0;
state = isoburn_disc_get_status(d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
&& (state != BURN_DISC_FULL || ! new_img)) {
/* unsuitable status */
burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
state = isoburn_disc_get_status(in_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
state != BURN_DISC_FULL) {
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
state = isoburn_disc_get_status(out_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
isoburn_msgs_submit(out_o, 0x00060000, "Unsuitable target media state",
0, "FAILURE", 0);
{ret= -2; goto ex;}
}
@ -319,34 +403,28 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
iso_write_opts_set_default_uid(wopts, opts->uid);
iso_write_opts_set_default_gid(wopts, opts->gid);
iso_write_opts_set_output_charset(wopts, opts->output_charset);
#ifdef Libisoburn_no_fifO
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
#endif /* Libisoburn_no_fifO */
if (new_img) {
iso_write_opts_set_ms_block(wopts, 0);
iso_write_opts_set_appendable(wopts, 0);
iso_write_opts_set_overwrite_buf(wopts, NULL);
} else {
int lba, nwa;
ret = isoburn_disc_track_lba_nwa(d, NULL, 0, &lba, &nwa);
if (ret != 1) {
burn_msgs_submit(0x00060000, "Cannot determine next writeable address", 0,
"FAILURE", NULL);
{ret= -3; goto ex;}
}
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
/* invalid nwa */
burn_msgs_submit(0x00060000, "Encountered 0 as next writeable address", 0,
"FAILURE", NULL);
{ret= -4; goto ex;}
}
iso_write_opts_set_ms_block(wopts, nwa);
iso_write_opts_set_appendable(wopts, 1);
iso_write_opts_set_overwrite_buf(wopts, o->target_iso_head);
}
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
if (ret != 1) {
isoburn_msgs_submit(out_o, 0x00060000,
"Cannot determine next writeable address", 0, "FAILURE", 0);
{ret= -3; goto ex;}
}
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
isoburn_msgs_submit(out_o, 0x00060000,
"Encountered 0 as next writeable address of appendable",
0, "FAILURE", 0);
{ret= -4; goto ex;}
}
iso_write_opts_set_ms_block(wopts, nwa);
opts->effective_lba= nwa;
iso_write_opts_set_appendable(wopts, !new_img);
iso_write_opts_set_overwrite_buf(wopts,
nwa>0 ? out_o->target_iso_head : NULL);
ret = iso_image_create_burn_source(in_o->image, wopts, &wsrc);
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
{ret= -1; goto ex;}
@ -354,35 +432,20 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
/* TODO check return values for failure. propertly clean-up on error */
#ifdef Libisoburn_no_fifO
o->iso_source= wsrc;
#else
o->fifo = burn_fifo_source_new(wsrc, 2048, fifo_chunks, 0);
burn_source_free(wsrc);
if (o->fifo == NULL) {
burn_msgs_submit(0x00060000, "Cannot attach fifo", 0, "FATAL", NULL);
{ret= -1; goto ex;}
}
#endif /* ! Libisoburn_no_fifO */
out_o->iso_source= wsrc;
*disc = burn_disc_create();
session = burn_session_create();
burn_disc_add_session(*disc, session, BURN_POS_END);
track = burn_track_create();
#ifdef Libisoburn_no_fifO
burn_track_set_source(track, o->iso_source);
#else
burn_track_set_source(track, o->fifo);
#endif /* ! Libisoburn_no_fifO */
burn_track_set_source(track, out_o->iso_source);
burn_session_add_track(session, track, BURN_POS_END);
/* give up local references */
burn_track_free(track);
burn_session_free(session);
o->wrote_well= -1; /* neutral */
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */
ret= 1;
ex:
if(wopts!=NULL)
@ -390,39 +453,23 @@ ex:
return ret;
}
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts)
{
return isoburn_prepare_disc_aux(d, disc, opts, 0);
return isoburn_prepare_disc_aux(d, d, disc, opts, 0);
}
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive)
{
int ret;
struct isoburn *in_o, *out_o;
ret= isoburn_prepare_disc_aux(d, disc, opts, 1);
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 1);
if (ret<=0)
return ret;
#ifdef Libisoburn_no_fifO
/* Hand over source reference for optional fifo status inquiry */
if(out_drive==NULL)
return 1;
ret= isoburn_find_emulator(&out_o, out_drive, 0);
if(ret<0 || out_o==NULL)
return 1;
ret= isoburn_find_emulator(&in_o, d, 0);
if(ret<0 || in_o==NULL)
return 1; /* then without fifo status inquiry */
if(out_o->iso_source!=NULL)
burn_source_free(out_o->iso_source);
out_o->iso_source= in_o->iso_source;
in_o->iso_source= NULL;
#endif /* Libisoburn_no_fifO */
return 1;
}
@ -512,8 +559,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
if(o==NULL) {
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for read options", 0, "FATAL", 0);
return(-1);
}
o->norock= 0;
@ -649,9 +696,9 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", 0);
return(-1);
}
o->level= 2;
@ -677,6 +724,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->gid= 0;
o->output_charset= 0;
o->fifo_size= 4*1024*1024;
o->effective_lba= -1;
return(1);
}
@ -836,3 +884,10 @@ 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)
{
*lba= o->effective_lba;
return(1);
}

View File

@ -10,13 +10,33 @@
#define Isoburn_includeD
/* <<< transition macro */
#define Libisoburn_no_fifO 1
/* for uint8_t */
#include <stdint.h>
/* For emulated TOC of overwriteable media.
Provides minimal info for faking a struct burn_toc_entry.
*/
struct isoburn_toc_entry {
int session;
int track_no; /* point */
int start_lba;
int track_blocks;
struct isoburn_toc_entry *next;
};
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
struct isoburn_toc_entry *boss, int flag);
/* @param flag bit0= delete all subordinates too
*/
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
/* Size of target_iso_head which is to be written during
isoburn_activate_session()
*/
#define Libisoburn_target_head_sizE (32*2048)
struct isoburn {
@ -36,22 +56,34 @@ struct isoburn {
struct isoburn *next;
/* If >= 0, this address is used as reply for isoburn_disc_get_msc1()
*/
int fabricated_msc1;
/* The nwa to be used for a first session on the present kind of overwriteable
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
*/
int zero_nwa;
/* Start address as given by image examination (bytes, not blocks) */
off_t min_start_byte;
/* Aligned start address to be used for processing (counted in blocks) */
int nwa;
/* Truncate to .nwa an eventual regular file serving as output drive */
int truncate;
/* Eventual freely fabricated isoburn_disc_get_status().
BURN_DISC_UNREADY means that normally emulated status is in effect.
BURN_DISC_UNREADY means that this variable is disabled
and normally emulated status is in effect.
*/
enum burn_disc_status fabricated_disc_status;
#ifndef Libisoburn_no_fifO
/* The fifo which is installed between track and libisofs burn_source
*/
struct burn_source *fifo;
#endif /* ! Libisoburn_no_fifO */
/* Eventual emulated table of content read from the chain of ISO headers
on overwriteable media.
*/
struct isoburn_toc_entry *toc;
/* Indicator wether the most recent burn run worked :
-1 = undetermined, ask libburn , 0 = failure , 1 = success
@ -62,17 +94,15 @@ struct isoburn {
/* Buffered ISO head from media (should that become part of
ecma119_read_opts ?) */
uint8_t target_iso_head[65536];
uint8_t target_iso_head[Libisoburn_target_head_sizE];
/* Libisofs image context */
IsoImage *image;
#ifdef Libisoburn_no_fifO
/* The burn source which transfers data from libisofs to libburn.
It has its own fifo.
*/
struct burn_source *iso_source;
#endif /* Libisoburn_no_fifO */
/* For iso_tree_set_report_callback() */
int (*read_pacifier)(IsoImage*, IsoFileSource*);
@ -80,6 +110,12 @@ struct isoburn {
/* For iso_image_attach_data() */
void *read_pacifier_handle;
/* An application provided method to immediately deliver messages */
int (*msgs_submit)(void *handle, int error_code, char msg_text[],
int os_errno, char severity[], int flag);
void *msgs_submit_handle; /* specific to application method */
int msgs_submit_flag; /* specific to application method */
};
@ -138,6 +174,11 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
int isoburn_find_emulator(struct isoburn **pt,
struct burn_drive *drive, int flag);
/* Deliver an event message. Either via a non-NULL o->msgs_submit() method
or via burn_msgs_submit() of libburn.
*/
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
int os_errno, char severity[], int flag);
/** Set the start address for an emulated add-on session. The value will
be rounded up to the alignment necessary for the media. The aligned
@ -315,6 +356,79 @@ struct isoburn_imgen_opts {
*/
int fifo_size;
/** Output value: Block address of session start as evaluatedfrom 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;
};
/* Alignment for session starts on overwriteable media.
(Increased from 16 to 32 blocks for aligning to BD-RE clusters.)
*/
#define Libisoburn_nwa_alignemenT 32
/* Alignment for outer session scanning with -ROM drives.
(E.g. my DVD-ROM drive shows any DVD type as 0x10 "DVD-ROM" with
more or less false capacity and TOC.)
*/
#define Libisoburn_toc_scan_alignemenT 16
/* Maximum gap to be bridged during a outer TOC scan. Gaps appear between the
end of a session and the start of the next session.
The longest gap found so far was about 38100 after the first session of a
DVD-R.
*/
#define Libisoburn_toc_scan_max_gaP 65536
/* Creating a chain of image headers which form a TOC:
The header of the first session is written after the LBA 0 header.
So it persists and can give the end of its session. By help of
Libisoburn_nwa_alignemenT it should be possible to predict the start
of the next session header.
The LBA 0 header is written by isoburn_activate_session() already
with the first session. So the media is mountable.
A problem arises with DVD-RW in Intermediate State. They cannot be
written by random access before they were written sequentially.
In this case, no copy of the session 1 header is maintained and no TOC
will be possible. Thus writing begins sequentially at LBA 0.
*/
#define Libisoburn_overwriteable_starT \
((off_t) (Libisoburn_target_head_sizE/2048))
/* Wrappers for emulation of TOC on overwriteable media */
struct isoburn_toc_track {
/* Either track or toc_entry are supposed to be NULL */
struct burn_track *track;
struct isoburn_toc_entry *toc_entry;
};
struct isoburn_toc_session {
/* Either session or tracks and toc_entry are supposed to be NULL */
struct burn_session *session;
struct isoburn_toc_track **track_pointers;
int track_count;
struct isoburn_toc_entry *toc_entry;
};
struct isoburn_toc_disc {
/* Either disc or sessions and toc are supposed to be NULL */
struct burn_disc *disc;
struct isoburn_toc_session *sessions; /* storage array */
struct isoburn_toc_session **session_pointers; /* storage array */
struct isoburn_toc_track *tracks; /* storage array */
struct isoburn_toc_track **track_pointers; /* storage array */
int session_count;
int track_count;
struct isoburn_toc_entry *toc;
};
#endif /* Isoburn_includeD */

View File

@ -6,12 +6,13 @@
/*
libisofs related functions of libisoburn.
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifndef Xorriso_standalonE
@ -26,7 +27,6 @@
#endif /* Xorriso_standalonE */
#include "isoburn.h"
#include "libisoburn.h"
@ -112,29 +112,29 @@ int isoburn_read_image(struct burn_drive *d,
struct isoburn_read_opts *read_opts,
IsoImage **image)
{
int ret, int_num;
int ret, int_num, dummy;
IsoReadOpts *ropts= NULL;
IsoReadImageFeatures *features= NULL;
uint32_t ms_block;
char msg[160];
enum burn_disc_status status= BURN_DISC_BLANK;
IsoDataSource *ds= NULL;
struct isoburn *o= NULL;
if(read_opts==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: read_opts==NULL",
0, "FATAL", NULL);
return(-1);
}
if(d != NULL) {
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return 0;
status = isoburn_disc_get_status(d);
}
if(read_opts==NULL) {
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: read_opts==NULL",
0, "FATAL", 0);
return(-1);
}
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
create_blank_image:;
/*
* Blank disc, we create a new image without files.
*/
@ -142,9 +142,9 @@ int isoburn_read_image(struct burn_drive *d,
if (d == NULL) {
/* New empty image without relation to a drive */
if (image==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", NULL);
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", 0);
return -1;
}
/* create a new image */
@ -170,9 +170,9 @@ int isoburn_read_image(struct burn_drive *d,
}
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
burn_msgs_submit(0x00060000,
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: incorrect disc status",
0, "FATAL", NULL);
0, "FATAL", 0);
return -4;
}
@ -182,6 +182,12 @@ int isoburn_read_image(struct burn_drive *d,
if (ret <= 0)
return -2;
ms_block= int_num;
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
if (ret <= 0) {
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
goto create_blank_image;
}
/* create the data source */
ret = iso_read_opts_new(&ropts, 0);
@ -200,6 +206,11 @@ int isoburn_read_image(struct burn_drive *d,
iso_read_opts_set_default_uid(ropts, read_opts->uid);
iso_read_opts_set_default_gid(ropts, read_opts->gid);
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
/* <<< experimental API call of libisofs
iso_read_opts_set_error_behavior(ropts, 1);
*/
ds = isoburn_data_source_new(d);
iso_image_attach_data(o->image, o->read_pacifier_handle,
isoburn_idle_free_function);
@ -225,15 +236,6 @@ int isoburn_read_image(struct burn_drive *d,
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
read_opts->hasElTorito = iso_read_image_features_has_eltorito(features);
read_opts->size = iso_read_image_features_get_size(features);
#ifdef NIX
read_opts->hasRR = features->hasRR;
read_opts->hasJoliet = features->hasJoliet;
read_opts->hasIso1999 = features->hasIso1999;
read_opts->hasElTorito = features->hasElTorito;
read_opts->size = features->size;
#endif
iso_read_image_features_destroy(features);
return 1;
}
@ -246,15 +248,15 @@ int isoburn_attach_image(struct burn_drive *d, IsoImage *image)
int ret;
struct isoburn *o;
if (image == NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_attach_image: image==NULL",
0, "FATAL", NULL);
return -1;
}
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return 0;
if (image == NULL) {
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_attach_image: image==NULL",
0, "FATAL", 0);
return -1;
}
if(o->image != NULL)
iso_image_unref(o->image);
o->image = image;
@ -276,11 +278,13 @@ int isoburn_activate_session(struct burn_drive *drive)
if (o->emulation_mode != 1)
return 1; /* don't need to activate session */
if (o->fabricated_disc_status != BURN_DISC_APPENDABLE)
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
o->zero_nwa > 0)))
return 1;
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
32*2048, 1);
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
Libisoburn_target_head_sizE, 1);
return ret;
}
@ -300,9 +304,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
struct ecma119_pri_vol_desc *pvm;
if(o==NULL) {
burn_msgs_submit(0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", NULL);
isoburn_msgs_submit(NULL, 0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", 0);
return -1;
}
@ -311,7 +315,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
/* we can assume 0 as start block for image */
/* TODO what about ms? where we validate valid iso image in ms disc? */
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
sizeof(o->target_iso_head), &data_count, 2);
(off_t) Libisoburn_target_head_sizE, &data_count, 2);
/* an error means an empty disc */
if (ret <= 0) {
@ -321,7 +325,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
/* check first 64K. If 0's, the disc is treated as a blank disc, and thus
overwritten without extra check. */
i = sizeof(o->target_iso_head);
i = Libisoburn_target_head_sizE;
while (i && !o->target_iso_head[i-1])
--i;
@ -351,7 +355,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
/* empty image */
isoburn_set_start_byte(o, (off_t) 0, 0);
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
o->fabricated_disc_status= BURN_DISC_BLANK;
} else {
/* treat any disc in an unknown format as full */

View File

@ -62,12 +62,12 @@ libburn demands rw-permissions to drive device file resp. file object.
If the input drive provides a suitable ISO RockRidge image, then its tree
may be loaded into memory and can then be manipulated by libisofs API calls.
The loading is done by isoburn_read_image() under control of
struct isoburn_read_opts which the application obtains from libisoburn.
It may be manipulated by the family of isoburn_ropt_set_*() functions.
struct isoburn_read_opts which the application obtains from libisoburn
and manipulates by the family of isoburn_ropt_set_*() functions.
Writing of result images is controlled by libisofs related parameters
in a struct isoburn_imgen_opts which the application obtains from libisoburn.
It may be manipulated by the family of isoburn_igopt_set_*() functions.
in a struct isoburn_imgen_opts which the application obtains from libisoburn
and manipulates by the family of isoburn_igopt_set_*() functions.
All multi-session aspects are handled by libisoburn according to these
settings. The application does not have to analyze media state and write
@ -164,12 +164,19 @@ int isoburn_is_compatible(int major, int minor, int micro, int flag);
Pare numbers indicate a version with frozen API. I.e. you can
rely on the same set of features to be present in all
published releases with that major.minor.micro combination.
Features of a pare release will stay available and ABI
compatible as long as the SONAME of libisoburn stays "1".
Currently there are no plans to ever change the SONAME.
Odd numbers indicate that API upgrades are in progress.
I.e. new features might be already present or they might
be still missing.
be still missing. Newly introduced features may be changed
incompatibly or even be revoked before release of a pare
version.
So micro revisions {1,3,5,7,9} should never be used for
dynamic linking unless the proper library match can be
guaranteed by external circumstances.
@return 1 success, <=0 might in future become an error indication
*/
void isoburn_version(int *major, int *minor, int *micro);
@ -181,7 +188,7 @@ 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 2
#define isoburn_libisofs_req_micro 6
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@ -189,7 +196,7 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 4
#define isoburn_libburn_req_micro 2
#define isoburn_libburn_req_micro 8
/** The minimum version of libisofs to be used with this version of libisoburn
@ -224,13 +231,13 @@ 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 0
#define isoburn_header_version_micro 1
#define isoburn_header_version_minor 2
#define isoburn_header_version_micro 0
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
For the library compatibility check ISOBURN_*_VERSION in configure.ac
are not decisive. Only the three numbers above do matter.
For the library compatibility check, ISOBURN_*_VERSION in configure.ac
are not decisive. Only the three numbers here do matter.
*/
/** Usage discussion:
@ -273,12 +280,42 @@ at the cost of excluding some older libraries.
These two advises are mutually exclusive.
-----------------------------------------------------
For an implementation of the Thomas Schmitt approach,
see libisoburn/burn_wrap.c : isoburn_initialize()
This connects libisoburn as "application" with libisofs
as "library".
The compatible part of Vreixo Formoso's approach is implemented
in configure.ac LIBBURN_REQUIRED, LIBISOFS_REQUIRED.
In isoburn_initialize() it would rather test by
iso_lib_is_compatible(isoburn_libisofs_req_major,...
than by
iso_lib_is_compatible(iso_lib_header_version_major,...
and would leave out the ugly compile time traps.
*/
/** Announce to the library an application provided method for immediate
delivery of messages. It is used when no drive is affected directly or
if the drive has no own msgs_submit() method attached by
isoburn_drive_set_msgs_submit.
If no method is preset or if the method is set to NULL then libisoburn
delivers its messages through the message queue of libburn.
@param msgs_submit The function call which implements the method
@param submit_handle Handle to be used as first argument of msgs_submit
@param submit_flag Flag to be used as last argument of msgs_submit
@param flag Unused yet, submit 0
@since 0.2.0
*/
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
char msg_text[], int os_errno,
char severity[], int flag),
void *submit_handle, int submit_flag, int flag);
/** Aquire a target drive by its filesystem path resp. libburn persistent
address.
Wrapper for: burn_drive_scan_and_grab()
@ -296,6 +333,30 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
char* adr, int load);
/** Aquire a target drive by its filesystem path resp. libburn persistent
address. This is a modern successor of isoburn_drive_scan_and_grab().
Wrapper for: burn_drive_scan_and_grab()
@since 0.1.2
@param drive_infos On success returns a one element array with the drive
(cdrom/burner). Thus use with driveno 0 only. On failure
the array has no valid elements at all.
The returned array should be freed via burn_drive_info_free()
when the drive is no longer needed.
@param adr The persistent address of the desired drive.
@param flag bit0= attempt to load the disc tray.
Else: failure if not loaded.
bit1= regard overwriteable media as blank
bit2= if the drive is a regular disk file: truncate it to
the write start address
bit3= if the drive reports a read-only profile try to read
table of content by scanning for ISO image headers.
(depending on media type and drive this might
help or it might make the resulting toc even worse)
@return 1 = success , 0 = drive not found , <0 = other error
*/
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char* adr, int flag);
/** Aquire a drive from the burn_drive_info[] array which was obtained by
a previous call of burn_drive_scan().
Wrapper for: burn_drive_grab()
@ -307,6 +368,25 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
int isoburn_drive_grab(struct burn_drive *drive, int load);
/** Attach to a drive an application provided method for immediate
delivery of messages.
If no method is set or if the method is set to NULL then libisoburn
delivers messages of the drive through the global msgs_submit() method
set by isoburn_set_msgs_submiti() or by the message queue of libburn.
@since 0.2.0
@param d The drive to which this function, handle and flag shall apply
@param msgs_submit The function call which implements the method
@param submit_handle Handle to be used as first argument of msgs_submit
@param submit_flag Flag to be used as last argument of msgs_submit
@param flag Unused yet, submit 0
*/
int isoburn_drive_set_msgs_submit(struct burn_drive *d,
int (*msgs_submit)(void *handle, int error_code,
char msg_text[], int os_errno,
char severity[], int flag),
void *submit_handle, int submit_flag, int flag);
/** Inquire the media status. Expect the whole spectrum of libburn BURN_DISC_*
with multi-session media. Emulated states with random access media are
BURN_DISC_BLANK and BURN_DISC_APPENDABLE.
@ -341,6 +421,160 @@ int isoburn_disc_erasable(struct burn_drive *d);
void isoburn_disc_erase(struct burn_drive *drive, int fast);
/** Program isoburn_disc_get_msc1() to return a fabricated value.
This makes only sense between aquiring the drive and reading the
image. After isoburn_read_image() it will confuse the coordination
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 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.
0= start lba of last session in TOC, ignore adr_value
1= start lba of session number given by adr_value
2= start lba of track given number by adr_value
3= adr_value itself is the lba to be used
4= start lba of last session with volume id
given by adr_value
@parm adr_value A string describing the value to be eventually used.
@param flag Bitfield for control purposes. Unused yet. Submit 0.
*/
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag);
/* ----------------------------------------------------------------------- */
/*
Wrappers for emulation of TOC on overwriteable media
Media which match the overwriteable usage model lack of a history of sessions
and tracks. libburn will not even hand out a burn_disc object for them and
always declare them blank. libisoburn checks for a valid ISO filesystem
header at LBA 0 and eventually declares them appendable.
Nevertheless one can only determine an upper limit of the size of the overall
image (by isoburn_get_min_start_byte()) but not a list of stored sessions
and their LBAs, as it is possible with true multi-session media.
The following wrappers add the capability to obtain a session and track TOC
from emulated multi-session images on overwriteables if the first session
was written by libisoburn-0.1.6 or later (i.e. with a header copy at LBA 32).
Be aware that the structs emitted by these isoburn calls are not compatible
with the libburn structs. I.e. you may use them only with isoburn_toc_*
calls.
isoburn_toc_disc needs to be freed after use. isoburn_toc_session and
isoburn_toc_track vanish together with their isoburn_toc_disc.
*/
/* Opaque handles to media, session, track */
struct isoburn_toc_disc;
struct isoburn_toc_session;
struct isoburn_toc_track;
/** Obtain a master handle for the table of content.
This handle governs allocated resources which have to be released by
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
*/
struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
/** Tell the number of 2048 byte blocks covered by the table of content.
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
*/
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc);
/** Get the array of session handles from the table of content.
Wrapper for: burn_disc_get_sessions()
@since 0.1.6
@param disc The master handle of the media
@param num returns the number of sessions in the array
@return the address of the array of session handles
*/
struct isoburn_toc_session **isoburn_toc_disc_get_sessions(
struct isoburn_toc_disc *disc, int *num);
/** Tell the number of 2048 byte blocks covered by a particular session.
Wrapper for: burn_session_get_sectors()
@since 0.1.6
@param s The session handle
@return number of blocks, <=0 indicates unknown or unreadable state
*/
int isoburn_toc_session_get_sectors(struct isoburn_toc_session *s);
/** Obtain a copy of the entry which describes the end of a particular session.
Wrapper for: burn_session_get_leadout_entry()
@since 0.1.6
@param s The session 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
*/
void isoburn_toc_session_get_leadout_entry(struct isoburn_toc_session *s,
struct burn_toc_entry *entry);
/** Get the array of track handles from a particular session.
Wrapper for: burn_session_get_tracks()
@since 0.1.6
@param s The session handle
@param num returns the number of tracks in the array
@return the address of the array of track handles
*/
struct isoburn_toc_track **isoburn_toc_session_get_tracks(
struct isoburn_toc_session *s, int *num);
/** Obtain a copy of the entry which describes a particular itrack.
Wrapper for: burn_track_get_entry()
@since 0.1.6
@param s 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
*/
void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
struct burn_toc_entry *entry);
/** 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()
@since 0.1.6
@param disc The master handle of the media
*/
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
/** Try whether at the data at the given address look like a ISO 9660
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 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
@param flag bit0-7: info return mode
0= do not return anything in info (do not even touch it)
1= return volume id (info needs 33 bytes)
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
*/
int isoburn_read_iso_head(struct burn_drive *d, int lba,
int *image_blocks, char *info, int flag);
/* ----------------------------------------------------------------------- */
/*
@ -683,6 +917,18 @@ int isoburn_igopt_set_fifo_size(struct isoburn_imgen_opts *o, int fifo_size);
int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
/** Obtain after image preparation the block address where the session will
start on media.
This value cannot be set by the application but only be inquired.
@since 0.1.4
@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_effective_lba(struct isoburn_imgen_opts *o, int *lba);
/* ----------------------------------------------------------------------- */
/* End of Options for image generation */
/* ----------------------------------------------------------------------- */

View File

@ -22,6 +22,68 @@
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <time.h>
/* @param flag bit0= single letters */
char *Ftypetxt(mode_t st_mode, int flag)
{
if(flag&1)
goto single_letters;
if(S_ISDIR(st_mode))
return("directory");
else if(S_ISREG(st_mode))
return("regular_file");
else if(S_ISLNK(st_mode))
return("symbolic_link");
else if(S_ISBLK(st_mode))
return("block_device");
else if(S_ISCHR(st_mode))
return("char_device");
else if(S_ISFIFO(st_mode))
return("name_pipe");
else if(S_ISSOCK(st_mode))
return("unix_socket");
return("unknown");
single_letters:;
if(S_ISDIR(st_mode))
return("d");
else if(S_ISREG(st_mode))
return("-");
else if(S_ISLNK(st_mode))
return("l");
else if(S_ISBLK(st_mode))
return("b");
else if(S_ISCHR(st_mode))
return("c");
else if(S_ISFIFO(st_mode))
return("p");
else if(S_ISSOCK(st_mode))
return("s");
return("?");
}
char *Ftimetxt(time_t t, char timetext[40], int flag)
{
char *rpt;
struct tm tms, *tmpt;
static char months[12][4]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
tmpt= localtime_r(&t, &tms);
rpt= timetext;
rpt[0]= 0;
if(tmpt==0)
sprintf(rpt+strlen(rpt), "%12.f", (double) t);
else if(time(NULL)-t < 180*86400 && time(NULL)-t >= 0)
sprintf(rpt+strlen(rpt), "%3s %2d %2.2d:%2.2d",
months[tms.tm_mon], tms.tm_mday, tms.tm_hour, tms.tm_min);
else
sprintf(rpt+strlen(rpt), "%3s %2d %4.4d",
months[tms.tm_mon], tms.tm_mday, 1900+tms.tm_year);
return(timetext);
}
/* @param flag bit0= compare atime
@ -31,7 +93,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
{
struct stat s1, s2;
int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done;
char buf1[4096], buf2[4096], a[4096];
char buf1[4096], buf2[4096], a[4096], ttx1[40], ttx2[40];
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
ret= lstat(adr1, &s1);
@ -39,22 +101,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
printf("? %s : cannot lstat() : %s\n", adr1, strerror(errno));
return(0);
}
if(S_ISDIR(s1.st_mode))
strcpy(a, "d");
else if(S_ISREG(s1.st_mode))
strcpy(a, "-");
else if(S_ISLNK(s1.st_mode))
strcpy(a, "l");
else if(S_ISBLK(s1.st_mode))
strcpy(a, "b");
else if(S_ISCHR(s1.st_mode))
strcpy(a, "c");
else if(S_ISFIFO(s1.st_mode))
strcpy(a, "p");
else if(S_ISSOCK(s1.st_mode))
strcpy(a, "s");
else
strcpy(a, "?");
strcpy(a, Ftypetxt(s1.st_mode, 1));
strcat(a, " ");
if(adrc[0])
strcat(a, adrc);
@ -69,51 +116,62 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
/* Attributes */
if(s1.st_mode != s2.st_mode) {
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
printf("%s : type : %s <> %s\n",
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
differs= 1;
}
if(s1.st_uid != s2.st_uid) {
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
differs= 1;
}
if(s1.st_gid != s2.st_gid) {
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
differs= 1;
}
if((S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode)) ||
(S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode))) {
if(s1.st_rdev != s2.st_rdev) {
printf("%s : %s st_rdev : %lu <> %lu\n", a,
printf("%s : %s st_rdev : %lu <> %lu\n", a,
(S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"),
(unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev);
differs= 1;
}
}
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
printf("%s : st_size : %.f <> %.f\n",
a, (double) s1.st_size, (double) s2.st_size);
printf("%s : st_size : %.f <> %.f diff= %.f\n",
a, (double) s1.st_size, (double) s2.st_size,
((double) s1.st_size) - (double) s2.st_size);
differs= 1;
}
if(s1.st_mtime != s2.st_mtime) {
printf("%s : st_mtime : %u <> %u\n",
a, (unsigned int) s1.st_mtime, (unsigned int) s2.st_mtime);
printf("%s : st_mtime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_mtime, ttx1, 0),
Ftimetxt(s2.st_mtime, ttx2, 0),
((double) s1.st_mtime) - (double) s2.st_mtime);
differs= 1;
}
if(flag&1) {
if(s1.st_atime != s2.st_atime) {
printf("%s : st_atime : %u <> %u\n",
a, (unsigned int) s1.st_atime, (unsigned int) s2.st_atime);
printf("%s : st_atime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_atime, ttx1, 0),
Ftimetxt(s2.st_atime, ttx2, 0),
((double) s1.st_atime) - (double) s2.st_atime);
differs= 1;
}
}
if(flag&2) {
if(s1.st_ctime != s2.st_ctime) {
printf("%s : st_ctime : %u <> %u\n",
a, (unsigned int) s1.st_ctime, (unsigned int) s2.st_ctime);
printf("%s : st_ctime : %s <> %s diff= %.f s\n",
a, Ftimetxt(s1.st_ctime, ttx1, 0),
Ftimetxt(s2.st_ctime, ttx2, 0),
((double) s1.st_ctime) - (double) s2.st_ctime);
differs= 1;
}
}
if(S_ISREG(s1.st_mode)) {
if(S_ISREG(s1.st_mode) && S_ISREG(s2.st_mode)) {
fd1= open(adr1, O_RDONLY);
if(fd1==-1) {
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
@ -169,7 +227,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
if(diffcount>0 || r1count!=r2count) {
if(first_diff<0)
first_diff= (r1count>r2count ? r2count : r1count);
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
(s1.st_mtime==s2.st_mtime ? "CONTENT":"content"),
(double) (diffcount + abs(r1count-r2count)), (double) first_diff);
differs= 1;
@ -208,7 +266,8 @@ int main(int argc, char **argv)
}
strcpy(adr1, argv[1]);
strcpy(adrc, argv[1]+strlen(argv[2]));
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
sprintf(adr2, "%s%s%s",
argv[3], (adrc[0]=='/' || adrc[0]==0 ? "" : "/"), adrc);
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
exit(ret<=0);

View File

@ -4,7 +4,7 @@
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.1.0.tar.gz
http://scdbackup.sourceforge.net/xorriso-0.2.0.pl00.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -14,6 +14,7 @@ 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 only supported on Linux with kernels >= 2.4.
@ -27,17 +28,18 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation
The most simple way to get xorriso is the xorriso standalone tarball.
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 libreadline-dev headers will make dialog mode
more convenient, but are not mandatory.
libreadline and the readline-dev headers will make dialog mode more convenient,
but are not mandatory.
Obtain xorriso-0.1.0.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-0.2.0.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.1.0.tar.gz
cd xorriso-0.1.0
tar xzf xorriso-0.2.0.pl00.tar.gz
cd xorriso-0.2.0
Within that directory execute:
@ -129,7 +131,7 @@ of ctime date stamps.
The exit value is 0 if no difference was detected, non-0 else.
Example: After
xorriso ... -pathspecs on -add /=/original/dir --
xorriso ... -pathspecs on -add /=/original/dir -- -commit_eject all
mount /media/dvd
cd test
compare tree /media/dvd with tree /original/dir :
@ -159,9 +161,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.1.0 :
- libburn.so.4 , version libburn-0.4.2 or higher
- libisofs.so.6 , version libisofs-0.6.2 or higher
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
- libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,14 @@
#!/bin/sh
# compile_xorriso.sh
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
# to be executed in a common parent of the directories given with
# $isofs $isoburn $burn
# compile_xorriso.sh
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
#
# 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.
# It is to be executed in a common parent of the directories given with
# $isofs $isoburn $burn $xorr
isofs=./nglibisofs-develop/libisofs
burn=./libburn-develop/libburn

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.1.0], [http://libburnia-project.org])
AC_INIT([xorriso], [0.2.0], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -9,30 +9,20 @@ AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4
BURN_MICRO_VERSION=3
BURN_MICRO_VERSION=9
AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=2
LIBISOFS_MICRO_VERSION=6
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)
dnl The API version codes are now defined in libisoburn/libisoburn.h
dnl The API version codes are defined in libisoburn/libisoburn.h
dnl #define isoburn_header_version_*
dnl configure.ac only rules the libtool revision numbering about
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
dnl ISOBURN_MAJOR_VERSION=0
dnl ISOBURN_MINOR_VERSION=0
dnl ISOBURN_MICRO_VERSION=1
dnl AC_SUBST(ISOBURN_MAJOR_VERSION)
dnl AC_SUBST(ISOBURN_MINOR_VERSION)
dnl AC_SUBST(ISOBURN_MICRO_VERSION)
AC_PREFIX_DEFAULT([/usr/local])

View File

@ -70,6 +70,9 @@ then
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \
-e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \
-e 's/^features:<\/b>/features:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Support for frontend/\&nbsp;<BR><b>Support for frontend/' \

View File

@ -1,15 +1,20 @@
#!/bin/sh
#
# make_xorriso_standalone.sh
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
#
# Not intended for general use in production installations !
#
# This is a development tool which expects a special setup of directories.
# It is to be executed in a common parent of the directories
# nglibisofs-develop libburn-develop libisoburn-develop
#
# Creates a standalone tree for building xorriso
# from the contents of a unified libburnia development tree.
#
# The ./bootstrap script gets applied and a source tarball
# is made.
#
# To be executed in the parent of the *-develop directories.
#
# From that tree can be build a binary xorriso/xorriso
# which at runtime depends only on libc and libpthread.
# Execute in $lone_dir :
@ -20,10 +25,11 @@
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.0.1
xorriso_pl=""
xorriso_rev=0.2.0
# For unstable uploads:
# xorriso_pl=""
# For stable releases:
# xorriso_pl=".pl00"
xorriso_pl=".pl00"
with_bootstrap_tarball=1
@ -32,7 +38,7 @@ create_dir() {
then
dummy=dummy
else
echo "Failed to create : $r1o" >&2
echo "Failed to create : $1" >&2
exit 1
fi
}
@ -73,6 +79,9 @@ create_dir "$lone_dir"
copy_files \
AUTHORS \
CONTRIBUTORS \
COPYRIGHT \
COPYING \
INSTALL \
acinclude.m4 \
aclocal.m4 \
bootstrap \
@ -98,7 +107,7 @@ copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
copy_files xorriso/README "$lone_dir"/README
echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
# libisoburn
@ -127,14 +136,14 @@ copy_files \
"$lone_dir"/test/compare_file.c
# >>> create compile_xorriso.sh for standalone
# nglibisofs
create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters
goto_dir "$current_dir"/nglibisofs-develop
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
copy_files COPYRIGHT "$lone_dir"/libisofs
# To get a common version.h
cat version.h.in >> "$lone_dir"/version.h.in
@ -176,8 +185,8 @@ fi
create_dir "$lone_dir"/libburn
goto_dir "$current_dir"/libburn-develop
copy_files libburn/*.[ch] "$lone_dir"/libburn
copy_files COPYRIGHT "$lone_dir"/libburn
copy_files COPYING "$lone_dir"/COPYING
# To get a common version.h
cat version.h.in >> "$lone_dir"/version.h.in

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -72,6 +72,13 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
int error_code, char msg_text[], int os_errno,
char severity[], int flag);
/** Alternative call interface of Xorriso_msgs_submit with void* instead
of struct XorrisO*
*/
int Xorriso_msgs_submit_void(void *xorriso,
int error_code, char msg_text[], int os_errno,
char severity[], int flag);
/** Evaluate an advise whether to abort or whether to go on with option
processing. This should be called after any option function was processed.
@ -220,15 +227,29 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag);
*/
int Xorriso_option_commit_eject(struct XorrisO *xorriso, char *which, int flag);
/* Option -compare and -compare_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: -compare_r
*/
int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Option -cpr alias -cpri */
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* >>> not yet implemented
/ * Option -cut_out * /
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
/* Options -cpx , -cpax, -cp_rx , -cp_rax */
/* @param flag bit0= recursive (-cp_rx, -cp_rax)
bit1= full property restore (-cpax, -cp_rax)
*/
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -cut_out */
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
char *start, char *count, char *iso_rr_path, int flag);
/* Options -dev , -indev, -outdev */
/* @param flag bit0=use as indev , bit1= use as outdev
@ -261,15 +282,29 @@ int Xorriso_option_eject(struct XorrisO *xorriso, char *which, int flag);
*/
int Xorriso_option_end(struct XorrisO *xorriso, int flag);
/* Option -iso_rr_pattern "on"|"ls"|"off" */
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -errfile_log marked|plain path|-|"" */
int Xorriso_option_errfile_log(struct XorrisO *xorriso,
char *mode, char *path, int flag);
/* Option -error_behavior */
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
char *occasion, char *behavior, int flag);
/* Options -extract , -extract_single */
/* @param flag bit0=do not report the restored item
bit1=do not reset pacifier, no final pacifier message
bit5= -extract_single: eventually do not insert directory tree
*/
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
/* Option -find alias -findi, and -findx */
/* @param flag bit0= -findx rather than -findi
bit1= do not reset pacifier, no final pacifier message
do not reset find_compare_result
*/
int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
@ -286,9 +321,22 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag);
/* Option -history */
int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
/* Option -iso_rr_pattern "on"|"ls"|"off" */
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
/* Option -list_formats */
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
/* Option -load session|track|sbsector value */
/* @return <=0 error , 1 success, 2 revoked by -reassure
*/
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
char *adr_value, int flag);
/* Option -logfile */
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
char *fileadr, int flag);
@ -313,6 +361,22 @@ int Xorriso_option_lsi(struct XorrisO *xorriso, int argc, char **argv,
int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -map */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
*/
int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Options -map_l , -compare_l , -update_l , -extract_l */
/* @param flag bit8-11= mode 0= -map_l
1= -compare_l
2= -update_l
3= -extract_l
*/
int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -mark */
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
@ -327,11 +391,21 @@ int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
/* Option -no_rc */
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
/* Option -not_leaf */
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
/* Option -not_paths */
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -options_from_file*/
/* @return <=0 error , 1 = success , 3 = request to end program run */
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
int flag);
/* Option -osirrox "on"|"off" */
int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
/* Option -overwrite "on"|"nondir"|"off" */
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
@ -341,6 +415,10 @@ int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
/* Option -page */
int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
/* Option -paste_in */
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
char *disk_path, char *start, char *count, int flag);
/* Option -path-list */
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
@ -353,7 +431,9 @@ int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
/* Option -print */
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
/* Option -print-size */
/* Option -print_size
@param flag bit0= report in mkisofs compatible form on real stdout
*/
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag);
/* Option -prog */
@ -362,12 +442,18 @@ int Xorriso_option_prog(struct XorrisO *xorriso, char *name, int flag);
/* Option -prog_help */
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 -pwd alias -pwdi */
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
/* Option -pwdx */
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Option -report_about */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag);
@ -376,8 +462,8 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int Xorriso_option_return_with(struct XorrisO *xorriso, char *severity,
int exit_value, int flag);
/* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Option -revoke_exclusions */
int Xorriso_option_revoke_exclusions(struct XorrisO *xorriso, int flag);
/* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
/* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
@ -385,13 +471,24 @@ int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -rollback */
/* @return <=0 error , 1 success, 2 revoked by -reassure
/* @param flag bit0= do not -reassure
@return <=0 error , 1 success, 2 revoked by -reassure
*/
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);
/* Option -rom_toc_scan */
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -session_log */
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
/* Option -speed */
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
/* Option -split_size */
int Xorriso_option_split_size(struct XorrisO *xorriso, char *s, int flag);
/* Option -status */
int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
@ -399,6 +496,10 @@ 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 -stream_recording */
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -tell_media_space */
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
@ -410,7 +511,16 @@ int Xorriso_option_temp_mem_limit(struct XorrisO *xorriso, char *size,
int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
/* Option -uid */
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *uid, int flag);
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
/* Options -update and -update_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: -update_r
*/
int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Option -use_readline */
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag);

View File

@ -2,7 +2,7 @@
<HEAD>
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, scdbackup">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
<META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE>
</HEAD>
@ -24,6 +24,8 @@ 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.
<BR>
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
</P>
<P>
@ -33,10 +35,10 @@ optical media or to filesystem objects.
<P>
<H2>Hardware requirements:</H2>
A CD/DVD recorder suitable for
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).
and to MMC-5 for DVD or BD).
<BR>
</P>
@ -58,14 +60,15 @@ and to MMC-5 for DVD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.4.3</DT>
<DD>reads and writes data from and to CD and DVD.</DD>
<DT>libburn-0.4.9</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered by team of libburnia-project.org)</DD>
<DT>libisofs-0.6.1</DT>
<DD>operates ISO 9660 images.</DD>
<DD>(By Vreixo Formoso from team of libburnia-project.org)</DD>
<DT>libisoburn-0.1.0</DT>
furthered since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.6</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.2.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>
@ -86,20 +89,24 @@ 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 or DVD are fixely integrated.
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
</LI>
<LI>
Operates on an existing ISO image or creates a new one.
<LI>
</LI>
<LI>
Copies files from filesystem into the ISO image.
<LI>
</LI>
<LI>
Renames or deletes file objects in the ISO image.
</LI>
<LI>
Changes file properties in the ISO image.
</LI>
<LI>
Updates ISO subtrees incrementally to match given disk subtrees.
</LI>
<LI>
Can write result as completely new image to optical media or
filesystem objects.
</LI>
@ -108,10 +115,14 @@ Can write result as add-on session to appendable multi-session media,
to overwriteable media, to regular files, and to block devices.
</LI>
<LI>
Scans for optical drives, blanks re-useable optical media.
Can restore single files and whole trees from ISO image to disk filesystem.
</LI>
<LI>
Suitable for: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+RW, DVD-RAM.
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.
</LI>
<LI>
Reads its instructions from command line arguments, dialog, and batch files.
@ -119,6 +130,9 @@ Reads its instructions from command line arguments, dialog, and batch files.
<LI>
Provides navigation commands for interactive ISO image manipulation.
</LI>
<LI>
Adjustable thresholds for abort, exit value, and problem reporting.
</LI>
</UL>
</P>
@ -144,8 +158,9 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
<DT>Get info about a particular drive and loaded media:</DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD>
<DT>Make re-usable media writable again, delete any ISO 9660 image:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank fast -eject all</KBD></DD>
<DT>Make re-usable media writable again, delete any ISO 9660 image,
eventually prepare yet unused BD-RE:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed -eject all</KBD></DD>
<DT>
<HR>
@ -167,17 +182,17 @@ adjust permissions to make it publicly read-only,
write it to media and immediately eject media without
previously reloading the written image.
</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank fast -pathspecs on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /sounds=/home/me/sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/pictures=/home/me/pictures -- \</KBD></DD>
<DD>$<KBD>&nbsp;cd /home/me</KBD></DD>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/sounds /sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/pictures /pictures \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /pictures/private/horses=/home/me/pictures/private/horses -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-cd / \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add pictures/private/horses* -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-chmod_r a+r,a-w / -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-find / -type d -exec chmod a+x -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-commit_eject all</KBD></DD>
<DT>
<HR>
</DT>
@ -188,15 +203,14 @@ rename /pictures/private/horses,
add new directory trees /sounds and /movies,
disallow any access for group and others.
Finally write as additional session to media and eject:</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -pathspecs on \</KBD></DD>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-rm_r /sounds -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-mv /pictures/private/horses /horse_show -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /sounds=/home/me/prepared_for_dvd/sounds_dummy \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /movies=/home/me/prepared_for_dvd/movies -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/prepared_for_dvd/sounds_dummy /sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/prepared_for_dvd/movies /movies \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-chmod_r go-rwx / -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-commit_eject all</KBD></DD>
<DT>
<HR>
</DT>
@ -223,9 +237,11 @@ 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 -pathspecs on</B></KBD></DD>
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-add /sounds=/home/me/prepared_for_dvd/sounds_dummy /movies=/home/me/prepared_for_dvd/movies</B></KBD></DD>
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies /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>
@ -237,6 +253,28 @@ 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.
<BR>
The copies will be complete, except all file names ending
with ".o" or ".swp" which are excluded by options -not_leaf.
</DT>
<DD>$<KBD>&nbsp;xorriso -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>
<DT>
<HR>
</DT>
<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>
@ -246,6 +284,18 @@ output will be redirected to stderr in this case.</DT>
<HR>
</DT>
<DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT>
<HR>
</DT>
<DT>Get overview of the options:</DT>
<DD>$<KBD>&nbsp;<A HREF="xorriso_help">xorriso -help</A></KBD></DD>
@ -255,7 +305,8 @@ output will be redirected to stderr in this case.</DT>
</DL>
Testers wanted who are willing to risk some double layer DVD media.
Testers wanted who are willing to risk some double layer DVD media or
are interested in using BD-R media.
</P>
@ -263,25 +314,10 @@ Testers wanted who are willing to risk some double layer DVD media.
<A NAME="download"></A>
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="xorriso-0.1.0.tar.gz">xorriso-0.1.0.tar.gz</A>
( KB).
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.2.0.pl00.tar.gz">xorriso-0.2.0.pl00.tar.gz</A>
(1000 KB).
</DD>
<!--
<DD>&nbsp;</DD>
<DT>Download as single x86 binaries (untar and move to /usr/bin/xorriso):</DT>
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0.tar.gz">
xorriso_0.1.0.pl00-x86-suse9_0.tar.gz</A>, ( KB),
<DL>
<DD>runs on SuSE 9.0 (2.4.21) , SuSE 10.2 (2.6.18.2) and others.</DD>
</DL>
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz">
xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz</A>, ( KB), -static compiled,
<DL>
<DD>runs on many other systems.</DD>
-->
</DL>
</DD>
</DL>
@ -303,77 +339,92 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
</DL>
</P>
<!--
<HR>
<P>
Enhancements towards previous stable version xorriso-0.1.0:
Bug fixes towards xorriso-0.1.8.pl00:
<UL>
<LI>none yet</LI>
<LI>
-chmod unintentionally performed o-x as first operation
</LI>
</UL>
Bug fixes towards xorriso-0.1.0.pl00:
</P>
<P>
Enhancements towards previous stable version xorriso-0.1.8.pl00:
<UL>
<LI>none yet</LI>
<LI>New option -extract restores with arguments of -map or -update_r</LI>
<LI>
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
</LI>
<LI>New option -paste_in to copy ISO files into parts of disk files</LI>
<LI>New options -map_l, -compare_l, -update_l, -extract_l</LI>
</UL>
</P>
<HR>
<P>
<DL>
<DT><H3>Development snapshot, version 0.1.0 :</H3></DT>
<DD>Enhancements towards stable version 0.1.0.pl00:
<DT><H3>Development snapshot, version 0.2.1 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.0.pl00:
<UL>
<LI>none yet</LI>
</LI>
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>Enhancements towards stable version 0.2.0.pl00:
<UL>
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.1.1</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.1.1 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.1)</A></DD>
<DD><A HREF="README_xorriso_devel">README 0.2.1</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.2.1 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.1)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of xorriso unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
</KBD></DD>
<DD>Build: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
</KBD></DD>
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisburn</B>
</KBD></DD>
<DD>Build: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
</KBD></DD>
<DD>Download: - libisofs bzr service not functional yet - </DD>
<DD>Build: <KBD><B>cd ng-libisofs ; ./autogen.sh ; ./configure --prefix /usr ; make</B>
</KBD></DD>
<DD>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
autotools</A> of at least version 1.7 installed.
But after the run of <KBD>./bootstrap</KBD>, only
vanilla tools like make and gcc are needed.</DD>
</DD>
<DD>&nbsp;</DD>
<DT>The following downloads are intended for adventurous end users or
admins with full system souvereignty.</DT>
<DD>Source (./bootstrap is already applied, build tested, for more see
<A HREF="README_xorriso_devel">upcoming README</A> ):
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
libburnia libraries.
</DT>
<DD>Source (./bootstrap is already applied, build tested,
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.1.1.tar.gz">xorriso-0.1.1.tar.gz</A>
(680 KB).
</DD>
<DD>Binary (untar and move to /usr/bin/xorriso):</DD>
<DD><A HREF="xorriso_0.1.1-x86-suse9_0.tar.gz">
xorriso_0.1.1-x86-suse9_0.tar.gz</A>, ( KB).
</DD>
<DD><A HREF="xorriso_0.1.1-x86-suse9_0-static.tar.gz">
xorriso_0.1.1-x86-suse9_0-static.tar.gz</A>, ( KB)
<A HREF="xorriso-0.2.1.tar.gz">xorriso-0.2.1.tar.gz</A>
(1000 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained
from repositories of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A>.
xorriso is part of libisoburn/trunk and will get built by its "make".
</DT>
<DT>Be warned that the libraries in SVN and bzr are development versions with
possibly unstable API/ABI enhancements. Do not distribute development
versions for dynamic linking. Only release versions are safe for that.
</DT>
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
</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>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>
</KBD></DD>
<DD>Install: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
</KBD></DD>
<DT>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
autotools</A> of at least version 1.7 installed.
But after the run of <KBD>./bootstrap</KBD>, only
vanilla tools like make and gcc are needed.
</DT>
<DD>&nbsp;</DD>
</DL>
</P>
-->
<HR>
<P>
@ -416,6 +467,7 @@ pppoem, a DSL throughput monitor (mainly for Linux kernel 2.4)</A></DD>
</DL>
<BR><BR>
Legal statement: This website does not serve any commercial purpose.<BR>
<BR><BR>
</FONT>
</BODY>
</HTML>

View File

@ -78,6 +78,10 @@ xorriso_xorriso_SOURCES = \
libisofs/eltorito.h \
libisofs/eltorito.c \
libisofs/data_source.c \
libisofs/find.c \
libisofs/filter.h \
libisofs/filter.c \
libisofs/filters/xor_encrypt.c \
\
libburn/async.c \
libburn/async.h \
@ -178,10 +182,8 @@ EXTRA_DIST = \
CONTRIBUTORS \
COPYRIGHT \
COPYING \
NEWS \
ChangeLog \
INSTALL \
xorriso/compile_xorriso.sh \
xorriso/changelog.txt \
$(man_MANS)

View File

@ -18,7 +18,7 @@
#ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.0.1"
#define Xorriso_program_versioN "0.2.0"
/** The source code release timestamp */
#include "xorriso_timestamp.h"
@ -45,7 +45,10 @@
/* <<< ??? */
typedef int (*Cleanup_app_handler_T)();
struct LinkiteM;
struct LinkiteM; /* Trace of hops during symbolic link resolution */
struct ExclusionS; /* List of -not_* conditions */
struct PermiteM; /* Stack of temporarily altered access permissions */
/* maximum number of history lines to be reported with -status:long_history */
#define Xorriso_status_history_maX 100
@ -77,6 +80,7 @@ struct XorrisO { /* the global context of xorriso */
int did_something_useful;
int add_plainly;
off_t split_size;
/* >>> put libisofs aspects here <<< */
@ -101,13 +105,39 @@ struct XorrisO { /* the global context of xorriso */
int volid_default;
char loaded_volid[33];
char publisher[129];
char session_logfile[SfileadrL];
int session_lba;
int session_blocks;
/* >>> put libburn/isoburn aspects here */
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
scan -ROM profiles for ISO sessions
*/
int image_start_mode; /* From what address to load the ISO image
bit0-15= addressing mode
0= automatic lba as deduced from media
1= value is session number
2= value is track number
3= value is lba
bit30= interference with normal msc1 processing
is enabled. Without this bit,
isoburn_set_msc1() will not be called.
bit31= image loading has happened,
setting is kept for rollback only.
Always apply as 0=auto.
*/
char image_start_value[81]; /* value according image_start_mode */
char indev[SfileadrL];
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */
char outdev[SfileadrL];
void *out_drive_handle; /* interpreted only by xorrisoburn.c */
@ -121,6 +151,7 @@ struct XorrisO { /* the global context of xorriso */
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
int fs; /* fifo size in 2048 byte chunks : at most 1 GB */
int padding; /* number of bytes to add after ISO 9660 image */
int do_stream_recording;
int keep_boot_image;
int patch_isolinux_image;
@ -129,6 +160,14 @@ 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 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 dialog;
@ -156,6 +195,14 @@ struct XorrisO { /* the global context of xorriso */
int temp_mem_limit;
struct ExclusionS *disk_exclusions;
int disk_excl_mode; /* bit0= on (else off)
bit1= parameter too (else rekursion only)
bit2= whole subtree banned (else only exact path)
bit3= when comparing ignore excluded files rather
than to treat them as truely missing on disk
*/
int use_stdin; /* use raw stdin even if readline support is compiled */
int result_page_length;
int result_page_width;
@ -172,6 +219,12 @@ struct XorrisO { /* the global context of xorriso */
int problem_status; /* Severity rank number. 0= no abort condition present */
char problem_status_text[20];
char errfile_log[SfileadrL]; /* for -errfile_log */
int errfile_mode; /* bit0= marked */
FILE *errfile_fp;
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
char return_with_text[20];
int return_with_severity;
int return_with_value;
@ -209,6 +262,13 @@ struct XorrisO { /* the global context of xorriso */
/* optional global counters for brain reduced callback functions */
off_t pacifier_count;
off_t pacifier_total;
off_t pacifier_byte_count; /* auxiliary counter for data bytes */
void *pacifier_fifo;
int find_compare_result; /* 1=everything matches , 0=mismatch , -1=error */
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
/* result (stdout, R: ) */
char result_line[5*SfileadrL];
@ -322,6 +382,59 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
off_t count, off_t todo, char *current_object,
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
*/
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
char *iso_path, char *iso_prefix, char *disk_prefix,
int flag);
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
Set to NULL if calling this function from outside ISO world
*/
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
int compare_result, char *disk_path,
char *iso_rr_path, int flag);
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
/* @param flag bit0= long format
bit1= do not print count of nodes
bit2= du format
bit3= print directories as themselves (ls -d)
*/
int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
int filec, char **filev, off_t boss_mem, int flag);
/*
@param flag >>> bit0= remove whole sub tree: rm -r
bit1= remove empty directory: rmdir
bit2= recursion: do not reassure in mode 2 "tree"
bit3= this is for overwriting and not for plain removal
bit4= count deleted files in xorriso->pacifier_count
bit5= with bit0 only remove directory content, not the directory
@return <=0 = error
1 = removed leaf file object
2 = removed directory or tree
3 = did not remove on user revocation
*/
int Xorriso_rmx(struct XorrisO *xorriso, off_t boss_mem, char *path, int flag);
int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
char *tmp_path, int *fd, int flag);
/* @param flag bit0= path is a directory
bit2= recursion: do not reassure in mode 2 "tree"
bit3= this is for overwriting and not for plain removal
*/
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag);
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
int Sfile_str(char target[SfileadrL], char *source, int flag);
double Sfile_microtime(int flag);
@ -332,10 +445,40 @@ int Sfile_scale(double value, char *result, int siz, double thresh, int flag);
int Sfile_destroy_argv(int *argc, char ***argv, int flag);
/*
bit0= do not ignore trailing slash
bit1= do not ignore empty components (other than the empty root name)
*/
int Sfile_count_components(char *path, int flag);
/*
@param flag
bit0= return -1 if file is missing
bit1= return a hardlink with siblings as type 5
bit2= evaluate eventual link target rather than the link object itself
bit3= return a socket or a char device as types 7 or 8 rather than 0
@return
0=unknown
1=regular
2=directory
3=symbolic link
4=named pipe
5=multiple hardlink (with bit1)
6=block device
7=socket (with bit3)
8=character device (with bit3)
*/
int Sfile_type(char *filename, int flag);
char *Text_shellsafe(char *in_text, char *out_text, int flag);
int Sort_argv(int argc, char **argv, int flag);
/* @param flag bit0= single letters */
char *Ftypetxt(mode_t st_mode, int flag);
struct DirseQ;
int Dirseq_new(struct DirseQ **o, char *adr, int flag);
@ -388,6 +531,65 @@ int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
struct SplitparT;
int Splitparts_new(struct SplitparT **o, int count, int flag);
int Splitparts_destroy(struct SplitparT **o, int count, int flag);
int Splitparts_set(struct SplitparT *o, int idx,
char *name, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
int Splitparts_get(struct SplitparT *o, int idx, char **name, int *partno,
int *total_parts, off_t *offset, off_t *bytes,
off_t *total_bytes, int flag);
int Splitpart__parse(char *name, int *partno, int *total_parts,
off_t *offset, off_t *bytes, off_t *total_bytes, int flag);
int Splitpart__compose(char *adr, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
int Splitparts_sort(struct SplitparT *o, int count, int flag);
struct LstrinG {
char *text;
struct LstrinG *prev,*next;
};
int Lstring_destroy(struct LstrinG **lstring, int flag);
int Lstring_destroy_all(struct LstrinG **lstring, int flag);
/*
@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)
*/
int Lstring_new_binary(struct LstrinG **lstring, char *data, int data_len,
struct LstrinG *link, int flag);
/*
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
*/
int Lstring_new(struct LstrinG **lstring, char *text, struct LstrinG *link,
int flag);
int Lstring_append_binary(struct LstrinG **entry, char *data, int data_len,
int flag);
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
int flag);
int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
struct XorrisO *xorriso, int flag);
#endif /* Xorriso_private_includeD */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.02.14.182351"
#define Xorriso_timestamP "2008.06.22.090001"

File diff suppressed because it is too large Load Diff

View File

@ -20,8 +20,8 @@ struct FindjoB;
/* The minimum version of libisoburn to be used with this version of xorriso
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 0
#define xorriso_libisoburn_req_micro 1
#define xorriso_libisoburn_req_minor 2
#define xorriso_libisoburn_req_micro 0
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -40,11 +40,15 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag);
int Xorriso_write_session(struct XorrisO *xorriso, int flag);
/* @param flag bit0=graft in as empty directory, not as copy from disk
@return <=0 = error , 1 = added simple node , 2 = added directory
/* @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= mkdir: graft in as empty directory, not as copy from disk
bit1= do not report added files
@return <=0 = error , 1 = added simple node , 2 = added directory
*/
int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
int flag);
int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
char *disk_path, char *img_path,
off_t offset, off_t cut_size, int flag);
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
@ -58,10 +62,29 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
int Xorriso_tell_media_space(struct XorrisO *xorriso,
int *media_space, int *free_space, int flag);
/* @param flag bit0=fast , bit1=deformat
@return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media
*/
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
/* @param flag bit0= try to achieve faster formatting
@return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media
*/
int Xorriso_format_media(struct XorrisO *xorriso, int flag);
/* @return <=0 error, 1 success
*/
int Xorriso_list_formats(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
*/
int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
/* @param boss_iter Opaque internal handle. Use NULL outside xorrisoburn.c :
If not NULL then this is an iterator suitable for
iso_dir_iter_remove() which is then to be used instead
@ -75,7 +98,7 @@ int Xorriso_format_media(struct XorrisO *xorriso, int flag);
2 = removed directory or tree
3 = did not remove on user revocation
*/
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter,
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
char *path, int flag);
/* @param flag bit0= long format
@ -91,6 +114,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
@param flag bit0= long format
bit1= only check for directory existence
bit2= do not apply search pattern but accept any file
bit3= just count nodes and return number
*/
int Xorriso_ls(struct XorrisO *xorriso, int flag);
@ -107,7 +131,11 @@ int Xorriso_ls(struct XorrisO *xorriso, int flag);
int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd,
char *img_path, char eff_path[], int flag);
int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest,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
*/
int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
char *origin, char *dest, int flag);
/* @param flag bit0= do not produce info message on success
@return 1=success, 0=was already directory, -1=was other type, -2=bad path
@ -132,7 +160,11 @@ int Xorriso_set_gid(struct XorrisO *xorriso, char *in_path, gid_t gid,
int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
int flag);
/* @param flag bit0= recursion
bit1= do not count deleted files with rm and rm_r
*/
int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
void *boss_iter, off_t boss_mem,
void *dir_node_generic, char *dir_path,
struct stat *dir_stbuf, int depth, int flag);
@ -145,9 +177,87 @@ int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag);
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag);
/* @return 0= stbuf content is valid , -1 = path not found */
/* @return 0= stbuf content is valid ,
-1 = path not found , -2 = severe error occured
*/
int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
int flag);
/* @param flag bit0= -inq
bit1= -checkdrive
*/
int Xorriso_atip(struct XorrisO *xorriso, int flag);
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
/* @param flag bit1= outdev rather than indev
@return <=0 = failure , 1= ok , 2= ok, is CD profile
*/
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
char profile_name[80], int flag);
/* @param flag bit0= do not mark image as changed */
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
*/
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
void *node_pt, void **stream, int flag);
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
int count, int flag);
int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag);
/* @param bit0= copy link target properties rather than link properties
*/
int Xorriso_copy_properties(struct XorrisO *xorriso,
char *disk_path, char *img_path, int flag);
int Xorriso_cut_out(struct XorrisO *xorriso, char *disk_path,
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
int Xorriso_paste_in(struct XorrisO *xorriso, char *disk_path,
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
struct SplitparT;
/* @param flag bit0= in_node is valid, do not resolve iso_adr
*/
int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
void *in_node,
struct SplitparT **parts, int *count,
struct stat *total_stbuf, int flag);
/* @param flag bit0= node is valid, do not resolve path
bit1= insist in complete collection of part files
*/
int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node,
int flag);
/* @param flag
>>> bit0= mkdir: graft in as empty directory, not as copy from iso
bit1= do not report copied files
bit2= -follow, -not_*: this is not a command parameter
bit3= use offset and cut_size for -paste_in
bit4= return 3 on rejection by exclusion or user
bit5= if directory then do not add sub tree
bit6= this is a copy action: do not fake times and ownership
@return <=0 = error , 1 = added leaf file object , 2 = added directory ,
3 = rejected
*/
int Xorriso_restore(struct XorrisO *xorriso,
char *img_path, char *disk_path,
off_t offset, off_t cut_size, int flag);
/* @param flag bit0= in_node is valid, do not resolve img_path
*/
int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
char *img_path, char *disk_path,
char type_text[5], int flag);
#endif /* Xorrisoburn_includeD */