Compare commits

..

5 Commits

Author SHA1 Message Date
deb42c7cdc Tagged 2008-08-25 00:47:07 +00:00
19daa2a6f7 Corrected ISOBURN_MICRO_VERSION 2008-08-24 17:27:44 +00:00
36ce98a648 Documented changes and release timestamp 2008-08-24 17:24:50 +00:00
11ccd67979 Version leap to 0.2.4 2008-08-24 17:19:32 +00:00
1cb6906b1b Wohooo 2008-08-24 15:40:19 +00:00
18 changed files with 449 additions and 1533 deletions

14
README
View File

@ -4,13 +4,13 @@
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.6.pl00.tar.gz
http://files.libburnia-project.org/releases/libisoburn-0.2.4.pl00.tar.gz
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2.
------------------------------------------------------------------------------
libisoburn is a frontend for libraries libburn and libisofs which enables
creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported
creation and expansion of ISO-9660 filesystems on all CD/DVD media supported
by libburn. This includes media like DVD+RW, which do not support multi-session
management on media level and even plain disk files or block devices.
@ -26,18 +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.2.6 :
Dynamic library and compile time header requirements for libisoburn-0.2.4 :
- libburn.so.4 , version libburn-0.5.2 or higher
- libisofs.so.6 , version libisofs-0.6.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.2.6.pl00.tar.gz, take it to a directory of your choice
Obtain libisoburn-0.2.4.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.2.6.pl00.tar.gz
cd libisoburn-0.2.6
tar xzf libisoburn-0.2.4.pl00.tar.gz
cd libisoburn-0.2.4
Within that directory execute:

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.2.6], [http://libburnia-project.org])
AC_INIT([libisoburn], [0.2.4], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -21,7 +21,7 @@ dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=2
ISOBURN_MICRO_VERSION=6
ISOBURN_MICRO_VERSION=4
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -33,16 +33,16 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE
dnl
dnl ts A80919
dnl This is the release version 0.2.6 = libisoburn.so.1.15.0
dnl ts A80824
dnl This is the release version 0.2.4 = libisoburn.so.1.13.0
dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 16 - 15 = 1 . Library name = libisoburn.so.1.15.0
dnl SONAME = 14 - 13 = 1 . Library name = libisoburn.so.1.13.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=16
LT_AGE=15
LT_CURRENT=14
LT_AGE=13
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -101,7 +101,7 @@ AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.5.2
LIBISOFS_REQUIRED=0.6.8
LIBISOFS_REQUIRED=0.6.6
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

View File

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

View File

@ -147,10 +147,6 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
return 1;
tiles[oldest].last_error_lba = lba;
#ifdef ISO_DATA_SOURCE_MISHAP
ret= ISO_DATA_SOURCE_MISHAP;
#else
/* <<< pre libisofs-0.6.7 */
/* It is not required by the specs of libisofs but implicitely assumed
...
But it is not possible to ignore FAILURE.
@ -163,8 +159,6 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
enough to make it appear plausible.
*/
ret= ISO_FILE_CANT_WRITE;
#endif
if(ret >= 0)
ret = -1;
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);

View File

@ -200,7 +200,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 8
#define isoburn_libisofs_req_micro 6
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@ -244,7 +244,7 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
*/
#define isoburn_header_version_major 0
#define isoburn_header_version_minor 2
#define isoburn_header_version_micro 6
#define isoburn_header_version_micro 4
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.

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.2.6.pl00.tar.gz
http://scdbackup.sourceforge.net/xorriso-0.2.4.pl00.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -36,10 +36,10 @@ The tarball contains anything that is needed except libc and libpthread.
libreadline and the readline-dev headers will make dialog mode more convenient,
but are not mandatory.
Obtain xorriso-0.2.6.pl00.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-0.2.4.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.2.6.pl00.tar.gz
cd xorriso-0.2.6
tar xzf xorriso-0.2.4.pl00.tar.gz
cd xorriso-0.2.4
Within that directory execute:
@ -186,9 +186,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.2.6 :
Dynamic library and compile time header requirements for libisoburn-0.2.4 :
- libburn.so.4 , version libburn-0.5.2 or higher
- libisofs.so.6 , version libisofs-0.6.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.

View File

@ -3520,12 +3520,12 @@ Fixed a bug with -check_media use=outdev
xorriso/xorrisoburn.c
Reacted on compiler warning
------------------------------------ cycle - xorriso-0.2.3 - 2008.08.24.125257
* New -find action "report_lba"
* New -error_behavior behavior occasion "file_extraction"
2008.08.24.160001 [2011]
2008.08.24.160001 []
configure.ac
README
libisoburn/libisoburn.h
@ -3538,13 +3538,10 @@ xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.4
24 Aug 2008 [2012]
[]
xorriso/changelog.txt
Documented changes and release timestamp
24 Aug 2008 [2013]
configure.ac
Corrected ISOBURN_MICRO_VERSION
---------------------------------- release - xorriso-0.2.4 - 2008.08.24.160001
* Included libburn has enhanced Linux drive access and listing code
@ -3552,223 +3549,8 @@ Corrected ISOBURN_MICRO_VERSION
* New -find test -damaged, new -find actions "report_damage", "report_lba"
* New -error_behavior occasion "file_extraction"
2008.08.24.173217 [2014]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.5
24 Aug 2008 [2015]
xorriso/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - xorriso-0.2.5 - 2008.08.24.173217
26 Aug 2008 [2017]
xorriso/convert_man_to_html.sh
Adjusted HTML generator to recent man page changes
2008.08.26.163254 [2018]
libisoburn/libisoburn.h
libisoburn/data_source.c
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/configure_ac.txt
Adopting next development step of libisofs
26 Aug 2008 [2019]
xorriso/xorriso.1
Adjusted man page statements about file size limits
2008.08.27.121211 [2020]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
2008.08.27.122127 [2021]
xorriso/xorriso.c
Reacted on compiler warning
------------------------------------ cycle - xorriso-0.2.5 - 2008.08.27.122127
* Capability to insert and extract files far larger than 4 GB
* New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
27 Aug 2008 [2022]
xorriso/xorriso.1
Corrected a typo in man page
2008.09.02.164803 [2025]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -extract_cut
2008.09.03.143218 [2026]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New -error_behavior "file_extraction" behavior "best_effort"
2008.09.04.100158 [2027]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -check_media_defaults
------------------------------------ cycle - xorriso-0.2.5 - 2008.09.04.100158
* New option -extract_cut
* New -error_behavior "file_extraction" behavior "best_effort"
* New option -check_media_defaults
2008.09.05.095344 [2028]
xorriso/xorriso_private.h
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -list_delimiter
5 Sep 2008 [2029]
xorriso/xorriso_eng.html
Updated development feature list
2008.09.05.114936 [2030]
xorriso/xorriso.c
-commit_eject, -alter_date, -alter_date_r, -pacifier, -prog_help had wrong argument count prediction
5 Sep 2008 [2031]
xorriso/xorriso.1
Documented forgotten option -publisher
5 Sep 2008 [2032]
xorriso/xorriso_eng.html
xorriso/xorriso.1
Minor documentation polishing
------------------------------------ cycle - xorriso-0.2.5 - 2008.09.05.114936
* New option -list_delimiter
6 Sep 2008 [2033]
xorriso/xorriso_eng.html
xorriso/xorriso.1
Documentation polishing
2008.09.07.144714 [2034]
xorriso/xorrisoburn.c
Removed outdated alternative code for support of libisofs-0.6.6
2008.09.08.094748 [2035]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Made use of new libisofs call iso_image_update_sizes()
2008.09.08.121548 [2036]
xorriso/xorrisoburn.c
Bug fix: -format full did not re-format already formatted DVD+RW
2008.09.09.082406 [2037]
xorriso/xorrisoburn.c
Smoothened time estimation with pacifier mkisofs style
9 Sep 2008 [2038]
xorriso/xorriso_eng.html
Updated web page
------------------------------------ cycle - xorriso-0.2.5 - 2008.09.09.082406
* Bug fix: -format full did not re-format already formatted DVD+RW
2008.09.11.114227 [2040]
xorriso/xorrisoburn.c
Issuing message at begin of image loading
2008.09.13.204455 [2047]
xorriso/xorrisoburn.c
Correction about -check_media report and message about image loading
2008.09.16.060427 [2053]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Corrected pacifier text (Ticket 141)
2008.09.16.185206 [2054]
xorriso/xorriso_private.h
xorriso/xorriso.1
Corrected falsely computed default setting of -file_size_limit
2008.09.17.193824 [2056]
xorriso/xorrisoburn.c
Corrected message duplication about emulated sessions on overwriteable media
2008.09.19.090619 [2057] [2058]
xorriso/configure_ac.txt
standalone version switch to libisofs-0.6.8
19 Sep 2008 [2059]
xorriso/xorriso.1
Small change in man page
2008.09.19.104424 [2060]
configure.ac
libisoburn/libisoburn.h
Switched requirements to libisofs-0.6.8
------------------------------------ cycle - xorriso-0.2.5 - 2008.09.19.104424
2008.09.19.122656 [2061]
xorriso/xorrisoburn.c
Changed WARNING about non-writeable media to NOTE severity of blank messages
2008.09.19.180001 [2066]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.6
[]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.2.6 - 2008.09.19.180001
* Capability to insert and extract files far larger than 4 GB
* New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
* New option -extract_cut
* New -error_behavior "file_extraction" behavior "best_effort"
* New option -check_media_defaults
* New option -list_delimiter
* Bug fix: -format full did not re-format already formatted DVD+RW
------------------------------------ cycle - xorriso-0.2.7 -
------------------------------------ cycle - xorriso-0.2.7 -
------------------------------------ cycle - xorriso-0.2.5 -
------------------------------------ cycle - xorriso-0.2.5 -
[]
libisoburn/burn_wrap.c
@ -3783,20 +3565,16 @@ Tested removal of drive address path conversion in isoburn_drive_aquire()
------------------------------------------------- important
------------------------------------------------- development
- creation of bootable images
>>> Vreixo points to demo/iso.c
- option to disable toc emulation on overwriteables with -outdev
- random access read and write option
- option to patch the mount image size and location on overwriteables
- option -list_delimiter
- change -check_media what=disc to libburn disc rather than libisoburn
(seems to need new API capabilities of libburn)
- opportunity to retrieve file via burn_read_data() and libisofs provided lba
??? Clarify handling of links in ISO and on disk during restore
> Relative addressing and pattern matching :
@ -3808,7 +3586,6 @@ Tested removal of drive address path conversion in isoburn_drive_aquire()
the main thread cares for user and message queues.
- Introduce an interrupt key for dialog
>>> but how without disturbing readline ?
- watch read latency and evaluate read quality indicator
@ -3834,11 +3611,31 @@ Tested removal of drive address path conversion in isoburn_drive_aquire()
------ problem fixes :
- Error code for libisoburn data source read errors.
- Proper reaction on severity of errors issued by data_source
(currently even a FATAL gets converted to ISO_FILE_READ_ERROR
in iso_stream_read())
- #define ISO_ERR_PRIO(e) ((e & 0x00700000) << 8)
(rather than 0x00F00000, see ticket 135)
- the error handling system should be comprehensively documented
and eventually rectified where needed.
- ticket 137:
With softlink /X/YZ and Joliet enabled:
libisofs: HINT : Can't add YZ to Joliet tree. This kind of files can only be added to a Rock Ridget tree. Skipping.
HINT is not a suitable severity for this. Better: WARNING, SORRY, MISHAP
One should at least give the full path of /X/YZ or the type of the file.
------ feature enhancements :
- Data files >= 4 GiB.
- API: iso_image_update_sizes() to be run immediately before -commit
- A repeatable shell command as origin ("disk_file")
of a regular file in the ISO image.
@ -3849,6 +3646,9 @@ Tested removal of drive address path conversion in isoburn_drive_aquire()
- Image checksum tag in the last data blocks of an image.
A data file entry should point to that block.
- creation of bootable images
>>> Vreixo points to demo/iso.c
------ extended attribute stunts: Not visible for mount but for libisofs

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.2.6], [http://libburnia-project.org])
AC_INIT([xorriso], [0.2.3], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -16,7 +16,7 @@ AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=8
LIBISOFS_MICRO_VERSION=6
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)

View File

@ -70,7 +70,6 @@ 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>Evaluation of readability and recovery:<\/b>/\&nbsp;<BR><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>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</' \

View File

@ -25,7 +25,7 @@
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.2.6
xorriso_rev=0.2.4
# For unstable uploads:
# xorriso_pl=""
# For stable releases:

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Sep 19, 2008"
.TH XORRISO 1 "Aug 24, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -346,19 +346,10 @@ characters. Rock Ridge fulfills this demand.
Commands are either actions or settings. They consist of a command word,
followed by zero or more parameter words. If the list of parameter words
is of variable length (indicated by "[...]" or "[***]") then it has to be
terminated by either the list delimiter, or the end of argument list, or an
end of an input line.
.PP
At program start the \fBlist delimiter\fR is the word "--". This may be changed
by option -list_delimiter in order to allow "--" as argument in a list of
variable length. It is advised to reset the delimiter to "--" immediately
afterwards.
.br
For brevity the list delimiter is referred as "--" throughout this text.
.br
The list delimiter is silently tolerated if it appears after the parameters of
a command with a fixed list length. It is handled as normal text if it
appears among the arguments of such a command.
terminated by either the word "--" or the end of argument list or an end of
an input line.
It is not an error if "--" appears after the parameters of a command
with a fixed list length.
.PP
.B Pattern expansion
is a property of some particular commands and not a general
@ -688,8 +679,7 @@ Map a byte interval of a regular disk file into a regular file in the ISO
image.
This may be necessary if the disk file is larger than a single media, or if
it exceeds the traditional limit of 2 GiB - 1 for old operating systems,
or the limit of 4 GiB - 1 for newer ones. Only the newest Linux kernels
seem to read properly files >= 4 GiB - 1.
or the limit of 4 GiB - 1 for newer ones.
.br
A clumsy remedy for this limit is to backup file pieces and to concatenate
them at restore time. A well tested chopping size is 2047m.
@ -950,9 +940,8 @@ E.g.:
.br
"report_lba" prints files which are associated to image data blocks.
It tells the logical block address, the block number, the byte size,
and the path of each file. There may be reported more than one
line per file if the file is very large. In this case each line has a
different extent number in column "xt".
and the path of each file. In future there may be reported more than one
line per file if the file is very large.
.br
E.g.:
.br
@ -975,6 +964,10 @@ other file causes a FAILURE event.
\fB\-rmdir\fR iso_rr_path [***]
Delete empty directories.
.TP
\fB\-\-\fR
.br
Mark end of particular action argument list.
.TP
\fB\-rollback\fR
Discard the manipulated ISO image and reload it from -indev.
.TP
@ -1099,22 +1092,6 @@ Smaller format size with DVD-RAM or BD-RE means more reserve space.
.TP
.B Settings for data insertion:
.TP
\fB\-file_size_limit\fR value [value [...]] --
Set the maximum permissible size for a single data file. The values get
summed up for the actual limit. If the only value is "off" then the file
size is not limited by xorriso. Default is a limit of 100 extents, 4g -2k each:
.br
-file_size_limit 400g -200k --
.br
When mounting ISO 9660 filesystems, old operating systems can handle only files
up to 2g -1 --. Newer ones are good up to 4g -1 --.
You need quite a new Linux kernel to read correctly the final bytes
of a file >= 4g if its size is not aligned to 2048 byte blocks.
.br
xorriso's own data read capabilities are not affected by eventual
operating system size limits. They apply to mounting only. Nevertheless,
the target filesystem of an -extract must be able to take the file size.
.TP
\fB\-not_mgt\fR code[:code[...]]
Control the behavior of the exclusion lists.
.br
@ -1251,15 +1228,12 @@ target file objects on disk as well, but "on" is downgraded to "nondir".
\fB\-split_size\fR number["k"|"m"]
Set the threshold for automatic splitting of regular files. Such splitting
maps a large disk file onto a ISO directory with several part files in it.
This is necessary if the size of the disk file exceeds -file_size_limit.
Older operating systems can handle files in mounted ISO 9660 filesystems
only if they are smaller than 2 GiB resp. 4 GiB.
This is necessary if the size of the disk file exceeds 4 GiB - 1.
Older operating systems can handle files only if they are smaller than 2 GiB.
See also option -cut_out for more information about file parts.
.br
Default is 0 which will exclude files larger than -file_size_limit by a
FAILURE event.
A well tested -split_size is 2047m. Sizes above -file_size_limit are not
permissible.
Default is 0 which will exclude files >= 4 GiB by a FAILURE event.
A well tested -split_size is 2047m. Sizes of 4 GiB or more are not permissible.
.TP
.B Settings for result writing:
.TP
@ -1288,10 +1262,6 @@ Consider this when setting -volid "ISOIMAGE" before executing -dev, -indev,
or -rollback.
If you insist in -volid "ISOIMAGE", set it again after those commands.
.TP
\fB\-publisher\fR text
Set the publisher string to be written with the next -commit. Permissible
are up to 128 characters.
.TP
\fB\-uid\fR uid
User id to be used for all files when the new ISO tree gets written to media.
.TP
@ -1320,7 +1290,7 @@ for their own decision.
.TP
\fB\-stream_recording\fR "on"|"off"
Setting "on" tries to circumvent the management of defects on DVD-RAM and
BD-RE. Defect management keeps partly damaged media usable. But it reduces
DVD+RW. Defect management keeps partly damaged media usable. But it reduces
write speed to half nominal speed even if the media is in perfect shape.
For the case of flawless media, one may use -stream_recording "on" to get
full speed.
@ -1475,13 +1445,10 @@ It issues an own FAILURE event.
"fatal" acts like "failure" but issues the own event as FATAL.
This is the default.
.br
With occasion "file_extraction" there are three behaviors:
With occasion "file_extraction" there are two behaviors:
.br
"keep" maintains incompletely extracted files on disk. This is the default.
.br
"delete" removes files which encountered errors during content extraction.
.br
"best_effort" starts a revovery attempt by means of -extract_cut.
"keep" maintains incompletely extracted files on disk. "delete" removes
files which encountered errors during content extraction.
.TP
.B Dialog mode control:
.TP
@ -1744,25 +1711,9 @@ Try to read data blocks from the indev drive, eventually copy them to a
disk file, and finally report about the encountered quality. Several options
may be used to modify the default behavior.
.br
The options given with this command override the default settings which
may have been changed by option -check_media_defaults. See there for a
description of options.
An option consists of a keyword, a "=" character, and a value.
.br
The result list tells intervals of 2 KiB blocks with start address, number
of blocks and quality. Qualities which begin with "+" are
supposed to be valid readable data. Qualities with "-" are no valid data.
.br
Alternatively it is possible to report damaged files rather than blocks.
.TP
\fB\-check_media_defaults\fR [option [option ...]] --
Preset options for runs of -check_media, -extract_cut and best_effort
file extraction. Eventual options given with -check_media will override the
preset options. -extract_cut will override some options automatically.
.br
An option consists of a keyword, a "=" character, and a value. Options
may override each other. So their sequence matters.
.br
The default setting at program start is:
Default is:
.br
use=indev what=tracks min_lba=-1 max_lba=-1 retry=default
time_limit=28800 item_limit=100000
@ -1771,14 +1722,7 @@ abort_file=/var/opt/xorriso/do_abort_check_media
.br
data_to='' sector_map='' map_with_volid=off patch_lba0=off report=blocks
.br
Option "reset=now" restores these startup defaults.
.br
Non-default options are:
.br
"report=files" lists the files which use damaged blocks (not with use=outdev).
The format is like with find -exec report_damage.
.br
"report=blocks_files" first lists damaged blocks and then affected files.
Non-default settings:
.br
"use=outdev" reads from the output drive instead of the input drive. This
avoids loading the ISO image tree from media.
@ -1837,6 +1781,15 @@ have an -indev and a loaded image. ":force" may be appended after the number.
.br
"use=sector_map" does not read any media but loads the file given by option
sector_map= and processes this virtual outcome.
.br
The result list tells intervals of 2 KiB blocks with start address, number
of blocks and quality. Qualities which begin with "+" are
supposed to be valid readable data. Qualities with "-" are no valid data.
.br
"report=files" lists the files which use damaged blocks (not with use=outdev).
The format is like with find -exec report_damage.
.br
"report=blocks_files" first lists damaged blocks and then affected files.
.TP
.B osirrox restore options:
.PP
@ -1901,21 +1854,6 @@ restored.
Performs -extract with each of the iso_rr_path arguments. disk_path will be
composed from iso_rr_path by replacing iso_rr_prefix by disk_prefix.
.TP
\fB\-extract_cut\fR iso_rr_path byte_offset byte_count disk_path
Copy a byte interval from a data file out of an ISO image into a newly created
disk file.
Two restrictions apply:
.br
The data bytes of iso_rr_path need to be already stored in the loaded ISO image
and byte_offset must be a multiple of 2048, e.g. an integer with suffix
s, m, or g.
.br
This option is implemented by a special run of -check_media and governed by
most of the options which can be set by -check_media_defaults.
Its main purpose is to allow handling of large files if they are not supported
by mount -t iso9660 and if the reading system is unable to buffer them as
a whole.
.TP
\fB\-cpx\fR iso_rr_path [***] disk_path
Extract single leaf file objects from the ISO image and store them under
the address given by disk_path. If more then one iso_rr_path is given then
@ -2099,13 +2037,6 @@ if its start matches the filter text. No wildcards.
\fB\-status_history_max\fR number
Set maximum number of history lines to be reported with -status "long_history".
.TP
\fB\-list_delimiter\fR word
Set the list delimiter to be used instead of "--". It has to be a single word,
must not be empty, not longer than 80 characters, and must not contain
quotation marks.
.br
For brevity the list delimiter is referred as "--" throughout this text.
.TP
\fB\-temp_mem_limit\fR number["k"|"m"]
Set the maximum size of temporary memory to be used for image dependent
buffering. Currently this applies to pattern expansion only.
@ -2206,7 +2137,7 @@ Manipulating an existing ISO image on the same media
.br
Copy modified ISO image from one media to another
.br
Operate on storage facilities other than optical drives
Write a ISO image into a pipe
.br
Perform multi-session runs as of cdrtools traditions
.br
@ -2358,17 +2289,7 @@ first and only session to the output drive.
.br
-commit -eject all
.SS
.B Operate on storage facilities other than optical drives
Full read-write operation is possible with regular files and block devices:
.br
\fB$\fR xorriso -dev stdio:/tmp/regular_file ...
.br
Other writeable file types are supported write-only:
.br
\fB$\fR xorriso -outdev stdio:/tmp/named_pipe ...
.br
Among the write-only drives is standard output:
.br
.B Write a ISO image into a pipe
\fB$\fR xorriso -outdev - \\
.br
...
@ -2498,8 +2419,7 @@ This makes most sense with backups on non-erasable media like CD-R,
DVD-R, DVD+R if the full backup leaves substantial remaining capacity
on media and if the expected changes are much smaller than the full backup.
An update run will probably save no time but last longer than a full backup.
Other good reasons may be given if read speed is much higher than write speed
or if file size changes happen too often within the write time of a full backup.
Another good reason may be given if read speed is much higher than write speed.
.br
With \fBmount\fR option \fB"sbsector="\fR it is possible to access the session
trees which represent the older backup versions. With CD media, Linux mount

File diff suppressed because it is too large Load Diff

View File

@ -305,10 +305,6 @@ int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
int Xorriso_option_check_media(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -check_media_defaults */
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
/* @param flag bit0=recursive (-chgrp_r)
*/
@ -414,10 +410,6 @@ int Xorriso_option_error_behavior(struct XorrisO *xorriso,
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Option -extract_cut */
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
char *start, char *count, char *disk_path, int flag);
/* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
@ -451,10 +443,6 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
/* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
/* Option -list_delimiter */
int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
int flag);
/* Option -list_formats */
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);

