Compare commits

...

32 Commits

Author SHA1 Message Date
a21d632153 Tagged release of libisoburn 0.2.8 2008-10-15 13:20:58 +00:00
5eae306db2 Documented changes and release timestamp 2008-10-12 12:40:18 +00:00
8f10ec3032 Version leap to 0.2.8 2008-10-12 12:35:57 +00:00
1dac61c338 Preparing release 2008-10-12 08:50:20 +00:00
04efd40a86 Polishing multi-line dialog 2008-10-10 13:41:07 +00:00
76770e97bf Enabled dialog for multi-lines and newline characters in quotation marks 2008-10-10 13:11:46 +00:00
cb6646d49e Introduced xorriso development compiler script option -no_libreadline 2008-10-09 15:01:06 +00:00
cd92b00f61 Introduced libburn ./configure option --disable-libreadline 2008-10-09 15:00:11 +00:00
a0972af58f Changed newly introduced -rom_toc_scan nonrom_off to off:emul_off 2008-10-08 13:59:37 +00:00
8945bce9ff Polished man xorriso 2008-10-07 15:23:42 +00:00
b4b2572286 libisoburn now demands libisofs-0.6.10 2008-10-06 11:50:08 +00:00
e40ddf8834 Adapted standalone LIBISOFS_*_VERSION to libisofs 0.6.10 2008-10-06 11:42:01 +00:00
afd2f0cd61 libisoburn now demands libburn-0.5.4 2008-10-05 12:53:24 +00:00
e93ab421c2 Adapted standalone BURN_*_VERSION to libburn 0.5.5 2008-10-05 12:52:23 +00:00
e65346cd1b Bug fix: Random target filenames with looping symbolic links 2008-10-05 09:37:44 +00:00
7685ca5d64 -rom_toc_scan nonrom_off disables toc emulation on overwriteables 2008-10-05 07:55:20 +00:00
5d939f185c Relocated the El Torito paragraph in man xorriso 2008-10-04 17:32:45 +00:00
c1c033900e Fine tuning about ./configure option --disable-libreadline 2008-10-02 11:09:20 +00:00
e1c4ed7d17 Introduced xorriso-standalone ./configure option --disable-libreadline 2008-10-02 10:55:28 +00:00
8898c58d3c Enabled -as cdrecord blank=as_needed 2008-10-02 09:27:21 +00:00
18da5ec3f2 Small adjustments about -boot_image 2008-10-02 09:24:58 +00:00
d5ec0342cc Small adjustments about -boot_image 2008-09-30 17:50:14 +00:00
6af8449f5a Mentioned progress and bug fixes in 0.2.7 2008-09-30 10:52:32 +00:00
69a6b4f4a1 Adjustments about -boot_image after testing with various media types 2008-09-30 10:28:46 +00:00
daadfc113d Requiring libisofs-0.6.9 because of bug fixes with El Torito 2008-09-30 10:23:37 +00:00
1625db8bbd Made -boot_image isolinux activation obey -overwrite setting 2008-09-28 11:33:47 +00:00
2026814a80 Standalone version switch to libisofs-0.6.9 (vreixoml 387) to avoid SIGSEGV 2008-09-28 11:29:36 +00:00
722e091460 A first attempt on making bootable ISO images 2008-09-26 16:14:21 +00:00
2d1d4d4b37 Bug fix: -as mkisofs -iso-level was accused to be an unknown option 2008-09-26 12:10:32 +00:00
fdea98935a Trying to get pacifiers of simultaneously running emulations into sync 2008-09-24 15:55:26 +00:00
7044f2cba1 Documented changes and release timestamp 2008-09-20 09:45:17 +00:00
f65dc9aa82 Version leap to 0.2.7 2008-09-20 09:43:55 +00:00
17 changed files with 1242 additions and 291 deletions

