Compare commits
226 Commits
ZeroSixTwo
...
1.0.8
Author | SHA1 | Date | |
---|---|---|---|
c679fec7a1 | |||
a3378d6355 | |||
c9493d6716 | |||
666aa500b0 | |||
77f340648a | |||
d2716cc2b5 | |||
78e9d89fe4 | |||
a846f7434d | |||
5eb7841f06 | |||
88f37f2e93 | |||
2fdc41a357 | |||
c569b4d4ce | |||
2534999c0b | |||
4af50f44dd | |||
88f3ef358d | |||
03d2a82cac | |||
0280efe997 | |||
1764745ff3 | |||
b345056a2d | |||
570d5a0e22 | |||
82971d918e | |||
65d8419750 | |||
45c1c8a862 | |||
0f2b6f6c56 | |||
b537c4504e | |||
e993fcca49 | |||
8b75d736b3 | |||
dfeca624d6 | |||
6912ae8027 | |||
548c0c4efd | |||
d0bce05577 | |||
472d7610ad | |||
878931f788 | |||
e654e6399a | |||
1523d2bdd9 | |||
e8800be3d2 | |||
f211456214 | |||
08e112c687 | |||
cf49e83893 | |||
6968b72648 | |||
c69e553696 | |||
32b6ecd13d | |||
a660e9d38a | |||
c95e2c9d24 | |||
c8fcb2fb3d | |||
c1a24e71f1 | |||
0577b487d9 | |||
f7c8dbe10e | |||
060484494d | |||
a08a753967 | |||
ed27d542e0 | |||
52c641d93c | |||
1c1e86f168 | |||
ab8265b042 | |||
9c5b98ae5c | |||
5cc7fe5315 | |||
91f8c60f5b | |||
b9d8bbb9bb | |||
fcd2f36fb8 | |||
7a7f234b69 | |||
8c9c620700 | |||
558e2314ee | |||
d666142388 | |||
52988adee6 | |||
de078d2749 | |||
65ca294357 | |||
508adfd2f4 | |||
452c9685e7 | |||
39c3fc6da1 | |||
475e8fdea0 | |||
420535c275 | |||
9049784c1c | |||
963d139093 | |||
32ee757c91 | |||
cd74e84fb8 | |||
bae04a58a9 | |||
aed7a2cf05 | |||
df52dd1333 | |||
15a93611c6 | |||
4aa7c45c42 | |||
79bf6a4a4e | |||
58f4c2e9d6 | |||
e0754219aa | |||
700d1eaf7f | |||
cf986cf5d1 | |||
bf199a105c | |||
ed804db458 | |||
1ad7e71e24 | |||
37688470e1 | |||
26a6a24093 | |||
4642148e6f | |||
92b0079a23 | |||
0431d89738 | |||
08e439c48d | |||
ddecb74f6e | |||
435cd88e83 | |||
aae50b2d16 | |||
1ceb1097e1 | |||
b8788e5f9e | |||
b4be60ecb3 | |||
e0bb9195d8 | |||
96433fd145 | |||
c4c52cf0e9 | |||
be691d4f81 | |||
cb0f18cc0a | |||
5b386c57a3 | |||
2e447207a8 | |||
62e5f84fc5 | |||
509d00149f | |||
02e15f015f | |||
e492965b6e | |||
896d59c02e | |||
97740ad93d | |||
4f780339e1 | |||
01d89bd9bc | |||
56aecf2459 | |||
9b88d6220d | |||
7340920384 | |||
5f1eac8777 | |||
633cd2008d | |||
0b641cf425 | |||
77ff5f5cb9 | |||
59d873c385 | |||
8262c19e40 | |||
96455fcf56 | |||
ee4ba9d033 | |||
6e17a979e5 | |||
3cbf74b32e | |||
86fb1eb0cf | |||
3ef177f1c9 | |||
18f1f0a8f9 | |||
2e64464c7c | |||
4803a31fa4 | |||
9351707d83 | |||
03b709cb1f | |||
5427d7a8f2 | |||
4cdd884731 | |||
d50095d2a6 | |||
7ff3d65b9b | |||
70e52f1a0c | |||
4f53ed4630 | |||
1f3b601563 | |||
496fc70540 | |||
6ad24ea94b | |||
a08a54913b | |||
025d6f2ee6 | |||
65fdba8884 | |||
8ad6bff397 | |||
79feaa7fd5 | |||
4897fc74f1 | |||
07c2bb8421 | |||
692a675329 | |||
668e58761b | |||
82bff299ec | |||
75fc1989db | |||
da0d20731d | |||
06c84ae7b0 | |||
bc9d6ae59c | |||
9836991217 | |||
5ca5d2e34b | |||
64e43541db | |||
4dde2a206b | |||
f18e352251 | |||
f479c73940 | |||
9ddb91d3ea | |||
a7e8b474d7 | |||
6019f0fae1 | |||
b952833d17 | |||
cc92cbf239 | |||
aefa04dd6a | |||
5deefe053b | |||
5f798e535b | |||
2e7d10b6b7 | |||
d4872c7d83 | |||
32a7b0fd4d | |||
61e803a3a7 | |||
47d6c59b26 | |||
ae886b6154 | |||
b16dfb5cad | |||
caffd6c7da | |||
38e1dc8a22 | |||
25f1eab3ac | |||
b7030ca35b | |||
3ff054d60f | |||
3abcb244c7 | |||
97415e3f63 | |||
2e956586c1 | |||
e7992747e5 | |||
7019473212 | |||
0b175bab97 | |||
ba0871a814 | |||
399cbf6d66 | |||
55c8f1d964 | |||
82941f4c99 | |||
b70f5a9041 | |||
96ee0fae23 | |||
0159052d92 | |||
f46bcf9d5f | |||
e942108ad7 | |||
25460413ce | |||
9b788a2c32 | |||
0b263e8c78 | |||
851dd76849 | |||
5a3acfc41a | |||
147ef216ce | |||
c41c83b279 | |||
68dc026cf9 | |||
6f2aac75ce | |||
3bec7c5c77 | |||
4c81b329ef | |||
daebb44722 | |||
54a493f382 | |||
e4ef8c6582 | |||
d02bd410b3 | |||
7b4bd76d9b | |||
538b70068f | |||
d5583ce58c | |||
be11642977 | |||
4fd78f9049 | |||
d02d8642b9 | |||
b86abe8c65 | |||
41d0d1c03f | |||
4b3a671d27 | |||
aeaa715d8d | |||
641b696764 | |||
c2ff24cf89 |
@ -1,12 +1,8 @@
|
||||
Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
libisoburn is Copyright (C) 2007-2010 Vreixo Formoso, Thomas Schmitt
|
||||
xorriso is Copyright (C) 2007-2010 Thomas Schmitt
|
||||
libisofs (if included) is Copyright (C) 2007-2010 Vreixo Formoso, Mario Danic
|
||||
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
||||
and Copyright (C) 2006-2010 Mario Danic, Thomas Schmitt
|
||||
|
||||
libisoburn is Copyright (C) 2007-2011 Vreixo Formoso, Thomas Schmitt
|
||||
xorriso is Copyright (C) 2007-2011 Thomas Schmitt
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2
|
||||
|
95
ChangeLog
95
ChangeLog
@ -1,3 +1,96 @@
|
||||
|
||||
libisoburn-1.0.8.pl00.tar.gz Thu Apr 14 2011
|
||||
===============================================================================
|
||||
* Bug fix: mkisofs emulation could ignore options (regression in 0.1.6)
|
||||
|
||||
libisoburn-1.0.6.pl00.tar.gz Sat Apr 9 2011
|
||||
===============================================================================
|
||||
* Bug fix: -as mkisofs padding did not work (regression in 1.0.4)
|
||||
* Bug fix: Options -gid and -uid had no effect
|
||||
* New API call isoburn_set_truncate()
|
||||
* New relax option isoburn_igopt_joliet_long_names
|
||||
* New option -early_stdio_test
|
||||
* New options -print_info and -print_mark
|
||||
* New -compliance option joliet_long_names
|
||||
* -as mkisofs option -joliet-long is now fully functional
|
||||
* Burning DVD-R DAO with 2 kB size granularity rather than 32 kB
|
||||
|
||||
libisoburn-1.0.4.pl00.tar.gz Thu Mar 10 2011
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
* New isoburn_ropt_set_extensions() option isoburn_ropt_nomd5tag
|
||||
xorriso novelties:
|
||||
* Bug fix: xorrisofs did not work under growisofs -M (version 1.0.0 was ok)
|
||||
* Bug fix: -as mkisofs -C attempted to read volume header of blank media
|
||||
* Bug fix: -as mkisofs -old-root did not work with -graft-points
|
||||
* Bug fix: -as mkisofs -partition_hd_cyl had no effect
|
||||
* Bug fix: -as mkisofs did not properly unescape target part of pathspecs
|
||||
* Bug fix: isohybrid image size was not aligned to cylinder boundary
|
||||
* Bug fix: Compilation without zlib failed
|
||||
* New -padding modes "included" and "appended"
|
||||
* New bootspec partition_cyl_align=, new -as mkisofs option -partition_cyl_align
|
||||
* New -as mkisofs and -as cdrecord option --no_rc
|
||||
* Own man page and info document for xorrisofs
|
||||
|
||||
libisoburn-1.0.2.pl00.tar.gz Mon Feb 23 2011
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
* Removed compiler obstacles of GNU xorriso on Solaris 9
|
||||
* New isoburn_igopt_set_extensions() option isoburn_igopt_old_empty
|
||||
xorriso novelties:
|
||||
* Bug fix: Images produced with -for_backup might be unreadable and
|
||||
also fail -check_md5 verification.
|
||||
* Bug fix: mkisofs emulation options -l , -full-iso9660-filenames did not work.
|
||||
* Bug fix: Option -mkdir yielded SIGSEGV due to a NULL pointer
|
||||
* Bug fix: ECMA-119 standards violation with Volume Descriptor Set Terminator
|
||||
* New options -clone and -cp_clone
|
||||
* New -find actions update_merge, rm_merge, clear_merge
|
||||
* New -as mkisofs option -max-iso9660-filenames
|
||||
* New -as mkisofs option --old-empty
|
||||
* New -as mkisofs options -root , -old-root
|
||||
* New -as mkisofs options --old-root-no-md5, --old-root-no-ino, --old-root-dev
|
||||
|
||||
libisoburn-1.0.0.pl00.tar.gz Mon Jan 17 2011
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
* New API call isoburn_igopt_set_untranslated_name_len()
|
||||
xorriso novelties:
|
||||
* Bug fix: -as mkisofs -print-size did not account for -partition_offset
|
||||
* Default -abort_on value is now "FAILURE" with batch and "NEVER" with dialog
|
||||
* New -compliance options untranslated_names , untranslated_name_len=
|
||||
* New -as mkisofs option -untranslated_name_len
|
||||
* New -compliance option iso_9660_1999, -as mkisofs option -iso-level 4
|
||||
* New -compliance option iso_9660_level=number
|
||||
* New -compliance option allow_dir_id_ext, -as mkisofs -disallow_dir_id_ext
|
||||
* Disabled TOC emulation with -as mkisofs. May be re-enabled by --emul-toc.
|
||||
|
||||
libisoburn-0.6.6.pl00.tar.gz Sun Dec 12 2010
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
* New API calls isoburn_igopt_set_disc_label(), isoburn_igopt_get_disc_label()
|
||||
* New API calls isoburn_ropt_set_displacement(), isoburn_ropt_get_displacement()
|
||||
xorriso novelties:
|
||||
* Bug fix: -as mkisofs -print-size printed the size but also produced ISO image
|
||||
* Build problem fix on Linux 2.4 in GNU xorriso libjte/checksum.c
|
||||
* New -as mkisofs option -joliet-long
|
||||
* New bootspec sparc_label=, new -as mkisofs options -sparc-boot , -sparc-label
|
||||
* New option -displacement
|
||||
|
||||
libisoburn-0.6.4.pl00.tar.gz Tue Oct 26 2010
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
* New API call isoburn_libjte_req()
|
||||
* New API calls isoburn_igopt_attach_jte() and isoburn_igopt_detach_jte()
|
||||
* New API call isoburn_igopt_set_tail_blocks()
|
||||
* New API call isoburn_libjte_req()
|
||||
xorriso novelties:
|
||||
* New option -jigdo
|
||||
* New -as mkisofs options -jigdo-* and -md5-list as of genisoimage
|
||||
* New -as mkisofs options -checksum_algorithm_iso, -checksum_algorithm_template
|
||||
* New bootspecs mips_path= and mipsel_path= for Debian MIPS releases
|
||||
* New -as mkisofs options -mips-boot and -mipsel-boot
|
||||
* New option -append_partition, -as mkisofs -append_partition
|
||||
|
||||
libisoburn-0.6.2.pl00.tar.gz Sat Sep 18 2010
|
||||
===============================================================================
|
||||
libisoburn novelties:
|
||||
@ -27,7 +120,7 @@ xorriso novelties:
|
||||
* New -as mkisofs option --boot-catalog-hide
|
||||
* New option -hide, -find action -hide, -find test -hidden
|
||||
* New -boot_image bootspec cat_hidden=on
|
||||
* New options -copright_file , -biblio_file , -abstract_file
|
||||
* New options -copyright_file , -biblio_file , -abstract_file
|
||||
* New find test -disk_name
|
||||
* Enabled use of libreadline on Solaris
|
||||
* Bug fix: -check_media patch_lba0= could install wrong image size
|
||||
|
11
Makefile.am
11
Makefile.am
@ -129,6 +129,7 @@ install-exec-hook:
|
||||
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||
$(LIBBURNIA_LDCONFIG_CMD) "$(DESTDIR)$(libdir)" || echo 'NOTE: Explicite dynamic library configuration failed. If needed, configure manually for:' "$(DESTDIR)$(libdir)"
|
||||
|
||||
|
||||
# Alternative to the disabled .PHONY above.
|
||||
@ -218,15 +219,21 @@ indent: $(indent_files)
|
||||
nodist_pkgconfig_DATA = \
|
||||
libisoburn-1.pc
|
||||
|
||||
man_MANS = xorriso/xorriso.1
|
||||
man_MANS = \
|
||||
xorriso/xorriso.1 \
|
||||
xorriso/xorrisofs.1
|
||||
|
||||
info_TEXINFOS = xorriso/xorriso.texi
|
||||
info_TEXINFOS = \
|
||||
xorriso/xorriso.texi \
|
||||
xorriso/xorrisofs.texi
|
||||
|
||||
EXTRA_DIST = \
|
||||
libisoburn-1.pc.in \
|
||||
version.h.in \
|
||||
doc/comments \
|
||||
doc/doxygen.conf.in \
|
||||
doc/partition_offset.wiki \
|
||||
doc/startup_file.txt \
|
||||
README \
|
||||
AUTHORS \
|
||||
CONTRIBUTORS \
|
||||
|
26
README
26
README
@ -4,8 +4,8 @@
|
||||
libisoburn and xorriso. 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.6.2.pl00.tar.gz
|
||||
Copyright (C) 2006-2010 Vreixo Formoso, Thomas Schmitt.
|
||||
http://files.libburnia-project.org/releases/libisoburn-1.0.8.pl00.tar.gz
|
||||
Copyright (C) 2006-2011 Vreixo Formoso, Thomas Schmitt.
|
||||
Provided under GPL version 2 or later.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -34,17 +34,17 @@ By using this software you agree to the disclaimer at the end of this text:
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
Dynamic library and compile time header requirements for libisoburn-0.6.2 :
|
||||
- libburn.so.4 , version libburn-0.8.4 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.36 or higher
|
||||
Dynamic library and compile time header requirements for libisoburn-1.0.8 :
|
||||
- libburn.so.4 , version libburn-1.0.6 or higher
|
||||
- libisofs.so.6 , version libisofs-1.0.6 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
include headers seen at compile time.
|
||||
|
||||
Obtain libisoburn-0.6.2.pl00.tar.gz, take it to a directory of your choice
|
||||
Obtain libisoburn-1.0.8.pl00.tar.gz, take it to a directory of your choice
|
||||
and do:
|
||||
|
||||
tar xzf libisoburn-0.6.2.pl00.tar.gz
|
||||
cd libisoburn-0.6.2
|
||||
tar xzf libisoburn-1.0.8.pl00.tar.gz
|
||||
cd libisoburn-1.0.8
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -55,9 +55,13 @@ Then become superuser and execute
|
||||
make install
|
||||
which will make available libisoburn.so.1 and the program xorriso.
|
||||
|
||||
On GNU/Linux it will try to run program ldconfig with the library installation
|
||||
directory as only argument. Failure to do so will not abort installation.
|
||||
One may disable ldconfig by ./configure option --disable-ldconfig-at-install .
|
||||
|
||||
|
||||
By use of a version script, the libisoburn.so library exposes no other function
|
||||
names but those of the API definitions in <libsoburn/libisoburn.h> and
|
||||
names but those of the API definitions in <libisoburn/libisoburn.h> and
|
||||
<libisoburn/xorriso.h>.
|
||||
If -Wl,--version-script=... makes problems with the local compiler, then
|
||||
disable this encapsulation feature by
|
||||
@ -77,6 +81,7 @@ xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
||||
|
||||
After installation documentation is available via
|
||||
man xorriso
|
||||
man xorrisofs
|
||||
|
||||
Several alias links point to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
@ -92,6 +97,7 @@ Other deliberate dependency reduction options of ./configure are:
|
||||
--disable-libacl avoid use of ACL functions like acl_to_text()
|
||||
--disable-xattr avoid use of xattr functions like listxattr()
|
||||
--disable-zlib avoid use of zlib functions like compress2()
|
||||
--disable-libjte avoid use of libjte for -jigdo command
|
||||
|
||||
xorriso allows to use external processes as file content filters. This is
|
||||
a potential security risk which may be avoided by ./configure option
|
||||
@ -219,7 +225,7 @@ libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||
Copyright (C) 2006-2011 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||
|
||||
We will not raise any legal protest to dynamic linking of our libraries
|
||||
with applications that are not under GPL, as long as they fulfill
|
||||
|
@ -18,10 +18,12 @@ AC_DEFUN([TARGET_SHIZZLE],
|
||||
|
||||
AC_MSG_CHECKING([target operating system])
|
||||
|
||||
LIBBURNIA_LDCONFIG_CMD="echo 'No ldconfig run performed. If needed, configure manually for:'"
|
||||
case $target in
|
||||
*-*-linux*)
|
||||
ARCH=linux
|
||||
LIBBURN_ARCH_LIBS=
|
||||
LIBBURNIA_LDCONFIG_CMD=ldconfig
|
||||
;;
|
||||
*-*-freebsd*)
|
||||
ARCH=freebsd
|
||||
|
60
configure.ac
60
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libisoburn], [0.6.2], [http://libburnia-project.org])
|
||||
AC_INIT([libisoburn], [1.0.8], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -21,9 +21,9 @@ dnl configure.ac only rules the libtool revision numbering about
|
||||
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
||||
dnl
|
||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||
ISOBURN_MAJOR_VERSION=0
|
||||
ISOBURN_MINOR_VERSION=6
|
||||
ISOBURN_MICRO_VERSION=2
|
||||
ISOBURN_MAJOR_VERSION=1
|
||||
ISOBURN_MINOR_VERSION=0
|
||||
ISOBURN_MICRO_VERSION=8
|
||||
|
||||
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
||||
|
||||
@ -36,16 +36,16 @@ dnl Libtool versioning
|
||||
dnl Generate libisoburn.so.1.x.y
|
||||
dnl SONAME will become LT_CURRENT - LT_AGE
|
||||
dnl
|
||||
dnl ts B00918
|
||||
dnl This is the release version 0.6.2 = libisoburn.so.1.51.0
|
||||
dnl ts B10414
|
||||
dnl This is the release version 1.0.8 = libisoburn.so.1.65.0
|
||||
dnl ### This is the development version after above stable release
|
||||
dnl LT_CURRENT++, LT_AGE++ have not happened yet.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 52 - 51 = 1 . Library name = libisoburn.so.1.51.0
|
||||
dnl SONAME = 66 - 65 = 1 . Library name = libisoburn.so.1.65.0
|
||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||
LT_CURRENT=52
|
||||
LT_AGE=51
|
||||
LT_CURRENT=66
|
||||
LT_AGE=65
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
@ -195,6 +195,17 @@ else
|
||||
fi
|
||||
AC_SUBST(ZLIB_DEF)
|
||||
|
||||
dnl ts B00928
|
||||
AC_ARG_ENABLE(libjte,
|
||||
[ --enable-libjte Enable use of libjte by xorriso, default=yes],
|
||||
, enable_libjte=yes)
|
||||
if test "x$enable_libjte" = xyes; then
|
||||
LIBJTE_DEF="-DXorriso_with_libjtE"
|
||||
AC_CHECK_HEADER(libjte/libjte.h, AC_CHECK_LIB(jte, libjte_new, , LIBJTE_DEF= ), LIBJTE_DEF= )
|
||||
else
|
||||
LIBJTE_DEF=
|
||||
fi
|
||||
AC_SUBST(LIBJTE_DEF)
|
||||
|
||||
dnl ts B00107
|
||||
dnl Just for the case that it is necessary to give link option -lcdio not only
|
||||
@ -241,7 +252,7 @@ AC_SUBST(EXTF_SUID_DEF)
|
||||
|
||||
AC_ARG_ENABLE(dvd-obs-64k,
|
||||
[ --enable-dvd-obs-64k 64 KB default size for xorriso DVD/BD writing, default=no],
|
||||
, enable_fifo_odirect=no)
|
||||
, enable_dvd_obs_64=no)
|
||||
if test x$enable_dvd_obs_64k = xyes; then
|
||||
XORRISO_DVD_OBS_64K="-DXorriso_dvd_obs_default_64K"
|
||||
echo "enabled xorriso write size default 64 KB on DVD and BD"
|
||||
@ -271,6 +282,19 @@ else
|
||||
echo "disabled strict symbol encapsulation"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(ldconfig-at-install,
|
||||
[ --enable-ldconfig-at-install On GNU/Linux run ldconfig, default=yes],
|
||||
, ldconfig_at_install=yes)
|
||||
if test x$ldconfig_at_install = xyes; then
|
||||
dummy=dummy
|
||||
else
|
||||
LIBBURNIA_LDCONFIG_CMD="echo 'NOTE: ldconfig is disabled. If needed, configure manually for:'"
|
||||
echo "disabled run of ldconfig during installation on GNU/Linux"
|
||||
fi
|
||||
AC_SUBST(LIBBURNIA_LDCONFIG_CMD)
|
||||
|
||||
|
||||
|
||||
AC_CHECK_HEADER(libburn/libburn.h)
|
||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||
|
||||
@ -278,8 +302,8 @@ AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||
# ------- Visible mark in configure : Start of library check
|
||||
|
||||
dnl Check for proper library versions
|
||||
LIBBURN_REQUIRED=0.8.4
|
||||
LIBISOFS_REQUIRED=0.6.36
|
||||
LIBBURN_REQUIRED=1.0.6
|
||||
LIBISOFS_REQUIRED=1.0.6
|
||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
||||
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
||||
|
||||
@ -309,18 +333,18 @@ AC_ARG_ENABLE(debug,
|
||||
, enable_debug=yes)
|
||||
if test x$enable_debug != xyes; then
|
||||
if test x$GCC = xyes; then
|
||||
CFLAGS="$CFLAGS -O3"
|
||||
CFLAGS="$CFLAGS -fexpensive-optimizations"
|
||||
CFLAGS="-O3 $CFLAGS"
|
||||
CFLAGS="-fexpensive-optimizations $CFLAGS"
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DNDEBUG"
|
||||
CFLAGS="-DNDEBUG $CFLAGS"
|
||||
else
|
||||
if test x$GCC = xyes; then
|
||||
CFLAGS="$CFLAGS -g -pedantic -Wall"
|
||||
CFLAGS="-g -pedantic -Wall $CFLAGS"
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DDEBUG"
|
||||
CFLAGS="-DDEBUG $CFLAGS"
|
||||
fi
|
||||
|
||||
CFLAGS="$CFLAGS $READLINE_DEF $LIBACL_DEF $XATTR_DEF $EXTF_DEF $EXTF_SUID_DEF $ZLIB_DEF $XORRISO_DVD_OBS_64K"
|
||||
CFLAGS="$READLINE_DEF $LIBACL_DEF $XATTR_DEF $EXTF_DEF $EXTF_SUID_DEF $ZLIB_DEF $LIBJTE_DEF $XORRISO_DVD_OBS_64K $CFLAGS"
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
|
232
doc/faq.wiki
Normal file
232
doc/faq.wiki
Normal file
@ -0,0 +1,232 @@
|
||||
|
||||
'''Libburnia Frequently Asked Questions'''
|
||||
|
||||
Please post your questions to
|
||||
[http://mailman-mail1.webfaction.com/listinfo/libburn-hackers/ libburn-hackers mailing list].
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
'''Content:'''
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Burning:
|
||||
|
||||
[#diff_cdrskin_xorriso What is the difference between cdrskin and xorriso ?]
|
||||
|
||||
Imaging:
|
||||
|
||||
[#edit_files Is there a way to edit files inside the ISO image ?]
|
||||
|
||||
[#boot_arch For which architectures xorriso is able to create bootable images ?]
|
||||
|
||||
[#isohybrid How to enable booting from USB stick ?]
|
||||
|
||||
[#partition_offset What is partition offset feature all about?]
|
||||
|
||||
Development:
|
||||
|
||||
[#api_specs Where are the APIs of libburnia libraries described ?]
|
||||
|
||||
[#gui_advise I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ?]
|
||||
|
||||
Miscellaneous:
|
||||
|
||||
[#example_links Where to see examples ?]
|
||||
|
||||
[#xorriso_aliases What personalities are supported by xorriso ?]
|
||||
|
||||
[#xorriso_dialog_mode What is xorriso dialog mode useful for ?]
|
||||
|
||||
[#version_numbers Why is every second release missing ?]
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
'''Burning'''
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
===== What is the difference between cdrskin and xorriso ? ===== #diff_cdrskin_xorriso
|
||||
|
||||
[wiki:Cdrskin cdrskin] is a dedicated emulator of program cdrecord, based on
|
||||
libburn. It tries to be as similar to cdrecord as is possible under that
|
||||
premise.
|
||||
|
||||
[wiki:Xorriso xorriso] is an integrated tool which creates, loads, manipulates,
|
||||
and writes ISO 9660 filesystem images with Rock Ridge extensions.
|
||||
It is based on libburn, libisofs, and libisoburn. One of its features is
|
||||
the emulation of the corresponding tasks as done by mkisofs and cdrecord.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
'''Imaging'''
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
===== Is there a way to edit files inside the ISO image ? ===== #edit_files
|
||||
|
||||
File content cannot be altered. But files may be replaced by new copies from
|
||||
the disk filesystem.
|
||||
|
||||
The main method of manipulating an existing ISO image is to append a session
|
||||
with a new complete directory tree and the file content of the added or
|
||||
overwritten files. Depending on the media type you get gaps between sessions
|
||||
of up to 20 MB. So better try to do all foreseeable changes by one add-on
|
||||
session.
|
||||
|
||||
===== For which architectures xorriso is able to create bootable images ? ===== #boot_arch
|
||||
|
||||
Currently it supports systems with PC-BIOS via El Torito for booting from
|
||||
CD, DVD, or BD media, and via MBR for booting from memory sticks or hard
|
||||
disks. Further it supports machines with MIPS processor from SGI (Big Endian)
|
||||
and DEC (Little Endian), and SUN SPARC machines.
|
||||
(See [http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/doc/boot_sectors.txt libisofs/doc/boot_sectors.txt]
|
||||
for technical details.)
|
||||
|
||||
Machines which support EFI may either boot via El Torito or use the files
|
||||
of the ISO image directly. It is possible to append to the ISO image a
|
||||
writeable FAT12 partition where files for EFI may be stored and changed.
|
||||
|
||||
===== How to enable booting from USB stick ? ===== #isohybrid
|
||||
|
||||
The ISOLINUX boot loader is normally started from CD, DVD or BD media
|
||||
by a PC-BIOS via an El Torito boot record. But if the ISO image resides on an
|
||||
USB stick or another hard-disk-like device, then PC-BIOS ignores El Torito
|
||||
and rather expects a Master Boot Record (MBR). Both boot record types can
|
||||
reside in the same ISO image. Therefore it is possible to create an MBR that
|
||||
starts the boot image file of ISOLINUX which is already target of the El Torito
|
||||
boot record. This kind of MBR is called "isohybrid". ISOLINUX provides
|
||||
a program named isohybrid to patch existing images, but libisofs can create an
|
||||
MBR already when producing the ISO image. See in
|
||||
[http://www.gnu.org/software/xorriso/man_1_xorriso.html manual page of xorriso]
|
||||
option -boot_image with arguments "isolinux" "system_area=",
|
||||
and -as mkisofs option -isohybrid-mbr.
|
||||
|
||||
See [http://en.wikipedia.org/wiki/Master_boot_record Wikipedia on MBR] for
|
||||
general information about PC-DOS Master Boot Records, and
|
||||
[http://syslinux.zytor.com/wiki/index.php/ISOLINUX ISOLINUX wiki] for special
|
||||
information about ISOLINUX. The wiki example with mkisofs can be performed
|
||||
as well by help of xorriso option -as mkisofs.
|
||||
|
||||
A similar combination of El Torito and MBR is created by GRUB2 tool
|
||||
grub-mkrescue. See [http://www.gnu.org/software/grub/ homepage of GNU GRUB 2]
|
||||
for general information.
|
||||
|
||||
===== What is partition offset feature all about? ===== #partition_offset
|
||||
|
||||
If an MBR is present, then it contains a partition table with up to four
|
||||
entries. The MBR is located at the very start of the ISO image. By
|
||||
tradition the first partition should begin only after the range of MBR and
|
||||
eventual supporting data blocks. On hard disk one often sees partition 1
|
||||
starting at byte 63*512. Further it is tradition that the payload filesystem
|
||||
is mountable via one of the partitions.
|
||||
|
||||
The isohybrid MBR has its only partition start at byte 0. Thus it is mountable
|
||||
but does not obey the tradition to begin only after the MBR. The grub-mkrescue
|
||||
MBR on the other hand has partition 1 start at byte 512, which makes it
|
||||
unmountable. Only the unpartitioned base device can be mounted. (On GNU/Linux
|
||||
e.g. /dev/sdb is the base device whereas /dev/sdb1 is partition 1.)
|
||||
|
||||
The compromise offered by libisofs is to create a second superblock at
|
||||
address 16*2048 and to let start partition 1 at this address. The second
|
||||
superblock leads to a second directory tree which takes into account the
|
||||
address difference between partition 1 and the base device. So the image
|
||||
gets mountable via both devices and reserves 32 kB for boot manager software
|
||||
where it eventually can manipulate and augment the MBR.
|
||||
(See [http://libburnia-project.org/wiki/PartitionOffset Partition Offset Wiki]
|
||||
for examples.)
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
'''Developing'''
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
===== Where are the APIs of libburnia libraries described ? ===== #api_specs
|
||||
|
||||
The decisive references are the inclusion headers of the libraries
|
||||
<libburn/libburn.h>, <libisofs/libisofs.h>, <libisoburn/libisoburn.h>,
|
||||
and <libisoburn/xorriso.h>.
|
||||
|
||||
Current SVN versions of these files:
|
||||
[http://libburnia-project.org/browser/libburn/trunk/libburn/libburn.h libburn/libburn.h] ,
|
||||
[http://bazaar.launchpad.net/%7Elibburnia-team/libisofs/scdbackup/annotate/head%3A/libisofs/libisofs.h libisofs/libisofs.h] ,
|
||||
[http://libburnia-project.org/browser/libisoburn/trunk/libisoburn/libisoburn.h libisoburn/libisoburn.h] ,
|
||||
[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h libisoburn/xorriso.h]
|
||||
|
||||
Doxygen generated API descriptions at
|
||||
[http://api.libburnia-project.org api.libburnia-project.org]
|
||||
might be slightly behind the latest developments.
|
||||
|
||||
===== I want to write a GUI on the top of libburnia libraries. Any pointers or recommendations ? ===== #gui_advise
|
||||
|
||||
Most appreciated would be a GUI for xorriso which allows to copy files from
|
||||
a view of the hard disk filesystem to a view of the ISO filesystem, and vice
|
||||
versa. The xorriso implementation is located inside libisoburn.
|
||||
|
||||
Each option that is described in
|
||||
[http://www.gnu.org/software/xorriso/man_1_xorriso.html man 1 xorriso]
|
||||
can be performed by a corresponding C function that is defined in
|
||||
[http://libburnia-project.org/browser/libisoburn/trunk/xorriso/xorriso.h xorriso.h].
|
||||
Further there are calls for library startup and shutdown, for problem
|
||||
handling, and for the interpreters of xorriso's command line interface.
|
||||
The xorriso API encapsulates calls to libisofs, libburn, and libisoburn.
|
||||
|
||||
An alternative to the xorriso C API is xorriso dialog mode.
|
||||
[#xorriso_dialog_mode See below.]
|
||||
|
||||
The known existing GUIs [http://www.xfce.org/projects/xfburn/ Xfburn],
|
||||
[http://projects.gnome.org/brasero/ Brasero],
|
||||
[http://flburn.sourceforge.net/ FlBurn]
|
||||
rather use libisofs and libburn directly.
|
||||
(Please submit an URI if you want your libburnia GUI application mentioned
|
||||
here.)
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
'''Miscellaneous'''
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
===== Where to see examples ? ===== #example_links
|
||||
|
||||
[http://www.gnu.org/software/xorriso/man_1_xorriso.html#EXAMPLES xorriso examples] ,
|
||||
[http://scdbackup.sourceforge.net/man_1_cdrskin_devel.html#EXAMPLES cdrskin examples] ,
|
||||
[http://libburnia-project.org/browser/libburn/trunk/test/libburner.c libburner.c a minimal but complete burn program]
|
||||
(also illustrated at the end of [http://api.libburnia-project.org/libburn/ libburn API intro]).
|
||||
|
||||
|
||||
===== What personalities are supported by xorriso ? ===== #xorriso_aliases
|
||||
|
||||
The name by which xorriso is started may trigger certain features which
|
||||
normally would need to be enabled by program options.
|
||||
|
||||
xorrisofs starts up in mkisofs emulation mode, which otherwise would have to
|
||||
be entered by command -as "mkisofs".
|
||||
|
||||
xorrecord starts up in cdrecord emulation mode, which is normally entered by
|
||||
command -as "cdrecord". This emulation is only able to write a single data
|
||||
track as new session to blank or appendable media. No audio. No multiple
|
||||
tracks in one session.
|
||||
|
||||
osirrox allows to copy files from ISO image to disk and to apply option -mount
|
||||
to one or more of the existing ISO sessions. This is normally enabled by
|
||||
option -osirrox "on:o_excl_off".
|
||||
|
||||
===== What is xorriso dialog mode useful for ? ===== #xorriso_dialog_mode
|
||||
|
||||
Dialog mode is initiated if -dialog "on" is among the program arguments.
|
||||
It can be used to inspect and exploit existing ISO 9660 images or
|
||||
to explore xorriso's behavior in order to develop the command sequence
|
||||
for a batch run.
|
||||
|
||||
Frontend programmers may fork xorriso initiating a xorriso dialog session
|
||||
(-dialog "on" -use_readline "off" -pkt_output "on" -mark "done"),
|
||||
and interact with it from their own program via pipes connected to
|
||||
xorriso's stdin and stdout. This is more efficient than forking xorriso
|
||||
every now and then to perform various commands in order to complete
|
||||
complex tasks like image size prediction.
|
||||
|
||||
===== Why is every second release missing ? ===== #version_numbers
|
||||
|
||||
Releases have an even third version number. Like 0.5.6 or 1.0.4.
|
||||
During development the next higher odd number is used. E.g. 0.5.7 or 1.0.5.
|
||||
|
||||
The content of release tarballs does not get changed without changing
|
||||
their name. The development tarballs of xorriso and cdrskin may change
|
||||
their content without notice.
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
Site maintainer: Do not edit this wiki directly but rather the SVN version
|
||||
of libisoburn/trunk/doc/faq.wiki. When done, paste it into the wiki editor.
|
||||
|
222
doc/partition_offset.wiki
Normal file
222
doc/partition_offset.wiki
Normal file
@ -0,0 +1,222 @@
|
||||
|
||||
The partition offset feature of libisofs can produce ISO 9660 images which bear
|
||||
a quite conventional partition table if copied onto a USB stick. The first
|
||||
partition marks the size of the ISO image but starts at a non-zero address.
|
||||
Thus it marks a small part of the device as unclaimed by partitions and
|
||||
available for storing boot loader code.
|
||||
|
||||
Nevertheless the USB stick is mountable via its overall device file as well as
|
||||
via the partition device file. E.g. on GNU/Linux: /dev/sdb and /dev/sdb1.
|
||||
This is achieved by two distinct sets of meta-data which refer to the same
|
||||
file content.
|
||||
|
||||
The dual-mount feature supports Rock Ridge and eventually Joliet too.
|
||||
It is capable of multi-session.
|
||||
|
||||
Currently only offset 32 kB seems to make sense. Smaller offsets are prohibited
|
||||
by fundamental assumptions of libisofs and libisoburn. Larger offsets would
|
||||
extend the unclaimed area into vital blocks of the ISO image.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Meanwhile Debian
|
||||
[http://cdimage.debian.org/cdimage/daily-builds/daily/current/ daily]
|
||||
and [http://cdimage.debian.org/cdimage/weekly-builds/ weekly] builds make
|
||||
use of this feature with their bootable ISO images for i386 and amd64. E.g.
|
||||
[http://cdimage.debian.org/cdimage/daily-builds/daily/current/i386/iso-cd/debian-testing-i386-businesscard.iso debian-testing-i386-businesscard.iso].
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Example:
|
||||
|
||||
Testing mountability and ISOLINUX bootability from USB stick and CD.
|
||||
|
||||
Overview:
|
||||
|
||||
The test image was derived from one year old RIPLinux-9.3-non-X.iso which
|
||||
has an isohybrid MBR. Syslinux version seems to be 3.82. That MBR and the file
|
||||
tree from the mounted RIPLinux image was used to build a new ISO image
|
||||
with 16 * 2kB partition offset. Isohybrid MBR patching was done by xorriso.
|
||||
|
||||
Details:
|
||||
|
||||
The first 32 kB of an ISO 9660 image are called System Area and may host any
|
||||
byte pattern. In the case of RIPLinux-9.3-non-X.iso only the first 512 bytes
|
||||
are non-zero. But to avoid any assumptions, all 32 kB get copied here.
|
||||
{{{
|
||||
dd if=RIPLinux-9.3-non-X.iso bs=1K count=32 of=RIPLinux-9.3-non-X.sysarea
|
||||
}}}
|
||||
Normally the System Area file with its MBR is provided by the Syslinux
|
||||
installation under the name isohdp[fp]x*.bin .
|
||||
E.g. /usr/lib/syslinux/isohdpfx.bin
|
||||
|
||||
The files of the image are made accessible for reading
|
||||
{{{
|
||||
mount -o loop RIPLinux-9.3-non-X.iso /mnt
|
||||
}}}
|
||||
|
||||
A new ISO image gets composed. The first three lines of arguments are taken
|
||||
from the prescriptions of ISOLINUX wiki and adapted to the names used in
|
||||
RIPLinux-9.3-non-X.iso.
|
||||
Option -isohybrid-mbr imports the copied System Area and patches the MBR
|
||||
according to rules published by hpa on Syslinux mailing list.
|
||||
Option -partition_offset 16 causes the first partition to start at 2 kB block
|
||||
number 16. It also prepares the image to be mountable by this partition, too.
|
||||
{{{
|
||||
xorriso -as mkisofs \
|
||||
-o new_image.iso \
|
||||
-b boot/isolinux/isolinux.bin -c boot/boot.cat \
|
||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||
-isohybrid-mbr RIPLinux-9.3-non-X.sysarea \
|
||||
-partition_offset 16 \
|
||||
/mnt
|
||||
}}}
|
||||
The image was copied onto a USB stick
|
||||
{{{
|
||||
dd if=new_image.iso of=/dev/sdc
|
||||
}}}
|
||||
and plugged into a Debian system.
|
||||
{{{
|
||||
fdisk -lu /dev/sdb
|
||||
}}}
|
||||
yields
|
||||
{{{
|
||||
Device Boot Start End Blocks Id System
|
||||
/dev/sdb1 * 64 120831 60384 17 Hidden HPFS/NTFS
|
||||
}}}
|
||||
|
||||
I can mount /dev/sdb and /dev/sdb1 alike:
|
||||
{{{
|
||||
mount /dev/sdb1 /mnt1
|
||||
mount -o loop /dev/sdb /mnt
|
||||
}}}
|
||||
-o loop avoids failure with "mount: /dev/sdb already mounted or /mnt busy".
|
||||
A comparison by
|
||||
{{{
|
||||
diff -r /mnt /mnt1
|
||||
}}}
|
||||
reports no difference.
|
||||
Human readable files look ok.
|
||||
Test-reading all content by
|
||||
{{{
|
||||
tar cf - /mnt | wc
|
||||
}}}
|
||||
yields a reasonable byte count of 60743680 and no errors.
|
||||
|
||||
The machine boots RIPLinux from this USB stick with no visible problems.
|
||||
It can then mount /dev/sdb as well as /dev/sdb1.
|
||||
The ISO image boots from CD too.
|
||||
|
||||
Mounting the partition can be simulated with an image file on hard disk by
|
||||
cutting off the first partition_offset blocks of 2 KB:
|
||||
{{{
|
||||
dd if=new_image.iso of=partition_image.iso bs=2048 skip=16
|
||||
mount -o loop partition_image.iso /mnt1
|
||||
}}}
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Another test was made with GRUB 2 by downloading
|
||||
{{{
|
||||
bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub
|
||||
}}}
|
||||
|
||||
Before building GRUB 2, the file
|
||||
{{{
|
||||
util/grub-mkrescue.in
|
||||
}}}
|
||||
was edited to replace in the options of the xorriso command:
|
||||
{{{
|
||||
--protective-msdos-label
|
||||
}}}
|
||||
by
|
||||
{{{
|
||||
-partition_offset 16 -no-pad
|
||||
}}}
|
||||
Then GRUB 2 was built and installed.
|
||||
|
||||
The resulting image from
|
||||
{{{
|
||||
./grub-mkrescue -o image.iso
|
||||
}}}
|
||||
was put onto USB stick. It passed the same tests on Debian
|
||||
as above RIPLinux example. It boots to a GRUB prompt.
|
||||
|
||||
Due to option -no-pad the image is about 250 kB smaller than
|
||||
the image produced by original grub-mkrescue. Else it would have grown by
|
||||
about 50 kB.
|
||||
|
||||
Unpadded ISO images are safe except for burning on CD in TAO mode.
|
||||
In this case problems may occur with reading the last few data blocks.
|
||||
So when burning onto CD make sure to require SAO mode and/or to
|
||||
require padding by 300 KiB.
|
||||
Burning on DVD or BD needs no such caution. Neither does copying
|
||||
on USB stick or hard disk.
|
||||
|
||||
Program fdisk will complain about "different physical/logical" addresses.
|
||||
This can be silenced by adding option
|
||||
{{{
|
||||
-partition_cyl_align on
|
||||
}}}
|
||||
at the cost of image padding up to the next full MiB.
|
||||
E.g. by 402 KiB to 2 MiB.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Open questions:
|
||||
|
||||
- Shall the partition of an isohybrid image be marked bootable ?
|
||||
Currently xorriso keeps the 0x80 mark of an eventually imported MBR
|
||||
resp. the 0x80 mark which xorriso eventually sets by its own MBR
|
||||
preparations.
|
||||
- If not to be marked bootable:
|
||||
What equipment would the partition need to justify having the mark ?
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Application:
|
||||
|
||||
The partition offset feature can be controlled by libisofs API calls
|
||||
{{{
|
||||
int iso_write_opts_set_part_offset(IsoWriteOpts *opts,
|
||||
uint32_t block_offset_2k,
|
||||
int secs_512_per_head,
|
||||
int heads_per_cyl);
|
||||
|
||||
int iso_write_opts_set_system_area(IsoWriteOpts *opts, char data[32768],
|
||||
int options, int flag);
|
||||
}}}
|
||||
resp. by libisoburn calls
|
||||
{{{
|
||||
int isoburn_igopt_set_part_offset(struct isoburn_imgen_opts *opts,
|
||||
uint32_t block_offset_2k,
|
||||
int secs_512_per_head, int heads_per_cyl);
|
||||
|
||||
int isoburn_igopt_get_part_offset(struct isoburn_imgen_opts *opts,
|
||||
uint32_t *block_offset_2k,
|
||||
int *secs_512_per_head, int *heads_per_cyl);
|
||||
|
||||
int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o,
|
||||
char data[32768], int options);
|
||||
|
||||
int isoburn_igopt_get_system_area(struct isoburn_imgen_opts *o,
|
||||
char data[32768], int *options);
|
||||
}}}
|
||||
resp. by xorriso options
|
||||
{{{
|
||||
-boot_image any partition_offset=(2kb_block_adr)
|
||||
-boot_image any partition_sec_hd=(number)
|
||||
-boot_image any partition_hd_cyl=(number)
|
||||
-boot_image any partition_cyl_align(on|auto|off)
|
||||
|
||||
-as mkisofs ... -partition_offset (2kb_block_adr) \
|
||||
-partition_hd_cyl (number) \
|
||||
-partition_sec_hd (number) \
|
||||
-partition_cyl_align (on|auto|off) ...
|
||||
}}}
|
||||
|
||||
As stated above, an offset larger than 16 would expose vital parts of the
|
||||
ISO image as unclaimed space. Values smaller than 16 are not accepted.
|
||||
So use either an offset of 16 blocks or keep the feature disabled by
|
||||
offset 0.
|
||||
|
22
doc/startup_file.txt
Normal file
22
doc/startup_file.txt
Normal file
@ -0,0 +1,22 @@
|
||||
# This is an example for a xorriso startup file.
|
||||
# If found at one of the following addresses then its text lines will get
|
||||
# executed by xorriso as commands before any of its program arguments:
|
||||
# /etc/default/xorriso
|
||||
# /etc/opt/xorriso/rc
|
||||
# /etc/xorriso/xorriso.conf
|
||||
# $HOME/.xorrisorc
|
||||
# Note: Command -no_rc as first program argument prevents this execution.
|
||||
|
||||
|
||||
# Disallow the use of hard disk /dev/sda and its partitions as
|
||||
# pseudo-drive (e.g. as output target of an ISO image).
|
||||
|
||||
-drive_class banned /dev/sda*
|
||||
|
||||
|
||||
# Allow the use of /dev/sdb, /dev/sdc, and /dev/sdd as pseudo-drives
|
||||
# without the prefix "stdio:" which is usually required for device addresses
|
||||
# which begin by "/dev/" but represent no CD drives.
|
||||
|
||||
-drive_class harmless /dev/sd[bcd]
|
||||
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
/* libburn wrappers for libisoburn
|
||||
|
||||
Copyright 2007 - 2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007 - 2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -31,17 +31,21 @@
|
||||
#include <time.h>
|
||||
#include <regex.h>
|
||||
|
||||
|
||||
#ifndef Xorriso_standalonE
|
||||
|
||||
#include <libburn/libburn.h>
|
||||
|
||||
#include <libisofs/libisofs.h>
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include <libjte/libjte.h>
|
||||
#endif
|
||||
|
||||
#else /* ! Xorriso_standalonE */
|
||||
|
||||
#include "../libisofs/libisofs.h"
|
||||
#include "../libburn/libburn.h"
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include "../libjte/libjte.h"
|
||||
#endif
|
||||
|
||||
#endif /* Xorriso_standalonE */
|
||||
|
||||
@ -69,10 +73,10 @@ static int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
||||
|
||||
int isoburn_initialize(char msg[1024], int flag)
|
||||
{
|
||||
int major, minor, micro, bad_match= 0;
|
||||
int major, minor, micro, bad_match= 0, no_iso_init= 0;
|
||||
|
||||
|
||||
/* First two ugly compile time checks for header version compatibility.
|
||||
/* First the ugly compile time checks for header version compatibility.
|
||||
If everthing matches, then they produce no C code. In case of mismatch,
|
||||
intentionally faulty C code will be inserted.
|
||||
*/
|
||||
@ -108,7 +112,7 @@ int isoburn_initialize(char msg[1024], int flag)
|
||||
|
||||
#ifdef Isoburn_libisofs_dot_h_too_olD
|
||||
LIBISOFS_MISCONFIGURATION = 0;
|
||||
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h = 0;
|
||||
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_c = 0;
|
||||
LIBISOFS_MISCONFIGURATION_ = 0;
|
||||
#endif
|
||||
|
||||
@ -149,14 +153,62 @@ INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libburn_dot_h_TOO_OLD__SEE_libisobu
|
||||
LIBBURN_MISCONFIGURATION_ = 0;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
|
||||
/* The minimum requirement of libisoburn towards the libjte header
|
||||
at compile time is the same as the one of a usable libisfs itowards libjte.
|
||||
So the requirement is defined in libisofs/libisofs.h :
|
||||
iso_libjte_req_major , iso_libjte_req_minor , iso_libjte_req_micro
|
||||
*/
|
||||
/* The indendation is an advise of man gcc to help old compilers ignoring */
|
||||
#if iso_libjte_req_major > LIBJTE_VERSION_MAJOR
|
||||
#define Libisofs_libjte_dot_h_too_olD 1
|
||||
#endif
|
||||
#if iso_libjte_req_major == LIBJTE_VERSION_MAJOR && iso_libjte_req_minor > LIBJTE_VERSION_MINOR
|
||||
#define Libisofs_libjte_dot_h_too_olD 1
|
||||
#endif
|
||||
#if iso_libjte_req_minor == LIBJTE_VERSION_MINOR && iso_libjte_req_micro > LIBJTE_VERSION_MICRO
|
||||
#define Libisofs_libjte_dot_h_too_olD 1
|
||||
#endif
|
||||
|
||||
#ifdef Libisofs_libjte_dot_h_too_olD
|
||||
LIBJTE_MISCONFIGURATION = 0;
|
||||
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libjte_dot_h_TOO_OLD__SEE_libisofs_dot_h_AND_burn_wrap.c_c = 0;
|
||||
LIBJTE_MISCONFIGURATION_ = 0;
|
||||
#endif
|
||||
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
|
||||
/* End of ugly compile time tests (scroll up for explanation) */
|
||||
|
||||
|
||||
|
||||
msg[0]= 0;
|
||||
if(iso_init()<0) {
|
||||
sprintf(msg+strlen(msg), "Cannot initialize libisofs\n");
|
||||
return(0);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
|
||||
libjte__version(&major, &minor, µ);
|
||||
sprintf(msg + strlen(msg), "libjte-%d.%d.%d ", major, minor, micro);
|
||||
if (libjte__is_compatible(LIBJTE_VERSION_MAJOR, LIBJTE_VERSION_MINOR,
|
||||
LIBJTE_VERSION_MICRO, 0)) {
|
||||
sprintf(msg+strlen(msg), "ok, ");
|
||||
} else {
|
||||
sprintf(msg + strlen(msg),
|
||||
"- TOO OLD -, need at least libjte-%d.%d.%d ,\n",
|
||||
LIBJTE_VERSION_MAJOR, LIBJTE_VERSION_MINOR,
|
||||
LIBJTE_VERSION_MICRO);
|
||||
bad_match= 1;
|
||||
no_iso_init= 1; /* iso_init() will fail anyway */
|
||||
}
|
||||
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
if(!no_iso_init) {
|
||||
if(iso_init()<0) {
|
||||
sprintf(msg+strlen(msg), "Cannot initialize libisofs\n");
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
iso_lib_version(&major, &minor, µ);
|
||||
sprintf(msg+strlen(msg), "libisofs-%d.%d.%d ", major, minor, micro);
|
||||
@ -188,6 +240,7 @@ LIBBURN_MISCONFIGURATION_ = 0;
|
||||
sprintf(msg+strlen(msg), "Cannot initialize libburn\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
burn_version(&major, &minor, µ);
|
||||
sprintf(msg+strlen(msg), "libburn-%d.%d.%d ", major, minor, micro);
|
||||
if(major > burn_header_version_major
|
||||
@ -233,6 +286,20 @@ int isoburn_libburn_req(int *major, int *minor, int *micro)
|
||||
}
|
||||
|
||||
|
||||
/* API @since 0.6.4 */
|
||||
int isoburn_libjte_req(int *major, int *minor, int *micro)
|
||||
{
|
||||
#ifdef Xorriso_with_libjtE
|
||||
*major= LIBJTE_VERSION_MAJOR;
|
||||
*minor= LIBJTE_VERSION_MINOR;
|
||||
*micro= LIBJTE_VERSION_MICRO;
|
||||
#else
|
||||
*major= *minor= *micro= 0;
|
||||
#endif /* ! Xorriso_with_libjtE */
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
|
||||
char msg_text[], int os_errno,
|
||||
char severity[], int flag),
|
||||
@ -277,7 +344,8 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
|
||||
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||
int flag)
|
||||
{
|
||||
int ret, lba, nwa, profile, readonly= 0;
|
||||
int ret, lba, nwa, profile, readonly= 0, role, random_access;
|
||||
int emulation_started= 0;
|
||||
struct burn_multi_caps *caps= NULL;
|
||||
struct isoburn_toc_entry *t;
|
||||
char profile_name[80];
|
||||
@ -316,16 +384,18 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||
(*o)->fabricated_disc_status= BURN_DISC_APPENDABLE;
|
||||
#endif
|
||||
|
||||
if(caps->start_adr)
|
||||
role= burn_drive_get_drive_role(d);
|
||||
random_access= caps->start_adr || role == 4;
|
||||
if(random_access)
|
||||
(*o)->emulation_mode= 1;
|
||||
if(caps->start_adr && !readonly) { /* set emulation to overwriteable */
|
||||
if(random_access && !readonly) { /* set emulation to overwriteable */
|
||||
ret= isoburn_is_intermediate_dvd_rw(d, 0);
|
||||
if(ret>0) {
|
||||
(*o)->min_start_byte= 0;
|
||||
(*o)->nwa= 0;
|
||||
(*o)->zero_nwa= 0;
|
||||
}
|
||||
if(flag&1) {
|
||||
if((flag & 1) && role != 4 && role != 5) {
|
||||
(*o)->nwa= (*o)->zero_nwa;
|
||||
(*o)->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
} else {
|
||||
@ -334,6 +404,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||
(*o)->emulation_mode= -1;
|
||||
goto ex;
|
||||
}
|
||||
emulation_started= 1;
|
||||
/* try to read emulated toc */
|
||||
ret= isoburn_emulate_toc(d, flag & 16);
|
||||
if(ret<0) {
|
||||
@ -374,6 +445,12 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||
if((flag & 16) || track_count >= 2) {
|
||||
ret= 0; /* toc emulation off, or not overwriteable */
|
||||
} else {
|
||||
ret= isoburn_start_emulation(*o, 1);
|
||||
if(ret<=0) {
|
||||
(*o)->emulation_mode= -1;
|
||||
goto ex;
|
||||
}
|
||||
emulation_started= 1;
|
||||
ret= isoburn_emulate_toc(d, 1);
|
||||
if(ret<0)
|
||||
goto ex;
|
||||
@ -386,6 +463,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||
CD-R TOC (profile 0x08) can be trusted. Others not.
|
||||
Do a scan search of ISO headers.
|
||||
*/
|
||||
if(!emulation_started) {
|
||||
ret= isoburn_start_emulation(*o, 1);
|
||||
if(ret<=0) {
|
||||
(*o)->emulation_mode= -1;
|
||||
goto ex;
|
||||
}
|
||||
}
|
||||
ret= isoburn_emulate_toc(d, 1|2);
|
||||
if(ret<0)
|
||||
goto ex;
|
||||
@ -569,7 +653,7 @@ int isoburn_disc_erasable(struct burn_drive *d)
|
||||
|
||||
void isoburn_disc_erase(struct burn_drive *drive, int fast)
|
||||
{
|
||||
int ret, do_pseudo_blank= 0;
|
||||
int ret, do_pseudo_blank= 0, role;
|
||||
struct isoburn *o;
|
||||
enum burn_disc_status s;
|
||||
char zero_buffer[Libisoburn_target_head_sizE];
|
||||
@ -582,7 +666,15 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast)
|
||||
burn_drive_cancel(drive);
|
||||
goto ex;
|
||||
}
|
||||
|
||||
role = burn_drive_get_drive_role(drive);
|
||||
if (role == 5) {
|
||||
/* libburn will truncate the random-access write-only file
|
||||
to zero size and change its state */
|
||||
burn_disc_erase(drive, fast);
|
||||
o->fabricated_disc_status= burn_disc_get_status(drive);
|
||||
o->nwa= 0;
|
||||
goto ex;
|
||||
}
|
||||
if(o->emulation_mode > 0) { /* might be readonly with emulated sessions */
|
||||
ret= burn_disc_get_multi_caps(drive, BURN_WRITE_NONE, &caps, 0);
|
||||
if(ret > 0 && caps->start_adr)
|
||||
@ -714,6 +806,29 @@ int isoburn_get_msc2(struct isoburn *o,
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* @param flag bit0= truncate (else do not truncate)
|
||||
bit1= do not warn if call is inappropriate to drive
|
||||
bit2= only set if truncation is currently enabled
|
||||
*/
|
||||
int isoburn_set_truncate(struct burn_drive *drive, int flag)
|
||||
{
|
||||
int ret;
|
||||
struct isoburn *o;
|
||||
|
||||
ret= isoburn_find_emulator(&o, drive, 0);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
if(o == NULL) {
|
||||
if(!(flag & (2 | 4)))
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Drive type or role is inappropriate for truncation", 0, "WARNING", 0);
|
||||
return(0);
|
||||
}
|
||||
if(o->truncate || !(flag & 4))
|
||||
o->truncate= flag & 1;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
{
|
||||
@ -762,7 +877,6 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
return;
|
||||
}
|
||||
/* end of DVD-RW oriented check */
|
||||
|
||||
burn_write_opts_set_start_byte(opts, nwa * (off_t) 2048);
|
||||
}
|
||||
}
|
||||
@ -794,7 +908,7 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
|
||||
if(o->truncate) {
|
||||
ret= burn_drive_get_drive_role(drive);
|
||||
if(ret==2) {
|
||||
if(ret == 2 || ret == 5) {
|
||||
ret= burn_drive_d_get_adr(drive, adr);
|
||||
if(ret>0) {
|
||||
ret= lstat(adr, &stbuf);
|
||||
@ -1076,21 +1190,28 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||
unsigned char buffer[64*1024];
|
||||
int ret, info_mode, capacity, role;
|
||||
off_t data_count, to_read;
|
||||
enum burn_disc_status s;
|
||||
|
||||
info_mode= flag&255;
|
||||
*image_blocks= 0;
|
||||
if(flag&(1<<13)) {
|
||||
memcpy(buffer, info, 64*1024);
|
||||
} else {
|
||||
memset(buffer, 0, 64 * 1024);
|
||||
s= isoburn_disc_get_status(d);
|
||||
role = burn_drive_get_drive_role(d);
|
||||
if (role == 3 || role == 5)
|
||||
|
||||
/* >>> ??? return always 0 ? */
|
||||
return(-1*!!(flag&(1<<15)));
|
||||
|
||||
ret = burn_get_read_capacity(d, &capacity, 0);
|
||||
if (ret <= 0 && role == 2) {
|
||||
if (ret <= 0 && (role == 2 || role == 4)) {
|
||||
/* Might be a block device on a system where libburn cannot determine its
|
||||
size. Try to read anyway. */
|
||||
capacity = 0x7ffffff0;
|
||||
ret = 1;
|
||||
}
|
||||
memset(buffer, 0, 64 * 1024);
|
||||
to_read= (off_t) capacity * ((off_t) 2048);
|
||||
if(ret > 0 && to_read >= (off_t) (36 * 1024)) {
|
||||
if(to_read >= (off_t) (64 * 1024))
|
||||
@ -1176,15 +1297,16 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||
|
||||
ret= burn_get_read_capacity(d, &readable_blocks, 0);
|
||||
if(ret <= 0) {
|
||||
|
||||
role = burn_drive_get_drive_role(d);
|
||||
if (role == 2)
|
||||
if (role == 2 || role == 4)
|
||||
/* Might be a block device on a system where libburn cannot determine its
|
||||
size. Try to read anyway. */
|
||||
readable_blocks= 0x7ffffff0; /* try to read anyway */
|
||||
else
|
||||
readable_blocks= -1;
|
||||
}
|
||||
if(o->fabricated_disc_status == BURN_DISC_BLANK)
|
||||
{ret= 0; goto failure;}
|
||||
|
||||
start_time= last_pacifier= time(NULL);
|
||||
lba= 0;
|
||||
@ -1657,6 +1779,7 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||
static int max_mode_names= 4;
|
||||
regex_t re;
|
||||
regmatch_t match[1];
|
||||
enum burn_disc_status s;
|
||||
|
||||
ret= isoburn_find_emulator(&o, d, 0);
|
||||
if(ret<0)
|
||||
@ -1717,6 +1840,14 @@ not_found:;
|
||||
|
||||
} else if(adr_mode==3) {
|
||||
o->fabricated_msc1= adr_num;
|
||||
s= isoburn_disc_get_status(d);
|
||||
if(o->fabricated_msc1 > 0 && s != BURN_DISC_FULL
|
||||
&& s != BURN_DISC_APPENDABLE) {
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Non-zero load offset given with blank input media",
|
||||
0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if((flag & 1) && o->fabricated_msc1 >= 16) {
|
||||
/* adr_num is possibly 16 blocks too high */
|
||||
ret= isoburn_read_iso_head(d, o->fabricated_msc1, &size,volid, 1|(1<<14));
|
||||
|
@ -64,6 +64,20 @@ struct isoburn_cached_drive {
|
||||
struct burn_drive *drive;
|
||||
struct isoburn_cache_tile tiles[Libisoburn_cache_tileS];
|
||||
int current_age;
|
||||
|
||||
/**
|
||||
Offset to be applied to all block addresses to compensate for an
|
||||
eventual displacement of the block addresses relative to the image
|
||||
start block address that was assumed when the image was created.
|
||||
E.g. if track number 2 gets copied into a disk file and shall then
|
||||
be loaded as ISO filesystem.
|
||||
If displacement_sign is 1 then the displacement number will be
|
||||
added to .read_block() addresses, if -1 it will be subtracted.
|
||||
Else it will be ignored.
|
||||
*/
|
||||
uint32_t displacement;
|
||||
int displacement_sign;
|
||||
|
||||
};
|
||||
|
||||
#define Libisoburn_max_agE 2000000000
|
||||
@ -105,6 +119,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
|
||||
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||
|
||||
if(icd->displacement_sign == 1) {
|
||||
if(lba + icd->displacement < lba) {
|
||||
address_rollover:;
|
||||
return ISO_DISPLACE_ROLLOVER;
|
||||
} else
|
||||
lba += icd->displacement;
|
||||
} else if(icd->displacement_sign == -1) {
|
||||
if(lba < icd->displacement )
|
||||
goto address_rollover;
|
||||
else
|
||||
lba -= icd->displacement;
|
||||
}
|
||||
|
||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
||||
|
||||
for(i=0; i<Libisoburn_cache_tileS; i++) {
|
||||
@ -151,30 +178,10 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
if (ret > 0)
|
||||
return 1;
|
||||
tiles[oldest].last_error_lba = lba;
|
||||
|
||||
#ifdef ISO_DATA_SOURCE_MISHAP
|
||||
ret= ISO_DATA_SOURCE_MISHAP;
|
||||
#else
|
||||
/* <<< pre libisofs-0.6.7 */
|
||||
/* It is not required by the specs of libisofs but implicitely assumed
|
||||
...
|
||||
But it is not possible to ignore FAILURE.
|
||||
libisofs insists in original error codes, i.e. libisoburn cannot
|
||||
change severity FAILURE associated with ISO_FILE_READ_ERROR.
|
||||
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
|
||||
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
|
||||
and not for image reading.
|
||||
This is quite wrong, although the error message text is unclear
|
||||
enough to make it appear plausible.
|
||||
*/
|
||||
ret= ISO_FILE_CANT_WRITE;
|
||||
#endif
|
||||
|
||||
if(ret >= 0)
|
||||
ret = -1;
|
||||
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||
sprintf(msg, "ds_read_block(%lu) returns %lX",
|
||||
(unsigned long) lba, (unsigned long) ret);
|
||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
return ret;
|
||||
return ISO_DATA_SOURCE_MISHAP;
|
||||
}
|
||||
|
||||
#ifdef Libisoburn_read_cache_reporT
|
||||
@ -226,7 +233,8 @@ int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
|
||||
}
|
||||
|
||||
|
||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d,
|
||||
uint32_t displacement, int displacement_sign)
|
||||
{
|
||||
IsoDataSource *ret;
|
||||
struct isoburn_cached_drive *icd= NULL;
|
||||
@ -238,6 +246,7 @@ IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||
icd = calloc(1,sizeof(struct isoburn_cached_drive));
|
||||
if (ret == NULL || icd == NULL)
|
||||
return NULL;
|
||||
ret->version = 0;
|
||||
ret->refcount = 1;
|
||||
ret->read_block = ds_read_block;
|
||||
ret->open = ds_open;
|
||||
@ -253,6 +262,8 @@ IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||
icd->tiles[i].last_aligned_error_lba = 0xffffffff;
|
||||
icd->tiles[i].age= 0;
|
||||
}
|
||||
icd->displacement = displacement;
|
||||
icd->displacement_sign = displacement_sign;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -437,6 +437,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
0, "FAILURE", 0);
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
if (state != BURN_DISC_BLANK && opts->libjte_handle != NULL) {
|
||||
isoburn_msgs_submit(out_o, 0x00060000,
|
||||
"Jigdo Template Extraction works only on blank target media",
|
||||
0, "FAILURE", 0);
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
|
||||
fifo_chunks= 32;
|
||||
if(opts->fifo_size >= 64*1024 && opts->fifo_size <= 1024.0 * 1024.0 * 1024.0){
|
||||
@ -450,6 +456,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
isoburn_report_iso_error(ret, "Cannot create iso_write_opts", 0, "FATAL",0);
|
||||
goto ex;
|
||||
}
|
||||
iso_write_opts_set_will_cancel(wopts, opts->will_cancel);
|
||||
iso_write_opts_set_iso_level(wopts, opts->level);
|
||||
iso_write_opts_set_rockridge(wopts, opts->rockridge);
|
||||
iso_write_opts_set_joliet(wopts, opts->joliet);
|
||||
@ -458,6 +465,9 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
if(opts->hardlinks)
|
||||
iso_write_opts_set_rrip_1_10_px_ino(wopts, 1);
|
||||
iso_write_opts_set_aaip(wopts, opts->aaip);
|
||||
iso_write_opts_set_old_empty(wopts, !!opts->old_empty);
|
||||
iso_write_opts_set_untranslated_name_len(wopts, opts->untranslated_name_len);
|
||||
iso_write_opts_set_allow_dir_id_ext(wopts, opts->allow_dir_id_ext);
|
||||
iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers);
|
||||
iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths);
|
||||
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
|
||||
@ -467,6 +477,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
|
||||
iso_write_opts_set_relaxed_vol_atts(wopts, 1);
|
||||
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
|
||||
iso_write_opts_set_joliet_long_names(wopts, opts->joliet_long_names);
|
||||
iso_write_opts_set_always_gmt(wopts, opts->always_gmt);
|
||||
iso_write_opts_set_rrip_version_1_10(wopts, opts->rrip_version_1_10);
|
||||
iso_write_opts_set_dir_rec_mtime(wopts, opts->dir_rec_mtime);
|
||||
@ -496,11 +507,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
opts->vol_creation_time, opts->vol_modification_time,
|
||||
opts->vol_expiration_time, opts->vol_effective_time,
|
||||
opts->vol_uuid);
|
||||
iso_write_opts_attach_jte(wopts, opts->libjte_handle);
|
||||
|
||||
ret= isoburn_adjust_target_iso_head(out_o, opts->partition_offset, 0);
|
||||
if(ret <= 0)
|
||||
{ret= -1; goto ex;}
|
||||
if(opts->no_emul_toc) {
|
||||
if(opts->no_emul_toc || opts->libjte_handle != NULL) {
|
||||
if(out_o->nwa == out_o->zero_nwa &&
|
||||
out_o->zero_nwa == Libisoburn_overwriteable_starT
|
||||
+ opts->partition_offset
|
||||
@ -525,6 +537,20 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
iso_write_opts_set_part_offset(wopts, opts->partition_offset,
|
||||
opts->partition_secs_per_head,
|
||||
opts->partition_heads_per_cyl);
|
||||
iso_write_opts_set_tail_blocks(wopts, opts->tail_blocks);
|
||||
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
|
||||
if(opts->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
ret= iso_write_opts_set_partition_img(wopts, i + 1,
|
||||
opts->appended_part_types[i],
|
||||
opts->appended_partitions[i], 0);
|
||||
if(ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot set path for appended partition",
|
||||
0, "FAILURE", 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
}
|
||||
iso_write_opts_set_disc_label(wopts, opts->ascii_disc_label);
|
||||
|
||||
ret = iso_image_create_burn_source(in_o->image, wopts, &wsrc);
|
||||
if (ret < 0) {
|
||||
@ -739,6 +765,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
||||
o->hasElTorito= 0;
|
||||
o->size= 0;
|
||||
o->pretend_blank= 1;
|
||||
o->displacement= 0;
|
||||
o->displacement_sign= 0;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -764,7 +792,7 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
|
||||
o->noacl= !!(ext & 64);
|
||||
o->noea= !!(ext & 128);
|
||||
o->noino= !!(ext & 256);
|
||||
o->nomd5= !!(ext & 512);
|
||||
o->nomd5= (ext >> 9) & 3;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -774,7 +802,7 @@ int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
|
||||
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
|
||||
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4) |
|
||||
((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7) |
|
||||
((!!o->noino) << 8) | ((!!o->nomd5) << 9);
|
||||
((!!o->noino) << 8) | ((o->nomd5 & 3) << 9);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -855,6 +883,24 @@ int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode)
|
||||
}
|
||||
|
||||
|
||||
int isoburn_ropt_set_displacement(struct isoburn_read_opts *o,
|
||||
uint32_t displacement, int displacement_sign)
|
||||
{
|
||||
o->displacement= displacement;
|
||||
o->displacement_sign= displacement_sign;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_ropt_get_displacement(struct isoburn_read_opts *o,
|
||||
uint32_t *displacement, int *displacement_sign)
|
||||
{
|
||||
*displacement= o->displacement;
|
||||
*displacement_sign= o->displacement_sign;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||
uint32_t *size, int *has_what)
|
||||
{
|
||||
@ -875,6 +921,7 @@ int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||
int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
{
|
||||
struct isoburn_imgen_opts *o;
|
||||
int i;
|
||||
|
||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
||||
if(o==NULL) {
|
||||
@ -889,6 +936,12 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
o->iso1999= 0;
|
||||
o->hardlinks= 0;
|
||||
o->aaip = 0;
|
||||
o->session_md5= 0;
|
||||
o->file_md5= 0;
|
||||
o->no_emul_toc= 0;
|
||||
o->old_empty= 0;
|
||||
o->untranslated_name_len = 0;
|
||||
o->allow_dir_id_ext = 0;
|
||||
o->omit_version_numbers= 0;
|
||||
o->allow_deep_paths= 1;
|
||||
o->allow_longer_paths= 0;
|
||||
@ -897,6 +950,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
o->allow_lowercase= 0;
|
||||
o->allow_full_ascii= 0;
|
||||
o->joliet_longer_paths= 0;
|
||||
o->joliet_long_names= 0;
|
||||
o->always_gmt= 0;
|
||||
o->rrip_version_1_10= 0;
|
||||
o->dir_rec_mtime= 0;
|
||||
@ -923,14 +977,25 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
o->vol_modification_time= 0;
|
||||
o->vol_expiration_time= 0;
|
||||
o->vol_effective_time= 0;
|
||||
o->libjte_handle= NULL;
|
||||
o->tail_blocks= 0;
|
||||
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
|
||||
o->appended_partitions[i]= NULL;
|
||||
o->appended_part_types[i]= 0;
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag)
|
||||
{
|
||||
int i;
|
||||
|
||||
if(*o==NULL)
|
||||
return(0);
|
||||
for(i= 0; i < Libisoburn_max_appended_partitionS; i++)
|
||||
if((*o)->appended_partitions[i] != NULL)
|
||||
free((*o)->appended_partitions[i]);
|
||||
free(*o);
|
||||
*o= NULL;
|
||||
return(1);
|
||||
@ -961,6 +1026,8 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
|
||||
o->session_md5= !!(ext & 64);
|
||||
o->file_md5= (ext & (128 | 256)) >> 7;
|
||||
o->no_emul_toc= !!(ext & 512);
|
||||
o->will_cancel= !!(ext & 1024);
|
||||
o->old_empty= !!(ext & 2048);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -970,7 +1037,8 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext)
|
||||
*ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2) |
|
||||
((!!o->hardlinks) << 3) | ((!!o->aaip) << 5) |
|
||||
((!!o->session_md5) << 6) | ((o->file_md5 & 3) << 7) |
|
||||
((!!o->no_emul_toc) << 9);
|
||||
((!!o->no_emul_toc) << 9) | ((o->will_cancel) << 10) |
|
||||
((!!o->old_empty) << 11);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -991,6 +1059,8 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
|
||||
o->rrip_version_1_10= !!(relax & isoburn_igopt_rrip_version_1_10);
|
||||
o->dir_rec_mtime= !!(relax & isoburn_igopt_dir_rec_mtime);
|
||||
o->aaip_susp_1_10= !!(relax & isoburn_igopt_aaip_susp_1_10);
|
||||
o->allow_dir_id_ext= !!(relax & isoburn_igopt_allow_dir_id_ext);
|
||||
o->joliet_long_names= !!(relax & isoburn_igopt_joliet_long_names);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -999,10 +1069,50 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
|
||||
{
|
||||
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
|
||||
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
|
||||
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
|
||||
((!!(o->no_force_dots & 1))<<4)| ((!!o->allow_lowercase)<<5) |
|
||||
((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7) |
|
||||
((!!o->always_gmt)<<8) | ((!!o->rrip_version_1_10)<<9) |
|
||||
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11);
|
||||
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11) |
|
||||
((!!(o->omit_version_numbers & 2))<<12) |
|
||||
((!!(o->no_force_dots & 2))<<13) |
|
||||
((!!o->allow_dir_id_ext) << 14) |
|
||||
((!!o->joliet_long_names) << 15);
|
||||
return(1);
|
||||
}
|
||||
|
||||
int isoburn_igopt_set_untranslated_name_len(struct isoburn_imgen_opts *o,
|
||||
int len)
|
||||
{
|
||||
int ret;
|
||||
IsoWriteOpts *opts = NULL;
|
||||
char msg[160];
|
||||
|
||||
ret= iso_write_opts_new(&opts, 0);
|
||||
if(ret < 0) {
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Cannot create libisofs write options object", 0, "FATAL", 0);
|
||||
return(0);
|
||||
}
|
||||
ret= iso_write_opts_set_untranslated_name_len(opts, len);
|
||||
if(ret < 0) {
|
||||
ret= iso_write_opts_set_untranslated_name_len(opts, -1);
|
||||
sprintf(msg,
|
||||
"Improper value for maximum length of untranslated names (%d <-> -1 ... %d)",
|
||||
len, ret);
|
||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
iso_write_opts_free(opts);
|
||||
return(0);
|
||||
}
|
||||
o->untranslated_name_len= ret; /* Normalized len value */
|
||||
iso_write_opts_free(opts);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_untranslated_name_len(struct isoburn_imgen_opts *o,
|
||||
int *len)
|
||||
{
|
||||
*len = o->untranslated_name_len;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -1154,7 +1264,7 @@ int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *opts,
|
||||
}
|
||||
memcpy(opts->system_area_data, data, 32768);
|
||||
}
|
||||
opts->system_area_options = options & 3;
|
||||
opts->system_area_options = options & 0x3ff;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -1222,3 +1332,96 @@ int isoburn_igopt_get_part_offset(struct isoburn_imgen_opts *opts,
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_attach_jte(struct isoburn_imgen_opts *opts,
|
||||
void *libjte_handle)
|
||||
{
|
||||
opts->libjte_handle = libjte_handle;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_detach_jte(struct isoburn_imgen_opts *opts,
|
||||
void **libjte_handle)
|
||||
{
|
||||
if(libjte_handle != NULL)
|
||||
*libjte_handle = opts->libjte_handle;
|
||||
opts->libjte_handle = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_set_tail_blocks(struct isoburn_imgen_opts *opts,
|
||||
uint32_t num_blocks)
|
||||
{
|
||||
opts->tail_blocks = num_blocks;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int isoburn_igopt_get_tail_blocks(struct isoburn_imgen_opts *opts,
|
||||
uint32_t *num_blocks)
|
||||
{
|
||||
*num_blocks = opts->tail_blocks;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_set_partition_img(struct isoburn_imgen_opts *opts,
|
||||
int partition_number, uint8_t partition_type,
|
||||
char *image_path)
|
||||
{
|
||||
char msg[80];
|
||||
|
||||
if (partition_number < 1 ||
|
||||
partition_number > Libisoburn_max_appended_partitionS) {
|
||||
sprintf(msg, "Partition number is out of range (1 ... %d)",
|
||||
Libisoburn_max_appended_partitionS);
|
||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
if (opts->appended_partitions[partition_number - 1] != NULL)
|
||||
free(opts->appended_partitions[partition_number - 1]);
|
||||
opts->appended_partitions[partition_number - 1] = strdup(image_path);
|
||||
if (opts->appended_partitions[partition_number - 1] == NULL)
|
||||
return(-1);
|
||||
opts->appended_part_types[partition_number - 1] = partition_type;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_partition_img(struct isoburn_imgen_opts *opts,
|
||||
int num_entries,
|
||||
uint8_t partition_types[],
|
||||
char *image_paths[])
|
||||
{
|
||||
int i, max_entry= 0;
|
||||
|
||||
for(i= 0; i < num_entries; i++)
|
||||
image_paths[i]= NULL;
|
||||
for(i= 0; i < Libisoburn_max_appended_partitionS; i++) {
|
||||
if(opts->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
if(i < num_entries) {
|
||||
image_paths[i]= opts->appended_partitions[i];
|
||||
partition_types[i]= opts->appended_part_types[i];
|
||||
}
|
||||
max_entry= i + 1;
|
||||
}
|
||||
return(max_entry);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_set_disc_label(struct isoburn_imgen_opts *opts, char *label)
|
||||
{
|
||||
strncpy(opts->ascii_disc_label, label, Libisoburn_disc_label_sizE - 1);
|
||||
opts->ascii_disc_label[Libisoburn_disc_label_sizE - 1] = 0;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_disc_label(struct isoburn_imgen_opts *opts, char **label)
|
||||
{
|
||||
*label= opts->ascii_disc_label;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
Class struct of libisoburn.
|
||||
|
||||
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Copyright 2007 - 2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
@ -12,7 +12,13 @@
|
||||
|
||||
|
||||
/* for uint8_t */
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* For emulated TOC of overwriteable media.
|
||||
Provides minimal info for faking a struct burn_toc_entry.
|
||||
@ -45,6 +51,17 @@ int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
|
||||
#define Libisoburn_target_head_sizE (32*2048)
|
||||
|
||||
|
||||
/* Maximum number of appended partitions. Effectively usable number depends
|
||||
on system area type.
|
||||
*/
|
||||
#define Libisoburn_max_appended_partitionS 8
|
||||
|
||||
/*
|
||||
Maximum length of a disc label text plus 1.
|
||||
*/
|
||||
#define Libisoburn_disc_label_sizE 129
|
||||
|
||||
|
||||
struct isoburn {
|
||||
|
||||
|
||||
@ -231,12 +248,15 @@ int isoburn_get_msc2(struct isoburn *o,
|
||||
/** Get a data source suitable for read from a drive using burn_read_data()
|
||||
function.
|
||||
@param d drive to read from. Must be grabbed.
|
||||
@param displacement will be added or subtracted to any block address
|
||||
@param displacement_sign +1 = add , -1= subtract , else keep unaltered
|
||||
@return the data source, NULL on error. Must be freed with libisofs
|
||||
iso_data_source_unref() function. Note: this doesn't release
|
||||
the drive.
|
||||
*/
|
||||
IsoDataSource *
|
||||
isoburn_data_source_new(struct burn_drive *d);
|
||||
isoburn_data_source_new(struct burn_drive *d,
|
||||
uint32_t displacement, int displacement_sign);
|
||||
|
||||
/** Disable read capabilities of a data source which was originally created
|
||||
by isoburn_data_source_new(). After this any attempt to read will yield
|
||||
@ -278,7 +298,7 @@ struct isoburn_read_opts {
|
||||
unsigned int noino:1; /* Discard eventual PX inode numbers */
|
||||
|
||||
/* ts A90810 */
|
||||
unsigned int nomd5:1; /* Do not read eventual MD5 array */
|
||||
unsigned int nomd5:2; /* Do not read eventual MD5 array */
|
||||
|
||||
unsigned int preferjoliet:1;
|
||||
/*< When both Joliet and RR extensions are present, the RR
|
||||
@ -321,6 +341,9 @@ struct isoburn_read_opts {
|
||||
uint32_t size; /**< Will be filled with the size (in 2048 byte block) of
|
||||
* the image, as reported in the PVM. */
|
||||
unsigned int pretend_blank:1; /* always create empty image */
|
||||
|
||||
uint32_t displacement;
|
||||
int displacement_sign;
|
||||
};
|
||||
|
||||
|
||||
@ -334,6 +357,8 @@ struct isoburn_imgen_opts {
|
||||
|
||||
/* Options for image generation */
|
||||
|
||||
int will_cancel :1;
|
||||
|
||||
int level; /**< ISO level to write at. */
|
||||
|
||||
/** Which extensions to support. */
|
||||
@ -351,7 +376,7 @@ struct isoburn_imgen_opts {
|
||||
unsigned int session_md5 :1;
|
||||
|
||||
/* Produce and write MD5 checksums for each single IsoFile.
|
||||
See parameter files of iso_write_opts_set_record_md5().
|
||||
See parameter "files" of iso_write_opts_set_record_md5().
|
||||
*/
|
||||
unsigned int file_md5 :2;
|
||||
|
||||
@ -360,6 +385,13 @@ struct isoburn_imgen_opts {
|
||||
*/
|
||||
unsigned int no_emul_toc :1;
|
||||
|
||||
/* For empty files, symbolic links, and devices use the old ECMA-119 block
|
||||
addresses in the range [0,31] rather than the address of the dedicated
|
||||
empty block.
|
||||
*/
|
||||
unsigned int old_empty :1;
|
||||
|
||||
|
||||
/* relaxed constraints */
|
||||
|
||||
/*
|
||||
@ -367,6 +399,24 @@ struct isoburn_imgen_opts {
|
||||
* but it is supposed to work on most moderns systems. Use with caution.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Extra Caution: This option breaks any assumptions about names that
|
||||
* are supported by ECMA-119 specifications.
|
||||
* Omit any translation which would make a file name compliant to the
|
||||
* ECMA-119 rules. This includes and exceeds omit_version_numbers,
|
||||
* max_37_char_filenames, no_force_dots bit0, allow_lowercase.
|
||||
*/
|
||||
unsigned int untranslated_name_len;
|
||||
|
||||
/*
|
||||
* Convert directory names for ECMA-119 similar to other file names, but do
|
||||
* not force a dot or add a version number.
|
||||
* This violates ECMA-119 by allowing one "." and especially ISO level 1
|
||||
* by allowing DOS style 8.3 names rather than only 8 characters.
|
||||
* (mkisofs and its clones seem to do this violation.)
|
||||
*/
|
||||
unsigned int allow_dir_id_ext :1;
|
||||
|
||||
/**
|
||||
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
|
||||
* Version numbers are usually not used.
|
||||
@ -419,6 +469,12 @@ struct isoburn_imgen_opts {
|
||||
*/
|
||||
unsigned int joliet_longer_paths :1;
|
||||
|
||||
/**
|
||||
* Allow leaf names in the Joliet tree to have up to 103 characters
|
||||
* rather than 64.
|
||||
*/
|
||||
unsigned int joliet_long_names :1;
|
||||
|
||||
/**
|
||||
* Store timestamps as GMT rather than in local time.
|
||||
*/
|
||||
@ -545,6 +601,23 @@ struct isoburn_imgen_opts {
|
||||
/* 1 to 255, 0= disabled/default */
|
||||
int partition_heads_per_cyl;
|
||||
|
||||
/* Parameters and state of Jigdo Template Export environment.
|
||||
*/
|
||||
void *libjte_handle;
|
||||
|
||||
/* A trailing padding of zero bytes which belongs to the image
|
||||
*/
|
||||
uint32_t tail_blocks;
|
||||
|
||||
/* Eventual disk file paths of prepared images which shall be appended
|
||||
after the ISO image and described by partiton table entries in a MBR.
|
||||
*/
|
||||
char *appended_partitions[Libisoburn_max_appended_partitionS];
|
||||
uint8_t appended_part_types[Libisoburn_max_appended_partitionS];
|
||||
|
||||
/* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label.
|
||||
*/
|
||||
char ascii_disc_label[Libisoburn_disc_label_sizE];
|
||||
};
|
||||
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
/*
|
||||
libisofs related functions of libisoburn.
|
||||
|
||||
Copyright 2007 - 2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Copyright 2007 - 2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
@ -158,6 +158,8 @@ create_blank_image:;
|
||||
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
iso_image_set_ignore_aclea(*image,
|
||||
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
|
||||
} else {
|
||||
/* Blank new image for the drive */
|
||||
iso_image_unref(o->image);
|
||||
@ -166,13 +168,13 @@ create_blank_image:;
|
||||
isoburn_report_iso_error(ret, "Cannot create image", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
if (image) {
|
||||
if (image != NULL) {
|
||||
*image = o->image;
|
||||
iso_image_ref(*image); /*protects object from premature free*/
|
||||
}
|
||||
}
|
||||
iso_image_set_ignore_aclea(*image,
|
||||
iso_image_set_ignore_aclea(o->image,
|
||||
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -196,18 +198,43 @@ create_blank_image:;
|
||||
goto create_blank_image;
|
||||
}
|
||||
|
||||
if(read_opts->displacement != 0 && abs(read_opts->displacement_sign) == 1) {
|
||||
/* Apply reverse displacement to session start */
|
||||
if(read_opts->displacement_sign == -1) {
|
||||
if(ms_block+ read_opts->displacement < ms_block) {
|
||||
displacement_rollover:;
|
||||
sprintf(msg, "Displacement offset leads outside 32 bit range.");
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||
return 0;
|
||||
}
|
||||
ms_block+= read_opts->displacement;
|
||||
} else {
|
||||
if(ms_block < read_opts->displacement)
|
||||
goto displacement_rollover;
|
||||
ms_block-= read_opts->displacement;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* create the data source */
|
||||
ret = iso_read_opts_new(&ropts, 0);
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create write opts", 0, "FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Important: do not return until iso_read_opts_free() */
|
||||
|
||||
iso_read_opts_set_start_block(ropts, ms_block);
|
||||
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
|
||||
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
|
||||
iso_read_opts_set_no_md5(ropts, read_opts->nomd5);
|
||||
|
||||
if(read_opts->nomd5 == 2)
|
||||
int_num= 2;
|
||||
else if(read_opts->nomd5 == 1)
|
||||
int_num= 1;
|
||||
else
|
||||
int_num= 0;
|
||||
iso_read_opts_set_no_md5(ropts, int_num);
|
||||
iso_read_opts_set_new_inos(ropts, read_opts->noino);
|
||||
|
||||
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
|
||||
@ -221,7 +248,13 @@ create_blank_image:;
|
||||
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
|
||||
iso_read_opts_load_system_area(ropts, 1);
|
||||
|
||||
ds = isoburn_data_source_new(d);
|
||||
ds = isoburn_data_source_new(d, read_opts->displacement,
|
||||
read_opts->displacement_sign);
|
||||
if (ds == NULL) {
|
||||
isoburn_report_iso_error(ret, "Cannot create IsoDataSource object", 0,
|
||||
"FATAL", 0);
|
||||
return ret;
|
||||
}
|
||||
if(o->iso_data_source!=NULL)
|
||||
iso_data_source_unref(o->iso_data_source);
|
||||
o->iso_data_source= ds;
|
||||
@ -406,14 +439,17 @@ static int isoburn_inspect_partition(struct isoburn *o, uint32_t img_size,
|
||||
The need for emulation is confirmed already.
|
||||
@param o A freshly created isoburn object. isoburn_create_data_source() was
|
||||
already called, nevertheless.
|
||||
@param flag bit0= read-only
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
{
|
||||
int ret, i, capacity = -1, role;
|
||||
int ret, i, capacity = -1, role, dummy;
|
||||
off_t data_count, to_read;
|
||||
struct burn_drive *drive;
|
||||
struct ecma119_pri_vol_desc *pvm;
|
||||
enum burn_disc_status s;
|
||||
char path[BURN_DRIVE_ADR_LEN], msg[2 * BURN_DRIVE_ADR_LEN];
|
||||
|
||||
if(o==NULL) {
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
@ -424,6 +460,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
|
||||
drive= o->drive;
|
||||
|
||||
if(flag & 1)
|
||||
o->fabricated_disc_status= BURN_DISC_FULL;
|
||||
|
||||
/* We can assume 0 as start block for image.
|
||||
The data there point to the most recent session.
|
||||
*/
|
||||
@ -431,7 +470,12 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
ret = burn_get_read_capacity(drive, &capacity, 0);
|
||||
if (ret <= 0)
|
||||
capacity = -1;
|
||||
if (capacity > 0 || role == 2) {
|
||||
if (role == 5) { /* random access write-only media */
|
||||
s = burn_disc_get_status(drive);
|
||||
o->fabricated_disc_status= s;
|
||||
burn_disc_track_lba_nwa(drive, NULL, 0, &dummy, &(o->nwa));
|
||||
return 1;
|
||||
} else if (capacity > 0 || role == 2 || role == 4) {
|
||||
/* Might be a block device on a system where libburn cannot determine its
|
||||
size. Try to read anyway. */
|
||||
to_read = o->target_iso_head_size;
|
||||
@ -439,18 +483,25 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
if(capacity > 0 && (off_t) capacity * (off_t) 2048 < to_read)
|
||||
to_read = (off_t) capacity * (off_t) 2048;
|
||||
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
|
||||
to_read, &data_count, 2);
|
||||
to_read, &data_count, 2 | 8);
|
||||
if (ret <= 0) {
|
||||
/* an error means a disc with no ISO image */
|
||||
if (capacity > 0)
|
||||
if (ret == -2) {
|
||||
path[0]= 0;
|
||||
burn_drive_d_get_adr(drive, path);
|
||||
sprintf(msg, "Pseudo drive '%s' does not allow reading", path);
|
||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "NOTE", 0);
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
} else if (capacity > 0)
|
||||
o->fabricated_disc_status= BURN_DISC_FULL;
|
||||
else
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
else if(!(flag & 1))
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
/* No read capacity means blank media */
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
if(!(flag & 1))
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -461,7 +512,8 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
--i;
|
||||
|
||||
if (!i) {
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
if(!(flag & 1))
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -485,12 +537,14 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
return ret;
|
||||
size *= (off_t) 2048; /* block size in bytes */
|
||||
isoburn_set_start_byte(o, size, 0);
|
||||
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
|
||||
if(!(flag & 1))
|
||||
o->fabricated_disc_status= BURN_DISC_APPENDABLE;
|
||||
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
|
||||
|
||||
/* empty image */
|
||||
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
if(!(flag & 1))
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
} else {
|
||||
/* treat any disc in an unknown format as full */
|
||||
o->fabricated_disc_status= BURN_DISC_FULL;
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
Lower level API definition of libisoburn.
|
||||
|
||||
Copyright 2007-2010 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Copyright 2007-2011 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
@ -222,18 +222,26 @@ void isoburn_version(int *major, int *minor, int *micro);
|
||||
at compile time.
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_libisofs_req_major 0
|
||||
#define isoburn_libisofs_req_minor 6
|
||||
#define isoburn_libisofs_req_micro 36
|
||||
#define isoburn_libisofs_req_major 1
|
||||
#define isoburn_libisofs_req_minor 0
|
||||
#define isoburn_libisofs_req_micro 6
|
||||
|
||||
/** The minimum version of libburn to be used with this version of libisoburn
|
||||
at compile time.
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_libburn_req_major 0
|
||||
#define isoburn_libburn_req_minor 8
|
||||
#define isoburn_libburn_req_micro 4
|
||||
#define isoburn_libburn_req_major 1
|
||||
#define isoburn_libburn_req_minor 0
|
||||
#define isoburn_libburn_req_micro 6
|
||||
|
||||
/** The minimum compile time requirements of libisoburn towards libjte are
|
||||
the same as of a suitable libisofs towards libjte.
|
||||
So use these macros from libisofs.h :
|
||||
iso_libjte_req_major
|
||||
iso_libjte_req_minor
|
||||
iso_libjte_req_micro
|
||||
@since 0.6.4
|
||||
*/
|
||||
|
||||
/** The minimum version of libisofs to be used with this version of libisoburn
|
||||
at runtime. This is checked already in isoburn_initialize() which will
|
||||
@ -248,6 +256,17 @@ void isoburn_version(int *major, int *minor, int *micro);
|
||||
int isoburn_libisofs_req(int *major, int *minor, int *micro);
|
||||
|
||||
|
||||
/** The minimum version of libjte to be used with this version of libisoburn
|
||||
at runtime. The use of libjte is optional and depends on configure
|
||||
tests. It can be prevented by ./configure option --disable-libjte .
|
||||
This is checked already in isoburn_initialize() which will refuse on
|
||||
outdated version. So this call is for information purposes after
|
||||
successful startup only.
|
||||
@since 0.6.4
|
||||
*/
|
||||
int isoburn_libjte_req(int *major, int *minor, int *micro);
|
||||
|
||||
|
||||
/** The minimum version of libburn to be used with this version of libisoburn
|
||||
at runtime. This is checked already in isoburn_initialize() which will
|
||||
refuse on outdated version. So this call is for information purposes after
|
||||
@ -266,9 +285,9 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
|
||||
time.
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_header_version_major 0
|
||||
#define isoburn_header_version_minor 6
|
||||
#define isoburn_header_version_micro 2
|
||||
#define isoburn_header_version_major 1
|
||||
#define isoburn_header_version_minor 0
|
||||
#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.
|
||||
@ -384,8 +403,9 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
||||
@param flag bit0= attempt to load the disc tray.
|
||||
Else: failure if not loaded.
|
||||
bit1= regard overwriteable media as blank
|
||||
bit2= if the drive is a regular disk file: truncate it to
|
||||
the write start address
|
||||
bit2= if the drive is a regular disk file:
|
||||
truncate it to the write start address when writing
|
||||
begins
|
||||
bit3= if the drive reports a read-only profile try to read
|
||||
table of content by scanning for ISO image headers.
|
||||
(depending on media type and drive this might
|
||||
@ -751,6 +771,11 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
||||
bit9= nomd5
|
||||
@since 0.4.2
|
||||
Do not load the eventual MD5 checksum array.
|
||||
Do not check eventual session_md5 tags.
|
||||
bit10= nomd5tag
|
||||
@since 1.0.4
|
||||
Do not check eventual session_md5 tags although bit9
|
||||
is not set.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
#define isoburn_ropt_norock 1
|
||||
@ -763,6 +788,7 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
||||
#define isoburn_ropt_noea 128
|
||||
#define isoburn_ropt_noino 256
|
||||
#define isoburn_ropt_nomd5 512
|
||||
#define isoburn_ropt_nomd5tag 1024
|
||||
|
||||
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
|
||||
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
|
||||
@ -800,7 +826,6 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
|
||||
mode_t *mode);
|
||||
|
||||
|
||||
|
||||
/** Set the character set for reading RR file names from ISO images.
|
||||
@since 0.1.0
|
||||
@param o The option set to work on
|
||||
@ -815,6 +840,7 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
||||
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||
char **input_charset);
|
||||
|
||||
|
||||
/**
|
||||
Enable or disable methods to automatically choose an input charset.
|
||||
This eventually overrides the name set via isoburn_ropt_set_input_charset()
|
||||
@ -830,6 +856,30 @@ int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode);
|
||||
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
|
||||
|
||||
|
||||
/** Control an offset to be applied to all block address pointers in the ISO
|
||||
image in order to compensate for an eventual displacement of the image
|
||||
relative to the start block address for which it was produced.
|
||||
E.g. if track number 2 from CD gets copied into a disk file and shall then
|
||||
be loaded as ISO filesystem, then the directory tree and all data file
|
||||
content of the track copy will become readable by setting the track start
|
||||
address as displacement and -1 as displacement_sign.
|
||||
Data file content outside the track will of course not be accessible and
|
||||
eventually produce read errors.
|
||||
@since 0.6.6
|
||||
@param o The option set to work on
|
||||
@param displacement 0 or a positive number
|
||||
@param displacement_sign Determines wether to add or subtract displacement
|
||||
to block addresses before applying them to the
|
||||
storage object for reading:
|
||||
+1 = add , -1= subtract , else keep unaltered
|
||||
*/
|
||||
int isoburn_ropt_set_displacement(struct isoburn_read_opts *o,
|
||||
uint32_t displacement, int displacement_sign);
|
||||
int isoburn_ropt_get_displacement(struct isoburn_read_opts *o,
|
||||
uint32_t *displacement, int *displacement_sign);
|
||||
|
||||
|
||||
|
||||
/** After calling function isoburn_read_image() there are informations
|
||||
available in the option set.
|
||||
This info can be obtained as bits in parameter has_what. Like:
|
||||
@ -854,14 +904,15 @@ int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
|
||||
#define isoburn_ropt_has_iso1999 4
|
||||
#define isoburn_ropt_has_el_torito 8
|
||||
|
||||
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||
uint32_t *size, int *has_what);
|
||||
|
||||
/* ts A90122 */
|
||||
/* >>> to be implemented:
|
||||
#define isoburn_ropt_has_acl 64
|
||||
#define isoburn_ropt_has_ea 128
|
||||
*/
|
||||
|
||||
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||
uint32_t *size, int *has_what);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
@ -908,6 +959,7 @@ int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag);
|
||||
@param level is a term of the ISO 9660 standard. It should be one of:
|
||||
1= filenames restricted to form 8.3
|
||||
2= filenames allowed up to 31 characters
|
||||
3= file content may be larger than 4 GB - 1.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_set_level(struct isoburn_imgen_opts *o, int level);
|
||||
@ -939,7 +991,8 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
|
||||
can encode ACL and XFS-style Extended Attributes.
|
||||
bit6= session_md5
|
||||
@since 0.4.2
|
||||
Produce and write a MD5 checksum of the whole session stream.
|
||||
Produce and write MD5 checksum tags of superblock, directory
|
||||
tree, and the whole session stream.
|
||||
bit7= file_md5
|
||||
@since 0.4.2
|
||||
Produce and write MD5 checksums for each single IsoFile.
|
||||
@ -955,6 +1008,21 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
|
||||
the first session to LBA 32 and do not copy the first 64kB
|
||||
of the first session to LBA 0, but rather write the first
|
||||
session to LBA 0 directly.
|
||||
bit10= will_cancel
|
||||
@since 0.6.6
|
||||
Announce to libisofs that only the image size is desired
|
||||
and that the write thread will be cancelled by
|
||||
isoburn_cancel_prepared_write() before actual image writing
|
||||
occurs. Without this, cancellation can cause a MISHAP event.
|
||||
bit11= old_empty
|
||||
@since 1.0.2
|
||||
Let symbolic links and device files point to block 0, and let
|
||||
empty data files point to the address of the Volume Descriptor
|
||||
Set Terminator. This was done by libisofs in the past.
|
||||
By default there is now a single dedicated block of zero bytes
|
||||
after the end of the directory trees, of which the address
|
||||
is used for all files without own content.
|
||||
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
#define isoburn_igopt_rockridge 1
|
||||
@ -966,6 +1034,8 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
|
||||
#define isoburn_igopt_file_md5 128
|
||||
#define isoburn_igopt_file_stability 256
|
||||
#define isoburn_igopt_no_emul_toc 512
|
||||
#define isoburn_igopt_will_cancel 1024
|
||||
#define isoburn_igopt_old_empty 2048
|
||||
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
|
||||
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
|
||||
@ -1038,6 +1108,18 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
Joliet tree rather than the ISO 9660 / ECMA-119 names.
|
||||
@since 0.5.4
|
||||
Previous versions added dots to Joliet names unconditionally.
|
||||
bit14= allow_dir_id_ext
|
||||
Convert directory names for ECMA-119 similar to other file
|
||||
names, but do not force a dot or add a version number.
|
||||
This violates ECMA-119 by allowing one "." and especially
|
||||
ISO level 1 by allowing DOS style 8.3 names rather than
|
||||
only 8 characters.
|
||||
(mkisofs and its clones obviously do this violation.)
|
||||
@since 1.0.0
|
||||
bit15= joliet_long_names
|
||||
Allow for Joliet leaf names up to 103 characters rather than
|
||||
up to 64.
|
||||
@since 1.0.6
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
#define isoburn_igopt_omit_version_numbers 1
|
||||
@ -1054,10 +1136,41 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
#define isoburn_igopt_aaip_susp_1_10 2048
|
||||
#define isoburn_igopt_only_iso_versions 4096
|
||||
#define isoburn_igopt_no_j_force_dots 8192
|
||||
#define isoburn_igopt_allow_dir_id_ext 16384
|
||||
#define isoburn_igopt_joliet_long_names 32768
|
||||
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
|
||||
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
|
||||
|
||||
|
||||
/** Caution: This option breaks any assumptions about names that
|
||||
are supported by ECMA-119 specifications.
|
||||
Try to omit any translation which would make a file name compliant to the
|
||||
ECMA-119 rules. This includes and exceeds omit_version_numbers,
|
||||
max_37_char_filenames, no_force_dots bit0, allow_full_ascii. Further it
|
||||
prevents the conversion from local character set to ASCII.
|
||||
The maximum name length is given by this call. If a filename exceeds
|
||||
this length or cannot be recorded untranslated for other reasons, then
|
||||
image production gets aborted.
|
||||
Currently the length limit is 96 characters, because an ECMA-119 directory
|
||||
record may at most have 254 bytes and up to 158 other bytes must fit into
|
||||
the record. Probably 96 more bytes can be made free for the name in future.
|
||||
@since 1.0.0
|
||||
@param o The option set to work on
|
||||
@param len 0 = disable this feature and perform name translation
|
||||
according to other settings.
|
||||
>0 = Omit any translation. Eventually abort image production
|
||||
if a name is longer than the given value.
|
||||
-1 = Like >0. Allow maximum possible length.
|
||||
isoburn_igopt_get_untranslated_name_len() will tell the
|
||||
effectively resulting value.
|
||||
@return >0 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_set_untranslated_name_len(struct isoburn_imgen_opts *o,
|
||||
int len);
|
||||
int isoburn_igopt_get_untranslated_name_len(struct isoburn_imgen_opts *o,
|
||||
int *len);
|
||||
|
||||
|
||||
/** Whether and how files should be sorted.
|
||||
@since 0.1.0
|
||||
@param o The option set to work on
|
||||
@ -1114,7 +1227,7 @@ int isoburn_igopt_get_over_ugid(struct isoburn_imgen_opts *o,
|
||||
int *replace_uid, int *replace_gid,
|
||||
uid_t *uid, gid_t *gid);
|
||||
|
||||
/** Set the charcter set to use for representing filenames in the image.
|
||||
/** Set the charcter set to use for representing RR filenames in the image.
|
||||
@since 0.1.0
|
||||
@param o The option set to work on
|
||||
@param output_charset Set this to NULL to use the default output charset.
|
||||
@ -1215,6 +1328,35 @@ int isoburn_igopt_get_scdbackup_tag(struct isoburn_imgen_opts *o,
|
||||
SYSLINUX plus an ISOLINUX boot image (see
|
||||
iso_image_set_boot_image()) and only if not bit0
|
||||
is set.
|
||||
bit2-7= System area type
|
||||
0= with bit0 or bit1: MBR
|
||||
else: unspecified type
|
||||
@since 0.6.4
|
||||
1= MIPS Big Endian Volume Header
|
||||
Submit up to 15 MIPS Big Endian boot files by
|
||||
iso_image_add_mips_boot_file() of libisofs.
|
||||
This will overwrite the first 512 bytes of
|
||||
the submitted data.
|
||||
2= DEC Boot Block for MIPS Little Endian
|
||||
The first boot file submitted by
|
||||
iso_image_add_mips_boot_file() will be activated.
|
||||
This will overwrite the first 512 bytes of
|
||||
the submitted data.
|
||||
@since 0.6.6
|
||||
3= SUN Disk Label for SUN SPARC
|
||||
Submit up to 7 SPARC boot images by
|
||||
isoburn_igopt_set_partition_img() for partition
|
||||
numbers 2 to 8.
|
||||
This will overwrite the first 512 bytes of
|
||||
the submitted data.
|
||||
bit8-9= Only with System area type 0 = MBR
|
||||
@since 1.0.4
|
||||
Cylinder alignment mode eventually pads the image
|
||||
to make it end at a cylinder boundary.
|
||||
0 = auto (align if bit1)
|
||||
1 = always align to cylinder boundary
|
||||
2 = never align to cylinder boundary
|
||||
|
||||
@return 1 success, 0 no data to get, <0 failure
|
||||
*/
|
||||
int isoburn_igopt_set_system_area(struct isoburn_imgen_opts *o,
|
||||
@ -1295,6 +1437,141 @@ int isoburn_igopt_get_pvd_times(struct isoburn_imgen_opts *opts,
|
||||
char uuid[17]);
|
||||
|
||||
|
||||
/** Associate a libjte environment object to the upcomming write run.
|
||||
libjte implements Jigdo Template Extraction as of Steve McIntyre and
|
||||
Richard Atterer.
|
||||
A non-NULL libjte_handle will cause failure to write if libjte was not
|
||||
enabled in libisofs at compile time.
|
||||
@since 0.6.4
|
||||
@param opts
|
||||
The option set to work on
|
||||
@param libjte_handle
|
||||
Pointer to a struct libjte_env e.g. created by libjte_new().
|
||||
It must stay existent from the start of image writing by
|
||||
isoburn_prepare_*() until the write thread has ended.
|
||||
E.g. until libburn indicates the end of its write run.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_attach_jte(struct isoburn_imgen_opts *opts,
|
||||
void *libjte_handle);
|
||||
|
||||
/** Remove eventual association to a libjte environment handle.
|
||||
@since 0.6.4
|
||||
@param opts
|
||||
The option set to work on
|
||||
@param libjte_handle
|
||||
If not submitted as NULL, this will return the previously set
|
||||
libjte handle.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_detach_jte(struct isoburn_imgen_opts *opts,
|
||||
void **libjte_handle);
|
||||
|
||||
|
||||
/** Set resp. get the number of trailing zero byte blocks to be written by
|
||||
libisofs. The image size counter of the emerging ISO image will include
|
||||
them. Eventual checksums will take them into respect.
|
||||
They will be written immediately before the eventual image checksum area
|
||||
which is at the very end of the image.
|
||||
For a motivation see iso_write_opts_set_tail_blocks() in libisofs.h .
|
||||
@since 0.6.4
|
||||
@param opts
|
||||
The option set to work on
|
||||
@aram num_blocks
|
||||
Number of extra 2 kB blocks to be written by libisofs.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_set_tail_blocks(struct isoburn_imgen_opts *opts,
|
||||
uint32_t num_blocks);
|
||||
int isoburn_igopt_get_tail_blocks(struct isoburn_imgen_opts *opts,
|
||||
uint32_t *num_blocks);
|
||||
|
||||
|
||||
/** Cause an arbitrary data file to be appended to the ISO image and to be
|
||||
described by a partition table entry in an MBR or SUN Disk Label at the
|
||||
start of the ISO image.
|
||||
The partition entry will bear the size of the image file rounded up to
|
||||
the next multiple of 2048 bytes.
|
||||
MBR or SUN Disk Label are selected by isoburn_igopt_set_system_area()
|
||||
system area type: 0 selects MBR partition table. 3 selects a SUN partition
|
||||
table with 320 kB start alignment.
|
||||
@since 0.6.4
|
||||
@param opts
|
||||
The option set to be manipulated.
|
||||
@param partition_number
|
||||
Depicts the partition table entry which shall describe the
|
||||
appended image.
|
||||
Range with MBR: 1 to 4. 1 will cause the whole ISO image to be
|
||||
unclaimable space before partition 1.
|
||||
@since 0.6.6
|
||||
Range with SUN Disk Label: 2 to 8.
|
||||
@param image_path
|
||||
File address in the local file system.
|
||||
With SUN Disk Label: an empty name causes the partition to become
|
||||
a copy of the next lower partition.
|
||||
@param image_type
|
||||
The MBR partition type. E.g. FAT12 = 0x01 , FAT16 = 0x06,
|
||||
Linux Native Partition = 0x83. See fdisk command L.
|
||||
This parameter is ignored with SUN Disk Label.
|
||||
@return
|
||||
<=0 = error, 1 = success
|
||||
*/
|
||||
int isoburn_igopt_set_partition_img(struct isoburn_imgen_opts *opts,
|
||||
int partition_number, uint8_t partition_type,
|
||||
char *image_path);
|
||||
|
||||
/** Inquire the current settings made by isoburn_igopt_set_partition_img().
|
||||
@since 0.6.4
|
||||
@param opts
|
||||
The option set to be inquired.
|
||||
@param num_entries
|
||||
Number of array elements in partition_types[] and image_paths[].
|
||||
@param partition_types
|
||||
The partition type associated with the partition. Valid only if
|
||||
image_paths[] of the same index is not NULL.
|
||||
@param image_paths
|
||||
Its elements get filled with either NULL or a pointer to a string
|
||||
with a file address resp. an empty text.
|
||||
@return
|
||||
<0 = error
|
||||
0 = no partition image set
|
||||
>0 highest used partition number
|
||||
*/
|
||||
int isoburn_igopt_get_partition_img(struct isoburn_imgen_opts *opts,
|
||||
int num_entries,
|
||||
uint8_t partition_types[],
|
||||
char *image_paths[]);
|
||||
|
||||
|
||||
/** Set a name for the system area. This setting is ignored unless system area
|
||||
type 3 "SUN Disk Label" is in effect by iso_write_opts_set_system_area().
|
||||
In this case it will replace the default text at the start of the image:
|
||||
"CD-ROM Disc with Sun sparc boot created by libisofs"
|
||||
@since 0.6.6
|
||||
@param opts
|
||||
The option set to be manipulated.
|
||||
@param label
|
||||
A text of up to 128 characters.
|
||||
@return
|
||||
<=0 = error, 1 = success
|
||||
*/
|
||||
int isoburn_igopt_set_disc_label(struct isoburn_imgen_opts *opts, char *label);
|
||||
|
||||
/** Inquire the current setting made by isoburn_igopt_set_disc_label().
|
||||
@since 0.6.6
|
||||
@param opts
|
||||
The option set to be inquired.
|
||||
@param label
|
||||
Returns a pointer to the currently set label string.
|
||||
Do not alter this string.
|
||||
Use only as long as the opts object exists.
|
||||
@return
|
||||
<=0 = error, 1 = success
|
||||
*/
|
||||
int isoburn_igopt_get_disc_label(struct isoburn_imgen_opts *opts,
|
||||
char **label);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
/* End of Options for image generation */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
@ -1548,6 +1825,7 @@ int isoburn_prepare_blind_grow(struct burn_drive *in_drive,
|
||||
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.
|
||||
If this call returns 0 or 1 then the write thread of libisofs has ended.
|
||||
@since 0.1.0
|
||||
@param input_drive The drive resp. in_drive which was used with the
|
||||
preparation call.
|
||||
@ -1561,6 +1839,21 @@ int isoburn_cancel_prepared_write(struct burn_drive *input_drive,
|
||||
struct burn_drive *output_drive, int flag);
|
||||
|
||||
|
||||
/**
|
||||
Override the truncation setting that was made with flag bit2 during the
|
||||
call of isoburn_drive_aquire. This applies only to stdio pseudo drives.
|
||||
@since 0.1.6
|
||||
@param drive The drive which was aquired and shall be used for writing.
|
||||
@param flag Bitfield controlling the setting:
|
||||
bit0= truncate (else do not truncate)
|
||||
bit1= do not warn if call is inappropriate to drive
|
||||
bit2= only set if truncation is currently enabled
|
||||
do not warn if call is inappropriate to drive
|
||||
@return 1 success, 0 inappropriate drive, <0 severe error
|
||||
*/
|
||||
int isoburn_set_truncate(struct burn_drive *drive, int flag);
|
||||
|
||||
|
||||
/** Start writing of the new session.
|
||||
This call is asynchrounous. I.e. it returns quite soon and the progress has
|
||||
to be watched by a loop with call burn_drive_get_status() until
|
||||
|
@ -21,8 +21,11 @@ isoburn_get_attached_image;
|
||||
isoburn_get_fifo_status;
|
||||
isoburn_get_min_start_byte;
|
||||
isoburn_get_mount_params;
|
||||
isoburn_igopt_attach_jte;
|
||||
isoburn_igopt_destroy;
|
||||
isoburn_igopt_detach_jte;
|
||||
isoburn_igopt_get_data_start;
|
||||
isoburn_igopt_get_disc_label;
|
||||
isoburn_igopt_get_effective_lba;
|
||||
isoburn_igopt_get_extensions;
|
||||
isoburn_igopt_get_fifo_size;
|
||||
@ -30,27 +33,35 @@ isoburn_igopt_get_level;
|
||||
isoburn_igopt_get_out_charset;
|
||||
isoburn_igopt_get_over_mode;
|
||||
isoburn_igopt_get_over_ugid;
|
||||
isoburn_igopt_get_partition_img;
|
||||
isoburn_igopt_get_pvd_times;
|
||||
isoburn_igopt_get_relaxed;
|
||||
isoburn_igopt_get_scdbackup_tag;
|
||||
isoburn_igopt_get_sort_files;
|
||||
isoburn_igopt_get_system_area;
|
||||
isoburn_igopt_get_tail_blocks;
|
||||
isoburn_igopt_get_untranslated_name_len;
|
||||
isoburn_igopt_new;
|
||||
isoburn_igopt_set_disc_label;
|
||||
isoburn_igopt_set_extensions;
|
||||
isoburn_igopt_set_fifo_size;
|
||||
isoburn_igopt_set_level;
|
||||
isoburn_igopt_set_out_charset;
|
||||
isoburn_igopt_set_over_mode;
|
||||
isoburn_igopt_set_over_ugid;
|
||||
isoburn_igopt_set_partition_img;
|
||||
isoburn_igopt_set_pvd_times;
|
||||
isoburn_igopt_set_relaxed;
|
||||
isoburn_igopt_set_scdbackup_tag;
|
||||
isoburn_igopt_set_sort_files;
|
||||
isoburn_igopt_set_system_area;
|
||||
isoburn_igopt_set_tail_blocks;
|
||||
isoburn_igopt_set_untranslated_name_len;
|
||||
isoburn_initialize;
|
||||
isoburn_is_compatible;
|
||||
isoburn_libburn_req;
|
||||
isoburn_libisofs_req;
|
||||
isoburn_libjte_req;
|
||||
isoburn_needs_emulation;
|
||||
isoburn_prepare_blind_grow;
|
||||
isoburn_prepare_disc;
|
||||
@ -61,6 +72,7 @@ isoburn_ropt_destroy;
|
||||
isoburn_ropt_get_auto_incharset;
|
||||
isoburn_ropt_get_default_dirperms;
|
||||
isoburn_ropt_get_default_perms;
|
||||
isoburn_ropt_get_displacement;
|
||||
isoburn_ropt_get_extensions;
|
||||
isoburn_ropt_get_input_charset;
|
||||
isoburn_ropt_get_size_what;
|
||||
@ -68,11 +80,13 @@ isoburn_ropt_new;
|
||||
isoburn_ropt_set_auto_incharset;
|
||||
isoburn_ropt_set_default_dirperms;
|
||||
isoburn_ropt_set_default_perms;
|
||||
isoburn_ropt_set_displacement;
|
||||
isoburn_ropt_set_extensions;
|
||||
isoburn_ropt_set_input_charset;
|
||||
isoburn_set_msc1;
|
||||
isoburn_set_msgs_submit;
|
||||
isoburn_set_read_pacifier;
|
||||
isoburn_set_truncate;
|
||||
isoburn_sync_after_write;
|
||||
isoburn_toc_disc_free;
|
||||
isoburn_toc_disc_get_sectors;
|
||||
@ -107,6 +121,7 @@ Xorriso_option_acl;
|
||||
Xorriso_option_add;
|
||||
Xorriso_option_add_plainly;
|
||||
Xorriso_option_alter_date;
|
||||
Xorriso_option_append_partition;
|
||||
Xorriso_option_application_id;
|
||||
Xorriso_option_as;
|
||||
Xorriso_option_assert_volid;
|
||||
@ -126,6 +141,7 @@ Xorriso_option_check_media_defaults;
|
||||
Xorriso_option_chgrpi;
|
||||
Xorriso_option_chmodi;
|
||||
Xorriso_option_chowni;
|
||||
Xorriso_option_clone;
|
||||
Xorriso_option_close;
|
||||
Xorriso_option_close_filter_list;
|
||||
Xorriso_option_commit;
|
||||
@ -133,6 +149,7 @@ Xorriso_option_commit_eject;
|
||||
Xorriso_option_compare;
|
||||
Xorriso_option_compliance;
|
||||
Xorriso_option_copyright_file;
|
||||
Xorriso_option_cp_clone;
|
||||
Xorriso_option_cpri;
|
||||
Xorriso_option_cpx;
|
||||
Xorriso_option_cut_out;
|
||||
@ -141,9 +158,11 @@ Xorriso_option_devices;
|
||||
Xorriso_option_dialog;
|
||||
Xorriso_option_disk_dev_ino;
|
||||
Xorriso_option_disk_pattern;
|
||||
Xorriso_option_displacement;
|
||||
Xorriso_option_drive_class;
|
||||
Xorriso_option_dummy;
|
||||
Xorriso_option_dvd_obs;
|
||||
Xorriso_option_early_drive_test;
|
||||
Xorriso_option_eject;
|
||||
Xorriso_option_end;
|
||||
Xorriso_option_errfile_log;
|
||||
@ -163,6 +182,7 @@ Xorriso_option_help;
|
||||
Xorriso_option_hide;
|
||||
Xorriso_option_history;
|
||||
Xorriso_option_iso_rr_pattern;
|
||||
Xorriso_option_jigdo;
|
||||
Xorriso_option_joliet;
|
||||
Xorriso_option_list_delimiter;
|
||||
Xorriso_option_list_formats;
|
||||
|
@ -3,4 +3,13 @@ Ben Jansens
|
||||
Thomas Schmitt
|
||||
Mario Danic
|
||||
Vreixo Formoso Lopes
|
||||
Colin Plumb
|
||||
Tatu Ylonen
|
||||
Jim Kingdon
|
||||
Scott G. Miller
|
||||
Ulrich Drepper
|
||||
Richard Atterer
|
||||
Steve McIntyre
|
||||
George Danchev
|
||||
and possibly others who gave their copyright to Free Software Foundation, Inc.
|
||||
|
||||
|
@ -3,15 +3,22 @@ Ben Jansens <xor@orodu.net>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
Steve McIntyre <steve@einval.com>
|
||||
George Danchev <danchev@spnet.net>
|
||||
|
||||
GNU xorriso is a compilation of
|
||||
xorriso Copyright (C) 2007-2010 Thomas Schmitt
|
||||
libisoburn Copyright (C) 2007-2010 Vreixo Formoso, Thomas Schmitt
|
||||
libisofs Copyright (C) 2007-2010 Vreixo Formoso, Mario Danic, Thomas Schmitt
|
||||
GNU xorriso is a compilation of modules from libburnia-project.org :
|
||||
xorriso Copyright (C) 2007-2011 Thomas Schmitt
|
||||
libisoburn Copyright (C) 2007-2011 Vreixo Formoso, Thomas Schmitt
|
||||
libisofs Copyright (C) 2007-2011 Vreixo Formoso, Mario Danic, Thomas Schmitt
|
||||
libburn Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
||||
2006-2010 Mario Danic, Thomas Schmitt
|
||||
from libburnia-project.org with a license derived from GPLv2+.
|
||||
2006-2011 Mario Danic, Thomas Schmitt
|
||||
Further included is :
|
||||
libjte Copyright (C) 2000-2007 Free Software Foundation, Inc.
|
||||
2004-2011 Steve McIntyre
|
||||
2010-2011 George Danchev, Thomas Schmitt
|
||||
|
||||
Originally they all are licensed directly or indirectly as GPLv2+.
|
||||
GNU xorriso is licensed by the following statement:
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 3
|
||||
|
@ -4,7 +4,7 @@
|
||||
GNU xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
||||
Derived from and supported by libburnia-project.org, published via:
|
||||
http://www.gnu.org/software/xorriso/xorriso_eng.html
|
||||
ftp://ftp.gnu.org/gnu/xorriso/xorriso-0.6.2.tar.gz
|
||||
ftp://ftp.gnu.org/gnu/xorriso/xorriso-1.0.8.tar.gz
|
||||
Provided under GPL version 3 or later. No warranty.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -46,10 +46,10 @@ Optional at compile time are:
|
||||
If they were present at compile time, then the optional libraries have to
|
||||
be present at runtime, too.
|
||||
|
||||
Obtain xorriso-0.6.2.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain xorriso-1.0.8.tar.gz, take it to a directory of your choice and do:
|
||||
|
||||
tar xzf xorriso-0.6.2.tar.gz
|
||||
cd xorriso-0.6.2
|
||||
tar xzf xorriso-1.0.8.tar.gz
|
||||
cd xorriso-1.0.8
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -72,17 +72,15 @@ or you may execute as superuser:
|
||||
|
||||
For general concepts, options and usage examples see
|
||||
info xorriso
|
||||
or
|
||||
info xorrisofs
|
||||
man 1 xorriso
|
||||
man 1 xorrisofs
|
||||
|
||||
The documents are part of the tarball as
|
||||
xorriso/xorriso.info
|
||||
xorriso/xorriso.1
|
||||
Original source text of both is
|
||||
xorriso/xorriso.texi
|
||||
You may get a first glimpse by
|
||||
info ./xorriso/xorriso.info
|
||||
info ./xorriso/xorrisofs.info
|
||||
man ./xorriso/xorriso.1
|
||||
man ./xorriso/xorrisofs.1
|
||||
|
||||
The installation creates several alias links pointing to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
@ -98,7 +96,8 @@ Never omit the "make clean" command after switching libreadline enabling.
|
||||
Other deliberate dependency reduction options of ./configure are:
|
||||
--disable-libacl avoid use of ACL functions like acl_to_text()
|
||||
--disable-xattr avoid use of xattr functions like listxattr()
|
||||
--disable-zlib avoid use of zlib functions like compress2()
|
||||
--disable-zlib avoid use of zlib functions like compress2()
|
||||
this also avoids the use of libjte and option -jigdo.
|
||||
|
||||
xorriso brings own system adapters which allow burning optical media on
|
||||
GNU/Linux, FreeBSD, Solaris.
|
||||
@ -254,12 +253,12 @@ Tag_id distinguishes the following tag types
|
||||
"libisofs_checksum_tag_v1" Session end tag
|
||||
|
||||
A relocated superblock may appear at LBA 0 of an image which was produced for
|
||||
being stored in a disk file or on overwriteable media (e.g. DVD+R, BD-RE).
|
||||
being stored in a disk file or on overwriteable media (e.g. DVD+RW, BD-RE).
|
||||
xorriso records the first session at LBA 32. An eventual follow-up session
|
||||
begins at the next block address which is divisible by 32 and higher than the
|
||||
address of the previous session's end tag. Normally no session starts after the
|
||||
address given by relocated superblock parameter session_start=.
|
||||
Session oriented media like CD-R[W], DVD+R, BD-R will have no relocated
|
||||
Session oriented media like CD-R[W], DVD-R, DVD+R, BD-R will have no relocated
|
||||
superblock but rather bear a table-of-content on media level.
|
||||
|
||||
A tag is valid if pos= tells its own block address and self= tells its own MD5
|
||||
@ -272,7 +271,7 @@ The newline character at the end is mandatory.
|
||||
|
||||
libisoburn
|
||||
|
||||
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
||||
xorriso is based on libisofs which does ISO 9660 filesystem aspects and on
|
||||
libburn which does the input and output aspects. Parts of this foundation
|
||||
are accessed via libisoburn, which is closely related to xorriso.
|
||||
|
||||
@ -290,9 +289,9 @@ and a matching dynamically linked xorriso binary.
|
||||
This binary is very lean but depends on properly installed libraries of
|
||||
suitable revision.
|
||||
|
||||
Dynamic library and compile time header requirements for libisoburn-0.6.2 :
|
||||
- libburn.so.4 , version libburn-0.8.4 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.36 or higher
|
||||
Dynamic library and compile time header requirements for libisoburn-1.0.6 :
|
||||
- libburn.so.4 , version libburn-1.0.6 or higher
|
||||
- libisofs.so.6 , version libisofs-1.0.6 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
headers seen at compile time. So compile in the oldest possible installation
|
||||
setup unless you have reason to enforce a newer bug fix level.
|
||||
@ -410,17 +409,23 @@ By Mario Danic <mario.danic@gmail.com>, libburn, libisofs
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>, libisofs, libisoburn
|
||||
Thomas Schmitt <scdbackup@gmx.net>, libburn, libisofs,
|
||||
libisoburn, xorriso
|
||||
Copyright (C) 2006-2010 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||
Copyright (C) 2006-2011 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||
|
||||
libburnia-project.org is inspired by and in libburn still containing parts
|
||||
of old
|
||||
Libburn. By Derek Foreman <derek@signalmarketing.com> and
|
||||
Ben Jansens <xor@orodu.net>
|
||||
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
||||
|
||||
GNU xorriso contains libjte out of source package jigit >= 1.17
|
||||
Copyright (C) 2000-2007 Free Software Foundation, Inc.
|
||||
2004-2011 Steve McIntyre
|
||||
2010-2011 George Danchev, Thomas Schmitt
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
This text itself is
|
||||
Copyright (c) 2007 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2007 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
||||
and is freely distributable.
|
||||
It shall only be modified in sync with the technical properties of xorriso.
|
||||
If you make use of the license to derive modified versions of xorriso
|
||||
|
@ -640,6 +640,16 @@ int Xorriso_lst_detach_text(struct Xorriso_lsT *entry, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_lst_get_last(struct Xorriso_lsT *entry, struct Xorriso_lsT **last,
|
||||
int flag)
|
||||
{
|
||||
*last= NULL;
|
||||
if(entry != NULL)
|
||||
for((*last)= entry; (*last)->next != NULL; (*last)= (*last)->next);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* --------------------------- End Xorriso_lsT ---------------------------- */
|
||||
|
||||
|
||||
|
@ -130,6 +130,8 @@ char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
|
||||
|
||||
int Xorriso_lst_detach_text(struct Xorriso_lsT *entry, int flag);
|
||||
|
||||
int Xorriso_lst_get_last(struct Xorriso_lsT *entry, struct Xorriso_lsT **last,
|
||||
int flag);
|
||||
|
||||
|
||||
int Exclusions_new(struct ExclusionS **o, int flag);
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -26,6 +26,28 @@
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef Xorriso_standalonE
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include "../libjte/libjte.h"
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include <libjte/libjte.h>
|
||||
#endif
|
||||
|
||||
#endif /* ! Xorriso_standalonE */
|
||||
|
||||
#include "xorriso.h"
|
||||
#include "xorriso_private.h"
|
||||
|
||||
@ -104,15 +126,19 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->split_size= 0;
|
||||
strcpy(m->list_delimiter, "--");
|
||||
m->ino_behavior= 7;
|
||||
m->iso_level= 3;
|
||||
m->do_joliet= 0;
|
||||
m->do_iso1999= 0;
|
||||
m->do_aaip= 0;
|
||||
m->do_md5= 0;
|
||||
m->no_emul_toc= 0;
|
||||
m->do_old_empty= 0;
|
||||
m->scdbackup_tag_name[0]= 0;
|
||||
m->scdbackup_tag_time[0]= 0;
|
||||
m->scdbackup_tag_written[0]= 0;
|
||||
m->scdbackup_tag_listname[0]= 0;
|
||||
m->relax_compliance= 0;
|
||||
m->untranslated_name_len= 0;
|
||||
m->do_follow_pattern= 1;
|
||||
m->do_follow_param= 0;
|
||||
m->do_follow_links= 0;
|
||||
@ -154,7 +180,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->toc_emulation_flag= 0;
|
||||
m->image_start_mode= 0;
|
||||
m->image_start_value[0]= 0;
|
||||
m->displacement= 0;
|
||||
m->displacement_sign= 0;
|
||||
m->drives_exclusive= 1;
|
||||
m->early_stdio_test= 0;
|
||||
m->do_calm_drive= 1;
|
||||
m->indev[0]= 0;
|
||||
m->in_drive_handle= NULL;
|
||||
@ -180,6 +209,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->speed= 0;
|
||||
m->fs= 4*512; /* 4 MiB */
|
||||
m->padding= 300*1024;
|
||||
m->do_padding_by_libisofs= 0;
|
||||
m->alignment= 0;
|
||||
m->do_stream_recording= 0;
|
||||
m->dvd_obs= 0;
|
||||
@ -210,11 +240,24 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->partition_offset= 0;
|
||||
m->partition_secs_per_head= 0;
|
||||
m->partition_heads_per_cyl= 0;
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
m->appended_partitions[i]= NULL;
|
||||
m->appended_part_types[i]= 0;
|
||||
}
|
||||
m->ascii_disc_label[0]= 0;
|
||||
m->vol_creation_time= 0;
|
||||
m->vol_modification_time= 0;
|
||||
m->vol_expiration_time= 0;
|
||||
m->vol_effective_time= 0;
|
||||
m->vol_uuid[0]= 0;
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
m->libjte_handle= NULL;
|
||||
#endif
|
||||
|
||||
m->jigdo_params= NULL;
|
||||
m->jigdo_values= NULL;
|
||||
m->libjte_params_given= 0;
|
||||
m->loaded_boot_bin_lba= 0;
|
||||
m->loaded_boot_cat_path[0]= 0;
|
||||
m->allow_graft_points= 0;
|
||||
@ -255,15 +298,16 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
strcpy(m->report_about_text, "UPDATE");
|
||||
Xorriso__text_to_sev(m->report_about_text, &m->report_about_severity, 0);
|
||||
m->library_msg_direct_print= 0;
|
||||
strcpy(m->abort_on_text,"FATAL");
|
||||
strcpy(m->abort_on_text,"FAILURE");
|
||||
Xorriso__text_to_sev(m->abort_on_text, &m->abort_on_severity, 0);
|
||||
m->abort_on_is_default= 1;
|
||||
m->problem_status= 0;
|
||||
m->problem_status_text[0]= 0;
|
||||
m->errfile_log[0]= 0;
|
||||
m->errfile_mode= 0;
|
||||
m->errfile_fp= NULL;
|
||||
|
||||
m->img_read_error_mode= 2; /* abort faulty image reading with FATAL */
|
||||
m->img_read_error_mode= 1; /* abort faulty image reading with FAILURE */
|
||||
m->extract_error_mode= 1; /* keep extracted files after read error */
|
||||
strcpy(m->return_with_text, "SORRY");
|
||||
Xorriso__text_to_sev(m->return_with_text, &m->return_with_severity, 0);
|
||||
@ -298,6 +342,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->last_update_time= 0.0;
|
||||
m->find_compare_result= 1;
|
||||
m->find_check_md5_result= 0;
|
||||
m->last_abort_file_time= 0.0;
|
||||
|
||||
m->node_counter= 0;
|
||||
m->node_array_size= 0;
|
||||
@ -320,6 +365,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
|
||||
m->perm_stack= NULL;
|
||||
|
||||
m->update_flags= 0;
|
||||
|
||||
m->result_line[0]= 0;
|
||||
m->result_line_counter= 0;
|
||||
m->result_page_counter= 0;
|
||||
@ -397,10 +444,15 @@ int Xorriso_destroy_re(struct XorrisO *m, int flag)
|
||||
int Xorriso_destroy(struct XorrisO **xorriso, int flag)
|
||||
{
|
||||
struct XorrisO *m;
|
||||
int i;
|
||||
|
||||
m= *xorriso;
|
||||
if(m==NULL)
|
||||
return(0);
|
||||
|
||||
/* Give up drives and image to unref all connected xorriso objects */
|
||||
Xorriso_give_up_drive(m, 3);
|
||||
|
||||
if(m->in_charset!=NULL)
|
||||
free(m->in_charset);
|
||||
if(m->out_charset!=NULL)
|
||||
@ -417,6 +469,17 @@ int Xorriso_destroy(struct XorrisO **xorriso, int flag)
|
||||
Xorriso_destroy_hln_array(m, 0);
|
||||
Xorriso_destroy_di_array(m, 0);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
if(m->libjte_handle)
|
||||
libjte_destroy(&(m->libjte_handle));
|
||||
#endif
|
||||
|
||||
Xorriso_lst_destroy_all(&(m->jigdo_params), 0);
|
||||
Xorriso_lst_destroy_all(&(m->jigdo_values), 0);
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++)
|
||||
if(m->appended_partitions[i] != NULL)
|
||||
free(m->appended_partitions[i]);
|
||||
|
||||
Xorriso_detach_libraries(m, flag&1);
|
||||
|
||||
free((char *) m);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -284,6 +284,7 @@ ex:;
|
||||
bit1= compare ctime
|
||||
bit2= check only existence of both file objects
|
||||
count one or both missing as "difference"
|
||||
bit26= do not issue message about missing disk file
|
||||
bit27= for Xorriso_path_is_excluded(): bit0
|
||||
bit28= examine eventual disk_path link target rather than link
|
||||
bit29= do not issue pacifier messages
|
||||
@ -320,7 +321,7 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
|
||||
sprintf(respt , "? %s (DISK) : exluded by %s\n",
|
||||
Text_shellsafe(disk_adr, sfe, 0),
|
||||
(ret==1 ? "-not_paths" : "-not_leaf"));
|
||||
if(!(flag&(1<<31)))
|
||||
if(! (flag & ((1 << 31) | (1 << 26))))
|
||||
Xorriso_result(xorriso,0);
|
||||
missing= 1;
|
||||
(*result)|= 1;
|
||||
@ -334,7 +335,7 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
|
||||
if(ret==-1) {
|
||||
sprintf(respt , "? %s (DISK) : cannot lstat() : %s\n",
|
||||
Text_shellsafe(disk_adr, sfe, 0), strerror(errno));
|
||||
if(!(flag&(1<<31)))
|
||||
if(! (flag & ((1 << 31) | (1 << 26))))
|
||||
Xorriso_result(xorriso,0);
|
||||
missing= 1;
|
||||
(*result)|= 1;
|
||||
@ -681,10 +682,11 @@ int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param flag bit0= update rather than compare
|
||||
bit1= find[ix] is in recursion
|
||||
bit2= update_merge : do not delete but mark visited and found
|
||||
@return <=0 error, 1= ok , 2= iso_path was deleted
|
||||
3=ok, do not dive into directory (e.g. because it is a split file)
|
||||
*/
|
||||
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter, void *node,
|
||||
char *iso_path, char *iso_prefix, char *disk_prefix,
|
||||
int flag)
|
||||
{
|
||||
@ -709,22 +711,24 @@ int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||
follow_links= (xorriso->do_follow_links ||
|
||||
(xorriso->do_follow_param && !(flag&2))) <<28;
|
||||
ret= Xorriso_compare_2_files(xorriso, disk_path, iso_path, "", &result,
|
||||
2 | follow_links | ((!(flag&2))<<27) | ((flag&1)<<31));
|
||||
2 | follow_links | ((!!(flag & 4)) << 26)
|
||||
| ((!(flag&2))<<27) | ((flag&1)<<31));
|
||||
/* was once: | ((!(flag&1))<<29) */
|
||||
if(ret<xorriso->find_compare_result)
|
||||
xorriso->find_compare_result= ret;
|
||||
if(flag&1) {
|
||||
if(ret<=0) {
|
||||
if(ret<0)
|
||||
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
|
||||
return(ret);
|
||||
uret= Xorriso_update_interpreter(xorriso, boss_iter, result,
|
||||
disk_path, iso_path, (flag&2)<<1);
|
||||
if(uret<=0)
|
||||
ret= 0;
|
||||
if(uret==2)
|
||||
deleted= 1;
|
||||
}
|
||||
if(ret<0)
|
||||
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
|
||||
return(ret);
|
||||
if(ret > 0)
|
||||
result= 0;
|
||||
uret= Xorriso_update_interpreter(xorriso, boss_iter, node, result,
|
||||
disk_path, iso_path,
|
||||
((flag & 2) << 1) | ((flag & 4) >> 1));
|
||||
if(uret<=0)
|
||||
ret= 0;
|
||||
if(uret==2)
|
||||
deleted= 1;
|
||||
}
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
@ -742,15 +746,19 @@ int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||
Do not call Xorriso_hardlink_update()
|
||||
Overwrite exactly if normal mode would not,
|
||||
else do nothing
|
||||
bit1= do not delete files which are not found under
|
||||
disk_path, but rather mark visited files and mark
|
||||
files which were found.
|
||||
bit2= -follow: this is not a command parameter
|
||||
@return <=0 error, 1= ok , 2= iso_rr_path node object has been deleted ,
|
||||
3= no action taken
|
||||
*/
|
||||
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||
int Xorriso_update_interpreter(struct XorrisO *xorriso,
|
||||
void *boss_iter, void *node,
|
||||
int compare_result, char *disk_path,
|
||||
char *iso_rr_path, int flag)
|
||||
{
|
||||
int ret, deleted= 0, is_split= 0, i, loop_count, late_hardlink_update= 0;
|
||||
int ret= 1, deleted= 0, is_split= 0, i, loop_count, late_hardlink_update= 0;
|
||||
char sfe[5*SfileadrL];
|
||||
struct stat stbuf;
|
||||
struct SplitparT *split_parts= NULL;
|
||||
@ -767,6 +775,15 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||
ret= 3; goto ex;
|
||||
}
|
||||
|
||||
if((flag & 2) && !(compare_result & 2)) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, node,
|
||||
!(compare_result & 1));
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
if(compare_result == 0)
|
||||
{ret= 1; goto ex;}
|
||||
|
||||
if(compare_result&((1<<11)|(1<<13))) {
|
||||
if(flag & 1)
|
||||
{ret= 3; goto ex;}
|
||||
@ -788,7 +805,8 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||
} else {
|
||||
/* Hard link relation has changed resp. was not recorded. */
|
||||
ret= Xorriso_hardlink_update(xorriso, &compare_result,
|
||||
disk_path, iso_rr_path, flag & 4);
|
||||
disk_path, iso_rr_path,
|
||||
(flag & 4) | ((compare_result >> 21) & 2));
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
if(ret == 2)
|
||||
@ -805,15 +823,24 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||
deleted= 1;
|
||||
ret= Xorriso_graft_in(xorriso, boss_iter, disk_path, iso_rr_path,
|
||||
(off_t) 0, (off_t) 0, 2|(flag&4));
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
if(flag & 2) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, NULL, 1);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
}
|
||||
sprintf(xorriso->info_text, "Deleted and re-added ");
|
||||
|
||||
} else if(compare_result&(1)) {
|
||||
delete:;
|
||||
/* disk_adr not existing */
|
||||
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, iso_rr_path, 1);
|
||||
deleted= 1;
|
||||
sprintf(xorriso->info_text, "Deleted ");
|
||||
if(!(flag & 2)) {
|
||||
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, iso_rr_path, 1);
|
||||
deleted= 1;
|
||||
sprintf(xorriso->info_text, "Deleted ");
|
||||
}
|
||||
|
||||
} else if(compare_result&(2|128|(1<<12)|(1<<14)|(1<<15))) {
|
||||
/* iso_adr not existing, size, cannot open iso file, early eof of iso file
|
||||
@ -894,6 +921,11 @@ overwrite:;
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
}
|
||||
if(flag & 2) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, iso_rr_path, NULL, 1);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
if(flag & 1)
|
||||
sprintf(xorriso->info_text, "Widened hard link ");
|
||||
else
|
||||
|
@ -23,16 +23,21 @@ int Xorriso_pfx_disk_path(struct XorrisO *xorriso, char *iso_path,
|
||||
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param node Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param flag bit0= update rather than compare
|
||||
*/
|
||||
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter, void *node,
|
||||
char *iso_path, char *iso_prefix, char *disk_prefix,
|
||||
int flag);
|
||||
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param @node Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
*/
|
||||
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||
int Xorriso_update_interpreter(struct XorrisO *xorriso,
|
||||
void *boss_iter, void *node,
|
||||
int compare_result, char *disk_path,
|
||||
char *iso_rr_path, int flag);
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
|
||||
# configure.ac stems from xorriso/configure_ac.txt and leads to ./configure
|
||||
# Copyright (c) 2007 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||
# Copyright (c) 2007 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
||||
# Provided under GPL version 2 or later.
|
||||
|
||||
AC_INIT([xorriso], [0.6.2], [http://libburnia-project.org])
|
||||
AC_INIT([xorriso], [1.0.8], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
@ -20,16 +20,16 @@ AC_CONFIG_HEADER(config.h)
|
||||
AH_TEMPLATE([Xorriso_standalonE], [Define to prepare sources for statically linked xorriso])
|
||||
AC_DEFINE([Xorriso_standalonE], [])
|
||||
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=8
|
||||
BURN_MAJOR_VERSION=1
|
||||
BURN_MINOR_VERSION=0
|
||||
BURN_MICRO_VERSION=7
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
AC_SUBST(BURN_MINOR_VERSION)
|
||||
AC_SUBST(BURN_MICRO_VERSION)
|
||||
|
||||
LIBISOFS_MAJOR_VERSION=0
|
||||
LIBISOFS_MINOR_VERSION=6
|
||||
LIBISOFS_MICRO_VERSION=37
|
||||
LIBISOFS_MAJOR_VERSION=1
|
||||
LIBISOFS_MINOR_VERSION=0
|
||||
LIBISOFS_MICRO_VERSION=7
|
||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||
@ -130,15 +130,15 @@ AC_ARG_ENABLE(debug,
|
||||
, enable_debug=yes)
|
||||
if test x$enable_debug != xyes; then
|
||||
if test x$GCC = xyes; then
|
||||
CFLAGS="$CFLAGS -O3"
|
||||
CFLAGS="$CFLAGS -fexpensive-optimizations"
|
||||
CFLAGS="-O3 $CFLAGS"
|
||||
CFLAGS="-fexpensive-optimizations $CFLAGS"
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DNDEBUG"
|
||||
CFLAGS="-DNDEBUG $CFLAGS"
|
||||
else
|
||||
if test x$GCC = xyes; then
|
||||
CFLAGS="$CFLAGS -g -pedantic -Wall"
|
||||
CFLAGS="-g -pedantic -Wall $CFLAGS"
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DDEBUG"
|
||||
CFLAGS="-DDEBUG $CFLAGS"
|
||||
fi
|
||||
|
||||
|
||||
@ -215,7 +215,8 @@ then
|
||||
fi
|
||||
|
||||
|
||||
AH_TEMPLATE([Libisofs_with_zliB], [Define to use compression via libz])
|
||||
AH_TEMPLATE([Libisofs_with_zliB], [Define to use compression via zlib])
|
||||
AH_TEMPLATE([LIBJTE_WITH_ZLIB], [Allow libjte to use zlib])
|
||||
AC_ARG_ENABLE(zlib,
|
||||
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
|
||||
, enable_zlib=yes)
|
||||
@ -225,20 +226,74 @@ dnl If not, erase this macro which would enable use of compress2() and others.
|
||||
dnl Linking fails on SuSE 9.0 because zlib has compress2() but lacks
|
||||
dnl compressBound(). So compressBound is the more modern thing to test.
|
||||
dnl The empty parameter after "compressBound" causes -lz.
|
||||
ZLIB_DEF="-DLibisofs_with_zliB"
|
||||
ZLIB_DEF=yes
|
||||
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compressBound, , ZLIB_DEF= ), ZLIB_DEF= )
|
||||
else
|
||||
ZLIB_DEF=
|
||||
fi
|
||||
if test x$ZLIB_DEF = x-DLibisofs_with_zliB
|
||||
if test x$ZLIB_DEF = xyes
|
||||
then
|
||||
AC_DEFINE([Libisofs_with_zliB], [])
|
||||
AC_DEFINE([LIBJTE_WITH_ZLIB], [])
|
||||
fi
|
||||
|
||||
|
||||
# libjte source is included in GNU xorriso. Enable it if zlib is enabled.
|
||||
AH_TEMPLATE([Xorriso_with_libjtE],
|
||||
[Define to use Jigdo Template Extraction via libjte])
|
||||
AH_TEMPLATE([Libisofs_with_libjtE],
|
||||
[Define to use Jigdo Template Extraction via libjte])
|
||||
if test x$ZLIB_DEF = xyes
|
||||
then
|
||||
AC_DEFINE([Xorriso_with_libjtE], [])
|
||||
AC_DEFINE([Libisofs_with_libjtE], [])
|
||||
LIBJTE_DEF=yes
|
||||
echo "enabled built-in libjte"
|
||||
else
|
||||
LIBJTE_DEF=
|
||||
echo "disabled libjte because zlib not enabled or not available"
|
||||
fi
|
||||
|
||||
|
||||
AH_TEMPLATE([THREADED_CHECKSUMS],
|
||||
[Define to use multi-threading in built-in libjte])
|
||||
AC_ARG_ENABLE(jtethreads,
|
||||
[ --enable-jtethreads Enable multi-threading in libjte, default=yes],
|
||||
, enable_jtethreads=yes)
|
||||
if test x$LIBJTE_DEF = xyes
|
||||
then
|
||||
if test "x$enable_jtethreads" = xyes; then
|
||||
AC_DEFINE([THREADED_CHECKSUMS], [])
|
||||
echo "enabled multi-threading in libjte"
|
||||
else
|
||||
echo "disabled multi-threading in libjte"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
AH_TEMPLATE([LIBJTE_WITH_LIBBZ2],
|
||||
[Define to use libbz2 by built-in libjte])
|
||||
AC_ARG_ENABLE(libbz2,
|
||||
[ --enable-libbz2 Enable use of libbz2 by libjte, default=yes],
|
||||
, enable_libbz2=yes)
|
||||
if test "x$enable_libbz2" = xyes -a x$LIBJTE_DEF = xyes ; then
|
||||
dnl Check whether there is the header for libbz2.
|
||||
BZIP2_DEF=yes
|
||||
AC_CHECK_HEADER(bzlib.h, AC_CHECK_LIB(bz2, BZ2_bzCompressInit, , BZIP2_DEF= ), BZIP2_DEF= )
|
||||
else
|
||||
BZIP2_DEF=
|
||||
fi
|
||||
if test x$BZIP2_DEF = xyes
|
||||
then
|
||||
AC_DEFINE([LIBJTE_WITH_LIBBZ2], [])
|
||||
BZIP2_DEF="-DLIBJTE_WITH_LIBBZ2"
|
||||
fi
|
||||
|
||||
|
||||
AH_TEMPLATE([Libburn_use_libcdiO], [Define to use libcdio as system adapter])
|
||||
AC_ARG_ENABLE(libcdio,
|
||||
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
|
||||
[ --enable-libcdio Enable EXPERIMENTAL use of libcdio as system adapter, default=no],
|
||||
, enable_libcdio=no)
|
||||
if test x$enable_libcdio = xyes; then
|
||||
dnl Check whether there is libcdio-devel and libcdio-runtime.
|
||||
|
@ -1,117 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# convert_man_to_html.sh - ts A80118
|
||||
# convert_man_to_html.sh - ts B10309
|
||||
#
|
||||
# Generates a HTML version of man page xorriso.1
|
||||
# Generates a HTML version of man pages xorriso.1 , xorrisofs.1
|
||||
#
|
||||
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
|
||||
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-1.0.4)
|
||||
#
|
||||
|
||||
# set -x
|
||||
xorriso/man_xorriso_to_html.sh
|
||||
xorriso/man_xorrisofs_to_html.sh
|
||||
|
||||
man_dir=$(pwd)"/xorriso"
|
||||
export MANPATH="$man_dir"
|
||||
manpage="xorriso"
|
||||
raw_html=$(pwd)/"xorriso/raw_man_1_xorriso.html"
|
||||
htmlpage=$(pwd)/"xorriso/man_1_xorriso.html"
|
||||
|
||||
if test -r "$man_dir"/"$manpage".1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
echo "Cannot find readable man page source $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -e "$man_dir"/man1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
ln -s . "$man_dir"/man1
|
||||
fi
|
||||
|
||||
if test "$1" = "-work_as_filter"
|
||||
then
|
||||
|
||||
# set -x
|
||||
|
||||
sed \
|
||||
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
|
||||
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorriso, manual, xorriso, CD, CD-RW, CD-R, burning, cdrecord, compatible"><META NAME="robots" CONTENT="follow">/' \
|
||||
-e 's/<title>XORRISO<\/title>/<title>man 1 xorriso<\/title>/' \
|
||||
-e 's/<h1 align=center>XORRISO<\/h1>/<h1 align=center>man 1 xorriso<\/h1>/' \
|
||||
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
|
||||
-e 's/<b>Overview of features:<\/b>/\ <BR><b>Overview of features:<\/b>/' \
|
||||
-e 's/<b>General information paragraphs:<\/b>/\ <BR><b>General information paragraphs:<\/b>/' \
|
||||
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
-e 's/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
||||
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying, Blind/\ <BR><b>Creating, Growing, Modifying, Blind/' \
|
||||
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||
-e 's/^-dev /\ \ -dev /' \
|
||||
-e 's/^-devices /\ \ -devices /' \
|
||||
-e 's/<b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\ <BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
|
||||
-e 's/<b>Command processing:<\/b>/\ <BR><b>Command processing:<\/b>/' \
|
||||
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\ <BR><b>Dialog, Readline, Result pager:<\/b>/' \
|
||||
-e 's/<b>Aquiring source and target drive:<\/b>/\ <BR><b>Aquiring source and target drive:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Influencing the behavior of image/\ <BR><b>Influencing the behavior of image/' \
|
||||
-e 's/<b>Inserting files into ISO image:<\/b>/\ <BR><b>Inserting files into ISO image:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>File manipulations:<\/b>/\ <BR><b>File manipulations:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Tree traversal command -find:<\/b>/\ <BR><b>Tree traversal command -find:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^<p><b>−iso_rr_pattern/<p>\ <BR><b>\−iso_rr_pattern/' \
|
||||
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
|
||||
-e 's/<b>Filters for data file content:<\/b>/\ <BR><b>Filters for data file content:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Writing the result, drive control:<\/b>/\ <BR><b>Writing the result, drive control:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^-find \/ /\ \ -find \/ /' \
|
||||
-e 's/<b>Settings for file insertion:<\/b>/\ <BR><b>Settings for file insertion:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^$<\/b> ln -s/\ \ $<\/b> ln -s/' \
|
||||
-e 's/<b>Settings for result writing:<\/b>/\ <BR><b>Settings for result writing:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^706k = 706kB/\ \ 706k = 706kB/' \
|
||||
-e 's/^5540k = 5540kB/\ \ 5540k = 5540kB/' \
|
||||
-e 's/<b>Character sets:<\/b>/\ <BR><b>Character sets:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Exception processing:<\/b>/\ <BR><b>Exception processing:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>El Torito bootable ISO images:<\/b>/\ <BR><b>El Torito bootable ISO images:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Dialog mode control:<\/b>/\ <BR><b>Dialog mode control:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
||||
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Evaluation of readability and recovery:<\/b>/\ <BR><b>Evaluation of readability and recovery:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>osirrox ISO-to-disk restore options:<\/b>/\ <BR><b>osirrox ISO-to-disk restore options:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
||||
-e 's/^features:<\/b>/features:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Support for frontend/\ <BR><b>Support for frontend/' \
|
||||
-e 's/^listening at stdout:<\/b>/listening at stdout:<\/b><BR>\ <BR>/' \
|
||||
-e 's/xorriso -outdev \/dev\/sr2 \\ -blank fast \\ -pathspecs on/xorriso -outdev \/dev\/sr2 -blank fast -pathspecs on/' \
|
||||
-e 's/\\ -add \\ \/sounds=\/home\/me\/sounds \\ \/pictures \\ -- \\ -rm_r \\/ -add \/sounds=\/home\/me\/sounds \/pictures -- -rm_r /' \
|
||||
-e 's/\/sounds\/indecent \\ \’\/pictures\/\*private\*\’ \\/\/sounds\/indecent \’\/pictures\/*private*\’ /' \
|
||||
-e 's/\/pictures\/confidential \\ -- \\ -add \\/\/pictures\/confidential -- -add/' \
|
||||
-e 's/xorriso -dev \/dev\/sr2 \\ -rm_r \/sounds -- \\ -mv \\/xorriso -dev \/dev\/sr2 -rm_r \/sounds -- -mv /' \
|
||||
-e 's/\/pictures\/confidential \\ \/pictures\/restricted \\ -- \\ -chmod/\/pictures\/confidential \/pictures\/restricted -- -chmod/' \
|
||||
-e 's/go-rwx \/pictures\/restricted -- \\ -pathsspecs on \\ -add \\/go-rwx \/pictures\/restricted -- -pathsspecs on -add /' \
|
||||
-e 's/\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy /\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy/' \
|
||||
-e 's/\/movies=\/home\/me\/prepared_for_dvd\/movies \\ -- \\ -commit/\/movies=\/home\/me\/prepared_for_dvd\/movies -- -commit/' \
|
||||
-e 's/xorriso -indev \/dev\/sr2 \\ -rm_r \/sounds -- \\/xorriso -indev \/dev\/sr2 -rm_r \/sounds -- /' \
|
||||
-e 's/-outdev \/dev\/sr0 -blank fast \\ -commit -eject all/-outdev \/dev\/sr0 -blank fast -commit -eject all/' \
|
||||
-e 's/See section FILES/See section <A HREF="#FILES">FILES<\/A>/' \
|
||||
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
|
||||
<"$2" >"$htmlpage"
|
||||
|
||||
set +x
|
||||
|
||||
chmod u+rw,go+r,go-w "$htmlpage"
|
||||
echo "Emerged file:"
|
||||
ls -lL "$htmlpage"
|
||||
|
||||
else
|
||||
|
||||
export BROWSER='cp "%s" '"$raw_html"
|
||||
man -H "$manpage"
|
||||
"$0" -work_as_filter "$raw_html"
|
||||
rm "$raw_html"
|
||||
rm "$man_dir"/man1
|
||||
|
||||
fi
|
||||
|
@ -1087,6 +1087,7 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
time_t date= 0;
|
||||
mode_t mode_or= 0, mode_and= ~1;
|
||||
char *target, *text_2, sfe[5*SfileadrL], *disk_prefix, iso_path[SfileadrL];
|
||||
char *basename;
|
||||
struct FindjoB *subjob;
|
||||
struct stat stbuf;
|
||||
|
||||
@ -1131,8 +1132,8 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
if(ret<xorriso->find_compare_result)
|
||||
xorriso->find_compare_result= ret;
|
||||
if(ret==0) {
|
||||
uret= Xorriso_update_interpreter(xorriso, NULL, compare_result,
|
||||
abs_path, iso_path, (flag&1)<<2);
|
||||
uret= Xorriso_update_interpreter(xorriso, NULL, NULL, compare_result,
|
||||
abs_path, iso_path, ((flag&1)<<2) | 2);
|
||||
if(uret<=0)
|
||||
ret= 0;
|
||||
}
|
||||
@ -1167,6 +1168,16 @@ int Xorriso_findx_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
{ret= 1; goto ex;}
|
||||
} else if(action == 40) { /* estimate_size */
|
||||
basename= strrchr(abs_path, '/');
|
||||
if(basename != NULL)
|
||||
basename++;
|
||||
else
|
||||
basename= abs_path;
|
||||
ret= lstat(abs_path, &stbuf);
|
||||
if(ret != -1)
|
||||
ret= Xorriso_estimate_file_size(xorriso, job, basename, stbuf.st_mode,
|
||||
stbuf.st_size, 0);
|
||||
} else {
|
||||
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
|
||||
Xorriso_result(xorriso, 0);
|
||||
@ -1347,10 +1358,12 @@ ex:;
|
||||
bit5= -extract_single: eventually do not insert directory tree
|
||||
*/
|
||||
int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
|
||||
char **src_array, char **tgt_array, int flag)
|
||||
char **src_array, char **tgt_array,
|
||||
int *problem_count, int flag)
|
||||
{
|
||||
int i, ret, with_node_array= 0, hflag= 0, hret;
|
||||
|
||||
*problem_count= 0;
|
||||
if(!(((xorriso->ino_behavior & 16) && xorriso->do_restore_sort_lba) ||
|
||||
(xorriso->ino_behavior & 4) || (flag & 1))) {
|
||||
ret= Xorriso_make_hln_array(xorriso, 0);
|
||||
@ -1370,8 +1383,9 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
|
||||
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
|
||||
(off_t) 0, (off_t) 0, hflag);
|
||||
if(ret <= 0) {
|
||||
(*problem_count)++;
|
||||
hret= Xorriso_eval_problem_status(xorriso, ret, 0);
|
||||
if(ret < 0)
|
||||
if(hret < 0)
|
||||
goto ex;
|
||||
}
|
||||
with_node_array= 1;
|
||||
@ -1392,8 +1406,9 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
|
||||
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
|
||||
(off_t) 0, (off_t) 0, 2 << 7);
|
||||
if(ret <= 0) {
|
||||
(*problem_count)++;
|
||||
hret= Xorriso_eval_problem_status(xorriso, ret, 0);
|
||||
if(ret < 0)
|
||||
if(hret < 0)
|
||||
goto ex;
|
||||
}
|
||||
}
|
||||
@ -1411,6 +1426,7 @@ int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
|
||||
ret= Xorriso_restore(xorriso, src_array[i], tgt_array[i],
|
||||
(off_t) 0, (off_t) 0, 0);
|
||||
if(ret <= 0) {
|
||||
(*problem_count)++;
|
||||
hret= Xorriso_eval_problem_status(xorriso, ret, flag & 32);
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
|
@ -69,7 +69,8 @@ int Xorriso_findx(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
bit5= -extract_single: eventually do not insert directory tree
|
||||
*/
|
||||
int Xorriso_restore_sorted(struct XorrisO *xorriso, int count,
|
||||
char **src_array, char **tgt_array, int flag);
|
||||
char **src_array, char **tgt_array,
|
||||
int *problem_count, int flag);
|
||||
|
||||
/* @param flag bit0= path is a directory
|
||||
bit2= recursion: do not reassure in mode 2 "tree"
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -225,6 +225,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (4 | 32)))
|
||||
aquire_flag|= 64;
|
||||
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||
burn_allow_drive_role_4(1 | (xorriso->early_stdio_test & 14));
|
||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
||||
burn_preset_device_open(1, 0, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
@ -368,17 +369,18 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
ext|= isoburn_ropt_noea;
|
||||
if(xorriso->ino_behavior & 1)
|
||||
ext|= isoburn_ropt_noino;
|
||||
|
||||
#ifdef isoburn_ropt_nomd5
|
||||
if(!(xorriso->do_md5 & 1))
|
||||
ext|= isoburn_ropt_nomd5;
|
||||
#endif
|
||||
if(xorriso->do_md5 & 32)
|
||||
ext|= isoburn_ropt_nomd5tag;
|
||||
|
||||
isoburn_ropt_set_extensions(ropts, ext);
|
||||
|
||||
isoburn_ropt_set_default_perms(ropts, (uid_t) 0, (gid_t) 0, (mode_t) 0555);
|
||||
isoburn_ropt_set_input_charset(ropts, xorriso->in_charset);
|
||||
isoburn_ropt_set_auto_incharset(ropts, !!(xorriso->do_aaip & 512));
|
||||
isoburn_ropt_set_displacement(ropts, xorriso->displacement,
|
||||
xorriso->displacement_sign);
|
||||
|
||||
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
|
||||
Xorriso_pacifier_reset(xorriso, 0);
|
||||
@ -420,8 +422,11 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, sev, 0);
|
||||
if(read_ret == ISO_SB_TREE_CORRUPTED && (xorriso->do_md5 & 1)) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"You might get a questionable ISO image tree by option -md5 'off'.",
|
||||
0, "HINT", 0);
|
||||
"This might be false MD5 alarm if an add-on session was written by growisofs.",
|
||||
0, "HINT", 0);
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"In this case you get an ISO image tree by option -md5 'load_check_off'",
|
||||
0, "HINT", 0);
|
||||
} else if(xorriso->img_read_error_mode!=0) {
|
||||
Xorriso_msgs_submit(xorriso, 0, "You might get a partial or altered ISO image tree by option -error_behavior 'image_loading' 'best_effort' if -abort_on is set to be tolerant enough.",
|
||||
0, "HINT", 0);
|
||||
@ -498,15 +503,16 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
|
||||
if(!(flag&32)) {
|
||||
Xorriso_toc(xorriso, 1 | 8);
|
||||
if(xorriso->loaded_volid[0]!=0) {
|
||||
sprintf(xorriso->info_text,"Volume id : '%s'\n",
|
||||
xorriso->loaded_volid);
|
||||
Xorriso_info(xorriso, 0);
|
||||
if(strcmp(xorriso->loaded_volid, xorriso->volid) != 0 &&
|
||||
!xorriso->volid_default) {
|
||||
sprintf(xorriso->info_text, "New volume id: '%s'\n", xorriso->volid);
|
||||
if(xorriso->loaded_volid[0] != 0 &&
|
||||
(state == BURN_DISC_APPENDABLE || state == BURN_DISC_FULL)) {
|
||||
sprintf(xorriso->info_text,"Volume id : '%s'\n",
|
||||
xorriso->loaded_volid);
|
||||
Xorriso_info(xorriso, 0);
|
||||
}
|
||||
}
|
||||
if(strcmp(xorriso->loaded_volid, xorriso->volid) != 0 &&
|
||||
!xorriso->volid_default) {
|
||||
sprintf(xorriso->info_text, "New volume id: '%s'\n", xorriso->volid);
|
||||
Xorriso_info(xorriso, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -828,14 +834,18 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
if(profile_no == 0x0002 && s == BURN_DISC_EMPTY)
|
||||
profile_no= 0;
|
||||
sprintf(respt, "Media current: ");
|
||||
drive_role= burn_drive_get_drive_role(drive);
|
||||
if (profile_no > 0 && ret > 0) {
|
||||
if (profile_name[0])
|
||||
sprintf(respt+strlen(respt), "%s", profile_name);
|
||||
else
|
||||
sprintf(respt+strlen(respt), "%4.4Xh", profile_no);
|
||||
drive_role= burn_drive_get_drive_role(drive);
|
||||
if(drive_role==2)
|
||||
sprintf(respt+strlen(respt), ", overwriteable");
|
||||
else if(drive_role == 4)
|
||||
sprintf(respt+strlen(respt), ", random read-only");
|
||||
else if(drive_role == 5)
|
||||
sprintf(respt+strlen(respt), ", random write-only");
|
||||
else if(drive_role==0 || drive_role==3)
|
||||
sprintf(respt+strlen(respt), ", sequential");
|
||||
strcat(respt, "\n");
|
||||
@ -894,15 +904,21 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
|
||||
if (disc==NULL) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
|
||||
nwa= start_byte / 2048;
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(flag&1)
|
||||
if(drive_role == 5 && s == BURN_DISC_APPENDABLE) {
|
||||
ret= burn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa);
|
||||
if(ret == 1)
|
||||
num_data= nwa;
|
||||
} else {
|
||||
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
|
||||
nwa= start_byte / 2048;
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(flag&1)
|
||||
{ret= 0; goto ex;}
|
||||
sprintf(xorriso->info_text, "Cannot obtain Table Of Content");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
{ret= 0; goto ex;}
|
||||
sprintf(xorriso->info_text, "Cannot obtain Table Of Content");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
}
|
||||
|
||||
/* fabricate TOC */
|
||||
@ -917,13 +933,13 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
1, 0, image_blocks, volume_id);
|
||||
nwa= image_blocks;
|
||||
} else {
|
||||
nwa= 0;
|
||||
nwa= num_data;
|
||||
ret= burn_disc_get_formats(drive, &status, &size, &dummy,
|
||||
&num_formats);
|
||||
if(ret>0 && status==BURN_FORMAT_IS_FORMATTED)
|
||||
nwa= size/2048;
|
||||
sprintf(respt, "%13s: %3d , %9d , %9ds , \n",
|
||||
typetext, 1, 0, nwa);
|
||||
typetext, 1, num_data, nwa);
|
||||
}
|
||||
if(!(flag&1))
|
||||
Xorriso_toc_line(xorriso, flag & 8);
|
||||
@ -1019,8 +1035,8 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
{ret= 1; goto ex;}
|
||||
num_wasted= lba - num_payload;
|
||||
num_nondata= lba - num_data;
|
||||
Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1);
|
||||
|
||||
Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1);
|
||||
sprintf(respt, "Media summary: %d session%s, %d data blocks, %s data",
|
||||
num_sessions, (num_sessions==1 ? "" : "s"), num_data, mem_text);
|
||||
num_free= isoburn_disc_available_space(drive, NULL);
|
||||
@ -1157,7 +1173,7 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
||||
*/
|
||||
int Xorriso_list_formats(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, i, status, num_formats, profile_no, type;
|
||||
int ret, i, status, num_formats, profile_no, type, alloc_blocks, free_blocks;
|
||||
off_t size;
|
||||
unsigned dummy;
|
||||
char status_text[80], profile_name[90], *respt;
|
||||
@ -1206,6 +1222,12 @@ int Xorriso_list_formats(struct XorrisO *xorriso, int flag)
|
||||
sprintf(status_text, "illegal status according to MMC-5");
|
||||
sprintf(respt, "Format status: %s\n", status_text);
|
||||
Xorriso_result(xorriso,0);
|
||||
ret= burn_disc_get_bd_spare_info(drive, &alloc_blocks, &free_blocks, 0);
|
||||
if(ret == 1) {
|
||||
sprintf(respt, "BD Spare Area: %d blocks consumed, %d blocks available\n",
|
||||
alloc_blocks - free_blocks, free_blocks);
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
|
||||
for (i= 0; i < num_formats; i++) {
|
||||
ret= burn_disc_get_format_descr(drive, i, &type, &size, &dummy);
|
||||
@ -1283,6 +1305,12 @@ int Xorriso_atip(struct XorrisO *xorriso, int flag)
|
||||
else if(ret==3)
|
||||
sprintf(respt+strlen(respt), "%s\n",
|
||||
"Emulated (stdio-drive, sequential write-only)");
|
||||
else if(ret == 4)
|
||||
sprintf(respt+strlen(respt), "%s\n",
|
||||
"Emulated (stdio-drive, 2k random read-only)");
|
||||
else if(ret == 5)
|
||||
sprintf(respt+strlen(respt), "%s\n",
|
||||
"Emulated (stdio-drive, 2k random write-only)");
|
||||
else if(ret!=1)
|
||||
sprintf(respt+strlen(respt), "%s\n","Emulated (stdio-drive)");
|
||||
else
|
||||
@ -1530,6 +1558,7 @@ int Xorriso_scsi_log(struct XorrisO *xorriso, int flag)
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_check_md5_range(struct XorrisO *xorriso, off_t start_lba,
|
||||
off_t end_lba, char md5[16], int flag)
|
||||
{
|
||||
@ -1609,7 +1638,31 @@ int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
|
||||
md5, 0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_check_for_abort(struct XorrisO *xorriso,
|
||||
char *abort_file_path,
|
||||
double post_read_time,
|
||||
double *last_abort_file_time, int flag)
|
||||
{
|
||||
struct stat stbuf;
|
||||
|
||||
if(abort_file_path[0] == 0)
|
||||
return(0);
|
||||
if(post_read_time - *last_abort_file_time >= 0.1) {
|
||||
if(stat(abort_file_path, &stbuf) != -1) {
|
||||
if(stbuf.st_mtime >= xorriso->start_time) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-check_media: Found fresh abort_file=%s", abort_file_path);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
*last_abort_file_time= post_read_time;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= this is a follow-up session (i.e. on CD: TAO)
|
||||
bit1= no pacifier messages
|
||||
@ -1632,7 +1685,6 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
|
||||
off_t data_count, to_read, read_count= 0, write_amount;
|
||||
double pre_read_time, post_read_time, time_diff, total_time_diff= 0;
|
||||
double last_abort_file_time= 0;
|
||||
struct stat stbuf;
|
||||
void *ctx= NULL, *cloned_ctx= NULL;
|
||||
char md5[16], tag_md5[16];
|
||||
uint32_t pos, range_start, range_size, next_tag= 0, lba, md5_spot_lba= 0;
|
||||
@ -1673,21 +1725,10 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
|
||||
post_read_time= Sfile_microtime(0);
|
||||
for(i= 0; i < block_count; i+= to_read) {
|
||||
skip_reading= 0;
|
||||
|
||||
if(job->abort_file_path[0]) {
|
||||
if(post_read_time - last_abort_file_time >= 0.1) {
|
||||
if(stat(job->abort_file_path, &stbuf) != -1) {
|
||||
if(stbuf.st_mtime >= xorriso->start_time) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-check_media: Found fresh abort_file=%s",
|
||||
job->abort_file_path);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
goto abort_check;
|
||||
}
|
||||
}
|
||||
last_abort_file_time= post_read_time;
|
||||
}
|
||||
}
|
||||
ret= Xorriso_check_for_abort(xorriso, job->abort_file_path, post_read_time,
|
||||
&last_abort_file_time, 0);
|
||||
if(ret == 1)
|
||||
goto abort_check;
|
||||
if(job->item_limit > 0 &&
|
||||
Spotlist_count(spotlist, 0) + 2 >= job->item_limit) {
|
||||
sprintf(xorriso->info_text, "-check_media: Reached item_limit=%d",
|
||||
@ -2003,8 +2044,8 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
||||
int media_blocks= 0, read_chunk= 16, ret, mode, start_lba= 0;
|
||||
int blocks, os_errno, i, j, last_track_end= -1, track_blocks, track_lba;
|
||||
int num_sessions, num_tracks, declare_untested= 0, md5_start;
|
||||
int read_capacity= -1, end_lba, hret, count, quality;
|
||||
char *toc_info= NULL;
|
||||
int read_capacity= -1, end_lba, hret, count, quality, profile_no;
|
||||
char *toc_info= NULL, profile_name[80];
|
||||
struct burn_drive *drive;
|
||||
struct burn_drive_info *dinfo;
|
||||
struct isoburn_toc_disc *isoburn_disc= NULL;
|
||||
@ -2063,6 +2104,9 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
||||
ret= burn_get_read_capacity(drive, &read_capacity, 0);
|
||||
if(ret <= 0)
|
||||
read_capacity= -1;
|
||||
ret = burn_disc_get_profile(drive, &profile_no, profile_name);
|
||||
if(ret <= 0)
|
||||
profile_no= 0;
|
||||
|
||||
if(job->max_lba >= 0) {
|
||||
blocks= job->max_lba + 1 - start_lba;
|
||||
@ -2087,6 +2131,16 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
||||
continue;
|
||||
track_lba= isoburn_entry.start_lba;
|
||||
track_blocks= isoburn_entry.track_blocks;
|
||||
|
||||
/* The last track of an appendable BD-R reports more blocks than the
|
||||
read capacity allows. All BD-R track sizes are multiple of 64 kB.
|
||||
*/
|
||||
if (i == num_sessions - 1 &&
|
||||
(track_lba + track_blocks > read_capacity &&
|
||||
track_lba + track_blocks < read_capacity + 32 &&
|
||||
(profile_no == 0x41 || profile_no == 0x40)))
|
||||
track_blocks= read_capacity - track_lba;
|
||||
|
||||
md5_start= track_lba;
|
||||
if(i == 0 && j == 0) {
|
||||
if(track_lba == 32) {
|
||||
|
@ -33,5 +33,10 @@ int Xorriso_get_drive_handles(struct XorrisO *xorriso,
|
||||
struct burn_drive **drive,
|
||||
char *attempt, int flag);
|
||||
|
||||
int Xorriso_check_for_abort(struct XorrisO *xorriso,
|
||||
char *abort_file_path,
|
||||
double post_read_time,
|
||||
double *last_abort_file_time, int flag);
|
||||
|
||||
#endif /* ! Xorriso_pvt_drive_mgt_includeD */
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -118,6 +118,8 @@ int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
|
||||
if(cmd != NULL) {
|
||||
if(cmd->refcount > 0)
|
||||
return(0);
|
||||
if(cmd->path != NULL)
|
||||
free(cmd->path);
|
||||
if(cmd->suffix != NULL)
|
||||
free(cmd->suffix);
|
||||
if(cmd->argv != NULL) {
|
||||
@ -128,6 +130,7 @@ int Xorriso_extf_destroy(struct XorrisO *xorriso, struct Xorriso_extF **filter,
|
||||
}
|
||||
if(cmd->name != NULL)
|
||||
free(cmd->name);
|
||||
free((char *) cmd);
|
||||
}
|
||||
free((char *) *filter);
|
||||
*filter= NULL;
|
||||
@ -395,7 +398,7 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
||||
sprintf(xorriso->info_text,
|
||||
"-set_filter: UID and EUID differ. Will not run external programs.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
return(0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
#endif /* ! Xorriso_allow_extf_suiD */
|
||||
|
||||
|
@ -377,7 +377,11 @@ int Findjob_new(struct FindjoB **o, char *start_path, int flag)
|
||||
if(m->start_path==NULL)
|
||||
goto failed;
|
||||
m->found_path= NULL;
|
||||
m->estim_upper_size= 0;
|
||||
m->estim_lower_size= 0;
|
||||
m->subjob= NULL;
|
||||
m->errmsg[0]= 0;
|
||||
m->errn= 0;
|
||||
|
||||
ret= Exprnode_new(&(m->test_tree), m, NULL, "-find", (m->use_shortcuts)<<1);
|
||||
if(ret<=0)
|
||||
|
@ -154,6 +154,10 @@ struct FindjoB {
|
||||
37= mkisofs_r
|
||||
38= sort_weight number
|
||||
39= hide on|iso_rr|joliet|off
|
||||
40= estimate_size
|
||||
41= update_merge disk_equiv
|
||||
42= rm_merge
|
||||
43= clear_merge
|
||||
*/
|
||||
int action;
|
||||
int prune;
|
||||
@ -167,6 +171,8 @@ struct FindjoB {
|
||||
int type; /* see Xorriso_set_time flag, also used as weight */
|
||||
time_t date;
|
||||
char *found_path;
|
||||
off_t estim_upper_size;
|
||||
off_t estim_lower_size;
|
||||
struct FindjoB *subjob;
|
||||
|
||||
/* Errors */
|
||||
|
@ -376,7 +376,7 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
|
||||
strcpy(bspec, "dir=/boot/isolinux");
|
||||
memset(zeros, 0, 28);
|
||||
if(bspec[0] && platform_id == 0 && patch_isolinux &&
|
||||
load_size == 2048 && is_default_id) {
|
||||
load_size == 2048 && is_default_id && emul == 0) {
|
||||
sprintf(line, "-boot_image isolinux %s\n", bspec);
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
return(1);
|
||||
@ -388,7 +388,7 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
|
||||
file_size= ((stbuf.st_size / (off_t) 512) +
|
||||
!!(stbuf.st_size % (off_t) 512)) * 512;
|
||||
if(platform_id == 0xef && !patch_isolinux &&
|
||||
load_size == file_size && is_default_id) {
|
||||
load_size == file_size && is_default_id && emul == 0) {
|
||||
sprintf(line, "-boot_image any efi_path=");
|
||||
Text_shellsafe(bin_path, line, 1);
|
||||
strcat(line, "\n");
|
||||
@ -403,6 +403,12 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
|
||||
strcat(line, "\n");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (emul == 0);
|
||||
sprintf(line, "-boot_image %s emul_type=%s\n",
|
||||
form, emul == 2 ? "diskette" : emul == 1 ? "hard_disk" : "no_emulation");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (platform_id == 0 || (flag & 4));
|
||||
sprintf(line, "-boot_image %s platform_id=0x%-2.2x\n", form, platform_id);
|
||||
@ -449,6 +455,66 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
bit0= do only report non-default settings
|
||||
bit1= do only report to fp
|
||||
*/
|
||||
int Xorriso_boot_status_non_mbr(struct XorrisO *xorriso, IsoImage *image,
|
||||
char *filter, FILE *fp, int flag)
|
||||
{
|
||||
int i, num_boots, sa_type;
|
||||
char *paths[15], *line;
|
||||
|
||||
line= xorriso->result_line;
|
||||
|
||||
sa_type= (xorriso->system_area_options & 0xfc) >> 2;
|
||||
if(sa_type == 3) {
|
||||
sprintf(line, "-boot_image any sparc_label=");
|
||||
Text_shellsafe(xorriso->ascii_disc_label, line, 1);
|
||||
strcat(line, "\n");
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
return(0);
|
||||
}
|
||||
if(sa_type != 1 && sa_type != 2)
|
||||
return(0);
|
||||
num_boots= iso_image_get_mips_boot_files(image, paths, 0);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(num_boots <= 0)
|
||||
return(num_boots);
|
||||
if(sa_type == 2)
|
||||
num_boots= 1;
|
||||
for(i= 0; i < num_boots; i++) {
|
||||
sprintf(line, "-boot_image any mips%s_path=", sa_type ==2 ? "el" : "");
|
||||
Text_shellsafe(paths[i], line, 1);
|
||||
strcat(line, "\n");
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
}
|
||||
return(num_boots);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
bit0= do only report non-default settings
|
||||
bit1= do only report to fp
|
||||
*/
|
||||
int Xorriso_append_part_status(struct XorrisO *xorriso, IsoImage *image,
|
||||
char *filter, FILE *fp, int flag)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
if(xorriso->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
sprintf(xorriso->result_line, "-append_partition %d 0x%2.2x ",
|
||||
i + 1, (unsigned int) xorriso->appended_part_types[i]);
|
||||
Text_shellsafe(xorriso->appended_partitions[i], xorriso->result_line, 1);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
bit0= do only report non-default settings
|
||||
bit1= do only report to fp
|
||||
@ -471,7 +537,21 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||
line= xorriso->result_line;
|
||||
no_defaults= flag & 1;
|
||||
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to print boot info", 2 | 16);
|
||||
if(ret<=0)
|
||||
goto no_image;
|
||||
image= isoburn_get_attached_image(drive);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(image == NULL)
|
||||
goto no_image;
|
||||
|
||||
ret= Xorriso_boot_status_non_mbr(xorriso, image, filter, fp, flag & 3);
|
||||
if(ret < 0) /* == 0 is normal */
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
if(xorriso->boot_count == 0 && xorriso->boot_image_bin_path[0] == 0) {
|
||||
no_image:;
|
||||
if(xorriso->patch_isolinux_image & 1) {
|
||||
sprintf(line, "-boot_image %s patch\n",
|
||||
xorriso->patch_isolinux_image & 2 ? "grub" : form);
|
||||
@ -485,17 +565,9 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||
}
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
ret= 1; goto ex;
|
||||
ret= 1; goto after_el_torito;
|
||||
}
|
||||
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to print boot info", 16);
|
||||
if(ret<=0)
|
||||
{ret= 0; goto ex;}
|
||||
image= isoburn_get_attached_image(drive);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(image == NULL)
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
if(xorriso->boot_image_bin_path[0] || xorriso->boot_count > 0)
|
||||
bin_path_in_use= 1;
|
||||
@ -531,6 +603,12 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||
load_size= el_torito_get_load_size(boots[i]) * 512;
|
||||
el_torito_get_id_string(boots[i], id_string);
|
||||
el_torito_get_selection_crit(boots[i], sel_crit);
|
||||
if(media_type == ELTORITO_FLOPPY_EMUL)
|
||||
media_type= 2;
|
||||
else if(media_type == ELTORITO_HARD_DISC_EMUL)
|
||||
media_type= 1;
|
||||
else
|
||||
media_type= 0;
|
||||
ret= Xorriso_boot_item_status(xorriso, xorriso->boot_image_cat_path,
|
||||
path, platform_id, patch & 1, media_type,
|
||||
load_size, id_string, sel_crit, "any",
|
||||
@ -577,6 +655,11 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
||||
after_el_torito:;
|
||||
ret = Xorriso_append_part_status(xorriso, image, filter, fp, flag & 3);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
||||
ret= 1;
|
||||
ex:
|
||||
if(boots != NULL)
|
||||
@ -650,10 +733,15 @@ no_boot:;
|
||||
if(ret != 1)
|
||||
goto no_boot;
|
||||
|
||||
ret= Xorriso_path_from_lba(xorriso, NULL, xorriso->loaded_boot_bin_lba,
|
||||
path, 1);
|
||||
if(ret > 0)
|
||||
bin_path_valid= 1;
|
||||
ret= iso_image_get_all_boot_imgs(image, &num_boots, &boots, &bootnodes, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret != 1) {
|
||||
num_boots= 0;
|
||||
} else {
|
||||
ret= Xorriso_path_from_node(xorriso, (IsoNode *) bootnodes[0], path, 0);
|
||||
if(ret > 0)
|
||||
bin_path_valid= 1;
|
||||
}
|
||||
sprintf(respt, "Boot record : El Torito");
|
||||
if(bin_path_valid)
|
||||
ret= Xorriso_is_isohybrid(xorriso, bootimg_node, 0);
|
||||
@ -712,9 +800,7 @@ no_boot:;
|
||||
strcat(respt, "\n");
|
||||
Xorriso_toc_line(xorriso, flag & 8);
|
||||
|
||||
ret= iso_image_get_all_boot_imgs(image, &num_boots, &boots, &bootnodes, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret == 1 && num_boots > 1) {
|
||||
if(num_boots > 1) {
|
||||
for(i= 1; i < num_boots; i++) {
|
||||
ret= Xorriso_path_from_node(xorriso, (IsoNode *) bootnodes[i], path, 0);
|
||||
if(ret > 0)
|
||||
@ -768,6 +854,8 @@ int Xorriso_get_volume(struct XorrisO *xorriso, IsoImage **volume,
|
||||
|
||||
int Xorriso_change_is_pending(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
if(flag & 1)
|
||||
return(xorriso->volset_change_pending == 1);
|
||||
return(!!xorriso->volset_change_pending);
|
||||
}
|
||||
|
||||
@ -781,7 +869,9 @@ int Xorriso_set_change_pending(struct XorrisO *xorriso, int flag)
|
||||
ret= Xorriso_get_volume(xorriso, &image, 1);
|
||||
if(ret <= 0)
|
||||
return ret;
|
||||
xorriso->volset_change_pending= 1;
|
||||
/* Do not override mark of -as mkisofs -print-size */
|
||||
if(xorriso->volset_change_pending != 2)
|
||||
xorriso->volset_change_pending= 1;
|
||||
if(!(flag & 1))
|
||||
xorriso->hln_change_pending= 1;
|
||||
return(1);
|
||||
@ -798,7 +888,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
||||
char *adr_value, char *cmd, int flag)
|
||||
{
|
||||
int ret, lba, track, session, params_flag= 0, is_safe= 0, is_extra_drive= 0;
|
||||
int give_up= 0, mount_chardev= 0, status;
|
||||
int give_up= 0, mount_chardev= 0, status, aquire_flag= 0;
|
||||
char volid[33], *devadr, mount_command[SfileadrL], adr_data[163], *adr_pt;
|
||||
char *dev_path, libburn_adr[BURN_DRIVE_ADR_LEN + SfileadrL];
|
||||
char sfe[5 * SfileadrL], *dpt, *sysname= "";
|
||||
@ -867,7 +957,10 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
||||
if(ret == 0 && strncmp(dev, "stdio:", 6) != 0)
|
||||
sprintf(libburn_adr, "stdio:%s", dev);
|
||||
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
|
||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, 1);
|
||||
aquire_flag= 1;
|
||||
if((xorriso->toc_emulation_flag & 2) && adr_mode == 3)
|
||||
aquire_flag|= 16;
|
||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
||||
burn_preset_device_open(1, 0, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret <= 0)
|
||||
@ -887,7 +980,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
if(session <= 0 || track <= 0 || ret == 2) {
|
||||
if(((session <= 0 || track <= 0) && !(aquire_flag & 16)) || ret == 2) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"-mount : Given address does not point to an ISO 9660 session",
|
||||
0, "FAILURE", 0);
|
||||
@ -959,3 +1052,84 @@ ex:;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= give up all boot file paths
|
||||
bit1= refuse if already a path is added
|
||||
*/
|
||||
int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag)
|
||||
{
|
||||
int ret;
|
||||
IsoImage *image;
|
||||
char *paths[15];
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &image, 0);
|
||||
if(ret <= 0)
|
||||
return ret;
|
||||
if(flag & 1) {
|
||||
iso_image_give_up_mips_boot(image, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
return(1);
|
||||
}
|
||||
if(flag & 2) {
|
||||
ret= iso_image_get_mips_boot_files(image, paths, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret < 0)
|
||||
goto report_error;
|
||||
if(ret > 0) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"There is already a boot image file registered.",
|
||||
0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
ret = iso_image_add_mips_boot_file(image, path, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if (ret < 0) {
|
||||
report_error:;
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when adding MIPS boot file",
|
||||
0, "FAILURE", 1);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_coordinate_system_area(struct XorrisO *xorriso, int sa_type,
|
||||
int options, char *cmd, int flag)
|
||||
{
|
||||
int old_type, old_options;
|
||||
static char *type_names[4] = {
|
||||
"MBR", "MIPS Big Endian Volume Header", "MIPS Little Endian Boot Block",
|
||||
"SUN Disk Label"};
|
||||
|
||||
old_type= (xorriso->system_area_options & 0xfc) >> 2;
|
||||
old_options= xorriso->system_area_options & ~0xfc;
|
||||
if((old_type != 0 || old_options != 0) &&
|
||||
(old_type != sa_type || (old_options != 0 && old_options != options))) {
|
||||
sprintf(xorriso->info_text, "%s : First sector already occupied by %s",
|
||||
cmd, old_type < 4 ? type_names[old_type] : "other boot facility");
|
||||
if(old_type == 0 && old_options == 2)
|
||||
strcat(xorriso->info_text, " for ISOLINUX isohybrid");
|
||||
if(old_type == 0 && old_options == 1)
|
||||
strcat(xorriso->info_text, " for partition table");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
goto hint_revoke;
|
||||
}
|
||||
xorriso->system_area_options= ((sa_type << 2) & 0xfc) | (options & ~0xfc);
|
||||
if(sa_type == 0)
|
||||
xorriso->patch_system_area= xorriso->system_area_options;
|
||||
return(1);
|
||||
|
||||
hint_revoke:;
|
||||
if(old_type == 0)
|
||||
sprintf(xorriso->info_text, "Revokable by -boot_image any discard");
|
||||
else if(old_type == 1 || old_type == 2)
|
||||
sprintf(xorriso->info_text, "Revokable by -boot_image any mips_discard");
|
||||
else if(old_type == 3)
|
||||
sprintf(xorriso->info_text, "Revokable by -boot_image any sparc_discard");
|
||||
if(old_type < 4)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -126,6 +126,11 @@ int Xorriso_graft_split(struct XorrisO *xorriso, IsoImage *volume,
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
*node= (IsoNode *) new_dir;
|
||||
if(xorriso->update_flags & 1) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, img_name, node, 1);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
}
|
||||
total_parts= size / xorriso->split_size;
|
||||
if(size % xorriso->split_size)
|
||||
total_parts++;
|
||||
@ -161,7 +166,7 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
|
||||
{
|
||||
int ret, stbuf_valid= 0;
|
||||
struct stat stbuf;
|
||||
char sfe[5*SfileadrL];
|
||||
char sfe[5*SfileadrL], *namept;
|
||||
off_t size= 0;
|
||||
|
||||
if(lstat(disk_path, &stbuf) != -1) {
|
||||
@ -213,11 +218,21 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
if(xorriso->update_flags & 1) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, img_name, *node, 1);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
ex:;
|
||||
if(ret<0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_report_iso_error(xorriso, nominal_source, ret,
|
||||
if(ret == ISO_RR_NAME_TOO_LONG || ret == ISO_RR_NAME_RESERVED ||
|
||||
ret == ISO_RR_PATH_TOO_LONG)
|
||||
namept= nominal_target;
|
||||
else
|
||||
namept= nominal_source;
|
||||
Xorriso_report_iso_error(xorriso, namept, ret,
|
||||
"Cannot add node to tree", 0, "FAILURE", 1|2);
|
||||
return(ret);
|
||||
}
|
||||
@ -304,8 +319,10 @@ cannot_open_dir:;
|
||||
name= disk_path+strlen(disk_path);
|
||||
if(Sfile_str(img_path, img_dir_path, 0)<=0)
|
||||
{ret= -1; goto ex;}
|
||||
if(img_path[0] || img_path[strlen(img_path)-1]!='/')
|
||||
strcat(img_path,"/");
|
||||
if(img_path[0] == 0)
|
||||
strcat(img_path, "/");
|
||||
else if(img_path[strlen(img_path) - 1] != '/')
|
||||
strcat(img_path, "/");
|
||||
img_name= img_path+strlen(img_path);
|
||||
|
||||
while(1) { /* loop over directory content */
|
||||
@ -609,20 +626,30 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
int target_is_split, hide_attrs;
|
||||
struct stat stbuf;
|
||||
|
||||
ret= Xorriso_path_is_excluded(xorriso, disk_path, !(flag&4));
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
if(ret>0)
|
||||
return(3*!!(flag&16));
|
||||
|
||||
/* Check for mkisofs-style hidings */
|
||||
hide_attrs= (flag >> 8) & 3;
|
||||
if(hide_attrs != 3) {
|
||||
ret= Xorriso_path_is_hidden(xorriso, disk_path, 0);
|
||||
if (disk_path == NULL && !(flag & 1)) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"Program error: Xorriso_graft_in(): disk_path == NULL && !(flag & 1)",
|
||||
0, "ABORT", 0);
|
||||
return(-1);
|
||||
}
|
||||
if (disk_path == NULL) {
|
||||
disk_path= "";
|
||||
} else {
|
||||
ret= Xorriso_path_is_excluded(xorriso, disk_path, !(flag&4));
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
if(ret>=0)
|
||||
hide_attrs|= ret;
|
||||
if(ret>0)
|
||||
return(3*!!(flag&16));
|
||||
|
||||
/* Check for mkisofs-style hidings */
|
||||
if(hide_attrs != 3) {
|
||||
ret= Xorriso_path_is_hidden(xorriso, disk_path, 0);
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
if(ret>=0)
|
||||
hide_attrs|= ret;
|
||||
}
|
||||
}
|
||||
|
||||
for(cpt= img_path; 1; cpt++) {
|
||||
@ -636,10 +663,14 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
break;
|
||||
}
|
||||
if(cpt!=NULL) {
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
if(disk_path[0])
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Unsupported relative addressing in iso_rr_path %s (disk: %s)",
|
||||
Text_shellsafe(img_path, sfe, 0), Text_shellsafe(disk_path, sfe2, 0));
|
||||
"Unsupported relative addressing in iso_rr_path %s",
|
||||
Text_shellsafe(img_path, sfe, 0));
|
||||
if(disk_path[0])
|
||||
sprintf(xorriso->info_text + strlen(xorriso->info_text),
|
||||
" (disk: %s)", Text_shellsafe(disk_path, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
@ -738,7 +769,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
return(ret);
|
||||
if(ret==3) {
|
||||
sprintf(xorriso->info_text, "User revoked adding of: %s",
|
||||
Text_shellsafe(disk_path, sfe, 0));
|
||||
disk_path[0] ? Text_shellsafe(disk_path, sfe, 0)
|
||||
: Text_shellsafe(img_path, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
return(3*!!(flag&16));
|
||||
}
|
||||
@ -746,7 +778,8 @@ int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
goto handle_path_node;
|
||||
}
|
||||
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
if (disk_path[0])
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text,
|
||||
"While grafting '%s' : '%s' exists and may not be overwritten",
|
||||
img_path, path);
|
||||
@ -761,7 +794,8 @@ handle_path_node:;
|
||||
ret= iso_tree_add_new_dir(dir, apt, &hdir);
|
||||
if(ret<0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
if(disk_path[0])
|
||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||
Xorriso_report_iso_error(xorriso, img_path, ret,
|
||||
"Cannot create directory", 0, "FAILURE", 1);
|
||||
sprintf(xorriso->info_text,
|
||||
@ -769,13 +803,19 @@ handle_path_node:;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
if(xorriso->update_flags & 1) {
|
||||
ret= Xorriso_mark_update_merge(xorriso, path, (IsoNode *) hdir, 1);
|
||||
if(ret <= 0)
|
||||
return(0);
|
||||
}
|
||||
|
||||
dir= hdir;
|
||||
Xorriso_set_change_pending(xorriso, 0);
|
||||
iso_node_set_ctime((IsoNode *) dir, time(NULL));
|
||||
iso_node_set_uid((IsoNode *) dir, geteuid());
|
||||
iso_node_set_gid((IsoNode *) dir, getegid());
|
||||
|
||||
if(disk_path!=NULL && !done)
|
||||
if(disk_path[0] && !done)
|
||||
/* This not only copies disk directory properties
|
||||
but also sets eventual hide_attrs */
|
||||
Xorriso_copy_implicit_properties(xorriso, dir, img_path, path, disk_path,
|
||||
@ -897,6 +937,7 @@ unsupported_type:;
|
||||
|
||||
|
||||
/* @param flag bit0= do not produce info message on success
|
||||
bit1= do not raise protest if directory already exists
|
||||
@return 1=success,
|
||||
0=was already directory, -1=was other type, -2=other error
|
||||
*/
|
||||
@ -909,8 +950,10 @@ int Xorriso_mkdir(struct XorrisO *xorriso, char *path, int flag)
|
||||
if(ret<0)
|
||||
return(-2);
|
||||
if(ret>0) {
|
||||
if(ret == 2 && (flag & 2))
|
||||
return(0);
|
||||
sprintf(xorriso->info_text,"-mkdir: Address already existing %s",
|
||||
Text_shellsafe(eff_path, sfe, 0));
|
||||
Text_shellsafe(eff_path, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
||||
(ret==2 ? "WARNING" : "FAILURE"), 0);
|
||||
return(-1+(ret==2));
|
||||
@ -992,7 +1035,7 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
root_dir= iso_image_get_root(volume);
|
||||
if(((void *) root_dir) == ((void *) victim_node)) {
|
||||
if(((void *) root_dir) == ((void *) victim_node) && !(flag & 1)) {
|
||||
sprintf(xorriso->info_text, "May not delete root directory");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
@ -1010,7 +1053,7 @@ int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
|
||||
} else {
|
||||
if(flag&1) { /* rm -r */
|
||||
if((xorriso->do_reassure==1 && !xorriso->request_not_to_ask) ||
|
||||
(flag&32)) {
|
||||
(flag&32) || ((void *) root_dir) == ((void *) victim_node)) {
|
||||
/* Iterate over subordinates and delete them */
|
||||
mem= boss_mem;
|
||||
|
||||
@ -1087,6 +1130,9 @@ dir_not_removed:;
|
||||
}
|
||||
}
|
||||
|
||||
if(((void *) root_dir) == ((void *) victim_node))
|
||||
{ret= 2; goto ex;}
|
||||
|
||||
if(xorriso->request_to_abort)
|
||||
{ret= 3; goto ex;}
|
||||
boss_node= iso_node_get_parent(victim_node);
|
||||
@ -1182,6 +1228,38 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_overwrite_dest(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *eff_dest, int dest_ret, char *activity,
|
||||
int flag)
|
||||
{
|
||||
int ret;
|
||||
char sfe[5*SfileadrL];
|
||||
|
||||
if(dest_ret==2 && xorriso->do_overwrite!=1) {
|
||||
sprintf(xorriso->info_text, "%s: May not overwrite directory: %s",
|
||||
activity, Text_shellsafe(eff_dest, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if (dest_ret==1 && !xorriso->do_overwrite) {
|
||||
sprintf(xorriso->info_text, "%s: May not overwite: %s",
|
||||
activity, Text_shellsafe(eff_dest, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if(dest_ret>0) {
|
||||
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, eff_dest, 1|8);
|
||||
if(ret<=0)
|
||||
return(0);
|
||||
if(ret==3) {
|
||||
sprintf(xorriso->info_text, "%s: User revoked removal of: %s",
|
||||
activity, Text_shellsafe(eff_dest, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
*/
|
||||
@ -1244,27 +1322,10 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
|
||||
}
|
||||
|
||||
/* Check whether destination exists and may be not overwriteable */
|
||||
if(dest_ret==2 && xorriso->do_overwrite!=1) {
|
||||
sprintf(xorriso->info_text, "Renaming may not overwrite directory: %s",
|
||||
Text_shellsafe(eff_dest, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if (dest_ret==1 && !xorriso->do_overwrite) {
|
||||
sprintf(xorriso->info_text, "Renaming may not overwite: %s",
|
||||
Text_shellsafe(eff_dest, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if(dest_ret>0) {
|
||||
ret= Xorriso_rmi(xorriso, boss_iter, (off_t) 0, eff_dest, 1|8);
|
||||
if(ret<=0)
|
||||
return(0);
|
||||
if(ret==3) {
|
||||
sprintf(xorriso->info_text, "User revoked renaming of: %s",
|
||||
Text_shellsafe(eff_origin, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
ret= Xorriso_overwrite_dest(xorriso, boss_iter,
|
||||
eff_dest, dest_ret, "Renaming", 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
/* Ensure existence of destination directory */
|
||||
strcpy(dir_adr, eff_dest);
|
||||
@ -1340,6 +1401,175 @@ int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_cannot_clone(struct XorrisO *xorriso, char *eff_origin,
|
||||
char *eff_dest, int iso_error, int flag)
|
||||
{
|
||||
Xorriso_report_iso_error(xorriso, eff_dest, iso_error, "Cannot clone",
|
||||
0, "FAILURE", 1);
|
||||
sprintf(xorriso->info_text, "Failed to clone ");
|
||||
Text_shellsafe(eff_origin, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* @param flag bit0= for iso_tree_clone() : merge directories
|
||||
bit1= do not issue NOTE message
|
||||
*/
|
||||
int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *origin, char *dest, int flag)
|
||||
{
|
||||
int ret, dest_ret, l;
|
||||
char eff_dest[SfileadrL], eff_origin[SfileadrL], dir_adr[SfileadrL];
|
||||
char *leafname;
|
||||
IsoImage *volume;
|
||||
IsoDir *new_parent;
|
||||
IsoNode *origin_node, *dir_node, *new_node;
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, origin, eff_origin, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
ret= Xorriso_node_from_path(xorriso, volume, eff_origin, &origin_node, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
dest_ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest,1);
|
||||
if(dest_ret<0)
|
||||
return(dest_ret);
|
||||
if(dest_ret > 0) {
|
||||
if(eff_dest[0] == 0)
|
||||
strcpy(eff_dest, "/");
|
||||
sprintf(xorriso->info_text,
|
||||
"Cloning: Copy address already exists: ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else {
|
||||
/* obtain eff_dest address despite it does not exist */
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, dest, eff_dest, 2);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/* Obtain parent path and leaf name */
|
||||
strcpy(dir_adr, eff_dest);
|
||||
for(l= strlen(dir_adr); l > 0; ) {
|
||||
if(dir_adr[l - 1] == '/')
|
||||
dir_adr[--l]= 0;
|
||||
else
|
||||
break;
|
||||
}
|
||||
leafname= strrchr(dir_adr, '/');
|
||||
if(leafname == NULL) {
|
||||
leafname= dir_adr;
|
||||
if (leafname[0] == 0) {
|
||||
Xorriso_msgs_submit(xorriso, 0, "Empty file name as clone destination",
|
||||
0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
} else {
|
||||
*leafname= 0;
|
||||
leafname++;
|
||||
if(dir_adr[0] != 0) {
|
||||
/* Ensure existence of destination directory */
|
||||
ret= Xorriso_graft_in(xorriso, boss_iter, NULL, dir_adr,
|
||||
(off_t) 0, (off_t) 0, 1);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
}
|
||||
}
|
||||
|
||||
ret= Xorriso_node_from_path(xorriso, volume, dir_adr, &dir_node, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
new_parent= (IsoDir *) dir_node;
|
||||
|
||||
ret = iso_tree_clone(origin_node, new_parent, leafname, &new_node, flag & 1);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0);
|
||||
return(0);
|
||||
}
|
||||
Xorriso_set_change_pending(xorriso, 0);
|
||||
if(!(flag & 2)) {
|
||||
strcpy(xorriso->info_text, "Cloned in ISO image: ");
|
||||
Text_shellsafe(eff_origin, xorriso->info_text, 1);
|
||||
strcat(xorriso->info_text, " to ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
strcat(xorriso->info_text, "\n");
|
||||
Xorriso_info(xorriso, 0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest,
|
||||
int flag)
|
||||
{
|
||||
int ret, pass;
|
||||
char eff_dest[SfileadrL], eff_origin[SfileadrL], *namept;
|
||||
IsoDir *origin_dir, *dest_dir;
|
||||
IsoDirIter *iter= NULL;
|
||||
IsoNode *origin_node, *new_node;
|
||||
IsoImage *volume;
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_dir_from_path(xorriso, "Copy source", origin, &origin_dir, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_dir_from_path(xorriso, "Copy destination", dest, &dest_dir, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
for(pass= 0; pass < 2; pass++) {
|
||||
ret= iso_dir_get_children(origin_dir, &iter);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_create_iter(xorriso, ret, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
while(iso_dir_iter_next(iter, &origin_node) == 1) {
|
||||
namept= (char *) iso_node_get_name(origin_node);
|
||||
sprintf(eff_origin, "%s/%s", origin, namept);
|
||||
sprintf(eff_dest, "%s/%s", dest, namept);
|
||||
if(pass == 0) {
|
||||
ret= Xorriso_node_from_path(xorriso, volume, eff_dest, &new_node, 1);
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
if(ret > 0) {
|
||||
sprintf(xorriso->info_text, "Cloning: Copy address already exists: ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
} else {
|
||||
ret = iso_tree_clone(origin_node, dest_dir, namept, &new_node, 1);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret < 0) {
|
||||
Xorriso_cannot_clone(xorriso, eff_origin, eff_dest, ret, 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
iso_dir_iter_free(iter);
|
||||
iter= NULL;
|
||||
}
|
||||
Xorriso_set_change_pending(xorriso, 0);
|
||||
ret= 1;
|
||||
ex:;
|
||||
if(iter != NULL)
|
||||
iso_dir_iter_free(iter);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_set_st_mode(struct XorrisO *xorriso, char *in_path,
|
||||
mode_t mode_and, mode_t mode_or, int flag)
|
||||
{
|
||||
@ -1651,8 +1881,8 @@ int Xorriso_widen_hardlink(struct XorrisO *xorriso, void * boss_iter,
|
||||
|
||||
/* >>> compare_result bit17 = is_split */;
|
||||
|
||||
ret= Xorriso_update_interpreter(xorriso, boss_iter, compare_result, disk_path,
|
||||
abs_path, 1);
|
||||
ret= Xorriso_update_interpreter(xorriso, boss_iter, NULL,
|
||||
compare_result, disk_path, abs_path, 1);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
return(ret);
|
||||
@ -1683,6 +1913,29 @@ int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= increase only upper estimation
|
||||
*/
|
||||
int Xorriso_estimate_file_size(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
char *basename, mode_t st_mode, off_t st_size, int flag)
|
||||
{
|
||||
off_t upper, lower, size;
|
||||
|
||||
lower = 3 * strlen(basename) + 34; /* >>> + minimum RR ? */
|
||||
upper = 3 * strlen(basename) + 2048;
|
||||
if(S_ISREG(st_mode)) {
|
||||
size= ((st_size + (off_t) 2047) / (off_t) 2048) * (off_t) 2048;
|
||||
lower+= size;
|
||||
upper+= size;
|
||||
} else if(S_ISDIR(st_mode)) {
|
||||
upper+= 4096;
|
||||
}
|
||||
job->estim_upper_size+= upper;
|
||||
if(!(flag & 1))
|
||||
job->estim_lower_size+= lower;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
|
||||
{
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
@ -1818,9 +2071,9 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
gid_t group= 0;
|
||||
time_t date= 0;
|
||||
mode_t mode_or= 0, mode_and= ~1;
|
||||
char *target, *text_2, sfe[5*SfileadrL], *iso_prefix, md5[16];
|
||||
char *target, *text_2, sfe[5*SfileadrL], *iso_prefix, md5[16], *basename;
|
||||
struct FindjoB *subjob;
|
||||
struct stat dir_stbuf;
|
||||
struct stat dir_stbuf, stbuf;
|
||||
|
||||
action= Findjob_get_action_parms(job, &target, &text_2, &user, &group,
|
||||
&mode_and, &mode_or, &type, &date, &subjob, 0);
|
||||
@ -1858,10 +2111,13 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
Findjob_set_start_path(subjob, abs_path, 0);
|
||||
ret= Xorriso_findi(xorriso, subjob, boss_iter, boss_mem, NULL,
|
||||
abs_path, &dir_stbuf, depth, 1);
|
||||
} else if(action==14 || action==17) { /* compare , update */
|
||||
} else if(action==14 || action==17 || action == 41) {
|
||||
/* compare , update , update_merge */
|
||||
Findjob_get_start_path(job, &iso_prefix, 0);
|
||||
ret= Xorriso_find_compare(xorriso, (void *) boss_iter, abs_path,
|
||||
iso_prefix, target, (action==17)|((flag&1)<<1));
|
||||
ret= Xorriso_find_compare(xorriso, (void *) boss_iter, (void *) node,
|
||||
abs_path, iso_prefix, target,
|
||||
(action == 17 || action == 41)
|
||||
| ((flag&1)<<1) | ((action == 41) << 2));
|
||||
if(ret==2)
|
||||
deleted= 1;
|
||||
if(ret==3)
|
||||
@ -1932,6 +2188,27 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
iso_node_set_sort_weight(node, type);
|
||||
} else if(action == 39) { /* hide */
|
||||
Xorriso_set_hidden(xorriso, node, NULL, type, 0);
|
||||
} else if(action == 40) { /* estimate_size */
|
||||
basename= strrchr(abs_path, '/');
|
||||
if(basename != NULL)
|
||||
basename++;
|
||||
else
|
||||
basename= abs_path;
|
||||
ret= Xorriso_fake_stbuf(xorriso, "", &stbuf, &node, 1);
|
||||
if(ret > 0)
|
||||
ret= Xorriso_estimate_file_size(xorriso, job, basename, stbuf.st_mode,
|
||||
stbuf.st_size, 0);
|
||||
} else if(action == 42) { /* rm_merge */
|
||||
ret= Xorriso_mark_update_merge(xorriso, show_path, node, 2 | 4);
|
||||
if(ret == 2) {
|
||||
ret= Xorriso_rmi(xorriso, boss_iter, boss_mem, abs_path, 1|hflag);
|
||||
sprintf(xorriso->info_text, "Deleted ");
|
||||
Text_shellsafe(show_path, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
deleted= 1;
|
||||
}
|
||||
} else if(action == 43) { /* clear_merge */
|
||||
ret= Xorriso_mark_update_merge(xorriso, show_path, node, 2 | 4);
|
||||
} else { /* includes : 15 in_iso */
|
||||
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
|
||||
Xorriso_result(xorriso, 0);
|
||||
@ -2334,9 +2611,10 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
mem= boss_mem;
|
||||
hflag= 1;
|
||||
if(action==1 || action==2 || action==3 || action==17 || action == 28 ||
|
||||
action == 32)
|
||||
action == 32 || action == 41 || action == 42)
|
||||
hflag|= 2; /* need freedom to manipulate image */
|
||||
if(action==14 || action==17 || action == 28 || action == 35 || action == 36)
|
||||
if(action==14 || action==17 || action == 28 || action == 35 || action == 36 ||
|
||||
action == 41)
|
||||
hflag|= 4; /* need LBA sorted iteration for good data reading performance */
|
||||
ret= Xorriso_findi_iter(xorriso, dir_node, &mem,
|
||||
&iter, &node_array, &node_count, &node_idx,
|
||||
@ -2748,3 +3026,92 @@ ex:;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso__mark_update_xinfo(void *data, int flag)
|
||||
{
|
||||
/* data is an int disguised as pointer. It does not point to memory. */
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso__mark_update_cloner(void *old_data, void **new_data, int flag)
|
||||
{
|
||||
*new_data= NULL;
|
||||
if(flag)
|
||||
return(ISO_XINFO_NO_CLONE);
|
||||
if(old_data == NULL)
|
||||
return(0);
|
||||
/* data is an int disguised as pointer. It does not point to memory. */
|
||||
*new_data= old_data;
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= found on disk
|
||||
bit1= inquire visit-found status:
|
||||
1=not visited, 2=not found, 3=found
|
||||
bit2= with bit1: delete xinfo before returning status
|
||||
*/
|
||||
int Xorriso_mark_update_merge(struct XorrisO *xorriso, char *path,
|
||||
void *in_node, int flag)
|
||||
{
|
||||
int ret;
|
||||
void *xipt= NULL;
|
||||
IsoNode *node;
|
||||
|
||||
if(in_node == NULL) {
|
||||
ret= Xorriso_node_from_path(xorriso, NULL, path, &node, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
} else
|
||||
node= (IsoNode *) in_node;
|
||||
ret= iso_node_get_xinfo(node, Xorriso__mark_update_xinfo, &xipt);
|
||||
if(ret < 0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when looking for update_merge xinfo",
|
||||
0, "FAILURE", 1);
|
||||
return(0);
|
||||
}
|
||||
if(flag & 2) { /* Inquire status and optionally delete xinfo */
|
||||
if(ret == 0)
|
||||
return(1);
|
||||
if(flag & 4) {
|
||||
ret= iso_node_remove_xinfo(node, Xorriso__mark_update_xinfo);
|
||||
if(ret < 0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when removing update_merge xinfo",
|
||||
0, "FAILURE", 1);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
if(((char *) &xipt)[0])
|
||||
return(3);
|
||||
return(2);
|
||||
}
|
||||
/* xipt is a byte value disguised as void pointer */
|
||||
if(ret == 1) {
|
||||
if(((char *) &xipt)[0])
|
||||
return(1);
|
||||
if(!(flag & 1))
|
||||
return(1);
|
||||
} else
|
||||
((char *) &xipt)[0]= 0;
|
||||
if(flag & 1)
|
||||
((char *) &xipt)[0]= 1;
|
||||
ret= iso_node_remove_xinfo(node, Xorriso__mark_update_xinfo);
|
||||
if(ret < 0)
|
||||
goto set_error;
|
||||
ret= iso_node_add_xinfo(node, Xorriso__mark_update_xinfo, xipt);
|
||||
if(ret <= 0) {
|
||||
set_error:;
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when trying to set update_merge xinfo",
|
||||
0, "FAILURE", 1);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
@ -67,6 +67,8 @@ int Xorriso_all_node_array(struct XorrisO *xorriso, int addon_nodes, int flag);
|
||||
|
||||
int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag);
|
||||
|
||||
int Xorriso__mark_update_xinfo(void *data, int flag);
|
||||
int Xorriso__mark_update_cloner(void *old_data, void **new_data, int flag);
|
||||
|
||||
#endif /* ! Xorriso_pvt_iso_manip_includeD */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -1472,36 +1472,19 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
|
||||
*/
|
||||
int Xorriso_ls(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, is_dir= 0, i, filec= 0, failed_at, no_sort= 0;
|
||||
int ret, i, filec= 0, failed_at, no_sort= 0;
|
||||
IsoNode *node, **node_array= NULL;
|
||||
IsoDir *dir_node;
|
||||
IsoImage *volume;
|
||||
IsoDirIter *iter= NULL;
|
||||
char sfe[5*SfileadrL], sfe2[5*SfileadrL], link_target[SfileadrL], *npt, *rpt;
|
||||
struct stat stbuf;
|
||||
|
||||
rpt= xorriso->result_line;
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
|
||||
ret= Xorriso_node_from_path(xorriso, volume, xorriso->wdi, &node, 0);
|
||||
if(ret<=0)
|
||||
goto wdi_is_not_a_dir;
|
||||
if(LIBISO_ISDIR(node))
|
||||
is_dir= 1;
|
||||
if(!is_dir) {
|
||||
wdi_is_not_a_dir:;
|
||||
sprintf(xorriso->info_text,
|
||||
"Working directory path does not lead to a directory in ISO image");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(flag&2)
|
||||
{ret= 1; goto ex;}
|
||||
|
||||
dir_node= (IsoDir *) node;
|
||||
ret= Xorriso_dir_from_path(xorriso, "Working directory", xorriso->wdi,
|
||||
&dir_node, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
ret= iso_dir_get_children(dir_node, &iter);
|
||||
if(ret<0) {
|
||||
cannot_create_iter:;
|
||||
@ -2153,6 +2136,34 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume,
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose,
|
||||
char *path, IsoDir **dir_node, int flag)
|
||||
{
|
||||
IsoImage *volume;
|
||||
IsoNode *node;
|
||||
int ret, is_dir= 0;
|
||||
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
|
||||
ret= Xorriso_node_from_path(xorriso, volume, path, &node, 0);
|
||||
if(ret<=0)
|
||||
goto wdi_is_not_a_dir;
|
||||
if(LIBISO_ISDIR(node))
|
||||
is_dir= 1;
|
||||
if(!is_dir) {
|
||||
wdi_is_not_a_dir:;
|
||||
sprintf(xorriso->info_text,
|
||||
"%s path does not lead to a directory in ISO image", purpose);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
*dir_node= (IsoDir *) node;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@param flag bit0= do not remove leading slash
|
||||
bit1= append flatly to result_line and put out
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -35,6 +35,9 @@ int Xorriso_get_node_by_path(struct XorrisO *xorriso,
|
||||
char *in_path, char *eff_path,
|
||||
IsoNode **node, int flag);
|
||||
|
||||
int Xorriso_dir_from_path(struct XorrisO *xorriso, char *purpose,
|
||||
char *path, IsoDir **dir_node, int flag);
|
||||
|
||||
int Xorriso_node_get_dev(struct XorrisO *xorriso, IsoNode *node,
|
||||
char *path, dev_t *dev, int flag);
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -24,16 +24,38 @@
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* for -charset */
|
||||
#include <iconv.h>
|
||||
#include <langinfo.h>
|
||||
|
||||
#ifdef Xorriso_standalonE
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include "../libjte/libjte.h"
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include <libjte/libjte.h>
|
||||
#endif
|
||||
|
||||
#endif /* ! Xorriso_standalonE */
|
||||
|
||||
#include "xorriso.h"
|
||||
#include "xorriso_private.h"
|
||||
#include "xorrisoburn.h"
|
||||
|
||||
#include "lib_mgt.h"
|
||||
#include "iso_manip.h"
|
||||
|
||||
|
||||
int Xorriso_abort(struct XorrisO *xorriso, int flag)
|
||||
@ -182,6 +204,9 @@ LIBISOBURN_MISCONFIGURATION_ = 0;
|
||||
zisofs_ctrl.compression_level;
|
||||
}
|
||||
|
||||
iso_node_xinfo_make_clonable(Xorriso__mark_update_xinfo,
|
||||
Xorriso__mark_update_cloner, 0);
|
||||
|
||||
/* Second initialization. This time with libs. */
|
||||
Xorriso_preparer_string(xorriso, xorriso->preparer_id, 0);
|
||||
|
||||
@ -275,6 +300,16 @@ int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag)
|
||||
"libisofs in use : %d.%d.%d (min. %d.%d.%d)\n",
|
||||
major, minor, micro, req_major, req_minor, req_micro);
|
||||
Xorriso_result(xorriso, 0);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
libjte__version(&major, &minor, µ);
|
||||
isoburn_libjte_req(&req_major, &req_minor, &req_micro);
|
||||
sprintf(xorriso->result_line,
|
||||
"libjte in use : %d.%d.%d (min. %d.%d.%d)\n",
|
||||
major, minor, micro, req_major, req_minor, req_micro);
|
||||
Xorriso_result(xorriso, 0);
|
||||
#endif
|
||||
|
||||
burn_version(&major, &minor, µ);
|
||||
isoburn_libburn_req(&req_major, &req_minor, &req_micro);
|
||||
sprintf(xorriso->result_line,
|
||||
@ -413,14 +448,36 @@ cannot:;
|
||||
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, error_code= 0, os_errno= 0, count= 0, pass, imgid, tunneled;
|
||||
int name_prefix_code;
|
||||
char severity[80];
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
char *msg;
|
||||
#endif
|
||||
|
||||
if(!xorriso->libs_are_started)
|
||||
return(1);
|
||||
for(pass= 0; pass< 2; pass++) {
|
||||
for(pass= 0; pass< 3; pass++) {
|
||||
while(1) {
|
||||
tunneled= 0;
|
||||
if(pass==0)
|
||||
if(pass==0) {
|
||||
|
||||
ret= 0;
|
||||
#ifdef Xorriso_with_libjtE
|
||||
if(xorriso->libjte_handle != NULL) {
|
||||
msg= libjte_get_next_message(xorriso->libjte_handle);
|
||||
if(msg != NULL) {
|
||||
sprintf(xorriso->info_text, "%1.4095s", msg);
|
||||
free(msg);
|
||||
strcpy(severity, "NOTE");
|
||||
error_code= 0;
|
||||
os_errno= 0;
|
||||
ret= 1;
|
||||
}
|
||||
}
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
} else if(pass==1)
|
||||
ret= iso_obtain_msgs("ALL", &error_code, &imgid,
|
||||
xorriso->info_text, severity);
|
||||
else {
|
||||
@ -444,8 +501,12 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
|
||||
else if(error_code==0x51001)
|
||||
strcpy(severity, "ERRFILE");
|
||||
|
||||
if(pass == 0)
|
||||
name_prefix_code= 0;
|
||||
else
|
||||
name_prefix_code= pass + tunneled;
|
||||
Xorriso_msgs_submit(xorriso, error_code, xorriso->info_text, os_errno,
|
||||
severity, ((pass+tunneled)+1)<<2);
|
||||
severity, name_prefix_code << 2);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -499,7 +560,7 @@ int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
|
||||
int major, minor, micro;
|
||||
|
||||
xorriso_id[0]= 0;
|
||||
sprintf(xorriso_id, "XORRISO-%d.%d.%d",
|
||||
sprintf(xorriso_id, "XORRISO-%d.%d.%d ",
|
||||
Xorriso_header_version_majoR, Xorriso_header_version_minoR,
|
||||
Xorriso_header_version_micrO);
|
||||
if(strlen(xorriso_id) + strlen(Xorriso_timestamP) < 128)
|
||||
@ -521,3 +582,172 @@ int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
|
||||
int Xorriso_assert_jte_handle(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if(xorriso->libjte_handle == NULL) {
|
||||
ret= libjte_new(&(xorriso->libjte_handle), 0);
|
||||
if(ret <= 0 || xorriso->libjte_handle == NULL) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-jigdo: Failed to create libjte environment object");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
/* no stderr, no exit() */
|
||||
libjte_set_error_behavior(xorriso->libjte_handle, 0, 0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
|
||||
int Xorriso_jigdo_interpreter(struct XorrisO *xorriso, char *aspect, char *arg,
|
||||
int flag)
|
||||
{
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
|
||||
int ret, num;
|
||||
struct libjte_env *jte;
|
||||
char *msg = NULL;
|
||||
|
||||
if(strcmp(aspect, "clear") == 0) {
|
||||
if(xorriso->libjte_handle != NULL)
|
||||
libjte_destroy(&(xorriso->libjte_handle));
|
||||
Xorriso_lst_destroy_all(&(xorriso->jigdo_params), 0);
|
||||
Xorriso_lst_destroy_all(&(xorriso->jigdo_values), 0);
|
||||
xorriso->libjte_params_given= 0;
|
||||
return(1);
|
||||
}
|
||||
ret= Xorriso_assert_jte_handle(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
jte= xorriso->libjte_handle;
|
||||
|
||||
if(strcmp(aspect, "verbose") == 0) {
|
||||
if(strcmp(arg, "on") == 0) {
|
||||
libjte_set_verbose(jte, 1);
|
||||
/* Direct libjte messages to stderr, rather than message list */
|
||||
libjte_set_error_behavior(xorriso->libjte_handle, 1, 0);
|
||||
xorriso->libjte_params_given|= 2;
|
||||
} else if(strcmp(arg, "off") == 0) {
|
||||
libjte_set_verbose(jte, 0);
|
||||
libjte_set_error_behavior(xorriso->libjte_handle, 0, 0);
|
||||
xorriso->libjte_params_given&= ~2;
|
||||
} else
|
||||
goto bad_arg;
|
||||
} else if(strcmp(aspect, "template_path") == 0 ||
|
||||
strcmp(aspect, "-jigdo-template") == 0) {
|
||||
ret= libjte_set_template_path(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 4;
|
||||
} else if(strcmp(aspect, "jigdo_path") == 0 ||
|
||||
strcmp(aspect, "-jigdo-jigdo") == 0) {
|
||||
ret= libjte_set_jigdo_path(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 8;
|
||||
} else if(strcmp(aspect, "md5_path") == 0 ||
|
||||
strcmp(aspect, "-md5-list") == 0) {
|
||||
ret= libjte_set_md5_path(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 16;
|
||||
} else if(strcmp(aspect, "min_size") == 0 ||
|
||||
strcmp(aspect, "-jigdo-min-file-size") == 0) {
|
||||
num= Scanf_io_size(arg, 0);
|
||||
ret= libjte_set_min_size(jte, num);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 32;
|
||||
} else if(strcmp(aspect, "checksum_iso") == 0 ||
|
||||
strcmp(aspect, "-checksum_algorithm_iso") == 0) {
|
||||
ret= libjte_set_checksum_iso(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 64;
|
||||
} else if(strcmp(aspect, "checksum_template") == 0 ||
|
||||
strcmp(aspect, "-checksum_algorithm_template") == 0) {
|
||||
ret= libjte_set_checksum_template(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 128;
|
||||
} else if(strcmp(aspect, "compression") == 0 ||
|
||||
strcmp(aspect, "-jigdo-template-compress") == 0) {
|
||||
ret= libjte_set_compression(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 256;
|
||||
} else if(strcmp(aspect, "exclude") == 0 ||
|
||||
strcmp(aspect, "-jigdo-exclude") == 0) {
|
||||
ret= libjte_add_exclude(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 512;
|
||||
} else if(strcmp(aspect, "demand_md5") == 0 ||
|
||||
strcmp(aspect, "-jigdo-force-md5") == 0) {
|
||||
ret= libjte_add_md5_demand(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 1024;
|
||||
} else if(strcmp(aspect, "mapping") == 0 ||
|
||||
strcmp(aspect, "-jigdo-map") == 0) {
|
||||
ret= libjte_add_mapping(jte, arg);
|
||||
if(ret <= 0)
|
||||
goto jte_failed;
|
||||
xorriso->libjte_params_given|= 2048;
|
||||
} else {
|
||||
sprintf(xorriso->info_text, "-jigdo: unknown aspect '%s'", aspect);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
ret= Xorriso_lst_new(&(xorriso->jigdo_params), aspect, xorriso->jigdo_params,
|
||||
1);
|
||||
if(ret > 0)
|
||||
ret= Xorriso_lst_new(&(xorriso->jigdo_values), arg, xorriso->jigdo_values,
|
||||
1);
|
||||
if(ret <= 0) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
return(-1);
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
return(1);
|
||||
|
||||
bad_arg:
|
||||
sprintf(xorriso->info_text, "-jigdo %s : unknown argument '%s'", aspect, arg);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
|
||||
jte_failed:
|
||||
while(1) {
|
||||
msg= libjte_get_next_message(xorriso->libjte_handle);
|
||||
if(msg == NULL)
|
||||
break;
|
||||
sprintf(xorriso->info_text, "%1.4095s", msg);
|
||||
free(msg);
|
||||
msg= NULL;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
}
|
||||
sprintf(xorriso->info_text, "Experienced libjte failure with: -jigdo %s %s",
|
||||
aspect, arg);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
|
||||
#else /* Xorriso_with_libjtE */
|
||||
|
||||
sprintf(xorriso->info_text,
|
||||
"Jigdo Template Extraction was not enabled at compile time");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
|
||||
#endif /* ! Xorriso_with_libjtE */
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,13 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Produce man page xorriso/xorriso.1 and info file xorriso/xorriso.info
|
||||
# from base file xorris/xorriso.texi.
|
||||
# from base file xorriso/xorriso.texi.
|
||||
# Same for xorriso/xorrisofs.texi.
|
||||
|
||||
( cd xorriso ; makeinfo ./xorriso.texi )
|
||||
( cd xorriso ; makeinfo ./xorrisofs.texi )
|
||||
|
||||
xorriso/make_xorriso_1 -auto
|
||||
xorriso/make_xorriso_1 -auto -xorrisofs
|
||||
|
||||
|
||||
|
@ -3,11 +3,12 @@
|
||||
( cd xorriso ; cc -g -Wall -o make_xorriso_1 make_xorriso_1.c )
|
||||
*/
|
||||
/*
|
||||
Specialized converter from xorriso/xorriso.texi to xorriso/xorriso.1.
|
||||
Specialized converter from xorriso/xorriso.texi to xorriso/xorriso.1
|
||||
resp. from xorriso/xorrisofs.texi to xorriso/xorrisofs.1
|
||||
|
||||
The conversion rules are described at the beginning of xorriso/xorriso.texi
|
||||
|
||||
Copyright 2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2010 - 2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
@ -228,10 +229,20 @@ int Mx1_convert(struct Mx1 *m, char line_in[256], char line_out[256], int flag)
|
||||
}
|
||||
strcat(buf, "\\");
|
||||
}
|
||||
|
||||
/* Substitute option text */
|
||||
raw= strlen(buf);
|
||||
strcat(buf, word);
|
||||
ret= Mx1_substitute(m, buf, line_out, raw, 0);
|
||||
if(ret <= 0)
|
||||
return(-1);
|
||||
strcpy(buf, line_out);
|
||||
|
||||
strcat(buf, "\\fR");
|
||||
raw= strlen(buf);
|
||||
strcat(buf, remainder);
|
||||
|
||||
/* Substitute arguments text */
|
||||
ret= Mx1_substitute(m, buf, line_out, raw, 0);
|
||||
if(ret <= 0)
|
||||
return(-1);
|
||||
@ -271,8 +282,8 @@ int main(int argc, char **argv)
|
||||
{
|
||||
int ret, l, as_filter= 0, i;
|
||||
char line_in[256], line_out[256], *got;
|
||||
static char name_in[]= {"xorriso/xorriso.texi"};
|
||||
static char name_out[]= {"xorriso/xorriso.1"};
|
||||
static char name_in[1024]= {"xorriso/xorriso.texi"};
|
||||
static char name_out[1024]= {"xorriso/xorriso.1"};
|
||||
struct Mx1 m;
|
||||
FILE *fp_in= stdin, *fp_out= stdout;
|
||||
|
||||
@ -280,9 +291,10 @@ int main(int argc, char **argv)
|
||||
|
||||
if(argc < 2) {
|
||||
usage:;
|
||||
fprintf(stderr, "usage: %s -auto|-filter\n", argv[0]);
|
||||
fprintf(stderr, " -auto xorriso/xorriso.texi -> xorriso/xorriso.1\n");
|
||||
fprintf(stderr, " -filter stdin -> stdout\n");
|
||||
fprintf(stderr, "usage: %s -auto|-filter|[-xorrisofs]\n", argv[0]);
|
||||
fprintf(stderr, " -auto xorriso/xorriso.texi -> xorriso/xorriso.1\n");
|
||||
fprintf(stderr, " -filter stdin -> stdout\n");
|
||||
fprintf(stderr, " -xorrisofs process xorriso/xorrisofs.texi\n");
|
||||
exit(2);
|
||||
}
|
||||
for(i= 1; i < argc; i++) {
|
||||
@ -290,7 +302,10 @@ usage:;
|
||||
as_filter= 1;
|
||||
else if(strcmp(argv[i], "-auto") == 0)
|
||||
as_filter= 0;
|
||||
else {
|
||||
else if(strcmp(argv[i], "-xorrisofs") == 0) {
|
||||
strcpy(name_in, "xorriso/xorrisofs.texi");
|
||||
strcpy(name_out, "xorriso/xorrisofs.1");
|
||||
} else {
|
||||
fprintf(stderr, "%s : unknown option %s\n", argv[0], argv[i]);
|
||||
goto usage;
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
# make_xorriso_standalone.sh
|
||||
# Copyright 2008 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPLv2+
|
||||
# Copyright 2008 - 2011 Thomas Schmitt, scdbackup@gmx.net, GPLv2+
|
||||
#
|
||||
# Not intended for general use in production installations !
|
||||
#
|
||||
# This is a development tool which expects a special setup of directories.
|
||||
# It is to be executed in a common parent of the directories
|
||||
# nglibisofs-develop libburn-develop libisoburn-develop
|
||||
# nglibisofs-develop jte-develop libburn-develop libisoburn-develop
|
||||
# where tarballs or repository copies have been installed of
|
||||
# libisofs libburn libisoburn
|
||||
# libisofs jte libburn libisoburn
|
||||
# obtained according to instructions on http://libburnia-project.org.
|
||||
#
|
||||
# It creates a new directory tree
|
||||
@ -40,7 +40,7 @@ create_gnu_xorriso="yes"
|
||||
current_dir=$(pwd)
|
||||
lone_dir="$current_dir"/"xorriso-standalone"
|
||||
|
||||
xorriso_rev=0.6.2
|
||||
xorriso_rev=1.0.8
|
||||
# For unstable uploads and patch level 0 of stable releases:
|
||||
xorriso_pl=""
|
||||
# For higher patch levels of stable releases:
|
||||
@ -120,10 +120,6 @@ copy_files xorriso/configure_ac.txt "$lone_dir"/configure.ac
|
||||
|
||||
copy_files xorriso/xorriso_makefile_am.txt "$lone_dir"/Makefile.am
|
||||
|
||||
# copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
|
||||
|
||||
# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
|
||||
|
||||
|
||||
# libisoburn
|
||||
|
||||
@ -131,6 +127,7 @@ create_dir "$lone_dir"/libisoburn
|
||||
copy_files \
|
||||
libisoburn/*.[ch] \
|
||||
"$lone_dir"/libisoburn
|
||||
copy_files COPYRIGHT "$lone_dir"/libisoburn
|
||||
|
||||
xorriso/convert_man_to_html.sh
|
||||
|
||||
@ -192,18 +189,29 @@ copy_files \
|
||||
\
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_eng.html \
|
||||
xorriso/make_docs.sh \
|
||||
xorriso/xorriso.texi \
|
||||
xorriso/xorriso.info \
|
||||
xorriso/xorrisofs.texi \
|
||||
xorriso/xorrisofs.info \
|
||||
xorriso/make_xorriso_1.c \
|
||||
xorriso/xorriso.1 \
|
||||
xorriso/xorrisofs.1 \
|
||||
xorriso/man_1_xorriso.html \
|
||||
xorriso/man_1_xorrisofs.html \
|
||||
"$lone_dir"/xorriso
|
||||
copy_files COPYRIGHT "$lone_dir"/xorriso
|
||||
|
||||
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||
"$lone_dir"/xorriso/xorriso_buildstamp.h
|
||||
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||
"$lone_dir"/xorriso/xorriso_buildstamp_none.h
|
||||
|
||||
create_dir "$lone_dir"/doc
|
||||
copy_files doc/partition_offset.wiki \
|
||||
doc/startup_file.txt \
|
||||
"$lone_dir"/doc
|
||||
|
||||
create_dir "$lone_dir"/test
|
||||
copy_files \
|
||||
test/compare_file.c \
|
||||
@ -214,13 +222,13 @@ copy_files \
|
||||
|
||||
create_dir "$lone_dir"/libisofs
|
||||
create_dir "$lone_dir"/libisofs/filters
|
||||
create_dir "$lone_dir"/doc
|
||||
goto_dir "$current_dir"/nglibisofs-develop
|
||||
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
||||
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
|
||||
copy_files doc/susp_aaip*.txt "$lone_dir"/doc
|
||||
copy_files doc/zisofs_format.txt "$lone_dir"/doc
|
||||
copy_files doc/checksums.txt "$lone_dir"/doc
|
||||
copy_files doc/boot_sectors.txt "$lone_dir"/doc
|
||||
copy_files COPYRIGHT "$lone_dir"/libisofs
|
||||
test -e CONTRIBUTORS && cat CONTRIBUTORS >>"$lone_dir"/CONTRIBUTORS
|
||||
|
||||
@ -228,35 +236,13 @@ test -e CONTRIBUTORS && cat CONTRIBUTORS >>"$lone_dir"/CONTRIBUTORS
|
||||
cat version.h.in >> "$lone_dir"/version.h.in
|
||||
|
||||
|
||||
# <<< obsoleted patchings
|
||||
|
||||
if test 1 = 0
|
||||
then
|
||||
|
||||
# Change GNU macro name to POSIX name
|
||||
sed -e 's/FNM_FILE_NAME/FNM_PATHNAME/g' \
|
||||
<libisofs/tree.c >"$lone_dir"/libisofs/tree.c
|
||||
|
||||
# Filter out the semi-illegal TODO comments
|
||||
( cd "$lone_dir"/libisofs && grep '^[[:space:]]*//' *.[ch] | less )
|
||||
echo "Is it ok delete all shown //-lines ?"
|
||||
read yesno
|
||||
if test "$yesno" = "y" -o "$yesno" = "1"
|
||||
then
|
||||
for i in "$lone_dir"/libisofs/*.[ch]
|
||||
do
|
||||
# first copy attributes
|
||||
cp "$i" "$lone_dir"/libisofs/tmpfile
|
||||
# now filter away // lines
|
||||
grep -v '^[[:space:]]*//' <"$i" >"$lone_dir"/libisofs/tmpfile && \
|
||||
mv "$lone_dir"/libisofs/tmpfile "$i"
|
||||
done
|
||||
fi
|
||||
echo "Remaining // lines:"
|
||||
( cd "$lone_dir"/libisofs && grep '//' *.[ch] )
|
||||
|
||||
fi
|
||||
# libjte
|
||||
|
||||
create_dir "$lone_dir"/libjte
|
||||
goto_dir "$current_dir"/jte-develop
|
||||
copy_files *.[ch] "$lone_dir"/libjte
|
||||
copy_files bin/jigdo-gen-md5-list doc/jigdo-gen-md5-list.1 "$lone_dir"/libjte
|
||||
copy_files COPYRIGHT "$lone_dir"/libjte
|
||||
|
||||
|
||||
# libburn
|
||||
@ -284,7 +270,7 @@ then
|
||||
copy_files xorriso/COPYING_gnu_xorriso "$lone_dir"/COPYING
|
||||
copy_files xorriso/AUTHORS_gnu_xorriso "$lone_dir"/AUTHORS
|
||||
|
||||
# patch xorriso/xorriso.c to be GNU xorriso
|
||||
# patch xorriso/xorriso.h to be GNU xorriso
|
||||
sed -e's/define Xorriso_libburnia_xorrisO/define Xorriso_GNU_xorrisO/' \
|
||||
-e's/This may be changed to Xorriso_GNU_xorrisO in order to c/C/' \
|
||||
<xorriso/xorriso.h >"$lone_dir"/xorriso/xorriso.h
|
||||
|
118
xorriso/man_xorriso_to_html.sh
Executable file
118
xorriso/man_xorriso_to_html.sh
Executable file
@ -0,0 +1,118 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# man_xorriso_to_html.sh - ts A80118 , B10309
|
||||
#
|
||||
# Generates a HTML version of man page xorriso.1
|
||||
#
|
||||
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
|
||||
#
|
||||
|
||||
# set -x
|
||||
|
||||
man_dir=$(pwd)"/xorriso"
|
||||
export MANPATH="$man_dir"
|
||||
manpage="xorriso"
|
||||
raw_html=$(pwd)/"xorriso/raw_man_1_xorriso.html"
|
||||
htmlpage=$(pwd)/"xorriso/man_1_xorriso.html"
|
||||
|
||||
if test -r "$man_dir"/"$manpage".1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
echo "Cannot find readable man page source $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -e "$man_dir"/man1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
ln -s . "$man_dir"/man1
|
||||
fi
|
||||
|
||||
if test "$1" = "-work_as_filter"
|
||||
then
|
||||
|
||||
# set -x
|
||||
|
||||
sed \
|
||||
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
|
||||
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorriso, manual, xorriso, CD, CD-RW, CD-R, burning, cdrecord, compatible"><META NAME="robots" CONTENT="follow">/' \
|
||||
-e 's/<title>XORRISO<\/title>/<title>man 1 xorriso<\/title>/' \
|
||||
-e 's/<h1 align=center>XORRISO<\/h1>/<h1 align=center>man 1 xorriso<\/h1>/' \
|
||||
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
|
||||
-e 's/<b>Overview of features:<\/b>/\ <BR><b>Overview of features:<\/b>/' \
|
||||
-e 's/<b>General information paragraphs:<\/b>/\ <BR><b>General information paragraphs:<\/b>/' \
|
||||
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
-e 's/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
||||
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying, Blind/\ <BR><b>Creating, Growing, Modifying, Blind/' \
|
||||
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||
-e 's/^-dev /\ \ -dev /' \
|
||||
-e 's/^-devices /\ \ -devices /' \
|
||||
-e 's/<b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\ <BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
|
||||
-e 's/<b>Command processing:<\/b>/\ <BR><b>Command processing:<\/b>/' \
|
||||
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\ <BR><b>Dialog, Readline, Result pager:<\/b>/' \
|
||||
-e 's/<b>Aquiring source and target drive:<\/b>/\ <BR><b>Aquiring source and target drive:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Influencing the behavior of image/\ <BR><b>Influencing the behavior of image/' \
|
||||
-e 's/<b>Inserting files into ISO image:<\/b>/\ <BR><b>Inserting files into ISO image:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>File manipulations:<\/b>/\ <BR><b>File manipulations:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Tree traversal command -find:<\/b>/\ <BR><b>Tree traversal command -find:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^<p><b>−iso_rr_pattern/<p>\ <BR><b>\−iso_rr_pattern/' \
|
||||
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
|
||||
-e 's/<b>Filters for data file content:<\/b>/\ <BR><b>Filters for data file content:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Writing the result, drive control:<\/b>/\ <BR><b>Writing the result, drive control:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^-find \/ /\ \ -find \/ /' \
|
||||
-e 's/<b>Settings for file insertion:<\/b>/\ <BR><b>Settings for file insertion:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^$<\/b> ln -s/\ \ $<\/b> ln -s/' \
|
||||
-e 's/<b>Settings for result writing:<\/b>/\ <BR><b>Settings for result writing:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^706k = 706kB/\ \ 706k = 706kB/' \
|
||||
-e 's/^5540k = 5540kB/\ \ 5540k = 5540kB/' \
|
||||
-e 's/<b>Character sets:<\/b>/\ <BR><b>Character sets:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Exception processing:<\/b>/\ <BR><b>Exception processing:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>El Torito bootable ISO images:<\/b>/\ <BR><b>El Torito bootable ISO images:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Jigdo Template Extraction:<\/b>/\ <BR><b>Jigdo Template Extraction:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Dialog mode control:<\/b>/\ <BR><b>Dialog mode control:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
||||
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Evaluation of readability and recovery:<\/b>/\ <BR><b>Evaluation of readability and recovery:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>osirrox ISO-to-disk restore options:<\/b>/\ <BR><b>osirrox ISO-to-disk restore options:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
||||
-e 's/^features:<\/b>/features:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Support for frontend/\ <BR><b>Support for frontend/' \
|
||||
-e 's/^listening at stdout:<\/b>/listening at stdout:<\/b><BR>\ <BR>/' \
|
||||
-e 's/xorriso -outdev \/dev\/sr2 \\ -blank fast \\ -pathspecs on/xorriso -outdev \/dev\/sr2 -blank fast -pathspecs on/' \
|
||||
-e 's/\\ -add \\ \/sounds=\/home\/me\/sounds \\ \/pictures \\ -- \\ -rm_r \\/ -add \/sounds=\/home\/me\/sounds \/pictures -- -rm_r /' \
|
||||
-e 's/\/sounds\/indecent \\ \’\/pictures\/\*private\*\’ \\/\/sounds\/indecent \’\/pictures\/*private*\’ /' \
|
||||
-e 's/\/pictures\/confidential \\ -- \\ -add \\/\/pictures\/confidential -- -add/' \
|
||||
-e 's/xorriso -dev \/dev\/sr2 \\ -rm_r \/sounds -- \\ -mv \\/xorriso -dev \/dev\/sr2 -rm_r \/sounds -- -mv /' \
|
||||
-e 's/\/pictures\/confidential \\ \/pictures\/restricted \\ -- \\ -chmod/\/pictures\/confidential \/pictures\/restricted -- -chmod/' \
|
||||
-e 's/go-rwx \/pictures\/restricted -- \\ -pathsspecs on \\ -add \\/go-rwx \/pictures\/restricted -- -pathsspecs on -add /' \
|
||||
-e 's/\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy /\/sounds=\/home\/me\/prepared_for_dvd\/sounds_dummy/' \
|
||||
-e 's/\/movies=\/home\/me\/prepared_for_dvd\/movies \\ -- \\ -commit/\/movies=\/home\/me\/prepared_for_dvd\/movies -- -commit/' \
|
||||
-e 's/xorriso -indev \/dev\/sr2 \\ -rm_r \/sounds -- \\/xorriso -indev \/dev\/sr2 -rm_r \/sounds -- /' \
|
||||
-e 's/-outdev \/dev\/sr0 -blank fast \\ -commit -eject all/-outdev \/dev\/sr0 -blank fast -commit -eject all/' \
|
||||
-e 's/See section FILES/See section <A HREF="#FILES">FILES<\/A>/' \
|
||||
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
|
||||
<"$2" >"$htmlpage"
|
||||
|
||||
set +x
|
||||
|
||||
chmod u+rw,go+r,go-w "$htmlpage"
|
||||
echo "Emerged file:"
|
||||
ls -lL "$htmlpage"
|
||||
|
||||
else
|
||||
|
||||
export BROWSER='cp "%s" '"$raw_html"
|
||||
man -H "$manpage"
|
||||
"$0" -work_as_filter "$raw_html"
|
||||
rm "$raw_html"
|
||||
rm "$man_dir"/man1
|
||||
|
||||
fi
|
79
xorriso/man_xorrisofs_to_html.sh
Executable file
79
xorriso/man_xorrisofs_to_html.sh
Executable file
@ -0,0 +1,79 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# man_xorrisofs_to_html.sh - ts A80118 , B10309
|
||||
#
|
||||
# Generates a HTML version of man page xorrisofs.1
|
||||
#
|
||||
# To be executed in the libisoburn toplevel directory (eg. ./libisoburn-0.1.0)
|
||||
#
|
||||
|
||||
# set -x
|
||||
|
||||
man_dir=$(pwd)"/xorriso"
|
||||
export MANPATH="$man_dir"
|
||||
manpage="xorrisofs"
|
||||
raw_html=$(pwd)/"xorriso/raw_man_1_xorrisofs.html"
|
||||
htmlpage=$(pwd)/"xorriso/man_1_xorrisofs.html"
|
||||
|
||||
if test -r "$man_dir"/"$manpage".1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
echo "Cannot find readable man page source $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -e "$man_dir"/man1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
ln -s . "$man_dir"/man1
|
||||
fi
|
||||
|
||||
if test "$1" = "-work_as_filter"
|
||||
then
|
||||
|
||||
# set -x
|
||||
|
||||
sed \
|
||||
-e 's/<meta name="generator" content="groff -Thtml, see www.gnu.org">/<meta name="generator" content="groff -Thtml, via man -H, via xorriso\/convert_man_to_html.sh">/' \
|
||||
-e 's/<meta name="Content-Style" content="text\/css">/<meta name="Content-Style" content="text\/css"><META NAME="description" CONTENT="man page of xorriso"><META NAME="keywords" CONTENT="man xorrisofs, manual, xorrisofs, ISO 9660, mkisofs, compatible"><META NAME="robots" CONTENT="follow">/' \
|
||||
-e 's/<title>XORRISOFS<\/title>/<title>man 1 xorrisofs<\/title>/' \
|
||||
-e 's/<h1 align=center>XORRISOFS<\/h1>/<h1 align=center>man 1 xorrisofs<\/h1>/' \
|
||||
-e 's/<body>/<body BGCOLOR="#F5DEB3" TEXT=#000000 LINK=#0000A0 VLINK=#800000>/' \
|
||||
-e 's/<b>ISO 9660, Rock Ridge, Joliet:<\/b>/\ <BR><b>ISO 9660, Rock Ridge, Joliet:<\/b>/' \
|
||||
-e 's/<b>Inserting files into the ISO image:<\/b>/\ <BR><b>Inserting files into the ISO image:<\/b>/' \
|
||||
-e 's/<b>Relation to program xorriso:<\/b>/\ <BR><b>Relation to program xorriso:<\/b>/' \
|
||||
-e 's/EXAMPLES):<br>/<A HREF="#EXAMPLES">EXAMPLES<\/A>):<br>/' \
|
||||
-e 's/<b>Image loading:<\/b>/\ <BR><b>Image loading:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Settings for file insertion:<\/b>/\ <BR><b>Settings for file insertion:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Settings for image production:<\/b>/\ <BR><b>Settings for image production:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Settings for standards compliance:<\/b>/\ <BR><b>Settings for standards compliance:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Settings for standards extensions:<\/b>/\ <BR><b>Settings for standards extensions:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Settings for file hiding:<\/b>/\ <BR><b>Settings for file hiding:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>ISO image ID strings:<\/b>/\ <BR><b>ISO image ID strings:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>El Torito Bootable ISO images:<\/b>/\ <BR><b>El Torito Bootable ISO images:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>System Area, MBR, other boot blocks:<\/b>/\ <BR><b>System Area, MBR, other boot blocks:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Character sets:<\/b>/\ <BR><b>Character sets:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Jigdo Template Extraction:<\/b>/\ <BR><b>Jigdo Template Extraction:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Miscellaneous options:<\/b>/\ <BR><b>Miscellaneous options:<\/b><BR>\ <BR>/' \
|
||||
\
|
||||
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
|
||||
<"$2" >"$htmlpage"
|
||||
|
||||
set +x
|
||||
|
||||
chmod u+rw,go+r,go-w "$htmlpage"
|
||||
echo "Emerged file:"
|
||||
ls -lL "$htmlpage"
|
||||
|
||||
else
|
||||
|
||||
export BROWSER='cp "%s" '"$raw_html"
|
||||
man -H "$manpage"
|
||||
"$0" -work_as_filter "$raw_html"
|
||||
rm "$raw_html"
|
||||
rm "$man_dir"/man1
|
||||
|
||||
fi
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -52,6 +52,7 @@ int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag)
|
||||
if(Sfile_str(xorriso->abort_on_text,severity,0)<=0)
|
||||
return(-1);
|
||||
xorriso->abort_on_severity= sev;
|
||||
xorriso->abort_on_is_default= 0;
|
||||
Xorriso_set_abort_severity(xorriso, 0);
|
||||
return(1);
|
||||
}
|
||||
@ -93,6 +94,8 @@ int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag)
|
||||
/* Option -add */
|
||||
/* @param flag bit0=do not report the added item
|
||||
bit1=do not reset pacifier, no final pacifier message
|
||||
bit2= prepend ISO working directory in any case
|
||||
bit3= unescape \\
|
||||
*/
|
||||
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
@ -126,19 +129,26 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
|
||||
else
|
||||
rpt= wpt= source;
|
||||
for(; *rpt!=0; rpt++) {
|
||||
if(*rpt=='\\')
|
||||
if(*rpt=='\\') {
|
||||
if(*(rpt+1)=='=')
|
||||
continue;
|
||||
if((flag & 8) && *(rpt + 1) == '\\')
|
||||
rpt++;
|
||||
}
|
||||
*(wpt++)= *rpt;
|
||||
}
|
||||
*wpt= 0;
|
||||
}
|
||||
if(split==0) {
|
||||
if(split==0)
|
||||
strcpy(target, source);
|
||||
} else if(target[0]!='/') {
|
||||
if(flag & 4) {
|
||||
ret= Sfile_prepend_path(xorriso->wdi, target, 0);
|
||||
if(ret<=0)
|
||||
if(ret<=0) {
|
||||
sprintf(xorriso->info_text, "Effective path gets much too long (%d)",
|
||||
(int) (strlen(xorriso->wdi)+strlen(target)+1));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
goto problem_handler;
|
||||
}
|
||||
}
|
||||
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, target, eff_path, 2);
|
||||
@ -255,6 +265,60 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
/* Option -append_partition */
|
||||
int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text,
|
||||
char *type_text, char *image_path, int flag)
|
||||
{
|
||||
int partno = 0, type_code= -1, i;
|
||||
unsigned int unum;
|
||||
char *tpt;
|
||||
static char *part_type_names[] = {"FAT12", "FAT16", "Linux", "", NULL};
|
||||
static int part_type_codes[] = { 0x01, 0x06, 0x83, 0x00};
|
||||
|
||||
sscanf(partno_text, "%d", &partno);
|
||||
if(partno < 1 || partno > Xorriso_max_appended_partitionS) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition number '%s' is out of range (1...%d)",
|
||||
partno_text, Xorriso_max_appended_partitionS);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
for(i= 0; part_type_names[i] != NULL; i++)
|
||||
if(strcmp(part_type_names[i], type_text) == 0)
|
||||
break;
|
||||
if(part_type_names[i] != NULL)
|
||||
type_code= part_type_codes[i];
|
||||
if(type_code < 0) {
|
||||
tpt= type_text;
|
||||
if(strncmp(tpt, "0x", 2) == 0)
|
||||
tpt+= 2;
|
||||
else
|
||||
goto bad_type;
|
||||
unum= 0xffffffff;
|
||||
sscanf(tpt, "%X", &unum);
|
||||
if(unum > 0xff) {
|
||||
bad_type:;
|
||||
sprintf(xorriso->info_text,
|
||||
"-append_partition: Partition type '%s' is out of range (0x00...0xff)",
|
||||
type_text);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
type_code= unum;
|
||||
}
|
||||
|
||||
if(xorriso->appended_partitions[partno - 1] != NULL)
|
||||
free(xorriso->appended_partitions[partno - 1]);
|
||||
xorriso->appended_partitions[partno - 1]= strdup(image_path);
|
||||
if(xorriso->appended_partitions[partno - 1] == NULL) {
|
||||
Xorriso_no_malloc_memory(xorriso, NULL, 0);
|
||||
return(-1);
|
||||
}
|
||||
xorriso->appended_part_types[partno - 1]= type_code;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -application_id */
|
||||
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
|
||||
int flag)
|
||||
@ -567,7 +631,7 @@ int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
|
||||
{
|
||||
int was_ok= 1, ret, isolinux_grub= 0, count;
|
||||
unsigned int u;
|
||||
char *formpt, *treatpt;
|
||||
char *formpt, *treatpt, eff_path[SfileadrL];
|
||||
double num;
|
||||
|
||||
formpt= form;
|
||||
@ -614,6 +678,8 @@ treatment_patch:;
|
||||
xorriso->patch_isolinux_image= 0;
|
||||
xorriso->boot_image_bin_path[0]= 0;
|
||||
xorriso->patch_system_area= 0;
|
||||
if((xorriso->system_area_options & 0xfc ) == 0)
|
||||
xorriso->system_area_options= 0; /* Reset eventual type 0 flags */
|
||||
if(xorriso->boot_count > 0) {
|
||||
ret= Xorriso_attach_boot_image(xorriso, 2); /* dispose boot images */
|
||||
if(ret <= 0)
|
||||
@ -730,6 +796,47 @@ treatment_patch:;
|
||||
xorriso->keep_boot_image= 0;
|
||||
xorriso->boot_efi_default= 1;
|
||||
|
||||
} else if(strncmp(treatpt, "mips_path=", 10) == 0) {
|
||||
sprintf(eff_path, "-boot_image %s mips_path=", formpt);
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 1, 0, eff_path, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 10,
|
||||
eff_path, 2);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_add_mips_boot_file(xorriso, eff_path, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
} else if(strncmp(treatpt, "mipsel_path=", 12) == 0) {
|
||||
sprintf(eff_path, "-boot_image %s mipsel_path=", formpt);
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 2, 0, eff_path, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 12,
|
||||
eff_path, 2);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
ret= Xorriso_add_mips_boot_file(xorriso, eff_path, 2);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
} else if(strcmp(treatpt, "mips_discard") == 0 ||
|
||||
strcmp(treatpt, "mipsel_discard") == 0 ||
|
||||
strcmp(treatpt, "sparc_discard") == 0) {
|
||||
xorriso->system_area_options&= ~0xfc; /* system area type 0 */
|
||||
Xorriso_add_mips_boot_file(xorriso, "", 1); /* give up MIPS boot files */
|
||||
|
||||
} else if(strncmp(treatpt, "sparc_label=", 12) == 0) {
|
||||
sprintf(eff_path, "-boot_image %s sparc_path=", formpt);
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 3, 0, eff_path, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
strncpy(xorriso->ascii_disc_label, treatpt + 12,
|
||||
Xorriso_disc_label_sizE - 1);
|
||||
xorriso->ascii_disc_label[Xorriso_disc_label_sizE - 1] = 0;
|
||||
|
||||
} else if(strncmp(treatpt, "boot_info_table=", 16)==0) {
|
||||
if(strcmp(treatpt + 16, "off") == 0)
|
||||
xorriso->patch_isolinux_image= 0;
|
||||
@ -771,23 +878,27 @@ treatment_patch:;
|
||||
}
|
||||
|
||||
} else if(strncmp(treatpt, "system_area=", 12) == 0) {
|
||||
if(strcmp(formpt, "isolinux")==0) {
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 0, 2,
|
||||
"-boot_image isolinux system_area=", 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
}
|
||||
ret= Xorriso_set_system_area_path(xorriso, treatpt + 12, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
if(strcmp(formpt, "isolinux")==0)
|
||||
xorriso->system_area_options= (xorriso->system_area_options & ~3) | 2;
|
||||
|
||||
} else if(strncmp(treatpt, "partition_table=", 16)==0) {
|
||||
if(strcmp(treatpt + 16, "off") == 0) {
|
||||
xorriso->system_area_options&= ~3;
|
||||
xorriso->patch_system_area= xorriso->system_area_options;
|
||||
} else if(strcmp(treatpt + 16, "on") == 0) {
|
||||
xorriso->system_area_options&= ~3;
|
||||
sprintf(eff_path, "-boot_image %s partition_table=", formpt);
|
||||
if(strcmp(formpt, "isolinux")==0)
|
||||
xorriso->system_area_options|= 2;
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 0, 2, eff_path, 0);
|
||||
else
|
||||
xorriso->system_area_options|= 1;
|
||||
xorriso->patch_system_area= xorriso->system_area_options;
|
||||
ret= Xorriso_coordinate_system_area(xorriso, 0, 1, eff_path, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
} else
|
||||
was_ok= 0;
|
||||
|
||||
@ -825,6 +936,23 @@ treatment_patch:;
|
||||
}
|
||||
xorriso->partition_secs_per_head= u;
|
||||
|
||||
} else if(strncmp(treatpt, "partition_cyl_align=", 20)==0) {
|
||||
if(strcmp(treatpt + 20, "auto") == 0)
|
||||
xorriso->system_area_options= (xorriso->system_area_options & ~0x300);
|
||||
else if(strcmp(treatpt + 20, "on") == 0)
|
||||
xorriso->system_area_options=
|
||||
(xorriso->system_area_options & ~0x300) | 0x100;
|
||||
else if(strcmp(treatpt + 20, "off") == 0)
|
||||
xorriso->system_area_options=
|
||||
(xorriso->system_area_options & ~0x300) | 0x200;
|
||||
else {
|
||||
sprintf(xorriso->info_text,
|
||||
"-boot_image %s partition_cyl_align: unknown mode : %s",
|
||||
formpt, treatpt + 20);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
} else if(strncmp(treatpt, "platform_id=", 12)==0) {
|
||||
if(strncmp(treatpt + 12, "0x", 2) == 0)
|
||||
sscanf(treatpt + 14, "%x", &u);
|
||||
@ -1570,6 +1698,17 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
/* Option -clone */
|
||||
int Xorriso_option_clone(struct XorrisO *xorriso, char *origin, char *dest,
|
||||
int flag)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret= Xorriso_clone_tree(xorriso, NULL, origin, dest, 0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* Option -close "on"|"off" */
|
||||
int Xorriso_option_close(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
@ -1623,8 +1762,11 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag)
|
||||
strcpy(newdev, xorriso->outdev);
|
||||
if(xorriso->grow_blindly_msc2>=0)
|
||||
ret= Xorriso_option_dev(xorriso, "", 3|4);
|
||||
else
|
||||
else {
|
||||
xorriso->displacement= 0;
|
||||
xorriso->displacement_sign= 0;
|
||||
ret= Xorriso_option_dev(xorriso, newdev, 3|4);
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -1771,6 +1913,102 @@ int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -cp_clone */
|
||||
int Xorriso_option_cp_clone(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int i, end_idx_dummy, ret, is_dir= 0, was_failure= 0, fret, pass;
|
||||
char eff_origin[SfileadrL], eff_dest[SfileadrL], dest_dir[SfileadrL];
|
||||
char leafname[SfileadrL];
|
||||
int optc= 0;
|
||||
char **optv= NULL;
|
||||
struct stat stbuf;
|
||||
|
||||
ret= Xorriso_cpmv_args(xorriso, "-cp_clone", argc, argv, idx,
|
||||
&optc, &optv, eff_dest, 1);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
if(ret == 1 && optc > 1) {
|
||||
nondir_exists:;
|
||||
sprintf(xorriso->info_text,
|
||||
"-cp_clone: Copy address already exists and is not a directory: ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
strcpy(dest_dir, eff_dest);
|
||||
if(optc == 1) {
|
||||
ret= Xorriso_iso_lstat(xorriso, eff_dest, &stbuf, 0);
|
||||
if(ret >= 0) {
|
||||
if(S_ISDIR(stbuf.st_mode))/* target directory exists */
|
||||
is_dir= 1;
|
||||
else
|
||||
goto nondir_exists;
|
||||
}
|
||||
} else {
|
||||
is_dir= 1;
|
||||
ret= Xorriso_mkdir(xorriso, dest_dir, 1 | 2);
|
||||
if(ret < 0)
|
||||
{ret= -(ret != -1); goto ex;}
|
||||
}
|
||||
|
||||
/* Pass 0 checks whether the way is clear, pass 1 does the cloning */
|
||||
for(pass= 0; pass < 2; pass++) {
|
||||
for(i= 0; i<optc; i++) {
|
||||
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi,
|
||||
optv[i], eff_origin, !!pass);
|
||||
if(ret<=0 || xorriso->request_to_abort)
|
||||
goto problem_handler;
|
||||
if(is_dir) {
|
||||
ret= Sfile_leafname(eff_origin, leafname, 0);
|
||||
if(ret<=0)
|
||||
goto problem_handler;
|
||||
strcpy(eff_dest, dest_dir);
|
||||
ret= Sfile_add_to_path(eff_dest, leafname, 0);
|
||||
if(ret<=0) {
|
||||
sprintf(xorriso->info_text, "Effective path gets much too long (%d)",
|
||||
(int) (strlen(eff_dest)+strlen(leafname)+1));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
goto problem_handler;
|
||||
}
|
||||
}
|
||||
ret= Xorriso_iso_lstat(xorriso, eff_dest, &stbuf, 0);
|
||||
if(pass == 0) {
|
||||
/* It is ok if both are directories */;
|
||||
if(ret >= 0 && S_ISDIR(stbuf.st_mode)) {
|
||||
ret= Xorriso_iso_lstat(xorriso, eff_origin, &stbuf, 0);
|
||||
if (ret >= 0 && S_ISDIR(stbuf.st_mode))
|
||||
ret= -1;
|
||||
}
|
||||
if(ret >= 0) {
|
||||
sprintf(xorriso->info_text, "Cloning: May not overwrite: ");
|
||||
Text_shellsafe(eff_dest, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
goto problem_handler;
|
||||
}
|
||||
} else {
|
||||
ret= Xorriso_clone_tree(xorriso, NULL, eff_origin, eff_dest, 1);
|
||||
if(ret <= 0)
|
||||
goto problem_handler;
|
||||
}
|
||||
|
||||
continue; /* regular bottom of loop */
|
||||
problem_handler:;
|
||||
was_failure= 1;
|
||||
fret= Xorriso_eval_problem_status(xorriso, ret, 1|2);
|
||||
if(fret>=0)
|
||||
continue;
|
||||
goto ex;
|
||||
}
|
||||
}
|
||||
ret= !was_failure;
|
||||
ex:;
|
||||
Xorriso_opt_args(xorriso, "-cp_clone",
|
||||
argc, argv, *idx, &end_idx_dummy, &optc, &optv, 256);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* Option -cpr alias -cpri */
|
||||
int Xorriso_option_cpri(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
@ -1844,7 +2082,7 @@ ex:;
|
||||
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int i, ret, is_dir= 0, was_failure= 0, fret, end_idx_dummy;
|
||||
int i, ret, is_dir= 0, was_failure= 0, fret, end_idx_dummy, problem_count;
|
||||
char eff_origin[SfileadrL], eff_dest[SfileadrL];
|
||||
char dest_dir[SfileadrL], leafname[SfileadrL], sfe[5*SfileadrL];
|
||||
char **eff_src_array= NULL, **eff_tgt_array= NULL;
|
||||
@ -1947,8 +2185,9 @@ problem_handler:;
|
||||
}
|
||||
|
||||
if(eff_src_array != NULL) {
|
||||
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array, 0);
|
||||
if(ret <= 0)
|
||||
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array,
|
||||
&problem_count, 0);
|
||||
if(ret <= 0 || problem_count > 0)
|
||||
was_failure= 1;
|
||||
}
|
||||
if(xorriso->pacifier_count>0)
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -199,6 +199,37 @@ int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -displacement [-]offset */
|
||||
int Xorriso_option_displacement(struct XorrisO *xorriso, char *value, int flag)
|
||||
{
|
||||
double num;
|
||||
int displacement_sign= 1, l;
|
||||
char *cpt;
|
||||
|
||||
cpt= value;
|
||||
if(value[0] == '-') {
|
||||
displacement_sign= -1;
|
||||
cpt++;
|
||||
} else if(value[0] == '+')
|
||||
cpt++;
|
||||
num= Scanf_io_size(cpt, 0);
|
||||
l= strlen(cpt);
|
||||
if(cpt[l - 1] < '0' || cpt[l - 1] > '9')
|
||||
num/= 2048.0;
|
||||
if(num < 0.0 || num > 4294967295.0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-displacement: too large or too small: '%s'", value);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
if(num == 0)
|
||||
displacement_sign= 0;
|
||||
xorriso->displacement= num;
|
||||
xorriso->displacement_sign= displacement_sign;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -drive_class */
|
||||
int Xorriso_option_drive_class(struct XorrisO *xorriso,
|
||||
char *d_class, char *pattern, int flag)
|
||||
@ -269,6 +300,25 @@ int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -early_stdio_test */
|
||||
int Xorriso_option_early_stdio_test(struct XorrisO *xorriso, char *mode,
|
||||
int flag)
|
||||
{
|
||||
if(strcmp(mode, "on") == 0)
|
||||
xorriso->early_stdio_test= 2 | 4;
|
||||
else if(strcmp(mode, "off") == 0)
|
||||
xorriso->early_stdio_test= 0;
|
||||
else if(strcmp(mode, "appendable_wo") == 0)
|
||||
xorriso->early_stdio_test= 2 | 4 | 8;
|
||||
else {
|
||||
sprintf(xorriso->info_text, "-early_stdio_test: unknown mode '%s'", mode);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -eject */
|
||||
/* @param flag bit0=do not report toc of eventually remaining drives
|
||||
*/
|
||||
@ -310,7 +360,7 @@ int Xorriso_option_end(struct XorrisO *xorriso, int flag)
|
||||
else
|
||||
cmd= "-end";
|
||||
if(xorriso->volset_change_pending) {
|
||||
if(flag&1)
|
||||
if((flag & 1) || xorriso->volset_change_pending != 1)
|
||||
which_will= "end the program discarding image changes";
|
||||
else
|
||||
which_will= "commit image changes and then end the program";
|
||||
@ -324,7 +374,7 @@ int Xorriso_option_end(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
if(xorriso->volset_change_pending) {
|
||||
if(flag&1) {
|
||||
if((flag & 1) || xorriso->volset_change_pending != 1) {
|
||||
xorriso->volset_change_pending= 0;
|
||||
} else {
|
||||
ret= Xorriso_option_commit(xorriso, 1);
|
||||
@ -368,6 +418,8 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
|
||||
sprintf(xorriso->info_text, "-errfile_log: Unknown mode %s",
|
||||
Text_shellsafe(mode, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
if(fp != NULL)
|
||||
fclose(fp);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@ -455,7 +507,7 @@ int Xorriso_option_external_filter(struct XorrisO *xorriso,
|
||||
int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
|
||||
char *disk_path, int flag)
|
||||
{
|
||||
int ret;
|
||||
int ret, problem_count;
|
||||
char eff_origin[SfileadrL], eff_dest[SfileadrL], *ipth, *eopt[1], *edpt[1];
|
||||
|
||||
if(xorriso->allow_restore <= 0) {
|
||||
@ -485,12 +537,13 @@ int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
|
||||
|
||||
eopt[0]= eff_origin;
|
||||
edpt[0]= eff_dest;
|
||||
ret= Xorriso_restore_sorted(xorriso, 1, eopt, edpt, (flag & 32 ? 33 : 0));
|
||||
ret= Xorriso_restore_sorted(xorriso, 1, eopt, edpt, &problem_count,
|
||||
(flag & 32 ? 33 : 0));
|
||||
|
||||
if(!(flag&2))
|
||||
Xorriso_pacifier_callback(xorriso, "files restored",xorriso->pacifier_count,
|
||||
xorriso->pacifier_total, "", 1|4);
|
||||
if(ret<=0)
|
||||
if(ret <= 0 || problem_count > 0)
|
||||
goto ex;
|
||||
|
||||
if(!(flag&1)) {
|
||||
@ -843,15 +896,22 @@ not_enough_exec_arguments:;
|
||||
job= new_job;
|
||||
|
||||
} else if(strcmp(cpt, "compare")==0 || strcmp(cpt, "update")==0 ||
|
||||
strcmp(cpt, "widen_hardlinks")==0) {
|
||||
strcmp(cpt, "widen_hardlinks")==0 ||
|
||||
strcmp(cpt, "update_merge")==0) {
|
||||
if(i+1>=end_idx)
|
||||
goto not_enough_exec_arguments;
|
||||
i++;
|
||||
action= 14;
|
||||
if(strcmp(cpt, "update")==0)
|
||||
action= 17;
|
||||
if(strcmp(cpt, "widen_hardlinks")==0)
|
||||
else if(strcmp(cpt, "widen_hardlinks")==0)
|
||||
action= 32;
|
||||
else if(strcmp(cpt, "update_merge") == 0) {
|
||||
action= 41;
|
||||
/* Enter update_merge mode for node adding */
|
||||
xorriso->update_flags|= 1;
|
||||
}
|
||||
|
||||
ret= Xorriso_make_abs_adr(xorriso, xorriso->wdx, argv[i],
|
||||
other_path_start, 1|2|4|8);
|
||||
if(ret<=0)
|
||||
@ -975,6 +1035,14 @@ not_enough_exec_arguments:;
|
||||
goto sorry_ex;
|
||||
}
|
||||
Findjob_set_action_type(job, 39, type, 0);
|
||||
} else if(strcmp(cpt, "estimate_size")==0) {
|
||||
Findjob_set_action_target(job, 40, NULL, 0);
|
||||
} else if(strcmp(cpt, "rm_merge")==0) {
|
||||
Findjob_set_action_target(job, 42, NULL, 0);
|
||||
xorriso->update_flags&= ~1; /* End update_merge mode for node adding */
|
||||
} else if(strcmp(cpt, "clear_merge")==0) {
|
||||
Findjob_set_action_target(job, 43, NULL, 0);
|
||||
xorriso->update_flags&= ~1; /* End update_merge mode for node adding */
|
||||
} else {
|
||||
sprintf(xorriso->info_text, "-find -exec: unknown action %s",
|
||||
Text_shellsafe(argv[i], sfe, 0));
|
||||
@ -1009,6 +1077,15 @@ ex:;
|
||||
xorriso->pacifier_count, 0, "", 1);
|
||||
if(first_job->action == 35 && !(flag & 1))
|
||||
Xorriso_report_md5_outcome(xorriso, first_job->target, 0);
|
||||
if(first_job->action == 40) {
|
||||
sprintf(xorriso->result_line,"Size lower : %lus\n",
|
||||
(unsigned long) (first_job->estim_lower_size / (off_t) 2048));
|
||||
Xorriso_result(xorriso,0);
|
||||
sprintf(xorriso->result_line,"Size upper : %lus\n",
|
||||
(unsigned long) ((first_job->estim_upper_size / (off_t) 2048) +
|
||||
!!(first_job->estim_upper_size % 2048)));
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
if(access_acl_text != NULL)
|
||||
free(access_acl_text);
|
||||
if(default_acl_text != NULL)
|
||||
@ -1315,6 +1392,10 @@ 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.",
|
||||
" -displacement [-]block_address",
|
||||
" When loading ISO tree or reading data files compensate a",
|
||||
" displacement versus the start address for which the image",
|
||||
" was prepared.",
|
||||
" -rom_toc_scan \"on\"|\"force\"|\"off\"[:\"emul_on\"|\"emul_off\"]",
|
||||
" Enable scanning for ISO sessions on read-only drives/media",
|
||||
" resp. on overwriteable media with emulated TOC.",
|
||||
@ -1352,6 +1433,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Enable production of scdbackup tag with -md5 on",
|
||||
" -ban_stdio_write",
|
||||
" Allow for writing only the usage of optical drives.",
|
||||
" -early_stdio_test \"on\"|\"appendable_wo\"|\"off\"",
|
||||
" Classify stdio drives by effective access permissions.",
|
||||
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
|
||||
" Blank media resp. invalidate ISO image on media.",
|
||||
" -format \"as_needed\"|\"full\"|\"fast\"|\"by_index_#\"|\"by_size_#\"",
|
||||
@ -1376,6 +1459,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Specifies the name of the Abstract File. (37 chars)",
|
||||
" -joliet \"on\"|\"off\"",
|
||||
" Generate Joliet info additional to Rock Ridge info.",
|
||||
" -jigdo \"clear\"|\"template_path\"|\"jigdo_path\"|\"md5_path\"",
|
||||
" |\"min_size\"|\"checksum_iso\"|\"checksum_template\"",
|
||||
" |\"compression\"|\"exclude\"|\"demand_md5\"|\"mapping\"",
|
||||
" |\"checksum_iso\"|\"checksum_template\"",
|
||||
" value",
|
||||
" Clear Jigdo Template Extraction parameter list or add a",
|
||||
" parameter with its value to that list.",
|
||||
" -compliance rule[:rule...]",
|
||||
" Allow more or less harmless deviations from strict standards",
|
||||
" compliance.",
|
||||
@ -1383,6 +1473,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" |\"discard\"|\"keep\"|\"patch\"|\"dir=\"|\"bin_path=\"",
|
||||
" |\"cat_path=\"|\"cat_hidden=on|iso_rr|joliet|off\"",
|
||||
" |\"load_size=\"|\"system_area=\"|\"partition_table=on|off\"",
|
||||
" |\"mips_path=\"|\"mipsel_path=\"|\"mips_discard\"",
|
||||
" |\"sparc_label=\"|\"sparc_discard\"",
|
||||
" |\"show_status\"",
|
||||
" 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. Others, like GRUB, by bin_path=...",
|
||||
@ -1391,6 +1484,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" ISO image by the usual commands like -map or -add.",
|
||||
" system_area= and partition_table= are for MBR based booting",
|
||||
" from USB stick. The system_area= file needs not to be added.",
|
||||
" mips_path= adds Big Endian MIPS boot files. mipsel_path=",
|
||||
" sets one Little Endian MIPS boot file. sparc_label=",
|
||||
" activates SUN Disk Label. All three are mutually exclusive",
|
||||
" and exclusive to MBR production.",
|
||||
" -append_partition partition_number type_code disk_path",
|
||||
" Append a prepared filesystem image after the end of the",
|
||||
" ISO image. Caution: Will be overwritten by multi-session.",
|
||||
"",
|
||||
" -uid uid User id to be used for the whole multi-session ISO image.",
|
||||
" -gid gid Group id for the same purpose.",
|
||||
@ -1535,6 +1635,11 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Create empty directories if they do not exist yet.",
|
||||
" -rmdir iso_rr_path [***]",
|
||||
" Delete empty directories.",
|
||||
" -clone iso_rr_path_original iso_rr_path_copy",
|
||||
" Create an ISO copy of an ISO file or ISO directory tree.",
|
||||
" -cp_clone iso_rr_path_original [***] iso_rr_path_dest",
|
||||
" Create ISO to ISO copies according to the rules of cp -r.",
|
||||
"",
|
||||
" -- Default list delimiter marking the end of action argument",
|
||||
" list. It may be changed by option -list_delimiter.",
|
||||
"",
|
||||
@ -1606,7 +1711,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Give up any unejected drive afterwards.",
|
||||
" -close \"on\"|\"off\"",
|
||||
" If \"on\" then mark the written media as not appendable.",
|
||||
" -padding number[\"k\"|\"m\"]",
|
||||
" -padding number[\"k\"|\"m\"]|\"included\"|\"appended\"",
|
||||
" Append extra bytes to image stream. (Default is 300k)",
|
||||
" -dummy \"on\"|\"off\"",
|
||||
" If \"on\" simulate burning. Refuse if media cannot simulate.",
|
||||
@ -1744,9 +1849,10 @@ 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|-r|-J|-V|-P|-f|-m|-exclude-list|",
|
||||
" -no-pad|-M|-C|-graft-points|-path-list|pathspecs|-z|",
|
||||
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size|-G]",
|
||||
" -no-emul-boot|-b|-c|-boot-info-table|-boot-load-size|-G|...]",
|
||||
" Perform some mkisofs gestures, understand pathspecs as mkisofs",
|
||||
" does. Commit happens outside emulation at usual occasions.",
|
||||
" For a list of options see -as mkisofs -help.",
|
||||
" -read_mkisofsrc",
|
||||
" Read and interpret the .mkisofsrc configuration file.",
|
||||
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|-multi]",
|
||||
@ -1821,6 +1927,10 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" prevents reading and interpretation of startup files.",
|
||||
" -print text",
|
||||
" Print a text to result channel.",
|
||||
" -print_info text",
|
||||
" Print a text to info channel.",
|
||||
" -print_mark text",
|
||||
" Print a text to mark channel.",
|
||||
" -prompt text",
|
||||
" Wait for Enter key resp. for a line of input at stdin.",
|
||||
" -errfile_log mode path|channel",
|
||||
|
@ -47,6 +47,17 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -jigdo aspect argument */
|
||||
int Xorriso_option_jigdo(struct XorrisO *xorriso, char *aspect, char *arg,
|
||||
int flag)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret= Xorriso_jigdo_interpreter(xorriso, aspect, arg, 0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* Option -joliet "on"|"off" */
|
||||
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
@ -440,7 +451,7 @@ int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
|
||||
int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int ret, end_idx, optc= 0, was_failure= 1, i, fret, mode;
|
||||
int ret, end_idx, optc= 0, was_failure= 1, i, fret, mode, problem_count;
|
||||
int ns_flag= 2|4, nt_flag= 2, opt_args_flag= 2, made_di_array= 0;
|
||||
char source_prefix[SfileadrL], target_prefix[SfileadrL], *cmd, **optv= NULL;
|
||||
char eff_source[SfileadrL], eff_target[SfileadrL], *source_pt, *s_wd, *t_wd;
|
||||
@ -565,7 +576,10 @@ int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
|
||||
source_prefix, strlen(source_prefix) + 1, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array, 0);
|
||||
ret= Xorriso_restore_sorted(xorriso, optc, eff_src_array, eff_tgt_array,
|
||||
&problem_count, 0);
|
||||
if(ret <= 0 || problem_count > 0)
|
||||
was_failure= 1;
|
||||
}
|
||||
if(mode==0)
|
||||
Xorriso_pacifier_callback(xorriso, "files added", xorriso->pacifier_count,
|
||||
@ -627,6 +641,10 @@ int Xorriso_option_md5(struct XorrisO *xorriso, char *mode, int flag)
|
||||
xorriso->do_md5|= 8;
|
||||
else if(l == 19 && strncmp(cpt, "stability_check_off", l) == 0)
|
||||
xorriso->do_md5&= ~8;
|
||||
else if(l == 13 && strncmp(cpt, "load_check_on", l) == 0)
|
||||
xorriso->do_md5&= ~32;
|
||||
else if(l == 14 && strncmp(cpt, "load_check_off", l) == 0)
|
||||
xorriso->do_md5|= 32;
|
||||
else {
|
||||
sprintf(xorriso->info_text, "-md5: unknown mode ");
|
||||
Text_shellsafe(cpt, xorriso->info_text, 1);
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -54,7 +54,19 @@ int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
|
||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag)
|
||||
{
|
||||
double num;
|
||||
|
||||
|
||||
if(strcmp(size, "included") == 0) {
|
||||
xorriso->do_padding_by_libisofs= 1;
|
||||
return(1);
|
||||
} else if(strcmp(size, "excluded") == 0 || strcmp(size, "appended") == 0) {
|
||||
xorriso->do_padding_by_libisofs= 0;
|
||||
return(1);
|
||||
} else if(size[0] < '0' || size[0] > '9') {
|
||||
sprintf(xorriso->info_text, "-padding: unrecognized non-numerical mode ");
|
||||
Text_shellsafe(size, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
num= Scanf_io_size(size, 0);
|
||||
if(num < 0 || num > 1024.0 * 1024.0 * 1024.0) {
|
||||
sprintf(xorriso->info_text, "-padding: wrong size %.f (allowed: %.f - %.f)",
|
||||
@ -234,17 +246,45 @@ int Xorriso_option_preparer_id(struct XorrisO *xorriso, char *name, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -print */
|
||||
/* Options -print , -print_info , -print_mark */
|
||||
/* @param flag bit0-1= channel: 0=result, 1=info, 2=mark */
|
||||
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag)
|
||||
{
|
||||
sprintf(xorriso->result_line,"%s\n",text);
|
||||
Xorriso_result(xorriso,1);
|
||||
int maxl, l, mode;
|
||||
|
||||
l= strlen(text);
|
||||
mode= flag & 3;
|
||||
if(mode == 1)
|
||||
maxl= sizeof(xorriso->info_text);
|
||||
else if(mode == 2)
|
||||
maxl= sizeof(xorriso->mark_text);
|
||||
else
|
||||
maxl= sizeof(xorriso->result_line);
|
||||
if(l >= maxl) {
|
||||
sprintf(xorriso->info_text, "Output text too long for -print%s(%d > %d)",
|
||||
mode == 1 ? "_info" : mode == 2 ? "_mark" : "", l, maxl);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
return(0);
|
||||
}
|
||||
if(mode == 1) {
|
||||
sprintf(xorriso->info_text,"%s\n", text);
|
||||
Xorriso_info(xorriso,0);
|
||||
} else if(mode == 2) {
|
||||
strcpy(xorriso->info_text, xorriso->mark_text);
|
||||
strcpy(xorriso->mark_text, text);
|
||||
Xorriso_mark(xorriso,0);
|
||||
strcpy(xorriso->mark_text, xorriso->info_text);
|
||||
} else {
|
||||
sprintf(xorriso->result_line,"%s\n",text);
|
||||
Xorriso_result(xorriso,1);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -print_size
|
||||
@param flag bit0= report in mkisofs compatible form on real stdout
|
||||
(resp. on result channel if xorriso->packet_output)
|
||||
*/
|
||||
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
@ -253,8 +293,10 @@ int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
|
||||
if(!xorriso->volset_change_pending) {
|
||||
sprintf(xorriso->info_text,"-print_size: No image modifications pending");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
sprintf(xorriso->result_line,"Image size : 0s\n");
|
||||
Xorriso_result(xorriso,0);
|
||||
if(!(flag & 1)) {
|
||||
sprintf(xorriso->result_line,"Image size : 0s\n");
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
return(2);
|
||||
}
|
||||
ret= Xorriso_write_session(xorriso, 1);
|
||||
@ -265,12 +307,16 @@ int Xorriso_option_print_size(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
if(flag&1) {
|
||||
sprintf(xorriso->result_line,"%d\n", ret);
|
||||
fd= xorriso->dev_fd_1;
|
||||
if(fd<0)
|
||||
fd= 1;
|
||||
ret= write(fd, xorriso->result_line, strlen(xorriso->result_line));
|
||||
/* (result of write intentionally ignored) */
|
||||
fsync(fd);
|
||||
if(xorriso->packet_output) {
|
||||
Xorriso_result(xorriso,0);
|
||||
} else {
|
||||
fd= xorriso->dev_fd_1;
|
||||
if(fd<0)
|
||||
fd= 1;
|
||||
ret= write(fd, xorriso->result_line, strlen(xorriso->result_line));
|
||||
/* (result of write intentionally ignored) */
|
||||
fsync(fd);
|
||||
}
|
||||
} else {
|
||||
sprintf(xorriso->result_line,"Image size : %ds\n", ret);
|
||||
Xorriso_result(xorriso,0);
|
||||
@ -1354,6 +1400,9 @@ int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag)
|
||||
bit2= do not issue pacifier messages at all
|
||||
bit3= recursive: -update_r
|
||||
bit4= do not establish and dispose xorriso->di_array
|
||||
bit5= do not delete files which are not found under
|
||||
disk_path, but rather mark visited files and mark
|
||||
files which were found.
|
||||
*/
|
||||
int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
char *iso_path, int flag)
|
||||
@ -1440,7 +1489,10 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
if(ret >= 0) {
|
||||
argv[0]= eff_dest;
|
||||
argv[1]= "-exec";
|
||||
argv[2]= "update";
|
||||
if(flag & 32)
|
||||
argv[2]= "update_merge";
|
||||
else
|
||||
argv[2]= "update";
|
||||
argv[3]= eff_origin;
|
||||
zero= 0;
|
||||
ret= Xorriso_option_find(xorriso, 4, argv, &zero,
|
||||
@ -1461,7 +1513,18 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
argv[3]= eff_dest;
|
||||
zero= 0;
|
||||
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */
|
||||
if(ret>0 && !xorriso->do_follow_mount) {
|
||||
if(ret>0 && (!xorriso->do_follow_mount) && !(flag & 32)) {
|
||||
|
||||
/* >>> ??? what about mount points with (flag & 32) ?
|
||||
empty_iso_dir shall delete those which already existed
|
||||
and are freshly excluded. (E.g. by mounting at a non-empty
|
||||
directory, or by new follow rules.)
|
||||
This deletion does not match the idea of merging.
|
||||
For determining the foreign files in a directory which is
|
||||
target of a mount point, one would have to enter that mount
|
||||
point directory. Somewhat contrary to do-not-follow.
|
||||
*/
|
||||
|
||||
argv[0]= eff_origin;
|
||||
argv[1]= "-type";
|
||||
argv[2]= "m";
|
||||
@ -1488,13 +1551,17 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
ret= -1;
|
||||
}
|
||||
} else {
|
||||
if(flag & 32)
|
||||
xorriso->update_flags|= 1; /* Enter update_merge mode for node adding */
|
||||
/* compare ctime too, no filename reporting, eventually silent */
|
||||
follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) <<28;
|
||||
ret= Xorriso_compare_2_files(xorriso, eff_origin, eff_dest, "", &result,
|
||||
2 | follow_links | ((flag&4)<<27) | (3<<30));
|
||||
if(ret==0) {
|
||||
uret= Xorriso_update_interpreter(xorriso, NULL, result, eff_origin,
|
||||
eff_dest, 0);
|
||||
if(ret == 0 || (ret > 0 && (flag & 32))) {
|
||||
if(ret > 0)
|
||||
result= 0;
|
||||
uret= Xorriso_update_interpreter(xorriso, NULL, NULL, result, eff_origin,
|
||||
eff_dest, (!!(flag & 32)) << 1);
|
||||
if(uret<=0)
|
||||
ret= -1;
|
||||
if(uret==3)
|
||||
@ -1502,7 +1569,7 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
}
|
||||
}
|
||||
xorriso->pacifier_interval= mem_pci;
|
||||
if(mem_lut!=xorriso->last_update_time && !(flag&2))
|
||||
if(mem_lut!=xorriso->last_update_time && !(flag & (2 | 4)))
|
||||
Xorriso_pacifier_callback(xorriso, "content bytes read",
|
||||
xorriso->pacifier_count, 0, "", 1);
|
||||
report_outcome:;
|
||||
@ -1553,7 +1620,7 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag)
|
||||
sprintf(xorriso->result_line,
|
||||
"ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program\n");
|
||||
sprintf(xorriso->result_line+strlen(xorriso->result_line),
|
||||
"Copyright (C) 2010, Thomas Schmitt <scdbackup@gmx.net>, libburnia project.\n");
|
||||
"Copyright (C) 2011, Thomas Schmitt <scdbackup@gmx.net>, libburnia project.\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
sprintf(xorriso->result_line,
|
||||
"xorriso version : %d.%d.%d%s\n",
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -181,9 +181,9 @@ no_memory:;
|
||||
|
||||
ret= 1;
|
||||
ex:;
|
||||
if(patterns!=NULL)
|
||||
free((char *) patterns);
|
||||
if(ret<=0) {
|
||||
if(patterns!=NULL)
|
||||
free((char *) patterns);
|
||||
Sfile_destroy_argv(&filec, &filev, 0);
|
||||
} else {
|
||||
*optc= filec;
|
||||
@ -314,8 +314,9 @@ int Xorriso_cpmv_args(struct XorrisO *xorriso, char *cmd,
|
||||
if(ret==2 || ((flag&1) && *optc > 1 && ret==0)) {
|
||||
is_dir= 1;
|
||||
} else if(*optc > 1) {
|
||||
for(i= 0; i<*optc; i++)
|
||||
Xorriso_msgs_submit(xorriso, 0, (*optv)[i], 0, "ERRFILE", 0);
|
||||
if(flag & 2)
|
||||
for(i= 0; i<*optc; i++)
|
||||
Xorriso_msgs_submit(xorriso, 0, (*optv)[i], 0, "ERRFILE", 0);
|
||||
sprintf(xorriso->info_text,
|
||||
"%s: more than one origin given, destination is a non-directory: %s",
|
||||
cmd, Text_shellsafe(destv[0], sfe, 0));
|
||||
@ -459,14 +460,15 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"backslash_codes","blank","biblio_file",
|
||||
"calm_drive","cd","cdi","cdx","charset","close",
|
||||
"commit_eject","compliance","copyright_file",
|
||||
"dev","dialog","disk_dev_ino","disk_pattern","dummy","dvd_obs","eject",
|
||||
"dev","dialog","disk_dev_ino","disk_pattern","displacement",
|
||||
"dummy","dvd_obs","early_stdio_test", "eject",
|
||||
"iso_rr_pattern","follow","format","fs","gid","grow_blindly","hardlinks",
|
||||
"history","indev","in_charset","joliet",
|
||||
"list_delimiter","list_profiles","local_charset",
|
||||
"mark","md5","mount_opts","not_leaf","not_list","not_mgt",
|
||||
"options_from_file","osirrox","outdev","out_charset","overwrite",
|
||||
"pacifier","padding","path_list","pathspecs","pkt_output",
|
||||
"preparer_id","print","prompt",
|
||||
"preparer_id","print","print_info","print_mark","prompt",
|
||||
"prog","prog_help","publisher","quoted_not_list","quoted_path_list",
|
||||
"reassure","report_about","rom_toc_scan","scsi_log",
|
||||
"session_log","speed","split_size","status","status_history_max",
|
||||
@ -476,13 +478,17 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
""
|
||||
};
|
||||
static char arg2_commands[][40]= {
|
||||
"assert_volid","boot_image","compare","compare_r","drive_class",
|
||||
"assert_volid","boot_image","clone","compare","compare_r","drive_class",
|
||||
"errfile_log","error_behavior","extract","extract_single",
|
||||
"load","logfile",
|
||||
"jigdo","load","logfile",
|
||||
"map","map_single","page","return_with",
|
||||
"scdbackup_tag","update","update_r","volume_date",
|
||||
""
|
||||
};
|
||||
static char arg3_commands[][40]= {
|
||||
"append_partition",
|
||||
""
|
||||
};
|
||||
static char arg4_commands[][40]= {
|
||||
"cut_out","extract_cut","mount","mount_cmd","paste_in","session_string",
|
||||
""
|
||||
@ -492,7 +498,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"check_md5","check_md5_r","check_media","check_media_defaults",
|
||||
"chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
|
||||
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
|
||||
"compare_l","cpr","cpri","cp_rax","cp_rx","cpax","cpx",
|
||||
"compare_l","cp_clone","cp_rax","cp_rx","cpr","cpri", "cpax","cpx",
|
||||
"du","dui","dus","dusi","dux","dusx","external_filter","extract_l",
|
||||
"file_size_limit","find","findi","finds","findx",
|
||||
"getfacl","getfacli","getfacl_r","getfacl_ri",
|
||||
@ -530,6 +536,10 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
for(i=0; arg2_commands[i][0]!=0; i++)
|
||||
if(strcmp(arg2_commands[i], cmd)==0)
|
||||
return(1);
|
||||
*count= 3;
|
||||
for(i=0; arg3_commands[i][0]!=0; i++)
|
||||
if(strcmp(arg3_commands[i], cmd)==0)
|
||||
return(1);
|
||||
*count= 4;
|
||||
for(i=0; arg4_commands[i][0]!=0; i++)
|
||||
if(strcmp(arg4_commands[i], cmd)==0)
|
||||
@ -648,6 +658,11 @@ next_command:;
|
||||
ret= Xorriso_option_alter_date(xorriso, arg1, arg2, argc, argv, idx,
|
||||
strlen(cmd)>10);
|
||||
|
||||
} else if(strcmp(cmd,"append_partition")==0) {
|
||||
(*idx)+= 3;
|
||||
ret= Xorriso_option_append_partition(xorriso, arg1, arg2, argv[*idx - 1],
|
||||
0);
|
||||
|
||||
} else if(strcmp(cmd,"application_id")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_application_id(xorriso, arg1, 0);
|
||||
@ -734,6 +749,10 @@ next_command:;
|
||||
(*idx)+= 1;
|
||||
ret= Xorriso_option_chowni(xorriso, arg1, argc, argv, idx, 0);
|
||||
|
||||
} else if(strcmp(cmd,"clone")==0) {
|
||||
(*idx)+= 2;
|
||||
ret= Xorriso_option_clone(xorriso, arg1, arg2, 1);
|
||||
|
||||
} else if(strcmp(cmd,"close")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_close(xorriso, arg1, 0);
|
||||
@ -767,13 +786,16 @@ next_command:;
|
||||
(*idx)++;
|
||||
Xorriso_option_copyright_file(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"cpr")==0 || strcmp(cmd,"cpri")==0) {
|
||||
ret= Xorriso_option_cpri(xorriso, argc, argv, idx, 0);
|
||||
} else if(strcmp(cmd,"cp_clone") == 0) {
|
||||
ret= Xorriso_option_cp_clone(xorriso, argc, argv, idx, 0);
|
||||
|
||||
} else if(strcmp(cmd,"cp_rx")==0 || strcmp(cmd,"cp_rax")==0) {
|
||||
ret= Xorriso_option_cpx(xorriso, argc, argv, idx,
|
||||
1|((strcmp(cmd,"cp_rax")==0)<<1));
|
||||
|
||||
} else if(strcmp(cmd,"cpr")==0 || strcmp(cmd,"cpri")==0) {
|
||||
ret= Xorriso_option_cpri(xorriso, argc, argv, idx, 0);
|
||||
|
||||
} else if(strcmp(cmd,"cpx")==0 || strcmp(cmd,"cpax")==0) {
|
||||
ret= Xorriso_option_cpx(xorriso, argc, argv, idx,
|
||||
(strcmp(cmd,"cpax")==0)<<1);
|
||||
@ -804,6 +826,10 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_disk_dev_ino(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"displacement")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_displacement(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"disk_pattern")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_disk_pattern(xorriso, arg1, 0);
|
||||
@ -827,6 +853,10 @@ next_command:;
|
||||
} else if(strcmp(cmd,"dux")==0 || strcmp(cmd,"dusx")==0) {
|
||||
ret= Xorriso_option_lsx(xorriso, argc, argv, idx, (cmd[2]!='s')|4);
|
||||
|
||||
} else if(strcmp(cmd,"early_stdio_test")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_early_stdio_test(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"eject")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_eject(xorriso, arg1, 0);
|
||||
@ -948,6 +978,10 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_iso_rr_pattern(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"jigdo")==0) {
|
||||
(*idx)+= 2;
|
||||
ret= Xorriso_option_jigdo(xorriso, arg1, arg2, 0);
|
||||
|
||||
} else if(strcmp(cmd,"joliet")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_joliet(xorriso, arg1, 0);
|
||||
@ -1123,6 +1157,14 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_print(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"print_info")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_print(xorriso, arg1, 1);
|
||||
|
||||
} else if(strcmp(cmd,"print_mark")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_print(xorriso, arg1, 2);
|
||||
|
||||
} else if(strcmp(cmd,"print_size")==0) {
|
||||
Xorriso_option_print_size(xorriso, 0);
|
||||
|
||||
@ -1290,7 +1332,6 @@ next_command:;
|
||||
ret= Xorriso_option_temp_mem_limit(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"test")==0) { /* This option does not exist. */
|
||||
|
||||
/* install temporary test code here */;
|
||||
|
||||
} else if(strcmp(cmd,"toc")==0) {
|
||||
@ -1373,8 +1414,6 @@ eval_any_problems:
|
||||
goto next_command;
|
||||
|
||||
ex:;
|
||||
if((!xorriso->is_dialog) && !(flag&1))
|
||||
Xorriso_mark(xorriso,0);
|
||||
fflush(stdout);
|
||||
return(ret);
|
||||
}
|
||||
@ -1453,6 +1492,8 @@ int Xorriso_dialog(struct XorrisO *xorriso, int flag)
|
||||
|
||||
if(!xorriso->dialog)
|
||||
return(1);
|
||||
if(xorriso->abort_on_is_default)
|
||||
Xorriso_option_abort_on(xorriso, "NEVER", 0);
|
||||
xorriso->is_dialog= 1;
|
||||
for(first_round= 1;1;first_round= 0) {
|
||||
if(xorriso->pending_option[0]!=0) {
|
||||
@ -1547,7 +1588,9 @@ int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
ret= Xorriso_option_no_rc(xorriso, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
|
||||
} else if(xorriso->argument_emulation >= 1 &&
|
||||
xorriso->argument_emulation <= 2) {
|
||||
{ret= 1; goto ex;}
|
||||
} else if((strcmp(cmd,"dev")==0 || strcmp(cmd,"outdev")==0 ||
|
||||
strcmp(cmd,"indev")==0) &&
|
||||
(strcmp(arg1,"stdio:/dev/fd/1")==0 || strcmp(arg1,"-")==0) &&
|
||||
|
@ -1975,6 +1975,14 @@ int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
xorriso->pacifier_byte_count+= rret;
|
||||
Xorriso_pacifier_callback(xorriso, "content bytes read",
|
||||
xorriso->pacifier_count, 0, "", 0);
|
||||
ret= Xorriso_check_for_abort(
|
||||
xorriso,
|
||||
xorriso->check_media_default != NULL
|
||||
? xorriso->check_media_default->abort_file_path
|
||||
: "/var/opt/xorriso/do_abort_check_media",
|
||||
Sfile_microtime(0), &xorriso->last_abort_file_time, 0);
|
||||
if(ret == 1)
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
ret= iso_md5_end(&ctx, data_md5);
|
||||
if(ret < 0)
|
||||
@ -2004,11 +2012,16 @@ ex:;
|
||||
if(ctx != NULL)
|
||||
iso_md5_end(&ctx, data_md5);
|
||||
if(ret < 0) {
|
||||
sprintf(xorriso->result_line, "NOT READABLE: ");
|
||||
if(ret == -2)
|
||||
sprintf(xorriso->result_line, "Aborted at: ");
|
||||
else
|
||||
sprintf(xorriso->result_line, "NOT READABLE: ");
|
||||
Text_shellsafe(path, xorriso->result_line, 1);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
if(!(flag & 1))
|
||||
Xorriso_result(xorriso,0);
|
||||
if(ret == -2)
|
||||
xorriso->request_to_abort= 1;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
@ -148,9 +148,24 @@ int Sfile_add_to_path(char path[SfileadrL], char *addon, int flag)
|
||||
|
||||
int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag)
|
||||
{
|
||||
int l, i;
|
||||
int l, i, slashes, prefix_len, path_len;
|
||||
|
||||
l= strlen(path)+strlen(prefix)+1;
|
||||
l= strlen(prefix);
|
||||
if(l == 0)
|
||||
return(1);
|
||||
|
||||
/* Do not copy slashes between both parts */
|
||||
for(prefix_len= l; prefix_len > 0; prefix_len--)
|
||||
if(prefix[prefix_len - 1] != '/')
|
||||
break;
|
||||
if(prefix_len == 0)
|
||||
prefix_len= strlen(prefix) - 1;
|
||||
path_len= strlen(path);
|
||||
for(slashes= 0; slashes < path_len; slashes++)
|
||||
if(path[slashes] != '/')
|
||||
break;
|
||||
|
||||
l= (strlen(path) - slashes) + prefix_len + 1;
|
||||
if(l>=SfileadrL) {
|
||||
|
||||
#ifdef Not_yeT
|
||||
@ -164,10 +179,16 @@ int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag)
|
||||
return(-1);
|
||||
}
|
||||
l-= strlen(path);
|
||||
for(i= strlen(path)+1; i>=0; i--)
|
||||
path[i+l]= path[i];
|
||||
strcpy(path,prefix);
|
||||
path[l-1]= '/';
|
||||
if(l < 0) {
|
||||
for(i= slashes; i <= path_len + 1; i++)
|
||||
path[i+l]= path[i];
|
||||
} else if(l > 0) {
|
||||
for(i= path_len + 1; i >= slashes; i--)
|
||||
path[i+l]= path[i];
|
||||
}
|
||||
if(prefix_len > 0)
|
||||
memcpy(path, prefix, prefix_len);
|
||||
path[l - 1 + slashes]= '/';
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -548,6 +548,7 @@ ex:;
|
||||
|
||||
/*
|
||||
@param flag bit0= iso_rr_path is freshly added and up to date
|
||||
bit1= do not mark as changed content (implied by bit0 too)
|
||||
bit2= -follow: this is not a command parameter
|
||||
@return -1= severe error
|
||||
0= not applicable for hard links
|
||||
@ -582,7 +583,7 @@ int Xorriso_hardlink_update(struct XorrisO *xorriso, int *compare_result,
|
||||
it must be updated now, even if it has currently no siblings
|
||||
which it leaves or which it joins.
|
||||
*/
|
||||
if(!(flag & 1))
|
||||
if(!(flag & (1 | 2)))
|
||||
do_overwrite= 1;
|
||||
|
||||
Xorriso__get_di(node, &old_dev, &old_ino, 0);
|
||||
|
@ -106,7 +106,7 @@ get_single:;
|
||||
l= strlen(cpt);
|
||||
if(l >= linesize - base_length - 1) {
|
||||
strncpy(linept, cpt, linesize - 1);
|
||||
line[sizeof(line)-1]= 0;
|
||||
line[linesize - 1]= 0;
|
||||
sprintf(xorriso->info_text,"Input line too long !");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
goto new_empty;
|
||||
@ -1091,7 +1091,7 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
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;
|
||||
struct Xorriso_lsT *paths, *leafs, *s;
|
||||
struct Xorriso_lsT *paths, *leafs, *s, *plst, *vlst;
|
||||
|
||||
no_defaults= flag&1;
|
||||
line= xorriso->result_line;
|
||||
@ -1242,6 +1242,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
}
|
||||
|
||||
is_default= ((xorriso->early_stdio_test & 14) == 0);
|
||||
sprintf(line, "-early_stdio_test %s\n",
|
||||
xorriso->early_stdio_test & 6 ? xorriso->early_stdio_test & 8 ?
|
||||
"appendable_wo" : "on" : "off");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (xorriso->allow_restore==0 && xorriso->do_concat_split==1 &&
|
||||
xorriso->do_auto_chmod==0 && xorriso->drives_exclusive == 1);
|
||||
mode_pt= "off";
|
||||
@ -1295,6 +1302,13 @@ 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);
|
||||
|
||||
ret= (xorriso->system_area_options & 0x300) >> 8;
|
||||
is_default= (ret == 0);
|
||||
sprintf(line,"-boot_image any partition_cyl_align=%s\n",
|
||||
ret == 0 ? "auto" : ret == 1 ? "on" : "off");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
if((xorriso->system_area_disk_path[0] || !part_table_implicit) &&
|
||||
(xorriso->partition_offset == 0 || (xorriso->system_area_options & 2))) {
|
||||
is_default= ((xorriso->system_area_options & 3) == 0);
|
||||
@ -1484,6 +1498,22 @@ 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);
|
||||
|
||||
Xorriso_lst_get_last(xorriso->jigdo_params, &plst, 0);
|
||||
Xorriso_lst_get_last(xorriso->jigdo_values, &vlst, 0);
|
||||
if(plst == NULL || vlst == NULL) {
|
||||
is_default= 1;
|
||||
sprintf(line,"-jigdo clear 'all'\n");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
}
|
||||
while(plst != NULL && vlst != NULL) {
|
||||
sprintf(line,"-jigdo %s %s\n", Xorriso_lst_get_text(plst, 0),
|
||||
Text_shellsafe(Xorriso_lst_get_text(vlst, 0), sfe, 0));
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
plst= Xorriso_lst_get_prev(plst, 0);
|
||||
vlst= Xorriso_lst_get_prev(vlst, 0);
|
||||
}
|
||||
|
||||
if(xorriso->do_global_uid) {
|
||||
sprintf(line,"-uid %lu\n", (unsigned long) xorriso->global_uid);
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
@ -1600,6 +1630,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
sprintf(line,"-padding %dk\n", xorriso->padding/1024);
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
is_default= (xorriso->do_padding_by_libisofs == 0);
|
||||
sprintf(line,"-padding %s\n",
|
||||
xorriso->do_padding_by_libisofs ? "included" : "appended");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (strcmp(xorriso->report_about_text,"UPDATE")==0);
|
||||
sprintf(line,"-report_about %s\n",xorriso->report_about_text);
|
||||
@ -1674,6 +1709,13 @@ 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->displacement == 0);
|
||||
sprintf(line, "-displacement %s%lu\n",
|
||||
xorriso->displacement_sign < 0 ? "-" : "",
|
||||
(unsigned long) xorriso->displacement);
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||
|
||||
adr_mode= xorriso->image_start_mode & 0xffff;
|
||||
if(adr_mode>=0 && adr_mode<=max_load_mode) {
|
||||
is_default= (adr_mode==0);
|
||||
@ -1768,14 +1810,16 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
is_default= ((xorriso->do_md5 & 31) == 0);
|
||||
sprintf(line, "-md5 ");
|
||||
if(xorriso->do_md5 & 1) {
|
||||
if((xorriso->do_md5 & (8)) == (8)) {
|
||||
strcat(line, "all\n");
|
||||
if((xorriso->do_md5 & 8) == 8) {
|
||||
strcat(line, "all");
|
||||
} else {
|
||||
strcat(line, "on");
|
||||
if(xorriso->do_md5 & 8)
|
||||
strcat(line, ":stability_check_on");
|
||||
strcat(line, "\n");
|
||||
}
|
||||
if(xorriso->do_md5 & 32)
|
||||
strcat(line, ":load_check_off");
|
||||
strcat(line, "\n");
|
||||
} else
|
||||
strcat(line, "off\n");
|
||||
if(!(is_default && no_defaults))
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -26,6 +26,28 @@
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef Xorriso_standalonE
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include "../libjte/libjte.h"
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
#include <libjte/libjte.h>
|
||||
#endif
|
||||
|
||||
#endif /* ! Xorriso_standalonE */
|
||||
|
||||
#include "xorriso.h"
|
||||
#include "xorriso_private.h"
|
||||
|
||||
@ -76,17 +98,18 @@ int Xorriso_make_write_options(
|
||||
|
||||
|
||||
/* @param flag bit0= do not write but only prepare and return size in sectors
|
||||
bit1= do not use isoburn wrappers
|
||||
bit1= do not use isoburn wrappers, do not assume libisofs
|
||||
*/
|
||||
int Xorriso_sanitize_image_size(struct XorrisO *xorriso,
|
||||
struct burn_drive *drive, struct burn_disc *disc,
|
||||
struct burn_write_opts *burn_options, int flag)
|
||||
{
|
||||
int ret, img_sectors, num_sessions= 0, num_tracks= 0, padding= 0, profile;
|
||||
int media_space, lba, nwa;
|
||||
int media_space, lba, nwa, multi_emul_blocks= 0;
|
||||
char profile_name[80];
|
||||
struct burn_session **sessions;
|
||||
struct burn_track **tracks;
|
||||
enum burn_disc_status s;
|
||||
|
||||
img_sectors= burn_disc_get_sectors(disc);
|
||||
|
||||
@ -117,7 +140,7 @@ no_track:;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
}
|
||||
if(xorriso->alignment == 0) {
|
||||
if(xorriso->alignment == 0 && ! (xorriso->no_emul_toc & 1)) {
|
||||
ret= isoburn_needs_emulation(drive);
|
||||
if(ret > 0) {
|
||||
/* Take care that the session is padded up to the future NWA.
|
||||
@ -125,8 +148,29 @@ no_track:;
|
||||
sessions survive and confuse -rom_toc_scan.
|
||||
*/
|
||||
xorriso->alignment= 32;
|
||||
s= isoburn_disc_get_status(drive);
|
||||
if(s == BURN_DISC_BLANK) {
|
||||
/* Count blocks before nwa as part of the image */;
|
||||
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &lba, &nwa);
|
||||
if(ret <= 0)
|
||||
nwa= 0;
|
||||
multi_emul_blocks= nwa;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!(flag & 2)) {
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
/* JTE : no multi-session, no_emul_toc, padding in libisofs */
|
||||
if(xorriso->libjte_handle != NULL)
|
||||
padding= 0;
|
||||
#endif /* ! Xorriso_with_libjtE */
|
||||
|
||||
if(xorriso->do_padding_by_libisofs)
|
||||
padding= 0;
|
||||
}
|
||||
|
||||
if(xorriso->alignment > 0) {
|
||||
if(img_sectors > 0) {
|
||||
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &lba, &nwa);
|
||||
@ -135,9 +179,9 @@ no_track:;
|
||||
lba= (nwa + img_sectors + padding) % xorriso->alignment;
|
||||
if(lba > 0)
|
||||
padding+= xorriso->alignment - lba;
|
||||
} else if(padding < xorriso->alignment)
|
||||
padding= xorriso->alignment;
|
||||
}
|
||||
}
|
||||
|
||||
burn_track_define_data(tracks[0], 0, padding * 2048, 0, BURN_MODE1);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
@ -155,7 +199,7 @@ no_track:;
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
if(flag&1) {
|
||||
ret= img_sectors+padding;
|
||||
ret= multi_emul_blocks + img_sectors + padding;
|
||||
} else
|
||||
ret= 1;
|
||||
ex:;
|
||||
@ -510,8 +554,8 @@ ex:;
|
||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, relax= 0, i, pacifier_speed= 0, data_lba, ext, is_bootable= 0;
|
||||
int freshly_bootable= 0, hide_attr;
|
||||
char xorriso_id[256], *img_id, sfe[5*SfileadrL], *out_cs;
|
||||
int freshly_bootable= 0, hide_attr, pad_by_libisofs= 0;
|
||||
char xorriso_id[256], *img_id, sfe[5*SfileadrL], *out_cs, *part_image;
|
||||
struct isoburn_imgen_opts *sopts= NULL;
|
||||
struct burn_drive_info *dinfo, *source_dinfo;
|
||||
struct burn_drive *drive, *source_drive;
|
||||
@ -527,6 +571,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
int profile_number;
|
||||
char profile_name[80];
|
||||
IsoBoot *bootcat_node;
|
||||
uint32_t padding;
|
||||
|
||||
ret= Xorriso_finish_hl_update(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
@ -546,7 +591,15 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
if(ret<=0)
|
||||
return(0);
|
||||
|
||||
s= isoburn_disc_get_status(drive);
|
||||
if(xorriso->out_drive_handle == xorriso->in_drive_handle) {
|
||||
if(abs(xorriso->displacement_sign) == 1 && xorriso->displacement != 0 &&
|
||||
s != BURN_DISC_BLANK) {
|
||||
sprintf(xorriso->info_text,
|
||||
"May not grow ISO image while -displacement is non-zero");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
source_drive= drive;
|
||||
} else {
|
||||
if(xorriso->in_drive_handle == NULL) {
|
||||
@ -557,7 +610,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
s= isoburn_disc_get_status(drive);
|
||||
if(s!=BURN_DISC_BLANK) {
|
||||
s= burn_disc_get_status(drive);
|
||||
if(s!=BURN_DISC_BLANK)
|
||||
@ -691,9 +743,10 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
&value_length, &value, 2 | 8);
|
||||
}
|
||||
|
||||
isoburn_igopt_set_level(sopts, 3);
|
||||
isoburn_igopt_set_level(sopts, xorriso->iso_level);
|
||||
ext= isoburn_igopt_rockridge |
|
||||
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
|
||||
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
|
||||
(( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) |
|
||||
(( (!(xorriso->ino_behavior & 2)) ||
|
||||
(xorriso->do_aaip & (2 | 8 | 16 | 256)) ||
|
||||
@ -701,20 +754,43 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
) * isoburn_igopt_aaip) |
|
||||
((!!(xorriso->do_md5 & 2)) * isoburn_igopt_session_md5) |
|
||||
((!!(xorriso->do_md5 & 4)) * isoburn_igopt_file_md5) |
|
||||
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability);
|
||||
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability) |
|
||||
((!!xorriso->do_old_empty) * isoburn_igopt_old_empty) |
|
||||
((flag & 1) * isoburn_igopt_will_cancel);
|
||||
if(xorriso->no_emul_toc & 1)
|
||||
ext|= isoburn_igopt_no_emul_toc;
|
||||
isoburn_igopt_set_extensions(sopts, ext);
|
||||
isoburn_igopt_set_relaxed(sopts, relax);
|
||||
ret= isoburn_igopt_set_untranslated_name_len(sopts,
|
||||
xorriso->untranslated_name_len);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
isoburn_igopt_set_sort_files(sopts, 1);
|
||||
isoburn_igopt_set_over_mode(sopts, 0, 0, (mode_t) 0, (mode_t) 0);
|
||||
isoburn_igopt_set_over_ugid(sopts, 0, 0, (uid_t) 0, (gid_t) 0);
|
||||
isoburn_igopt_set_over_ugid(sopts, 2 * !!xorriso->do_global_uid,
|
||||
2 * !!xorriso->do_global_gid,
|
||||
(uid_t) xorriso->global_uid,
|
||||
(gid_t) xorriso->global_gid);
|
||||
isoburn_igopt_set_out_charset(sopts, out_cs);
|
||||
isoburn_igopt_set_fifo_size(sopts, xorriso->fs * 2048);
|
||||
Ftimetxt(time(NULL), xorriso->scdbackup_tag_time, 8);
|
||||
isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name,
|
||||
xorriso->scdbackup_tag_time,
|
||||
xorriso->scdbackup_tag_written);
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
if(xorriso->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
if(xorriso->appended_partitions[i][0] == 0)
|
||||
continue;
|
||||
if(strcmp(xorriso->appended_partitions[i], ".") == 0)
|
||||
part_image= "";
|
||||
else
|
||||
part_image= xorriso->appended_partitions[i];
|
||||
isoburn_igopt_set_partition_img(sopts, i + 1,
|
||||
xorriso->appended_part_types[i], part_image);
|
||||
}
|
||||
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
|
||||
|
||||
if(image!=NULL && 12+strlen(Xorriso_timestamP)<80) {
|
||||
strcpy(xorriso_id, xorriso->preparer_id);
|
||||
img_id= (char *) iso_image_get_data_preparer_id(image);
|
||||
@ -733,6 +809,33 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
xorriso->vol_expiration_time, xorriso->vol_effective_time,
|
||||
xorriso->vol_uuid);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
if(xorriso->libjte_handle && (xorriso->libjte_params_given & (4 | 8))) {
|
||||
|
||||
/* >>> Check whether the mandatory parameters are set */;
|
||||
|
||||
ret= libjte_set_outfile(xorriso->libjte_handle, xorriso->outdev);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
isoburn_igopt_attach_jte(sopts, xorriso->libjte_handle);
|
||||
pad_by_libisofs= 1;
|
||||
}
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
if(xorriso->do_padding_by_libisofs || pad_by_libisofs) {
|
||||
/* Padding to be done by libisofs, not by libburn.
|
||||
*/
|
||||
padding= xorriso->padding / 2048;
|
||||
if(xorriso->padding > padding * 2048)
|
||||
padding++;
|
||||
/*
|
||||
fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
|
||||
(int) padding);
|
||||
*/
|
||||
isoburn_igopt_set_tail_blocks(sopts, padding);
|
||||
}
|
||||
|
||||
/* Make final abort check before starting expensive activities */
|
||||
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
|
||||
if(ret<0)
|
||||
@ -800,7 +903,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
|
||||
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
goto cancel_iso;
|
||||
isoburn_igopt_get_effective_lba(sopts, &(xorriso->session_lba));
|
||||
if(xorriso->do_stream_recording == 2) {
|
||||
ret= isoburn_igopt_get_data_start(sopts, &data_lba);
|
||||
@ -813,19 +916,23 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(flag&1) /* set queue severity to FAILURE */
|
||||
Xorriso_set_image_severities(xorriso, 2);
|
||||
isoburn_cancel_prepared_write(source_drive, drive, 0);
|
||||
if(flag&1) /* reset queue severity */
|
||||
Xorriso_set_image_severities(xorriso, 0);
|
||||
goto ex;
|
||||
goto cancel_iso;
|
||||
}
|
||||
|
||||
ret= Xorriso_may_burn(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
goto cancel_iso;
|
||||
|
||||
/* Important: do not return until burn_is_aborting() was checked */
|
||||
Xorriso_set_signal_handling(xorriso, 1);
|
||||
|
||||
/* De-activate eventual target file truncation in dummy mode */
|
||||
ret= isoburn_set_truncate(drive, (!xorriso->do_dummy) | 2 | 4);
|
||||
if(ret < 0)
|
||||
goto cancel_iso;
|
||||
|
||||
xorriso->run_state= 1; /* Indicate that burning has started */
|
||||
isoburn_disc_write(burn_options, disc);
|
||||
burn_write_opts_free(burn_options);
|
||||
@ -844,6 +951,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
sessions= burn_disc_get_sessions(disc, &num_sessions);
|
||||
if(num_sessions>0) {
|
||||
@ -874,7 +982,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
isoburn_sync_after_write(source_drive, drive, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
|
||||
sprintf(xorriso->info_text, "Writing to %s completed successfully.\n\n",
|
||||
Text_shellsafe(xorriso->outdev,sfe,0));
|
||||
Xorriso_info(xorriso, 0);
|
||||
ret= 1;
|
||||
@ -895,6 +1003,10 @@ ex:;
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_append_scdbackup_record(xorriso, 0);
|
||||
return(ret);
|
||||
|
||||
cancel_iso:;
|
||||
isoburn_cancel_prepared_write(source_drive, drive, 0);
|
||||
goto ex;
|
||||
}
|
||||
|
||||
|
||||
@ -943,6 +1055,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
int flag)
|
||||
{
|
||||
int ret, size, free_bytes, i, aborting= 0, emul, buffer_fill= 50, last_sector;
|
||||
int iso_wait_counter= 0, iso_cancel_limit= 5;
|
||||
struct burn_progress progress;
|
||||
char *status_text, date_text[80], *speed_unit, mem_text[8];
|
||||
enum burn_drive_status drive_status;
|
||||
@ -951,6 +1064,9 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
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;
|
||||
IsoImage *image= NULL;
|
||||
|
||||
image= isoburn_get_attached_image(drive);
|
||||
|
||||
start_time= Sfile_microtime(0);
|
||||
while(burn_drive_get_status(drive, NULL) == BURN_DRIVE_SPAWNING)
|
||||
@ -975,8 +1091,23 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
last_time= current_time;
|
||||
last_sector= progress.sector;
|
||||
drive_status= burn_drive_get_status(drive, &progress);
|
||||
if(drive_status == BURN_DRIVE_IDLE)
|
||||
|
||||
if(drive_status == BURN_DRIVE_IDLE) {
|
||||
/* To avoid a race condition between burn_source and libisofs
|
||||
writer thread: Wait for ISO generator thread to have finished.
|
||||
After some seconds kick it by isoburn_cancel_prepared_write()
|
||||
which waits for the write thread to end.
|
||||
*/
|
||||
if(image == NULL)
|
||||
break;
|
||||
if(!iso_image_generator_is_running(image))
|
||||
break;
|
||||
iso_wait_counter++;
|
||||
if(iso_wait_counter > iso_cancel_limit) {
|
||||
isoburn_cancel_prepared_write(drive, NULL, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
current_time= Sfile_microtime(0);
|
||||
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {
|
||||
if(current_time-last_time>0.2)
|
||||
@ -1109,6 +1240,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
break;
|
||||
}
|
||||
}
|
||||
iso_image_unref(image);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -1633,20 +1765,29 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
if(isoburn_needs_emulation(drive)) {
|
||||
if(flag&1) {
|
||||
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &dummy, &nwa);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot obtain next writeable address of emulated multi-session media\n");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(nwa==32)
|
||||
if(nwa == 32 && disc_state != BURN_DISC_APPENDABLE)
|
||||
nwa= 0; /* No automatic toc emulation. Formatter might not be aware. */
|
||||
burn_write_opts_set_start_byte(burn_options,((off_t) nwa) * (off_t) 2048);
|
||||
} else {
|
||||
nwa= 0;
|
||||
burn_write_opts_set_start_byte(burn_options, (off_t) 0);
|
||||
if (disc_state == BURN_DISC_APPENDABLE) {
|
||||
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &dummy, &nwa);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot obtain next writeable address of emulated appendable media\n");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
burn_write_opts_set_start_byte(burn_options,((off_t) nwa) * (off_t) 2048);
|
||||
}
|
||||
|
||||
if(write_start_address>=0) {
|
||||
@ -1696,7 +1837,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
|
||||
sprintf(xorriso->info_text, "Writing to %s completed successfully.\n\n",
|
||||
Text_shellsafe(xorriso->outdev,sfe,0));
|
||||
Xorriso_info(xorriso, 0);
|
||||
ret= 1;
|
||||
@ -1716,7 +1857,10 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
int flag)
|
||||
{
|
||||
char *npt, *cpt;
|
||||
int l, was;
|
||||
int l, was, value, ret;
|
||||
struct isoburn_imgen_opts *opts= NULL;
|
||||
char msg[160];
|
||||
off_t limit;
|
||||
|
||||
was= xorriso->relax_compliance;
|
||||
npt= cpt= mode;
|
||||
@ -1734,6 +1878,32 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
} else if(l == 7 && strncmp(cpt, "default", l) == 0) {
|
||||
xorriso->relax_compliance= Xorriso_relax_compliance_defaulT;
|
||||
|
||||
} else if((l == 18 && strncmp(cpt, "untranslated_names", l) == 0) ||
|
||||
(l == 21 && strncmp(cpt, "untranslated_names_on", l) == 0) ) {
|
||||
xorriso->untranslated_name_len = -1;
|
||||
} else if((l == 22 && strncmp(cpt, "untranslated_names_off", l) == 0)) {
|
||||
xorriso->untranslated_name_len = 0;
|
||||
} else if((l >= 22 && strncmp(cpt, "untranslated_name_len=", 22) == 0)) {
|
||||
value= -1;
|
||||
sscanf(cpt + 22, "%d", &value);
|
||||
/* Let libisoburn check the value */
|
||||
ret= isoburn_igopt_new(&opts, 0);
|
||||
if(ret != 1)
|
||||
return(-1);
|
||||
ret= isoburn_igopt_set_untranslated_name_len(opts, value);
|
||||
isoburn_igopt_destroy(&opts, 0);
|
||||
if(ret <= 0) { /* Not a tasty value */
|
||||
xorriso->relax_compliance= was;
|
||||
return(0);
|
||||
}
|
||||
xorriso->untranslated_name_len = value;
|
||||
|
||||
} else if((l == 16 && strncmp(cpt, "allow_dir_id_ext", l) == 0) ||
|
||||
(l == 19 && strncmp(cpt, "allow_dir_id_ext_on", l) == 0) ) {
|
||||
xorriso->relax_compliance|= isoburn_igopt_allow_dir_id_ext;
|
||||
} else if((l == 20 && strncmp(cpt, "allow_dir_id_ext_off", l) == 0)) {
|
||||
xorriso->relax_compliance&= ~isoburn_igopt_allow_dir_id_ext;
|
||||
|
||||
} else if((l == 12 && strncmp(cpt, "omit_version", l) == 0) ||
|
||||
(l == 15 && strncmp(cpt, "omit_version_on", l) == 0) ) {
|
||||
xorriso->relax_compliance|= isoburn_igopt_omit_version_numbers;
|
||||
@ -1794,6 +1964,12 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
} else if(l == 21 && strncmp(cpt, "joliet_long_paths_off", l) == 0) {
|
||||
xorriso->relax_compliance&= ~isoburn_igopt_joliet_longer_paths;
|
||||
|
||||
} else if((l == 17 && strncmp(cpt, "joliet_long_names", l) == 0) ||
|
||||
(l == 20 && strncmp(cpt, "joliet_long_names_on", l) == 0)) {
|
||||
xorriso->relax_compliance|= isoburn_igopt_joliet_long_names;
|
||||
} else if(l == 21 && strncmp(cpt, "joliet_long_names_off", l) == 0) {
|
||||
xorriso->relax_compliance&= ~isoburn_igopt_joliet_long_names;
|
||||
|
||||
} else if((l == 10 && strncmp(cpt, "always_gmt", l) == 0) ||
|
||||
(l == 13 && strncmp(cpt, "always_gmt_on", l) == 0)) {
|
||||
xorriso->relax_compliance|= isoburn_igopt_always_gmt;
|
||||
@ -1833,6 +2009,33 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
(l == 8 && strncmp(cpt, "emul_toc", l) == 0)) {
|
||||
xorriso->no_emul_toc&= ~1;
|
||||
|
||||
} else if((l == 13 && strncmp(cpt, "iso_9660_1999", l) == 0) ||
|
||||
(l == 16 && strncmp(cpt, "iso_9660_1999_on", l) == 0)) {
|
||||
xorriso->do_iso1999= 1;
|
||||
} else if(l == 17 && strncmp(cpt, "iso_9660_1999_off", l) == 0) {
|
||||
xorriso->do_iso1999= 0;
|
||||
|
||||
} else if((l >= 15 && strncmp(cpt, "iso_9660_level=", 15) == 0)) {
|
||||
value= 0;
|
||||
sscanf(cpt + 15, "%d", &value);
|
||||
if(value == 1 || value == 2) {
|
||||
limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - ((off_t) 1);
|
||||
xorriso->iso_level= value;
|
||||
if(xorriso->file_size_limit > limit)
|
||||
xorriso->file_size_limit= limit;
|
||||
} else if(value == 3) {
|
||||
xorriso->iso_level= value;
|
||||
if(xorriso->file_size_limit < Xorriso_default_file_size_limiT)
|
||||
xorriso->file_size_limit= Xorriso_default_file_size_limiT;
|
||||
} else {
|
||||
sprintf(msg,
|
||||
"-compliance iso_9660_level=%d : Only 1, 2, or 3 are permissible",
|
||||
value);
|
||||
Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0);
|
||||
xorriso->relax_compliance= was;
|
||||
return(0);
|
||||
}
|
||||
|
||||
} else if((l == 8 && strncmp(cpt, "iso_9660", l) == 0) ||
|
||||
(l == 11 && strncmp(cpt, "iso_9660_on", l) == 0)) {
|
||||
/* may have a meaning in future */;
|
||||
@ -1841,6 +2044,14 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"-compliance -iso_9660_off : Cannot do anything else but ISO 9660",
|
||||
0, "FAILURE", 0);
|
||||
xorriso->relax_compliance= was;
|
||||
return(0);
|
||||
|
||||
} else if((l == 9 && strncmp(cpt, "old_empty", l) == 0) ||
|
||||
(l == 12 && strncmp(cpt, "old_empty_on", l) == 0)) {
|
||||
xorriso->do_old_empty= 1;
|
||||
} else if(l == 13 && strncmp(cpt, "old_empty_off", l) == 0) {
|
||||
xorriso->do_old_empty= 0;
|
||||
|
||||
} else {
|
||||
if(l<SfileadrL)
|
||||
@ -1870,6 +2081,9 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
|
||||
return(1);
|
||||
}
|
||||
strcpy(mode, "clear");
|
||||
sprintf(mode + strlen(mode), ":iso_9660_level=%d", xorriso->iso_level);
|
||||
if(r & isoburn_igopt_allow_dir_id_ext)
|
||||
strcat(mode, ":allow_dir_id_ext");
|
||||
if(r & isoburn_igopt_omit_version_numbers)
|
||||
strcat(mode, ":omit_version");
|
||||
if(r & isoburn_igopt_only_iso_versions)
|
||||
@ -1890,6 +2104,8 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
|
||||
strcat(mode, ":full_ascii");
|
||||
if(r & isoburn_igopt_joliet_longer_paths)
|
||||
strcat(mode, ":joliet_long_paths");
|
||||
if(r & isoburn_igopt_joliet_long_names)
|
||||
strcat(mode, ":joliet_long_names");
|
||||
if(r & isoburn_igopt_always_gmt)
|
||||
strcat(mode, ":always_gmt");
|
||||
if(r & isoburn_igopt_dir_rec_mtime)
|
||||
@ -1905,9 +2121,17 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
|
||||
}
|
||||
if(xorriso->no_emul_toc & 1)
|
||||
strcat(mode, ":no_emul_toc");
|
||||
|
||||
if(xorriso->untranslated_name_len != 0)
|
||||
sprintf(mode + strlen(mode), ":untranslated_name_len=%d",
|
||||
xorriso->untranslated_name_len);
|
||||
if(xorriso->do_iso1999)
|
||||
sprintf(mode + strlen(mode), ":iso_9660_1999");
|
||||
if(xorriso->do_old_empty)
|
||||
sprintf(mode + strlen(mode), ":old_empty");
|
||||
return(1 +
|
||||
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)));
|
||||
(r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1)
|
||||
&& xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999 &&
|
||||
xorriso->iso_level == 3));
|
||||
}
|
||||
|
||||
|
||||
@ -1976,7 +2200,6 @@ int Xorriso_set_isolinux_options(struct XorrisO *xorriso,
|
||||
if(make_isohybrid_mbr) {
|
||||
sprintf(xorriso->info_text, "Will write isohybrid MBR.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
xorriso->alignment= 512;
|
||||
}
|
||||
ret= el_torito_set_isolinux_options(bootimg,
|
||||
patch_table | (make_isohybrid_mbr << 1),0);
|
||||
@ -2033,8 +2256,11 @@ int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
|
||||
}
|
||||
if(iso_lba < 32)
|
||||
return(2);
|
||||
|
||||
if(!(flag & 2)) {
|
||||
/* head_buffer was not filled yet. Read it from output media. */
|
||||
if(burn_drive_get_drive_role(drive) == 5) /* write-only */
|
||||
return(2);
|
||||
if(job != NULL && job->data_to_fd >= 0) {
|
||||
if((flag & 8) && job->sector_map != NULL) {
|
||||
ret= Sectorbitmap_bytes_are_set(job->sector_map,
|
||||
|
@ -9,7 +9,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 10, 2010"
|
||||
.TH XORRISO 1 "Apr 03, 2011"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.\"
|
||||
.\" Some roff macros, for reference:
|
||||
@ -376,9 +376,8 @@ demands a file name length of up to 255 characters and paths of up to 1024
|
||||
characters. Rock Ridge fulfills this demand.
|
||||
.PP
|
||||
An \fBEl Torito\fR
|
||||
boot record connects one or more boot images, which are binary program files
|
||||
stored in the ISO image, with the bootstrapping facility of
|
||||
contemporary computers.
|
||||
boot record points the BIOS bootstrapping facility to one or more boot
|
||||
images, which are binary program files stored in the ISO image.
|
||||
The content of the boot image files is not in the scope of El Torito.
|
||||
.br
|
||||
Most bootable GNU/Linux CDs are equipped with ISOLINUX or GRUB boot images.
|
||||
@ -397,7 +396,8 @@ Emulation -as mkisofs supports the example options out of the ISOLINUX wiki,
|
||||
the options used in GRUB script grub-mkrescue, and the example in the
|
||||
FreeBSD AvgLiveCD wiki.
|
||||
.br
|
||||
The support for other boot image types is sparse.
|
||||
There is support for boot facilities other than PC BIOS:
|
||||
EFI, MIPS Big Endian (SGI), MIPS Little Endian (DEC), SUN SPARC.
|
||||
.br
|
||||
.PP
|
||||
\fBACL\fR
|
||||
@ -641,6 +641,26 @@ 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\-displacement\fR [-]lba
|
||||
Compensate an eventual displacement of the image versus the start address
|
||||
for which the image was prepared. This affects only loading of ISO images
|
||||
and reading of their files. The multi-session method of growing is not allowed
|
||||
as long as -displacement is non-zero. I.e. -indev and -outdev must be
|
||||
different. Eventually the displacement is reset to 0 before the drive
|
||||
gets re-aquired after writing.
|
||||
.br
|
||||
Examples:
|
||||
.br
|
||||
If a track of a CD starts at block 123456 and gets copied to a disk file
|
||||
where it begins at block 0, then this copy can be loaded with
|
||||
-displacement -123456.
|
||||
.br
|
||||
If an ISO image was written onto a partition with offset of 640000 blocks of
|
||||
512 bytes, then it can be loaded from the base device by -displacement 160000.
|
||||
.br
|
||||
In both cases, the ISO sessions should be self contained, i.e. not add-on
|
||||
sessions to an ISO image outside their track resp. partition.
|
||||
.TP
|
||||
\fB\-drive_class\fR "harmless"|"banned"|"caution"|"clear_list" disk_pattern
|
||||
Add a drive path pattern to one of the safety lists or make those lists empty.
|
||||
There are three lists defined which get tested in the following sequence:
|
||||
@ -751,7 +771,7 @@ Enable or disable processing of xattr attributes in user namespace.
|
||||
If enabled, then xorriso will handle xattr similar to ACL.
|
||||
See also options -getfattr, -setfattr and above paragraph about xattr.
|
||||
.TP
|
||||
\fB\-md5\fR "on"|"all"|"off"
|
||||
\fB\-md5\fR "on"|"all"|"off"|"load_check_off"
|
||||
Enable or disable processing of MD5 checksums for the overall session and for
|
||||
each single data file. If enabled then images get loaded only if eventual
|
||||
checksums tags of superblock and directory tree match properly. The MD5
|
||||
@ -772,6 +792,15 @@ Mode "all" will additionally check during image generation whether the checksum
|
||||
of a data file changed between the time when its reading began and the time
|
||||
when it ended. This implies reading every file twice.
|
||||
.br
|
||||
Mode "load_check_off" together with "on" or "all" will load recorded MD5 sums
|
||||
but not test the recorded checksum tags of superblock and directory tree.
|
||||
This is necessary if growisofs was used as burn program, because it does
|
||||
not overwrite the superblock checksum tag of the first session.
|
||||
Therefore load_check_off is in effect when xorriso -as mkisofs option -M
|
||||
is performed.
|
||||
.br
|
||||
The test can be re-enabled by mode "load_check_on".
|
||||
.br
|
||||
Checksums can be exploited via options -check_md5, -check_md5_r, via find
|
||||
actions get_md5, check_md5, and via -check_media.
|
||||
.TP
|
||||
@ -844,6 +873,19 @@ Allow for writing only the usage of MMC optical drives. Disallow
|
||||
to write the result into files of nearly arbitrary type.
|
||||
Once set, this command cannot be revoked.
|
||||
.TP
|
||||
\fB\-early_stdio_test\fR "on"|"appendable_wo"|"off"
|
||||
If enabled by "on" then regular files and block devices get tested for
|
||||
effective access permissions. This implies to try opening those files for
|
||||
writing, which otherwise will happen only later and only if actual
|
||||
writing is desired.
|
||||
.br
|
||||
The test result is used for classifying the pseudo drives as overwriteable,
|
||||
read-only, write-only, or uselessly empty. This may lead to earlier detection
|
||||
of severe problems, and may avoid some less severe error events.
|
||||
.br
|
||||
Mode "appendable_wo" is like "on" with the additional property that
|
||||
non-empty write-only files are regarded as appendable rather than blank.
|
||||
.TP
|
||||
.B Inserting files into ISO image:
|
||||
.PP
|
||||
The following commands expect file addresses of two kinds:
|
||||
@ -1031,6 +1073,31 @@ Create empty directories if they do not exist yet.
|
||||
Existence as directory generates a WARNING event, existence as
|
||||
other file causes a FAILURE event.
|
||||
.TP
|
||||
\fB\-clone\fR iso_rr_path_original iso_rr_path_copy
|
||||
Create a copy of the ISO file object iso_rr_path_original with the new
|
||||
address iso_rr_path_copy. If the original is a directory then copy all
|
||||
files and directories underneath. An eventual boot catalog file gets
|
||||
not copied but is silently ignored.
|
||||
.br
|
||||
The copied ISO file objects have the same attributes. Copied data files
|
||||
refer to the same content source as their originals.
|
||||
The copies may then be manipulated independendly of their originals.
|
||||
.br
|
||||
This command will refuse execution if the address iso_rr_path_copy
|
||||
already exists in the ISO tree.
|
||||
.TP
|
||||
\fB\-cp_clone\fR iso_rr_path_original [***] iso_rr_path_dest
|
||||
Create copies of one or more ISO file objects as with command -clone.
|
||||
Eventually merge directories with existing ones, but do not overwrite
|
||||
existing ISO file objects.
|
||||
.br
|
||||
The rules for generating the copy addresses are the same as with
|
||||
command -cpr (see above) resp. shell command cp -r. Other than with -cpr,
|
||||
relative iso_rr_path_original will get prepended the -cd path and not
|
||||
the -cdx path. Consider to -mkdir iso_rr_path_dest before -cp_clone
|
||||
so the copy address does not depend on the number of iso_rr_path_original
|
||||
arguments.
|
||||
.TP
|
||||
.B Settings for file insertion:
|
||||
.TP
|
||||
\fB\-file_size_limit\fR value [value [...]] --
|
||||
@ -1485,6 +1552,9 @@ Matches files which use data blocks marked as damaged by a previous
|
||||
run of -check_media. The damage info vanishes when a new ISO image gets
|
||||
loaded.
|
||||
.br
|
||||
Note that a MD5 session mismatch marks all files of the session as damaged.
|
||||
If finer distinction is desired, perform -md5 off before -check_media.
|
||||
.br
|
||||
\fB\-pending_data\fR :
|
||||
Matches files which get their content from outside the loaded ISO image.
|
||||
.br
|
||||
@ -1603,6 +1673,16 @@ performs command -update with the found file address as
|
||||
iso_rr_path. The corresponding file address is determined like with above
|
||||
action "compare".
|
||||
.br
|
||||
\fBupdate_merge\fR
|
||||
is like update but does not delete the found file if it is missing on disk.
|
||||
It may be run several times and records with all visited files whether their
|
||||
counterpart on disk has already been seen by one of the update_merge runs.
|
||||
Finally, a -find run with action "rm_merge" may remove all files that
|
||||
saw no counterpart on disk.
|
||||
.br
|
||||
Up to the next "rm_merge" or "clear_merge" all newly inserted files will
|
||||
get marked as having a disk counterpart.
|
||||
.br
|
||||
\fBrm\fR
|
||||
removes the found iso_rr_path from the image if it is not a directory
|
||||
with files in it. I.e. this "rm" includes "rmdir".
|
||||
@ -1611,6 +1691,14 @@ with files in it. I.e. this "rm" includes "rmdir".
|
||||
removes the found iso_rr_path from the image, including whole
|
||||
directory trees.
|
||||
.br
|
||||
\fBrm_merge\fR
|
||||
removes the found iso_rr_path if it was visited by one or more previous actions
|
||||
"update_merge" and saw no counterpart on disk in any of them. The marking from
|
||||
the update actions is removed in any case.
|
||||
.br
|
||||
\fBclear_merge\fR
|
||||
removes an eventual marking from action "update_merge".
|
||||
.br
|
||||
\fBreport_damage\fR
|
||||
classifies files whether they hit a data block that is
|
||||
marked as damaged. The result is printed together with the eventual address
|
||||
@ -1696,6 +1784,12 @@ E.g.:
|
||||
.br
|
||||
-find / -disk_name *_secret -exec hide on
|
||||
.br
|
||||
\fBestimate_size\fR
|
||||
prints a lower and an upper estimation of the number of blocks which the
|
||||
found files together will occupy in the emerging ISO image.
|
||||
This does not account for the superblock,
|
||||
for the directories in the -find path, or for image padding.
|
||||
.br
|
||||
\fBfind\fR
|
||||
performs another run of -find on the matching file address.
|
||||
It accepts the same params as -find, except iso_rr_path.
|
||||
@ -1964,32 +2058,57 @@ can be revoked individually by appending "_off". Like "deep_paths_off".
|
||||
.br
|
||||
Rule keywords are:
|
||||
.br
|
||||
"omit_version" do not add versions (";1") to ISO and Joliet file names.
|
||||
"iso_9660_level="number chooses level 1 with ISO names of the form 8.3
|
||||
and -file_size_limit <= 4g - 1, or level 2 with ISO names up to
|
||||
length 32 and the same -file_size_limit, or level 3 with ISO names up to
|
||||
length 32 and -file_size_limit >= 400g -200k. If necessary -file_size_limit
|
||||
gets adjusted.
|
||||
.br
|
||||
"only_iso_version" do not add versions (";1") to Joliet file names.
|
||||
"allow_dir_id_ext" allows ISO names of directories to have a name extension
|
||||
as with other file types. It does not force dots and it omits the version
|
||||
number, though. This is a bad tradition of mkisofs which violates ECMA-119.
|
||||
Especially ISO level 1 only allows 8 characters in a directory name and
|
||||
not 8.3.
|
||||
.br
|
||||
"deep_paths" allow ISO file paths deeper than 8 levels.
|
||||
"omit_version" does not add versions (";1") to ISO and Joliet file names.
|
||||
.br
|
||||
"long_paths" allow ISO file paths longer than 255 characters.
|
||||
"only_iso_version" does not add versions (";1") to Joliet file names.
|
||||
.br
|
||||
"long_names" allow up to 37 characters with ISO file names.
|
||||
"deep_paths" allows ISO file paths deeper than 8 levels.
|
||||
.br
|
||||
"no_force_dots" do not add a dot to ISO file names which have none.
|
||||
"long_paths" allows ISO file paths longer than 255 characters.
|
||||
.br
|
||||
"no_j_force_dots" do not add a dot to Joliet file names which have none.
|
||||
"long_names" allows up to 37 characters with ISO file names.
|
||||
.br
|
||||
"lowercase" allow lowercase characters in ISO file names.
|
||||
"no_force_dots" does not add a dot to ISO file names which have none.
|
||||
.br
|
||||
"full_ascii" allow all ASCII characters in ISO file names.
|
||||
"no_j_force_dots" does not add a dot to Joliet file names which have none.
|
||||
.br
|
||||
"joliet_long_paths" allow Joliet paths longer than 240 characters.
|
||||
"lowercase" allows lowercase characters in ISO file names.
|
||||
.br
|
||||
"always_gmt" store timestamps in GMT representation with timezone 0.
|
||||
"full_ascii" allows all ASCII characters in ISO file names.
|
||||
.br
|
||||
"rec_mtime" record with ISO files the disk file's mtime and not the
|
||||
"untranslated_names" might be dangerous for inadverted reader programs
|
||||
which rely on the restriction to at most 37 characters in ISO file names.
|
||||
This option allows ISO file names up to 96 characters with no character
|
||||
conversion. If a file name has more characters, then image production will
|
||||
fail deliberately.
|
||||
.br
|
||||
"untranslated_name_len="number enables untranslated_names with a smaller limit
|
||||
for the length of file names. 0 disables this feature, -1 chooses maximum
|
||||
length limit, numbers larger than 0 give the desired length limit.
|
||||
.br
|
||||
"joliet_long_names" allows Joliet leaf names up to 103 characters rather
|
||||
than 64.
|
||||
.br
|
||||
"joliet_long_paths" allows Joliet paths longer than 240 characters.
|
||||
.br
|
||||
"always_gmt" stores timestamps in GMT representation with timezone 0.
|
||||
.br
|
||||
"rec_mtime" records with ISO files the disk file's mtime and not the
|
||||
creation time of the image.
|
||||
.br
|
||||
"new_rr" use Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
|
||||
"new_rr" uses Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
|
||||
FreeBSD or for Solaris). This implies "aaip_susp_1_10_off" which may be changed
|
||||
by subsequent "aaip_susp_1_10".
|
||||
.br
|
||||
@ -2002,6 +2121,14 @@ rather than as official extension under SUSP-1.12.
|
||||
"no_emul_toc" saves 64 kB with the first session on overwriteable media
|
||||
but makes the image incapable of displaying its session history.
|
||||
.br
|
||||
"iso_9660_1999" causes the production of an additional directory tree
|
||||
compliant to ISO 9660:1999. It can record long filenames for readers which
|
||||
do not understand Rock Ridge.
|
||||
.br
|
||||
"old_empty" uses the old way of of giving block addresses in the range
|
||||
of [0,31] to files with no own data content. The new way is to have
|
||||
a dedicated block to which all such files will point.
|
||||
.br
|
||||
Default setting is
|
||||
.br
|
||||
"clear:only_iso_version:deep_paths:long_paths:no_j_force_dots:
|
||||
@ -2212,7 +2339,7 @@ any more (if possible at all with the given type of target media).
|
||||
This is the contrary of cdrecord, wodim, cdrskin option -multi,
|
||||
and is one aspect of growisofs option -dvd-compat.
|
||||
.TP
|
||||
\fB\-padding\fR number["k"|"m"]
|
||||
\fB\-padding\fR number["k"|"m"]|"included"|"appended"
|
||||
Append the given number of extra bytes to the image stream.
|
||||
This is a traditional remedy for a traditional bug in block
|
||||
device read drivers. Needed only for CD recordings in TAO mode.
|
||||
@ -2220,8 +2347,15 @@ Since one can hardly predict on what media an image might end up,
|
||||
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 .
|
||||
.br
|
||||
Normally padding is not written as part of the ISO image but appended
|
||||
after the image end. This is -padding mode "appended".
|
||||
.br
|
||||
Emulation command -as "mkisofs" and command -jigdo cause padding to be
|
||||
written as part of the image.
|
||||
The same effect is achieved by -padding mode "included".
|
||||
.TP
|
||||
.B El Torito bootable ISO images:
|
||||
.B Bootable ISO images:
|
||||
.PP
|
||||
Contrary to published specifications many BIOSes will load an El Torito
|
||||
record from the first session on media and not from the last one, which
|
||||
@ -2238,6 +2372,15 @@ 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.
|
||||
.br
|
||||
There are booting mechanisms which do not use an El Torito record but rather
|
||||
start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices,
|
||||
MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation,
|
||||
SUN Disk Label for SPARC machines.
|
||||
.br
|
||||
The boot firmware EFI may use programs which are located in a FAT filesystem
|
||||
and announced by an MBR partition table entry.
|
||||
.br
|
||||
.TP
|
||||
\fB\-boot_image\fR "any"|"isolinux"|"grub"
|
||||
.br
|
||||
@ -2403,12 +2546,191 @@ absolute start as well as from the partition start.
|
||||
The offset value of an ISO image gets preserved when a new session is added.
|
||||
So the value defined here is only in effect if a new ISO image gets written.
|
||||
.br
|
||||
\fBpartition_sec_hd=\fRnumber gives the number of sectors per head for
|
||||
partition offset. 0 chooses a default value.
|
||||
.br
|
||||
\fBpartition_hd_cyl=\fRnumber gives the number of heads per cylinder for
|
||||
partition offset. 0 chooses a default value.
|
||||
the partition table. 0 chooses a default value. Maximum is 255.
|
||||
.br
|
||||
\fBpartition_sec_hd=\fRnumber gives the number of sectors per head for
|
||||
the partition table. 0 chooses a default value. Maximum is 63.
|
||||
.br
|
||||
The product partition_sec_hd * partition_hd_cyl * 512 is the cylinder size.
|
||||
It should be divisible by 2048 in order to allow exact alignment.
|
||||
If it is too small to describe the image size by at most 1024 cylinders,
|
||||
then appropriate values of partition_hd_cyl are chosen with
|
||||
partition_sec_hd 32 or 63. If the image is larger than 8,422,686,720 bytes,
|
||||
then the cylinder size constraints cannot be fulfilled.
|
||||
.br
|
||||
\fBpartition_cyl_align=\fRmode controls image size alignment to an integer
|
||||
number of cylinders. It is prescribed by isohybrid specs and it seems to
|
||||
please program fdisk. Cylinder size must be divisible by 2048.
|
||||
Images larger than 8,323,596,288 bytes cannot be aligned.
|
||||
.br
|
||||
Mode "auto" is default. Alignment by padding happens only with
|
||||
"isolinux" "partition_table=on".
|
||||
.br
|
||||
Mode "on" causes alignment by padding with "partition_table=on" for any type.
|
||||
Mode "off" disables alignment for any type.
|
||||
.br
|
||||
\fBmips_path=\fRiso_rr_path declares a data file in the image to be a
|
||||
MIPS Big Endian boot file and causes production of a MIPS Big Endian Volume
|
||||
Header. This is mutually exclusive with production of other boot blocks
|
||||
like MBR.
|
||||
It will overwrite the first 512 bytes of any data eventually provided by
|
||||
system_area=.
|
||||
Up to 15 boot files can be declared by mips_path=.
|
||||
.br
|
||||
\fBmipsel_path=\fRiso_rr_path declares a data file in the image to be the
|
||||
MIPS Little Endian boot file. This is mutually exclusive with other boot
|
||||
blocks.
|
||||
It will overwrite the first 512 bytes of any data eventually
|
||||
provided by system_area=.
|
||||
Only a single boot file can be declared by mipsel_path=.
|
||||
.br
|
||||
\fBsparc_label=\fRtext causes the production of a SUN Disk Label with the
|
||||
given text as ASCII label. This boot block format allows to append images
|
||||
for partitions 2 to 8. Partition 1 will always be the ISO image.
|
||||
See option -append_partition.
|
||||
The first 512 bytes of any data eventually provided
|
||||
by system_area= will be overwritten.
|
||||
.br
|
||||
\fBmips_discard\fR and \fBsparc_discard\fR revoke any boot file
|
||||
declarations made by mips_path= or mipsel_path=. They also disable production
|
||||
of SUN Disk Label.
|
||||
This removes the ban on production of other boot blocks.
|
||||
.br
|
||||
.br
|
||||
.TP
|
||||
\fB\-append_partition\fR partition_number type_code disk_path
|
||||
Cause a prepared filesystem image to be appended to the ISO image and to be
|
||||
described by a partition table entry in a boot block at the start of the
|
||||
emerging ISO image. The partition entry will bear the size of the submitted
|
||||
file rounded up to the next multiple of 2048 bytes.
|
||||
.br
|
||||
Beware of subsequent multi-session runs. The appended partition will get
|
||||
overwritten.
|
||||
.br
|
||||
Partitions may be appended with boot block type MBR and with SUN Disk Label.
|
||||
.br
|
||||
With MBR:
|
||||
.br
|
||||
partition_number may be 1 to 4. Number 1 will put the whole ISO image into
|
||||
the unclaimed space before partition 1. So together with most xorriso MBR
|
||||
features, number 2 would be the most natural choice.
|
||||
.br
|
||||
The type_code may be "FAT12", "FAT16", "Linux",
|
||||
or a hexadecimal number between 0x00 and 0xff. Not all those numbers will
|
||||
yield usable results. For a list of codes search the Internet for
|
||||
"Partition Types" or run fdisk command "L".
|
||||
.br
|
||||
The disk_path must provide the necessary data bytes at commit time.
|
||||
An empty disk_path disables this feature for the given partition number.
|
||||
.br
|
||||
With SUN Disk Label (selected by -boot_image any sparc_label=):
|
||||
.br
|
||||
partition_number may be 2 to 8. Number 1 will always be the ISO image.
|
||||
Partition start addresses are aligned to 320 KiB. The type_code does not
|
||||
matter. Submit 0x0.
|
||||
.br
|
||||
Partition image name "." causes the partition to become a copy of the next
|
||||
lower valid one.
|
||||
.TP
|
||||
.B Jigdo Template Extraction:
|
||||
.PP
|
||||
From man genisoimage:
|
||||
"Jigdo is a tool to help in the distribution of large files like CD and
|
||||
DVD images; see http://atterer.net/jigdo/ for more details. Debian CDs
|
||||
and DVD ISO images are published on the web in jigdo format to allow
|
||||
end users to download them more efficiently."
|
||||
.br
|
||||
xorriso can produce a .jigdo and a .template file together with a
|
||||
single-session ISO image.
|
||||
The .jigdo file contains checksums and symbolic file addresses.
|
||||
The .template file contains the compressed ISO image with reference tags
|
||||
instead of the content bytes of the listed files.
|
||||
.br
|
||||
Input for this process are the normal arguments for a xorriso session
|
||||
on a blank -outdev, and a .md5 file which lists those data files which may be
|
||||
listed in the .jigdo file and externally referenced in the .template file.
|
||||
Each designated file is represented in the .md5 file by a single text line:
|
||||
.br
|
||||
MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks,
|
||||
symbolic file address
|
||||
.br
|
||||
The file address in an .md5 line has to bear the same basename as the
|
||||
disk_path of the file which it shall match. The directory path of
|
||||
the file address is decisive for To=From mapping, not for file recognition.
|
||||
After eventual To=From mapping, the file address gets written into the .jigdo
|
||||
file. Jigdo restore tools will convert these addresses into really
|
||||
reachable data source addresses from which they can read.
|
||||
.br
|
||||
If the list of jigdo parameters is not empty, then xorriso will refuse to
|
||||
write to non-blank targets, it will disable multi-session emulation, and
|
||||
eventual padding will be counted as part of the ISO image.
|
||||
.br
|
||||
.TP
|
||||
\fB\-jigdo\fR parameter_name value
|
||||
Clear Jigdo Template Extraction parameter list or add a parameter to that list.
|
||||
The alias names are the corresponding genisoimage options. They are accepted
|
||||
as parameter names as well. Especially they are recognized by the -as mkisofs
|
||||
emulation command.
|
||||
.br
|
||||
Parameter \fBclear\fR with any value empties the whole list.
|
||||
No .jigdo and .template file will be produced.
|
||||
.br
|
||||
\fBtemplate_path\fR sets the disk_path for the .template file with the
|
||||
holed and compressed ISO image copy.
|
||||
.br
|
||||
Alias: -jigdo-template
|
||||
.br
|
||||
\fBjigdo_path\fR sets the disk_path for the .jigdo file with the checksums
|
||||
and download addresses for filling the holes in .template.
|
||||
.br
|
||||
Alias: -jigdo-jigdo
|
||||
.br
|
||||
\fBmd5_path\fR sets the disk_path where to find the .md5 input file.
|
||||
.br
|
||||
Alias: -md5-list
|
||||
.br
|
||||
\fBmin_size\fR sets the minimum size for a data file to be listed
|
||||
in the .jigdo file and being a hole in the .template file.
|
||||
.br
|
||||
Alias: -jigdo-min-file-size
|
||||
.br
|
||||
\fBexclude\fR adds a regular expression pattern which will get compared
|
||||
with the absolute disk_path of any data file. A match causes the file to
|
||||
stay in .template in any case.
|
||||
.br
|
||||
Alias: -jigdo-exclude
|
||||
.br
|
||||
\fBdemand_md5\fR adds a regular expression pattern which will get compared
|
||||
with the absolute disk_path of any data file that was not found in the .md5
|
||||
list. A match causes a MISHAP event.
|
||||
.br
|
||||
Alias: -jigdo-force-md5
|
||||
.br
|
||||
\fBmapping\fR adds a string pair of the form To=From to the parameter list.
|
||||
If a data file gets listed in the .jigdo file, then it is referred by the
|
||||
file address from its line in the .md5 file. This file address gets checked
|
||||
whether it begins with the From string. If so, then this string will be
|
||||
replaced by the To string and a ':' character, before it goes into the .jigdo
|
||||
file. The From string should end by a '/' character.
|
||||
.br
|
||||
Alias: -jigdo-map
|
||||
.br
|
||||
\fBcompression\fR chooses one of "bzip2" or "gzip" for the compression of
|
||||
the template file. The jigdo file is put out uncompressed.
|
||||
.br
|
||||
Alias: -jigdo-template-compress
|
||||
.br
|
||||
\fBchecksum_iso\fR chooses one or more of "md5", "sha1", "sha256", "sha512"
|
||||
for the auxiliary "# Image Hex" checksums in the jigdo file. The value may e.g.
|
||||
look like "md5,sha1,sha512". Value "all" chooses all available algorithms.
|
||||
Note that MD5 stays always enabled.
|
||||
.br
|
||||
Alias: -checksum_algorithm_iso
|
||||
.br
|
||||
\fBchecksum_template\fR is like checksum_iso but for "# Template Hex".
|
||||
.br
|
||||
Alias: -checksum_algorithm_template
|
||||
.TP
|
||||
.B Character sets:
|
||||
.PP
|
||||
@ -2561,9 +2883,9 @@ if the threshold of option -abort_on allows this.
|
||||
.br
|
||||
"failure" aborts image tree reading on first event of at least SORRY.
|
||||
It issues an own FAILURE event.
|
||||
This is the default.
|
||||
.br
|
||||
"fatal" acts like "failure" but issues the own event as FATAL.
|
||||
This is the default.
|
||||
.br
|
||||
With occasion "file_extraction" there are three behaviors:
|
||||
.br
|
||||
@ -2580,6 +2902,10 @@ file content stems from the loaded ISO image and is not filtered.
|
||||
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
|
||||
If no -abort_on severity was set when dialog starts, then "NEVER" is set
|
||||
to avoid abort in most cases of wrong input or other problems. Before dialog
|
||||
begins, the default is "FAILURE" which e.g. aborts on unknown commands.
|
||||
.br
|
||||
Mode "on" supports input of newline characters within quotation marks and
|
||||
line continuation by trailing backslash outside quotation marks.
|
||||
Mode "single_line" does not.
|
||||
@ -2716,6 +3042,9 @@ session number, resp. volume id of the depicted session.
|
||||
Print the foreseeable consumption of 2048 byte blocks
|
||||
by next -commit. This can last a while as a -commit gets
|
||||
prepared and only in last moment is revoked by this option.
|
||||
The result depends on several settings and also on the kind of output device.
|
||||
If no -jidgo options are given and not command -as "mkisofs" was used,
|
||||
then -padding (300 kB by default) is not counted as part of the image size.
|
||||
.TP
|
||||
\fB\-tell_media_space\fR
|
||||
Print available space on output media and the free space after
|
||||
@ -2846,7 +3175,7 @@ given as start address for -findx.
|
||||
actions it will always perform action "echo".
|
||||
.br
|
||||
\fBin_iso\fR
|
||||
reports the path if its counterpart exist in the ISO image.
|
||||
reports the path if its counterpart exists in the ISO image.
|
||||
For this the disk_path of the -findx command gets replaced
|
||||
by the iso_rr_path given as parameter.
|
||||
.br
|
||||
@ -2859,7 +3188,7 @@ not exist in the ISO image. The report format is the same as with command
|
||||
.br
|
||||
\fBadd_missing\fR iso_rr_path_start
|
||||
adds the counterpart if it does not yet
|
||||
exist in the ISO image.
|
||||
exist in the ISO image and marks it for "rm_merge" as non-removable.
|
||||
.br
|
||||
E.g.: -findx /home/thomas -exec add_missing /thomas_on_cd --
|
||||
.br
|
||||
@ -2870,6 +3199,12 @@ contains files. To be used with -type "m" to report mount points.
|
||||
\fBempty_iso_dir\fR
|
||||
deletes all files from the counterpart
|
||||
in the ISO image. To be used with -type "m" to truncate mount points.
|
||||
.br
|
||||
\fBestimate_size\fR
|
||||
prints a lower and an upper estimation of the number of blocks which the
|
||||
found files together will occupy in the emerging ISO image.
|
||||
This does not account for the superblock,
|
||||
for the directories in the -findx path, or for image padding.
|
||||
.TP
|
||||
\fB\-compare\fR disk_path iso_rr_path
|
||||
Compare attributes and eventual data file content of a fileobject in the
|
||||
@ -2981,6 +3316,8 @@ Non-default options are:
|
||||
\fBreport="files"\fR
|
||||
lists the files which use damaged blocks (not with use=outdev).
|
||||
The format is like with find -exec report_damage.
|
||||
Note that a MD5 session mismatch marks all files of the session as damaged.
|
||||
If finer distinction is desired, perform -md5 off before -check_media.
|
||||
.br
|
||||
\fBreport="blocks_files"\fR
|
||||
first lists damaged blocks and then affected files.
|
||||
@ -3252,10 +3589,9 @@ file paths and pathspecs.
|
||||
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.
|
||||
.br
|
||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||
are interpreted differently than with xorriso option -add. Directories get
|
||||
merged with the root directory of the ISO image, other filetypes get mapped
|
||||
into that root directory.
|
||||
The supported options are documented in detail in xorrisofs.info
|
||||
and in man xorrisofs. The description here is focused on the effect
|
||||
of mkisofs emulation in the context of a xorriso run.
|
||||
.br
|
||||
Other than with the "cdrecord" personality there is no automatic -commit at
|
||||
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||
@ -3263,6 +3599,11 @@ the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
|
||||
-pacifier gets set to "mkisofs" if files are added to the image.
|
||||
.br
|
||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||
are interpreted differently than with xorriso option -add. Directories get
|
||||
merged with the root directory of the ISO image, other filetypes get mapped
|
||||
into that root directory.
|
||||
.br
|
||||
If pathspecs are given and if no output file was chosen before or during the
|
||||
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
|
||||
If -o points to a regular file, then it will be truncated to 0 bytes
|
||||
@ -3274,6 +3615,25 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
|
||||
arguments or if other start arguments pointed the output drive to
|
||||
standard output.
|
||||
.br
|
||||
-print-size inhibits automatic image production at program end. This ban is
|
||||
lifted only if the pending image changes get discarded.
|
||||
.br
|
||||
Eventual padding is counted as part of the ISO image if not option --emul-toc
|
||||
is given.
|
||||
.br
|
||||
If no -iso-level is given, then level 1 is chosen when the first file or
|
||||
directory is added to the image. At the same occasion directory names get
|
||||
allowed to violate the standard by -compliance option allow_dir_id_ext.
|
||||
This may be avoided by option -disallow_dir_id_ext.
|
||||
.br
|
||||
Option -root is supported. Option -old-root is implemented by xorriso
|
||||
commands -mkdir, -cp_clone, -find update_merge, and -find rm_merge.
|
||||
-root and -old-root set command -disk_dev_ino to "ino_only" and -md5 to "on",
|
||||
by default.
|
||||
-disk_dev_ino can be set to "off" by --old-root-no-ino
|
||||
resp. to "on" by --old-root-devno .
|
||||
-md5 can be set to "off" by --old-root-no-md5 .
|
||||
.br
|
||||
Not original mkisofs options are --quoted_path_list ,
|
||||
--hardlinks , --acl ,
|
||||
--xattr , --md5 , --stdio_sync .
|
||||
@ -3281,7 +3641,10 @@ They work like the xorriso options with the
|
||||
same name and hardcoded argument "on", e.g. -acl "on".
|
||||
Explicit arguments are expected by --stdio_sync
|
||||
and --scdbackup_tag.
|
||||
--no-emul-toc is -compliance no_emul_toc.
|
||||
.br
|
||||
The capability to preserve multi-session history on overwriteable media
|
||||
gets disabled by default. It can be enabled by using --emul-toc
|
||||
with the first session. See -compliance no_emul_toc.
|
||||
.br
|
||||
--sort-weight gets as arguments a number and an iso_rr_path.
|
||||
The number becomes the LBA sorting weight of regular file iso_rr_path or
|
||||
@ -3304,10 +3667,26 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on.
|
||||
.br
|
||||
--boot-catalog-hide is -boot_image any cat_hidden=on.
|
||||
.br
|
||||
-mips-boot is the same as -boot_image any mips_path= .
|
||||
.br
|
||||
-mipsel-boot leads to mipsel_path= .
|
||||
.br
|
||||
-partition_offset number is
|
||||
-boot_image any partition_offset=number.
|
||||
.br
|
||||
Personalites "\fBxorrisofs\fR", "\fBgenisoimage\fR",
|
||||
Option -append_partition is supported.
|
||||
.br
|
||||
-untranslated_name_len number is
|
||||
-compliance untranslated_name_len=number.
|
||||
.br
|
||||
--old-empty is -compliance old_empty.
|
||||
.br
|
||||
The options of genisoimage Jigdo Template Extraction are recognized and
|
||||
performed via xorriso option -jigdo. See the "Alias:" names there for the
|
||||
meaning of the genisoimage options.
|
||||
.br
|
||||
|
||||
Personalities "\fBxorrisofs\fR", "\fBgenisoimage\fR",
|
||||
and "\fBgenisofs\fR" are aliases for "mkisofs".
|
||||
.br
|
||||
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
|
||||
@ -3317,6 +3696,9 @@ I.e. all arguments will be interpreted mkisofs style until "--"
|
||||
is encountered.
|
||||
From then on, options are interpreted as xorriso options.
|
||||
.br
|
||||
--no_rc as first argument of such a program start
|
||||
prevents interpretation of startup files. See section FILES below.
|
||||
.br
|
||||
|
||||
Personality "\fBcdrecord\fR" accepts the options listed with:
|
||||
.br
|
||||
@ -3359,6 +3741,9 @@ If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
|
||||
to the command line arguments. I.e. all arguments will be interpreted cdrecord
|
||||
style until "--" is encountered and an eventual commit happens.
|
||||
From then on, options are interpreted as xorriso options.
|
||||
.br
|
||||
--no_rc as first argument of such a program start
|
||||
prevents interpretation of xorriso startup files. See section FILES below.
|
||||
.TP
|
||||
\fB\-read_mkisofsrc\fR
|
||||
Try one by one to open for reading:
|
||||
@ -3411,7 +3796,12 @@ prevents reading and interpretation of eventual startup
|
||||
files. See section FILES below.
|
||||
.TP
|
||||
\fB\-options_from_file\fR fileaddress
|
||||
Read quoted input from fileaddress and executes it like dialog lines.
|
||||
Read quoted input from fileaddress and execute it like dialog lines.
|
||||
Empty lines and lines which begin by # are ignored. Normally one line
|
||||
should hold one xorriso command and all its arguments. Nevertheless lines
|
||||
may be concatenated by a trailing backslash.
|
||||
.br
|
||||
See also section "Command processing", paragraph "Quoted input".
|
||||
.TP
|
||||
\fB\-help\fR
|
||||
.br
|
||||
@ -3494,7 +3884,14 @@ restoring of hard links.
|
||||
Default is 16m = 16 MiB, minimum 64k = 64 kiB, maximum 1024m = 1 GiB.
|
||||
.TP
|
||||
\fB\-print\fR text
|
||||
Print a text to result channel.
|
||||
Print a text line to the result channel which is by default stdout.
|
||||
.TP
|
||||
\fB\-print_info\fR text
|
||||
Print a text line to the info channel which is by default stderr.
|
||||
.TP
|
||||
\fB\-print_mark\fR text
|
||||
Print a text line to the mark channel which is by default directed to both,
|
||||
result and info channel. An empty text will cause no output at all.
|
||||
.TP
|
||||
\fB\-prompt\fR text
|
||||
Show text at beginning of output line and
|
||||
@ -3566,8 +3963,8 @@ line by a channel indicator:
|
||||
.br
|
||||
Next is a decimal number of which only bit 0 has a meaning for now.
|
||||
0 means no newline at end of payload, 1 means that the newline character at
|
||||
the end of the output line belongs to the payload. After another colon follows
|
||||
the payload text.
|
||||
the end of the output line belongs to the payload. After another colon and
|
||||
a blank follows the payload text.
|
||||
.br
|
||||
Example:
|
||||
.br
|
||||
@ -3578,8 +3975,9 @@ Copy output of a channel to the given file. Channel may be one of: "." for all
|
||||
channels, "I" for info messages, "R" for result lines, "M" for -mark texts.
|
||||
.TP
|
||||
\fB\-mark\fR text
|
||||
If text is not empty it will get put out on "M" channel each time after a
|
||||
dialog line has been processed.
|
||||
If text is not empty it will get put out on "M" channel each time xorriso
|
||||
is ready for the next dialog line or before xorriso performs a command that
|
||||
was entered to the pager prompt.
|
||||
.TP
|
||||
\fB\-prog\fR text
|
||||
Use text as name of this program in subsequent messages
|
||||
@ -3858,6 +4256,8 @@ $ xorriso -as mkisofs prepared_for_iso/tree1 | \\
|
||||
.br
|
||||
Follow-up sessions are written like this:
|
||||
.br
|
||||
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
|
||||
.br
|
||||
$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
|
||||
.br
|
||||
$ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
|
||||
@ -3865,8 +4265,13 @@ $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
|
||||
xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject -
|
||||
.br
|
||||
Always eject the drive tray between sessions. The old sessions
|
||||
get read via stdio:/dev/sr0 and thus are prone to device driver
|
||||
peculiarities.
|
||||
get read via /dev/sr0. Its device driver might not be aware
|
||||
of the changed content before it loads the media again.
|
||||
In this case the previous session would not be loaded and the
|
||||
new session would contain only the newly added files.
|
||||
.br
|
||||
For the same reason do not let xorriso -as cdrecord load the media,
|
||||
but rather do this manually or by a program that reads from /dev/sr0.
|
||||
.br
|
||||
This example works for multi-session media only.
|
||||
Add cdrskin option --grow_overwriteable_iso
|
||||
@ -3960,6 +4365,8 @@ Files with names matching *.o or *.swp get excluded explicitly.
|
||||
When done with writing the new session gets checked by its recorded MD5.
|
||||
.br
|
||||
$ xorriso \\
|
||||
.br
|
||||
-abort_on FATAL \\
|
||||
.br
|
||||
-for_backup -disk_dev_ino on \\
|
||||
.br
|
||||
@ -3971,7 +4378,7 @@ $ xorriso \\
|
||||
.br
|
||||
-not_leaf '*.o' -not_leaf '*.swp' \\
|
||||
.br
|
||||
-update_r /home/thomas/open_source_projects /open_source_projects \\
|
||||
-update_r /home/thomas/projects /projects \\
|
||||
.br
|
||||
-update_r /home/thomas/personal_mail /personal_mail \\
|
||||
.br
|
||||
@ -4014,12 +4421,27 @@ older sessions in the table-of-content. E.g. as superuser:
|
||||
.br
|
||||
# osirrox -mount /dev/sr0 "volid" '*2008_12_05*' /mnt
|
||||
.br
|
||||
.sp 1
|
||||
Above example produces a result similar to -root / -old-root / with mkisofs.
|
||||
For getting the session trees accumulated in the new sessions, let all -update
|
||||
commands use a common parent directory and clone it after updating is done:
|
||||
.br
|
||||
-update_r /home/thomas/projects /current/projects \\
|
||||
.br
|
||||
-update_r /home/thomas/personal_mail /current/personal_mail \\
|
||||
.br
|
||||
-clone /current /"$(date '+%Y_%m_%d_%H%M%S')" \\
|
||||
.br
|
||||
The cloned tree will have a name like /2011_02_12_155700.
|
||||
.br
|
||||
.sp 1
|
||||
Sessions on multi-session media are separated by several MB of unused blocks.
|
||||
So with small sessions the payload capacity can become substantially lower
|
||||
than the overall media capacity. If the remaining space on media does not
|
||||
suffice for the next gap, the drive is supposed to close the media
|
||||
automatically.
|
||||
.br
|
||||
.sp 1
|
||||
\fBBetter do not use your youngest backup for -update_r\fR.
|
||||
Have at least two media which you use alternatingly. So only older backups
|
||||
get endangered by the new write operation, while the newest backup is
|
||||
@ -4100,7 +4522,7 @@ to read and execute lines from the following files:
|
||||
$HOME/.xorrisorc
|
||||
.br
|
||||
The files are read in the sequence given above, but none of them is required
|
||||
to exist.
|
||||
to exist. The line format is described with command -options_from_file.
|
||||
.br
|
||||
If mkisofs emulation was enabled by program name "xorrisofs", "mkisofs",
|
||||
"genisoimage", or "genisofs", then afterwards -read_mkisofsrc is performed,
|
||||
@ -4114,6 +4536,9 @@ The default setting of -check_media abort_file= is:
|
||||
.br
|
||||
.SH SEE ALSO
|
||||
.TP
|
||||
For the mkisofs emulation of xorriso
|
||||
.BR xorrisofs(1)
|
||||
.TP
|
||||
For mounting xorriso generated ISO 9660 images (-t iso9660)
|
||||
.BR mount(8)
|
||||
.TP
|
||||
@ -4143,7 +4568,7 @@ Thomas Schmitt <scdbackup@gmx.net>
|
||||
.br
|
||||
for libburnia-project.org
|
||||
.SH COPYRIGHT
|
||||
Copyright (c) 2007 - 2010 Thomas Schmitt
|
||||
Copyright (c) 2007 - 2011 Thomas Schmitt
|
||||
.br
|
||||
Permission is granted to distribute this text freely. It shall only be
|
||||
modified in sync with the technical properties of xorriso. If you make use
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* xorriso - libisoburn higher level API which creates, loads, manipulates
|
||||
and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -59,9 +59,9 @@ struct XorrisO;
|
||||
at build time.
|
||||
@since 0.5.8
|
||||
*/
|
||||
#define Xorriso_header_version_majoR 0
|
||||
#define Xorriso_header_version_minoR 6
|
||||
#define Xorriso_header_version_micrO 2
|
||||
#define Xorriso_header_version_majoR 1
|
||||
#define Xorriso_header_version_minoR 0
|
||||
#define Xorriso_header_version_micrO 8
|
||||
|
||||
|
||||
/** Eventually something like ".pl01" to indicate a bug fix. Normally empty.
|
||||
@ -197,7 +197,9 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Inquire whether option -commit would make sense.
|
||||
@param xorriso The context object to inquire.
|
||||
@param flag unused yet, submit 0
|
||||
@param flag @since 0.6.6
|
||||
bit0= do not return 1 if -as mkisofs -print-size was
|
||||
performed on the current image.
|
||||
@return 0= -commit would have nothing to do
|
||||
1= a new image session would emerge at -commit
|
||||
*/
|
||||
@ -562,15 +564,21 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
|
||||
Xorriso_eval_problem_status()
|
||||
One should follow its eventual advice to abort.
|
||||
|
||||
Options with a varying number of arguments get them passed like
|
||||
Options with a varying number of arguments get then passed like
|
||||
Xorriso_interpreter(). E.g.:
|
||||
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
They begin to read the arguments at position *idx and will see the list
|
||||
end either at the next argv which contains the -list_delimiter text or
|
||||
at argv[argc-1]. After the call, *idx will be the index of the first not
|
||||
yet interpreted argv.
|
||||
The option functions will begin to read the arguments at position *idx
|
||||
and will see the list end either at the next argv which contains the
|
||||
-list_delimiter text or at argv[argc-1].
|
||||
After the call, *idx will be the index of the first not yet interpreted
|
||||
argv.
|
||||
|
||||
Do not set any flag bits which are not described by "@param flag".
|
||||
I.e. if flag is not mentioned, then submit 0.
|
||||
Yet undefined flag bits might get a meaning in future. Unset bits will
|
||||
then produce the traditional behavior, whereas set bits might bring
|
||||
surprises to inadverted callers.
|
||||
*/
|
||||
|
||||
|
||||
@ -578,6 +586,7 @@ int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
|
||||
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
|
||||
|
||||
/* Option -abstract_file */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_abstract_file(struct XorrisO *xorriso, char *name,
|
||||
int flag);
|
||||
|
||||
@ -603,6 +612,11 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
|
||||
char *time_type, char *timestring,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
/* Option -append_partition */
|
||||
/* @since 0.6.4 */
|
||||
int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text,
|
||||
char *type_text, char *image_path, int flag);
|
||||
|
||||
/* Option -application_id */
|
||||
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
|
||||
int flag);
|
||||
@ -629,6 +643,7 @@ int Xorriso_option_backslash_codes(struct XorrisO *xorriso, char *mode,
|
||||
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -biblio_file */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_biblio_file(struct XorrisO *xorriso, char *name, int flag);
|
||||
|
||||
/* Option -blank and -format */
|
||||
@ -691,6 +706,11 @@ int Xorriso_option_chmodi(struct XorrisO *xorriso, char *mode,
|
||||
int Xorriso_option_chowni(struct XorrisO *xorriso, char *uid,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
/* Option -clone */
|
||||
/* @since 1.0.2 */
|
||||
int Xorriso_option_clone(struct XorrisO *xorriso, char *origin, char *dest,
|
||||
int flag);
|
||||
|
||||
/* Option -close "on"|"off" */
|
||||
int Xorriso_option_close(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
@ -723,9 +743,15 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
|
||||
int Xorriso_option_compliance(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -copyright_file */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name,
|
||||
int flag);
|
||||
|
||||
/* Option -cp_clone */
|
||||
/* @since 1.0.2 */
|
||||
int Xorriso_option_cp_clone(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -cpr alias -cpri */
|
||||
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
@ -761,6 +787,11 @@ int Xorriso_option_disk_dev_ino(struct XorrisO *xorriso, char *mode, int flag);
|
||||
/* Option -disk_pattern "on"|"ls"|"off" */
|
||||
int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -displacement [-]offset */
|
||||
/* @since 0.6.6 */
|
||||
int Xorriso_option_displacement(struct XorrisO *xorriso, char *value,
|
||||
int flag);
|
||||
|
||||
/* Option -drive_class */
|
||||
int Xorriso_option_drive_class(struct XorrisO *xorriso,
|
||||
char *d_class, char *pattern, int flag);
|
||||
@ -771,6 +802,11 @@ int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
|
||||
/* Option -dvd_obs "default"|"32k"|"64k" */
|
||||
int Xorriso_option_dvd_obs(struct XorrisO *xorriso, char *obs, int flag);
|
||||
|
||||
/* Option -early_stdio_test */
|
||||
/* @since 1.0.6 */
|
||||
int Xorriso_option_early_stdio_test(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -eject */
|
||||
/* @param flag bit0=do not report toc of eventually remaining drives
|
||||
*/
|
||||
@ -844,6 +880,7 @@ int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag);
|
||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -hide */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
@ -854,6 +891,11 @@ int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
|
||||
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -jigdo aspect argument */
|
||||
/* @since 0.6.4 */
|
||||
int Xorriso_option_jigdo(struct XorrisO *xorriso, char *aspect, char *arg,
|
||||
int flag);
|
||||
|
||||
/* Option -joliet "on"|"off" */
|
||||
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
@ -1003,9 +1045,15 @@ int Xorriso_option_pathspecs(struct XorrisO *xorriso, char *mode, int flag);
|
||||
int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -preparer_id */
|
||||
/* @since 0.6.2 */
|
||||
int Xorriso_option_preparer_id(struct XorrisO *xorriso, char *name, int flag);
|
||||
|
||||
/* Option -print */
|
||||
/* Options -print, -print_info , -print_mark */
|
||||
/* @param flag bit0-1= output channel:
|
||||
0= result channel
|
||||
1= info channel @since 1.0.6
|
||||
2= mark channel @since 1.0.6
|
||||
*/
|
||||
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
|
||||
|
||||
/* Option -print_size
|
||||
@ -1035,6 +1083,7 @@ int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
|
||||
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -read_mkisofsrc */
|
||||
/* @since 0.6.0 */
|
||||
int Xorriso_option_read_mkisofsrc(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -reassure "on"|"tree"|"off" */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -44,7 +44,7 @@
|
||||
@c man .\" First parameter, NAME, should be all caps
|
||||
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||
@c man .\" other parameters are allowed: see man(7), man(1)
|
||||
@c man .TH XORRISO 1 "Sep 10, 2010"
|
||||
@c man .TH XORRISO 1 "Apr 03, 2011"
|
||||
@c man .\" Please adjust this date whenever revising the manpage.
|
||||
@c man .\"
|
||||
@c man .\" Some roff macros, for reference:
|
||||
@ -504,9 +504,8 @@ characters. Rock Ridge fulfills this demand.
|
||||
@sp 1
|
||||
@cindex El Torito, _definiton
|
||||
An @strong{El Torito}
|
||||
boot record connects one or more boot images, which are binary program files
|
||||
stored in the ISO image, with the bootstrapping facility of
|
||||
contemporary computers.
|
||||
boot record points the BIOS bootstrapping facility to one or more boot
|
||||
images, which are binary program files stored in the ISO image.
|
||||
The content of the boot image files is not in the scope of El Torito.
|
||||
@*
|
||||
Most bootable GNU/Linux CDs are equipped with ISOLINUX or GRUB boot images.
|
||||
@ -526,7 +525,8 @@ Emulation -as mkisofs supports the example options out of the ISOLINUX wiki,
|
||||
the options used in GRUB script grub-mkrescue, and the example in the
|
||||
FreeBSD AvgLiveCD wiki.
|
||||
@*
|
||||
The support for other boot image types is sparse.
|
||||
There is support for boot facilities other than PC BIOS:
|
||||
EFI, MIPS Big Endian (SGI), MIPS Little Endian (DEC), SUN SPARC.
|
||||
@*
|
||||
@c man .PP
|
||||
@sp 1
|
||||
@ -714,7 +714,8 @@ inner dashes are interpreted as underscores.
|
||||
* Filter:: Filters for data file content
|
||||
* Writing:: Writing the result, drive control
|
||||
* SetWrite:: Settings for result writing
|
||||
* Bootable:: El Torito bootable ISO images
|
||||
* Bootable:: Bootable ISO images
|
||||
* Jigdo:: Jigdo Template Extraction
|
||||
* Charset:: Character sets
|
||||
* Exception:: Exception processing
|
||||
* DialogCtl:: Dialog mode control
|
||||
@ -836,6 +837,28 @@ 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".
|
||||
@c man .TP
|
||||
@item -displacement [-]lba
|
||||
@kindex -displacement compensate altered image start address
|
||||
@cindex Session, altered start address, -displacement
|
||||
Compensate an eventual displacement of the image versus the start address
|
||||
for which the image was prepared. This affects only loading of ISO images
|
||||
and reading of their files. The multi-session method of growing is not allowed
|
||||
as long as -displacement is non-zero. I.e. -indev and -outdev must be
|
||||
different. Eventually the displacement is reset to 0 before the drive
|
||||
gets re-aquired after writing.
|
||||
@*
|
||||
Examples:
|
||||
@*
|
||||
If a track of a CD starts at block 123456 and gets copied to a disk file
|
||||
where it begins at block 0, then this copy can be loaded with
|
||||
-displacement -123456.
|
||||
@*
|
||||
If an ISO image was written onto a partition with offset of 640000 blocks of
|
||||
512 bytes, then it can be loaded from the base device by -displacement 160000.
|
||||
@*
|
||||
In both cases, the ISO sessions should be self contained, i.e. not add-on
|
||||
sessions to an ISO image outside their track resp. partition.
|
||||
@c man .TP
|
||||
@item -drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern
|
||||
@kindex -drive_class controls drive accessability
|
||||
@cindex Drive, accessability, -drive_class
|
||||
@ -942,11 +965,6 @@ are both in effect. This restricts hard linking to other files restored by
|
||||
the same single extract command. -hardlinks "normal_extract" re-enables
|
||||
wide and expensive hardlink accumulation.
|
||||
@*
|
||||
@c B00613 : disabled because implemented faulty from beginning:
|
||||
@c Hardlink processing automatically enables @strong{-compliance new_rr}.
|
||||
@c This may be overridden by a following -compliance old_rr . In this case
|
||||
@c the resulting image will violate the RRIP-1.10 specs for entry PX in
|
||||
@c the same way as mkisofs does.
|
||||
@c man .TP
|
||||
@item -acl "on"|"off"
|
||||
@kindex -acl controls handling of ACLs
|
||||
@ -965,7 +983,7 @@ Enable or disable processing of xattr attributes in user namespace.
|
||||
If enabled, then xorriso will handle xattr similar to ACL.
|
||||
See also options -getfattr, -setfattr and above paragraph about xattr.
|
||||
@c man .TP
|
||||
@item -md5 "on"|"all"|"off"
|
||||
@item -md5 "on"|"all"|"off"|"load_check_off"
|
||||
@kindex -md5 controls handling of MD5 sums
|
||||
@cindex MD5, control handling, -md5
|
||||
Enable or disable processing of MD5 checksums for the overall session and for
|
||||
@ -988,6 +1006,15 @@ Mode "all" will additionally check during image generation whether the checksum
|
||||
of a data file changed between the time when its reading began and the time
|
||||
when it ended. This implies reading every file twice.
|
||||
@*
|
||||
Mode "load_check_off" together with "on" or "all" will load recorded MD5 sums
|
||||
but not test the recorded checksum tags of superblock and directory tree.
|
||||
This is necessary if growisofs was used as burn program, because it does
|
||||
not overwrite the superblock checksum tag of the first session.
|
||||
Therefore load_check_off is in effect when xorriso -as mkisofs option -M
|
||||
is performed.
|
||||
@*
|
||||
The test can be re-enabled by mode "load_check_on".
|
||||
@*
|
||||
Checksums can be exploited via options -check_md5, -check_md5_r, via find
|
||||
actions get_md5, check_md5, and via -check_media.
|
||||
@c man .TP
|
||||
@ -1069,6 +1096,21 @@ Mode "on" causes -calm_drive to be performed automatically after each -dev,
|
||||
Allow for writing only the usage of MMC optical drives. Disallow
|
||||
to write the result into files of nearly arbitrary type.
|
||||
Once set, this command cannot be revoked.
|
||||
@c man .TP
|
||||
@item -early_stdio_test "on"|"appendable_wo"|"off"
|
||||
@kindex -early_stdio_test classifies stdio drives
|
||||
@cindex Drive, classify stdio, -early_stdio_test
|
||||
If enabled by "on" then regular files and block devices get tested for
|
||||
effective access permissions. This implies to try opening those files for
|
||||
writing, which otherwise will happen only later and only if actual
|
||||
writing is desired.
|
||||
@*
|
||||
The test result is used for classifying the pseudo drives as overwriteable,
|
||||
read-only, write-only, or uselessly empty. This may lead to earlier detection
|
||||
of severe problems, and may avoid some less severe error events.
|
||||
@*
|
||||
Mode "appendable_wo" is like "on" with the additional property that
|
||||
non-empty write-only files are regarded as appendable rather than blank.
|
||||
@end table
|
||||
@c man .TP
|
||||
@c man .B Inserting files into ISO image:
|
||||
@ -1294,6 +1336,35 @@ If the iso_rr_path does not begin with '/' then -cd is prepended.
|
||||
Create empty directories if they do not exist yet.
|
||||
Existence as directory generates a WARNING event, existence as
|
||||
other file causes a FAILURE event.
|
||||
@c man .TP
|
||||
@item -clone iso_rr_path_original iso_rr_path_copy
|
||||
@kindex -clone copies ISO directory tree
|
||||
@cindex Directory, copy, -clone
|
||||
Create a copy of the ISO file object iso_rr_path_original with the new
|
||||
address iso_rr_path_copy. If the original is a directory then copy all
|
||||
files and directories underneath. An eventual boot catalog file gets
|
||||
not copied but is silently ignored.
|
||||
@*
|
||||
The copied ISO file objects have the same attributes. Copied data files
|
||||
refer to the same content source as their originals.
|
||||
The copies may then be manipulated independendly of their originals.
|
||||
@*
|
||||
This command will refuse execution if the address iso_rr_path_copy
|
||||
already exists in the ISO tree.
|
||||
@c man .TP
|
||||
@item -cp_clone iso_rr_path_original [***] iso_rr_path_dest
|
||||
@kindex -cp_clone copies ISO directory tree
|
||||
@cindex Directories, copy, -cp_clone
|
||||
Create copies of one or more ISO file objects as with command -clone.
|
||||
Eventually merge directories with existing ones, but do not overwrite
|
||||
existing ISO file objects.
|
||||
@*
|
||||
The rules for generating the copy addresses are the same as with
|
||||
command -cpr (see above) resp. shell command cp -r. Other than with -cpr,
|
||||
relative iso_rr_path_original will get prepended the -cd path and not
|
||||
the -cdx path. Consider to -mkdir iso_rr_path_dest before -cp_clone
|
||||
so the copy address does not depend on the number of iso_rr_path_original
|
||||
arguments.
|
||||
@end table
|
||||
@c man .TP
|
||||
@c man .B Settings for file insertion:
|
||||
@ -1829,6 +1900,9 @@ Matches files which use data blocks marked as damaged by a previous
|
||||
run of -check_media. The damage info vanishes when a new ISO image gets
|
||||
loaded.
|
||||
@*
|
||||
Note that a MD5 session mismatch marks all files of the session as damaged.
|
||||
If finer distinction is desired, perform -md5 off before -check_media.
|
||||
@*
|
||||
@item -pending_data :
|
||||
Matches files which get their content from outside the loaded ISO image.
|
||||
@*
|
||||
@ -1965,6 +2039,16 @@ performs command -update with the found file address as
|
||||
iso_rr_path. The corresponding file address is determined like with above
|
||||
action "compare".
|
||||
@*
|
||||
@item update_merge
|
||||
is like update but does not delete the found file if it is missing on disk.
|
||||
It may be run several times and records with all visited files whether their
|
||||
counterpart on disk has already been seen by one of the update_merge runs.
|
||||
Finally, a -find run with action "rm_merge" may remove all files that
|
||||
saw no counterpart on disk.
|
||||
@*
|
||||
Up to the next "rm_merge" or "clear_merge" all newly inserted files will
|
||||
get marked as having a disk counterpart.
|
||||
@*
|
||||
@item rm
|
||||
removes the found iso_rr_path from the image if it is not a directory
|
||||
with files in it. I.e. this "rm" includes "rmdir".
|
||||
@ -1973,6 +2057,14 @@ with files in it. I.e. this "rm" includes "rmdir".
|
||||
removes the found iso_rr_path from the image, including whole
|
||||
directory trees.
|
||||
@*
|
||||
@item rm_merge
|
||||
removes the found iso_rr_path if it was visited by one or more previous actions
|
||||
"update_merge" and saw no counterpart on disk in any of them. The marking from
|
||||
the update actions is removed in any case.
|
||||
@*
|
||||
@item clear_merge
|
||||
removes an eventual marking from action "update_merge".
|
||||
@*
|
||||
@item report_damage
|
||||
classifies files whether they hit a data block that is
|
||||
marked as damaged. The result is printed together with the eventual address
|
||||
@ -2058,6 +2150,12 @@ E.g.:
|
||||
@*
|
||||
-find / -disk_name *_secret -exec hide on
|
||||
@*
|
||||
@item estimate_size
|
||||
prints a lower and an upper estimation of the number of blocks which the
|
||||
found files together will occupy in the emerging ISO image.
|
||||
This does not account for the superblock,
|
||||
for the directories in the -find path, or for image padding.
|
||||
@*
|
||||
@item find
|
||||
performs another run of -find on the matching file address.
|
||||
It accepts the same params as -find, except iso_rr_path.
|
||||
@ -2374,32 +2472,57 @@ can be revoked individually by appending "_off". Like "deep_paths_off".
|
||||
@*
|
||||
Rule keywords are:
|
||||
@*
|
||||
"omit_version" do not add versions (";1") to ISO and Joliet file names.
|
||||
"iso_9660_level="number chooses level 1 with ISO names of the form 8.3
|
||||
and -file_size_limit <= 4g - 1, or level 2 with ISO names up to
|
||||
length 32 and the same -file_size_limit, or level 3 with ISO names up to
|
||||
length 32 and -file_size_limit >= 400g -200k. If necessary -file_size_limit
|
||||
gets adjusted.
|
||||
@*
|
||||
"only_iso_version" do not add versions (";1") to Joliet file names.
|
||||
"allow_dir_id_ext" allows ISO names of directories to have a name extension
|
||||
as with other file types. It does not force dots and it omits the version
|
||||
number, though. This is a bad tradition of mkisofs which violates ECMA-119.
|
||||
Especially ISO level 1 only allows 8 characters in a directory name and
|
||||
not 8.3.
|
||||
@*
|
||||
"deep_paths" allow ISO file paths deeper than 8 levels.
|
||||
"omit_version" does not add versions (";1") to ISO and Joliet file names.
|
||||
@*
|
||||
"long_paths" allow ISO file paths longer than 255 characters.
|
||||
"only_iso_version" does not add versions (";1") to Joliet file names.
|
||||
@*
|
||||
"long_names" allow up to 37 characters with ISO file names.
|
||||
"deep_paths" allows ISO file paths deeper than 8 levels.
|
||||
@*
|
||||
"no_force_dots" do not add a dot to ISO file names which have none.
|
||||
"long_paths" allows ISO file paths longer than 255 characters.
|
||||
@*
|
||||
"no_j_force_dots" do not add a dot to Joliet file names which have none.
|
||||
"long_names" allows up to 37 characters with ISO file names.
|
||||
@*
|
||||
"lowercase" allow lowercase characters in ISO file names.
|
||||
"no_force_dots" does not add a dot to ISO file names which have none.
|
||||
@*
|
||||
"full_ascii" allow all ASCII characters in ISO file names.
|
||||
"no_j_force_dots" does not add a dot to Joliet file names which have none.
|
||||
@*
|
||||
"joliet_long_paths" allow Joliet paths longer than 240 characters.
|
||||
"lowercase" allows lowercase characters in ISO file names.
|
||||
@*
|
||||
"always_gmt" store timestamps in GMT representation with timezone 0.
|
||||
"full_ascii" allows all ASCII characters in ISO file names.
|
||||
@*
|
||||
"rec_mtime" record with ISO files the disk file's mtime and not the
|
||||
"untranslated_names" might be dangerous for inadverted reader programs
|
||||
which rely on the restriction to at most 37 characters in ISO file names.
|
||||
This option allows ISO file names up to 96 characters with no character
|
||||
conversion. If a file name has more characters, then image production will
|
||||
fail deliberately.
|
||||
@*
|
||||
"untranslated_name_len="number enables untranslated_names with a smaller limit
|
||||
for the length of file names. 0 disables this feature, -1 chooses maximum
|
||||
length limit, numbers larger than 0 give the desired length limit.
|
||||
@*
|
||||
"joliet_long_names" allows Joliet leaf names up to 103 characters rather
|
||||
than 64.
|
||||
@*
|
||||
"joliet_long_paths" allows Joliet paths longer than 240 characters.
|
||||
@*
|
||||
"always_gmt" stores timestamps in GMT representation with timezone 0.
|
||||
@*
|
||||
"rec_mtime" records with ISO files the disk file's mtime and not the
|
||||
creation time of the image.
|
||||
@*
|
||||
"new_rr" use Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
|
||||
"new_rr" uses Rock Ridge version 1.12 (suitable for GNU/Linux but not for older
|
||||
FreeBSD or for Solaris). This implies "aaip_susp_1_10_off" which may be changed
|
||||
by subsequent "aaip_susp_1_10".
|
||||
@*
|
||||
@ -2412,6 +2535,14 @@ rather than as official extension under SUSP-1.12.
|
||||
"no_emul_toc" saves 64 kB with the first session on overwriteable media
|
||||
but makes the image incapable of displaying its session history.
|
||||
@*
|
||||
"iso_9660_1999" causes the production of an additional directory tree
|
||||
compliant to ISO 9660:1999. It can record long filenames for readers which
|
||||
do not understand Rock Ridge.
|
||||
@*
|
||||
"old_empty" uses the old way of of giving block addresses in the range
|
||||
of [0,31] to files with no own data content. The new way is to have
|
||||
a dedicated block to which all such files will point.
|
||||
@*
|
||||
Default setting is
|
||||
@*
|
||||
"clear:only_iso_version:deep_paths:long_paths:no_j_force_dots:
|
||||
@ -2664,8 +2795,8 @@ any more (if possible at all with the given type of target media).
|
||||
This is the contrary of cdrecord, wodim, cdrskin option -multi,
|
||||
and is one aspect of growisofs option -dvd-compat.
|
||||
@c man .TP
|
||||
@item -padding number["k"|"m"]
|
||||
@kindex -padding sets amount of image padding
|
||||
@item -padding number["k"|"m"]|"included"|"appended"
|
||||
@kindex -padding sets amount or mode of image padding
|
||||
@cindex Write, padding image, -padding
|
||||
Append the given number of extra bytes to the image stream.
|
||||
This is a traditional remedy for a traditional bug in block
|
||||
@ -2674,11 +2805,18 @@ Since one can hardly predict on what media an image might end up,
|
||||
xorriso adds the traditional 300k of padding by default to all images.
|
||||
@*
|
||||
For images which will never get to a CD it is safe to use -padding 0 .
|
||||
@*
|
||||
Normally padding is not written as part of the ISO image but appended
|
||||
after the image end. This is -padding mode "appended".
|
||||
@*
|
||||
Emulation command -as "mkisofs" and command -jigdo cause padding to be
|
||||
written as part of the image.
|
||||
The same effect is achieved by -padding mode "included".
|
||||
@end table
|
||||
@c man .TP
|
||||
@c man .B El Torito bootable ISO images:
|
||||
@node Bootable, Charset, SetWrite, Options
|
||||
@section El Torito bootable ISO images
|
||||
@c man .B Bootable ISO images:
|
||||
@node Bootable, Jigdo, SetWrite, Options
|
||||
@section Bootable ISO images
|
||||
@c man .PP
|
||||
Contrary to published specifications many BIOSes will load an El Torito
|
||||
record from the first session on media and not from the last one, which
|
||||
@ -2695,6 +2833,15 @@ 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.
|
||||
@*
|
||||
There are booting mechanisms which do not use an El Torito record but rather
|
||||
start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices,
|
||||
MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation,
|
||||
SUN Disk Label for SPARC machines.
|
||||
@*
|
||||
The boot firmware EFI may use programs which are located in a FAT filesystem
|
||||
and announced by an MBR partition table entry.
|
||||
@*
|
||||
@table @asis
|
||||
@sp 1
|
||||
@c man .TP
|
||||
@ -2872,16 +3019,213 @@ absolute start as well as from the partition start.
|
||||
The offset value of an ISO image gets preserved when a new session is added.
|
||||
So the value defined here is only in effect if a new ISO image gets written.
|
||||
@*
|
||||
@strong{partition_sec_hd=}number gives the number of sectors per head for
|
||||
partition offset. 0 chooses a default value.
|
||||
@*
|
||||
@cindex Cylinder size, _definiton
|
||||
@strong{partition_hd_cyl=}number gives the number of heads per cylinder for
|
||||
partition offset. 0 chooses a default value.
|
||||
the partition table. 0 chooses a default value. Maximum is 255.
|
||||
@*
|
||||
@strong{partition_sec_hd=}number gives the number of sectors per head for
|
||||
the partition table. 0 chooses a default value. Maximum is 63.
|
||||
@*
|
||||
The product partition_sec_hd * partition_hd_cyl * 512 is the cylinder size.
|
||||
It should be divisible by 2048 in order to allow exact alignment.
|
||||
If it is too small to describe the image size by at most 1024 cylinders,
|
||||
then appropriate values of partition_hd_cyl are chosen with
|
||||
partition_sec_hd 32 or 63. If the image is larger than 8,422,686,720 bytes,
|
||||
then the cylinder size constraints cannot be fulfilled.
|
||||
@*
|
||||
@cindex Cylinder alignment, _definiton
|
||||
@strong{partition_cyl_align=}mode controls image size alignment to an integer
|
||||
number of cylinders. It is prescribed by isohybrid specs and it seems to
|
||||
please program fdisk. Cylinder size must be divisible by 2048.
|
||||
Images larger than 8,323,596,288 bytes cannot be aligned.
|
||||
@*
|
||||
Mode "auto" is default. Alignment by padding happens only with
|
||||
"isolinux" "partition_table=on".
|
||||
@*
|
||||
Mode "on" causes alignment by padding with "partition_table=on" for any type.
|
||||
Mode "off" disables alignment for any type.
|
||||
@*
|
||||
@cindex MIPS boot file, activation
|
||||
@strong{mips_path=}iso_rr_path declares a data file in the image to be a
|
||||
MIPS Big Endian boot file and causes production of a MIPS Big Endian Volume
|
||||
Header. This is mutually exclusive with production of other boot blocks
|
||||
like MBR.
|
||||
It will overwrite the first 512 bytes of any data eventually provided by
|
||||
system_area=.
|
||||
Up to 15 boot files can be declared by mips_path=.
|
||||
@*
|
||||
@strong{mipsel_path=}iso_rr_path declares a data file in the image to be the
|
||||
MIPS Little Endian boot file. This is mutually exclusive with other boot
|
||||
blocks.
|
||||
It will overwrite the first 512 bytes of any data eventually
|
||||
provided by system_area=.
|
||||
Only a single boot file can be declared by mipsel_path=.
|
||||
@*
|
||||
@cindex SUN Disk Label, production
|
||||
@strong{sparc_label=}text causes the production of a SUN Disk Label with the
|
||||
given text as ASCII label. This boot block format allows to append images
|
||||
for partitions 2 to 8. Partition 1 will always be the ISO image.
|
||||
See option -append_partition.
|
||||
The first 512 bytes of any data eventually provided
|
||||
by system_area= will be overwritten.
|
||||
@*
|
||||
@strong{mips_discard} and @strong{sparc_discard} revoke any boot file
|
||||
declarations made by mips_path= or mipsel_path=. They also disable production
|
||||
of SUN Disk Label.
|
||||
This removes the ban on production of other boot blocks.
|
||||
@*
|
||||
@end table
|
||||
@*
|
||||
@table @asis
|
||||
@sp 1
|
||||
@c man .TP
|
||||
@item -append_partition partition_number type_code disk_path
|
||||
@kindex -append_partition adds arbitrary file after image end
|
||||
@cindex Appended Filesystem Image, -append_partition
|
||||
Cause a prepared filesystem image to be appended to the ISO image and to be
|
||||
described by a partition table entry in a boot block at the start of the
|
||||
emerging ISO image. The partition entry will bear the size of the submitted
|
||||
file rounded up to the next multiple of 2048 bytes.
|
||||
@*
|
||||
Beware of subsequent multi-session runs. The appended partition will get
|
||||
overwritten.
|
||||
@*
|
||||
Partitions may be appended with boot block type MBR and with SUN Disk Label.
|
||||
@*
|
||||
With MBR:
|
||||
@*
|
||||
partition_number may be 1 to 4. Number 1 will put the whole ISO image into
|
||||
the unclaimed space before partition 1. So together with most xorriso MBR
|
||||
features, number 2 would be the most natural choice.
|
||||
@*
|
||||
The type_code may be "FAT12", "FAT16", "Linux",
|
||||
or a hexadecimal number between 0x00 and 0xff. Not all those numbers will
|
||||
yield usable results. For a list of codes search the Internet for
|
||||
"Partition Types" or run fdisk command "L".
|
||||
@*
|
||||
The disk_path must provide the necessary data bytes at commit time.
|
||||
An empty disk_path disables this feature for the given partition number.
|
||||
@*
|
||||
@cindex SUN SPARC boot images, activation
|
||||
With SUN Disk Label (selected by -boot_image any sparc_label=):
|
||||
@*
|
||||
partition_number may be 2 to 8. Number 1 will always be the ISO image.
|
||||
Partition start addresses are aligned to 320 KiB. The type_code does not
|
||||
matter. Submit 0x0.
|
||||
@*
|
||||
Partition image name "." causes the partition to become a copy of the next
|
||||
lower valid one.
|
||||
@end table
|
||||
@c man .TP
|
||||
@c man .B Jigdo Template Extraction:
|
||||
@node Jigdo, Charset, Bootable, Options
|
||||
@section Jigdo Template Extraction
|
||||
@c man .PP
|
||||
@cindex Jigdo Template Extraction, _definition
|
||||
From man genisoimage:
|
||||
"Jigdo is a tool to help in the distribution of large files like CD and
|
||||
DVD images; see http://atterer.net/jigdo/ for more details. Debian CDs
|
||||
and DVD ISO images are published on the web in jigdo format to allow
|
||||
end users to download them more efficiently."
|
||||
@*
|
||||
xorriso can produce a .jigdo and a .template file together with a
|
||||
single-session ISO image.
|
||||
The .jigdo file contains checksums and symbolic file addresses.
|
||||
The .template file contains the compressed ISO image with reference tags
|
||||
instead of the content bytes of the listed files.
|
||||
@*
|
||||
Input for this process are the normal arguments for a xorriso session
|
||||
on a blank -outdev, and a .md5 file which lists those data files which may be
|
||||
listed in the .jigdo file and externally referenced in the .template file.
|
||||
Each designated file is represented in the .md5 file by a single text line:
|
||||
@*
|
||||
MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks,
|
||||
symbolic file address
|
||||
@*
|
||||
The file address in an .md5 line has to bear the same basename as the
|
||||
disk_path of the file which it shall match. The directory path of
|
||||
the file address is decisive for To=From mapping, not for file recognition.
|
||||
After eventual To=From mapping, the file address gets written into the .jigdo
|
||||
file. Jigdo restore tools will convert these addresses into really
|
||||
reachable data source addresses from which they can read.
|
||||
@*
|
||||
If the list of jigdo parameters is not empty, then xorriso will refuse to
|
||||
write to non-blank targets, it will disable multi-session emulation, and
|
||||
eventual padding will be counted as part of the ISO image.
|
||||
@*
|
||||
@table @asis
|
||||
@sp 1
|
||||
@c man .TP
|
||||
@item -jigdo parameter_name value
|
||||
@kindex -jigdo clears JTE or or adds parameter to JTE
|
||||
@cindex Jigdo Template Extraction, -jigdo
|
||||
Clear Jigdo Template Extraction parameter list or add a parameter to that list.
|
||||
The alias names are the corresponding genisoimage options. They are accepted
|
||||
as parameter names as well. Especially they are recognized by the -as mkisofs
|
||||
emulation command.
|
||||
@*
|
||||
Parameter @strong{clear} with any value empties the whole list.
|
||||
No .jigdo and .template file will be produced.
|
||||
@*
|
||||
@strong{template_path} sets the disk_path for the .template file with the
|
||||
holed and compressed ISO image copy.
|
||||
@*
|
||||
Alias: -jigdo-template
|
||||
@*
|
||||
@strong{jigdo_path} sets the disk_path for the .jigdo file with the checksums
|
||||
and download addresses for filling the holes in .template.
|
||||
@*
|
||||
Alias: -jigdo-jigdo
|
||||
@*
|
||||
@strong{md5_path} sets the disk_path where to find the .md5 input file.
|
||||
@*
|
||||
Alias: -md5-list
|
||||
@*
|
||||
@strong{min_size} sets the minimum size for a data file to be listed
|
||||
in the .jigdo file and being a hole in the .template file.
|
||||
@*
|
||||
Alias: -jigdo-min-file-size
|
||||
@*
|
||||
@strong{exclude} adds a regular expression pattern which will get compared
|
||||
with the absolute disk_path of any data file. A match causes the file to
|
||||
stay in .template in any case.
|
||||
@*
|
||||
Alias: -jigdo-exclude
|
||||
@*
|
||||
@strong{demand_md5} adds a regular expression pattern which will get compared
|
||||
with the absolute disk_path of any data file that was not found in the .md5
|
||||
list. A match causes a MISHAP event.
|
||||
@*
|
||||
Alias: -jigdo-force-md5
|
||||
@*
|
||||
@strong{mapping} adds a string pair of the form To=From to the parameter list.
|
||||
If a data file gets listed in the .jigdo file, then it is referred by the
|
||||
file address from its line in the .md5 file. This file address gets checked
|
||||
whether it begins with the From string. If so, then this string will be
|
||||
replaced by the To string and a ':' character, before it goes into the .jigdo
|
||||
file. The From string should end by a '/' character.
|
||||
@*
|
||||
Alias: -jigdo-map
|
||||
@*
|
||||
@strong{compression} chooses one of "bzip2" or "gzip" for the compression of
|
||||
the template file. The jigdo file is put out uncompressed.
|
||||
@*
|
||||
Alias: -jigdo-template-compress
|
||||
@*
|
||||
@strong{checksum_iso} chooses one or more of "md5", "sha1", "sha256", "sha512"
|
||||
for the auxiliary "# Image Hex" checksums in the jigdo file. The value may e.g.
|
||||
look like "md5,sha1,sha512". Value "all" chooses all available algorithms.
|
||||
Note that MD5 stays always enabled.
|
||||
@*
|
||||
Alias: -checksum_algorithm_iso
|
||||
@*
|
||||
@strong{checksum_template} is like checksum_iso but for "# Template Hex".
|
||||
@*
|
||||
Alias: -checksum_algorithm_template
|
||||
@end table
|
||||
@c man .TP
|
||||
@c man .B Character sets:
|
||||
@node Charset, Exception, Bootable, Options
|
||||
@node Charset, Exception, Jigdo, Options
|
||||
@section Character sets
|
||||
@c man .PP
|
||||
@cindex Character Set, _definition
|
||||
@ -3053,9 +3397,9 @@ if the threshold of option -abort_on allows this.
|
||||
@*
|
||||
"failure" aborts image tree reading on first event of at least SORRY.
|
||||
It issues an own FAILURE event.
|
||||
This is the default.
|
||||
@*
|
||||
"fatal" acts like "failure" but issues the own event as FATAL.
|
||||
This is the default.
|
||||
@*
|
||||
With occasion "file_extraction" there are three behaviors:
|
||||
@*
|
||||
@ -3078,6 +3422,10 @@ file content stems from the loaded ISO image and is not filtered.
|
||||
Enable or disable to enter dialog mode after all arguments are processed.
|
||||
In dialog mode input lines get prompted via readline or from stdin.
|
||||
@*
|
||||
If no -abort_on severity was set when dialog starts, then "NEVER" is set
|
||||
to avoid abort in most cases of wrong input or other problems. Before dialog
|
||||
begins, the default is "FAILURE" which e.g. aborts on unknown commands.
|
||||
@*
|
||||
Mode "on" supports input of newline characters within quotation marks and
|
||||
line continuation by trailing backslash outside quotation marks.
|
||||
Mode "single_line" does not.
|
||||
@ -3236,6 +3584,9 @@ session number, resp. volume id of the depicted session.
|
||||
Print the foreseeable consumption of 2048 byte blocks
|
||||
by next -commit. This can last a while as a -commit gets
|
||||
prepared and only in last moment is revoked by this option.
|
||||
The result depends on several settings and also on the kind of output device.
|
||||
If no -jidgo options are given and not command -as "mkisofs" was used,
|
||||
then -padding (300 kB by default) is not counted as part of the image size.
|
||||
@c man .TP
|
||||
@item -tell_media_space
|
||||
@kindex -tell_media_space reports free space
|
||||
@ -3418,7 +3769,7 @@ actions it will always perform action "echo".
|
||||
@table @asis
|
||||
@sp 1
|
||||
@item in_iso
|
||||
reports the path if its counterpart exist in the ISO image.
|
||||
reports the path if its counterpart exists in the ISO image.
|
||||
For this the disk_path of the -findx command gets replaced
|
||||
by the iso_rr_path given as parameter.
|
||||
@*
|
||||
@ -3431,7 +3782,7 @@ not exist in the ISO image. The report format is the same as with command
|
||||
@*
|
||||
@item add_missing iso_rr_path_start
|
||||
adds the counterpart if it does not yet
|
||||
exist in the ISO image.
|
||||
exist in the ISO image and marks it for "rm_merge" as non-removable.
|
||||
@*
|
||||
E.g.: -findx /home/thomas -exec add_missing /thomas_on_cd @minus{}@minus{}
|
||||
@*
|
||||
@ -3442,6 +3793,12 @@ contains files. To be used with -type "m" to report mount points.
|
||||
@item empty_iso_dir
|
||||
deletes all files from the counterpart
|
||||
in the ISO image. To be used with -type "m" to truncate mount points.
|
||||
@*
|
||||
@item estimate_size
|
||||
prints a lower and an upper estimation of the number of blocks which the
|
||||
found files together will occupy in the emerging ISO image.
|
||||
This does not account for the superblock,
|
||||
for the directories in the -findx path, or for image padding.
|
||||
@end table
|
||||
@c man .TP
|
||||
@item -compare disk_path iso_rr_path
|
||||
@ -3576,6 +3933,8 @@ Non-default options are:
|
||||
@item report="files"
|
||||
lists the files which use damaged blocks (not with use=outdev).
|
||||
The format is like with find -exec report_damage.
|
||||
Note that a MD5 session mismatch marks all files of the session as damaged.
|
||||
If finer distinction is desired, perform -md5 off before -check_media.
|
||||
@*
|
||||
@item report="blocks_files"
|
||||
first lists damaged blocks and then affected files.
|
||||
@ -3889,10 +4248,9 @@ file paths and pathspecs.
|
||||
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.
|
||||
@*
|
||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||
are interpreted differently than with xorriso option -add. Directories get
|
||||
merged with the root directory of the ISO image, other filetypes get mapped
|
||||
into that root directory.
|
||||
The supported options are documented in detail in xorrisofs.info
|
||||
and in man xorrisofs. The description here is focused on the effect
|
||||
of mkisofs emulation in the context of a xorriso run.
|
||||
@*
|
||||
Other than with the "cdrecord" personality there is no automatic -commit at
|
||||
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||
@ -3900,6 +4258,11 @@ the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
|
||||
-pacifier gets set to "mkisofs" if files are added to the image.
|
||||
@*
|
||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||
are interpreted differently than with xorriso option -add. Directories get
|
||||
merged with the root directory of the ISO image, other filetypes get mapped
|
||||
into that root directory.
|
||||
@*
|
||||
If pathspecs are given and if no output file was chosen before or during the
|
||||
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
|
||||
If -o points to a regular file, then it will be truncated to 0 bytes
|
||||
@ -3911,6 +4274,25 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
|
||||
arguments or if other start arguments pointed the output drive to
|
||||
standard output.
|
||||
@*
|
||||
-print-size inhibits automatic image production at program end. This ban is
|
||||
lifted only if the pending image changes get discarded.
|
||||
@*
|
||||
Eventual padding is counted as part of the ISO image if not option --emul-toc
|
||||
is given.
|
||||
@*
|
||||
If no -iso-level is given, then level 1 is chosen when the first file or
|
||||
directory is added to the image. At the same occasion directory names get
|
||||
allowed to violate the standard by -compliance option allow_dir_id_ext.
|
||||
This may be avoided by option -disallow_dir_id_ext.
|
||||
@*
|
||||
Option -root is supported. Option -old-root is implemented by xorriso
|
||||
commands -mkdir, -cp_clone, -find update_merge, and -find rm_merge.
|
||||
-root and -old-root set command -disk_dev_ino to "ino_only" and -md5 to "on",
|
||||
by default.
|
||||
@minus{}disk_dev_ino can be set to "off" by @minus{}@minus{}old-root-no-ino
|
||||
resp. to "on" by @minus{}@minus{}old-root-devno .
|
||||
@minus{}md5 can be set to "off" by @minus{}@minus{}old-root-no-md5 .
|
||||
@*
|
||||
Not original mkisofs options are @minus{}@minus{}quoted_path_list ,
|
||||
@minus{}@minus{}hardlinks , @minus{}@minus{}acl ,
|
||||
@minus{}@minus{}xattr , @minus{}@minus{}md5 , @minus{}@minus{}stdio_sync .
|
||||
@ -3918,7 +4300,10 @@ They work like the xorriso options with the
|
||||
same name and hardcoded argument "on", e.g. -acl "on".
|
||||
Explicit arguments are expected by @minus{}@minus{}stdio_sync
|
||||
and @minus{}@minus{}scdbackup_tag.
|
||||
@minus{}@minus{}no-emul-toc is -compliance no_emul_toc.
|
||||
@*
|
||||
The capability to preserve multi-session history on overwriteable media
|
||||
gets disabled by default. It can be enabled by using @minus{}@minus{}emul-toc
|
||||
with the first session. See -compliance no_emul_toc.
|
||||
@*
|
||||
@minus{}@minus{}sort-weight gets as arguments a number and an iso_rr_path.
|
||||
The number becomes the LBA sorting weight of regular file iso_rr_path or
|
||||
@ -3941,10 +4326,27 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on.
|
||||
@*
|
||||
@minus{}@minus{}boot-catalog-hide is -boot_image any cat_hidden=on.
|
||||
@*
|
||||
@minus{}mips-boot is the same as -boot_image any mips_path= .
|
||||
@*
|
||||
@minus{}mipsel-boot leads to mipsel_path= .
|
||||
@*
|
||||
@minus{}partition_offset number is
|
||||
@minus{}boot_image any partition_offset=number.
|
||||
@*
|
||||
Personalites "@strong{xorrisofs}", "@strong{genisoimage}",
|
||||
Option @minus{}append_partition is supported.
|
||||
@*
|
||||
@minus{}untranslated_name_len number is
|
||||
@minus{}compliance untranslated_name_len=number.
|
||||
@*
|
||||
@minus{}@minus{}old-empty is -compliance old_empty.
|
||||
@*
|
||||
The options of genisoimage Jigdo Template Extraction are recognized and
|
||||
performed via xorriso option -jigdo. See the "Alias:" names there for the
|
||||
meaning of the genisoimage options.
|
||||
@*
|
||||
@sp 1
|
||||
|
||||
Personalities "@strong{xorrisofs}", "@strong{genisoimage}",
|
||||
and "@strong{genisofs}" are aliases for "mkisofs".
|
||||
@*
|
||||
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
|
||||
@ -3954,6 +4356,9 @@ I.e. all arguments will be interpreted mkisofs style until "@minus{}@minus{}"
|
||||
is encountered.
|
||||
From then on, options are interpreted as xorriso options.
|
||||
@*
|
||||
@minus{}@minus{}no_rc as first argument of such a program start
|
||||
prevents interpretation of startup files. See section FILES below.
|
||||
@*
|
||||
@sp 1
|
||||
|
||||
@cindex Emulation, cdrecord, -as
|
||||
@ -3999,6 +4404,9 @@ If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
|
||||
to the command line arguments. I.e. all arguments will be interpreted cdrecord
|
||||
style until "@minus{}@minus{}" is encountered and an eventual commit happens.
|
||||
From then on, options are interpreted as xorriso options.
|
||||
@*
|
||||
@minus{}@minus{}no_rc as first argument of such a program start
|
||||
prevents interpretation of xorriso startup files. See section FILES below.
|
||||
@c man .TP
|
||||
@item -read_mkisofsrc
|
||||
@kindex -read_mkisofsrc searches and reads .mkisofsrc file
|
||||
@ -4065,7 +4473,12 @@ files. See section FILES below.
|
||||
@item -options_from_file fileaddress
|
||||
@kindex -options_from_file reads commands from file
|
||||
@cindex Process, read command file, -options_from_file
|
||||
Read quoted input from fileaddress and executes it like dialog lines.
|
||||
Read quoted input from fileaddress and execute it like dialog lines.
|
||||
Empty lines and lines which begin by # are ignored. Normally one line
|
||||
should hold one xorriso command and all its arguments. Nevertheless lines
|
||||
may be concatenated by a trailing backslash.
|
||||
@*
|
||||
See also section "Command processing", paragraph "Quoted input".
|
||||
@c man .TP
|
||||
@item -help
|
||||
@kindex -help prints help text
|
||||
@ -4164,9 +4577,20 @@ restoring of hard links.
|
||||
Default is 16m = 16 MiB, minimum 64k = 64 kiB, maximum 1024m = 1 GiB.
|
||||
@c man .TP
|
||||
@item -print text
|
||||
@kindex -print prints text line
|
||||
@cindex Program, print text line, -print
|
||||
Print a text to result channel.
|
||||
@kindex -print prints result text line
|
||||
@cindex Program, print result text line, -print
|
||||
Print a text line to the result channel which is by default stdout.
|
||||
@c man .TP
|
||||
@item -print_info text
|
||||
@kindex -print_info prints message text line
|
||||
@cindex Program, print message text line, -print_info
|
||||
Print a text line to the info channel which is by default stderr.
|
||||
@c man .TP
|
||||
@item -print_mark text
|
||||
@kindex -print_mark prints synchronizing text line
|
||||
@cindex Program, print synchronizing text line, -print_mark
|
||||
Print a text line to the mark channel which is by default directed to both,
|
||||
result and info channel. An empty text will cause no output at all.
|
||||
@c man .TP
|
||||
@item -prompt text
|
||||
@kindex -prompt prompts for enter key
|
||||
@ -4261,8 +4685,8 @@ line by a channel indicator:
|
||||
@*
|
||||
Next is a decimal number of which only bit 0 has a meaning for now.
|
||||
0 means no newline at end of payload, 1 means that the newline character at
|
||||
the end of the output line belongs to the payload. After another colon follows
|
||||
the payload text.
|
||||
the end of the output line belongs to the payload. After another colon and
|
||||
a blank follows the payload text.
|
||||
@*
|
||||
Example:
|
||||
@*
|
||||
@ -4277,8 +4701,9 @@ channels, "I" for info messages, "R" for result lines, "M" for -mark texts.
|
||||
@item -mark text
|
||||
@kindex -mark sets synchronizing message
|
||||
@cindex Process, set synchronizing message, -mark
|
||||
If text is not empty it will get put out on "M" channel each time after a
|
||||
dialog line has been processed.
|
||||
If text is not empty it will get put out on "M" channel each time xorriso
|
||||
is ready for the next dialog line or before xorriso performs a command that
|
||||
was entered to the pager prompt.
|
||||
@c man .TP
|
||||
@item -prog text
|
||||
@kindex -prog sets program name
|
||||
@ -4653,6 +5078,8 @@ $ xorriso -as mkisofs prepared_for_iso/tree1 | \
|
||||
Follow-up sessions are written like this:
|
||||
@*
|
||||
@sp 1
|
||||
$ dd if=/dev/sr0 count=1 >/dev/null 2>&1
|
||||
@*
|
||||
$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
|
||||
@*
|
||||
$ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \
|
||||
@ -4661,8 +5088,13 @@ $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \
|
||||
@*
|
||||
@sp 1
|
||||
Always eject the drive tray between sessions. The old sessions
|
||||
get read via stdio:/dev/sr0 and thus are prone to device driver
|
||||
peculiarities.
|
||||
get read via /dev/sr0. Its device driver might not be aware
|
||||
of the changed content before it loads the media again.
|
||||
In this case the previous session would not be loaded and the
|
||||
new session would contain only the newly added files.
|
||||
@*
|
||||
For the same reason do not let xorriso -as cdrecord load the media,
|
||||
but rather do this manually or by a program that reads from /dev/sr0.
|
||||
@*
|
||||
@sp 1
|
||||
This example works for multi-session media only.
|
||||
@ -4795,6 +5227,8 @@ When done with writing the new session gets checked by its recorded MD5.
|
||||
@*
|
||||
@sp 1
|
||||
$ xorriso \
|
||||
@*
|
||||
-abort_on FATAL \
|
||||
@*
|
||||
-for_backup -disk_dev_ino on \
|
||||
@*
|
||||
@ -4806,7 +5240,7 @@ $ xorriso \
|
||||
@*
|
||||
-not_leaf '*.o' -not_leaf '*.swp' \
|
||||
@*
|
||||
-update_r /home/thomas/open_source_projects /open_source_projects \
|
||||
-update_r /home/thomas/projects /projects \
|
||||
@*
|
||||
-update_r /home/thomas/personal_mail /personal_mail \
|
||||
@*
|
||||
@ -4856,6 +5290,21 @@ older sessions in the table-of-content. E.g. as superuser:
|
||||
# osirrox -mount /dev/sr0 "volid" '*2008_12_05*' /mnt
|
||||
@*
|
||||
@sp 1
|
||||
@c man .sp 1
|
||||
Above example produces a result similar to -root / -old-root / with mkisofs.
|
||||
For getting the session trees accumulated in the new sessions, let all -update
|
||||
commands use a common parent directory and clone it after updating is done:
|
||||
@*
|
||||
-update_r /home/thomas/projects /current/projects \
|
||||
@*
|
||||
-update_r /home/thomas/personal_mail /current/personal_mail \
|
||||
@*
|
||||
-clone /current /"$(date '+%Y_%m_%d_%H%M%S')" \
|
||||
@*
|
||||
The cloned tree will have a name like /2011_02_12_155700.
|
||||
@*
|
||||
@sp 1
|
||||
@c man .sp 1
|
||||
Sessions on multi-session media are separated by several MB of unused blocks.
|
||||
So with small sessions the payload capacity can become substantially lower
|
||||
than the overall media capacity. If the remaining space on media does not
|
||||
@ -4863,6 +5312,7 @@ suffice for the next gap, the drive is supposed to close the media
|
||||
automatically.
|
||||
@*
|
||||
@sp 1
|
||||
@c man .sp 1
|
||||
@strong{Better do not use your youngest backup for -update_r}.
|
||||
Have at least two media which you use alternatingly. So only older backups
|
||||
get endangered by the new write operation, while the newest backup is
|
||||
@ -4960,7 +5410,7 @@ to read and execute lines from the following files:
|
||||
@*
|
||||
@sp 1
|
||||
The files are read in the sequence given above, but none of them is required
|
||||
to exist.
|
||||
to exist. The line format is described with command -options_from_file.
|
||||
@*
|
||||
If mkisofs emulation was enabled by program name "xorrisofs", "mkisofs",
|
||||
"genisoimage", or "genisofs", then afterwards -read_mkisofsrc is performed,
|
||||
@ -4976,6 +5426,9 @@ The default setting of -check_media abort_file= is:
|
||||
@*
|
||||
@c man .SH SEE ALSO
|
||||
@c man .TP
|
||||
@c man For the mkisofs emulation of xorriso
|
||||
@c man .BR xorrisofs(1)
|
||||
@c man .TP
|
||||
@c man For mounting xorriso generated ISO 9660 images (-t iso9660)
|
||||
@c man .BR mount(8)
|
||||
@c man .TP
|
||||
@ -5004,6 +5457,8 @@ The default setting of -check_media abort_file= is:
|
||||
@node Seealso, Legal, Files, Top
|
||||
@chapter See also
|
||||
@table @asis
|
||||
@item For the mkisofs emulation of xorriso
|
||||
xorrisofs(1)
|
||||
@item For mounting xorriso generated ISO 9660 images (-t iso9660)
|
||||
mount(8)
|
||||
@item Libreadline, a comfortable input line facility
|
||||
@ -5034,7 +5489,7 @@ Thomas Schmitt <scdbackup@@gmx.net>
|
||||
for libburnia-project.org
|
||||
@c man .SH COPYRIGHT
|
||||
@section Copyright
|
||||
Copyright (c) 2007 - 2010 Thomas Schmitt
|
||||
Copyright (c) 2007 - 2011 Thomas Schmitt
|
||||
@*
|
||||
Permission is granted to distribute this text freely. It shall only be
|
||||
modified in sync with the technical properties of xorriso. If you make use
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<HEAD>
|
||||
<META NAME="description" CONTENT="GNU xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, GNU/Linux, Linux, FreeBSD, Solaris, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
|
||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, BD, ISO, ISO 9660, RockRidge, Rock Ridge, GNU/Linux, Linux, FreeBSD, Solaris, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
|
||||
<META NAME="robots" CONTENT="follow">
|
||||
<TITLE>GNU xorriso - GNU Project - Free Software Foundation</TITLE>
|
||||
<LINK rev="made" href="mailto:webmasters@gnu.org">
|
||||
@ -82,7 +82,9 @@ but rather not with CD, DVD-R, DVD+R, BD-R.
|
||||
<DT>libacl and libacl-devel</DT>
|
||||
<DD>eventually allow on GNU/Linux to get and set ACLs.</DD>
|
||||
<DT>zlib and zlib-devel</DT>
|
||||
<DD>eventually allow zisofs and gzip compression.</DD>
|
||||
<DD>eventually allow zisofs, gzip compression, and Jigdo file production.</DD>
|
||||
<DT>libbz2 and libbz2-devel</DT>
|
||||
<DD>eventually allow bzip2 compression of Jigdo template files.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
@ -419,6 +421,10 @@ files or trees to disk:
|
||||
<DD><KBD> /home/her/buttercup_dir -- \</KBD>
|
||||
<DD><KBD> -extract /sounds /home/her/sounds_from_me</KBD></DD>
|
||||
</DD>
|
||||
<DT>Each copy command processes its files sorted by block address
|
||||
in the ISO image in order to reduce head moves with optical media.
|
||||
This can bring effective read performance near to the raw media reading speed.
|
||||
</DT>
|
||||
<DT>Consider to enter dialog mode and use commands like
|
||||
<KBD>-cd , -du , -lsl , -find<KBD>.
|
||||
<DT>
|
||||
@ -440,19 +446,21 @@ files or trees to disk:
|
||||
<P>
|
||||
<DL>
|
||||
<DT><H3>Download as source code (see README):</H3></DT>
|
||||
<DD><A HREF="xorriso-0.6.2.tar.gz">xorriso-0.6.2.tar.gz</A>
|
||||
(1670 KB).
|
||||
<DD><A HREF="xorriso-1.0.8.tar.gz">xorriso-1.0.8.tar.gz</A>
|
||||
(1895 KB).
|
||||
</DD>
|
||||
<DD>(Released 18 Sep 2010)</DD>
|
||||
<DD><A HREF="xorriso-0.6.2.tar.gz.sig">xorriso-0.6.2.tar.gz.sig</A></DD>
|
||||
<DD>(Released 15 Apr 2011)</DD>
|
||||
<DD><A HREF="xorriso-1.0.8.tar.gz.sig">xorriso-1.0.8.tar.gz.sig</A></DD>
|
||||
<DD>
|
||||
(detached GPG signature for verification by
|
||||
<KBD>gpg --verify xorriso-0.6.2.tar.gz.sig xorriso-0.6.2.tar.gz</KBD>).
|
||||
<KBD>gpg --verify xorriso-1.0.8.tar.gz.sig xorriso-1.0.8.tar.gz</KBD>
|
||||
<BR>
|
||||
after eventual <KBD>gpg --keyserver keys.gnupg.net --recv-keys ABC0A854</KBD>).
|
||||
</DD>
|
||||
<DD>
|
||||
Also on <A HREF="http://www.gnu.org/prep/ftp.html">
|
||||
mirrors of ftp://ftp.gnu.org/gnu/ </A>
|
||||
as xorriso/xorriso-0.6.2.tar.gz
|
||||
as xorriso/xorriso-1.0.8.tar.gz
|
||||
</DD>
|
||||
</DL>
|
||||
</DD>
|
||||
@ -460,7 +468,14 @@ as xorriso/xorriso-0.6.2.tar.gz
|
||||
<DL><DT>Documentation:</DT>
|
||||
<DD><A HREF="README_xorriso">README</A> about installation and drive setup</DD>
|
||||
<DD><A HREF="xorriso_help">xorriso -help</A> gives an overview of options</DD>
|
||||
<DD><A HREF="xorrisofs_help">xorriso -as mkisofs -help</A>
|
||||
supported options of mkisofs emulation
|
||||
</DD>
|
||||
<DD><A HREF="xorrecord_help">xorriso -as cdrecord -help</A>
|
||||
supported options of cdrecord emulation</DD>
|
||||
<DD><A HREF="man_1_xorriso.html">man xorriso</A> is the manual page</DD>
|
||||
<DD><A HREF="man_1_xorrisofs_devel.html">man xorrisofs</A>
|
||||
describes the mkisofs emulation</DD>
|
||||
</DL>
|
||||
<A NAME="contact"></A>
|
||||
<DL><DT>Contact:</DT>
|
||||
@ -480,9 +495,9 @@ as xorriso/xorriso-0.6.2.tar.gz
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
Bug fixes towards xorriso-0.6.0:
|
||||
Bug fixes towards xorriso-1.0.6:
|
||||
<UL>
|
||||
<LI>Regression with -hardlinks and -compliance old_rr, 0.4.2, Aug 2009</LI>
|
||||
<LI>mkisofs emulation could ignore options (regression in 0.1.6)</LI>
|
||||
<!--
|
||||
<LI>- none -</LI>
|
||||
-->
|
||||
@ -500,35 +515,9 @@ Bug fixes in .pl01 towards xorriso-:
|
||||
-->
|
||||
|
||||
<P>
|
||||
Enhancements towards previous stable version xorriso-0.6.0:
|
||||
Enhancements towards previous stable version xorriso-1.0.6:
|
||||
<UL>
|
||||
|
||||
<LI>
|
||||
New option -preparer_id, -as mkisofs options -p and -preparer
|
||||
</LI>
|
||||
<LI>
|
||||
New -boot_image specifier emul_type=none|hard_disk|floppy
|
||||
</LI>
|
||||
<LI>
|
||||
New boot_image boot specs partition_offset, partition_hd_cyl, partition_sec_hd
|
||||
</LI>
|
||||
<LI>
|
||||
Made behavior of -as mkisofs with unknown options more similar to original
|
||||
</LI>
|
||||
<LI>
|
||||
New -as mkisofs option -hard-disk-boot, enabled -b without -no-emul-boot
|
||||
</LI>
|
||||
<LI>
|
||||
New -as mkisofs option -e from Fedora genisoimage
|
||||
</LI>
|
||||
<LI>
|
||||
New -as mkisofs options -partition_offset,-partition_hd_cyl,-partition_sec_hd
|
||||
</LI>
|
||||
<LI>
|
||||
DVD-R DL are supported as single-session media.
|
||||
I.e. only with option -close "on".
|
||||
</LI>
|
||||
|
||||
<LI>- none -</LI>
|
||||
<!--
|
||||
<LI>- none -</LI>
|
||||
-->
|
||||
@ -539,34 +528,38 @@ I.e. only with option -close "on".
|
||||
|
||||
<P>
|
||||
<H3>
|
||||
Libburnia software copies included in GNU xorriso:
|
||||
Software copies included in GNU xorriso:
|
||||
</H3>
|
||||
<DL>
|
||||
<DT>
|
||||
GNU xorriso is feature-wise equivalent to the dynamic compilation of
|
||||
<A HREF="http://libburnia-project.org/"> libburnia </A>
|
||||
libraries and libburnia program xorriso.
|
||||
libraries, libjte, and libburnia program xorriso.
|
||||
It restricts itself to a technical form where the legal commitments of the
|
||||
libburnia project and the legal intentions of
|
||||
<A HREF="http://www.fsf.org/"> FSF </A> match completely.
|
||||
</DT>
|
||||
<DD> </DD>
|
||||
<DT>libburn-0.8.7</DT>
|
||||
<DT>libburn-1.0.6</DT>
|
||||
<DD>reads and writes data from and to CD, DVD, BD.</DD>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
developed and maintained since August 2006 by
|
||||
Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||
<DT>libisofs-0.6.37</DT>
|
||||
<DT>libisofs-1.0.6</DT>
|
||||
<DD>operates on ISO 9660 filesystem images.</DD>
|
||||
<DD>(By Vreixo Formoso, Mario Danic and Thomas Schmitt
|
||||
from team of libburnia-project.org)</DD>
|
||||
<DT>libisoburn-0.6.2</DT>
|
||||
<DT>libisoburn-1.0.8</DT>
|
||||
<DD>coordinates libburn and libisofs, emulates multi-session where needed,
|
||||
and hosts the original source code of program xorriso.</DD>
|
||||
<DD>It provides the complete functionality of xorriso via
|
||||
a C language API.</DD>
|
||||
<DD>(By Vreixo Formoso and Thomas Schmitt
|
||||
from team of libburnia-project.org)</DD>
|
||||
<DT>libjte-1.0.0</DT>
|
||||
<DD>produces jigdo and template file together with the emerging ISO image.</DD>
|
||||
<DD>(By Free Software Foundation, Steve McIntyre, George Danchev,
|
||||
Thomas Schmitt)</DD>
|
||||
<DD> </DD>
|
||||
<DT>The source code of this software is independent of
|
||||
cdrecord and mkisofs.</DT>
|
||||
@ -577,8 +570,8 @@ cdrecord and mkisofs.</DT>
|
||||
|
||||
<P>
|
||||
<DL>
|
||||
<DT><H3>Development snapshot, version 0.6.3 :</H3></DT>
|
||||
<DD>Bug fixes towards xorriso-0.6.2:
|
||||
<DT><H3>Development snapshot, version 1.0.9 :</H3></DT>
|
||||
<DD>Bug fixes towards xorriso-1.0.8:
|
||||
<UL>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
@ -586,18 +579,24 @@ cdrecord and mkisofs.</DT>
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
<DD>Enhancements towards stable version 0.6.2:
|
||||
<DD>Enhancements towards stable version 1.0.8:
|
||||
<UL>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
<LI>- none yet -</LI>
|
||||
-->
|
||||
</UL>
|
||||
|
||||
</DD>
|
||||
|
||||
|
||||
<DD> </DD>
|
||||
<DD><A HREF="README_xorriso_devel">README 0.6.3</A>
|
||||
<DD><A HREF="xorriso_help_devel">xorriso_0.6.3 -help</A></DD>
|
||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.6.3)</A></DD>
|
||||
<DD><A HREF="README_xorriso_devel">README 1.0.9</A>
|
||||
<DD><A HREF="xorriso_help_devel">xorriso-1.0.9 -help</A></DD>
|
||||
<DD><A HREF="xorrisofs_help_devel">xorriso-1.0.9 -as mkisofs -help</A></DD>
|
||||
<DD><A HREF="xorrecord_help_devel">xorriso-1.0.9 -as cdrecord -help</A></DD>
|
||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 1.0.9)</A></DD>
|
||||
<DD><A HREF="man_1_xorrisofs_devel.html">man xorrisofs (as of 1.0.9)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>If you want to distribute development versions of xorriso, then use
|
||||
this tarball which produces static linking between xorriso and the
|
||||
@ -607,14 +606,15 @@ libburnia libraries.
|
||||
installation see README)
|
||||
</DD>
|
||||
<DD>
|
||||
<A HREF="xorriso-0.6.3.tar.gz">xorriso-0.6.3.tar.gz</A>
|
||||
(1670 KB).
|
||||
<A HREF="xorriso-1.0.9.tar.gz">xorriso-1.0.9.tar.gz</A>
|
||||
(1895 KB).
|
||||
</DD>
|
||||
<DT>A dynamically linked development version of xorriso can be obtained
|
||||
from repositories of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A>.
|
||||
xorriso is part of libisoburn/trunk and will get built by its "make".
|
||||
</DT>
|
||||
|
||||
<DT>Be warned that the libraries in SVN and bzr are development versions with
|
||||
possibly unstable API/ABI enhancements. Do not distribute development
|
||||
versions for dynamic linking. Only release versions are safe for that.
|
||||
@ -636,6 +636,18 @@ versions for dynamic linking. Only release versions are safe for that.
|
||||
But after the run of <KBD>./bootstrap</KBD>, only
|
||||
vanilla tools like make and gcc are needed.
|
||||
</DT>
|
||||
<DT>GNU xorriso contains a copy of libjte-1.0.0 from package jigit
|
||||
which produces jigdo and template file together with the emerging ISO image.
|
||||
(By Free Software Foundation, Steve McIntyre, George Danchev,
|
||||
Thomas Schmitt)
|
||||
</DT>
|
||||
<DD>Important: If desired, libjte has to be already installed when libisofs
|
||||
and libisoburn get built.</DD>
|
||||
<DD>Download: <KBD><B>wget http://www.einval.com/~steve/software/JTE/download/jigit_1.17.orig.tar.gz</B>
|
||||
</KBD></DD>
|
||||
<DD>Install: <KBD><B>tar xzf jigit_1.17.orig.tar.gz ; cd jigit-1.17 ; make ; make install</B>
|
||||
</KBD></DD>
|
||||
|
||||
<DD> </DD>
|
||||
</DL>
|
||||
</P>
|
||||
@ -692,7 +704,7 @@ scdbackup, multi volume CD/DVD/BD backup</A></DD>
|
||||
<BR>
|
||||
Legal statement: This website does not serve any commercial purpose.
|
||||
<BR><BR>
|
||||
Copyright © 2008 - 2010 Thomas Schmitt.
|
||||
Copyright © 2008 - 2011 Thomas Schmitt.
|
||||
<BR>
|
||||
This text is freely distributable. It shall only be modified in sync with
|
||||
the factual properties of xorriso and its public storage locations.
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* xorriso - Command line oriented batch and dialog tool which creates, loads,
|
||||
manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Initial code of this program was derived from program src/askme.c out
|
||||
of scdbackup-0.8.8, Copyright 2007 Thomas Schmitt, BSD-License.
|
||||
@ -109,9 +109,9 @@
|
||||
/* The minimum version of libisoburn xorriso API to be used with this
|
||||
version of xorriso.
|
||||
*/
|
||||
#define Xorriso_req_majoR 0
|
||||
#define Xorriso_req_minoR 6
|
||||
#define Xorriso_req_micrO 2
|
||||
#define Xorriso_req_majoR 1
|
||||
#define Xorriso_req_minoR 0
|
||||
#define Xorriso_req_micrO 8
|
||||
|
||||
|
||||
static void yell_xorriso()
|
||||
@ -229,7 +229,7 @@ int main(int argc, char **argv)
|
||||
*/
|
||||
ret= Xorriso_prescan_args(xorriso,argc,argv,0);
|
||||
if(ret == 0)
|
||||
goto end_sucessfully;
|
||||
goto end_successfully;
|
||||
if(ret < 0)
|
||||
exit(5);
|
||||
|
||||
@ -246,7 +246,7 @@ int main(int argc, char **argv)
|
||||
/* Interpret startup files */
|
||||
ret= Xorriso_read_rc(xorriso, 0);
|
||||
if(ret == 3)
|
||||
goto end_sucessfully;
|
||||
goto end_successfully;
|
||||
if(ret <= 0)
|
||||
{ret= 5; goto emergency_exit;}
|
||||
|
||||
@ -258,7 +258,7 @@ int main(int argc, char **argv)
|
||||
i= 1;
|
||||
ret= Xorriso_interpreter(xorriso, argc, argv, &i, 2);
|
||||
if(ret == 3)
|
||||
goto end_sucessfully;
|
||||
goto end_successfully;
|
||||
if(ret <= 0)
|
||||
{ret= 5; goto emergency_exit;}
|
||||
|
||||
@ -267,9 +267,9 @@ int main(int argc, char **argv)
|
||||
if(ret <= 0)
|
||||
{ret= 6; goto emergency_exit;}
|
||||
|
||||
end_sucessfully:; /* normal shutdown, including eventual -commit */
|
||||
end_successfully:; /* normal shutdown, including eventual -commit */
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(Xorriso_change_is_pending(xorriso, 0))
|
||||
if(Xorriso_change_is_pending(xorriso, 1))
|
||||
Xorriso_option_end(xorriso, 2);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
ret= Xorriso_make_return_value(xorriso, 0);
|
||||
|
@ -32,18 +32,6 @@ xorriso_xorriso_CFLAGS =
|
||||
xorriso_xorriso_LDADD = $(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
|
||||
|
||||
|
||||
# This looks quite ugly with make install: xorriso.c is compiled twice again
|
||||
#
|
||||
# Trying to create a build timestamp file
|
||||
#
|
||||
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||
# phony targets get rebuilt every time
|
||||
# .PHONY: xorriso/xorriso_buildstamp.h
|
||||
# xorriso/xorriso_buildstamp.h:
|
||||
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||
# cat xorriso/xorriso_buildstamp.h
|
||||
|
||||
|
||||
xorriso_xorriso_SOURCES = \
|
||||
\
|
||||
xorriso/xorriso.h \
|
||||
@ -164,6 +152,26 @@ xorriso_xorriso_SOURCES = \
|
||||
libisofs/md5.h \
|
||||
libisofs/md5.c \
|
||||
\
|
||||
libjte/libjte.h \
|
||||
libjte/libjte_private.h \
|
||||
libjte/libjte.c \
|
||||
libjte/jte.h \
|
||||
libjte/jte.c \
|
||||
libjte/checksum.h \
|
||||
libjte/checksum.c \
|
||||
libjte/endian.c \
|
||||
libjte/endianconv.h \
|
||||
libjte/md5.h \
|
||||
libjte/md5.c \
|
||||
libjte/rsync.h \
|
||||
libjte/rsync.c \
|
||||
libjte/sha1.h \
|
||||
libjte/sha1.c \
|
||||
libjte/sha256.h \
|
||||
libjte/sha256.c \
|
||||
libjte/sha512.h \
|
||||
libjte/sha512.c \
|
||||
\
|
||||
libburn/async.c \
|
||||
libburn/async.h \
|
||||
libburn/back_hacks.h \
|
||||
@ -253,7 +261,6 @@ install-exec-hook:
|
||||
|
||||
|
||||
|
||||
# Alternative to the disabled .PHONY above.
|
||||
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||
#
|
||||
buildstamp:
|
||||
@ -283,12 +290,14 @@ indent: $(indent_files)
|
||||
## ========================================================================= ##
|
||||
|
||||
# Extra things
|
||||
# nodist_pkgconfig_DATA = \
|
||||
# xorriso.pc
|
||||
|
||||
man_MANS = xorriso/xorriso.1
|
||||
man_MANS = \
|
||||
xorriso/xorriso.1 \
|
||||
xorriso/xorrisofs.1
|
||||
|
||||
info_TEXINFOS = xorriso/xorriso.texi
|
||||
info_TEXINFOS = \
|
||||
xorriso/xorriso.texi \
|
||||
xorriso/xorrisofs.texi
|
||||
|
||||
EXTRA_DIST = \
|
||||
xorriso.pc.in \
|
||||
@ -306,6 +315,7 @@ EXTRA_DIST = \
|
||||
doc/susp_aaip_2_0.txt \
|
||||
doc/susp_aaip_isofs_names.txt \
|
||||
doc/zisofs_format.txt \
|
||||
doc/startup_file.txt \
|
||||
libisofs/aaip-os-dummy.c \
|
||||
libisofs/aaip-os-linux.c \
|
||||
libisofs/aaip-os-freebsd.c \
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* Command line oriented batch and dialog tool which creates, loads,
|
||||
manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -20,7 +20,13 @@
|
||||
|
||||
|
||||
/* for uint32_t */
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/** The source code release timestamp */
|
||||
@ -64,6 +70,18 @@ struct FindjoB; /* Program and status of a find run */
|
||||
(((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 204800)
|
||||
|
||||
|
||||
/* Maximum number of appended partitions. Effectively usable number depends
|
||||
on system area type.
|
||||
*/
|
||||
#define Xorriso_max_appended_partitionS 8
|
||||
|
||||
|
||||
/*
|
||||
Maximum length of a disc label text plus 1.
|
||||
*/
|
||||
#define Xorriso_disc_label_sizE 129
|
||||
|
||||
|
||||
struct XorrisO { /* the global context of xorriso */
|
||||
|
||||
int libs_are_started;
|
||||
@ -111,7 +129,9 @@ struct XorrisO { /* the global context of xorriso */
|
||||
Do not create or use hln arrays if sort_lba_on
|
||||
*/
|
||||
|
||||
int iso_level;
|
||||
int do_joliet;
|
||||
int do_iso1999;
|
||||
|
||||
int do_aaip; /* bit0= ACL in
|
||||
bit1= ACL out
|
||||
@ -130,18 +150,25 @@ struct XorrisO { /* the global context of xorriso */
|
||||
bit2= write MD5 for each data file
|
||||
bit3= make file content stability check by double reading
|
||||
bit4= use recorded MD5 as proxy of ISO file
|
||||
bit5= with bit0: do not check tags of superblock,tree,session
|
||||
*/
|
||||
|
||||
int no_emul_toc; /* bit0= On overwriteables:
|
||||
write first session to LBA 0 rather than 32.
|
||||
*/
|
||||
|
||||
int do_old_empty; /* See -compliance old_empty
|
||||
own data content: range [0,31]. The new way is to have
|
||||
a dedicated block to which all such files will point.
|
||||
*/
|
||||
|
||||
char scdbackup_tag_name[81];
|
||||
char scdbackup_tag_time[19];
|
||||
char scdbackup_tag_written[512];
|
||||
char scdbackup_tag_listname[SfileadrL];
|
||||
|
||||
int relax_compliance; /* opaque bitfield to be set by xorrisoburn */
|
||||
int untranslated_name_len;
|
||||
int do_follow_pattern;
|
||||
int do_follow_param;
|
||||
int do_follow_links;
|
||||
@ -219,8 +246,23 @@ struct XorrisO { /* the global context of xorriso */
|
||||
*/
|
||||
char image_start_value[81]; /* value according image_start_mode */
|
||||
|
||||
uint32_t displacement;
|
||||
int displacement_sign;
|
||||
|
||||
int drives_exclusive; /* burn_preset_device_open() param exclusive */
|
||||
|
||||
int early_stdio_test; /* For burn_allow_drive_role_4():
|
||||
bit1= Test whether a stdio drive can be opened for
|
||||
read-write resp. read-only resp. write only.
|
||||
bit2= Classify files which cannot be opened at all
|
||||
as role 0 : useless dummy.
|
||||
bit3= Classify non-empty role 5 drives as
|
||||
BURN_DISC_APPENDABLE with NWA after the
|
||||
end of the file. It is nevertheless
|
||||
possible to change this address by call
|
||||
burn_write_opts_set_start_byte().
|
||||
*/
|
||||
|
||||
int do_calm_drive; /* bit0= calm down drive after aquiring it */
|
||||
|
||||
char indev[SfileadrL];
|
||||
@ -235,7 +277,11 @@ struct XorrisO { /* the global context of xorriso */
|
||||
time_t isofs_st_in; /* That time point as read from "isofs.st" of the
|
||||
loaded image. */
|
||||
|
||||
int volset_change_pending; /* whether -commit would make sense */
|
||||
int volset_change_pending; /* whether -commit would make sense
|
||||
0= no change pending , 1= change pending
|
||||
2= change pending, but -as misofs -print-size
|
||||
was performed on the changed image model
|
||||
*/
|
||||
int no_volset_present; /* set to 1 on first failure */
|
||||
|
||||
struct CheckmediajoB *check_media_default;
|
||||
@ -262,10 +308,13 @@ struct XorrisO { /* the global context of xorriso */
|
||||
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
|
||||
int fs; /* fifo size in 2048 byte chunks : at most 1 GB */
|
||||
int padding; /* number of bytes to add after ISO 9660 image */
|
||||
int do_padding_by_libisofs; /* 0= by libburn , 1= by libisofs */
|
||||
|
||||
int alignment; /* if > 0 : image size alignment in 2048 byt blocks */
|
||||
/* <<< not sure whether to keep this after libisofs will have
|
||||
learned to pad up MBR images to full MB */
|
||||
int alignment; /* if > 0 : output size alignment in 2048 byte blocks.
|
||||
This is always done by libburn, i.e. attached
|
||||
outside the image. Eventual inner alignment of
|
||||
the image end happens first.
|
||||
*/
|
||||
|
||||
int do_stream_recording; /* 0=no, 1=yes, 2=for data, not for dir
|
||||
>=16 means yes with number as start LBA */
|
||||
@ -300,6 +349,17 @@ struct XorrisO { /* the global context of xorriso */
|
||||
(a simple partition table)
|
||||
bit1= isohybrid boot image pointer
|
||||
and partition table
|
||||
bit2-7= System area type
|
||||
0= with bit0 or bit1: MBR
|
||||
else: unspecified type
|
||||
1= MIPS Big Endian Volume Header
|
||||
2= MIPS Little Endian Boot Block
|
||||
3= SUN Disk Label for SUN SPARC
|
||||
bit8-9= Only with System area type 0
|
||||
Cylinder alignment mode
|
||||
0 = auto (align if bit1)
|
||||
1 = always align
|
||||
2 = never align
|
||||
*/
|
||||
int patch_system_area; /* Bits as of system_area_options.
|
||||
to be applied to the loaded system
|
||||
@ -317,6 +377,14 @@ struct XorrisO { /* the global context of xorriso */
|
||||
/* 1 to 255, 0= disabled/default */
|
||||
int partition_heads_per_cyl;
|
||||
|
||||
/* Path and type of image files to be appended as MBR partitions */
|
||||
char *appended_partitions[Xorriso_max_appended_partitionS];
|
||||
uint8_t appended_part_types[Xorriso_max_appended_partitionS];
|
||||
|
||||
/* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label.
|
||||
*/
|
||||
char ascii_disc_label[Xorriso_disc_label_sizE];
|
||||
|
||||
/* User settable PVD time stamps */
|
||||
time_t vol_creation_time;
|
||||
time_t vol_modification_time;
|
||||
@ -326,6 +394,21 @@ struct XorrisO { /* the global context of xorriso */
|
||||
and timezone 0 */
|
||||
char vol_uuid[17];
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
/* Parameters and state of Jigdo Template Export environment */
|
||||
struct libjte_env *libjte_handle;
|
||||
#endif
|
||||
|
||||
/* List of -jigdo parameters since the most recent -jigdo clear */
|
||||
struct Xorriso_lsT *jigdo_params;
|
||||
struct Xorriso_lsT *jigdo_values;
|
||||
int libjte_params_given; /* bits: 0= outfile , 1= verbosity , 2= template_path
|
||||
3= jigdo_path , 4= md5_path , 5= min_size
|
||||
6= checksum_iso , 7= checksum_template
|
||||
8= compression , 9= exclude , 10= demand_md5
|
||||
11= mapping
|
||||
*/
|
||||
|
||||
/* LBA of boot image after image loading */
|
||||
int loaded_boot_bin_lba;
|
||||
/* Path of the catalog node after image loading */
|
||||
@ -432,6 +515,7 @@ struct XorrisO { /* the global context of xorriso */
|
||||
int library_msg_direct_print;
|
||||
char abort_on_text[20];
|
||||
int abort_on_severity; /* A severity rank number as threshold */
|
||||
int abort_on_is_default; /* will be set to 0 by first -abort_on */
|
||||
int problem_status; /* Severity rank number. 0= no abort condition present */
|
||||
char problem_status_text[20];
|
||||
|
||||
@ -489,6 +573,8 @@ struct XorrisO { /* the global context of xorriso */
|
||||
bit3= seen match
|
||||
*/
|
||||
|
||||
double last_abort_file_time; /* most recent check for aborting -check_md5 */
|
||||
|
||||
/* Tree node collection and LBA sorting facility */
|
||||
int node_counter;
|
||||
int node_array_size;
|
||||
@ -518,6 +604,10 @@ struct XorrisO { /* the global context of xorriso */
|
||||
|
||||
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
|
||||
|
||||
/* bit0= update_merge active: mark all newly added nodes as visited+found
|
||||
*/
|
||||
int update_flags;
|
||||
|
||||
/* result (stdout, R: ) */
|
||||
char result_line[10*SfileadrL];
|
||||
int result_line_counter;
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2010.09.18.210001"
|
||||
#define Xorriso_timestamP "2011.04.14.073001"
|
||||
|
@ -4,7 +4,7 @@
|
||||
a command line oriented batch and dialog tool which creates, loads,
|
||||
manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -17,9 +17,9 @@
|
||||
|
||||
/* The minimum version of libisoburn to be used with this version of xorriso
|
||||
*/
|
||||
#define xorriso_libisoburn_req_major 0
|
||||
#define xorriso_libisoburn_req_minor 6
|
||||
#define xorriso_libisoburn_req_micro 2
|
||||
#define xorriso_libisoburn_req_major 1
|
||||
#define xorriso_libisoburn_req_minor 0
|
||||
#define xorriso_libisoburn_req_micro 8
|
||||
|
||||
|
||||
struct SpotlisT; /* List of intervals with different read qualities */
|
||||
@ -112,6 +112,9 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
|
||||
bit1= remove empty directory: rmdir
|
||||
bit2= recursion: do not reassure in mode 2 "tree"
|
||||
bit3= this is for overwriting and not for plain removal
|
||||
bit4= count deleted files in xorriso->pacifier_count
|
||||
bit5= with bit0 only remove directory content, not the directory
|
||||
bit6= do not delete eventually existing node from di_array
|
||||
@return <=0 = error
|
||||
1 = removed simple node
|
||||
2 = removed directory or tree
|
||||
@ -120,6 +123,7 @@ int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
|
||||
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
|
||||
char *path, int flag);
|
||||
|
||||
|
||||
/* @param flag bit0= long format
|
||||
bit1= do not print count of nodes
|
||||
bit2= du format
|
||||
@ -512,12 +516,21 @@ int Xorriso_attach_boot_image(struct XorrisO *xorriso, int flag);
|
||||
int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||
int flag);
|
||||
|
||||
int Xorriso_add_mips_boot_file(struct XorrisO *xorriso, char *path, int flag);
|
||||
|
||||
int Xorriso_coordinate_system_area(struct XorrisO *xorriso, int sa_type,
|
||||
int options, char *cmd, 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
|
||||
|
||||
|
||||
|
||||
int Exprtest_match(struct XorrisO *xorriso, struct ExprtesT *ftest,
|
||||
void *node_pt, char *name, char *path,
|
||||
struct stat *boss_stbuf, struct stat *stbuf, int flag);
|
||||
@ -540,5 +553,22 @@ int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path,
|
||||
int Xorriso_preparer_string(struct XorrisO *xorriso, char xorriso_id[129],
|
||||
int flag);
|
||||
|
||||
int Xorriso_jigdo_interpreter(struct XorrisO *xorriso, char *aspect, char *arg,
|
||||
int flag);
|
||||
|
||||
|
||||
int Xorriso_estimate_file_size(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
char *basename, mode_t st_mode, off_t st_size, int flag);
|
||||
|
||||
|
||||
int Xorriso_clone_tree(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *origin, char *dest, int flag);
|
||||
|
||||
int Xorriso_clone_under(struct XorrisO *xorriso, char *origin, char *dest,
|
||||
int flag);
|
||||
|
||||
int Xorriso_mark_update_merge(struct XorrisO *xorriso, char *path,
|
||||
void *node, int flag);
|
||||
|
||||
#endif /* Xorrisoburn_includeD */
|
||||
|
||||
|
1510
xorriso/xorrisofs.1
Normal file
1510
xorriso/xorrisofs.1
Normal file
File diff suppressed because it is too large
Load Diff
1816
xorriso/xorrisofs.info
Normal file
1816
xorriso/xorrisofs.info
Normal file
File diff suppressed because it is too large
Load Diff
2049
xorriso/xorrisofs.texi
Normal file
2049
xorriso/xorrisofs.texi
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user