View File

@ -63,12 +63,12 @@ GPL software included:<BR>
<DT>libburn-0.5.3</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
furthered since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.8</DT>
<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.6</DT>
<DT>libisoburn-0.2.4</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>
@ -141,11 +141,6 @@ Adjustable thresholds for abort, exit value, and problem reporting.
<DL>
<DT>Get an overview of drives and their addresses</DT>
<DD>#<KBD>&nbsp;xorriso -devices</KBD></DD>
<DD><KBD>...</KBD></DD>
<DD><KBD>0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'</KBD></DD>
<DD><KBD>1 -dev '/dev/scd1' rwrw-- : 'PHILIPS ' 'SPD3300L'</KBD></DD>
<DD><KBD>2 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'</KBD></DD>
<DD><KBD>...</KBD></DD>
<DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX .
</DT>
<DT>Ordinary users should then get granted rw access to the /dev files
@ -278,15 +273,6 @@ with ".o" or ".swp" which are excluded by options -not_leaf.
<DT>
<HR>
</DT>
<DT>ISO images may not only be stored on optical media but also in
regular disk files or block devices for full multi-session operation.
The prefix &quot;stdio:&quot; indicates that normal file operations are
desired rather than MMC drive commands:
</DT>
<DD>$<KBD>&nbsp;xorriso -dev stdio:/tmp/regular_file ...other.options...</DD>
<DT>Other file types are suitable only for writing but not for reading:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev stdio:/tmp/named_pipe ...other.options...</DD>
<DT>In batch mode it is possible to operate xorriso in a pipeline
with an external consumer of the generated ISO image. Any message
@ -346,8 +332,8 @@ are interested in using BD-R media.
<P>
<DL>
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.2.6.pl00.tar.gz">xorriso-0.2.6.pl00.tar.gz</A>
(1050 KB).
<DD><A HREF="xorriso-0.2.4.pl00.tar.gz">xorriso-0.2.4.pl00.tar.gz</A>
(1040 KB).
</DD>
</DL>
</DD>
@ -372,28 +358,29 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
<HR>
<P>
Bug fixes towards xorriso-0.2.4.pl00:
Bug fixes towards xorriso-0.2.2.pl01:
<UL>
<LI>-format full did not re-format already formatted DVD+RW</LI>
<!--
<LI>- none -</LI>
-->
</UL>
</P>
<P>
Enhancements towards previous stable version xorriso-0.2.4.pl00:
Enhancements towards previous stable version xorriso-0.2.2.pl01:
<UL>
<LI>Capability to insert and extract files far larger than 4 GB</LI>
<LI>New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
<LI>
Included libburn has enhanced Linux drive access and listing code
</LI>
<LI>
New option -check_media
</LI>
<LI>
New -find test -damaged, new -find actions "report_damage", "report_lba"
</LI>
<LI>
New -error_behavior occasion "file_extraction"
</LI>
<LI>New option -extract_cut to retrieve data from oversized files</LI>
<LI>New option -check_media_defaults</LI>
<LI>New -error_behavior "file_extraction" behavior "best_effort"</LI>
<LI>New option -list_delimiter</LI>
</UL>
</P>
@ -402,15 +389,15 @@ Enhancements towards previous stable version xorriso-0.2.4.pl00:
<P>
<DL>
<DT><H3>Development snapshot, version 0.2.7 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.6.pl00:
<DT><H3>Development snapshot, version 0.2.5 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.4.pl00:
<UL>
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>Enhancements towards stable version 0.2.6.pl00:
<DD>Enhancements towards stable version 0.2.4.pl00:
<UL>
<LI>- none yet -</LI>
<!--
@ -418,9 +405,9 @@ Enhancements towards previous stable version xorriso-0.2.4.pl00:
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.2.7</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.2.7 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.7)</A></DD>
<DD><A HREF="README_xorriso_devel">README 0.2.5</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.2.5 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.5)</A></DD>
<DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
@ -430,8 +417,8 @@ libburnia libraries.
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.2.7.tar.gz">xorriso-0.2.7.tar.gz</A>
(1050 KB).
<A HREF="xorriso-0.2.5.tar.gz">xorriso-0.2.5.tar.gz</A>
(1040 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained
from repositories of

View File

@ -18,7 +18,7 @@
#ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.2.6"
#define Xorriso_program_versioN "0.2.4"
/** The source code release timestamp */
#include "xorriso_timestamp.h"
@ -65,13 +65,6 @@ struct SectorbitmaP; /* Distiniction between valid and invalid sectors */
#define Xorriso_rc_nuM 4
/* Default setting for the size limit of single data files:
100 extents with 4 GB - 2 kB each = 400 GB - 200 kB
*/
#define Xorriso_default_file_size_limiT \
(((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 204800)
struct XorrisO { /* the global context of xorriso */
int libs_are_started;
@ -99,8 +92,6 @@ struct XorrisO { /* the global context of xorriso */
int add_plainly;
off_t split_size;
char list_delimiter[81];
/* >>> put libisofs aspects here <<< */
int do_joliet;
@ -160,7 +151,6 @@ struct XorrisO { /* the global context of xorriso */
int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */
struct CheckmediajoB *check_media_default;
struct SectorbitmaP *in_sector_map; /* eventual sector validity bitmap */
@ -225,8 +215,6 @@ struct XorrisO { /* the global context of xorriso */
int temp_mem_limit;
off_t file_size_limit;
struct ExclusionS *disk_exclusions;
int disk_excl_mode; /* bit0= on (else off)
bit1= parameter too (else rekursion only)
@ -266,7 +254,7 @@ struct XorrisO { /* the global context of xorriso */
FILE *errfile_fp;
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
int extract_error_mode; /* 0=best_effort , 1=keep , 2=delete */
int extract_error_mode; /* 0=(not yet: best_effort) , 1=keep , 2=delete */
char return_with_text[20];
int return_with_severity;
@ -315,7 +303,7 @@ struct XorrisO { /* the global context of xorriso */
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
/* result (stdout, R: ) */
char result_line[10*SfileadrL];
char result_line[5*SfileadrL];
int result_line_counter;
int result_page_counter;
int result_open_line_len;
@ -658,8 +646,6 @@ int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
int *end_lba, int *damage_filter, int flag);
int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag);
struct SplitparT;
@ -725,8 +711,6 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag);
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);
int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
int flag);
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.09.19.180001"
#define Xorriso_timestamP "2008.08.24.160001"

View File

@ -74,13 +74,6 @@ int Xorriso_findi_iter(struct XorrisO *xorriso, IsoDir *dir_node, off_t *mem,
IsoNode ***node_array, int *node_count, int *node_idx,
IsoNode **iterated_node, int flag);
int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag);
int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
char *img_path, char *disk_path,
off_t img_offset, off_t disk_offset,
off_t bytes, int flag);
#define LIBISO_ISDIR(node) (iso_node_get_type(node) == LIBISO_DIR)
#define LIBISO_ISREG(node) (iso_node_get_type(node) == LIBISO_FILE)
@ -426,7 +419,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
*/
int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
{
int ret, hret, not_writeable= 0, has_what, aquire_flag, load_lba;
int ret, hret, not_writeable= 0, has_what, aquire_flag;
uint32_t size;
struct burn_drive_info *dinfo= NULL, *out_dinfo, *in_dinfo;
struct burn_drive *drive, *out_drive, *in_drive;
@ -522,7 +515,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
{ret= -1; goto ex;}
if(state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
sprintf(xorriso->info_text, "Disc status unsuitable for writing");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
not_writeable= 1;
}
}
@ -583,14 +576,6 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
if(xorriso->img_read_error_mode>0)
iso_set_abort_severity("SORRY");
if(state != BURN_DISC_BLANK) {
ret= isoburn_disc_get_msc1(drive, &load_lba);
if(ret > 0) {
sprintf(xorriso->info_text,
"Loading ISO image tree from LBA %d", load_lba);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
}
ret= isoburn_read_image(drive, ropts, &volset);
/* <<< Resetting to normal thresholds */
@ -849,7 +834,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
struct burn_session **sessions;
struct burn_track **tracks;
enum burn_disc_status s;
IsoImage *image= NULL;
IsoImage *image = NULL;
ElToritoBootImage *bootimg;
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
@ -905,10 +890,8 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
}
ret= isoburn_igopt_new(&sopts, 0);
if(ret<=0) {
Xorriso_process_msg_queues(xorriso, 0);
if(ret<=0)
return(ret);
}
relax= isoburn_igopt_allow_deep_paths;
/* Adjust or discard boot image */
@ -937,7 +920,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
}
isoburn_igopt_set_level(sopts, 3);
isoburn_igopt_set_level(sopts, 2);
isoburn_igopt_set_extensions(sopts, 1|((!!xorriso->do_joliet)<<1));
isoburn_igopt_set_relaxed(sopts, isoburn_igopt_allow_deep_paths);
isoburn_igopt_set_sort_files(sopts, 1);
@ -979,17 +962,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
if(ret<0)
{ret= 0; goto ex;}
/* >>> omit iso_image_update_sizes if the image was filled up very quickly */;
ret= iso_image_update_sizes(image);
if(ret < 0) {
Xorriso_process_msg_queues(xorriso, 0);
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
if(ret<0)
{ret= 0; goto ex;}
}
Xorriso_set_abort_severity(xorriso, 1);
if (xorriso->grow_blindly_msc2 >= 0 &&
xorriso->out_drive_handle != xorriso->in_drive_handle) {
@ -1218,7 +1190,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
next_base_count= progress.sector;
}
if(first_base_time > 0 &&
current_time - first_base_time >= 10 &&
current_time - first_base_time >= 3 &&
progress.sectors > first_base_count) {
norm= (1.0 - quot);
if(norm < 0.0001)
@ -1232,7 +1204,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
norm= 1.0;
}
if(base_time > 0 &&
current_time - base_time >= 10 && progress.sectors > base_count) {
current_time - base_time >= 3 && progress.sectors > base_count) {
quot= ((double) progress.sector - base_count)
/ ((double) progress.sectors - base_count);
time_prediction+= (1.0 - quot) / quot * (current_time - base_time);
@ -1268,7 +1240,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
current_time-start_time);
else
sprintf(xorriso->info_text,
"Thank you for being patient for %.f seconds",
"Thank you for being patient since %.f seconds",
current_time-start_time);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
@ -1277,8 +1249,6 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
if(aborting<=0)
aborting= Xorriso_check_burn_abort(xorriso, 0);
usleep(100000);
if(((time_t) Sfile_microtime(0)) - ((time_t) current_time) >= 1)
break;
}
}
return(1);
@ -1683,12 +1653,13 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
struct stat stbuf;
char sfe[5*SfileadrL];
off_t size= 0;
static off_t limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - (off_t) 1;
if(flag&8) {
if(cut_size > xorriso->file_size_limit && xorriso->file_size_limit > 0) {
if(cut_size > limit) {
sprintf(xorriso->info_text,
"File piece exceeds size limit of %.f bytes: %.f from %s\n",
(double) xorriso->file_size_limit, (double) cut_size,
(double) limit, (double) cut_size,
Text_shellsafe(disk_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
@ -1709,11 +1680,10 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
if(ret<=0)
goto ex;
return(1);
} else if(size > xorriso->file_size_limit && xorriso->file_size_limit > 0) {
} else if(size > limit) {
sprintf(xorriso->info_text,
"File exceeds size limit of %.f bytes: %s\n",
(double) xorriso->file_size_limit,
Text_shellsafe(disk_path, sfe, 0));
(double) limit, Text_shellsafe(disk_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
@ -2394,11 +2364,11 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
unsigned int fs_id;
dev_t dev_id;
ino_t ino_id;
uint32_t dummy;
IsoStream *stream;
IsoImage *volume;
IsoNode *node;
struct stat stbuf;
int dummy;
memset(type_text, 0, 5);
if(!xorriso->volset_change_pending)
@ -2413,11 +2383,10 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
if(ret<=0)
return(-1);
}
ret= Xorriso__file_start_lba(node, &dummy, 0);
if(ret != 0) {
Xorriso_process_msg_queues(xorriso, 0);
ret= iso_node_get_old_image_lba(node, &dummy, 0);
if(ret!=0)
return(0);
}
if(!LIBISO_ISREG(node))
return(0);
stream= iso_file_get_stream((IsoFile *) node);
@ -2592,7 +2561,7 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
char *what= "[unknown filetype]", sfe[5*SfileadrL], sfe2[5*SfileadrL];
char buf[32*1024], type_text[5], temp_path[SfileadrL];
char *link_target, *open_path_pt= NULL;
off_t todo= 0, size, seek_ret, last_p_count= 0, already_done;
off_t todo, size, seek_ret, last_p_count= 0;
void *data_stream= NULL;
mode_t mode;
dev_t dev= 0;
@ -2670,32 +2639,8 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
if(wanted>todo)
wanted= todo;
ret= Xorriso_iso_file_read(xorriso, data_stream, buf, wanted, 0);
if(ret<=0) {
if(xorriso->extract_error_mode == 0) {
close(write_fd);
write_fd= -1;
already_done= (size - todo) / (off_t) 2048;
already_done*= (off_t) 2048;
sprintf(xorriso->info_text,
"Starting best_effort handling on ISO file %s at byte %.f",
Text_shellsafe(img_path, sfe, 0), (double) already_done);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
ret= Xorriso_read_file_data(xorriso, node, img_path, open_path_pt,
already_done, already_done, size - already_done, 2);
if(ret >= 0)
xorriso->pacifier_byte_count+= todo;
if(ret > 0)
todo= 0;
else
todo= -1;
}
if(ret <= 0) {
sprintf(xorriso->info_text, "Cannot read all bytes from ISO file %s",
Text_shellsafe(img_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
}
if(ret<=0)
break;
}
wret= write(write_fd, buf, ret);
if(wret>=0) {
todo-= wret;
@ -2716,8 +2661,7 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node,
break;
}
}
if(write_fd > 0)
close(write_fd);
close(write_fd);
write_fd= -1;
if(todo > 0 && xorriso->extract_error_mode == 2 && open_path_pt != NULL) {
unlink(open_path_pt);
@ -2816,8 +2760,6 @@ restore_properties:;
ret= 1;
else
ret= Xorriso_restore_properties(xorriso, disk_path, node, flag&1);
if(todo < 0)
ret= 0;
ex:;
if(write_fd >= 0) {
close(write_fd);
@ -3686,17 +3628,8 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
}
if(flag&(1|4))
ret= 0;
else {
else
ret= isoburn_read_iso_head(drive, lba, &image_blocks, volume_id, 1);
if(image_blocks > track_size) {
sprintf(xorriso->info_text,
"Session %d bears ISO image size %ds larger than track size %ds",
session_no + 1, image_blocks, track_size);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING",
0);
image_blocks= track_size;
}
}
if(ret>0 && track_no==0) {
sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n",
session_no+1, lba, image_blocks , volume_id);
@ -4055,8 +3988,6 @@ int Xorriso_format_media(struct XorrisO *xorriso, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(0);
}
if(!(flag & 1))
mode_flag|= 16; /* enable re-formatting */
if(xorriso->do_dummy) {
sprintf(xorriso->info_text, "-dummy mode prevents formatting of media.");
@ -4228,13 +4159,13 @@ int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
int Xorriso__node_lba_cmp(const void *node1, const void *node2)
{
uint32_t lba1= 0, lba2= 0;
int ret;
int lba1= 0, lba2= 0;
ret= Xorriso__file_start_lba(*((IsoNode **) node1), &lba1, 0);
ret = iso_node_get_old_image_lba(*((IsoNode **) node1), &lba1, 0);
if(ret!=1)
lba1= 0;
ret= Xorriso__file_start_lba(*((IsoNode **) node2), &lba2, 0);
ret = iso_node_get_old_image_lba(*((IsoNode **) node2), &lba2, 0);
if(ret!=1)
lba2= 0;
return(lba1-lba2);
@ -5610,73 +5541,25 @@ int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
}
int Xorriso__start_end_lbas(IsoNode *node,
int *lba_count, int **start_lbas, int **end_lbas,
off_t *size, int flag)
int Xorriso_start_end_lba(struct XorrisO *xorriso, IsoNode *node,
int *start_lba, int *end_lba, off_t *size, int flag)
{
int section_count= 0, ret, i;
struct iso_file_section *sections= NULL;
uint32_t iso_start_lba;
int ret;
*lba_count= 0;
*start_lbas= *end_lbas= NULL;
*size= 0;
if(!LIBISO_ISREG(node))
return(0);
*size= iso_file_get_size((IsoFile *) node);
ret= iso_file_get_old_image_sections((IsoFile *) node, &section_count,
&sections, 0);
*start_lba= *end_lba= -1;
ret= iso_node_get_old_image_lba(node, &iso_start_lba, 0);
if(ret < 0)
{ret= -1; goto ex;}
if(ret != 1 || section_count <= 0)
{ret= 0; goto ex;}
*start_lbas= calloc(section_count, sizeof(int));
*end_lbas= calloc(section_count, sizeof(int));
if(*start_lbas == NULL || *end_lbas == NULL)
{ret= -1; goto ex;}
for(i= 0; i < section_count; i++) {
(*start_lbas)[i]= sections[i].block;
(*end_lbas)[i]= sections[i].block + sections[i].size / 2048 - 1;
if(sections[i].size % 2048)
(*end_lbas)[i]++;
}
*lba_count= section_count;
ret= 1;
ex:;
if(sections != NULL)
free((char *) sections);
if(ret <= 0) {
if((*start_lbas) != NULL)
free((char *) *start_lbas);
if((*end_lbas) != NULL)
free((char *) *end_lbas);
*start_lbas= *end_lbas= NULL;
*lba_count= 0;
}
return(ret);
}
int Xorriso__file_start_lba(IsoNode *node,
int *lba, int flag)
{
int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, i, ret;
off_t size;
*lba= -1;
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
&size, 0);
if(ret <= 0)
return(ret);
for(i= 0; i < lba_count; i++) {
if(*lba < 0 || start_lbas[i] < *lba)
*lba= start_lbas[i];
}
if(start_lbas != NULL)
free((char *) start_lbas);
if(end_lbas != NULL)
free((char *) end_lbas);
if(*lba < 0)
return(-1);
if(ret != 1)
return(0);
*start_lba= iso_start_lba;
if(LIBISO_ISREG(node))
*size= iso_file_get_size((IsoFile *) node);
*end_lba= *start_lba + *size / 2048;
if((*size % 2048) == 0 && *end_lba > *start_lba)
(*end_lba)--;
return(1);
}
@ -5689,78 +5572,57 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
off_t *damage_start, off_t *damage_end,
int flag)
{
int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, sect;
int i, sectors, sector_size, ret;
off_t sect_base= 0, size= 0, byte;
int start_lba, end_lba, i, sectors, sector_size, damaged= 0, ret;
int next_good_lba= -1, first_bad_lba= -1;
off_t size= 0;
struct SectorbitmaP *map;
*damage_start= *damage_end= -1;
map= xorriso->in_sector_map;
if(map == NULL)
return(0);
ret= Xorriso_start_end_lba(xorriso, node, &start_lba, &end_lba, &size, 0);
if(ret <= 0)
return(ret);
Sectorbitmap_get_layout(map, &sectors, &sector_size, 0);
sector_size/= 2048;
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
&size, 0);
if(ret <= 0) {
Xorriso_process_msg_queues(xorriso, 0);
return(ret);
}
for(sect= 0; sect < lba_count; sect++) {
for(i= start_lbas[sect]; i <= end_lbas[sect]; i+= sector_size) {
if(Sectorbitmap_is_set(map, i / sector_size, 0) == 0) {
byte= ((off_t) 2048) * ((off_t) (i - start_lbas[sect])) + sect_base;
if(*damage_start < 0 || byte < *damage_start)
*damage_start= byte;
if(byte + (off_t) 2048 > *damage_end)
*damage_end= byte + (off_t) 2048;
}
for(i= start_lba; i <= end_lba; i+= sector_size)
if(Sectorbitmap_is_set(map, i / sector_size, 0) == 0) {
damaged= 1;
if(first_bad_lba < 0)
first_bad_lba= i;
next_good_lba= (i / sector_size + 1) * sector_size;
}
sect_base+= ((off_t) 2048) *
((off_t) (end_lbas[sect] - start_lbas[sect] + 1));
if(damaged) {
*damage_start= (first_bad_lba - start_lba) * 2048;
*damage_end= (next_good_lba - start_lba) * 2048;
if(*damage_end > size)
*damage_end= size;
return(1);
}
if(*damage_end > size)
*damage_end= size;
if(start_lbas != NULL)
free((char *) start_lbas);
if(end_lbas != NULL)
free((char *) end_lbas);
if(*damage_start < 0)
return(0);
return(1);
return(0);
}
int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path,
IsoNode *node, int flag)
{
int ret, *start_lbas= NULL, *end_lbas= NULL, lba_count, i;
int ret, start_lba, end_lba;
off_t size;
char sfe[5*SfileadrL];
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
&size, 0);
if(ret < 0) {
Xorriso_process_msg_queues(xorriso, 0);
{ret= -1; goto ex;}
}
ret= Xorriso_start_end_lba(xorriso, node, &start_lba, &end_lba, &size, 0);
if(ret < 0)
return(ret);
if(ret == 0)
{ret= 1; goto ex;} /* it is ok to ignore other types */
for(i= 0; i < lba_count; i++) {
sprintf(xorriso->result_line,
"File data lba: %2d , %8d , %8d , %8.f , %s\n",
i, start_lbas[i], end_lbas[i] + 1 - start_lbas[i], (double) size,
Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
}
ret= 1;
ex:;
if(start_lbas != NULL)
free((char *) start_lbas);
if(end_lbas != NULL)
free((char *) end_lbas);
return(ret);
return(1); /* it is ok to ignore other types */
sprintf(xorriso->result_line, "File data lba: %2d , %8d , %8d , %8.f , %s\n",
0, start_lba, end_lba + 1 - start_lba, (double) size,
Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0);
return(1);
}
@ -5883,9 +5745,8 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
struct stat *boss_stbuf, struct stat *stbuf,
int depth, int flag)
{
int ret, start_lba, end_lba, damage_filter, commit_filter, lba;
int ret, start_lba, end_lba, damage_filter, file_end_lba, file_start_lba;
off_t damage_start, damage_end, size;
int lba_count, *file_end_lbas= NULL, *file_start_lbas= NULL, i;
ret= Findjob_test(job, name, boss_stbuf, stbuf, depth, 0);
if(ret<=0)
@ -5899,33 +5760,16 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
if((damage_filter > 0) != (ret > 0))
return(0);
}
if(start_lba >= 0 && end_lba >= 0) {
ret= Xorriso__start_end_lbas(node, &lba_count,
&file_start_lbas, &file_end_lbas, &size, 0);
if(ret <= 0) {
Xorriso_process_msg_queues(xorriso, 0);
goto ex;
}
for(i= 0; i < lba_count; i++) {
if(file_end_lbas[i] < start_lba || file_start_lbas[i] > end_lba)
{ret= 0; goto ex;}
}
ret= Xorriso_start_end_lba(xorriso, node, &file_start_lba, &file_end_lba,
&size, 0);
if(ret <= 0)
return(ret);
if(file_end_lba < start_lba || file_start_lba > end_lba)
return(0);
}
Findjob_get_commit_filter(job, &commit_filter, 0);
if(commit_filter & 1) { /* -pending_data */
if(!LIBISO_ISREG(node))
{ret= 0; goto ex;}
ret= Xorriso__file_start_lba(node, &lba, 0);
if(ret > 0 && lba >= 0)
{ret= 0; goto ex;}
}
ret= 1;
ex:;
if(file_start_lbas != NULL)
free((char *) file_start_lbas);
if(file_end_lbas != NULL)
free((char *) file_end_lbas);
return(ret);
return(1);
}
@ -6583,7 +6427,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
"Closed media with data detected. Need blank or appendable media.");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
if(burn_disc_erasable(drive)) {
sprintf(xorriso->info_text, "Try -blank as_needed\n");
sprintf(xorriso->info_text, "Try --blank_fast\n");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
}
} else if(disc_state == BURN_DISC_EMPTY) {
@ -6779,6 +6623,13 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
IsoFile *filenode= NULL;
IsoStream *iso_stream= NULL;
/* for debugging
#define Libisofs_lba_tesT yes
*/
#ifdef Libisofs_lba_tesT
uint32_t lba;
#endif
*stream= NULL;
if(flag&1) {
node= (IsoNode *) node_pt;
@ -6794,6 +6645,13 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
return(0);
}
#ifdef Libisofs_lba_tesT
ret = iso_node_get_old_image_lba(node, &lba, 0);
sprintf(xorriso->info_text, "%s : ret= %d , LBA= %lx",
pathname, ret, (unsigned long) lba);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
#endif
filenode= (IsoFile *) node;
iso_stream= iso_file_get_stream(filenode);
if(iso_stream==NULL) {
@ -7050,7 +6908,6 @@ int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag)
}
/* @param flag bit0= this is a follow-up session (i.e. on CD: TAO)
bit1= no pacifier messages
@return <=0 error, 1= done, 2= aborted due to limit
*/
int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
@ -7066,7 +6923,7 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
struct burn_drive *drive;
struct burn_drive_info *dinfo;
char data[64*1024], sfe[5*SfileadrL];
off_t data_count, to_read, read_count= 0, write_amount;
off_t data_count, to_read;
double pre_read_time, post_read_time, time_diff, total_time_diff= 0;
double last_abort_file_time= 0;
struct stat stbuf;
@ -7219,18 +7076,10 @@ abort_check:;
if(time_diff > 1.0 && i > 0)
quality= Xorriso_read_quality_sloW;
}
write_amount= data_count;
if(data_count > 0) {
read_count+= data_count;
if(job->data_to_limit >= 0 && read_count > job->data_to_limit)
write_amount-= (read_count - job->data_to_limit);
}
if(write_amount > 0) {
if(job->data_to_fd >= 0) {
ret= lseek(job->data_to_fd,
((off_t) (i + from_lba)) * (off_t) 2048 + job->data_to_offset,
SEEK_SET);
ret= lseek(job->data_to_fd, ((off_t) (i + from_lba)) * (off_t) 2048,
SEEK_SET);
if(ret == -1) {
failed_to_write:;
sprintf(xorriso->info_text, "Cannot write %d bytes to lba %d of %s",
@ -7240,7 +7089,7 @@ failed_to_write:;
"FAILURE", 0);
{ret= 0; goto ex;}
}
ret= write(job->data_to_fd, data, write_amount);
ret= write(job->data_to_fd, data, data_count);
if(ret == -1)
goto failed_to_write;
}
@ -7256,13 +7105,10 @@ failed_to_write:;
start_lba= i + from_lba;
prev_quality= quality;
}
if(!(flag & 2)) {
xorriso->pacifier_count+= to_read;
if(post_read_time - xorriso->last_update_time >=
xorriso->pacifier_interval)
Xorriso_pacifier_callback(xorriso, "sectors examined",
xorriso->pacifier_count+= to_read;
if(post_read_time - xorriso->last_update_time >= xorriso->pacifier_interval)
Xorriso_pacifier_callback(xorriso, "sectors examined",
xorriso->pacifier_count, xorriso->pacifier_total, "", 0);
}
}
if(prev_quality >= 0) {
ret= Spotlist_add_item(spotlist, start_lba,
@ -7337,7 +7183,7 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
Xorriso_pacifier_reset(xorriso, 0);
job->start_time= time(NULL);
mode= job->mode;
if(job->min_lba > 0) {
if(job->min_lba >= 0) {
start_lba= job->min_lba;
ret= Spotlist_add_item(*spotlist, 0, job->min_lba,
Xorriso_read_quality_untesteD, 0);
@ -7470,185 +7316,3 @@ ex:;
burn_disc_free_multi_caps(&caps);
return(ret);
}
/* @param flag bit1= for Xorriso_check_interval(): no pacifier messages
*/
int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
char *img_path, char *disk_path,
off_t img_offset, off_t disk_offset,
off_t bytes, int flag)
{
int ret, i, lba_count= 0, *start_lbas= NULL, *end_lbas= NULL, read_chunk= 16;
int lba, count, blocks, quality, spot, bad_extract= 0;
off_t size= 0, file_base_bytes= 0, file_processed_bytes= 0, img_adr;
off_t new_file_base_bytes, upto_file_bytes, start_byte= 0;
char sfe[5*SfileadrL];
struct SpotlisT *spotlist= NULL;
struct CheckmediajoB *job= NULL;
upto_file_bytes= img_offset + bytes;
/* >>> make Xorriso_check_interval() ready for copying in byte granularity */
if(img_offset % (off_t) 2048) {
sprintf(xorriso->info_text,
"Image address offset is not a multiple of 2048");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, &size,
0);
if(ret <= 0) {
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text,
"File object %s is currently not a data file from the loaded image",
Text_shellsafe(img_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto ex;
}
if(img_offset + bytes < size && bytes > 0)
size= img_offset + bytes;
ret= Checkmediajob_new(&job, 0);
if(ret <= 0)
goto ex;
if(xorriso->check_media_default != NULL)
Checkmediajob_copy(xorriso->check_media_default, job, 0);
job->min_lba= -1;
job->max_lba= -1;
job->sector_map_path[0]= 0;
ret= Spotlist_new(&spotlist, 0);
if(ret <= 0)
{ret= -1; goto ex;}
if(Sfile_str(job->data_to_path, disk_path, 0) <= 0)
{ret= -1; goto ex;}
Xorriso_open_job_data_to(xorriso, job, 0);
if(ret <= 0)
goto ex;
for(i= 0; i < lba_count && file_base_bytes < upto_file_bytes; i++) {
lba= start_lbas[i];
count= end_lbas[i] + 1 - start_lbas[i];
new_file_base_bytes= file_base_bytes + ((off_t) count) * (off_t) 2048;
/* skip intervals before img_offset */
if(new_file_base_bytes <= img_offset) {
file_base_bytes= new_file_base_bytes;
continue;
}
/* Eventually adjust first interval start */
img_adr= ((off_t) lba) * (off_t) 2048;
if(file_base_bytes < img_offset) {
img_adr+= img_offset - file_base_bytes;
lba= img_adr / (off_t) 2048;
count= end_lbas[i] + 1 - lba;
file_base_bytes= img_offset;
}
/* Eventually omit surplus blocks */
if(new_file_base_bytes > upto_file_bytes)
count-= (new_file_base_bytes - upto_file_bytes) / (off_t) 2048;
/* Adjust job */
job->data_to_offset= file_processed_bytes - img_adr + disk_offset;
job->data_to_limit= size - file_base_bytes;
file_processed_bytes+= ((off_t) count) * (off_t) 2048;
ret= Xorriso_check_interval(xorriso, spotlist, job, lba, count, read_chunk,
(flag & 2));
if(ret <= 0)
goto ex;
if (ret == 2) {
sprintf(xorriso->info_text, "Attempt aborted to extract data from %s",
Text_shellsafe(img_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
file_base_bytes= new_file_base_bytes;
}
/* Use spotlist to evaluate damage */
file_base_bytes= 0;
count= Spotlist_count(spotlist, 0);
for(spot= 0; spot < count; spot++) {
ret= Spotlist_get_item(spotlist, spot, &lba, &blocks, &quality, 0);
if(ret <= 0)
continue;
if(quality < Xorriso_read_quality_valiD) {
for(i= 0; i < lba_count; i++) {
if(start_lbas[i] <= lba && end_lbas[i] >= lba) {
start_byte= (lba - start_lbas[i]) * (off_t) 2048 + file_base_bytes;
break;
}
file_base_bytes+= ((off_t) (end_lbas[i] + 1 - start_lbas[i]))
* (off_t) 2048;
}
if(i < lba_count) {
sprintf(xorriso->info_text, "Bad extract : %14.f , %14.f , %s\n",
(double) start_byte, ((double) blocks) * 2048.0,
Text_shellsafe(disk_path, sfe, 0));
Xorriso_info(xorriso, 0);
bad_extract= 1;
}
}
}
ret= !bad_extract;
ex:;
if(start_lbas != NULL)
free((char *) start_lbas);
if(end_lbas != NULL)
free((char *) end_lbas);
Spotlist_destroy(&spotlist, 0);
Checkmediajob_destroy(&job, 0);
return(ret);
}
int Xorriso_extract_cut(struct XorrisO *xorriso,
char *img_path, char *disk_path,
off_t img_offset, off_t bytes, int flag)
{
int ret, stbuf_ret;
double mem_lut= 0.0;
char eff_img_path[SfileadrL], eff_disk_path[SfileadrL];
IsoImage *volume;
IsoNode *node;
ret= Xorriso_get_volume(xorriso, &volume, 0);
if(ret<=0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi,
img_path, eff_img_path, 0);
if(ret<=0)
return(ret);
ret= Xorriso_node_from_path(xorriso, volume, eff_img_path, &node, 0);
if(ret<=0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx,
disk_path, eff_disk_path, 2 | 4);
if(ret<=0)
return(ret);
Xorriso_pacifier_reset(xorriso, 0);
mem_lut= xorriso->last_update_time;
ret= Xorriso_handle_collision(xorriso, node, img_path, eff_disk_path,
disk_path, &stbuf_ret, 0);
if(ret<=0 || ret==3)
return(0);
ret= Xorriso_read_file_data(xorriso, node, eff_img_path, eff_disk_path,
img_offset, (off_t) 0, bytes, 0);
if(ret<=0)
return(ret);
ret= Xorriso_restore_properties(xorriso, eff_disk_path, node, 0);
if(ret<=0)
return(ret);
if(mem_lut != xorriso->last_update_time)
Xorriso_pacifier_callback(xorriso, "sectors examined",
xorriso->pacifier_count, 0, "", 1);
return(1);
}

View File

@ -19,7 +19,7 @@
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 2
#define xorriso_libisoburn_req_micro 6
#define xorriso_libisoburn_req_micro 4
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -310,8 +310,6 @@ struct CheckmediajoB {
char data_to_path[SfileadrL];
int data_to_fd;
off_t data_to_offset; /* usually 0 with image copy, negative with file copy */
off_t data_to_limit; /* used with file copy */
int patch_lba0;
int patch_lba0_msc1;
@ -334,9 +332,6 @@ struct CheckmediajoB {
int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
struct CheckmediajoB *job, int flag);
int Xorriso_extract_cut(struct XorrisO *xorriso,
char *img_path, char *disk_path,
off_t img_offset, off_t bytes, int flag);
#endif /* Xorrisoburn_includeD */