24
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.5.tar.gz
http://files.libburnia-project.org/releases/libisoburn-0.2.8.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 media supported
creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported
by libburn. This includes media like DVD+RW, which do not support multi-session
management on media level and even plain disk files or block devices.
@ -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.5 :
- libburn.so.4 , version libburn-0.5.2 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
Dynamic library and compile time header requirements for libisoburn-0.2.8 :
- libburn.so.4 , version libburn-0.5.4 or higher
- libisofs.so.6 , version libisofs-0.6.10 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.5.tar.gz, take it to a directory of your choice
Obtain libisoburn-0.2.8.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.2.5.tar.gz
cd libisoburn-0.2.5
tar xzf libisoburn-0.2.8.pl00.tar.gz
cd libisoburn-0.2.8
Within that directory execute:
@ -57,7 +57,7 @@ as well as
xorriso
libisoburn includes a command line and dialog application named xorriso,
libisoburn comes with a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and
users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation.
@ -72,6 +72,12 @@ Several alias links point to the xorriso binary:
xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying already enabled
By default xorriso will depend on libreadline if the readline-dev headers
are present. This dependcy can be avoided by running
./configure --prefix=/usr --disable-libreadline
make clean ; make
Never omit the "make clean" command after switching libreadline enabling.
Drives and Disk File Objects

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.2.5], [http://libburnia-project.org])
AC_INIT([libisoburn], [0.2.8], [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=5
ISOBURN_MICRO_VERSION=8
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 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 ts A80920
dnl This is the release version 0.2.8 = libisoburn.so.1.17.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 = 14 - 13 = 1 . Library name = libisoburn.so.1.13.0
dnl SONAME = 18 - 17 = 1 . Library name = libisoburn.so.1.17.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=14
LT_AGE=13
LT_CURRENT=18
LT_AGE=17
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -86,22 +86,28 @@ AC_SUBST(ARCH)
AC_SUBST(LIBBURN_ARCH_LIBS)
AC_ARG_ENABLE(libreadline,
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
, enable_libreadline=yes)
if test x$enable_libreadline = xyes; then
dnl Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE"
READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF)
AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.5.2
LIBISOFS_REQUIRED=0.6.8
LIBBURN_REQUIRED=0.5.4
LIBISOFS_REQUIRED=0.6.10
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

View File

@ -58,7 +58,7 @@ extern void *libisoburn_default_msgs_submit_handle;
extern int libisoburn_default_msgs_submit_flag;
int isoburn_emulate_toc(struct burn_drive *d, int flag);
static int isoburn_emulate_toc(struct burn_drive *d, int flag);
int isoburn_initialize(char msg[1024], int flag)
@ -263,6 +263,7 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
@param flag bit0= pretent blank on overwriteable media
bit3= if the drive reports a -ROM profile then try to read
table of content by scanning for ISO image headers.
bit4= do not emulate TOC on overwriteable media
*/
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag)
@ -312,11 +313,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->emulation_mode= -1;
goto ex;
}
/* try to read emulated toc */
ret= isoburn_emulate_toc(d, 0);
if(ret<0) {
(*o)->emulation_mode= -1;
goto ex;
if(!(flag & 16)) {
/* try to read emulated toc */
ret= isoburn_emulate_toc(d, 0);
if(ret<0) {
(*o)->emulation_mode= -1;
goto ex;
}
}
}
@ -326,9 +329,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
if(readonly) {
/* This might be overwriteable media in a -ROM drive */
ret= isoburn_emulate_toc(d, 1);
if(ret<0)
goto ex;
if((flag & 16)) {
ret= 0;
} else {
ret= isoburn_emulate_toc(d, 1);
if(ret<0)
goto ex;
}
if(ret==0 && profile !=0x08 && (flag&8)) {
/* This might also be multi-session media which do not
get shown with a decent TOC.
@ -373,24 +380,38 @@ ex:
table of content by scanning for ISO image headers.
(depending on media type and drive state this might
help or it might make the resulting toc even worse)
bit4= do not emulate TOC on overwriteable media
*/
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag)
{
int ret, conv_ret, drive_grabbed= 0;
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
int ret, drive_grabbed= 0;
struct isoburn *o= NULL;
#ifndef NIX
/* <<< should be obsolete by new drive addressing of libburn-0.5.2 */
/* >>> but helps with kernel 2.4 to use /dev/sr */
int conv_ret;
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
if(conv_ret<=0)
strcpy(libburn_drive_adr, adr);
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
#else
ret= burn_drive_scan_and_grab(drive_infos, adr, flag & 1);
#endif /* ! NIX */
if(ret<=0)
goto ex;
drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag&8) | !!(flag&2));
(flag & 24) | !!(flag&2));
if(ret<=0)
goto ex;

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 10
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@ -208,7 +208,7 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 5
#define isoburn_libburn_req_micro 2
#define isoburn_libburn_req_micro 4
/** The minimum version of libisofs to be used with this version of libisoburn
@ -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 5
#define isoburn_header_version_micro 8
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -364,6 +364,7 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
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)
bit4= do not emulate table of content on overwriteable media
@return 1 = success , 0 = drive not found , <0 = other error
*/
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
@ -1183,10 +1184,9 @@ int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
/**
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
running isoburn_disc_write().
Revoke isoburn_prepare_*() instead of running isoburn_disc_write().
libisofs reserves resources and maybe already starts generating the
image stream when one of above two calls is performed. It is mandatory to
image stream when one of above three calls is performed. It is mandatory to
either run isoburn_disc_write() or to revoke the preparations by the
call described here.
@since 0.1.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.2.5.tar.gz
http://scdbackup.sourceforge.net/xorriso-0.2.8.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.5.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-0.2.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.2.5.tar.gz
cd xorriso-0.2.5
tar xzf xorriso-0.2.8.pl00.tar.gz
cd xorriso-0.2.8
Within that directory execute:
@ -74,6 +74,12 @@ The installation creates several alias links pointing to the xorriso binary:
xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying already enabled
If you want to avoid dependecy on libreadline although the libreadline
development package is installed, then rather build xorriso by:
./configure --prefix=/usr --disable-libreadline
make clean ; make
Never omit the "make clean" command after switching libreadline enabling.
Drives and Disk File Objects
@ -186,9 +192,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.5 :
- libburn.so.4 , version libburn-0.5.2 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
Dynamic library and compile time header requirements for libisoburn-0.2.8 :
- libburn.so.4 , version libburn-0.5.4 or higher
- libisofs.so.6 , version libisofs-0.6.10 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

@ -3566,18 +3566,410 @@ xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.5
24 Aug 2008 []
24 Aug 2008 [2015]
xorriso/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - xorriso-0.2.5 - 2008.08.24.173217
------------------------------------ cycle - xorriso-0.2.5 -
------------------------------------ cycle - xorriso-0.2.5 -
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
20 Sep 2008 [2067]
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
2008.09.20.093140 [2068]
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.7
20 Sep 2008 [2069]
xorriso/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - xorriso-0.2.7 - 2008.09.20.093140
2008.09.24.155424 [2077]
xorriso/xorrisoburn.c
Trying to get pacifiers of simultaneously running emulations into sync
2008.09.26.120934 [2082]
xorriso/xorriso.c
Bug fix: -as mkisofs -iso-level was accused to be an unknown option
2008.09.26.161331 [2083]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
A first attempt on making bootable ISO images
2008.09.28.112850 [2084]
xorriso/configure_ac.txt
Standalone version switch to libisofs-0.6.9 (vreixoml 387) to avoid SIGSEGV
2008.09.28.113256 [2085]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/convert_man_to_html.sh
xorriso/xorriso_eng.html
Made -boot_image isolinux activation obey -overwrite setting
2008.09.30.102243 [2088]
libisoburn/libisoburn.h
Requiring libisofs-0.6.9 because of bug fixes with El Torito
2008.09.30.102753 [2089]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Adjustments about -boot_image after testing with various media types
30 Sep 2008 [2090]
xorriso/xorriso_eng.html
Mentioned progress and bug fixes in 0.2.7
------------------------------------ cycle - xorriso-0.2.7 - 2008.09.30.102753
* Bug fix: -as mkisofs -iso-level was accused to be an unknown option
* Ability to write and maintain bootable ISO images based on ISOLINUX
2008.09.30.174925 [2091]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Small adjustments about -boot_image
2008.10.02.092354 [2092]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Small adjustments about -boot_image
2008.10.02.092635 [2093]
xorriso/xorriso.c
Enabled -as cdrecord blank=as_needed
2008.10.02.105442 [2094]
xorriso/README
xorriso/configure_ac.txt
Introduced xorriso-standalone ./configure option --disable-libreadline
2008.10.02.110828 [2095]
README
xorriso/README
xorriso/configure_ac.txt
Fine tuning about ./configure option --disable-libreadline
------------------------------------ cycle - xorriso-0.2.7 - 2008.10.02.110828
* New ./configure option --disable-libreadline to make binary more portable
4 Oct 2008 [2099]
xorriso/convert_man_to_html.sh
xorriso/xorriso.1
Relocated the El Torito paragraph in man xorriso
2008.10.05.075432 [2101]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
-rom_toc_scan nonrom_off disables toc emulation on overwriteables
2008.10.05.093703 [2105]
xorriso/xorrisoburn.c
Bug fix: Random target filenames with looping symbolic links
2008.10.05.125046 [2109]
xorriso/configure_ac.txt
Adapted standalone BURN_*_VERSION to libburn 0.5.5
2008.10.05.125242 [2110]
configure.ac
libisoburn/libisoburn.h
libisoburn now demands libburn-0.5.4
------------------------------------ cycle - xorriso-0.2.7 - 2008.10.05.125242
* Bug fix: -follow link attributed random target filenames to looping links
2008.10.06.114114 [2113]
xorriso/configure_ac.txt
Adapted standalone LIBISOFS_*_VERSION to libisofs 0.6.10
2008.10.06.114845 [2114]
configure.ac
libisoburn/libisoburn.h
libisoburn now demands libisofs-0.6.10
------------------------------------ cycle - xorriso-0.2.7 - 2008.10.06.114845
7 Oct 2008 [2115]
xorriso/xorriso.1
Polished man xorriso
2008.10.08.135848 [2116]
xorriso/xorriso.c
xorriso/xorriso.1
Changed newly introduced -rom_toc_scan nonrom_off to off:emul_off
2008.10.09.145926 [2117]
configure.ac
README
Introduced libburn ./configure option --disable-libreadline
9 Oct 2008 [2118]
xorriso/compile_xorriso.sh
Introduced xorriso development compiler script option -no_libreadline
------------------------------------ cycle - xorriso-0.2.7 - 2008.10.09.145926
2008.10.10.131102 [2119]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorriso.1
Enabled dialog for multi-lines and newline characters in quotation marks
2008.10.10.134020 [2120]
xorriso/xorriso.c
Polishing multi-line dialog
2008.10.12.120001 [2122]
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.8
12 Oct 2008 []
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.2.8 - 2008.10.12.120001
* Bug fix: -as mkisofs -iso-level was accused to be an unknown option
* Bug fix: -follow link attributed random target filenames to looping links
* Ability to write and maintain bootable ISO images based on ISOLINUX
* New ./configure option --disable-libreadline to make binary more portable
------------------------------------ cycle - xorriso-0.2.9 -
------------------------------------ cycle - xorriso-0.2.9 -
[]
libisoburn/burn_wrap.c
Tested removal of drive address path conversion in isoburn_drive_aquire()
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
xorriso/xorrisoburn.c
New option -quoted_path_list
===============================================================================
@ -3588,16 +3980,23 @@ Tested removal of drive address path conversion in isoburn_drive_aquire()
------------------------------------------------- important
------------------------------------------------- development
- option -list_delimiter
- creation of bootable images
- ? declare change pending after -boot_image isolinux bootspec ?
- isohybrid option as soon as supported by libisofs
- xorriso seems able to deal with newlines in file names.
Now a path_list format is needed which escapes newlines.
Dialog needs to be enabled for newlines.
- random access read and write option
- option to patch the mount image size and location on overwriteables
- 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 :
@ -3609,8 +4008,7 @@ 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
- watch read latency and evaluate read quality indicator
>>> but how without disturbing readline ?
- regularly do valgrind check for memory leaks
@ -3634,30 +4032,14 @@ 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
- Optional performing of ISO hybrid patch for USB and other pseudo hard disks
http://www.sfr-fresh.com/linux/misc/syslinux-3.72.tar.gz:a/syslinux-3.72/utils/isohybrid
http://syslinux.zytor.com/archives/2008-October/010869.html
- A repeatable shell command as origin ("disk_file")
of a regular file in the ISO image.
@ -3669,9 +4051,6 @@ 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

@ -22,6 +22,8 @@ do_strip=0
static_opts=
warn_opts="-Wall"
nglibisofs=1
def_libreadline="-DXorriso_with_readlinE"
link_libreadline="-lreadline"
for i in "$@"
do
@ -35,11 +37,16 @@ do
elif test "$i" = "-g"
then
debug_opts="-g -O0"
elif test "$i" = "-no_libreadline"
then
def_libreadline=""
link_libreadline=""
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
then
echo \
"$xorr/compile_xorriso.sh : to be executed above top level directories"
echo "Options:"
echo " -no_libreadline do not compile for and link with libreadline."
echo " -do_diet produce capability reduced lean version."
echo " -do_strip apply program strip to compiled programs."
echo " -g produce debuggable programm."
@ -83,7 +90,7 @@ date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_bu
echo "Build timestamp : $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX $def_libreadline \
$warn_opts \
$static_opts \
$debug_opts \
@ -130,7 +137,7 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
\
$libisofs \
\
-lreadline \
$link_libreadline \
\
-lpthread

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.2.5], [http://libburnia-project.org])
AC_INIT([xorriso], [0.2.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -9,14 +9,14 @@ AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=5
BURN_MICRO_VERSION=3
BURN_MICRO_VERSION=5
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=8
LIBISOFS_MICRO_VERSION=10
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)
@ -95,14 +95,20 @@ else
CFLAGS="$CFLAGS -DDEBUG"
fi
AC_ARG_ENABLE(libreadline,
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
, enable_libreadline=yes)
if test x$enable_libreadline = xyes; then
dnl Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE"
READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF)

View File

@ -51,7 +51,7 @@ then
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
-e 's/<b>Rock Ridge, POSIX, X\/Open:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open:<\/b>/' \
-e 's/<b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/b>/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><b>Dialog, Readline, Result pager:<\/b>/' \
-e 's/<b>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
@ -66,6 +66,7 @@ then
-e 's/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \
-e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>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/' \

View File

@ -25,11 +25,11 @@
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.2.5
xorriso_rev=0.2.8
# For unstable uploads:
xorriso_pl=""
# xorriso_pl=""
# For stable releases:
# xorriso_pl=".pl00"
xorriso_pl=".pl00"
with_bootstrap_tarball=1

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 "Oct 10, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -53,6 +53,8 @@ Updates ISO subtrees incrementally to match given disk subtrees.
Writes result either as completely new image or as add-on session
to optical media or filesystem objects.
.br
Can activate ISOLINUX boot images via El Torito.
.br
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
.br
Can restore files from ISO image to disk filesystem (see osirrox).
@ -77,7 +79,7 @@ Creating, Growing, Modifying, Blind Growing
.br
Libburn drives
.br
Rock Ridge, POSIX, X/Open
Rock Ridge, POSIX, X/Open, and El Torito
.br
Command processing
.br
@ -325,7 +327,7 @@ One may use option
.B -ban_stdio_write
to surely prevent this risk and to allow only MMC drives.
.SS
.B Rock Ridge, POSIX, X/Open:
.B Rock Ridge, POSIX, X/Open, and El Torito:
.br
.B Rock Ridge
is the name of a set of additional informations which enhance
@ -340,6 +342,20 @@ xorriso is not named "porriso" because POSIX only guarantees 14 characters
of filename length. It is the X/Open System Interface standard XSI which
demands a file name length of up to 255 characters and paths of up to 1024
characters. Rock Ridge fulfills this demand.
.PP
An
.B El Torito
boot record connects a boot image, which is a binary program plus some
other files stored in the ISO image, with the bootstrapping facility of
contemporary computers.
The content of the boot image files is not in the scope of El Torito.
.br
Most bootable Linux CDs are equipped with ISOLINUX boot images. xorriso is
able to create or maintain an El Torito object which makes such an image
bootable. Emulation -as mkisofs supports the example options out of the
ISOLINUX wiki.
.br
The support for other boot image types is sparse.
.SS
.B Command processing:
.br
@ -395,7 +411,7 @@ to make dialog more comfortable.
.PP
Readline is an enhancement for the input line. You may know it already from
the bash shell. Whether it is available in xorriso depends on the availability
of package readline-dev at the time when xorriso was built from its sourcecode.
package readline-dev at the time when xorriso was built from its sourcecode.
.br
It allows to move the cursor over the text in the line by help of the
Leftward and the Rightward arrow key.
@ -465,8 +481,8 @@ changes.
.br
-outdev can be performed without previous -dev or -indev. In that case an
empty ISO image with no changes pending is created. It can either be populated
by help of -add or it can be discarded silently if -dev or -indev are
performed afterwards.
by help of -map, -add et.al. or it can be discarded silently if -dev or -indev
are performed afterwards.
.br
Special address string "-" means standard output, to which several restrictions
apply. See above paragraph "Libburn drives".
@ -516,7 +532,7 @@ until the next -dev or -indev. After the image has been loaded once, the
setting is valid for -rollback until next -dev or -indev, where it
will be reset to "auto".
.TP
\fB\-rom_toc_scan\fR "on"|"off"
\fB\-rom_toc_scan\fR "on"|"off"[:"emul_on"|"emul_off"]
Read-only drives do not tell the actual media type but show any media as
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
be truncated to first and last session or even be completely false.
@ -527,8 +543,13 @@ especially the address of the last session, there is a scan for ISO 9660
filesystem headers which might help but also might yield worse results
than the drive's table of content. At its end it can cause read attempts
to invalid addresses and thus ugly drive behavior.
Setting "on" enables that scan for alleged read-only media.
.br
To be in effect, -rom_toc_scan has to be enabled by "on" before the -*dev
On the other hand the emulation of session history on overwriteable media
can hamper reading of partly damaged media. Setting "off:emul_off" disables
the elsewise trustworthy table-of-content scan for those media.
.br
To be in effect, the -rom_toc_scan setting has to be made before the -*dev
command which aquires drive and media.
.TP
\fB\-ban_stdio_write\fR
@ -861,7 +882,7 @@ iso_rr_path.
-type type_letter
.br
matches only files files of the given type:
"block", "char", "dir", "pipe", "file", "link", "socket",
"block", "char", "dir", "pipe", "file", "link", "socket", "eltorito",
"Xotic" which eventually matches what is not matched by the other types.
.br
Only the first letter is interpreted. E.g.: -find / -type d
@ -1352,25 +1373,77 @@ xorriso adds the traditional 300k of padding by default to all images.
.br
For images which will never get to a CD it is safe to use -padding 0 .
.TP
\fB\-boot_image\fR "any"|"isolinux" "discard"|"keep"|"patch"
Defines the handling of an eventual boot image (El-Torito) which has been read
from an existing ISO image. All types ("any") can be discarded or kept
unaltered. The latter makes only sense if the format of the boot image is
.B El Torito bootable ISO images:
.PP
Contrary to published specifications many BIOSes will load an El Torito
object from the first session on media and not from the last one, which
gets mounted by default. This makes no problems with overwriteable media,
because they appear to inadverted readers as one single session.
.br
But with multi-session media CD-R[W], DVD-R[W], DVD+R, it implies that the
whole bootable system has to reside already in the first session and that
the last session still has to bear all files which the booted system expects
after eventually mounting the ISO image.
.br
If ISOLINUX is known to be present on media then it is advised to patch it
when a follow-up session gets written. But one should not rely on the
capability to influence the bootability of the existing sessions, unless one
can assume overwriteable media.
.TP
\fB\-boot_image\fR "any"|"isolinux" "discard"|"keep"|"patch"|bootspec
Defines the handling of an eventual El Torito object which has
been read from an existing ISO image or defines how to make a prepared
ISOLINUX file set bootable.
.br
All types ("any") of El Torito boot images can be discarded or kept unaltered.
The latter makes only sense if the format of the boot image is
relocatable without content changes.
.br
The boot image type "isolinux" can be kept unaltered (not advisable), or
discarded, or it can be patched to match its relocation. In the latter case
the resulting ISO image is bootable if the boot image was really complying
to the isolinux standard.
.br
Creation of new boot images is not yet possible.
An existing boot image of type "isolinux" can be discarded or it can be
patched to match its relocation. In the latter case the resulting ISO image
stays bootable if the boot image was really produced by ISOLINUX.
.br
CAUTION:
This is an expert option. xorriso is not an expert yet.
It cannot recognize the inner form of boot images.
This is an expert option.
xorriso cannot recognize the inner form of boot images.
So the user has already to know about the particular needs of the
bootimage which is present on the input media.
boot image which is present on the input media.
.br
Most safe is the default: "any" "discard".
.br
On all media types it is possible to activate a set of ISOLINUX files
for booting within the first session. In further sessions an existing boot
image can get replaced by a new one, but depending on the media type
this may have few effect at boot time. See above.
.br
The ISOLINUX files have to be added to the ISO image by normal means
(image loading, -map, -add, ...) and should reside either in ISO image
directory /isolinux or in /boot/isolinux .
In that case it suffices to use as bootspec the text "dir=/isolinux" or
"dir=/boot/isolinux". E.g.:
.br
-boot_image isolinux dir=/boot/isolinux
.br
which bundles these individual settings:
.br
-boot_image isolinux bin_path=/boot/isolinux/isolinux.bin
.br
-boot_image isolinux cat_path=/boot/isolinux/boot.cat
.br
-boot_image isolinux load_size=2048
.br
bin_path depicts the binary program which is to be started by the BIOS at
boot time. It is among the files produced by ISOLINUX.
.br
An El Torito boot catalog file gets inserted into the ISO image with address
cat_path at -commit time.
It is subject to normal -overwrite and -reassure processing if there is already
a file with the same name.
.br
The setting of -boot_image will change to "isolinux" "patch" after successful
writing of a session with -boot_image "isolinux" bootspec.
.TP
.B Exception processing:
.PP
@ -1485,10 +1558,13 @@ With occasion "file_extraction" there are three behaviors:
.TP
.B Dialog mode control:
.TP
\fB\-dialog\fR "on"|"off"
Enable or disable to enter dialog mode after all arguments
are processed. In dialog mode input lines get prompted via
readline or from stdin.
\fB\-dialog\fR "on"|"off"|"single_line"
Enable or disable to enter dialog mode after all arguments are processed.
In dialog mode input lines get prompted via readline or from stdin.
.br
Mode "on" supports input of newline characters witing quotation marks and
line continuation by trailing backslash outside quotation marks.
Mode "single_line" does not.
.TP
\fB\-page\fR length width
Describe terminal to the text pager. See also above, paragraph Result pager.
@ -1969,6 +2045,7 @@ Personality "\fBmkisofs\fR" accepts the options listed with:
.br
Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list,
-f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points,
-no-emul-boot, -b, -c, -boot-info-table, -boot-load-size,
pathspecs as with xorriso -add.
A lot of options are not supported and lead to failure of the mkisofs
emulation. Some are ignored, but better do not rely on this tolerance.
@ -2206,6 +2283,8 @@ Manipulating an existing ISO image on the same media
.br
Copy modified ISO image from one media to another
.br
Bring a prepared ISOLINUX tree onto media and make it bootable
.br
Operate on storage facilities other than optical drives
.br
Perform multi-session runs as of cdrtools traditions
@ -2219,6 +2298,8 @@ Examples of input timestrings
Incremental backup of a few directory trees
.br
Restore directory trees from a particular ISO session to disk
.br
Try to retrieve as many blocks as possible from a damaged media
.SS
.B As superuser learn about available drives
Consider to give rw permissions to those users or groups
@ -2358,6 +2439,17 @@ first and only session to the output drive.
.br
-commit -eject all
.SS
.B Bring a prepared ISOLINUX tree onto media and make it bootable
The user has already created a suitable file tree on disk and copied the
ISOLINUX files into subdirectory ./boot/isolinux of that tree.
Now xorriso can burn an El Torito bootable media:
.br
\fB$\fR xorriso -outdev /dev/sr0 -blank as_needed \\
.br
-map /home/me/ISOLINUX_prepared_tree / \\
.br
-boot_image isolinux dir=/boot/isolinux
.SS
.B Operate on storage facilities other than optical drives
Full read-write operation is possible with regular files and block devices:
.br
@ -2494,19 +2586,16 @@ the two disk trees to the media is desired. Begin with blank media and start
a new blank media when the run fails due to lack of remaining space on
the old one.
.br
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
This makes sense 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.
.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
accepts session numbers directly by its option "session=".
.br
Multi-session media and most overwriteable media written by xorriso can tell
the sbsector of a session by xorriso option -toc.
the sbsectors of their sessions by xorriso option -toc.
.br
Sessions on multi-session media are separated by several MB of unused blocks.
So with small sessions the payload capacity can become substantially lower
@ -2578,7 +2667,7 @@ to read and execute lines from the following files:
.br
The files are read in the sequence given above, but none of them is required
for xorriso to function properly.
.TP
.SS
.B Runtime control files:
.br
The default setting of -check_media abort_file= is:

View File

@ -520,6 +520,7 @@ int Sfile_make_argv(char *progname, char *line, int *argc, char ***argv,
bit1= just release argument list argv and return
bit2= abort with return(0) if incomplete quotes are found
bit3= eventually prepend missing '-' to first argument read from line
bit4= like bit2 but only check quote completeness, do not allocate memory
*/
{
int i,pass,maxl=0,l,argzaehl=0,bufl,line_start_argc;
@ -529,6 +530,9 @@ int Sfile_make_argv(char *progname, char *line, int *argc, char ***argv,
Sfile_destroy_argv(argc,argv,0);
if(flag&2) return(1);
if(flag & 16)
flag|= 4;
for(pass=0;pass<2;pass++) {
cpt= line-1;
if(!(flag&1)){
@ -592,6 +596,8 @@ int Sfile_make_argv(char *progname, char *line, int *argc, char ***argv,
if(*cpt==0) break;
}
if(pass==0){
if(flag & 16)
return(1);
*argc= argzaehl;
if(argzaehl>0) {
*argv= (char **) Smem_malloC(argzaehl*sizeof(char *));
@ -2011,7 +2017,7 @@ int Findjob_set_name_expr(struct FindjoB *o, char *name_expr, int flag)
int Findjob_set_file_type(struct FindjoB *o, char file_type, int flag)
{
static char known[]= {"bcdpf-lsmX"};
static char known[]= {"bcdpf-lsmeX"};
if(file_type!=0)
if(strchr(known, file_type)==NULL)
@ -2070,7 +2076,8 @@ int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag)
}
/* @return 0=no match , 1=match , <0 = error
/* @flag bit0=recognize type "e" = El-Torito
@return 0=no match , 1=match , <0 = error
*/
int Findjob_test(struct FindjoB *o, char *name,
struct stat *boss_stbuf, struct stat *stbuf,
@ -2111,6 +2118,9 @@ int Findjob_test(struct FindjoB *o, char *name,
} else if(((stbuf->st_mode)&S_IFMT)==S_IFSOCK) {
if(o->file_type!='s')
return(0);
} else if((flag & 1) && ((stbuf->st_mode) & S_IFMT) == Xorriso_IFBOOT) {
if(o->file_type!='e')
return(0);
} else {
if(o->file_type!='X')
return(0);
@ -3386,6 +3396,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->do_stream_recording= 0;
m->keep_boot_image= 0;
m->patch_isolinux_image= 0;
m->boot_image_bin_path[0]= 0;
m->boot_image_emul= 0;
m->boot_image_cat_path[0]= 0;
m->boot_image_load_size= 4 * 512; /* hearsay out of libisofs/demo/iso.c */
m->allow_graft_points= 0;
m->allow_restore= 0;
m->do_concat_split= 1;
@ -3546,10 +3560,9 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
bit2= do not write to history line which begin with "-history:" or "-history "
*/
{
char *cpt= NULL;
int ret;
char *cpt= NULL, **argv= NULL, *linept, *why_append= "";
int ret, argc= 0, base_length= 0, l, append_line;
#ifdef Xorriso_with_readlinE
int l;
static char last_input[SfileadrL]= {""};
#endif /* ! Xorriso_with_readlinE */
double tdiff;
@ -3560,18 +3573,20 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
tdiff= tv.tv_sec+(1.e-6*(double) tv.tv_usec);
fflush(stdout);
linept= line;
get_single:;
#ifdef Xorriso_with_readlinE
if(xorriso->use_stdin || xorriso->dev_fd_1>=0) {
if(flag&2)
{ret= 1; goto ex;}
if(Sfile_fgets(line,linesize-1,stdin)==NULL) {
if(Sfile_fgets(linept,linesize - base_length - 1,stdin) == NULL) {
/* need a very dramatic end */
kill(getpid(),SIGHUP);
{ret= -1; goto ex;}
}
{ret= 1; goto ex;}
goto process_single;
}
if(flag&2) {
cpt= NULL;
@ -3583,12 +3598,82 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
{ret= -1; goto ex;}
}
l= strlen(cpt);
if(l>=linesize) {
strncpy(line,cpt,linesize-1);
if(l >= linesize - base_length - 1) {
strncpy(linept, cpt, linesize - 1);
line[sizeof(line)-1]= 0;
sprintf(xorriso->info_text,"Input line too long !");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
goto new_empty;
} else
strcpy(line,cpt);
strcpy(linept, cpt);
}
#else /* Xorriso_with_readlinE */
if(flag&2)
{ret= 1; goto ex;}
if(Sfile_fgets(linept, linesize - base_length - 1, stdin) == NULL) {
/* need a very dramatic end */
kill(getpid(),SIGHUP);
{ret= -1; goto ex;}
}
#endif /* ! Xorriso_with_readlinE */
process_single:;
if(xorriso->dialog == 2) {
append_line= 0;
if(linept != line && strcmp(linept, "@@@") == 0) {
sprintf(xorriso->info_text, "Incomplete input line cleared by %s",
linept);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
new_empty:;
line[0]= 0;
linept= line;
sprintf(xorriso->info_text, "-------------------------------------\n");
Xorriso_info(xorriso,0);
sprintf(xorriso->info_text, "Enter new text for empty input line :\n");
Xorriso_info(xorriso,0);
goto get_single;
}
ret= Sfile_make_argv("", line, &argc, &argv, 16);
if(ret < 0)
goto ex;
l= strlen(line);
if(l > 0)
if(line[l - 1] == '\\') {
line[l - 1]= 0;
append_line= 1;
why_append= "Trailing backslash ";
}
if(ret == 0 && strlen(line) < linesize - 1 && !append_line) {
/* append a newline character */
if(l >= linesize - 1) {
sprintf(xorriso->info_text,"Input line too long !");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
goto new_empty;
}
line[l]= '\n';
line[l + 1]= 0;
append_line= 1;
why_append= "Quoted newline char";
}
if(append_line) {
base_length= strlen(line);
linept= line + base_length;
sprintf(xorriso->info_text,
"---------------------------------------------------------------\n");
Xorriso_info(xorriso,0);
sprintf(xorriso->info_text,
"%s : Enter rest of line (or @@@ to clear it) :\n", why_append);
Xorriso_info(xorriso,0);
goto get_single;
}
}
#ifdef Xorriso_with_readlinE
if(line[0]!=0 && strcmp(last_input,line)!=0 && !(flag&1))
if(!((flag&4) &&
(strncmp(line,"-history:",9)==0 || strncmp(line,"-history ",9)==0))) {
@ -3597,16 +3682,6 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
last_input[sizeof(last_input)-1]= 0;
}
#else /* Xorriso_with_readlinE */
if(flag&2)
{ret= 1; goto ex;}
if(Sfile_fgets(line,linesize-1,stdin)==NULL) {
/* need a very dramatic end */
kill(getpid(),SIGHUP);
{ret= -1; goto ex;}
}
#endif /* ! Xorriso_with_readlinE */
ret= 1;
@ -4865,8 +4940,8 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
-options_from_file:${resume_state_file}_pos
*/
{
int is_default, no_defaults, i, ret, adr_mode;
char *line, sfe[5*SfileadrL], mode[80], *form, *treatment;
int is_default, no_defaults, i, ret, adr_mode, bin_path_in_use= 0;
char *line, sfe[5 * SfileadrL + 80], mode[80], *form, *treatment;
static char channel_prefixes[4][4]= {".","R","I","M"};
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_load_mode= 4;
@ -4886,8 +4961,10 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= 0;
if(xorriso->dialog)
if(xorriso->dialog == 2)
sprintf(line,"-dialog on\n");
else if(xorriso->dialog == 1)
sprintf(line,"-dialog single_line\n");
else {
sprintf(line,"-dialog off\n");
is_default= 1;
@ -4992,10 +5069,31 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->keep_boot_image==0 && xorriso->patch_isolinux_image==0);
is_default= (xorriso->keep_boot_image == 0
&& xorriso->patch_isolinux_image == 0
&& xorriso->boot_image_bin_path[0] == 0);
form= "any";
treatment= "discard";
if(xorriso->patch_isolinux_image) {
if(xorriso->boot_image_bin_path[0]) {
form= "isolinux";
if(strcmp(xorriso->boot_image_bin_path, "/isolinux.bin") == 0 &&
strcmp(xorriso->boot_image_cat_path, "/boot.cat") == 0)
strcpy(sfe, "dir=/");
else if(strcmp(xorriso->boot_image_bin_path, "/isolinux/isolinux.bin") == 0
&& strcmp(xorriso->boot_image_cat_path, "/isolinux/boot.cat") == 0)
strcpy(sfe, "dir=/isolinux");
else if(strcmp(xorriso->boot_image_bin_path,
"/boot/isolinux/isolinux.bin") == 0
&& strcmp(xorriso->boot_image_cat_path,
"/boot/isolinux/boot.cat") == 0)
strcpy(sfe, "dir=/boot/isolinux");
else {
strcpy(sfe, "bin_path=");
Text_shellsafe(xorriso->boot_image_bin_path, sfe + strlen(sfe), 0);
bin_path_in_use= 1;
}
treatment= sfe;
} else if(xorriso->patch_isolinux_image) {
form= "isolinux";
treatment= "patch";
} else if(xorriso->keep_boot_image) {
@ -5004,6 +5102,18 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
sprintf(line,"-boot_image %s %s\n", form, treatment);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
if(xorriso->boot_image_bin_path[0] && bin_path_in_use) {
is_default= 0;
sprintf(line,"-boot_image isolinux cat_path=%s\n",
Text_shellsafe(xorriso->boot_image_cat_path, sfe, 0));
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= xorriso->boot_image_load_size == 4 * 512;
sprintf(line,"-boot_image isolinux load_size=%.f\n",
(double) xorriso->boot_image_load_size);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
}
sprintf(line,"-cd %s\n",
(xorriso->wdi[0] ? Text_shellsafe(xorriso->wdi,sfe,0) : "'/'"));
@ -5240,11 +5350,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
#endif /* Xorriso_with_readlinE */
is_default= !(xorriso->toc_emulation_flag&1);
sprintf(line,"-rom_toc_scan %s\n",
xorriso->toc_emulation_flag&1 ? "on" : "off");
is_default= (xorriso->toc_emulation_flag == 0);
sprintf(line,"-rom_toc_scan %s%s\n",
xorriso->toc_emulation_flag & 1 ? "on" : "off",
xorriso->toc_emulation_flag & 2 ? ":emul_off" : "");
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
Xorriso_status_result(xorriso, filter, fp, flag & 2);
adr_mode= xorriso->image_start_mode & 0xffff;
if(adr_mode>=0 && adr_mode<=max_load_mode) {
@ -7213,6 +7324,8 @@ int Xorriso__mode_to_perms(mode_t st_mode, char perms[10], int flag)
}
/* @param flag bit0= recognize Xorriso_IFBOOT as file type
*/
int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag)
{
int show_major_minor= 0;
@ -7240,6 +7353,8 @@ int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag)
strcat(rpt, "p");
else if(S_ISSOCK(st_mode))
strcat(rpt, "s");
else if((flag & 1) && (st_mode & S_IFMT) == Xorriso_IFBOOT)
strcat(rpt, "e");
else
strcat(rpt, "?");
@ -8177,6 +8292,7 @@ static char blank_help[][80]= {
"\tdisk\t\tblank the entire disk",
"\tfast\t\tminimally blank the entire disk",
"\tminimal\t\tminimally blank the entire disk",
"\tas_needed\tblank or format media to make it ready for (re-)use",
"\tdeformat\t\tblank a formatted DVD-RW",
"\tdeformat_quickest\tminimally blank a formatted DVD-RW to DAO only",
"\tformat_overwrite\tformat a DVD-RW to \"Restricted Overwrite\"",
@ -8247,6 +8363,8 @@ no_volunteer:;
strcpy(blank_mode, cpt);
} else if(strcmp(cpt,"format_overwrite")==0) {
strcpy(blank_mode, "format_overwrite");
} else if(strcmp(cpt,"as_needed")==0) {
strcpy(blank_mode, "as_needed");
} else {
sprintf(xorriso->info_text,
"-as %s: blank=%s not supported. See blank=help .",
@ -8498,15 +8616,60 @@ ex:;
}
/* @param flag bit0= do not report eventual ignore decision
*/
int Xorriso_genisofs_ignore(struct XorrisO *xorriso, char *whom,
char **argv, int *i, int flag)
{
/* mkisofs 2.01 options which are not scheduled for implementation, yet */
static char ignored_arg0_options[][41]= {
"-allow-leading-dots", "-ldots", "-allow-lowercase", "-allow-multidot",
"-cache-inodes", "-no-cache-inodes", "-check-oldnames", "-d", "-D",
"-joliet-long", "-l", "-L", "-max-iso9660-filenames", "-N", "-nobak",
"-no-bak", "-force-rr", "-r", "-relaxed-filenames", "-T", "-U",
"-no-iso-translate",
""
};
static char ignored_arg1_options[][41]= {
"-A", "-biblio", "-check-session", "-p", "-root",
"-old-root", "-sysid", "-table-name",
""
};
int k, idx_offset= 0;
char sfe[5*SfileadrL];
for(k=0;ignored_arg0_options[k][0]!=0;k++)
if(strcmp(argv[*i],ignored_arg0_options[k])==0)
goto no_volunteer;
for(k=0;ignored_arg1_options[k][0]!=0;k++)
if(strcmp(argv[*i],ignored_arg1_options[k])==0) {
(*i)++;
idx_offset= -1;
goto no_volunteer;
}
return(0);
no_volunteer:;
sprintf(xorriso->info_text, "-as %s: Ignored option %s",
whom, Text_shellsafe(argv[(*i)+idx_offset], sfe, 0));
if(!(flag & 1))
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
return(1);
}
/* micro emulation of mkisofs */
int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
int argc, char **argv, int flag)
{
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points, mem;
int do_print_size= 0, idx_offset= 0, fd, idx, iso_level= 0;
int ret, i, was_path= 0, was_other_option= 0, mem_graft_points, mem;
int do_print_size= 0, fd, idx, iso_level= 0, no_emul_boot= 0;
int option_b= 0;
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL];
char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
#ifdef Xorriso_old_genisofs_ignorE
int idx_offset= 0, k;
/* mkisofs 2.01 options which are not scheduled for implementation, yet */
static char ignored_arg0_options[][41]= {
"-allow-leading-dots", "-ldots", "-allow-lowercase", "-allow-multidot",
@ -8521,6 +8684,8 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
"-old-root", "-sysid", "-table-name",
""
};
#endif /* Xorriso_old_genisofs_ignorE */
static char helptext[][80]= {
"Usage: xorriso -as mkisofs [options] file...",
"Note: This is not mkisofs. See xorriso -help, xorriso -version, man xorriso",
@ -8553,6 +8718,13 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
adr[0]= indev[0]= msc[0]= 0;
for(i= 0; i<argc; i++) {
#ifndef Xorriso_old_genisofs_ignorE
ret= Xorriso_genisofs_ignore(xorriso, whom, argv, &i, 1);
if(ret == 1)
continue;
#endif /* Xorriso_old_genisofs_ignorE */
if(strcmp(argv[i], "-version")==0) {
sprintf(xorriso->result_line,
"mkisofs 2.01-Emulation Copyright (C) 2008 see libburnia-project.org xorriso\n"
@ -8621,6 +8793,41 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
((off_t) 4) * ((off_t) 1024*1024*1024) - ((off_t) 1);
else
xorriso->file_size_limit= 0;
} else if(strcmp(argv[i], "-no-emul-boot")==0) {
no_emul_boot= 1;
} else if(strcmp(argv[i], "-boot-info-table")==0) {
;
} else if(strcmp(argv[i], "-b") == 0) {
if(i+1>=argc)
goto not_enough_args;
i++;
xorriso->boot_image_bin_path[0]= 0;
if(argv[i][0] != '/')
strcat(xorriso->boot_image_bin_path, "/");
ret= Sfile_str(xorriso->boot_image_bin_path
+ strlen(xorriso->boot_image_bin_path), argv[i], 0);
if(ret <= 0)
goto ex;
option_b= 1;
xorriso->keep_boot_image= 0;
xorriso->patch_isolinux_image= 0;
} else if(strcmp(argv[i], "-c") == 0) {
if(i+1>=argc)
goto not_enough_args;
i++;
xorriso->boot_image_cat_path[0]= 0;
if(argv[i][0] != '/')
strcat(xorriso->boot_image_cat_path, "/");
ret= Sfile_str(xorriso->boot_image_cat_path
+ strlen(xorriso->boot_image_cat_path), argv[i], 0);
if(ret <= 0)
goto ex;
} else if(strcmp(argv[i], "-boot-load-size") == 0) {
if(i+1>=argc)
goto not_enough_args;
i++;
sscanf(argv[i], "%d", &ret);
xorriso->boot_image_load_size= ret * 512;
} else
was_other_option= 1;
}
@ -8636,6 +8843,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
whom, (ret==3 ? "symbolic link" : "directory"),
Text_shellsafe(adr+6, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
/* Regard overwriteable as blank, truncate regular files on write start */
@ -8643,6 +8851,14 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
if(ret<=0)
goto ex;
}
if(option_b && !no_emul_boot) {
xorriso->boot_image_bin_path[0]= 0;
sprintf(xorriso->info_text,
"-as %s: Option -b is supported only if option -no-emul-boot is given",
whom);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
if(was_other_option && xorriso->out_drive_handle==NULL) {
ret= Xorriso_option_dev(xorriso, "-", 2|4); /* set outdev to stdout */
if(ret<=0)
@ -8693,6 +8909,8 @@ illegal_c:;
sprintf(xorriso->info_text, "-as %s: %s",
whom, Text_shellsafe(argv[i], sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
#ifdef Xorriso_old_genisofs_ignorE
idx_offset= 0;
for(k=0;ignored_arg0_options[k][0]!=0;k++)
if(strcmp(argv[i],ignored_arg0_options[k])==0)
@ -8711,6 +8929,14 @@ no_volunteer:;
continue;
}
#else /* Xorriso_old_genisofs_ignorE */
ret= Xorriso_genisofs_ignore(xorriso, whom, argv, &i, 0);
if(ret == 1)
continue;
#endif /* ! Xorriso_old_genisofs_ignorE */
if(strcmp(argv[i], "-version")==0) {
/* was already handled in first argument scan */;
@ -8793,14 +9019,26 @@ not_enough_args:;
} else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-quiet")==0) {
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-iso-level")==0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-no-emul-boot")==0) {
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-b") == 0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-c") == 0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-boot-load-size") == 0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-boot-info-table")==0) {
;
} else if(argv[i][0]=='-' && argv[i][1]!=0) {
sprintf(xorriso->info_text, "-as %s: Unknown option %s",
whom, Text_shellsafe(argv[i], sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
} else if(strcmp(argv[i], "-iso-level")==0) {
i++;
/* was already handled in first argument scan */;
} else {
int zero= 0;
@ -9510,7 +9748,7 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
if(ret<=0 || xorriso->request_to_abort)
goto problem_handler;
sprintf(xorriso->info_text, "Added to ISO image: %s '%s'='%s'\n",
(ret>1 ? "directory" : "file"), target, source);
(ret>1 ? "directory" : "file"), (target[0] ? target : "/"), source);
if(!(flag&1))
Xorriso_info(xorriso, 0);
@ -9768,8 +10006,9 @@ unusable_index:;
int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
char *treatment, int flag)
{
int was_ok= 1;
int was_ok= 1, ret;
char *formpt, *treatpt;
double num;
formpt= form;
if(formpt[0]=='-')
@ -9781,25 +10020,85 @@ int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
if(strcmp(treatpt, "keep")==0) {
xorriso->keep_boot_image= 1;
xorriso->patch_isolinux_image= 0;
xorriso->boot_image_bin_path[0]= 0;
} else if(strcmp(treatpt, "discard")==0) {
xorriso->keep_boot_image= 0;
xorriso->patch_isolinux_image= 0;
xorriso->boot_image_bin_path[0]= 0;
} else
was_ok= 0;
} else if(strcmp(formpt, "isolinux")==0) {
if(strcmp(treatpt, "patch")==0) {
if(strcmp(treatpt, "patch")==0 ||
strcmp(treatpt, "keep")==0) { /* no real "keep" with ISOLINUX */
xorriso->keep_boot_image= 1;
xorriso->patch_isolinux_image= 1;
} else if(strcmp(treatpt, "keep")==0) {
xorriso->keep_boot_image= 1;
xorriso->patch_isolinux_image= 0;
xorriso->boot_image_bin_path[0]= 0;
} else if(strcmp(treatpt, "discard")==0) {
xorriso->keep_boot_image= 0;
xorriso->patch_isolinux_image= 0;
xorriso->boot_image_bin_path[0]= 0;
} else if(strncmp(treatpt, "dir=", 4) == 0) {
/* The three locations mentioned in http://syslinux.zytor.com/iso.php */
if(strcmp(treatpt + 4, "/") == 0)
strcpy(xorriso->boot_image_bin_path, "/");
else if(strcmp(treatpt + 4, "isolinux") == 0
|| strcmp(treatpt + 4, "/isolinux") == 0)
strcpy(xorriso->boot_image_bin_path, "/isolinux/");
else if(strcmp(treatpt + 4, "boot/isolinux") == 0
|| strcmp(treatpt + 4, "/boot/isolinux") == 0
|| strcmp(treatpt + 4, "boot") == 0
|| strcmp(treatpt + 4, "/boot") == 0)
strcpy(xorriso->boot_image_bin_path, "/boot/isolinux/");
else {
sprintf(xorriso->info_text,
"Unrecognized keyword with -boot_image %s %s",
form, treatment);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
sprintf(xorriso->info_text,
"Allowed with dir= are / , /isolinux . /boot/isolinux");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
return(0);
}
strcpy(xorriso->boot_image_cat_path, xorriso->boot_image_bin_path);
strcat(xorriso->boot_image_bin_path, "isolinux.bin");
strcat(xorriso->boot_image_cat_path, "boot.cat");
xorriso->boot_image_load_size= 4 * 512;
xorriso->keep_boot_image= 0;
xorriso->patch_isolinux_image= 0;
} else if(strncmp(treatpt, "bin_path=", 9) == 0) {
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 9,
xorriso->boot_image_bin_path, 2);
if(ret <= 0)
return(ret);
xorriso->keep_boot_image= 0;
xorriso->patch_isolinux_image= 0;
if(xorriso->boot_image_bin_path[0])
xorriso->boot_image_load_size= 4 * 512;
} else if(strncmp(treatpt, "cat_path=", 9) == 0) {
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 9,
xorriso->boot_image_cat_path, 2);
if(ret <= 0)
return(ret);
} else if(strncmp(treatpt, "load_size=", 10) == 0) {
num= Scanf_io_size(treatpt + 10, 0);
if(num < 512) {
sprintf(xorriso->info_text,
"-boot_image isolinux : load_size too small (%s < 512)",
treatpt + 10);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
xorriso->boot_image_load_size= num;
} else
was_ok= 0;
} else
was_ok= 0;
/* >>> BOOT : check whether directories and/or files exist:
bin_path , dirname(cat_path),
isolinux.cfg in / , /isolinux , or /boot/isolinux
*/
if(!was_ok) {
sprintf(xorriso->info_text, "Unrecognized options with -boot_image: %s %s",
form, treatment);
@ -10437,7 +10736,8 @@ int Xorriso_option_cpri(struct XorrisO *xorriso, int argc, char **argv,
if(ret<=0 || xorriso->request_to_abort)
goto problem_handler;
sprintf(xorriso->info_text, "Added to ISO image: %s '%s'='%s'\n",
(ret>1 ? "directory" : "file"), eff_dest, eff_origin);
(ret>1 ? "directory" : "file"), (eff_dest[0] ? eff_dest : "/"),
eff_origin);
if(!(flag&1))
Xorriso_info(xorriso, 0);
continue; /* regular bottom of loop */
@ -10710,10 +11010,20 @@ int Xorriso_option_devices(struct XorrisO *xorriso, int flag)
}
/* Option -dialog "on"|"off" */
/* Option -dialog "on"|"single_line"|"off" */
int Xorriso_option_dialog(struct XorrisO *xorriso, char *mode, int flag)
{
xorriso->dialog= !!strcmp(mode, "off");
if(strcmp(mode, "on") == 0 || strcmp(mode, "multi_line") == 0)
xorriso->dialog= 2;
else if(strcmp(mode, "single_line") == 0)
xorriso->dialog= 2;
else if(strcmp(mode, "off") == 0)
xorriso->dialog= 0;
else {
sprintf(xorriso->info_text, "-dialog: unknown mode '%s'", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
return(0);
}
return(1);
}
@ -11419,8 +11729,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
" Load a particular (outdated) ISO image from a -dev or",
" -indev which hosts more than one session.",
" -rom_toc_scan \"on\"|\"off\"",
" Enable scanning for ISO sessions on read-only drives/media.",
" -rom_toc_scan \"on\"|\"off\"[:\"emul_on\"|\"emul_off\"]",
" Enable scanning for ISO sessions on read-only drives/media",
" resp. on overwriteable media with emulated TOC.",
" -ban_stdio_write",
" Allow for writing only the usage of optical drives.",
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
@ -11433,8 +11744,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Specifies the publisher name. (128 chars)",
" -joliet \"on\"|\"off\"",
" Generate Joliet info additional to Rock Ridge info.",
" -bootimage \"any\"|\"isolinux\" \"discard\"|\"keep\"|\"patch\"",
" Whether to discard or keep an exiting El-Torito boot image.",
" -boot_image \"any\"|\"isolinux\" \"discard\"|\"keep\"|\"patch\"|\"dir=\"",
" \"bin_path=\"|\"cat_path=\"|\"load_size=\"",
" Whether to discard or keep an exiting El Torito boot image.",
" ISOLINUX can be made bootable by dir=/ or dir=/isolinux",
" or dir=/boot/isolinux or by bin_path=... and cat_path=...",
" The ISOLINUX files need to be added to the ISO image by",
" help of the usual commands like -map or -add.",
"",
" -uid uid User id to be used for the whole multi-session ISO image.",
" -gid gid Group id for the same purpose.",
@ -11690,7 +12006,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
"",
"Compatibility emulation (argument list may be ended by list delimiter --):",
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
" -M|-C|-graft-points|-path-list|pathspecs]",
" -M|-C|-graft-points|-path-list|pathspecs|",
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size]",
" Perform some mkisofs gestures, understand pathspecs as mkisofs",
" does. Commit happens outside emulation at usual occasions.",
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|path|-]",
@ -11711,10 +12028,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" -error_behavior \"image_loading\"|\"file_extraction\" behavior",
" Behavior \"best_effort\" is most endurant but may produce",
" results which are correct only on the first glimpse.",
" -dialog After all arguments are processed, enter dialog mode.",
" In this mode you may enter searchtexts or any of the options",
" described here. One per line.",
" -dialog_reset Revoke -dialog (works only if given as argument)",
" -dialog \"on\"|\"off\"|\"single_line\"",
" After all arguments are processed, enter dialog mode.",
" \"single_line\" does not support newline characters within",
" open quotation marks and no line continuation by trailing \\.",
" -page len width Prompt user after len output lines (0=no prompt).",
" width (default 80) can adjust line number computation",
" to the output terminal's line width.",
@ -12211,7 +12528,8 @@ int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
if(!(flag&1)) {
sprintf(xorriso->info_text, "Added to ISO image: %s '%s'='%s'\n",
(ret>1 ? "directory" : "file"), eff_dest, eff_origin);
(ret>1 ? "directory" : "file"), (eff_dest[0] ? eff_dest : "/"),
eff_origin);
Xorriso_info(xorriso,0);
}
return(1);
@ -13263,14 +13581,33 @@ 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)
{
if(strcmp(mode, "off")==0)
xorriso->toc_emulation_flag= 0;
else if(strcmp(mode, "on")==0)
xorriso->toc_emulation_flag= 1;
else {
sprintf(xorriso->info_text, "-rom_toc_scan: unknown mode '%s'", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
int l;
char *cpt, *npt;
xorriso->toc_emulation_flag= 0;
npt= cpt= mode;
for(cpt= mode; npt != NULL; cpt= npt + 1) {
npt= strchr(cpt,':');
if(npt==NULL)
l= strlen(cpt);
else
l= npt-cpt;
if(l==0)
goto unknown_mode;
if(strncmp(cpt, "off", l) == 0)
xorriso->toc_emulation_flag&= ~1;
else if(strncmp(cpt, "on", l) == 0)
xorriso->toc_emulation_flag|= 1;
else if(strncmp(cpt, "emul_off", l) == 0)
xorriso->toc_emulation_flag|= 2;
else if(strncmp(cpt, "emul_on", l) == 0)
xorriso->toc_emulation_flag&= ~2;
else {
unknown_mode:;
sprintf(xorriso->info_text, "-rom_toc_scan: unknown mode in '%s'", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
}
return(1);
}
@ -14464,8 +14801,17 @@ int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag)
/* parse line into args */
ret= Sfile_make_argv(xorriso->progname, line, &argc, &argv, 4);
if(ret<=0)
if(ret < 0) {
Xorriso_msgs_submit(xorriso, 0,
"Severe lack of resources during command line parsing", 0, "FATAL", 0);
goto ex;
}
if(ret == 0) {
sprintf(xorriso->info_text, "Incomplete quotation in command line: %s",
line);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
goto ex;
}
if(argc<2)
{ret= 1; goto ex;}
if(argv[1][0]=='#')

View File

@ -19,7 +19,7 @@
<P>
<H2>Purpose:</H2>
xorriso maps file objects from POSIX compliant filesystems
xorriso copies file objects from POSIX compliant filesystems
into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
@ -60,15 +60,15 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.5.3</DT>
<DT>libburn-0.5.5</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.7</DT>
<DT>libisofs-0.6.10</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.4</DT>
<DT>libisoburn-0.2.8</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD>
@ -108,6 +108,9 @@ Writes result as completely new image or as add-on session
to optical media or filesystem objects.
</LI>
<LI>
Can activate ISOLINUX boot images by El Torito boot record.
</LI>
<LI>
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
</LI>
<LI>
@ -129,9 +132,6 @@ 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>
@ -174,7 +174,7 @@ eventually prepare yet unused BD-RE:</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
</KBD></DD>
<DT>Check the result:</DT>
<DT>Have a look at the result:</DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD>
<DT>
@ -278,6 +278,20 @@ with ".o" or ".swp" which are excluded by options -not_leaf.
<DT>
<HR>
</DT>
<DT>
After the user has already created a suitable file tree on disk
and copied the ISOLINUX files into subdirectory ./boot/isolinux of
that tree, xorriso can burn an El Torito bootable media:
</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -map /home/me/ISOLINUX_prepared_tree / \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -boot_image isolinux dir=/boot/isolinux</KBD></DD>
<DT>
<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
@ -315,14 +329,17 @@ One may switch from mkisofs emulation to xorriso's own command mode:
<HR>
</DT>
<DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
<DT>If for any reason the reading operating system mishandles the ISO image
or some files in it, one may enable reverse operation of xorriso and copy
files or trees to disk:
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx '/pictures/private/horses*/*buttercup*' \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT>Consider to enter dialog mode and use commands like
<KBD>-cd , -du , -lsl , -find<KBD>.
<DT>
<HR>
</DT>
@ -346,8 +363,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.4.pl00.tar.gz">xorriso-0.2.4.pl00.tar.gz</A>
(1040 KB).
<DD><A HREF="xorriso-0.2.8.pl00.tar.gz">xorriso-0.2.8.pl00.tar.gz</A>
(1050 KB).
</DD>
</DL>
</DD>
@ -371,29 +388,26 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
</P>
<HR>
<P>
Bug fixes towards xorriso-0.2.2.pl01:
<UL>
<P>
Bug fixes towards xorriso-0.2.6.pl00:
<UL>
<LI>A potential buffer overflow has been fixed</LI>
<LI>-follow "link" attributed random target filenames to looping links</LI>
<LI>-as mkisofs -iso-level was accused to be an unknown option</LI>
<!--
<LI>- none -</LI>
-->
</UL>
</P>
<P>
Enhancements towards previous stable version xorriso-0.2.2.pl01:
Enhancements towards previous stable version xorriso-0.2.4.pl00:
<UL>
<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>Ability to write and maintain bootable ISO images based on ISOLINUX</LI>
<LI>New ./configure option --disable-libreadline to make binary more portable
</LI>
</UL>
@ -403,32 +417,25 @@ New -error_behavior occasion "file_extraction"
<P>
<DL>
<DT><H3>Development snapshot, version 0.2.5 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.4.pl00:
<DT><H3>Development snapshot, version 0.2.9 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.8.pl00:
<UL>
<LI>-format full did not re-format already formatted DVD+RW</LI>
<!--
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>Enhancements towards stable version 0.2.4.pl00:
<DD>Enhancements towards stable version 0.2.8.pl00:
<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>
<LI>New option -extract_cut to retrieve data from oversized files</LI>
<LI>New option -check_media_defaults</LI>
<LI>New option -list_delimiter</LI>
<!--
<LI>- none yet -</LI>
<!--
-->
</UL>
</DD>
<DD>&nbsp;</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><A HREF="README_xorriso_devel">README 0.2.9</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.2.9 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.9)</A></DD>
<DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
@ -438,7 +445,7 @@ libburnia libraries.
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.2.5.tar.gz">xorriso-0.2.5.tar.gz</A>
<A HREF="xorriso-0.2.9.tar.gz">xorriso-0.2.9.tar.gz</A>
(1050 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained

View File

@ -18,7 +18,7 @@
#ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.2.5"
#define Xorriso_program_versioN "0.2.8"
/** The source code release timestamp */
#include "xorriso_timestamp.h"
@ -134,6 +134,8 @@ struct XorrisO { /* the global context of xorriso */
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
scan -ROM profiles for ISO sessions
bit1= bit4 for isoburn_drive_aquire()
do not emulate TOC on overwriteable media
*/
int image_start_mode; /* From what address to load the ISO image
@ -185,6 +187,13 @@ struct XorrisO { /* the global context of xorriso */
int keep_boot_image;
int patch_isolinux_image;
char boot_image_bin_path[SfileadrL];
int boot_image_emul; /* 0=no emulation
(1=emulation as hard disk)
(2=emulation as floppy)
*/
char boot_image_cat_path[SfileadrL];
off_t boot_image_load_size;
/* XORRISO options */
@ -198,7 +207,7 @@ struct XorrisO { /* the global context of xorriso */
of self-owned directories during restore
*/
int dialog;
int dialog; /* 0=off , 1=single-line , 2=multi-line */
/* Pattern matching facility. It still carries legacy from scdbackup/askme.c

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.09.19.122656"
#define Xorriso_timestamP "2008.10.12.120001"

View File

@ -81,6 +81,8 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
off_t img_offset, off_t disk_offset,
off_t bytes, int flag);
int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume,
char *path, IsoNode **node, int flag);
#define LIBISO_ISDIR(node) (iso_node_get_type(node) == LIBISO_DIR)
#define LIBISO_ISREG(node) (iso_node_get_type(node) == LIBISO_FILE)
@ -93,6 +95,8 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
S_ISFIFO(iso_node_get_mode(node)))
#define LIBISO_ISSOCK(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
S_ISSOCK(iso_node_get_mode(node)))
#define LIBISO_ISBOOT(node) (iso_node_get_type(node) == LIBISO_BOOT)
/* CD specs say one shall not write tracks < 600 kiB */
#define Xorriso_cd_min_track_sizE 300
@ -435,6 +439,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
struct isoburn_read_opts *ropts= NULL;
char adr_data[SfileadrL], *libburn_adr, *boot_fate, *sev;
static int no_rr_or_joliet= 0;
if((flag&3)==0) {
sprintf(xorriso->info_text,
"XORRISOBURN program error : Xorriso_aquire_drive bit0+bit1 not set");
@ -479,7 +485,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
if(dinfo==NULL) {
isoburn_set_msgs_submit(Xorriso_msgs_submit_void, (void *) xorriso,
(3<<2) | 128 , 0);
aquire_flag= 1 | ((flag&(8|4))>>1) | ((xorriso->toc_emulation_flag&1)<<3);
aquire_flag= 1 | ((flag&(8|4))>>1) | ((xorriso->toc_emulation_flag & 3)<<3);
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) {
@ -591,6 +597,13 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
}
/* <<< */
if(no_rr_or_joliet) {
isoburn_ropt_set_extensions(ropts,
isoburn_ropt_noiso1999 | isoburn_ropt_norock | isoburn_ropt_nojoliet);
}
ret= isoburn_read_image(drive, ropts, &volset);
/* <<< Resetting to normal thresholds */
@ -630,7 +643,9 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
Xorriso_process_msg_queues(xorriso,0);
isoburn_ropt_get_size_what(ropts, &size, &has_what);
if(has_what & isoburn_ropt_has_el_torito) {
if(xorriso->patch_isolinux_image)
if(xorriso->boot_image_bin_path[0])
boot_fate= "replaced by an isolinux image";
else if(xorriso->patch_isolinux_image)
boot_fate= "patched as isolinux image";
else if(xorriso->keep_boot_image)
boot_fate= "kept unchanged";
@ -838,7 +853,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
int ret, relax= 0, i, profile, status, num_formats;
int major, minor, micro;
unsigned dummy;
char xorriso_id[256], *img_id, profile_name[80], sfe[5*SfileadrL];
char xorriso_id[256], *img_id, profile_name[80], sfe[5*SfileadrL], *cpt;
struct isoburn_imgen_opts *sopts= NULL;
struct burn_drive_info *dinfo, *source_dinfo;
struct burn_drive *drive, *source_drive;
@ -850,7 +865,9 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
struct burn_track **tracks;
enum burn_disc_status s;
IsoImage *image= NULL;
IsoNode *node;
ElToritoBootImage *bootimg;
enum eltorito_boot_media_type emul_type= ELTORITO_NO_EMUL;
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to write", 2);
@ -916,7 +933,78 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
/* >>> ??? move down to libisoburn ? */
if(image!=NULL && !(flag&1)) {
ret= iso_image_get_boot_image(image, &bootimg, NULL, NULL);
if(xorriso->patch_isolinux_image) {
if(xorriso->boot_image_bin_path[0]) {
/* discard old boot image, set new one */
if(ret == 1)
iso_image_remove_boot_image(image);
if(xorriso->boot_image_emul == 1)
emul_type= ELTORITO_HARD_DISC_EMUL;
else if(xorriso->boot_image_emul == 2)
emul_type= ELTORITO_FLOPPY_EMUL;
if(xorriso->boot_image_cat_path[0] == 0) {
strcpy(xorriso->boot_image_cat_path, xorriso->boot_image_bin_path);
cpt= strrchr(xorriso->boot_image_cat_path, '/');
if(cpt == NULL)
cpt= xorriso->boot_image_cat_path;
else
cpt++;
strcpy(cpt, "boot.cat");
}
sprintf(xorriso->info_text, "Activating alleged isolinux boot image %s",
Text_shellsafe(xorriso->boot_image_bin_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
sprintf(xorriso->info_text, "Creating El Torito boot catalog file %s",
Text_shellsafe(xorriso->boot_image_cat_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
ret= Xorriso_node_from_path(xorriso, image, xorriso->boot_image_bin_path,
&node, 1);
if(ret <= 0) {
sprintf(xorriso->info_text,
"Cannot find in ISO image: -boot_image ... bin_path=%s",
Text_shellsafe(xorriso->boot_image_bin_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
ret= Xorriso_node_from_path(xorriso, image, xorriso->boot_image_cat_path,
&node, 1);
if(ret > 0) {
if(!xorriso->do_overwrite) {
sprintf(xorriso->info_text,
"May not overwite existing -boot_image ... cat_path=%s",
Text_shellsafe(xorriso->boot_image_cat_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
ret= Xorriso_rmi(xorriso, NULL, (off_t) 0, xorriso->boot_image_cat_path,
8 | (xorriso->do_overwrite == 1));
if(ret != 1) {
sprintf(xorriso->info_text,
"Could not remove existing -boot_image cat_path=%s",
Text_shellsafe(xorriso->boot_image_cat_path, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
}
ret= iso_image_set_boot_image(image, xorriso->boot_image_bin_path,
emul_type, xorriso->boot_image_cat_path,
&bootimg);
if(ret < 0) {
Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, "", ret,
"Error when attaching El-Torito boot image to ISO 9660 image",
0, "FAILURE", 1);
sprintf(xorriso->info_text,
"Could not attach El-Torito boot image to ISO 9660 image");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
el_torito_set_load_size(bootimg, xorriso->boot_image_load_size / 512);
el_torito_patch_isolinux_image(bootimg);
} else if(xorriso->patch_isolinux_image) {
if(ret==1) {
relax|= isoburn_igopt_allow_full_ascii;
sprintf(xorriso->info_text, "Patching alleged isolinux boot image");
@ -1014,7 +1102,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
}
isoburn_igopt_get_effective_lba(sopts, &(xorriso->session_lba));
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
@ -1087,8 +1174,13 @@ ex:;
if(ret<=0) {
/* >>> ??? revive discarded boot image */;
} else if(xorriso->boot_image_bin_path[0]) {
xorriso->keep_boot_image= 1;
xorriso->patch_isolinux_image= 1;
xorriso->boot_image_bin_path[0]= 0;
sprintf(xorriso->info_text, "Switched to -boot_image isolinux patch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
}
if(disc!=NULL)
burn_disc_free(disc);
isoburn_igopt_destroy(&sopts, 0);
@ -1144,7 +1236,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
enum burn_drive_status drive_status;
double start_time, current_time, last_time, base_time= 0.0, base_count= 0.0;
double next_base_time= 0.0, next_base_count= 0.0, first_base_time= 0.0;
double first_base_count= 0.0, norm= 0.0;
double first_base_count= 0.0, norm= 0.0, now_time, fract_offset= 0.0;
double measured_speed, speed_factor= 1385000, quot;
time_t time_prediction;
@ -1153,6 +1245,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
usleep(100002);
emul= flag&15;
fract_offset= 0.2 * (double) emul - ((int) (0.2 * (double) emul));
if(emul==0)
emul= xorriso->pacifier_style;
if(flag&16)
@ -1272,12 +1365,14 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
current_time-start_time);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
for(i= 0; i<10; i++) {
for(i= 0; i<12; i++) { /* 2 usleeps more than supposed to be needed */
Xorriso_process_msg_queues(xorriso, 0);
if(aborting<=0)
aborting= Xorriso_check_burn_abort(xorriso, 0);
usleep(100000);
if(((time_t) Sfile_microtime(0)) - ((time_t) current_time) >= 1)
now_time= Sfile_microtime(0);
if(((time_t) now_time) - ((time_t) current_time) >= 1 &&
now_time - ((time_t) now_time) >= fract_offset)
break;
}
}
@ -1552,9 +1647,8 @@ int Xorriso_fake_stbuf(struct XorrisO *xorriso, char *path, struct stat *stbuf,
stbuf->st_mode|= S_IFIFO;
else if(LIBISO_ISSOCK(*node))
stbuf->st_mode|= S_IFSOCK;
/* >>> NG How to represent LIBISO_BOOT ? */
else if(LIBISO_ISBOOT(*node))
stbuf->st_mode|= Xorriso_IFBOOT;
/* >>> With directories this should be : number of subdirs + 2 */
/* >>> ??? How to obtain RR hardlink number for other types ? */
@ -1765,7 +1859,7 @@ int Xorriso_add_tree(struct XorrisO *xorriso, IsoDir *dir,
sfe2= malloc(5*SfileadrL);
disk_path= malloc(2*SfileadrL);
img_path= malloc(2*SfileadrL);
link_target= malloc(SfileadrL);
link_target= calloc(SfileadrL, 1);
if(sfe==NULL || sfe2==NULL || disk_path==NULL || img_path==NULL ||
link_target==NULL) {
Xorriso_no_malloc_memory(xorriso, &sfe, 0);
@ -1874,6 +1968,9 @@ cannot_lstat:;
} else {
if(Xorriso_eval_problem_status(xorriso, 0, 1|2)<0)
{ret= 0; goto was_problem;}
ret= Xorriso_resolve_link(xorriso, srcpt, link_target, 1);
if(ret<=0)
goto was_problem;
}
} else if (S_ISLNK(stbuf.st_mode)) {
ret= Xorriso_resolve_link(xorriso, srcpt, link_target, 1);
@ -4970,7 +5067,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
continue;
link_target[0]= 0;
if((flag&5)==1) { /* -ls_l */
ret= Xorriso_format_ls_l(xorriso, &stbuf, 0);
ret= Xorriso_format_ls_l(xorriso, &stbuf, 1);
if(ret<=0)
continue;
if(LIBISO_ISLNK(node)) {
@ -5106,7 +5203,7 @@ cannot_create_iter:;
ret= Xorriso_fake_stbuf(xorriso, "", &stbuf, &node, 1);
if(ret<=0)
continue;
ret= Xorriso_format_ls_l(xorriso, &stbuf, 0);
ret= Xorriso_format_ls_l(xorriso, &stbuf, 1);
if(ret<=0)
continue;
}
@ -5887,7 +5984,7 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
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);
ret= Findjob_test(job, name, boss_stbuf, stbuf, depth, 1);
if(ret<=0)
return(ret);
@ -6684,48 +6781,12 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
ret= 0; goto ex;
}
#ifndef NIX
if(flag & 1) {
ret= Xorriso_update_iso_lba0(xorriso, nwa, isosize, head_buffer, NULL,
flag & 2);
if(ret <= 0)
goto ex;
}
#else
/* Update ISO header at lba 0 */
if((flag&1) && nwa >= 32) {
if(!do_isosize) {
/* head_buffer was not filled yet. Read it from output media. */
ret= isoburn_read_iso_head(drive, nwa, &isosize, head_buffer, 2);
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text,
"Cannot read freshly written ISO image head");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
/* patch ISO header */
full_size= nwa + isosize;
headpt= head_buffer + 32*1024;
for(i=0;i<4;i++)
headpt[87-i]= headpt[80+i]= (full_size >> (8*i)) & 0xff;
ret= burn_random_access_write(drive, (off_t) 0, head_buffer,
(off_t) (64*1024), 1);
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text,
"Cannot write new ISO image head to LBA 0");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
#endif /* NIX */
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
Text_shellsafe(xorriso->outdev,sfe,0));
Xorriso_info(xorriso, 0);

View File

@ -19,7 +19,7 @@
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 2
#define xorriso_libisoburn_req_micro 5
#define xorriso_libisoburn_req_micro 8
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -338,5 +338,12 @@ int Xorriso_extract_cut(struct XorrisO *xorriso,
char *img_path, char *disk_path,
off_t img_offset, off_t bytes, int flag);
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
For now take the highest possible value.
*/
#define Xorriso_IFBOOT S_IFMT
#endif /* Xorrisoburn_includeD */