Compare commits
136 Commits
ZeroOneSix
...
ZeroTwoFou
Author | SHA1 | Date | |
---|---|---|---|
deb42c7cdc | |||
19daa2a6f7 | |||
36ce98a648 | |||
11ccd67979 | |||
1cb6906b1b | |||
cec06c2a9a | |||
32486a5ca2 | |||
2745faabd2 | |||
0465f55485 | |||
d889ba7077 | |||
6eef826c60 | |||
fbc3e6992c | |||
5abdf19a48 | |||
feb3c10d1a | |||
96121a70dc | |||
552911da11 | |||
1d1f3a2265 | |||
3d23a621b2 | |||
c6c82c8333 | |||
afc27f89fe | |||
b5d7d75598 | |||
8ab1fcd4f5 | |||
c0cc40121f | |||
9b85bc0fed | |||
235cbe3dfe | |||
0f0a2e4bb5 | |||
1fd02ceba2 | |||
784684eb92 | |||
d3b35b50cd | |||
8bce9569e1 | |||
94f9c9acf8 | |||
aeb98c3abb | |||
a6da71ba36 | |||
ee7f121a25 | |||
0c7086525b | |||
708be0cde6 | |||
becac4eba6 | |||
319ab37ad9 | |||
a68624cc5c | |||
a745366913 | |||
31809252e8 | |||
58ba5aeff6 | |||
4088bf38a6 | |||
404d120b75 | |||
ad1762c790 | |||
35ff5db496 | |||
d10f3fa7a1 | |||
d382bdba17 | |||
af36e5e127 | |||
69b0edc261 | |||
88d94ad7b7 | |||
8b5af86a64 | |||
cf9bc140b1 | |||
a9c0fb6e58 | |||
06bcc637d6 | |||
c02edc329d | |||
7765835374 | |||
d8b6e69429 | |||
eddb70823e | |||
ed03897759 | |||
c104b0a073 | |||
b45fd0553e | |||
25fd92f2c4 | |||
41aa050551 | |||
766129ec66 | |||
d825fc1a3a | |||
eb9f0f6d6a | |||
d17ddda7db | |||
4d3ef02838 | |||
d42e7b2d9f | |||
4ea0e15acb | |||
e5ba798b14 | |||
673a0e9d2f | |||
7a7232f16e | |||
52d89cc7cc | |||
048bbbe1ef | |||
1e95e13263 | |||
3cd9763879 | |||
94638d6e9b | |||
9fa0a6f441 | |||
362ecda0f3 | |||
f96fdc339a | |||
88ef7d06f4 | |||
837f60c2e4 | |||
ea36885829 | |||
40d9dcf8bb | |||
e35f0b6841 | |||
f882d323b1 | |||
071a3869db | |||
4fba3a4365 | |||
0557d1653f | |||
9dd400d630 | |||
883551a41e | |||
bad48be6a9 | |||
973383bb9b | |||
a1968a431d | |||
4de452fb94 | |||
ae5ad5a143 | |||
ceca17e946 | |||
32e15b5432 | |||
510ff61bf3 | |||
a14af44951 | |||
818de9128d | |||
a15e636952 | |||
96d4e1fe92 | |||
0d2e79ece8 | |||
26b3dcb1f5 | |||
0d407b63ad | |||
24ad7e5abe | |||
d784d8f2e9 | |||
b61ca07f13 | |||
a7cfdfeadb | |||
25c4acaf79 | |||
daa98e8008 | |||
cada9d4ba3 | |||
b595c7f836 | |||
440247dc98 | |||
fca0648618 | |||
2b55dd08fe | |||
df05ccc14c | |||
5aab9a006a | |||
e13615cff6 | |||
dc2664f753 | |||
27f8339527 | |||
b9f01ef512 | |||
106ab1fb0c | |||
8ad34a7c76 | |||
e69cd236df | |||
751530f44e | |||
6ba4b25045 | |||
69fd5ff008 | |||
c410093711 | |||
53f462b406 | |||
ad33b43f99 | |||
a2c7c523aa | |||
de589419da |
50
Makefile.am
50
Makefile.am
@ -16,9 +16,11 @@ libisoburn_libisoburn_la_SOURCES = \
|
|||||||
libisoburn/isofs_wrap.c \
|
libisoburn/isofs_wrap.c \
|
||||||
libisoburn/libisoburn.h \
|
libisoburn/libisoburn.h \
|
||||||
version.h
|
version.h
|
||||||
|
|
||||||
libisoburn_libisoburn_la_LIBADD = \
|
libisoburn_libisoburn_la_LIBADD = \
|
||||||
-lisofs \
|
-lisofs \
|
||||||
-lburn
|
-lburn
|
||||||
|
|
||||||
libinclude_HEADERS = \
|
libinclude_HEADERS = \
|
||||||
libisoburn/libisoburn.h
|
libisoburn/libisoburn.h
|
||||||
|
|
||||||
@ -30,6 +32,19 @@ libinclude_HEADERS = \
|
|||||||
bin_PROGRAMS = \
|
bin_PROGRAMS = \
|
||||||
xorriso/xorriso
|
xorriso/xorriso
|
||||||
|
|
||||||
|
# This looks quite ugly with make install: xorriso.c is compiled twice again
|
||||||
|
#
|
||||||
|
# Trying to create a build timestamp file
|
||||||
|
#
|
||||||
|
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||||
|
#
|
||||||
|
# phony targets get rebuilt every time
|
||||||
|
#
|
||||||
|
# .PHONY: xorriso/xorriso_buildstamp.h
|
||||||
|
# xorriso/xorriso_buildstamp.h:
|
||||||
|
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
# cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
|
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
|
||||||
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
|
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
|
||||||
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
|
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
|
||||||
@ -39,7 +54,32 @@ xorriso_xorriso_SOURCES = \
|
|||||||
xorriso/xorriso.c \
|
xorriso/xorriso.c \
|
||||||
xorriso/xorrisoburn.h \
|
xorriso/xorrisoburn.h \
|
||||||
xorriso/xorrisoburn.c \
|
xorriso/xorrisoburn.c \
|
||||||
xorriso/xorriso_timestamp.h
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
|
||||||
|
# Install symbolic links to the xorriso binary
|
||||||
|
#
|
||||||
|
install-exec-hook:
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||||
|
|
||||||
|
|
||||||
|
# Alternative to the disabled .PHONY above.
|
||||||
|
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||||
|
#
|
||||||
|
buildstamp:
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# For now make buildstamped has to be performed explicitely.
|
||||||
|
buildstamped: buildstamp
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Build test applications
|
## Build test applications
|
||||||
@ -55,13 +95,6 @@ test_compare_file_CFLAGS =
|
|||||||
test_compare_file_LDADD =
|
test_compare_file_LDADD =
|
||||||
test_compare_file_SOURCES = test/compare_file.c
|
test_compare_file_SOURCES = test/compare_file.c
|
||||||
|
|
||||||
# ts A80110 - A80210 : we need as minimal demo something better than test.c
|
|
||||||
# test/test
|
|
||||||
|
|
||||||
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
|
|
||||||
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
|
|
||||||
# test_test_SOURCES = test/test.c
|
|
||||||
|
|
||||||
|
|
||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
@ -126,6 +159,7 @@ EXTRA_DIST = \
|
|||||||
COPYING \
|
COPYING \
|
||||||
INSTALL \
|
INSTALL \
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
|
xorriso/xorriso_buildstamp_none.h \
|
||||||
xorriso/README \
|
xorriso/README \
|
||||||
$(man_MANS)
|
$(man_MANS)
|
||||||
|
|
||||||
|
28
README
28
README
@ -4,6 +4,7 @@
|
|||||||
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
|
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
and Thomas Schmitt <scdbackup@gmx.net>
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org.
|
Integrated sub project of libburnia-project.org.
|
||||||
|
http://files.libburnia-project.org/releases/libisoburn-0.2.4.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
||||||
Provided under GPL version 2.
|
Provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@ -25,18 +26,18 @@ By using this software you agree to the disclaimer at the end of this text:
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.5 :
|
Dynamic library and compile time header requirements for libisoburn-0.2.4 :
|
||||||
- libburn.so.4 , version libburn-0.4.4 or higher
|
- libburn.so.4 , version libburn-0.5.2 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.4 or higher
|
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
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
|
headers seen at compile time. So compile in the oldest possible installation
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
setup unless you have reason to enforce a newer bug fix level.
|
||||||
|
|
||||||
Obtain libisoburn-0.1.5.tar.gz, take it to a directory of your choice
|
Obtain libisoburn-0.2.4.pl00.tar.gz, take it to a directory of your choice
|
||||||
and do:
|
and do:
|
||||||
|
|
||||||
tar xzf libisoburn-0.1.5.tar.gz
|
tar xzf libisoburn-0.2.4.pl00.tar.gz
|
||||||
cd libisoburn-0.1.5
|
cd libisoburn-0.2.4
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -58,14 +59,19 @@ as well as
|
|||||||
|
|
||||||
libisoburn includes a command line and dialog application named xorriso,
|
libisoburn includes a command line and dialog application named xorriso,
|
||||||
which offers a substantial part of libisoburn features to shell scripts and
|
which offers a substantial part of libisoburn features to shell scripts and
|
||||||
users. Its file xorriso/README describes a standlone tarball as first
|
users. Its file xorriso/README describes a standalone tarball as first
|
||||||
preference for xorriso installation.
|
preference for statically linked xorriso installation.
|
||||||
The installation described above produces a dynamically linked xorriso binary
|
The libisoburn installation described above produces a dynamically linked
|
||||||
as described in chapter "libisoburn" at the end of that text.
|
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
||||||
|
|
||||||
After installation documentation is available via
|
After installation documentation is available via
|
||||||
man xorriso
|
man xorriso
|
||||||
|
|
||||||
|
Several alias links point to the xorriso binary:
|
||||||
|
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||||
|
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||||
|
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||||
|
|
||||||
|
|
||||||
Drives and Disk File Objects
|
Drives and Disk File Objects
|
||||||
|
|
||||||
@ -103,7 +109,7 @@ on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
|
|||||||
This program is not installed systemwide but stays in the installation
|
This program is not installed systemwide but stays in the installation
|
||||||
directory of the xorriso tarball as test/compare_file . Usually it is
|
directory of the xorriso tarball as test/compare_file . Usually it is
|
||||||
run as -exec payload of a find command. It demands at least three arguments:
|
run as -exec payload of a find command. It demands at least three arguments:
|
||||||
The path of the first file to compare, the prefix1 to be cut off from path
|
The path of the file to compare, the prefix1 to be cut off from path
|
||||||
and the prefix2 which gets prepended afterwards to obtain the path of the
|
and the prefix2 which gets prepended afterwards to obtain the path of the
|
||||||
second file to compare.
|
second file to compare.
|
||||||
As further argument there can be -no_ctime which suppresses the comparison
|
As further argument there can be -no_ctime which suppresses the comparison
|
||||||
|
27
configure.ac
27
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libisoburn], [0.1.5], [http://libburnia-project.org])
|
AC_INIT([libisoburn], [0.2.4], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -13,15 +13,15 @@ dnl /ISOBURN_.*_VERSION
|
|||||||
dnl /LT_.*
|
dnl /LT_.*
|
||||||
dnl /LIB.*_REQUIRED
|
dnl /LIB.*_REQUIRED
|
||||||
|
|
||||||
dnl The API version codes are now defined in libisoburn/libisoburn.h
|
dnl The API version codes are defined in libisoburn/libisoburn.h
|
||||||
dnl #define isoburn_header_version_*
|
dnl #define isoburn_header_version_*
|
||||||
dnl configure.ac only rules the libtool revision numbering about
|
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 LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
||||||
dnl
|
dnl
|
||||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||||
ISOBURN_MAJOR_VERSION=0
|
ISOBURN_MAJOR_VERSION=0
|
||||||
ISOBURN_MINOR_VERSION=1
|
ISOBURN_MINOR_VERSION=2
|
||||||
ISOBURN_MICRO_VERSION=5
|
ISOBURN_MICRO_VERSION=4
|
||||||
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
||||||
@ -33,15 +33,16 @@ dnl Libtool versioning
|
|||||||
dnl Generate libisoburn.so.1.x.y
|
dnl Generate libisoburn.so.1.x.y
|
||||||
dnl SONAME will become LT_CURRENT - LT_AGE
|
dnl SONAME will become LT_CURRENT - LT_AGE
|
||||||
dnl
|
dnl
|
||||||
dnl ts A80512
|
dnl ts A80824
|
||||||
dnl ### This was the release version 0.1.4 = libisoburn.so.1.3.0
|
dnl This is the release version 0.2.4 = libisoburn.so.1.13.0
|
||||||
dnl This is the development version after stable release libisoburn.so.1.3.0
|
dnl ### This is the development version after above stable release
|
||||||
dnl LT_CURRENT++, LT_AGE++ have happened happened meanwhile.
|
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
||||||
|
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||||
dnl
|
dnl
|
||||||
dnl SONAME = 5 - 4 = 1 . Library name = libburn.so.1.4.0
|
dnl SONAME = 14 - 13 = 1 . Library name = libisoburn.so.1.13.0
|
||||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||||
LT_CURRENT=5
|
LT_CURRENT=14
|
||||||
LT_AGE=4
|
LT_AGE=13
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -99,8 +100,8 @@ AC_CHECK_HEADER(libburn/libburn.h)
|
|||||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||||
|
|
||||||
dnl Check for proper library versions
|
dnl Check for proper library versions
|
||||||
LIBBURN_REQUIRED=0.4.7
|
LIBBURN_REQUIRED=0.5.2
|
||||||
LIBISOFS_REQUIRED=0.6.4
|
LIBISOFS_REQUIRED=0.6.6
|
||||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
||||||
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef Xorriso_standalonE
|
#ifndef Xorriso_standalonE
|
||||||
@ -38,9 +39,6 @@
|
|||||||
|
|
||||||
#endif /* Xorriso_standalonE */
|
#endif /* Xorriso_standalonE */
|
||||||
|
|
||||||
/* <<< remove macro and alternative outdated code */
|
|
||||||
#define Libisoburn_on__libburn_after_0_4_2 yes
|
|
||||||
|
|
||||||
|
|
||||||
#include "libisoburn.h"
|
#include "libisoburn.h"
|
||||||
#include "isoburn.h"
|
#include "isoburn.h"
|
||||||
@ -49,6 +47,16 @@
|
|||||||
/* The global list of isoburn objects. Usually there is only one. */
|
/* The global list of isoburn objects. Usually there is only one. */
|
||||||
extern struct isoburn *isoburn_list_start; /* in isoburn.c */
|
extern struct isoburn *isoburn_list_start; /* in isoburn.c */
|
||||||
|
|
||||||
|
/* Default values for application provided msgs_submit methods.
|
||||||
|
To be attached to newly aquired drives.
|
||||||
|
Storage location is isoburn.c
|
||||||
|
*/
|
||||||
|
extern int (*libisoburn_default_msgs_submit)
|
||||||
|
(void *handle, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag);
|
||||||
|
extern void *libisoburn_default_msgs_submit_handle;
|
||||||
|
extern int libisoburn_default_msgs_submit_flag;
|
||||||
|
|
||||||
|
|
||||||
int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
@ -219,6 +227,18 @@ int isoburn_libburn_req(int *major, int *minor, int *micro)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
|
||||||
|
char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag),
|
||||||
|
void *submit_handle, int submit_flag, int flag)
|
||||||
|
{
|
||||||
|
libisoburn_default_msgs_submit= msgs_submit;
|
||||||
|
libisoburn_default_msgs_submit_handle= submit_handle;
|
||||||
|
libisoburn_default_msgs_submit_flag= submit_flag;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
|
int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
|
||||||
{
|
{
|
||||||
int profile, ret= 0, format_status, num_formats;
|
int profile, ret= 0, format_status, num_formats;
|
||||||
@ -265,6 +285,9 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
(*o)->drive= d;
|
(*o)->drive= d;
|
||||||
|
(*o)->msgs_submit= libisoburn_default_msgs_submit;
|
||||||
|
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
|
||||||
|
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
|
||||||
|
|
||||||
#ifdef Hardcoded_cd_rW
|
#ifdef Hardcoded_cd_rW
|
||||||
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
||||||
@ -357,15 +380,10 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
|||||||
int ret, conv_ret, drive_grabbed= 0;
|
int ret, conv_ret, drive_grabbed= 0;
|
||||||
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
||||||
struct isoburn *o= NULL;
|
struct isoburn *o= NULL;
|
||||||
char msg[BURN_MSGS_MESSAGE_LEN+4096];
|
|
||||||
|
|
||||||
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
||||||
if(conv_ret<=0) {
|
if(conv_ret<=0)
|
||||||
sprintf(msg, "Unsuitable drive address: '%s'\n",adr);
|
strcpy(libburn_drive_adr, adr);
|
||||||
msg[BURN_MSGS_MESSAGE_LEN-1]= 0;
|
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
|
|
||||||
ret= 0; goto ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -435,8 +453,8 @@ int isoburn_find_emulator(struct isoburn **pt,
|
|||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(0);
|
return(0);
|
||||||
if((*pt)->emulation_mode==-1) {
|
if((*pt)->emulation_mode==-1) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(*pt, 0x00060000,
|
||||||
"Unsuitable drive and media state", 0, "FAILURE", NULL);
|
"Unsuitable drive and media state", 0, "FAILURE", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
if((*pt)->emulation_mode==0)
|
if((*pt)->emulation_mode==0)
|
||||||
@ -554,8 +572,8 @@ int isoburn_disc_get_msc1(struct burn_drive *d, int *start_lba)
|
|||||||
|
|
||||||
if(isoburn_disc_get_status(d)!=BURN_DISC_APPENDABLE &&
|
if(isoburn_disc_get_status(d)!=BURN_DISC_APPENDABLE &&
|
||||||
isoburn_disc_get_status(d)!=BURN_DISC_FULL) {
|
isoburn_disc_get_status(d)!=BURN_DISC_FULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Media contains no recognizable data", 0, "SORRY",NULL);
|
"Media contains no recognizable data", 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
@ -602,6 +620,23 @@ int isoburn_disc_track_lba_nwa(struct burn_drive *d,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_get_msc2(struct isoburn *o,
|
||||||
|
struct burn_write_opts *opts, int *msc2, int flag)
|
||||||
|
{
|
||||||
|
int ret, lba, nwa;
|
||||||
|
|
||||||
|
if(o->fabricated_msc2>=0)
|
||||||
|
*msc2= o->fabricated_msc2;
|
||||||
|
else {
|
||||||
|
ret= isoburn_disc_track_lba_nwa(o->drive, opts, 0, &lba, &nwa);
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
*msc2= nwa;
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -641,10 +676,10 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
*/
|
*/
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"DVD-RW insufficiently formatted. (Intermediate State, size unknown)");
|
"DVD-RW insufficiently formatted. (Intermediate State, size unknown)");
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"It might help to first deformat it and then format it again");
|
"It might help to first deformat it and then format it again");
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "HINT", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "HINT", 0);
|
||||||
burn_drive_cancel(drive); /* mark run as failure */
|
burn_drive_cancel(drive); /* mark run as failure */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -658,7 +693,7 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
write_type= burn_write_opts_auto_write_type(opts, disc, reasons, 0);
|
write_type= burn_write_opts_auto_write_type(opts, disc, reasons, 0);
|
||||||
if (write_type == BURN_WRITE_NONE) {
|
if (write_type == BURN_WRITE_NONE) {
|
||||||
sprintf(msg, "Failed to find a suitable write mode:\n%s", reasons);
|
sprintf(msg, "Failed to find a suitable write mode:\n%s", reasons);
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||||
if(o!=NULL)
|
if(o!=NULL)
|
||||||
o->wrote_well= 0;
|
o->wrote_well= 0;
|
||||||
/* To cause a negative reply with burn_drive_wrote_well() */
|
/* To cause a negative reply with burn_drive_wrote_well() */
|
||||||
@ -670,7 +705,7 @@ void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
sprintf(msg, "Write_type = %s\n",
|
sprintf(msg, "Write_type = %s\n",
|
||||||
(write_type == BURN_WRITE_SAO ? "SAO" :
|
(write_type == BURN_WRITE_SAO ? "SAO" :
|
||||||
(write_type == BURN_WRITE_TAO ? "TAO" : reasons)));
|
(write_type == BURN_WRITE_TAO ? "TAO" : reasons)));
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
|
||||||
#ifdef Hardcoded_cd_rW
|
#ifdef Hardcoded_cd_rW
|
||||||
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
||||||
@ -748,9 +783,9 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag)
|
|||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
if(!caps->start_adr) {
|
if(!caps->start_adr) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
"Cannot set start byte address with this type of media",
|
"Cannot set start byte address with this type of media",
|
||||||
0, "FAILURE", NULL);
|
0, "FAILURE", 0);
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
o->min_start_byte= value;
|
o->min_start_byte= value;
|
||||||
@ -848,34 +883,6 @@ int isoburn_get_fifo_status(struct burn_drive *d, int *size, int *free_bytes,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* >>> todo: throw out the copies of libdax_msgs entrails */
|
|
||||||
|
|
||||||
#ifndef Libisoburn_on__libburn_after_0_4_2
|
|
||||||
|
|
||||||
/* <<< to be replaced by libburn-0.4.3 API call burn_sev_to_text().
|
|
||||||
This is a copy of libdax_msgs__sev_to_text() which is not exposed
|
|
||||||
by the API of of libburn-0.4.2 . As soon as xorriso gets based on
|
|
||||||
libburn-0.4.4 this redundancy is to be removed.
|
|
||||||
It is safe, nevertheless, because the severity codes are eternal.
|
|
||||||
*/
|
|
||||||
#define LIBDAX_MSGS_SEV_ALL 0x00000000
|
|
||||||
#define LIBDAX_MSGS_SEV_ERRFILE 0x08000000
|
|
||||||
#define LIBDAX_MSGS_SEV_DEBUG 0x10000000
|
|
||||||
#define LIBDAX_MSGS_SEV_UPDATE 0x20000000
|
|
||||||
#define LIBDAX_MSGS_SEV_NOTE 0x30000000
|
|
||||||
#define LIBDAX_MSGS_SEV_HINT 0x40000000
|
|
||||||
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
|
|
||||||
#define LIBDAX_MSGS_SEV_SORRY 0x60000000
|
|
||||||
#define LIBDAX_MSGS_SEV_MISHAP 0x64000000
|
|
||||||
#define LIBDAX_MSGS_SEV_FAILURE 0x68000000
|
|
||||||
#define LIBDAX_MSGS_SEV_FATAL 0x70000000
|
|
||||||
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
|
|
||||||
#define LIBDAX_MSGS_SEV_NEVER 0x7fffffff
|
|
||||||
|
|
||||||
#endif /* ! Libisoburn_on__libburn_after_0_4_2 */
|
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= -reserved-
|
/* @param flag bit0= -reserved-
|
||||||
bit1= this is a libburn severity
|
bit1= this is a libburn severity
|
||||||
*/
|
*/
|
||||||
@ -884,53 +891,11 @@ int isoburn__sev_to_text(int severity, char **severity_name,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret= iso_sev_to_text(severity, severity_name);
|
ret= iso_sev_to_text(severity, severity_name);
|
||||||
if(ret>0)
|
if(ret>0)
|
||||||
return(ret);
|
return(ret);
|
||||||
#ifdef Libisoburn_on__libburn_after_0_4_2
|
ret= burn_sev_to_text(severity, severity_name, 0);
|
||||||
ret= burn_sev_to_text(severity, severity_name, 0);
|
return(ret);
|
||||||
return(ret);
|
|
||||||
#else
|
|
||||||
|
|
||||||
if(flag&1) {
|
|
||||||
*severity_name= "NEVER\nABORT\nFATAL\nFAILURE\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nERRFILE\nALL";
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
*severity_name= "";
|
|
||||||
if(severity>=LIBDAX_MSGS_SEV_NEVER)
|
|
||||||
*severity_name= "NEVER";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_ABORT)
|
|
||||||
*severity_name= "ABORT";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
|
|
||||||
*severity_name= "FATAL";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_FAILURE)
|
|
||||||
*severity_name= "FAILURE";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_MISHAP)
|
|
||||||
*severity_name= "MISHAP";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
|
|
||||||
*severity_name= "SORRY";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_WARNING)
|
|
||||||
*severity_name= "WARNING";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_HINT)
|
|
||||||
*severity_name= "HINT";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_NOTE)
|
|
||||||
*severity_name= "NOTE";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_UPDATE)
|
|
||||||
*severity_name= "UPDATE";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_DEBUG)
|
|
||||||
*severity_name= "DEBUG";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_ERRFILE)
|
|
||||||
*severity_name= "ERRFILE";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_ALL)
|
|
||||||
*severity_name= "ALL";
|
|
||||||
else {
|
|
||||||
*severity_name= "";
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
return(1);
|
|
||||||
|
|
||||||
#endif /* ! Libisoburn_on__libburn_after_0_4_2 */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -938,21 +903,10 @@ int isoburn__text_to_sev(char *severity_name, int *severity_number, int flag)
|
|||||||
{
|
{
|
||||||
int ret= 1;
|
int ret= 1;
|
||||||
|
|
||||||
ret= iso_text_to_sev(severity_name, severity_number);
|
ret= iso_text_to_sev(severity_name, severity_number);
|
||||||
if(ret>0)
|
if(ret>0)
|
||||||
return(ret);
|
return(ret);
|
||||||
|
ret= burn_text_to_sev(severity_name, severity_number, 0);
|
||||||
#ifndef Libisoburn_on__libburn_after_0_4_2
|
|
||||||
if(severity_name[0]==0)
|
|
||||||
*severity_number= 0;
|
|
||||||
else if(strcmp(severity_name, "MISHAP")==0)
|
|
||||||
*severity_number= LIBDAX_MSGS_SEV_MISHAP;
|
|
||||||
else if(strcmp(severity_name, "ERRFILE")==0)
|
|
||||||
*severity_number= LIBDAX_MSGS_SEV_ERRFILE;
|
|
||||||
else
|
|
||||||
#endif /* ! Libisoburn_on__libburn_after_0_4_2 */
|
|
||||||
|
|
||||||
ret= burn_text_to_sev(severity_name, severity_number, 0);
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -983,7 +937,8 @@ int isoburn_report_iso_error(int iso_error_code, char msg_text[], int os_errno,
|
|||||||
|
|
||||||
/* @param flag bit0-7: info return mode
|
/* @param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
|
2= do not touch info (caller will copy 64 kB header to it)
|
||||||
bit14= -reserved -
|
bit14= -reserved -
|
||||||
bit15= -reserved-
|
bit15= -reserved-
|
||||||
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
||||||
@ -1012,10 +967,12 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
|||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
info[i]= 0;
|
info[i]= 0;
|
||||||
|
} else if(info_mode==2) {
|
||||||
|
;
|
||||||
} else {
|
} else {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Program error: Unknown info mode with isoburn_read_iso_head()",
|
"Program error: Unknown info mode with isoburn_read_iso_head()",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
@ -1025,7 +982,9 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
|||||||
/* API
|
/* API
|
||||||
@param flag bit0-7: info return mode
|
@param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
|
2= copy 64 kB header to info (needs 65536 bytes)
|
||||||
|
bit13= do not read head from media but use first 64 kB from info
|
||||||
bit14= check both half buffers (not only second)
|
bit14= check both half buffers (not only second)
|
||||||
return 2 if found in first block
|
return 2 if found in first block
|
||||||
bit15= return-1 on read error
|
bit15= return-1 on read error
|
||||||
@ -1036,29 +995,59 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
|||||||
int *image_blocks, char *info, int flag)
|
int *image_blocks, char *info, int flag)
|
||||||
{
|
{
|
||||||
unsigned char buffer[64*1024];
|
unsigned char buffer[64*1024];
|
||||||
int ret;
|
int ret, info_mode;
|
||||||
off_t data_count;
|
off_t data_count;
|
||||||
|
|
||||||
|
info_mode= flag&255;
|
||||||
*image_blocks= 0;
|
*image_blocks= 0;
|
||||||
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
if(flag&(1<<13)) {
|
||||||
|
memcpy(buffer, info, 64*1024);
|
||||||
|
} else {
|
||||||
|
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
||||||
(off_t) 64*1024, &data_count, 2); /* no error messages */
|
(off_t) 64*1024, &data_count, 2); /* no error messages */
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(-1*!!(flag&(1<<15)));
|
return(-1*!!(flag&(1<<15)));
|
||||||
|
if(info_mode==2)
|
||||||
|
memcpy(info, buffer, 64*1024);
|
||||||
|
}
|
||||||
|
|
||||||
if(flag&(1<<14)) {
|
if(flag&(1<<14)) {
|
||||||
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info,
|
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info, info_mode);
|
||||||
flag&255);
|
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
return(ret);
|
return(ret);
|
||||||
if(ret>0)
|
if(ret>0)
|
||||||
return(2);
|
return(2);
|
||||||
}
|
}
|
||||||
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
|
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
|
||||||
flag&255);
|
info_mode);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
|
||||||
|
int track_blocks, int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct isoburn_toc_entry *item;
|
||||||
|
|
||||||
|
ret= isoburn_toc_entry_new(&item, o->toc, 0);
|
||||||
|
if(ret<=0) {
|
||||||
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
|
"Not enough memory for emulated TOC entry object",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
if(o->toc==NULL)
|
||||||
|
o->toc= item;
|
||||||
|
(*session_count)++;
|
||||||
|
item->session= *session_count;
|
||||||
|
item->track_no= *session_count;
|
||||||
|
item->start_lba= lba;
|
||||||
|
item->track_blocks= track_blocks;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= allow unemulated media
|
/* @param flag bit0= allow unemulated media
|
||||||
bit1= free scanning without enclosing LBA-0-header
|
bit1= free scanning without enclosing LBA-0-header
|
||||||
@return -1 severe error, 0= no neat header chain, 1= credible chain read
|
@return -1 severe error, 0= no neat header chain, 1= credible chain read
|
||||||
@ -1066,10 +1055,11 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
|||||||
int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||||
{
|
{
|
||||||
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
|
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
|
||||||
int scan_start= 0;
|
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
|
||||||
|
int with_enclosure= 0;
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
struct isoburn_toc_entry *item;
|
char msg[160], size_text[80], *sev;
|
||||||
char msg[160];
|
time_t start_time, last_pacifier, now;
|
||||||
|
|
||||||
/* is the media emulated multi-session ? */
|
/* is the media emulated multi-session ? */
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
@ -1080,17 +1070,45 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
if(o->emulation_mode<=0 && !(flag&1))
|
if(o->emulation_mode<=0 && !(flag&1))
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
|
start_time= last_pacifier= time(NULL);
|
||||||
lba= 0;
|
lba= 0;
|
||||||
if(!(flag&2)) {
|
if(!(flag&2)) {
|
||||||
ret= isoburn_read_iso_head(d, lba, &image_size, NULL, 0);
|
ret= isoburn_read_iso_head(d, lba, &image_size, NULL, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
{ret= 0; goto failure;}
|
{ret= 0; goto failure;}
|
||||||
lba= Libisoburn_overwriteable_starT;
|
lba= Libisoburn_overwriteable_starT;
|
||||||
|
with_enclosure= 1;
|
||||||
}
|
}
|
||||||
while(lba<image_size || (flag&2)) {
|
while(lba<image_size || (flag&2)) {
|
||||||
|
now= time(NULL);
|
||||||
|
if(now - last_pacifier >= 5) {
|
||||||
|
last_pacifier= now;
|
||||||
|
if(scan_count>=10*512)
|
||||||
|
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
|
||||||
|
else
|
||||||
|
sprintf(size_text, "%.f kB", 2 * (double) scan_count);
|
||||||
|
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
|
||||||
|
session_count, size_text, (double) (now - start_time));
|
||||||
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
|
||||||
|
}
|
||||||
read_flag= 0;
|
read_flag= 0;
|
||||||
if(flag&2)
|
if(flag&2)
|
||||||
read_flag= (1<<15)|((session_count>0)<<14);
|
read_flag|= (1<<15)|((session_count>0)<<14);
|
||||||
|
else {
|
||||||
|
|
||||||
|
/* growisofs aligns to 16 rather than 32. Overwriteable TOC emulation
|
||||||
|
relies on not accidentially seeing inter-session trash data.
|
||||||
|
But one can safely access 16 blocks earlier because a xorriso header
|
||||||
|
would have overwritten with the unused 16 blocks at its start.
|
||||||
|
If libisoburn alignment would increase, then this would not be
|
||||||
|
possible any more.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(probe_minus_16)
|
||||||
|
read_flag|= (1<<14);
|
||||||
|
probe_minus_16= 0;
|
||||||
|
}
|
||||||
|
|
||||||
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag);
|
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
if(session_count>0) {
|
if(session_count>0) {
|
||||||
@ -1098,6 +1116,7 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
if(ret==0) {
|
if(ret==0) {
|
||||||
/* try at next 64 k block (check both 32 k halves) */
|
/* try at next 64 k block (check both 32 k halves) */
|
||||||
lba+= 32;
|
lba+= 32;
|
||||||
|
scan_count+= 32;
|
||||||
if(lba-scan_start <= Libisoburn_toc_scan_max_gaP)
|
if(lba-scan_start <= Libisoburn_toc_scan_max_gaP)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1106,38 +1125,56 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"Chain of ISO session headers broken at #%d, LBA %ds",
|
"Chain of ISO session headers broken at #%d, LBA %ds",
|
||||||
session_count+1, lba);
|
session_count+1, lba);
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "WARNING", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
||||||
|
|
||||||
|
if(with_enclosure) {
|
||||||
|
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
|
||||||
|
if(ret<=0)
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
break; /* do not return failure */
|
||||||
|
|
||||||
}
|
}
|
||||||
{ret= 0; goto failure;}
|
{ret= 0; goto failure;}
|
||||||
}
|
}
|
||||||
if(ret==2) /* ISO header was found in first half block */
|
if(ret==2) /* ISO header was found in first half block */
|
||||||
lba-= 16;
|
lba-= 16;
|
||||||
ret= isoburn_toc_entry_new(&item, o->toc, 0);
|
|
||||||
if(ret<=0) {
|
|
||||||
burn_msgs_submit(0x00060000,
|
|
||||||
"Not enough memory for emulated TOC entry object",
|
|
||||||
0, "FATAL", NULL);
|
|
||||||
ret= -1; goto failure;
|
|
||||||
}
|
|
||||||
if(o->toc==NULL)
|
|
||||||
o->toc= item;
|
|
||||||
session_count++;
|
|
||||||
item->session= session_count;
|
|
||||||
item->track_no= session_count;
|
|
||||||
item->start_lba= lba;
|
|
||||||
item->track_blocks= track_blocks;
|
|
||||||
|
|
||||||
|
ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, 0);
|
||||||
|
if(ret<=0)
|
||||||
|
goto failure;
|
||||||
lba+= track_blocks;
|
lba+= track_blocks;
|
||||||
|
scan_count+= 32;
|
||||||
|
|
||||||
|
/* growisofs aligns to 16 rather than 32 */
|
||||||
|
growisofs_nwa= lba;
|
||||||
|
if(growisofs_nwa % 16)
|
||||||
|
growisofs_nwa+= 16 - (growisofs_nwa % 16);
|
||||||
if(lba % Libisoburn_nwa_alignemenT)
|
if(lba % Libisoburn_nwa_alignemenT)
|
||||||
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
|
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
|
||||||
scan_start= lba;
|
scan_start= lba;
|
||||||
|
if(lba - growisofs_nwa == 16)
|
||||||
|
probe_minus_16= 1;
|
||||||
}
|
}
|
||||||
sprintf(msg,
|
if(last_pacifier != start_time)
|
||||||
"Chain of ISO session headers yielded %d sessions", session_count);
|
sev= "UPDATE";
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
else
|
||||||
|
sev= "DEBUG";
|
||||||
|
now= time(NULL);
|
||||||
|
if(scan_count>=10*512)
|
||||||
|
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
|
||||||
|
else
|
||||||
|
sprintf(size_text, "%.f kB", 2 * (double) scan_count);
|
||||||
|
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
|
||||||
|
session_count, size_text, (double) (now - start_time));
|
||||||
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, sev, 0);
|
||||||
return(1);
|
return(1);
|
||||||
failure:;
|
failure:;
|
||||||
isoburn_toc_entry_destroy(&(o->toc), 1);
|
isoburn_toc_entry_destroy(&(o->toc), 1);
|
||||||
|
if(with_enclosure && o->emulation_mode == 1) {
|
||||||
|
session_count= 0;
|
||||||
|
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
|
||||||
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1282,15 +1319,31 @@ failure:;
|
|||||||
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
|
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
|
||||||
{
|
{
|
||||||
struct isoburn_toc_entry *t;
|
struct isoburn_toc_entry *t;
|
||||||
int ret= 0;
|
int ret= 0, num_sessions, num_tracks;
|
||||||
|
struct burn_session **sessions;
|
||||||
|
struct burn_track **tracks;
|
||||||
|
struct burn_toc_entry entry;
|
||||||
|
|
||||||
if(disc==NULL)
|
if(disc==NULL)
|
||||||
return(0);
|
return(0);
|
||||||
if(disc->toc!=NULL) {
|
if(disc->toc!=NULL) {
|
||||||
for(t= disc->toc; t!=NULL; t= t->next)
|
for(t= disc->toc; t!=NULL; t= t->next)
|
||||||
ret= t->start_lba + t->track_blocks;
|
ret= t->start_lba + t->track_blocks;
|
||||||
} else if(disc->disc!=NULL)
|
} else if(disc->disc!=NULL) {
|
||||||
|
sessions= burn_disc_get_sessions(disc->disc, &num_sessions);
|
||||||
|
if(num_sessions > 0) {
|
||||||
|
tracks = burn_session_get_tracks(sessions[num_sessions - 1],
|
||||||
|
&num_tracks);
|
||||||
|
if(num_tracks > 0) {
|
||||||
|
burn_track_get_entry(tracks[num_tracks - 1], &entry);
|
||||||
|
if(entry.extensions_valid & 1)
|
||||||
|
ret= entry.start_lba + entry.track_blocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
ret= burn_disc_get_sectors(disc->disc);
|
ret= burn_disc_get_sectors(disc->disc);
|
||||||
|
*/
|
||||||
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1415,6 +1468,27 @@ int isoburn_get_track_lba(struct isoburn_toc_track *track, int *lba, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_drive_set_msgs_submit(struct burn_drive *d,
|
||||||
|
int (*msgs_submit)(void *handle, int error_code,
|
||||||
|
char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag),
|
||||||
|
void *submit_handle, int submit_flag, int flag)
|
||||||
|
{
|
||||||
|
struct isoburn *o;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
|
if(ret<0 || o==NULL)
|
||||||
|
return(-1);
|
||||||
|
o->msgs_submit= msgs_submit;
|
||||||
|
o->msgs_submit_handle= submit_handle;
|
||||||
|
o->msgs_submit_flag= submit_flag;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= with adr_mode 3: adr_value might be 16 blocks too high
|
||||||
|
*/
|
||||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||||
int flag)
|
int flag)
|
||||||
{
|
{
|
||||||
@ -1443,7 +1517,7 @@ not_found:;
|
|||||||
goto unknown_mode;
|
goto unknown_mode;
|
||||||
sprintf(msg, "Failed to find %s %s", mode_names[adr_mode],
|
sprintf(msg, "Failed to find %s %s", mode_names[adr_mode],
|
||||||
strlen(adr_value)<=80 ? adr_value : "-oversized-string-");
|
strlen(adr_value)<=80 ? adr_value : "-oversized-string-");
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0);
|
||||||
ret= 0; goto ex;
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
|
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
|
||||||
@ -1486,7 +1560,12 @@ not_found:;
|
|||||||
|
|
||||||
} else if(adr_mode==3) {
|
} else if(adr_mode==3) {
|
||||||
o->fabricated_msc1= adr_num;
|
o->fabricated_msc1= adr_num;
|
||||||
|
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));
|
||||||
|
if(ret==2)
|
||||||
|
o->fabricated_msc1-= 16;
|
||||||
|
}
|
||||||
} else if(adr_mode==4) {
|
} else if(adr_mode==4) {
|
||||||
/* search for volume id that is equal to adr_value */
|
/* search for volume id that is equal to adr_value */
|
||||||
best_lba= -1;
|
best_lba= -1;
|
||||||
@ -1511,7 +1590,7 @@ not_found:;
|
|||||||
} else {
|
} else {
|
||||||
unknown_mode:;
|
unknown_mode:;
|
||||||
sprintf(msg, "Program error: Unknown msc1 address mode %d", adr_mode);
|
sprintf(msg, "Program error: Unknown msc1 address mode %d", adr_mode);
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "FATAL", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FATAL", 0);
|
||||||
ret= 0; goto ex;
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
ret= 1;
|
ret= 1;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
data source for libisoburn.
|
data source for libisoburn.
|
||||||
|
|
||||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -27,24 +28,24 @@
|
|||||||
#include "isoburn.h"
|
#include "isoburn.h"
|
||||||
|
|
||||||
|
|
||||||
/* Powers of 2 only ! Less than 16 makes not much sense. */
|
/* Cached reading of image tree data */
|
||||||
|
/* Multi tile: 32 * 64 kB */
|
||||||
|
|
||||||
|
/* The size of a single tile.
|
||||||
|
Powers of 2 only ! Less than 16 makes not much sense.
|
||||||
|
*/
|
||||||
#define Libisoburn_tile_blockS 32
|
#define Libisoburn_tile_blockS 32
|
||||||
|
|
||||||
/* Undef to get to older single tile version
|
/* The number of tiles in the cache
|
||||||
*/
|
*/
|
||||||
#define Libisoburn_cache_tileS 32
|
#define Libisoburn_cache_tileS 32
|
||||||
|
|
||||||
|
|
||||||
/* Debugging only: This reports cache loads on stderr.
|
/* Debugging only: This reports cache loads on stderr.
|
||||||
#define Libisoburn_read_cache_reporT 1
|
#define Libisoburn_read_cache_reporT 1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* Cached reading of image tree data */
|
|
||||||
|
|
||||||
#ifdef Libisoburn_cache_tileS
|
|
||||||
|
|
||||||
/* Multi tile: 32 * 64 kB */
|
|
||||||
|
|
||||||
struct isoburn_cache_tile {
|
struct isoburn_cache_tile {
|
||||||
char cache_data[Libisoburn_tile_blockS * 2048];
|
char cache_data[Libisoburn_tile_blockS * 2048];
|
||||||
uint32_t cache_lba;
|
uint32_t cache_lba;
|
||||||
@ -84,6 +85,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
|
|
||||||
icd = (struct isoburn_cached_drive *) src->data;
|
icd = (struct isoburn_cached_drive *) src->data;
|
||||||
d = (struct burn_drive*) icd->drive;
|
d = (struct burn_drive*) icd->drive;
|
||||||
|
|
||||||
|
if(d == NULL) {
|
||||||
|
/* This would happen if libisoburn saw output data in the fifo and
|
||||||
|
performed early drive release and afterwards libisofs still tries
|
||||||
|
to read data.
|
||||||
|
That would constitute a bad conceptual problem in libisoburn.
|
||||||
|
*/
|
||||||
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
|
"Programming error: Drive released while libisofs still attempts to read",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return ISO_ASSERT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||||
|
|
||||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
||||||
@ -148,7 +162,7 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
if(ret >= 0)
|
if(ret >= 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,6 +202,19 @@ static void ds_free_data(IsoDataSource *src)
|
|||||||
src->data= NULL;
|
src->data= NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
|
||||||
|
{
|
||||||
|
struct isoburn_cached_drive *icd;
|
||||||
|
|
||||||
|
if(src==NULL)
|
||||||
|
return(0);
|
||||||
|
icd= (struct isoburn_cached_drive *) src->data;
|
||||||
|
icd->drive= NULL;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
IsoDataSource *ret;
|
IsoDataSource *ret;
|
||||||
@ -234,139 +261,3 @@ static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else /* Libisoburn_cache_tileS */
|
|
||||||
|
|
||||||
|
|
||||||
/* Single tile 128 kB */
|
|
||||||
|
|
||||||
|
|
||||||
struct isoburn_cached_drive {
|
|
||||||
struct burn_drive *drive;
|
|
||||||
|
|
||||||
char cache_data[Libisoburn_tile_blockS * 2048];
|
|
||||||
uint32_t cache_lba;
|
|
||||||
uint32_t last_error_lba;
|
|
||||||
uint32_t last_aligned_error_lba;
|
|
||||||
int cache_hits;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Debugging only: This reports cache loads on stderr.
|
|
||||||
#define Libisoburn_read_cache_reporT 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct burn_drive *d;
|
|
||||||
off_t count;
|
|
||||||
uint32_t aligned_lba;
|
|
||||||
char msg[80];
|
|
||||||
|
|
||||||
struct isoburn_cached_drive *icd;
|
|
||||||
|
|
||||||
if(src == NULL || buffer == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
icd = (struct isoburn_cached_drive *) src->data;
|
|
||||||
d = (struct burn_drive*) icd->drive;
|
|
||||||
|
|
||||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
|
||||||
if(aligned_lba == icd->cache_lba && icd->cache_lba != 0xffffffff) {
|
|
||||||
(icd->cache_hits)++;
|
|
||||||
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
|
|
||||||
count= 2048;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
icd->cache_lba= 0xffffffff; /* invalidate cache */
|
|
||||||
if(icd->last_aligned_error_lba == aligned_lba) {
|
|
||||||
ret = 0;
|
|
||||||
} else {
|
|
||||||
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
|
|
||||||
(char *) icd->cache_data,
|
|
||||||
Libisoburn_tile_blockS * 2048, &count, 0);
|
|
||||||
}
|
|
||||||
if (ret <= 0 ) {
|
|
||||||
icd->last_aligned_error_lba = aligned_lba;
|
|
||||||
|
|
||||||
/* Read-ahead failure ? Try to read 2048 directly. */
|
|
||||||
if(icd->last_error_lba == lba)
|
|
||||||
ret = 0;
|
|
||||||
else
|
|
||||||
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
|
||||||
2048, &count, 0);
|
|
||||||
if (ret > 0)
|
|
||||||
return 1;
|
|
||||||
icd->last_error_lba = lba;
|
|
||||||
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
|
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef Libisoburn_read_cache_reporT
|
|
||||||
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
|
|
||||||
icd->cache_hits, aligned_lba, (int) count);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
icd->cache_lba= aligned_lba;
|
|
||||||
icd->cache_hits= 1;
|
|
||||||
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
|
|
||||||
count= 2048;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
ds_open(IsoDataSource *src)
|
|
||||||
{
|
|
||||||
/* nothing to do, device is always grabbed */
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ds_close(IsoDataSource *src)
|
|
||||||
{
|
|
||||||
/* nothing to do, device is always grabbed */
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ds_free_data(IsoDataSource *src)
|
|
||||||
{
|
|
||||||
/* nothing to do */;
|
|
||||||
if(src->data != NULL)
|
|
||||||
free(src->data);
|
|
||||||
src->data= NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
IsoDataSource *
|
|
||||||
isoburn_data_source_new(struct burn_drive *d)
|
|
||||||
{
|
|
||||||
IsoDataSource *ret;
|
|
||||||
struct isoburn_cached_drive *icd= NULL;
|
|
||||||
|
|
||||||
if (d==NULL)
|
|
||||||
return NULL;
|
|
||||||
ret = malloc(sizeof(IsoDataSource));
|
|
||||||
icd = calloc(1,sizeof(struct isoburn_cached_drive));
|
|
||||||
if (ret == NULL || icd == NULL)
|
|
||||||
return NULL;
|
|
||||||
ret->refcount = 1;
|
|
||||||
ret->read_block = ds_read_block;
|
|
||||||
ret->open = ds_open;
|
|
||||||
ret->close = ds_close;
|
|
||||||
ret->free_data = ds_free_data;
|
|
||||||
ret->data = icd;
|
|
||||||
icd->drive = d;
|
|
||||||
icd->cache_lba = 0xffffffff;
|
|
||||||
icd->cache_hits = 0;
|
|
||||||
icd->last_error_lba = 0xffffffff;
|
|
||||||
icd->last_aligned_error_lba = 0xffffffff;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* ! Libisoburn_cache_tileS */
|
|
||||||
|
|
||||||
|
@ -37,10 +37,16 @@
|
|||||||
|
|
||||||
#include "isoburn.h"
|
#include "isoburn.h"
|
||||||
|
|
||||||
/* No more: version numbers out of configure.ac
|
|
||||||
major.minor.micro now comes from libisoburn.h
|
/* Default values for application provided msgs_submit methods.
|
||||||
#include "../version.h"
|
To be attached to newly aquired drives.
|
||||||
*/
|
*/
|
||||||
|
int (*libisoburn_default_msgs_submit)
|
||||||
|
(void *handle, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag)= NULL;
|
||||||
|
void *libisoburn_default_msgs_submit_handle= NULL;
|
||||||
|
int libisoburn_default_msgs_submit_flag= 0;
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------- isoburn_toc_entry ---------------------- */
|
/* ----------------------- isoburn_toc_entry ---------------------- */
|
||||||
|
|
||||||
@ -53,9 +59,9 @@ int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
|||||||
*objpt= o= (struct isoburn_toc_entry *)
|
*objpt= o= (struct isoburn_toc_entry *)
|
||||||
malloc(sizeof(struct isoburn_toc_entry));
|
malloc(sizeof(struct isoburn_toc_entry));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Cannot allocate memory for isoburn toc entry",
|
"Cannot allocate memory for isoburn toc entry",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
o->session= 0;
|
o->session= 0;
|
||||||
@ -104,15 +110,16 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|||||||
|
|
||||||
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
|
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Cannot allocate memory for isoburn control object",
|
"Cannot allocate memory for isoburn control object",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
o->drive= NULL;
|
o->drive= NULL;
|
||||||
o->emulation_mode= 0;
|
o->emulation_mode= 0;
|
||||||
o->fabricated_msc1= -1;
|
o->fabricated_msc1= -1;
|
||||||
|
o->fabricated_msc2= -1;
|
||||||
o->zero_nwa= Libisoburn_overwriteable_starT;
|
o->zero_nwa= Libisoburn_overwriteable_starT;
|
||||||
o->min_start_byte= o->zero_nwa * 2048;
|
o->min_start_byte= o->zero_nwa * 2048;
|
||||||
o->nwa= o->zero_nwa;
|
o->nwa= o->zero_nwa;
|
||||||
@ -124,8 +131,12 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|||||||
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
||||||
o->target_iso_head[i]= 0;
|
o->target_iso_head[i]= 0;
|
||||||
o->image= NULL;
|
o->image= NULL;
|
||||||
|
o->iso_data_source= NULL;
|
||||||
o->read_pacifier= NULL;
|
o->read_pacifier= NULL;
|
||||||
o->read_pacifier_handle= NULL;
|
o->read_pacifier_handle= NULL;
|
||||||
|
o->msgs_submit= NULL;
|
||||||
|
o->msgs_submit_handle= NULL;
|
||||||
|
o->msgs_submit_flag= 0;
|
||||||
o->prev= NULL;
|
o->prev= NULL;
|
||||||
o->next= NULL;
|
o->next= NULL;
|
||||||
ret= iso_image_new("ISOIMAGE", &o->image);
|
ret= iso_image_new("ISOIMAGE", &o->image);
|
||||||
@ -166,7 +177,8 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
|||||||
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
||||||
if(o->iso_source!=NULL)
|
if(o->iso_source!=NULL)
|
||||||
burn_source_free(o->iso_source);
|
burn_source_free(o->iso_source);
|
||||||
|
if(o->iso_data_source!=NULL)
|
||||||
|
iso_data_source_unref(o->iso_data_source);
|
||||||
free((char *) o);
|
free((char *) o);
|
||||||
*objpt= NULL;
|
*objpt= NULL;
|
||||||
return(1);
|
return(1);
|
||||||
@ -299,28 +311,80 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag)
|
||||||
|
{
|
||||||
|
int ret, use_drive_method= 0;
|
||||||
|
|
||||||
|
if(o!=NULL)
|
||||||
|
if(o->msgs_submit!=NULL)
|
||||||
|
use_drive_method= 1;
|
||||||
|
if(use_drive_method) {
|
||||||
|
ret= o->msgs_submit(o->msgs_submit_handle, error_code, msg_text, os_errno,
|
||||||
|
severity, o->msgs_submit_flag);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
if(libisoburn_default_msgs_submit != NULL) {
|
||||||
|
ret= libisoburn_default_msgs_submit(libisoburn_default_msgs_submit_handle,
|
||||||
|
error_code, msg_text, os_errno, severity,
|
||||||
|
libisoburn_default_msgs_submit_flag);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
/* Fallback: use message queue of libburn */
|
||||||
|
burn_msgs_submit(error_code, msg_text, os_errno, severity, NULL);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= modifying rather than growing
|
||||||
|
bit1= prepare for early release of input drive:
|
||||||
|
wait until input and then disable image data source
|
||||||
|
*/
|
||||||
static
|
static
|
||||||
int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||||
struct isoburn_imgen_opts *opts, int new_img)
|
struct burn_disc **disc,
|
||||||
|
struct isoburn_imgen_opts *opts, int flag)
|
||||||
{
|
{
|
||||||
struct burn_source *wsrc;
|
struct burn_source *wsrc;
|
||||||
struct burn_session *session;
|
struct burn_session *session;
|
||||||
struct burn_track *track;
|
struct burn_track *track;
|
||||||
struct isoburn *o;
|
struct isoburn *in_o, *out_o;
|
||||||
IsoWriteOpts *wopts= NULL;
|
IsoWriteOpts *wopts= NULL;
|
||||||
enum burn_disc_status state;
|
enum burn_disc_status state;
|
||||||
int ret, fifo_chunks;
|
int ret, fifo_chunks, lba, nwa, i, new_img, early_indev_release;
|
||||||
|
size_t buffer_size= 0, buffer_free= 0;
|
||||||
|
char msg[160];
|
||||||
|
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
new_img= flag&1;
|
||||||
if(ret<0 || o==NULL)
|
early_indev_release= flag&2;
|
||||||
|
if(new_img && early_indev_release) {
|
||||||
|
isoburn_msgs_submit(in_o, 0x00060000,
|
||||||
|
"Programming error: Wrong session setup: new_img && early_indev_release",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
{ret= -4; goto ex;}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret= isoburn_find_emulator(&in_o, in_d, 0);
|
||||||
|
if(ret<0 || in_o==NULL)
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
o->wrote_well= 0; /* early end will be registered as failure */
|
ret= isoburn_find_emulator(&out_o, out_d, 0);
|
||||||
|
if(ret<0 || out_o==NULL)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
/* early end will be registered as failure */
|
||||||
|
in_o->wrote_well= out_o->wrote_well= 0;
|
||||||
|
|
||||||
state = isoburn_disc_get_status(d);
|
state = isoburn_disc_get_status(in_d);
|
||||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
|
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
|
||||||
&& (state != BURN_DISC_FULL || ! new_img)) {
|
state != BURN_DISC_FULL) {
|
||||||
/* unsuitable status */
|
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
|
||||||
burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
|
0, "FAILURE", 0);
|
||||||
|
{ret= -2; goto ex;}
|
||||||
|
}
|
||||||
|
state = isoburn_disc_get_status(out_d);
|
||||||
|
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
|
||||||
|
isoburn_msgs_submit(out_o, 0x00060000, "Unsuitable target media state",
|
||||||
|
0, "FAILURE", 0);
|
||||||
{ret= -2; goto ex;}
|
{ret= -2; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,54 +423,65 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|||||||
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
||||||
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
||||||
|
|
||||||
if (new_img) {
|
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
|
||||||
iso_write_opts_set_ms_block(wopts, 0);
|
opts->effective_lba= nwa;
|
||||||
opts->effective_lba= 0;
|
ret= isoburn_get_msc2(out_o, NULL, &nwa, 0);
|
||||||
iso_write_opts_set_appendable(wopts, 0);
|
if (ret != 1) {
|
||||||
iso_write_opts_set_overwrite_buf(wopts, NULL);
|
isoburn_msgs_submit(out_o, 0x00060000,
|
||||||
} else {
|
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
||||||
int lba, nwa;
|
{ret= -3; goto ex;}
|
||||||
ret = isoburn_disc_track_lba_nwa(d, NULL, 0, &lba, &nwa);
|
|
||||||
if (ret != 1) {
|
|
||||||
burn_msgs_submit(0x00060000, "Cannot determine next writeable address", 0,
|
|
||||||
"FAILURE", NULL);
|
|
||||||
{ret= -3; goto ex;}
|
|
||||||
}
|
|
||||||
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
|
|
||||||
/* invalid nwa */
|
|
||||||
burn_msgs_submit(0x00060000,
|
|
||||||
"Encountered 0 as next writeable address of appendable",
|
|
||||||
0, "FAILURE", NULL);
|
|
||||||
{ret= -4; goto ex;}
|
|
||||||
}
|
|
||||||
iso_write_opts_set_ms_block(wopts, nwa);
|
|
||||||
opts->effective_lba= nwa;
|
|
||||||
iso_write_opts_set_appendable(wopts, 1);
|
|
||||||
iso_write_opts_set_overwrite_buf(wopts, o->target_iso_head);
|
|
||||||
}
|
}
|
||||||
|
iso_write_opts_set_ms_block(wopts, nwa);
|
||||||
|
iso_write_opts_set_appendable(wopts, !new_img);
|
||||||
|
iso_write_opts_set_overwrite_buf(wopts,
|
||||||
|
nwa>0 ? out_o->target_iso_head : NULL);
|
||||||
|
|
||||||
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
|
ret = iso_image_create_burn_source(in_o->image, wopts, &wsrc);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
}
|
}
|
||||||
|
if (early_indev_release) {
|
||||||
|
for(i= 0; i<300; i++) {
|
||||||
|
|
||||||
|
/* <<< ??? */
|
||||||
|
if((i%30) == 0) {
|
||||||
|
sprintf(msg, "Waiting for data in fifo since %d seconds", i/30);
|
||||||
|
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
usleep(100000);
|
||||||
|
ret= iso_ring_buffer_get_status(wsrc, &buffer_size, &buffer_free);
|
||||||
|
if(ret >0 && buffer_size != buffer_free)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<< ??? */
|
||||||
|
sprintf(msg,
|
||||||
|
"After %.1f seconds: %d bytes of output available (fifo state=%d)",
|
||||||
|
((double) i+1) / 10.0, (int) (buffer_size - buffer_free), ret);
|
||||||
|
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
|
||||||
|
if(in_o->iso_data_source!=NULL)
|
||||||
|
isoburn_data_source_shutdown(in_o->iso_data_source, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO check return values for failure. propertly clean-up on error */
|
/* TODO check return values for failure. propertly clean-up on error */
|
||||||
|
|
||||||
o->iso_source= wsrc;
|
out_o->iso_source= wsrc;
|
||||||
|
|
||||||
*disc = burn_disc_create();
|
*disc = burn_disc_create();
|
||||||
session = burn_session_create();
|
session = burn_session_create();
|
||||||
burn_disc_add_session(*disc, session, BURN_POS_END);
|
burn_disc_add_session(*disc, session, BURN_POS_END);
|
||||||
track = burn_track_create();
|
track = burn_track_create();
|
||||||
burn_track_set_source(track, o->iso_source);
|
burn_track_set_source(track, out_o->iso_source);
|
||||||
burn_session_add_track(session, track, BURN_POS_END);
|
burn_session_add_track(session, track, BURN_POS_END);
|
||||||
|
|
||||||
/* give up local references */
|
/* give up local references */
|
||||||
burn_track_free(track);
|
burn_track_free(track);
|
||||||
burn_session_free(session);
|
burn_session_free(session);
|
||||||
|
|
||||||
o->wrote_well= -1; /* neutral */
|
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:
|
ex:
|
||||||
if(wopts!=NULL)
|
if(wopts!=NULL)
|
||||||
@ -414,39 +489,51 @@ ex:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts)
|
struct isoburn_imgen_opts *opts)
|
||||||
{
|
{
|
||||||
return isoburn_prepare_disc_aux(d, disc, opts, 0);
|
return isoburn_prepare_disc_aux(d, d, disc, opts, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts,
|
struct isoburn_imgen_opts *opts,
|
||||||
struct burn_drive *out_drive)
|
struct burn_drive *out_drive)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct isoburn *in_o, *out_o;
|
|
||||||
|
|
||||||
ret= isoburn_prepare_disc_aux(d, disc, opts, 1);
|
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 1);
|
||||||
if (ret<=0)
|
if (ret<=0)
|
||||||
return ret;
|
return ret;
|
||||||
/* Hand over source reference for optional fifo status inquiry */
|
|
||||||
if(out_drive==NULL)
|
|
||||||
return 1;
|
|
||||||
ret= isoburn_find_emulator(&out_o, out_drive, 0);
|
|
||||||
if(ret<0 || out_o==NULL)
|
|
||||||
return 1;
|
|
||||||
ret= isoburn_find_emulator(&in_o, d, 0);
|
|
||||||
if(ret<0 || in_o==NULL)
|
|
||||||
return 1; /* then without fifo status inquiry */
|
|
||||||
if(out_o->iso_source!=NULL)
|
|
||||||
burn_source_free(out_o->iso_source);
|
|
||||||
out_o->iso_source= in_o->iso_source;
|
|
||||||
in_o->iso_source= NULL;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* API since 0.2.2 */
|
||||||
|
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||||
|
struct isoburn_imgen_opts *opts,
|
||||||
|
struct burn_drive *out_drive, int nwa)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct isoburn *o= NULL;
|
||||||
|
|
||||||
|
ret= isoburn_find_emulator(&o, out_drive, 0);
|
||||||
|
if(ret<0 || o==NULL)
|
||||||
|
return(-1);
|
||||||
|
if(nwa >= 0)
|
||||||
|
o->fabricated_msc2= nwa;
|
||||||
|
if(o->nwa == o->zero_nwa)
|
||||||
|
o->nwa= o->zero_nwa= 0;
|
||||||
|
else
|
||||||
|
o->zero_nwa= 0;
|
||||||
|
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 2);
|
||||||
|
if (ret<=0)
|
||||||
|
return ret;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* API @since 0.1.0
|
/* API @since 0.1.0
|
||||||
@param flag bit0= this is a regular end, not an abort
|
@param flag bit0= this is a regular end, not an abort
|
||||||
give up source reference
|
give up source reference
|
||||||
@ -532,8 +619,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
|||||||
|
|
||||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
0, "FATAL", NULL);
|
"Cannot allocate memory for read options", 0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
o->norock= 0;
|
o->norock= 0;
|
||||||
@ -669,9 +756,9 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
|
|
||||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Cannot allocate memory for image generation options",
|
"Cannot allocate memory for image generation options",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
o->level= 2;
|
o->level= 2;
|
||||||
|
@ -60,9 +60,17 @@ struct isoburn {
|
|||||||
*/
|
*/
|
||||||
int fabricated_msc1;
|
int fabricated_msc1;
|
||||||
|
|
||||||
|
/* If >= 0, this address is used in isoburn_disc_track_lba_nwa()
|
||||||
|
as reply parameter nwa.
|
||||||
|
(The other nwa parameters below apply only to the effective write address
|
||||||
|
on random access media. msc2 is handed to libisofs but not to libburn.)
|
||||||
|
*/
|
||||||
|
int fabricated_msc2;
|
||||||
|
|
||||||
|
|
||||||
/* The nwa to be used for a first session on the present kind of overwriteable
|
/* The nwa to be used for a first session on the present kind of overwriteable
|
||||||
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
||||||
*/
|
*/
|
||||||
int zero_nwa;
|
int zero_nwa;
|
||||||
|
|
||||||
/* Start address as given by image examination (bytes, not blocks) */
|
/* Start address as given by image examination (bytes, not blocks) */
|
||||||
@ -71,6 +79,7 @@ struct isoburn {
|
|||||||
/* Aligned start address to be used for processing (counted in blocks) */
|
/* Aligned start address to be used for processing (counted in blocks) */
|
||||||
int nwa;
|
int nwa;
|
||||||
|
|
||||||
|
|
||||||
/* Truncate to .nwa an eventual regular file serving as output drive */
|
/* Truncate to .nwa an eventual regular file serving as output drive */
|
||||||
int truncate;
|
int truncate;
|
||||||
|
|
||||||
@ -99,6 +108,10 @@ struct isoburn {
|
|||||||
/* Libisofs image context */
|
/* Libisofs image context */
|
||||||
IsoImage *image;
|
IsoImage *image;
|
||||||
|
|
||||||
|
/* The block data source from which the existing image is read.
|
||||||
|
*/
|
||||||
|
IsoDataSource *iso_data_source;
|
||||||
|
|
||||||
/* The burn source which transfers data from libisofs to libburn.
|
/* The burn source which transfers data from libisofs to libburn.
|
||||||
It has its own fifo.
|
It has its own fifo.
|
||||||
*/
|
*/
|
||||||
@ -110,6 +123,12 @@ struct isoburn {
|
|||||||
/* For iso_image_attach_data() */
|
/* For iso_image_attach_data() */
|
||||||
void *read_pacifier_handle;
|
void *read_pacifier_handle;
|
||||||
|
|
||||||
|
/* An application provided method to immediately deliver messages */
|
||||||
|
int (*msgs_submit)(void *handle, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag);
|
||||||
|
void *msgs_submit_handle; /* specific to application method */
|
||||||
|
int msgs_submit_flag; /* specific to application method */
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -168,6 +187,11 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
|
|||||||
int isoburn_find_emulator(struct isoburn **pt,
|
int isoburn_find_emulator(struct isoburn **pt,
|
||||||
struct burn_drive *drive, int flag);
|
struct burn_drive *drive, int flag);
|
||||||
|
|
||||||
|
/* Deliver an event message. Either via a non-NULL o->msgs_submit() method
|
||||||
|
or via burn_msgs_submit() of libburn.
|
||||||
|
*/
|
||||||
|
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag);
|
||||||
|
|
||||||
/** Set the start address for an emulated add-on session. The value will
|
/** Set the start address for an emulated add-on session. The value will
|
||||||
be rounded up to the alignment necessary for the media. The aligned
|
be rounded up to the alignment necessary for the media. The aligned
|
||||||
@ -179,6 +203,19 @@ int isoburn_find_emulator(struct isoburn **pt,
|
|||||||
*/
|
*/
|
||||||
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||||
|
|
||||||
|
/** Obtains the image address offset to be used with image generation.
|
||||||
|
This is either the (emulated) drive nwa or a value set by
|
||||||
|
isoburn_prepare_blind_grow().
|
||||||
|
In any case this is the address to tell to iso_write_opts_set_ms_block().
|
||||||
|
@param o The isoburn object to be inquired
|
||||||
|
@param opts If not NULL: write parameters to be set on drive before query
|
||||||
|
@param msc2 The value to be used with iso_write_opts_set_ms_block()
|
||||||
|
@param flag unused yet
|
||||||
|
@return <=0 is failure , >0 success
|
||||||
|
*/
|
||||||
|
int isoburn_get_msc2(struct isoburn *o,
|
||||||
|
struct burn_write_opts *opts, int *msc2, int flag);
|
||||||
|
|
||||||
/** Get a data source suitable for read from a drive using burn_read_data()
|
/** Get a data source suitable for read from a drive using burn_read_data()
|
||||||
function.
|
function.
|
||||||
@param d drive to read from. Must be grabbed.
|
@param d drive to read from. Must be grabbed.
|
||||||
@ -189,6 +226,19 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
|||||||
IsoDataSource *
|
IsoDataSource *
|
||||||
isoburn_data_source_new(struct burn_drive *d);
|
isoburn_data_source_new(struct burn_drive *d);
|
||||||
|
|
||||||
|
/** Disable read capabilities of a data source which was originally created
|
||||||
|
by isoburn_data_source_new(). After this any attempt to read will yield
|
||||||
|
a FATAL programming error event.
|
||||||
|
This is usually done to allow libburn to release the drive while libisofs
|
||||||
|
still holds a reference to the data source object. libisofs is not supposed
|
||||||
|
to use this object for reading any more, nevertheless. The disabled state
|
||||||
|
of the data source is a safety fence around this daring situation.
|
||||||
|
@param src The data source to be disabled
|
||||||
|
@param flag unused yet
|
||||||
|
@return <=0 is failure , >0 success
|
||||||
|
*/
|
||||||
|
int isoburn_data_source_shutdown(IsoDataSource *src, int flag);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options for image reading.
|
* Options for image reading.
|
||||||
@ -369,8 +419,10 @@ struct isoburn_imgen_opts {
|
|||||||
|
|
||||||
/* Maximum gap to be bridged during a outer TOC scan. Gaps appear between the
|
/* Maximum gap to be bridged during a outer TOC scan. Gaps appear between the
|
||||||
end of a session and the start of the next session.
|
end of a session and the start of the next session.
|
||||||
|
The longest gap found so far was about 38100 after the first session of a
|
||||||
|
DVD-R.
|
||||||
*/
|
*/
|
||||||
#define Libisoburn_toc_scan_max_gaP 8192
|
#define Libisoburn_toc_scan_max_gaP 65536
|
||||||
|
|
||||||
|
|
||||||
/* Creating a chain of image headers which form a TOC:
|
/* Creating a chain of image headers which form a TOC:
|
||||||
|
@ -121,18 +121,18 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
IsoDataSource *ds= NULL;
|
IsoDataSource *ds= NULL;
|
||||||
struct isoburn *o= NULL;
|
struct isoburn *o= NULL;
|
||||||
|
|
||||||
if(read_opts==NULL) {
|
|
||||||
burn_msgs_submit(0x00060000,
|
|
||||||
"Program error: isoburn_read_image: read_opts==NULL",
|
|
||||||
0, "FATAL", NULL);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
if(d != NULL) {
|
if(d != NULL) {
|
||||||
ret = isoburn_find_emulator(&o, d, 0);
|
ret = isoburn_find_emulator(&o, d, 0);
|
||||||
if (ret < 0 || o == NULL)
|
if (ret < 0 || o == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
status = isoburn_disc_get_status(d);
|
status = isoburn_disc_get_status(d);
|
||||||
}
|
}
|
||||||
|
if(read_opts==NULL) {
|
||||||
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
|
"Program error: isoburn_read_image: read_opts==NULL",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
|
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
|
||||||
create_blank_image:;
|
create_blank_image:;
|
||||||
/*
|
/*
|
||||||
@ -142,9 +142,9 @@ create_blank_image:;
|
|||||||
if (d == NULL) {
|
if (d == NULL) {
|
||||||
/* New empty image without relation to a drive */
|
/* New empty image without relation to a drive */
|
||||||
if (image==NULL) {
|
if (image==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
"Program error: isoburn_read_image: image==NULL",
|
"Program error: isoburn_read_image: image==NULL",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* create a new image */
|
/* create a new image */
|
||||||
@ -170,9 +170,9 @@ create_blank_image:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
|
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
"Program error: isoburn_read_image: incorrect disc status",
|
"Program error: isoburn_read_image: incorrect disc status",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ create_blank_image:;
|
|||||||
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
|
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
|
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "WARNING", NULL);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
||||||
goto create_blank_image;
|
goto create_blank_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,6 +212,9 @@ create_blank_image:;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ds = isoburn_data_source_new(d);
|
ds = isoburn_data_source_new(d);
|
||||||
|
if(o->iso_data_source!=NULL)
|
||||||
|
iso_data_source_unref(o->iso_data_source);
|
||||||
|
o->iso_data_source= ds;
|
||||||
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
||||||
isoburn_idle_free_function);
|
isoburn_idle_free_function);
|
||||||
if(o->read_pacifier_handle==NULL)
|
if(o->read_pacifier_handle==NULL)
|
||||||
@ -221,7 +224,7 @@ create_blank_image:;
|
|||||||
ret = iso_image_import(o->image, ds, ropts, &features);
|
ret = iso_image_import(o->image, ds, ropts, &features);
|
||||||
iso_tree_set_report_callback(o->image, NULL);
|
iso_tree_set_report_callback(o->image, NULL);
|
||||||
iso_read_opts_free(ropts);
|
iso_read_opts_free(ropts);
|
||||||
iso_data_source_unref(ds);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
||||||
return ret;
|
return ret;
|
||||||
@ -248,15 +251,15 @@ int isoburn_attach_image(struct burn_drive *d, IsoImage *image)
|
|||||||
int ret;
|
int ret;
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
|
|
||||||
if (image == NULL) {
|
|
||||||
burn_msgs_submit(0x00060000,
|
|
||||||
"Program error: isoburn_attach_image: image==NULL",
|
|
||||||
0, "FATAL", NULL);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ret = isoburn_find_emulator(&o, d, 0);
|
ret = isoburn_find_emulator(&o, d, 0);
|
||||||
if (ret < 0 || o == NULL)
|
if (ret < 0 || o == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (image == NULL) {
|
||||||
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
|
"Program error: isoburn_attach_image: image==NULL",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if(o->image != NULL)
|
if(o->image != NULL)
|
||||||
iso_image_unref(o->image);
|
iso_image_unref(o->image);
|
||||||
o->image = image;
|
o->image = image;
|
||||||
@ -277,6 +280,8 @@ int isoburn_activate_session(struct burn_drive *drive)
|
|||||||
|
|
||||||
if (o->emulation_mode != 1)
|
if (o->emulation_mode != 1)
|
||||||
return 1; /* don't need to activate session */
|
return 1; /* don't need to activate session */
|
||||||
|
if (o->fabricated_msc2 >= 0)
|
||||||
|
return 1; /* blind growing: do not alter anything outside the session */
|
||||||
|
|
||||||
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
||||||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
||||||
@ -304,9 +309,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
|||||||
struct ecma119_pri_vol_desc *pvm;
|
struct ecma119_pri_vol_desc *pvm;
|
||||||
|
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Program error: isoburn_start_emulation: o==NULL",
|
"Program error: isoburn_start_emulation: o==NULL",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,23 +75,35 @@ job parameters. It rather states its desires which libisoburn tries to
|
|||||||
fulfill, or else will refuse to start the write run.
|
fulfill, or else will refuse to start the write run.
|
||||||
|
|
||||||
|
|
||||||
Setup for Growing or Modifying
|
Setup for Growing, Modifying or Blind Growing
|
||||||
|
|
||||||
The connector function family offers two alternative API calls for performing
|
The connector function family offers alternative API calls for performing
|
||||||
the setup for two alternative image generation strategies.
|
the setup for several alternative image generation strategies.
|
||||||
|
|
||||||
Growing:
|
Growing:
|
||||||
If input and output drive is the same, then isoburn_prepare_disc() is to
|
If input and output drive are the same, then isoburn_prepare_disc() is to
|
||||||
be used. It will lead to an add-on session on appendable or overwriteable
|
be used. It will lead to an add-on session on appendable or overwriteable
|
||||||
media with existing ISO image. With blank media it will produce a first
|
media with existing ISO image. With blank media it will produce a first
|
||||||
session.
|
session.
|
||||||
|
|
||||||
Modifying:
|
Modifying:
|
||||||
If the output drive is not the input drive, then it has to bear blank media
|
If the output drive is not the input drive, and if it bears blank media
|
||||||
or overwriteable without a valid ISO image. To prepare for such an image
|
or overwriteable without a valid ISO image, then one may produce a consolidated
|
||||||
generation run, use isoburn_prepare_new_image(). The run will copy file data
|
image with old and new data. This will copy file data from an eventual input
|
||||||
from an eventual input drive with valid image, add any newly introduced data
|
drive with valid image, add any newly introduced data from the local
|
||||||
from the local filesystem, and produce a first session on output media.
|
filesystem, and produce a first session on output media.
|
||||||
|
To prepare for such an image generation run, use isoburn_prepare_new_image().
|
||||||
|
|
||||||
|
Blind Growing:
|
||||||
|
This method reads the old image from one drive and writes the add-on session
|
||||||
|
to a different drive. That output drive is nevertheless supposed to
|
||||||
|
finally lead to the same media from where the session was loaded. Usually it
|
||||||
|
will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program
|
||||||
|
like with this classic gesture:
|
||||||
|
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||||
|
Blind growing is prepared by the call isoburn_prepare_blind_grow().
|
||||||
|
The input drive should be released immediately after this call in order
|
||||||
|
to allow the consumer of the output stream to access that drive for writing.
|
||||||
|
|
||||||
After either of these setups, some peripheral libburn drive parameter settings
|
After either of these setups, some peripheral libburn drive parameter settings
|
||||||
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
||||||
@ -188,15 +200,15 @@ void isoburn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define isoburn_libisofs_req_major 0
|
#define isoburn_libisofs_req_major 0
|
||||||
#define isoburn_libisofs_req_minor 6
|
#define isoburn_libisofs_req_minor 6
|
||||||
#define isoburn_libisofs_req_micro 4
|
#define isoburn_libisofs_req_micro 6
|
||||||
|
|
||||||
/** The minimum version of libburn to be used with this version of libisoburn
|
/** The minimum version of libburn to be used with this version of libisoburn
|
||||||
at compile time.
|
at compile time.
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
*/
|
*/
|
||||||
#define isoburn_libburn_req_major 0
|
#define isoburn_libburn_req_major 0
|
||||||
#define isoburn_libburn_req_minor 4
|
#define isoburn_libburn_req_minor 5
|
||||||
#define isoburn_libburn_req_micro 7
|
#define isoburn_libburn_req_micro 2
|
||||||
|
|
||||||
|
|
||||||
/** The minimum version of libisofs to be used with this version of libisoburn
|
/** The minimum version of libisofs to be used with this version of libisoburn
|
||||||
@ -231,8 +243,8 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
|
|||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
*/
|
*/
|
||||||
#define isoburn_header_version_major 0
|
#define isoburn_header_version_major 0
|
||||||
#define isoburn_header_version_minor 1
|
#define isoburn_header_version_minor 2
|
||||||
#define isoburn_header_version_micro 5
|
#define isoburn_header_version_micro 4
|
||||||
/** Note:
|
/** Note:
|
||||||
Above version numbers are also recorded in configure.ac because libtool
|
Above version numbers are also recorded in configure.ac because libtool
|
||||||
wants them as parameters at build time.
|
wants them as parameters at build time.
|
||||||
@ -298,6 +310,24 @@ and would leave out the ugly compile time traps.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** Announce to the library an application provided method for immediate
|
||||||
|
delivery of messages. It is used when no drive is affected directly or
|
||||||
|
if the drive has no own msgs_submit() method attached by
|
||||||
|
isoburn_drive_set_msgs_submit.
|
||||||
|
If no method is preset or if the method is set to NULL then libisoburn
|
||||||
|
delivers its messages through the message queue of libburn.
|
||||||
|
@param msgs_submit The function call which implements the method
|
||||||
|
@param submit_handle Handle to be used as first argument of msgs_submit
|
||||||
|
@param submit_flag Flag to be used as last argument of msgs_submit
|
||||||
|
@param flag Unused yet, submit 0
|
||||||
|
@since 0.2.0
|
||||||
|
*/
|
||||||
|
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
|
||||||
|
char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag),
|
||||||
|
void *submit_handle, int submit_flag, int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Aquire a target drive by its filesystem path resp. libburn persistent
|
/** Aquire a target drive by its filesystem path resp. libburn persistent
|
||||||
address.
|
address.
|
||||||
Wrapper for: burn_drive_scan_and_grab()
|
Wrapper for: burn_drive_scan_and_grab()
|
||||||
@ -339,7 +369,6 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
|||||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
char* adr, int flag);
|
char* adr, int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Aquire a drive from the burn_drive_info[] array which was obtained by
|
/** Aquire a drive from the burn_drive_info[] array which was obtained by
|
||||||
a previous call of burn_drive_scan().
|
a previous call of burn_drive_scan().
|
||||||
Wrapper for: burn_drive_grab()
|
Wrapper for: burn_drive_grab()
|
||||||
@ -351,6 +380,25 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
|||||||
int isoburn_drive_grab(struct burn_drive *drive, int load);
|
int isoburn_drive_grab(struct burn_drive *drive, int load);
|
||||||
|
|
||||||
|
|
||||||
|
/** Attach to a drive an application provided method for immediate
|
||||||
|
delivery of messages.
|
||||||
|
If no method is set or if the method is set to NULL then libisoburn
|
||||||
|
delivers messages of the drive through the global msgs_submit() method
|
||||||
|
set by isoburn_set_msgs_submiti() or by the message queue of libburn.
|
||||||
|
@since 0.2.0
|
||||||
|
@param d The drive to which this function, handle and flag shall apply
|
||||||
|
@param msgs_submit The function call which implements the method
|
||||||
|
@param submit_handle Handle to be used as first argument of msgs_submit
|
||||||
|
@param submit_flag Flag to be used as last argument of msgs_submit
|
||||||
|
@param flag Unused yet, submit 0
|
||||||
|
*/
|
||||||
|
int isoburn_drive_set_msgs_submit(struct burn_drive *d,
|
||||||
|
int (*msgs_submit)(void *handle, int error_code,
|
||||||
|
char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag),
|
||||||
|
void *submit_handle, int submit_flag, int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Inquire the media status. Expect the whole spectrum of libburn BURN_DISC_*
|
/** Inquire the media status. Expect the whole spectrum of libburn BURN_DISC_*
|
||||||
with multi-session media. Emulated states with random access media are
|
with multi-session media. Emulated states with random access media are
|
||||||
BURN_DISC_BLANK and BURN_DISC_APPENDABLE.
|
BURN_DISC_BLANK and BURN_DISC_APPENDABLE.
|
||||||
@ -385,7 +433,7 @@ int isoburn_disc_erasable(struct burn_drive *d);
|
|||||||
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||||
|
|
||||||
|
|
||||||
/** Program isoburn_disc_get_msc1() to return a fabricated value.
|
/** Set up isoburn_disc_get_msc1() to return a fabricated value.
|
||||||
This makes only sense between aquiring the drive and reading the
|
This makes only sense between aquiring the drive and reading the
|
||||||
image. After isoburn_read_image() it will confuse the coordination
|
image. After isoburn_read_image() it will confuse the coordination
|
||||||
of libisoburn and libisofs.
|
of libisoburn and libisofs.
|
||||||
@ -402,7 +450,11 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
|||||||
4= start lba of last session with volume id
|
4= start lba of last session with volume id
|
||||||
given by adr_value
|
given by adr_value
|
||||||
@parm adr_value A string describing the value to be eventually used.
|
@parm adr_value A string describing the value to be eventually used.
|
||||||
@param flag Bitfield for control purposes. Unused yet. Submit 0.
|
@param flag Bitfield for control purposes.
|
||||||
|
bit0= @since 0.2.2
|
||||||
|
with adr_mode 3: adr_value might be 16 blocks too high
|
||||||
|
(e.g. -C stemming from growisofs). Probe for ISO head
|
||||||
|
at adr_value-16 and eventually adjust setting.
|
||||||
*/
|
*/
|
||||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||||
int flag);
|
int flag);
|
||||||
@ -450,7 +502,8 @@ struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
|
|||||||
|
|
||||||
|
|
||||||
/** Tell the number of 2048 byte blocks covered by the table of content.
|
/** Tell the number of 2048 byte blocks covered by the table of content.
|
||||||
Wrapper for: burn_disc_get_sectors()
|
This number includes the eventual gaps between sessions and tracks.
|
||||||
|
So this call is not really a wrapper for burn_disc_get_sectors().
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@param disc The master handle of the media
|
@param disc The master handle of the media
|
||||||
@return number of blocks, <=0 indicates unknown or unreadable state
|
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||||
@ -501,7 +554,7 @@ struct isoburn_toc_track **isoburn_toc_session_get_tracks(
|
|||||||
struct isoburn_toc_session *s, int *num);
|
struct isoburn_toc_session *s, int *num);
|
||||||
|
|
||||||
|
|
||||||
/** Obtain a copy of the entry which describes a particular itrack.
|
/** Obtain a copy of the entry which describes a particular track.
|
||||||
Wrapper for: burn_track_get_entry()
|
Wrapper for: burn_track_get_entry()
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@param s The track handle
|
@param s The track handle
|
||||||
@ -522,7 +575,7 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
|||||||
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||||
|
|
||||||
|
|
||||||
/** Try whether at the data at the given address look like a ISO 9660
|
/** Try whether the data at the given address look like a ISO 9660
|
||||||
image header and obtain its alleged size. Depending on the info mode
|
image header and obtain its alleged size. Depending on the info mode
|
||||||
one other string of text information can be retrieved too.
|
one other string of text information can be retrieved too.
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@ -531,9 +584,16 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
|||||||
@param image_blocks The number of 2048 bytes blocks
|
@param image_blocks The number of 2048 bytes blocks
|
||||||
@param info Caller provided memory, enough to take eventual info reply
|
@param info Caller provided memory, enough to take eventual info reply
|
||||||
@param flag bit0-7: info return mode
|
@param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id (info needs 33 bytes)
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
2= @since 0.2.2 :
|
||||||
|
copy 64 kB header to info (needs 65536 bytes)
|
||||||
|
bit13= @since 0.2.2:
|
||||||
|
do not read head from media but use first 64 kB from info
|
||||||
|
bit14= check both half buffers (not only second)
|
||||||
|
return 2 if found in first block
|
||||||
|
bit15= return-1 on read error
|
||||||
|
@return >0 seems to be a valid ISO image, 0 format not recognized, <0 error
|
||||||
*/
|
*/
|
||||||
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||||
int *image_blocks, char *info, int flag);
|
int *image_blocks, char *info, int flag);
|
||||||
@ -992,9 +1052,13 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
|
|||||||
|
|
||||||
|
|
||||||
/** Obtain the start block number of the most recent session on media. In
|
/** Obtain the start block number of the most recent session on media. In
|
||||||
case of random access media this will always be 0. Succesfull return is
|
case of random access media this will normally be 0. Successfull return is
|
||||||
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
||||||
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE.
|
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE
|
||||||
|
or BURN_DISC_FULL.
|
||||||
|
Note: The result of this call may be fabricated by a previous call of
|
||||||
|
isoburn_set_msc1() which can override the rule to load the most recent
|
||||||
|
session.
|
||||||
Wrapper for: burn_disc_get_msc1()
|
Wrapper for: burn_disc_get_msc1()
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param d The drive to inquire
|
@param d The drive to inquire
|
||||||
@ -1032,7 +1096,8 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
|
|||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Create a disc object for writing the new session from the created or loaded
|
/** To choose the expansion method of Growing:
|
||||||
|
Create a disc object for writing the new session from the created or loaded
|
||||||
iso_volset which has been manipulated via libisofs, to the same media from
|
iso_volset which has been manipulated via libisofs, to the same media from
|
||||||
where the image was eventually loaded. This struct burn_disc is ready for
|
where the image was eventually loaded. This struct burn_disc is ready for
|
||||||
use by a subsequent call to isoburn_disc_write().
|
use by a subsequent call to isoburn_disc_write().
|
||||||
@ -1049,9 +1114,10 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
|||||||
struct isoburn_imgen_opts *opts);
|
struct isoburn_imgen_opts *opts);
|
||||||
|
|
||||||
|
|
||||||
/** Create a disc object for producing a new image from a previous image
|
/** To choose the expansion method of Modifying:
|
||||||
|
Create a disc object for producing a new image from a previous image
|
||||||
plus the changes made by user. The generated burn_disc is suitable
|
plus the changes made by user. The generated burn_disc is suitable
|
||||||
to be written to any grabbed libburn drive with blank writeable media.
|
to be written to a grabbed drive with blank writeable media.
|
||||||
But you must not use the same drive for input and output, because data
|
But you must not use the same drive for input and output, because data
|
||||||
will be read from the source drive while at the same time the target
|
will be read from the source drive while at the same time the target
|
||||||
drive is already writing.
|
drive is already writing.
|
||||||
@ -1059,15 +1125,11 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
|||||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||||
burn_disc_write().
|
burn_disc_write().
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
@param in_drive The input drive, grabbed with isoburn_drive_aquire() or
|
||||||
|
one of its alternatives.
|
||||||
@param disc Returns the newly created burn_disc object.
|
@param disc Returns the newly created burn_disc object.
|
||||||
@param opts Options for image generation and data transport to media.
|
@param opts Options for image generation and data transport to media.
|
||||||
@param out_drive The libburn drive which shall be write target.
|
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||||
If the drive was grabbed via libisoburn then it can later
|
|
||||||
access the libisofs source fifo via
|
|
||||||
isoburn_get_fifo_status().
|
|
||||||
Mere libburn drives cannot obtain this info.
|
|
||||||
In that case out_drive may be NULL, as well.
|
|
||||||
@return <=0 error , 1 = success
|
@return <=0 error , 1 = success
|
||||||
*/
|
*/
|
||||||
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||||
@ -1075,7 +1137,52 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
|||||||
struct isoburn_imgen_opts *opts,
|
struct isoburn_imgen_opts *opts,
|
||||||
struct burn_drive *out_drive);
|
struct burn_drive *out_drive);
|
||||||
|
|
||||||
/** @since 0.1.0
|
|
||||||
|
/** To choose the expansion method of Blind Growing:
|
||||||
|
Create a disc object for writing an add-on session from the created or
|
||||||
|
loaded IsoImage which has been manipulated via libisofs, to a different
|
||||||
|
drive than the one from where it was loaded.
|
||||||
|
Usually output will be stdio:/dev/fd/1 (i.e. stdout) being piped
|
||||||
|
into some burn program like with this classic gesture:
|
||||||
|
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||||
|
Parameter translation into libisoburn:
|
||||||
|
$dev is the address by which parameter in_drive of this call was aquired
|
||||||
|
$msc1 was set by isoburn_set_msc1() before image reading
|
||||||
|
or was detected from the in_drive media
|
||||||
|
$nwa is a parameter of this call
|
||||||
|
or can be used as detected from the in_drive media
|
||||||
|
|
||||||
|
This call waits for libisofs output to become available and then detaches
|
||||||
|
the input drive object from the data source object by which libisofs was
|
||||||
|
reading from the input drive.
|
||||||
|
So, as far as libisofs is concerned, that drive may be released immediately
|
||||||
|
after this call in order to allow the consumer to access the drive for
|
||||||
|
writing.
|
||||||
|
The consumer should wait for input to become available and only then open
|
||||||
|
its burn drive. With cdrecord this is caused by option -waiti.
|
||||||
|
|
||||||
|
The resulting burn_disc object has to be disposed when all its writing
|
||||||
|
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||||
|
burn_disc_write().
|
||||||
|
@since 0.2.2
|
||||||
|
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
||||||
|
@param disc Returns the newly created burn_disc object.
|
||||||
|
@param opts Options for image generation and data transport to media.
|
||||||
|
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||||
|
typically stdio:/dev/fd/1 .
|
||||||
|
@param nwa The address (2048 byte block count) where the add-on
|
||||||
|
session will be finally stored on a mountable media
|
||||||
|
or in a mountable file.
|
||||||
|
If nwa is -1 then the address is used as determined from
|
||||||
|
the in_drive media.
|
||||||
|
@return <=0 error , 1 = success
|
||||||
|
*/
|
||||||
|
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||||
|
struct isoburn_imgen_opts *opts,
|
||||||
|
struct burn_drive *out_drive, int nwa);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
|
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
|
||||||
running isoburn_disc_write().
|
running isoburn_disc_write().
|
||||||
libisofs reserves resources and maybe already starts generating the
|
libisofs reserves resources and maybe already starts generating the
|
||||||
@ -1157,8 +1264,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
|
|||||||
int isoburn_activate_session(struct burn_drive *drive);
|
int isoburn_activate_session(struct burn_drive *drive);
|
||||||
|
|
||||||
|
|
||||||
/** @since 0.1.0
|
/** Wait after normal end of operations until libisofs ended all write
|
||||||
Wait after normal end of operations until libisofs ended all write
|
|
||||||
threads and freed resource reservations.
|
threads and freed resource reservations.
|
||||||
This call is not mandatory. But without it, messages from the ending
|
This call is not mandatory. But without it, messages from the ending
|
||||||
threads might appear after the application ended its write procedure.
|
threads might appear after the application ended its write procedure.
|
||||||
@ -1174,21 +1280,6 @@ int isoburn_sync_after_write(struct burn_drive *input_drive,
|
|||||||
struct burn_drive *output_drive, int flag);
|
struct burn_drive *output_drive, int flag);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* >>> NOT YET IMPLEMENTED <<< */
|
|
||||||
/** Write a new session to a disc.
|
|
||||||
This is a synchronous call equivalent to isoburn_prepare_disc +
|
|
||||||
isoburn_disc_write + isoburn_activate_session
|
|
||||||
@param pacifier_func If not NULL: a function to produce appeasing messages.
|
|
||||||
See burn_abort_pacifier() in libburn.h for an example.
|
|
||||||
*/
|
|
||||||
/* TODO implement this */
|
|
||||||
int isoburn_perform_write(struct burn_write_opts *o,
|
|
||||||
int (*pacifier_func)(void *handle, int patience,
|
|
||||||
int elapsed));
|
|
||||||
#endif /* 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/** Release an aquired drive.
|
/** Release an aquired drive.
|
||||||
Wrapper for: burn_drive_release()
|
Wrapper for: burn_drive_release()
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/xorriso_eng.html
|
http://scdbackup.sourceforge.net/xorriso_eng.html
|
||||||
http://scdbackup.sourceforge.net/xorriso-0.1.5.tar.gz
|
http://scdbackup.sourceforge.net/xorriso-0.2.4.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -14,6 +14,7 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
|||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
|
|
||||||
Currently it is only supported on Linux with kernels >= 2.4.
|
Currently it is only supported on Linux with kernels >= 2.4.
|
||||||
|
|
||||||
@ -35,10 +36,10 @@ The tarball contains anything that is needed except libc and libpthread.
|
|||||||
libreadline and the readline-dev headers will make dialog mode more convenient,
|
libreadline and the readline-dev headers will make dialog mode more convenient,
|
||||||
but are not mandatory.
|
but are not mandatory.
|
||||||
|
|
||||||
Obtain xorriso-0.1.5.tar.gz, take it to a directory of your choice and do:
|
Obtain xorriso-0.2.4.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf xorriso-0.1.5.tar.gz
|
tar xzf xorriso-0.2.4.pl00.tar.gz
|
||||||
cd xorriso-0.1.5
|
cd xorriso-0.2.4
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -68,6 +69,11 @@ It gets installed with "make install" but may also be placed manually in the
|
|||||||
./man1 directory below one of the directories mentioned in environment
|
./man1 directory below one of the directories mentioned in environment
|
||||||
variable $MANPATH.
|
variable $MANPATH.
|
||||||
|
|
||||||
|
The installation creates several alias links pointing to the xorriso binary:
|
||||||
|
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||||
|
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||||
|
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||||
|
|
||||||
|
|
||||||
Drives and Disk File Objects
|
Drives and Disk File Objects
|
||||||
|
|
||||||
@ -141,6 +147,26 @@ and vice versa:
|
|||||||
| less
|
| less
|
||||||
|
|
||||||
|
|
||||||
|
File Formats
|
||||||
|
|
||||||
|
Currently there is only one file format peculiar to xorriso : sector maps
|
||||||
|
which describe the valid and invalid blocks on a media or a disk copy of
|
||||||
|
a media. xorriso creates and reads these file with its option -check_media.
|
||||||
|
|
||||||
|
The file begins with 32 bytes of cleartext of which the last one is a
|
||||||
|
newline character. The first 25 say "xorriso sector bitmap v2 ", the
|
||||||
|
remaining six characters give the size of the info text as decimal number.
|
||||||
|
This number of bytes follows the first 32 and will not be interpreted
|
||||||
|
by xorriso. They are rather to inform a human reader about the media type
|
||||||
|
and its track layout.
|
||||||
|
After the info text there are two 4 byte signed integers, most significant
|
||||||
|
byte first. The first one, N, gives the number of bits in the following bitmap
|
||||||
|
and the second number S gives the number of 2 KiB blocks governed by a single
|
||||||
|
bit in the map. Then come the bits in form of 8-bit bytes.
|
||||||
|
Data block M is covered by bit B=M/S in the map, bit number B is stored in
|
||||||
|
byte B/8 as bit B%8. A valid readable data block has its bit set to 1.
|
||||||
|
|
||||||
|
|
||||||
libisoburn
|
libisoburn
|
||||||
|
|
||||||
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
||||||
@ -160,9 +186,9 @@ and a matching dynamically linked xorriso binary.
|
|||||||
This binary is leaner but depends on properly installed libraries of suitable
|
This binary is leaner but depends on properly installed libraries of suitable
|
||||||
revision.
|
revision.
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.5 :
|
Dynamic library and compile time header requirements for libisoburn-0.2.4 :
|
||||||
- libburn.so.4 , version libburn-0.4.4 or higher
|
- libburn.so.4 , version libburn-0.5.2 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.4 or higher
|
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
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
|
headers seen at compile time. So compile in the oldest possible installation
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
setup unless you have reason to enforce a newer bug fix level.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -76,9 +76,11 @@ libisofs="$libisofs $isofs"/util.o
|
|||||||
libisofs="$libisofs $isofs"/util_htable.o
|
libisofs="$libisofs $isofs"/util_htable.o
|
||||||
libisofs="$libisofs $isofs"/util_rbtree.o
|
libisofs="$libisofs $isofs"/util_rbtree.o
|
||||||
|
|
||||||
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
|
|
||||||
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
|
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
|
||||||
echo "Build timestamp : $timestamp"
|
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_buildstamp.h
|
||||||
|
echo "Build timestamp : $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"
|
||||||
|
|
||||||
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
|
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
|
||||||
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
||||||
@ -88,8 +90,6 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
|||||||
$def_opts \
|
$def_opts \
|
||||||
$largefile_opts \
|
$largefile_opts \
|
||||||
\
|
\
|
||||||
-DXorriso_build_timestamP='"'"$timestamp"'"' \
|
|
||||||
\
|
|
||||||
-o "$xorr"/xorriso \
|
-o "$xorr"/xorriso \
|
||||||
\
|
\
|
||||||
"$xorr"/xorriso.c \
|
"$xorr"/xorriso.c \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([xorriso], [0.1.5], [http://libburnia-project.org])
|
AC_INIT([xorriso], [0.2.3], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -8,15 +8,15 @@ AC_CANONICAL_TARGET
|
|||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=4
|
BURN_MINOR_VERSION=5
|
||||||
BURN_MICRO_VERSION=7
|
BURN_MICRO_VERSION=3
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
AC_SUBST(BURN_MINOR_VERSION)
|
AC_SUBST(BURN_MINOR_VERSION)
|
||||||
AC_SUBST(BURN_MICRO_VERSION)
|
AC_SUBST(BURN_MICRO_VERSION)
|
||||||
|
|
||||||
LIBISOFS_MAJOR_VERSION=0
|
LIBISOFS_MAJOR_VERSION=0
|
||||||
LIBISOFS_MINOR_VERSION=6
|
LIBISOFS_MINOR_VERSION=6
|
||||||
LIBISOFS_MICRO_VERSION=4
|
LIBISOFS_MICRO_VERSION=6
|
||||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||||
|
@ -47,7 +47,7 @@ then
|
|||||||
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
-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>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>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||||
-e 's/<b>Creating, Growing, Modifying:<\/b>/\ <BR><b>Creating, Growing, Modifying:<\/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/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||||
-e 's/^-dev /\ \ -dev /' \
|
-e 's/^-dev /\ \ -dev /' \
|
||||||
-e 's/^-devices /\ \ -devices /' \
|
-e 's/^-devices /\ \ -devices /' \
|
||||||
@ -70,6 +70,7 @@ then
|
|||||||
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/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/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
||||||
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/<b>osirrox restore options:<\/b>/\ <BR><b>osirrox restore options:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/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/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||||
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
||||||
|
@ -25,11 +25,11 @@
|
|||||||
current_dir=$(pwd)
|
current_dir=$(pwd)
|
||||||
lone_dir="$current_dir"/"xorriso-standalone"
|
lone_dir="$current_dir"/"xorriso-standalone"
|
||||||
|
|
||||||
xorriso_rev=0.1.5
|
xorriso_rev=0.2.4
|
||||||
# For unstable uploads:
|
# For unstable uploads:
|
||||||
xorriso_pl=""
|
# xorriso_pl=""
|
||||||
# For stable releases:
|
# For stable releases:
|
||||||
# xorriso_pl=".pl00"
|
xorriso_pl=".pl00"
|
||||||
|
|
||||||
with_bootstrap_tarball=1
|
with_bootstrap_tarball=1
|
||||||
|
|
||||||
@ -124,12 +124,17 @@ copy_files \
|
|||||||
xorriso/xorrisoburn.[ch] \
|
xorriso/xorrisoburn.[ch] \
|
||||||
xorriso/xorriso.[ch1] \
|
xorriso/xorriso.[ch1] \
|
||||||
xorriso/xorriso_private.h \
|
xorriso/xorriso_private.h \
|
||||||
|
\
|
||||||
xorriso/xorriso_timestamp.h \
|
xorriso/xorriso_timestamp.h \
|
||||||
|
\
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
xorriso/xorriso_eng.html \
|
xorriso/xorriso_eng.html \
|
||||||
xorriso/man_1_xorriso.html \
|
xorriso/man_1_xorriso.html \
|
||||||
"$lone_dir"/xorriso
|
"$lone_dir"/xorriso
|
||||||
|
|
||||||
|
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||||
|
"$lone_dir"/xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
create_dir "$lone_dir"/test
|
create_dir "$lone_dir"/test
|
||||||
copy_files \
|
copy_files \
|
||||||
test/compare_file.c \
|
test/compare_file.c \
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "May, 15, 2008"
|
.TH XORRISO 1 "Aug 24, 2008"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -15,6 +15,7 @@
|
|||||||
.\" .br insert line break
|
.\" .br insert line break
|
||||||
.\" .sp <n> insert n+1 empty lines
|
.\" .sp <n> insert n+1 empty lines
|
||||||
.\" for manpage-specific macros, see man(7)
|
.\" for manpage-specific macros, see man(7)
|
||||||
|
.nh
|
||||||
.SH NAME
|
.SH NAME
|
||||||
xorriso - creates, loads, manipulates and writes ISO 9660 filesystem images
|
xorriso - creates, loads, manipulates and writes ISO 9660 filesystem images
|
||||||
with Rock Ridge extensions.
|
with Rock Ridge extensions.
|
||||||
@ -30,6 +31,8 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
|||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
.br
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
.PP
|
.PP
|
||||||
A special property of xorriso is that it needs neither an external ISO 9660
|
A special property of xorriso is that it needs neither an external ISO 9660
|
||||||
formatter program nor an external burn program for CD or DVD but rather
|
formatter program nor an external burn program for CD or DVD but rather
|
||||||
@ -47,11 +50,14 @@ Changes file properties in the ISO image.
|
|||||||
.br
|
.br
|
||||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||||
.br
|
.br
|
||||||
Can write result as completely new image to optical media or
|
Writes result either as completely new image or as add-on session
|
||||||
filesystem objects.
|
to optical media or filesystem objects.
|
||||||
.br
|
.br
|
||||||
Can write result as add-on session to appendable multi-session media,
|
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
||||||
to overwriteable media, to regular files, and to block devices.
|
.br
|
||||||
|
Can restore files from ISO image to disk filesystem (see osirrox).
|
||||||
|
.br
|
||||||
|
Can check media for damages and copy readable blocks to disk.
|
||||||
.br
|
.br
|
||||||
Scans for optical drives, blanks re-useable optical media.
|
Scans for optical drives, blanks re-useable optical media.
|
||||||
.br
|
.br
|
||||||
@ -67,7 +73,7 @@ Session model
|
|||||||
.br
|
.br
|
||||||
Media types and states
|
Media types and states
|
||||||
.br
|
.br
|
||||||
Creating, Growing, Modifying
|
Creating, Growing, Modifying, Blind Growing
|
||||||
.br
|
.br
|
||||||
Libburn drives
|
Libburn drives
|
||||||
.br
|
.br
|
||||||
@ -116,7 +122,8 @@ filesystems. This expansion method is referred as emulated growing.
|
|||||||
.PP
|
.PP
|
||||||
xorriso provides both ways of growing as well as an own method named
|
xorriso provides both ways of growing as well as an own method named
|
||||||
\fBmodifying\fR which produces a completely new ISO image from the old
|
\fBmodifying\fR which produces a completely new ISO image from the old
|
||||||
one and the modifications. See paragraph Creating, Growing, Modifying below.
|
one and the modifications.
|
||||||
|
See paragraph Creating, Growing, Modifying, Blind Growing below.
|
||||||
.PP
|
.PP
|
||||||
xorriso adopts the concept of multi-session by loading an eventual image
|
xorriso adopts the concept of multi-session by loading an eventual image
|
||||||
directory tree, allowing to manipulate it by several actions, and to write
|
directory tree, allowing to manipulate it by several actions, and to write
|
||||||
@ -142,11 +149,11 @@ useful to store intermediate states and to continue with image manipulations.
|
|||||||
.B Media types and states:
|
.B Media types and states:
|
||||||
There are two families of media in the MMC standard:
|
There are two families of media in the MMC standard:
|
||||||
.br
|
.br
|
||||||
\fBMulti-session\fR media are CD-R, CD-RW, DVD-R, DVD+R, DVD+R/DL, and
|
\fBMulti-session media\fR are CD-R, CD-RW, DVD-R, DVD+R, DVD+R/DL, and
|
||||||
unformatted DVD-RW. These media provide a table of content which
|
unformatted DVD-RW. These media provide a table of content which
|
||||||
describes their existing sessions. See option \fB-toc\fR.
|
describes their existing sessions. See option \fB-toc\fR.
|
||||||
.br
|
.br
|
||||||
\fBOverwriteable\fR media are DVD-RAM, DVD+RW, and formatted DVD-RW.
|
\fBOverwriteable media\fR are DVD-RAM, DVD+RW, BD-RE, and formatted DVD-RW.
|
||||||
They allow random write access but do not provide information about their
|
They allow random write access but do not provide information about their
|
||||||
session history. If they contain one or more ISO 9660 sessions and if the
|
session history. If they contain one or more ISO 9660 sessions and if the
|
||||||
first session was written by xorriso, then a table of content can
|
first session was written by xorriso, then a table of content can
|
||||||
@ -181,7 +188,7 @@ Appendable is the state after writing a session with option -close off.
|
|||||||
for xorriso.
|
for xorriso.
|
||||||
.br
|
.br
|
||||||
Closed is the state of DVD-ROM media and of multi-session media which were
|
Closed is the state of DVD-ROM media and of multi-session media which were
|
||||||
written with option -close on. If the drive is incapable of writing it will
|
written with option -close on. If the drive is read-only hardware then it will
|
||||||
probably show any media as closed CD-ROM resp. DVD-ROM.
|
probably show any media as closed CD-ROM resp. DVD-ROM.
|
||||||
.br
|
.br
|
||||||
Overwriteable media assume this state in such read-only drives or if they
|
Overwriteable media assume this state in such read-only drives or if they
|
||||||
@ -191,7 +198,7 @@ contain unrecognizable data in the first 32 data blocks.
|
|||||||
media. Often only the first and the last session are visible. Sometimes
|
media. Often only the first and the last session are visible. Sometimes
|
||||||
not even that. Option -rom_toc_scan might or might not help in such cases.
|
not even that. Option -rom_toc_scan might or might not help in such cases.
|
||||||
.SS
|
.SS
|
||||||
.B Creating, Growing, Modifying:
|
.B Creating, Growing, Modifying, Blind Growing:
|
||||||
.br
|
.br
|
||||||
A new empty ISO image gets \fBcreated\fR
|
A new empty ISO image gets \fBcreated\fR
|
||||||
if there is no input drive with a valid
|
if there is no input drive with a valid
|
||||||
@ -205,7 +212,7 @@ blank state if it was not blank already.
|
|||||||
.PP
|
.PP
|
||||||
If there is a input drive with a valid ISO image, then this image gets loaded
|
If there is a input drive with a valid ISO image, then this image gets loaded
|
||||||
as foundation for manipulations and extension. The constellation of input
|
as foundation for manipulations and extension. The constellation of input
|
||||||
and output drive determines which of two write methods will be used.
|
and output drive determines which write method will be used.
|
||||||
They have quite different capabilities and constraints.
|
They have quite different capabilities and constraints.
|
||||||
.PP
|
.PP
|
||||||
The method of \fBgrowing\fR adds new data to the existing media. These
|
The method of \fBgrowing\fR adds new data to the existing media. These
|
||||||
@ -224,11 +231,25 @@ named pipes, character devices, sockets.
|
|||||||
On the other hand modified sessions cannot be written to appendable media
|
On the other hand modified sessions cannot be written to appendable media
|
||||||
but to blank media only.
|
but to blank media only.
|
||||||
.br
|
.br
|
||||||
Modifying takes place whenever input drive and output drive are not the same.
|
|
||||||
This is achieved by options -indev and -outdev.
|
|
||||||
.br
|
|
||||||
So for this method one needs either two optical drives or has to work with
|
So for this method one needs either two optical drives or has to work with
|
||||||
filesystem objects as source and/or target media.
|
filesystem objects as source and/or target media.
|
||||||
|
.br
|
||||||
|
Modifying takes place if input drive and output drive are not the same and
|
||||||
|
if option -grow_blindly is set to its default "off".
|
||||||
|
This is achieved by options -indev and -outdev.
|
||||||
|
.PP
|
||||||
|
If option -grow_blindly is set to a non-negative number and if -indev and
|
||||||
|
-outdev are both set to different drives, then \fBblind growing\fR is
|
||||||
|
performed. It produces an add-on session which is ready for being written
|
||||||
|
to the given block address. This is the usage model of
|
||||||
|
.br
|
||||||
|
mkisofs -M $indev -C $msc1,$msc2 -o $outdev
|
||||||
|
.br
|
||||||
|
which gives much room for wrong parameter combinations and should thus only be
|
||||||
|
employed if a strict distinction between ISO formatter xorriso and the burn
|
||||||
|
program is desired. -C $msc1,$msc2 is equivalent to:
|
||||||
|
.br
|
||||||
|
-load sbsector $msc1 -grow_blindly $msc2
|
||||||
.SS
|
.SS
|
||||||
.B Libburn drives:
|
.B Libburn drives:
|
||||||
.br
|
.br
|
||||||
@ -240,8 +261,8 @@ Rock Ridge info must be present in existing ISO images and it will be generated
|
|||||||
by the program unconditionally.
|
by the program unconditionally.
|
||||||
.PP
|
.PP
|
||||||
Output drive, i.e. target for writing, can be any libburn drive.
|
Output drive, i.e. target for writing, can be any libburn drive.
|
||||||
Some drive types do not support the method of growing but only the method
|
Some drive types do not support the method of growing but only the methods
|
||||||
of modifying. They all are suitable for newly created images.
|
of modifying and blind growing. They all are suitable for newly created images.
|
||||||
.br
|
.br
|
||||||
All drive file objects have to offer rw-permission to the user of xorriso.
|
All drive file objects have to offer rw-permission to the user of xorriso.
|
||||||
Even those which will not be useable for reading an ISO image.
|
Even those which will not be useable for reading an ISO image.
|
||||||
@ -272,7 +293,8 @@ their path in the filesystem. E.g.:
|
|||||||
If path leads to a regular file or to a block device then the emulated drive
|
If path leads to a regular file or to a block device then the emulated drive
|
||||||
is random access readable and can be used for the method of growing if it
|
is random access readable and can be used for the method of growing if it
|
||||||
already contains a valid ISO 9660 image. Any other file type is not readable
|
already contains a valid ISO 9660 image. Any other file type is not readable
|
||||||
via "stdio:" and can only be used as target for the method of modifying.
|
via "stdio:" and can only be used as target for the method of modifying or
|
||||||
|
blind growing.
|
||||||
Non existing paths in existing directories are handled as empty regular files.
|
Non existing paths in existing directories are handled as empty regular files.
|
||||||
.PP
|
.PP
|
||||||
A very special kind of pseudo drive are open file descriptors. They are
|
A very special kind of pseudo drive are open file descriptors. They are
|
||||||
@ -284,7 +306,7 @@ To prevent a fatal intermingling of ISO image and text messages, all result
|
|||||||
texts get redirected to stderr if -*dev "-" or "stdio:/dev/fd/1" is among
|
texts get redirected to stderr if -*dev "-" or "stdio:/dev/fd/1" is among
|
||||||
the start arguments of the program.
|
the start arguments of the program.
|
||||||
.br
|
.br
|
||||||
Standard output is currently suitable for creating a single new session
|
Standard output is currently suitable for creating one session
|
||||||
per program run without dialog. Use in other situations is discouraged
|
per program run without dialog. Use in other situations is discouraged
|
||||||
and several restrictions apply:
|
and several restrictions apply:
|
||||||
.br
|
.br
|
||||||
@ -422,13 +444,15 @@ without aquiring a new one.
|
|||||||
.TP
|
.TP
|
||||||
\fB\-indev\fR address
|
\fB\-indev\fR address
|
||||||
Set input drive and load an eventual ISO image. If the new input drive differs
|
Set input drive and load an eventual ISO image. If the new input drive differs
|
||||||
from -outdev then switch from growing to modifying. The same rules and
|
from -outdev then switch from growing to modifying or to blind growing.
|
||||||
restrictions apply as with -dev.
|
It depends on the setting of -grow_blindly which of both gets activated.
|
||||||
|
The same rules and restrictions apply as with -dev.
|
||||||
.TP
|
.TP
|
||||||
\fB\-outdev\fR address
|
\fB\-outdev\fR address
|
||||||
Set output drive and if it differs from the input drive then switch from
|
Set output drive and if it differs from the input drive then switch from
|
||||||
growing to modifying. Unlike -dev and -indev this action does not load a
|
growing to modifying or to blind growing. Unlike -dev and -indev this action
|
||||||
new ISO image. So it can be performed even if there are pending changes.
|
does not load a new ISO image. So it can be performed even if there are pending
|
||||||
|
changes.
|
||||||
.br
|
.br
|
||||||
-outdev can be performed without previous -dev or -indev. In that case an
|
-outdev can be performed without previous -dev or -indev. In that case an
|
||||||
empty ISO image with no changes pending is created. It can either be populated
|
empty ISO image with no changes pending is created. It can either be populated
|
||||||
@ -441,6 +465,21 @@ apply. See above paragraph "Libburn drives".
|
|||||||
An empty address string "" gives up the current output drive
|
An empty address string "" gives up the current output drive
|
||||||
without aquiring a new one. No writing is possible without an output drive.
|
without aquiring a new one. No writing is possible without an output drive.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-grow_blindly\fR "off"|predicted_nwa
|
||||||
|
If predicted_nwa is a non-negative number then perform blind growing rather
|
||||||
|
than modifying if -indev and -outdev are set to different drives.
|
||||||
|
"off" or "-1" switch to modifying, which is the default.
|
||||||
|
.br
|
||||||
|
predicted_nwa is the block address where the add-on session of blind
|
||||||
|
growing will finally end up. It is the responsibility of the user to ensure
|
||||||
|
this final position and the presence of the older sessions. Else the
|
||||||
|
overall ISO image will not be mountable or will produce read errors when
|
||||||
|
accessing file content. xorriso will write the session to the address
|
||||||
|
as obtained from examining -outdev and not necessarily to predicted_nwa.
|
||||||
|
.br
|
||||||
|
During a run of blind growing, the input drive gets released before output
|
||||||
|
begins. The output drive gets released when writing is done.
|
||||||
|
.TP
|
||||||
\fB\-load\fR entity id
|
\fB\-load\fR entity id
|
||||||
Load a particular (possibly outdated) ISO image from a -dev or -indev which
|
Load a particular (possibly outdated) ISO image from a -dev or -indev which
|
||||||
hosts more than one session. Usually all available sessions are shown with
|
hosts more than one session. Usually all available sessions are shown with
|
||||||
@ -514,11 +553,8 @@ If other file types collide then the setting of command
|
|||||||
decides.
|
decides.
|
||||||
.br
|
.br
|
||||||
Renaming of files has similar collision handling, but directories can only
|
Renaming of files has similar collision handling, but directories can only
|
||||||
be replaced, not merged. Directories can hardly collide on renaming because
|
be replaced, not merged. Note that -mv inserts the source objects into an
|
||||||
of the shell-like behavior of -mv: if a file object hits an existing directory
|
eventual existing target directory rather than attempting to replace it.
|
||||||
then it gets inserted rather than trying to replace that directory.
|
|
||||||
Nevertheless, the overwriting rules apply if an operation of xorriso
|
|
||||||
ever attempts to do such a replacement.
|
|
||||||
.PP
|
.PP
|
||||||
The commands in this section alter the ISO image and not the local filesystem.
|
The commands in this section alter the ISO image and not the local filesystem.
|
||||||
.TP
|
.TP
|
||||||
@ -606,6 +642,10 @@ is a directory then its whole sub tree is inserted into the ISO image.
|
|||||||
\fB\-map_single\fR disk_path iso_rr_path
|
\fB\-map_single\fR disk_path iso_rr_path
|
||||||
Like -map, but if disk_path is a directory then its sub tree is not inserted.
|
Like -map, but if disk_path is a directory then its sub tree is not inserted.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-map_l\fR disk_prefix iso_rr_prefix disk_path [***]
|
||||||
|
Performs -map with each of the disk_path arguments. iso_rr_path will be
|
||||||
|
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
|
||||||
|
.TP
|
||||||
\fB\-update\fR disk_path iso_rr_path
|
\fB\-update\fR disk_path iso_rr_path
|
||||||
Compare file object disk_path with file object iso_rr_path. If they do not
|
Compare file object disk_path with file object iso_rr_path. If they do not
|
||||||
match, then perform the necessary image manipulations to make iso_rr_path
|
match, then perform the necessary image manipulations to make iso_rr_path
|
||||||
@ -629,10 +669,10 @@ should always be the same as with the first adding of disk_path as iso_rr_path.
|
|||||||
.br
|
.br
|
||||||
If iso_rr_path does not exist yet, then it gets added. If disk_path does not
|
If iso_rr_path does not exist yet, then it gets added. If disk_path does not
|
||||||
exist, then iso_rr_path gets deleted.
|
exist, then iso_rr_path gets deleted.
|
||||||
.br
|
.TP
|
||||||
-update_r is also a convenient compromise between -add addressing and -cpr
|
\fB\-update_l\fR disk_prefix iso_rr_prefix disk_path [***]
|
||||||
addressing: Its semantics is similar to -add and thus avoids the pitfalls
|
Performs -update_r with each of the disk_path arguments. iso_rr_path will be
|
||||||
inherited from cp -r behavior. Its syntax resembles cp, though.
|
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
|
||||||
.TP
|
.TP
|
||||||
\fB\-cut_out\fR disk_path byte_offset byte_count iso_rr_path
|
\fB\-cut_out\fR disk_path byte_offset byte_count iso_rr_path
|
||||||
Map a byte interval of a regular disk file into a regular file in the ISO
|
Map a byte interval of a regular disk file into a regular file in the ISO
|
||||||
@ -794,21 +834,44 @@ where "A0" is year 2000, "B0" is 2010, etc.
|
|||||||
\fB\-alter_date_r\fR type timestring iso_rr_path [***]
|
\fB\-alter_date_r\fR type timestring iso_rr_path [***]
|
||||||
Like -alter_date but affecting all files below eventual directories.
|
Like -alter_date but affecting all files below eventual directories.
|
||||||
.TP
|
.TP
|
||||||
\fB\-find\fR iso_rr_path [-name pattern] [-type t] [-exec action [params]] --
|
\fB\-find\fR iso_rr_path [test [test ...]] [-exec action [params]] --
|
||||||
A very restricted substitute for shell command find in the ISO image.
|
A very restricted substitute for shell command find in the ISO image.
|
||||||
It performs an action on matching file objects at or below iso_rr_path.
|
It performs an action on matching file objects at or below iso_rr_path.
|
||||||
.br
|
.br
|
||||||
Optional -name pattern is not expanded but used for comparison with
|
Tests are optional. If they are omitted then action is applied to all file
|
||||||
the particular file names of the eventual directory tree underneath
|
objects. If tests are given then action is applied only if all of them
|
||||||
iso_rr_path. If no -name pattern is given, then any file name matches.
|
match the file object. Available tests are:
|
||||||
.br
|
.br
|
||||||
The optional -type test restricts matching to files of the given type:
|
-name pattern
|
||||||
|
.br
|
||||||
|
Pattern is not expanded but used for comparison with
|
||||||
|
the particular file names of the eventual directory tree underneath
|
||||||
|
iso_rr_path.
|
||||||
|
.br
|
||||||
|
-type type_letter
|
||||||
|
.br
|
||||||
|
matches only files files of the given type:
|
||||||
"block", "char", "dir", "pipe", "file", "link", "socket",
|
"block", "char", "dir", "pipe", "file", "link", "socket",
|
||||||
"Xotic" which eventually matches what is not matched by the other types.
|
"Xotic" which eventually matches what is not matched by the other types.
|
||||||
.br
|
.br
|
||||||
Only the first letter is interpreted. E.g.: -find / -type d
|
Only the first letter is interpreted. E.g.: -find / -type d
|
||||||
.br
|
.br
|
||||||
If a file matches then the action is performed. Default action is "echo",
|
-damaged
|
||||||
|
.br
|
||||||
|
matches only 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
|
||||||
|
-undamaged
|
||||||
|
.br
|
||||||
|
matches only files which use data blocks outside the areas marked as damaged.
|
||||||
|
.br
|
||||||
|
-lba_range start_lba block_count
|
||||||
|
.br
|
||||||
|
matches only files which use data blocks within the range of start_lba
|
||||||
|
and start_lba+block_count-1.
|
||||||
|
.br
|
||||||
|
Default action is "echo",
|
||||||
i.e. to print the address of the found file. Other actions are certain
|
i.e. to print the address of the found file. Other actions are certain
|
||||||
xorriso commands which get performed on the found files. These commands
|
xorriso commands which get performed on the found files. These commands
|
||||||
may have specific parameters. See also their particular descriptions.
|
may have specific parameters. See also their particular descriptions.
|
||||||
@ -866,6 +929,24 @@ E.g.:
|
|||||||
.br
|
.br
|
||||||
-find /uh/oh -name *private* -exec rm_r --
|
-find /uh/oh -name *private* -exec rm_r --
|
||||||
.br
|
.br
|
||||||
|
"report_damage" classifies files whether they hit a data block that is
|
||||||
|
marked as damaged. The result is printed together with the eventual address
|
||||||
|
of the first damaged byte, the maximum span of damages, file size, and the
|
||||||
|
path of the file.
|
||||||
|
.br
|
||||||
|
E.g.:
|
||||||
|
.br
|
||||||
|
-find / -damaged -exec report_damage
|
||||||
|
.br
|
||||||
|
"report_lba" prints files which are associated to image data blocks.
|
||||||
|
It tells the logical block address, the block number, the byte size,
|
||||||
|
and the path of each file. In future there may be reported more than one
|
||||||
|
line per file if the file is very large.
|
||||||
|
.br
|
||||||
|
E.g.:
|
||||||
|
.br
|
||||||
|
-find / -lba_range 302000 50000 -exec report_lba
|
||||||
|
.br
|
||||||
"find" performs another run of -find on the matching file address. It accepts
|
"find" performs another run of -find on the matching file address. It accepts
|
||||||
the same params as -find, except iso_rr_path.
|
the same params as -find, except iso_rr_path.
|
||||||
E.g.:
|
E.g.:
|
||||||
@ -899,13 +980,13 @@ Discard the manipulated ISO image. End program without loading a new image.
|
|||||||
\fB\-commit\fR
|
\fB\-commit\fR
|
||||||
Perform the write operation. Afterwards eventually make the
|
Perform the write operation. Afterwards eventually make the
|
||||||
-outdev the new -dev and load the image from there.
|
-outdev the new -dev and load the image from there.
|
||||||
Switch from eventual modifiying mode to growing mode.
|
Switch to growing mode.
|
||||||
(A subsequent -outdev will activate modification mode.)
|
(A subsequent -outdev will activate modification mode or blind growing.)
|
||||||
-commit is performed automatically at end of program if there
|
-commit is performed automatically at end of program if there
|
||||||
are uncommitted manipulations pending.
|
are uncommitted manipulations pending.
|
||||||
So, to perform a final write operation with no new -dev
|
So, to perform a final write operation with no new -dev
|
||||||
and no new loading of image, rather execute option -end.
|
and no new loading of image, rather execute option -end.
|
||||||
To suppress a final write, execute -rollback -end.
|
To suppress a final write, execute -rollback_end.
|
||||||
To eject outdev after write without new loading of image, use -commit_eject.
|
To eject outdev after write without new loading of image, use -commit_eject.
|
||||||
.br
|
.br
|
||||||
|
|
||||||
@ -943,7 +1024,7 @@ Defined modes are:
|
|||||||
.br
|
.br
|
||||||
"as_needed" cares for used CD-RW, DVD-RW and for used overwriteable media
|
"as_needed" cares for used CD-RW, DVD-RW and for used overwriteable media
|
||||||
by applying -blank "fast". It applies -format "full" to yet unformatted
|
by applying -blank "fast". It applies -format "full" to yet unformatted
|
||||||
DVD-RAM or BD-RE.
|
DVD-RAM or BD-RE. Other media or states are gracefully ignored.
|
||||||
.br
|
.br
|
||||||
"fast" and "all" make CD-RW and unformatted DVD-RW re-usable,
|
"fast" and "all" make CD-RW and unformatted DVD-RW re-usable,
|
||||||
or invalidate overwriteable ISO images.
|
or invalidate overwriteable ISO images.
|
||||||
@ -1140,6 +1221,9 @@ With setting "nondir", only directories are protected by such events, other
|
|||||||
existing file types get treated with -rm before the new file gets added.
|
existing file types get treated with -rm before the new file gets added.
|
||||||
Setting "on" allows automatic -rm_r. I.e. a non-directory can replace an
|
Setting "on" allows automatic -rm_r. I.e. a non-directory can replace an
|
||||||
existing directory and all its subordinates.
|
existing directory and all its subordinates.
|
||||||
|
.br
|
||||||
|
If restoring of files is enabled, then the overwrite rule applies to the
|
||||||
|
target file objects on disk as well, but "on" is downgraded to "nondir".
|
||||||
.TP
|
.TP
|
||||||
\fB\-split_size\fR number["k"|"m"]
|
\fB\-split_size\fR number["k"|"m"]
|
||||||
Set the threshold for automatic splitting of regular files. Such splitting
|
Set the threshold for automatic splitting of regular files. Such splitting
|
||||||
@ -1184,12 +1268,14 @@ User id to be used for all files when the new ISO tree gets written to media.
|
|||||||
\fB\-gid\fR gid
|
\fB\-gid\fR gid
|
||||||
Group id to be used for all files when the new ISO tree gets written to media.
|
Group id to be used for all files when the new ISO tree gets written to media.
|
||||||
.TP
|
.TP
|
||||||
\fB\-speed\fR number[k|m|c|d]
|
\fB\-speed\fR number[k|m|c|d|b]
|
||||||
Set the burn speed. Default is 0 = maximum speed.
|
Set the burn speed. Default is 0 = maximum speed.
|
||||||
Speed can be given in media dependent numbers or as a
|
Speed can be given in media dependent numbers or as a
|
||||||
desired throughput per second in MMC compliant kB (= 1000)
|
desired throughput per second in MMC compliant kB (= 1000)
|
||||||
or MB (= 1000 kB). Media x-speed factor can be set explicity
|
or MB (= 1000 kB). Media x-speed factor can be set explicity
|
||||||
by "c" for CD and "d" for DVD. Example speeds:
|
by "c" for CD, "d" for DVD, "b" for BD, "x" is optional.
|
||||||
|
.br
|
||||||
|
Example speeds:
|
||||||
.br
|
.br
|
||||||
706k = 706kB/s = 4c = 4xCD
|
706k = 706kB/s = 4c = 4xCD
|
||||||
.br
|
.br
|
||||||
@ -1202,8 +1288,15 @@ MMC drives usually activate their own idea of speed and take
|
|||||||
the speed value given by the burn program only as upper limit
|
the speed value given by the burn program only as upper limit
|
||||||
for their own decision.
|
for their own decision.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-stream_recording\fR "on"|"off"
|
||||||
|
Setting "on" tries to circumvent the management of defects on DVD-RAM and
|
||||||
|
DVD+RW. Defect management keeps partly damaged media usable. But it reduces
|
||||||
|
write speed to half nominal speed even if the media is in perfect shape.
|
||||||
|
For the case of flawless media, one may use -stream_recording "on" to get
|
||||||
|
full speed.
|
||||||
|
.TP
|
||||||
\fB\-dummy\fR "on"|"off"
|
\fB\-dummy\fR "on"|"off"
|
||||||
If "on" simulate burning or refuse with FAILURE event if
|
If "on" then simulate burning or refuse with FAILURE event if
|
||||||
no simulation is possible, do neither blank nor format.
|
no simulation is possible, do neither blank nor format.
|
||||||
.TP
|
.TP
|
||||||
\fB-fs\fR number["k"|"m"]
|
\fB-fs\fR number["k"|"m"]
|
||||||
@ -1337,10 +1430,11 @@ of xorriso begin. Only "-report_about" with dash "-" is recognized that way.
|
|||||||
.TP
|
.TP
|
||||||
\fB\-error_behavior\fR occasion behavior
|
\fB\-error_behavior\fR occasion behavior
|
||||||
Control the program behavior at problem event occasions.
|
Control the program behavior at problem event occasions.
|
||||||
|
For now this applies to occasions "image_loading" which is given while
|
||||||
|
an image tree is read from the input device, and to "file_extraction" which
|
||||||
|
is given with osirrox options like -extract.
|
||||||
.br
|
.br
|
||||||
For now this applies only to occasion "image_loading" which is given while
|
With "image_loading" there are three behaviors available:
|
||||||
an image tree is read from the input device. There are three behaviors
|
|
||||||
available:
|
|
||||||
.br
|
.br
|
||||||
"best_effort" goes on with reading after events with severity below FAILURE
|
"best_effort" goes on with reading after events with severity below FAILURE
|
||||||
if the threshold of option -abort_on allows this.
|
if the threshold of option -abort_on allows this.
|
||||||
@ -1350,6 +1444,11 @@ It issues an own FAILURE event.
|
|||||||
.br
|
.br
|
||||||
"fatal" acts like "failure" but issues the own event as FATAL.
|
"fatal" acts like "failure" but issues the own event as FATAL.
|
||||||
This is the default.
|
This is the default.
|
||||||
|
.br
|
||||||
|
With occasion "file_extraction" there are two behaviors:
|
||||||
|
.br
|
||||||
|
"keep" maintains incompletely extracted files on disk. "delete" removes
|
||||||
|
files which encountered errors during content extraction.
|
||||||
.TP
|
.TP
|
||||||
.B Dialog mode control:
|
.B Dialog mode control:
|
||||||
.TP
|
.TP
|
||||||
@ -1378,6 +1477,8 @@ If "on" then ask the user for "y" or "n":
|
|||||||
.br
|
.br
|
||||||
before deleting or overwriting any file in the ISO image,
|
before deleting or overwriting any file in the ISO image,
|
||||||
.br
|
.br
|
||||||
|
before overwriting any disk file during restore operations,
|
||||||
|
.br
|
||||||
before rolling back pending image changes,
|
before rolling back pending image changes,
|
||||||
.br
|
.br
|
||||||
before committing image changes to media,
|
before committing image changes to media,
|
||||||
@ -1406,6 +1507,21 @@ use -rollback to revoke the whole session.
|
|||||||
.TP
|
.TP
|
||||||
.B Drive and media related inquiry actions:
|
.B Drive and media related inquiry actions:
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-devices\fR
|
||||||
|
Show list of available MMC drives with the addresses of
|
||||||
|
their libburn standard device files.
|
||||||
|
.br
|
||||||
|
This is only possible when no ISO image changes are pending.
|
||||||
|
After this option was executed, there is no drive current
|
||||||
|
and no image loaded. Eventually one has to aquire a drive again.
|
||||||
|
.br
|
||||||
|
In order to be visible, a device has to offer rw-permissions
|
||||||
|
with its libburn standard device file. Thus it might be only the
|
||||||
|
.B superuser
|
||||||
|
who is able to see all drives.
|
||||||
|
.br
|
||||||
|
Drives which are occupied by other processes get not shown.
|
||||||
|
.TP
|
||||||
\fB\-toc\fR
|
\fB\-toc\fR
|
||||||
.br
|
.br
|
||||||
Show media specific table of content. This is the media session history,
|
Show media specific table of content. This is the media session history,
|
||||||
@ -1423,21 +1539,6 @@ to be the most recent real session then.
|
|||||||
Some read-only drives and media show no usable session history at all.
|
Some read-only drives and media show no usable session history at all.
|
||||||
Eventually option -rom_toc_scan might help.
|
Eventually option -rom_toc_scan might help.
|
||||||
.TP
|
.TP
|
||||||
\fB\-devices\fR
|
|
||||||
Show list of available MMC drives with the addresses of
|
|
||||||
their libburn standard device files.
|
|
||||||
.br
|
|
||||||
This is only possible when no ISO image changes are pending.
|
|
||||||
After this option was executed, there is no drive current
|
|
||||||
and no image loaded. Eventually one has to aquire a drive again.
|
|
||||||
.br
|
|
||||||
In order to be visible, a device has to offer rw-permissions
|
|
||||||
with its libburn standard device file. Thus it might be only the
|
|
||||||
.B superuser
|
|
||||||
who is able to see all drives.
|
|
||||||
.br
|
|
||||||
Drives which are occupied by other processes get not shown.
|
|
||||||
.TP
|
|
||||||
\fB\-print_size\fR
|
\fB\-print_size\fR
|
||||||
Print the foreseeable consumption of 2048 byte blocks
|
Print the foreseeable consumption of 2048 byte blocks
|
||||||
by next -commit. This can last a while as a -commit gets
|
by next -commit. This can last a while as a -commit gets
|
||||||
@ -1589,6 +1690,203 @@ Like -compare but working recursively. I.e. all file objects below both
|
|||||||
addresses get compared whether they have counterparts below the other address
|
addresses get compared whether they have counterparts below the other address
|
||||||
and whether both counterparts match.
|
and whether both counterparts match.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-compare_l\fR disk_prefix iso_rr_prefix disk_path [***]
|
||||||
|
Perform -compare_r with each of the disk_path arguments. iso_rr_path will be
|
||||||
|
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
|
||||||
|
.TP
|
||||||
|
.B Evaluation of readability and recovery:
|
||||||
|
.PP
|
||||||
|
It is not uncommon that optical media produce read errors. The reasons may be
|
||||||
|
various and get obscured by error correction which is performed by the drives
|
||||||
|
and based on extra data on the media. If a drive returns data then one can
|
||||||
|
quite trust that they are valid. But at some degree of read problems the
|
||||||
|
correction will fail and the drive is supposed to indicate error.
|
||||||
|
.br
|
||||||
|
xorriso can scan the media for readable data blocks, classify them according
|
||||||
|
to their read speed, save them to a file, and keep track of successfuly saved
|
||||||
|
blocks for further tries on the same media.
|
||||||
|
.TP
|
||||||
|
\fB\-check_media\fR [option [option ...]] --
|
||||||
|
Try to read data blocks from the indev drive, eventually copy them to a
|
||||||
|
disk file, and finally report about the encountered quality. Several options
|
||||||
|
may be used to modify the default behavior.
|
||||||
|
.br
|
||||||
|
An option consists of a keyword, a "=" character, and a value.
|
||||||
|
.br
|
||||||
|
Default is:
|
||||||
|
.br
|
||||||
|
use=indev what=tracks min_lba=-1 max_lba=-1 retry=default
|
||||||
|
time_limit=28800 item_limit=100000
|
||||||
|
.br
|
||||||
|
abort_file=/var/opt/xorriso/do_abort_check_media
|
||||||
|
.br
|
||||||
|
data_to='' sector_map='' map_with_volid=off patch_lba0=off report=blocks
|
||||||
|
.br
|
||||||
|
Non-default settings:
|
||||||
|
.br
|
||||||
|
"use=outdev" reads from the output drive instead of the input drive. This
|
||||||
|
avoids loading the ISO image tree from media.
|
||||||
|
.br
|
||||||
|
"what=disc" scans the payload range of a media without respecting track gaps.
|
||||||
|
.br
|
||||||
|
"min_lba=" omits all blocks with addresses lower than the option value.
|
||||||
|
.br
|
||||||
|
"max_lba=" switches to what=disc and omits all blocks above its option value.
|
||||||
|
.br
|
||||||
|
"retry=on" forces read retries with single blocks when the normal read
|
||||||
|
chunk produces a read error. By default, retries are only enabled with CD
|
||||||
|
media. "retry=off" forbits retries for all media types.
|
||||||
|
.br
|
||||||
|
"abort_file=" gives the path of the file which may abort a scan run. Abort
|
||||||
|
happens if the file exists and its mtime is not older than the start time
|
||||||
|
of the run. Use shell command "touch" to trigger this.
|
||||||
|
Other than an aborted program run, this will report the tested and untested
|
||||||
|
blocks and go on with running xorriso.
|
||||||
|
.br
|
||||||
|
"time_limit=" gives the number of seconds after which the scan shall be
|
||||||
|
aborted. This is useful for unattended scanning of media which may else
|
||||||
|
overwork the drive in its effort to squeeze out some readable blocks.
|
||||||
|
Abort may be delayed by the drive gnawing on the last single read operation.
|
||||||
|
Value -1 means unlimited time.
|
||||||
|
.br
|
||||||
|
"item_limit=" gives the number of report list items after which to abort.
|
||||||
|
Value -1 means unlimited item number.
|
||||||
|
.br
|
||||||
|
"data_to=" copies the valid blocks to the file which is given as option value.
|
||||||
|
.br
|
||||||
|
"sector_map=" tries to read the file given by option value as
|
||||||
|
sector bitmap and to store such a map file after the scan run.
|
||||||
|
The bitmap tells which blocks have been read successfully in previous runs.
|
||||||
|
It allows to do several scans on the same media, eventually with intermediate
|
||||||
|
eject, in order to collect readable blocks whenever the drive is lucky enough
|
||||||
|
to produce them. The stored file contains a human readable TOC of tracks
|
||||||
|
and their start block addresses, followed by binary bitmap data.
|
||||||
|
.br
|
||||||
|
"map_with_volid=on" examines tracks whether they are ISO images and eventually
|
||||||
|
prints their volume ids into the human readable TOC of sector_map=.
|
||||||
|
.br
|
||||||
|
"patch_lba0=on" transfers within the data_to= file a copy of the currently
|
||||||
|
loaded session head to the start of that file and patches it to be valid
|
||||||
|
at that position.
|
||||||
|
This makes the loaded session the default session of the image file
|
||||||
|
when it gets mounted or loaded as stdio: drive. But it usually makes
|
||||||
|
the original session 1 inaccessible.
|
||||||
|
.br
|
||||||
|
"patch_lba0=force" performs "patch_lba0=on" even if xorriso believes
|
||||||
|
that the copied data are not valid.
|
||||||
|
.br
|
||||||
|
"patch_lba0=" may also bear a number. If it is 32 or higher it is taken as
|
||||||
|
start address of the session to be copied. In this case it is not necessary to
|
||||||
|
have an -indev and a loaded image. ":force" may be appended after the number.
|
||||||
|
.br
|
||||||
|
"use=sector_map" does not read any media but loads the file given by option
|
||||||
|
sector_map= and processes this virtual outcome.
|
||||||
|
.br
|
||||||
|
The result list tells intervals of 2 KiB blocks with start address, number
|
||||||
|
of blocks and quality. Qualities which begin with "+" are
|
||||||
|
supposed to be valid readable data. Qualities with "-" are no valid data.
|
||||||
|
.br
|
||||||
|
"report=files" lists the files which use damaged blocks (not with use=outdev).
|
||||||
|
The format is like with find -exec report_damage.
|
||||||
|
.br
|
||||||
|
"report=blocks_files" first lists damaged blocks and then affected files.
|
||||||
|
.TP
|
||||||
|
.B osirrox restore options:
|
||||||
|
.PP
|
||||||
|
Normally xorriso only writes to disk files which were given as stdio:
|
||||||
|
pseudo-drives or as log files.
|
||||||
|
But its alter ego, osirrox, is able to extract file objects
|
||||||
|
from ISO images and to create, overwrite, or delete file objects on disk.
|
||||||
|
.br
|
||||||
|
Disk file exclusions by -not_mgt, -not_leaf, -not_paths apply.
|
||||||
|
If disk file objects already exist then the settings of -overwrite and
|
||||||
|
-reassure apply. But -overwrite "on" only triggers the behavior
|
||||||
|
of -overwrite "nondir". I.e. directories cannot be deleted.
|
||||||
|
.br
|
||||||
|
Access permissions of files in the ISO image do not restrict restoring.
|
||||||
|
The directory permissions on disk have to allow rwx.
|
||||||
|
.TP
|
||||||
|
\fB\-osirrox\fR "on"|"device_files"|"off"[:option:...]
|
||||||
|
Setting "off" disables disk filesystem manipulations. This is the default
|
||||||
|
unless the program was started with leafname "osirrox". Elsewise
|
||||||
|
the capability to restore files can be enabled explicitly by -osirrox "on".
|
||||||
|
.br
|
||||||
|
To enable restoring of special files by "device_files" is potentially
|
||||||
|
dangerous.
|
||||||
|
The meaning of the number st_rdev (see man 2 stat) depends much on the
|
||||||
|
operating system. Best is to restore device files only to the same system
|
||||||
|
from where they were copied. If not enabled, device files in the ISO image
|
||||||
|
are ignored during restore operations.
|
||||||
|
.br
|
||||||
|
Due to a bug of previous versions, device files from previous sessions might
|
||||||
|
have been altered to major=0, minor=1. So this combination does not get
|
||||||
|
restored.
|
||||||
|
.br
|
||||||
|
Option "concat_split_on" is default. It enables restoring of split file
|
||||||
|
directories as data files if the directory contains a complete collection
|
||||||
|
of -cut_out part files. With option "concat_split_off" such directories are
|
||||||
|
handled like any other ISO image directory.
|
||||||
|
.br
|
||||||
|
Option "auto_chmod_off" is default. If "auto_chmod_on" is set then access
|
||||||
|
restrictions for disk directories get circumvented if those directories
|
||||||
|
are owned by the effective user who runs xorriso. This happens by temporarily
|
||||||
|
granting rwx permission to the owner. It will not work with ACL restrictions.
|
||||||
|
.TP
|
||||||
|
\fB\-extract\fR iso_rr_path disk_path
|
||||||
|
Restore the file objects at and underneath iso_rr_path to their corresponding
|
||||||
|
addresses at and underneath disk_path.
|
||||||
|
This is the inverse of -map or -update_r.
|
||||||
|
.br
|
||||||
|
If iso_rr_path is a directory and disk_path is an existing directory then
|
||||||
|
both trees will be merged. Directory attributes get extracted only if the disk
|
||||||
|
directory is newly created by the restore operation.
|
||||||
|
Disk files get removed only if they are to be replaced
|
||||||
|
by file objects from the ISO image.
|
||||||
|
.br
|
||||||
|
As many attributes as possible are copied together with restored
|
||||||
|
file objects.
|
||||||
|
.TP
|
||||||
|
\fB\-extract_single\fR iso_rr_path disk_path
|
||||||
|
Like -extract, but if iso_rr_path is a directory then its sub tree gets not
|
||||||
|
restored.
|
||||||
|
.TP
|
||||||
|
\fB\-extract_l\fR iso_rr_prefix disk_prefix iso_rr_path [***]
|
||||||
|
Performs -extract with each of the iso_rr_path arguments. disk_path will be
|
||||||
|
composed from iso_rr_path by replacing iso_rr_prefix by disk_prefix.
|
||||||
|
.TP
|
||||||
|
\fB\-cpx\fR iso_rr_path [***] disk_path
|
||||||
|
Extract single leaf file objects from the ISO image and store them under
|
||||||
|
the address given by disk_path. If more then one iso_rr_path is given then
|
||||||
|
disk_path must be a directory or non-existent. In the latter case it gets
|
||||||
|
created and the extracted files get installed in it with the same leafnames.
|
||||||
|
.br
|
||||||
|
Missing directory components in disk_path will get created, if possible.
|
||||||
|
.br
|
||||||
|
Directories are allowed as iso_rr_path only with -osirrox "concat_split_on"
|
||||||
|
and only if they actually represent a complete collection of -cut_out split
|
||||||
|
file parts.
|
||||||
|
.TP
|
||||||
|
\fB\-cpax\fR iso_rr_path [***] disk_path
|
||||||
|
Like -cpx but restoring mtime, atime as in ISO image and trying to set
|
||||||
|
ownership and group as in ISO image.
|
||||||
|
.TP
|
||||||
|
\fB\-cp_rx\fR iso_rr_path [***] disk_path
|
||||||
|
Like -cpx but also extracting whole directory trees from the ISO image.
|
||||||
|
.br
|
||||||
|
The resulting disk paths are determined as with shell command cp -r :
|
||||||
|
If disk_path is an existing directory then the trees will be inserted or merged
|
||||||
|
underneath this directory and will keep their leaf names. The ISO directory "/"
|
||||||
|
has no leaf name and thus gets mapped directly to disk_path.
|
||||||
|
.TP
|
||||||
|
\fB\-cp_rax\fR iso_rr_path [***] disk_path
|
||||||
|
Like -cp_rx but restoring mtime, atime as in ISO image and trying to set
|
||||||
|
ownership and group as in ISO image.
|
||||||
|
.TP
|
||||||
|
\fB\-paste_in\fR iso_rr_path disk_path byte_offset byte_count
|
||||||
|
Read the content of a ISO data file and write it into a data file on disk
|
||||||
|
beginning at the byte_offset. Write at most byte_count bytes.
|
||||||
|
This is the inverse of option -cut_out.
|
||||||
|
.TP
|
||||||
.B Command compatibility emulations:
|
.B Command compatibility emulations:
|
||||||
.PP
|
.PP
|
||||||
Writing of ISO 9660 on CD is traditionally done by program mkisofs
|
Writing of ISO 9660 on CD is traditionally done by program mkisofs
|
||||||
@ -1596,25 +1894,22 @@ as ISO 9660 image producer and cdrecord as burn program.
|
|||||||
xorriso does not strive for their comprehensive emulation.
|
xorriso does not strive for their comprehensive emulation.
|
||||||
Nevertheless it is ready to perform some of its core tasks under control
|
Nevertheless it is ready to perform some of its core tasks under control
|
||||||
of commands which in said programs trigger comparable actions.
|
of commands which in said programs trigger comparable actions.
|
||||||
The scope is for now only a single first data track to be written to blank or
|
|
||||||
overwriteable media. If possible the media will get closed afterwards.
|
|
||||||
Multi-session is yet only possible via xorriso's own commands.
|
|
||||||
.TP
|
.TP
|
||||||
\fB\-as\fR personality option [options] --
|
\fB\-as\fR personality option [options] --
|
||||||
.br
|
.br
|
||||||
Performs its variable length option list as sparse emulation of the program
|
Performs its variable length option list as sparse emulation of the program
|
||||||
depicted by the personality word. This is only allowed if no image changes
|
depicted by the personality word.
|
||||||
are pending. The input drive is given up.
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
Personality "\fBmkisofs\fR" accepts the options listed with:
|
Personality "\fBmkisofs\fR" accepts the options listed with:
|
||||||
.br
|
.br
|
||||||
-as mkisofs -help --
|
-as mkisofs -help --
|
||||||
.br
|
.br
|
||||||
Among them: -R (always on), -J, -graft-points, -o, -path-list, -m, -print-size,
|
Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list,
|
||||||
-V, -v, -version, pathspecs as with xorriso -add. A lot of options are not
|
-f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points,
|
||||||
supported and lead to failure of the mkisofs emulation. Some are ignored,
|
pathspecs as with xorriso -add.
|
||||||
but better do not rely on this tolerance.
|
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
|
.br
|
||||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||||
are interpreted differently than with xorriso option -add. Directories get
|
are interpreted differently than with xorriso option -add. Directories get
|
||||||
@ -1625,10 +1920,11 @@ Other than with the "cdrecord" personality there is no automatic -commit at
|
|||||||
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||||
-quiet (= "SORRY") persist. The output file, eventually chosen with -o,
|
-quiet (= "SORRY") persist. The output file, eventually chosen with -o,
|
||||||
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
|
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
|
.br
|
||||||
If no output file was chosen before or during a "mkisofs" option list, then
|
If pathspecs are given and if no output file was chosen before or during the
|
||||||
standard output (-outdev "-") will get into effect before pathspecs get
|
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
|
||||||
added. If -o points to a regular file, then it will be truncated to 0 bytes
|
If -o points to a regular file, then it will be truncated to 0 bytes
|
||||||
when finally writing begins. This truncation does not happen if the drive
|
when finally writing begins. This truncation does not happen if the drive
|
||||||
is chosen by xorriso options before or after -as mkisofs.
|
is chosen by xorriso options before or after -as mkisofs.
|
||||||
Directories and symbolic links are no valid -o targets.
|
Directories and symbolic links are no valid -o targets.
|
||||||
@ -1637,20 +1933,33 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
|
|||||||
arguments or if other start arguments pointed the output drive to
|
arguments or if other start arguments pointed the output drive to
|
||||||
standard output.
|
standard output.
|
||||||
.br
|
.br
|
||||||
Personalites "\fBgenisoimage\fR" and "\fBgenisofs\fR"
|
Personalites "\fBxorrisofs\fR", "\fBgenisoimage\fR", and "\fBgenisofs\fR"
|
||||||
are aliases for "mkisofs".
|
are aliases for "mkisofs".
|
||||||
.br
|
.br
|
||||||
|
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
|
||||||
|
"mkisofs", or "genisoimage", then it automatically prepends -as "genisofs"
|
||||||
|
to the command line arguments. I.e. all arguments will be interpreted mkisofs
|
||||||
|
style until "--" is encountered. From then on, options are interpreted
|
||||||
|
as xorriso options.
|
||||||
|
.br
|
||||||
|
|
||||||
Personality "\fBcdrecord\fR" accepts the options listed with:
|
Personality "\fBcdrecord\fR" accepts the options listed with:
|
||||||
.br
|
.br
|
||||||
-as cdrecord -help --
|
-as cdrecord -help --
|
||||||
.br
|
.br
|
||||||
Among them: -v, dev=, speed=, blank=, fs=, -eject, -atip, padsize=,
|
Among them: -v, dev=, speed=, blank=, fs=, -eject, -atip, padsize=, tsize=,
|
||||||
|
-isosize, -multi, -msinfo, --grow_overwriteable_iso, write_start_address=,
|
||||||
track source file path or "-" for standard input as track source.
|
track source file path or "-" for standard input as track source.
|
||||||
.br
|
.br
|
||||||
It ignores most other options of cdrecord and cdrskin but refuses on
|
It ignores most other options of cdrecord and cdrskin but refuses on
|
||||||
-audio, -scanbus, -multi, -msinfo, --grow_overwriteable_iso,
|
-audio, -scanbus, and on blanking modes unknown to xorriso.
|
||||||
and on blanking modes unknown to xorriso.
|
.br
|
||||||
|
The scope is only a single data track per session to be written
|
||||||
|
to blank, overwriteable, or appendable media. The media gets closed if
|
||||||
|
closing is applicable and not option -multi is present.
|
||||||
|
.br
|
||||||
|
An eventually aquired input drive is given up.
|
||||||
|
This is only allowed if no image changes are pending.
|
||||||
.br
|
.br
|
||||||
dev= must be given as xorriso device address. Adresses like 0,0,0 or ATA:1,1,0
|
dev= must be given as xorriso device address. Adresses like 0,0,0 or ATA:1,1,0
|
||||||
are not supported.
|
are not supported.
|
||||||
@ -1658,9 +1967,37 @@ are not supported.
|
|||||||
If a track source is given, then an automatic -commit happens at the end of
|
If a track source is given, then an automatic -commit happens at the end of
|
||||||
the "cdrecord" option list.
|
the "cdrecord" option list.
|
||||||
.br
|
.br
|
||||||
|
--grow_overwriteable_iso enables emulation of multi-session on overwriteable
|
||||||
|
media. To enable emulation of a TOC, the first session needs -C 0,32 with
|
||||||
|
-as mkisofs (but no -M) and --grow_overwriteable_iso write_start_address=32s
|
||||||
|
with -as cdrecord.
|
||||||
|
.br
|
||||||
A much more elaborate libburn based cdrecord emulator is the program cdrskin.
|
A much more elaborate libburn based cdrecord emulator is the program cdrskin.
|
||||||
.br
|
.br
|
||||||
Personalites "\fBwodim\fR" and "\fBcdrskin\fR" are aliases for "cdrecord".
|
Personalites "\fBxorrecord\fR", "\fBwodim\fR", and "\fBcdrskin\fR" are aliases
|
||||||
|
for "cdrecord".
|
||||||
|
.br
|
||||||
|
If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
|
||||||
|
"cdrecord", or "wodim", then it automatically prepends -as "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.
|
||||||
|
.TP
|
||||||
|
\fB\-pacifier\fR behavior_code
|
||||||
|
Control behavior of UPDATE pacifiers during write operations.
|
||||||
|
The following behavior codes are defined:
|
||||||
|
.br
|
||||||
|
"xorriso" is the default format:
|
||||||
|
.br
|
||||||
|
Writing: sector XXXXX of YYYYYY [fifo active, nn% fill]
|
||||||
|
.br
|
||||||
|
"cdrecord" looks like:
|
||||||
|
.br
|
||||||
|
X of Y MB written (fifo nn%) [buf mmm%]
|
||||||
|
.br
|
||||||
|
"mkisofs"
|
||||||
|
.br
|
||||||
|
nn% done, estimate finish Tue Jul 15 20:13:28 2008
|
||||||
.TP
|
.TP
|
||||||
.B Scripting, dialog and program control features:
|
.B Scripting, dialog and program control features:
|
||||||
.TP
|
.TP
|
||||||
@ -1800,15 +2137,19 @@ Manipulating an existing ISO image on the same media
|
|||||||
.br
|
.br
|
||||||
Copy modified ISO image from one media to another
|
Copy modified ISO image from one media to another
|
||||||
.br
|
.br
|
||||||
Write a ISO image into a pipe (single-session only)
|
Write a ISO image into a pipe
|
||||||
.br
|
.br
|
||||||
Perform a single session run as of cdrtools traditions
|
Perform multi-session runs as of cdrtools traditions
|
||||||
|
.br
|
||||||
|
Let xorriso work underneath growisofs
|
||||||
.br
|
.br
|
||||||
Adjust thresholds for verbosity, exit value and program abort
|
Adjust thresholds for verbosity, exit value and program abort
|
||||||
.br
|
.br
|
||||||
Examples of input timestrings
|
Examples of input timestrings
|
||||||
.br
|
.br
|
||||||
Incremental backup of a few directory trees
|
Incremental backup of a few directory trees
|
||||||
|
.br
|
||||||
|
Restore directory trees from a particular ISO session to disk
|
||||||
.SS
|
.SS
|
||||||
.B As superuser learn about available drives
|
.B As superuser learn about available drives
|
||||||
Consider to give rw permissions to those users or groups
|
Consider to give rw permissions to those users or groups
|
||||||
@ -1948,21 +2289,67 @@ first and only session to the output drive.
|
|||||||
.br
|
.br
|
||||||
-commit -eject all
|
-commit -eject all
|
||||||
.SS
|
.SS
|
||||||
.B Write a ISO image into a pipe (single-session only)
|
.B Write a ISO image into a pipe
|
||||||
\fB$\fR xorriso -outdev - \\
|
\fB$\fR xorriso -outdev - \\
|
||||||
.br
|
.br
|
||||||
...
|
...
|
||||||
.br
|
.br
|
||||||
| gzip >image.iso.gz
|
| gzip >image.iso.gz
|
||||||
.SS
|
.SS
|
||||||
.B Perform a single session run as of cdrtools traditions
|
.B Perform multi-session runs as of cdrtools traditions
|
||||||
This shall illustrate how xorriso can act in either role.
|
|
||||||
Between both processes there can be performed arbitrary transportation
|
Between both processes there can be performed arbitrary transportation
|
||||||
or filtering.
|
or filtering.
|
||||||
.br
|
.br
|
||||||
\fB$\fR xorriso -as mkisofs -J -R /home/prepared_for_iso/tree | \\
|
The first session is written like this:
|
||||||
.br
|
.br
|
||||||
xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -eject -
|
\fB$\fR xorriso -as mkisofs prepared_for_iso/tree1 | \\
|
||||||
|
.br
|
||||||
|
xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject -
|
||||||
|
.br
|
||||||
|
Follow-up sessions are written like this:
|
||||||
|
.br
|
||||||
|
\fB$\fR m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
|
||||||
|
.br
|
||||||
|
\fB$\fR xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
|
||||||
|
.br
|
||||||
|
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.
|
||||||
|
.br
|
||||||
|
This example works for multi-session media only.
|
||||||
|
Add cdrskin option --grow_overwriteable_iso to all -as cdrecord runs
|
||||||
|
in order to enable multi-session emulation on overwriteable media.
|
||||||
|
.SS
|
||||||
|
.B Let xorriso work underneath growisofs
|
||||||
|
growisofs expects an ISO formatter program which understands options -C and
|
||||||
|
-M. If xorriso gets started by name "xorrisofs" then it is suitable for that.
|
||||||
|
.br
|
||||||
|
\fB$\fR export MKISOFS="xorrisofs"
|
||||||
|
.br
|
||||||
|
\fB$\fR growisofs -Z /dev/dvd /some/files
|
||||||
|
.br
|
||||||
|
\fB$\fR growisofs -M /dev/dvd /more/files
|
||||||
|
.br
|
||||||
|
If no "xorrisofs" is available on your system, then you will have to create
|
||||||
|
a link pointing to the xorriso binary and tell growisofs to use it. E.g. by:
|
||||||
|
.br
|
||||||
|
\fB$\fR ln -s $(which xorriso) "$HOME/xorrisofs"
|
||||||
|
.br
|
||||||
|
\fB$\fR export MKISOFS="$HOME/xorrisofs"
|
||||||
|
.br
|
||||||
|
One may quit mkisofs emulation by argument "--" and make
|
||||||
|
use of all xorriso commands. growisofs dislikes options which
|
||||||
|
start with "-o" but -outdev must be set to "-".
|
||||||
|
So use "outdev" instead:
|
||||||
|
.br
|
||||||
|
\fB$\fR growisofs -Z /dev/dvd -- outdev - -update_r /my/files /files
|
||||||
|
.br
|
||||||
|
\fB$\fR growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
|
||||||
|
.br
|
||||||
|
growisofs has excellent burn capabilities with DVD and BD.
|
||||||
|
It does not emulate session history on overwriteable media, though.
|
||||||
.SS
|
.SS
|
||||||
.B Adjust thresholds for verbosity, exit value and program abort
|
.B Adjust thresholds for verbosity, exit value and program abort
|
||||||
Be quite verbous, exit 32 if severity "FAILURE" was encountered,
|
Be quite verbous, exit 32 if severity "FAILURE" was encountered,
|
||||||
@ -2035,21 +2422,11 @@ An update run will probably save no time but last longer than a full backup.
|
|||||||
Another good reason may be given if read speed is much higher than write speed.
|
Another good reason may be given if read speed is much higher than write speed.
|
||||||
.br
|
.br
|
||||||
With \fBmount\fR option \fB"sbsector="\fR it is possible to access the session
|
With \fBmount\fR option \fB"sbsector="\fR it is possible to access the session
|
||||||
trees which represent the older backup versions. Multi-session media and
|
trees which represent the older backup versions. With CD media, Linux mount
|
||||||
most overwriteable media written by xorriso can tell
|
accepts session numbers directly by its option "session=".
|
||||||
the sbsector by xorriso option -toc.
|
|
||||||
.br
|
.br
|
||||||
Another way to keep track of incremental sessions is to
|
Multi-session media and most overwriteable media written by xorriso can tell
|
||||||
set before writing a suitable path for xorriso option -session_log where
|
the sbsector of a session by xorriso option -toc.
|
||||||
the sbsector number gets recorded as the second word in each line.
|
|
||||||
.br
|
|
||||||
With CD media, Linux mount accepts session numbers directly by its option
|
|
||||||
"session=".
|
|
||||||
.br
|
|
||||||
\fBDo not write more than about 50 sessions\fR to one multi-session media.
|
|
||||||
Theoretical limits are higher but in practice the media deteriorate more early.
|
|
||||||
It might also be that your operating system has a session limit with mount.
|
|
||||||
An overview of sessions is given by option -toc.
|
|
||||||
.br
|
.br
|
||||||
Sessions on multi-session media are separated by several MB of unused blocks.
|
Sessions on multi-session media are separated by several MB of unused blocks.
|
||||||
So with small sessions the payload capacity can become substantially lower
|
So with small sessions the payload capacity can become substantially lower
|
||||||
@ -2063,16 +2440,47 @@ get endangered by the new write operation, while the newest backup is
|
|||||||
stored safely on a different media.
|
stored safely on a different media.
|
||||||
Always have a blank media ready to perform a full backup in case the update
|
Always have a blank media ready to perform a full backup in case the update
|
||||||
attempt fails due to insufficient remaining capacity.
|
attempt fails due to insufficient remaining capacity.
|
||||||
|
.SS
|
||||||
|
.B Restore directory trees from a particular ISO session to disk
|
||||||
|
This is an alternative to mounting the media and using normal file operations.
|
||||||
.br
|
.br
|
||||||
If you have enough re-useable media for a round-robin scheme then better do
|
First check which backup sessions are on the media:
|
||||||
full backups with blank media each time. Blanking can be achieved by
|
|
||||||
either a separate run:
|
|
||||||
.br
|
.br
|
||||||
\fB$\fR xorriso -outdev /dev/sr0 -blank as_needed -eject all
|
\fB$\fR xorriso -outdev /dev/sr0 -toc
|
||||||
.br
|
.br
|
||||||
or in the update run by using option -blank "as_needed" before
|
Then load the desired session and copy the file trees to disk.
|
||||||
option -update_r.
|
Avoid to eventually create /home/thomas/restored without rwx-permission.
|
||||||
.br
|
.br
|
||||||
|
\fB$\fR xorriso -load volid PROJECTS_MAIL_2008_06_19_205956 \\
|
||||||
|
.br
|
||||||
|
-indev /dev/sr0 \\
|
||||||
|
.br
|
||||||
|
-osirrox on:auto_chmod_on \\
|
||||||
|
.br
|
||||||
|
-chmod u+rwx / -- \\
|
||||||
|
.br
|
||||||
|
-extract /open_source_projects \\
|
||||||
|
.br
|
||||||
|
/home/thomas/restored/open_source_projects \\
|
||||||
|
.br
|
||||||
|
-extract /personal_mail /home/thomas/restored/personal_mail
|
||||||
|
.br
|
||||||
|
-rollback_end
|
||||||
|
.SS
|
||||||
|
.B Try to retrieve as many blocks as possible from a damaged media
|
||||||
|
.br
|
||||||
|
\fB$\fR xorriso -abort_on NEVER -indev /dev/sr0 \\
|
||||||
|
.br
|
||||||
|
-check_media time_limit=1800 report=blocks_files \\
|
||||||
|
.br
|
||||||
|
data_to="$HOME"/dvd_copy sector_map="$HOME"/dvd_copy.map --
|
||||||
|
.br
|
||||||
|
This can be repeated several times, eventually with -eject or with other
|
||||||
|
-indev drives. See the human readable part of "$HOME"/dvd_copy.map for
|
||||||
|
addresses which can be used on "$HOME"/dvd_copy with mount option sbsector=.
|
||||||
|
.br
|
||||||
|
If you want to make the newest session the default mount session, you
|
||||||
|
may add option "patch_lba0=on" to the final -check_media run.
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.SS
|
.SS
|
||||||
.B Startup files:
|
.B Startup files:
|
||||||
@ -2090,6 +2498,12 @@ to read and execute lines from the following files:
|
|||||||
.br
|
.br
|
||||||
The files are read in the sequence given above, but none of them is required
|
The files are read in the sequence given above, but none of them is required
|
||||||
for xorriso to function properly.
|
for xorriso to function properly.
|
||||||
|
.TP
|
||||||
|
.B Runtime control files:
|
||||||
|
.br
|
||||||
|
The default setting of -check_media abort_file= is:
|
||||||
|
.br
|
||||||
|
/var/opt/xorriso/do_abort_check_media
|
||||||
.br
|
.br
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.TP
|
.TP
|
||||||
|
3319
xorriso/xorriso.c
3319
xorriso/xorriso.c
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,17 @@ struct XorrisO;
|
|||||||
/* --------------------- Fundamental Management ------------------- */
|
/* --------------------- Fundamental Management ------------------- */
|
||||||
|
|
||||||
/* Create a new xorriso object and tell it the program name to be used
|
/* Create a new xorriso object and tell it the program name to be used
|
||||||
with messages.
|
with messages and for decision of special behavior.
|
||||||
|
@param xorriso returns the newly created XorrisO object
|
||||||
|
@param progname typically argv[0] of main(). Some leafnames of the progname
|
||||||
|
path have special meaning and trigger special behavior:
|
||||||
|
"osirrox" allows image-to-disk copying: -osirrox "on"
|
||||||
|
"xorrisofs" activates permanent mkisofs emulation
|
||||||
|
"genisofs" alias of "xorrisofs"
|
||||||
|
"mkisofs" alias of "xorrisofs"
|
||||||
|
"genisoimage" alias of "xorrisofs"
|
||||||
|
@parm flag unused yet, submit 0
|
||||||
|
@return >0 success , <=0 failure, no object created
|
||||||
*/
|
*/
|
||||||
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
|
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
|
||||||
|
|
||||||
@ -72,6 +82,13 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
|||||||
int error_code, char msg_text[], int os_errno,
|
int error_code, char msg_text[], int os_errno,
|
||||||
char severity[], int flag);
|
char severity[], int flag);
|
||||||
|
|
||||||
|
/** Alternative call interface of Xorriso_msgs_submit with void* instead
|
||||||
|
of struct XorrisO*
|
||||||
|
*/
|
||||||
|
int Xorriso_msgs_submit_void(void *xorriso,
|
||||||
|
int error_code, char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Evaluate an advise whether to abort or whether to go on with option
|
/** Evaluate an advise whether to abort or whether to go on with option
|
||||||
processing. This should be called after any option function was processed.
|
processing. This should be called after any option function was processed.
|
||||||
@ -133,6 +150,104 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* The outlist stack allows to redirect the info and result messages from
|
||||||
|
their normal channels into a pair of string lists which can at some
|
||||||
|
later time be retrieved by the application.
|
||||||
|
These redirection caches can be stacked to allow stacked applications.
|
||||||
|
xorriso itself uses them for internal purposes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* A list item able of forming double chained lists */
|
||||||
|
struct Xorriso_lsT;
|
||||||
|
|
||||||
|
/** Maximum number of stacked redirections */
|
||||||
|
#define Xorriso_max_outlist_stacK 32
|
||||||
|
|
||||||
|
/** Enable a new redirection of info and/or result channel. The normal message
|
||||||
|
output and eventual older redirections will not see new messages until
|
||||||
|
the redirection is ended by a call to Xorriso_pull_outlists() with the
|
||||||
|
stack_handle value returned by this call.
|
||||||
|
Redirected output is not written to the files of Xorriso_option_logfile()
|
||||||
|
and the Xorriso_option_pkt_output() protocol will not be applied.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param stack_handle returns an id number which is unique as long as
|
||||||
|
its redirection is stacked. It may be re-used after
|
||||||
|
its redirection was pulled from the stack.
|
||||||
|
@param flag Bitfield for control purposes
|
||||||
|
bit0= redirect result channel
|
||||||
|
bit1= redirect info channel
|
||||||
|
If bit0 and bit1 are 0, both channels get redirected.
|
||||||
|
@return 1 on success, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_push_outlists(struct XorrisO *xorriso, int *stack_handle,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Disable the redirection given by stack_handle. If it was the current
|
||||||
|
receiver of messages then switch output to the next older redirection
|
||||||
|
resp. to the normal channels if no redirections are stacked any more.
|
||||||
|
The messages collected by the disabled redirection are handed out as
|
||||||
|
two lists. Both lists have to be disposed via Xorriso_lst_destroy_all()
|
||||||
|
when they are no longer needed.
|
||||||
|
The message lists are either NULL or represented by their first
|
||||||
|
Xorriso_lsT item.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param stack_handle The id number returned by Xorriso_push_outlists()
|
||||||
|
@param result_list Result and mark messages (usually directed to stdout)
|
||||||
|
@param info_list Info and mark messages (usually directed to stderr)
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return 1 on success, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_pull_outlists(struct XorrisO *xorriso, int stack_handle,
|
||||||
|
struct Xorriso_lsT **result_list,
|
||||||
|
struct Xorriso_lsT **info_list, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the text message from the current list item.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the text content of the list item.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the address of the next item in the chain of messages.
|
||||||
|
An iteration over the output of Xorriso_pull_outlists() starts at the
|
||||||
|
returned result_list resp. info_list and ends when this function returns
|
||||||
|
NULL.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the next list item or NULL if end of list.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the address of the previous item in the chain of messages.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the previous list item or NULL if start of list.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Destroy all list items which are directly or indirectly connected to
|
||||||
|
the given link item.
|
||||||
|
Apply this to each of the two list handles obtained by
|
||||||
|
Xorriso_pull_outlists() when the lists are no longer needed.
|
||||||
|
@param lstring *lstring will be freed and set to NULL.
|
||||||
|
It is not dangerous to submit a pointer to a NULL-pointer.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return -1= lstring was NULL (i.e. wrong use of this call),
|
||||||
|
0= *lstring was already NULL,
|
||||||
|
1= item actually disposed
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- Options API ------------------------ */
|
/* ---------------------------- Options API ------------------------ */
|
||||||
/* See man 1 xorriso for explanation of the particular options */
|
/* See man 1 xorriso for explanation of the particular options */
|
||||||
/*
|
/*
|
||||||
@ -186,6 +301,10 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
|
|||||||
/* Option -cdx */
|
/* Option -cdx */
|
||||||
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
|
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
|
||||||
|
|
||||||
|
/* Option -check_media */
|
||||||
|
int Xorriso_option_check_media(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
|
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
|
||||||
/* @param flag bit0=recursive (-chgrp_r)
|
/* @param flag bit0=recursive (-chgrp_r)
|
||||||
*/
|
*/
|
||||||
@ -233,6 +352,13 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
|
|||||||
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
|
|
||||||
|
/* Options -cpx , -cpax, -cp_rx , -cp_rax */
|
||||||
|
/* @param flag bit0= recursive (-cp_rx, -cp_rax)
|
||||||
|
bit1= full property restore (-cpax, -cp_rax)
|
||||||
|
*/
|
||||||
|
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
|
||||||
/* Option -cut_out */
|
/* Option -cut_out */
|
||||||
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||||
char *start, char *count, char *iso_rr_path, int flag);
|
char *start, char *count, char *iso_rr_path, int flag);
|
||||||
@ -276,9 +402,13 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
|
|||||||
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
||||||
char *occasion, char *behavior, int flag);
|
char *occasion, char *behavior, int flag);
|
||||||
|
|
||||||
/* Option -iso_rr_pattern "on"|"ls"|"off" */
|
/* Options -extract , -extract_single */
|
||||||
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
/* @param flag bit0=do not report the restored item
|
||||||
int flag);
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
|
bit5= -extract_single: eventually do not insert directory tree
|
||||||
|
*/
|
||||||
|
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char *iso_path, int flag);
|
||||||
|
|
||||||
/* Option -follow */
|
/* Option -follow */
|
||||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
@ -297,12 +427,19 @@ int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag);
|
|||||||
/* Option -gid */
|
/* Option -gid */
|
||||||
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
|
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
|
||||||
|
|
||||||
|
/* Option -grow_blindly */
|
||||||
|
int Xorriso_option_grow_blindly(struct XorrisO *xorriso, char *msc2, int flag);
|
||||||
|
|
||||||
/* Option -help and part of -prog_help */
|
/* Option -help and part of -prog_help */
|
||||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -history */
|
/* Option -history */
|
||||||
int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
|
int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
|
||||||
|
|
||||||
|
/* Option -iso_rr_pattern "on"|"ls"|"off" */
|
||||||
|
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -joliet "on"|"off" */
|
/* Option -joliet "on"|"off" */
|
||||||
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
@ -310,7 +447,8 @@ int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
|||||||
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -load session|track|sbsector value */
|
/* Option -load session|track|sbsector value */
|
||||||
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
|
||||||
|
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
*/
|
*/
|
||||||
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||||
char *adr_value, int flag);
|
char *adr_value, int flag);
|
||||||
@ -346,6 +484,15 @@ int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
|
int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
|
||||||
char *iso_path, int flag);
|
char *iso_path, int flag);
|
||||||
|
|
||||||
|
/* Options -map_l , -compare_l , -update_l , -extract_l */
|
||||||
|
/* @param flag bit8-11= mode 0= -map_l
|
||||||
|
1= -compare_l
|
||||||
|
2= -update_l
|
||||||
|
3= -extract_l
|
||||||
|
*/
|
||||||
|
int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
|
||||||
/* Option -mark */
|
/* Option -mark */
|
||||||
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
||||||
|
|
||||||
@ -363,6 +510,9 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -not_leaf */
|
/* Option -not_leaf */
|
||||||
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
||||||
|
|
||||||
|
/* Option -not_list */
|
||||||
|
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||||
|
|
||||||
/* Option -not_paths */
|
/* Option -not_paths */
|
||||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
@ -372,15 +522,25 @@ int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
|
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* Option -osirrox "on"|"off" */
|
||||||
|
int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -overwrite "on"|"nondir"|"off" */
|
/* Option -overwrite "on"|"nondir"|"off" */
|
||||||
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -pacifier */
|
||||||
|
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag);
|
||||||
|
|
||||||
/* Option -padding */
|
/* Option -padding */
|
||||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
||||||
|
|
||||||
/* Option -page */
|
/* Option -page */
|
||||||
int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
|
int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
|
||||||
|
|
||||||
|
/* Option -paste_in */
|
||||||
|
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
|
||||||
|
char *disk_path, char *start, char *count, int flag);
|
||||||
|
|
||||||
/* Option -path-list */
|
/* Option -path-list */
|
||||||
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
|
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||||
|
|
||||||
@ -458,6 +618,10 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
|||||||
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
|
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* Option -stream_recording */
|
||||||
|
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -tell_media_space */
|
/* Option -tell_media_space */
|
||||||
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
3
xorriso/xorriso_buildstamp.h
Normal file
3
xorriso/xorriso_buildstamp.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#ifndef Xorriso_build_timestamP
|
||||||
|
#define Xorriso_build_timestamP "-none-given-"
|
||||||
|
#endif
|
3
xorriso/xorriso_buildstamp_none.h
Normal file
3
xorriso/xorriso_buildstamp_none.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#ifndef Xorriso_build_timestamP
|
||||||
|
#define Xorriso_build_timestamP "-none-given-"
|
||||||
|
#endif
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
||||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R/DL, scdbackup">
|
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
|
||||||
<META NAME="robots" CONTENT="follow">
|
<META NAME="robots" CONTENT="follow">
|
||||||
<TITLE>xorriso homepage english</TITLE>
|
<TITLE>xorriso homepage english</TITLE>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
@ -24,6 +24,8 @@ into Rock Ridge enhanced ISO 9660 filesystems and allows
|
|||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
<BR>
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
</P>
|
</P>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
@ -33,10 +35,10 @@ optical media or to filesystem objects.
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<H2>Hardware requirements:</H2>
|
<H2>Hardware requirements:</H2>
|
||||||
A CD/DVD recorder suitable for
|
A CD/DVD/BD recorder suitable for
|
||||||
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
||||||
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
||||||
and to MMC-5 for DVD).
|
and to MMC-5 for DVD or BD).
|
||||||
<BR>
|
<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -58,14 +60,15 @@ and to MMC-5 for DVD).
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-0.4.5</DT>
|
<DT>libburn-0.5.3</DT>
|
||||||
<DD>reads and writes data from and to CD and DVD.</DD>
|
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
furthered since August 2006 by team of libburnia-project.org)</DD>
|
furthered since August 2006 by
|
||||||
<DT>libisofs-0.6.4</DT>
|
Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||||
<DD>operates ISO 9660 images.</DD>
|
<DT>libisofs-0.6.6</DT>
|
||||||
|
<DD>operates on ISO 9660 filesystem images.</DD>
|
||||||
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
|
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
|
||||||
<DT>libisoburn-0.1.4</DT>
|
<DT>libisoburn-0.2.4</DT>
|
||||||
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
|
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
|
||||||
<DD>(By Vreixo Formoso and Thomas Schmitt
|
<DD>(By Vreixo Formoso and Thomas Schmitt
|
||||||
from team of libburnia-project.org)</DD>
|
from team of libburnia-project.org)</DD>
|
||||||
@ -86,7 +89,7 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
|
|||||||
<H2>Special features:</H2>
|
<H2>Special features:</H2>
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>
|
||||||
ISO 9660 formatter and burner for CD or DVD are fixely integrated.
|
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Operates on an existing ISO image or creates a new one.
|
Operates on an existing ISO image or creates a new one.
|
||||||
@ -95,27 +98,30 @@ Operates on an existing ISO image or creates a new one.
|
|||||||
Copies files from filesystem into the ISO image.
|
Copies files from filesystem into the ISO image.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Renames or deletes file objects in the ISO image.
|
Changes file properties, renames or deletes file objects in the ISO image.
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
Changes file properties in the ISO image.
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Can write result as completely new image to optical media or
|
Writes result as completely new image or as add-on session
|
||||||
filesystem objects.
|
to optical media or filesystem objects.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Can write result as add-on session to appendable multi-session media,
|
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
||||||
to overwriteable media, to regular files, and to block devices.
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Scans for optical drives, blanks re-useable optical media.
|
Can restore single files and whole trees from ISO image to disk filesystem.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Suitable for: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R/DL, DVD+RW, DVD-RAM.
|
Can check media for damages and copy readable blocks to disk.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Scans for optical drives, blanks re-useable optical media, formats media.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Suitable for:
|
||||||
|
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-RE.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Reads its instructions from command line arguments, dialog, and batch files.
|
Reads its instructions from command line arguments, dialog, and batch files.
|
||||||
@ -151,8 +157,9 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
|
|||||||
<DT>Get info about a particular drive and loaded media:</DT>
|
<DT>Get info about a particular drive and loaded media:</DT>
|
||||||
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
||||||
|
|
||||||
<DT>Make re-usable media writable again, delete any ISO 9660 image:</DT>
|
<DT>Make re-usable media writable again, delete any ISO 9660 image,
|
||||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -eject all</KBD></DD>
|
eventually prepare yet unused BD-RE:</DT>
|
||||||
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed -eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
@ -174,17 +181,17 @@ adjust permissions to make it publicly read-only,
|
|||||||
write it to media and immediately eject media without
|
write it to media and immediately eject media without
|
||||||
previously reloading the written image.
|
previously reloading the written image.
|
||||||
</DT>
|
</DT>
|
||||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -pathspecs on \</KBD></DD>
|
<DD>$<KBD> cd /home/me</KBD></DD>
|
||||||
<DD><KBD> -add /sounds=/home/me/sounds \</KBD></DD>
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
|
||||||
<DD><KBD>
|
<DD><KBD> -map /home/me/sounds /sounds \</KBD></DD>
|
||||||
/pictures=/home/me/pictures -- \</KBD></DD>
|
<DD><KBD> -map /home/me/pictures /pictures \</KBD></DD>
|
||||||
<DD><KBD> -rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
|
<DD><KBD> -rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
|
||||||
<DD><KBD> -add /pictures/private/horses=/home/me/pictures/private/horses -- \</KBD></DD>
|
<DD><KBD> -cd / \</KBD></DD>
|
||||||
|
<DD><KBD> -add pictures/private/horses* -- \</KBD></DD>
|
||||||
<DD><KBD> -chmod_r a+r,a-w / -- \</KBD></DD>
|
<DD><KBD> -chmod_r a+r,a-w / -- \</KBD></DD>
|
||||||
<DD><KBD> -find / -type d -exec chmod a+x -- \</KBD></DD>
|
<DD><KBD> -find / -type d -exec chmod a+x -- \</KBD></DD>
|
||||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
|
<DD><KBD> -volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
|
||||||
<DD><KBD> -commit_eject all</KBD></DD>
|
<DD><KBD> -commit_eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
@ -195,15 +202,14 @@ rename /pictures/private/horses,
|
|||||||
add new directory trees /sounds and /movies,
|
add new directory trees /sounds and /movies,
|
||||||
disallow any access for group and others.
|
disallow any access for group and others.
|
||||||
Finally write as additional session to media and eject:</DT>
|
Finally write as additional session to media and eject:</DT>
|
||||||
<DD>$<KBD> xorriso -dev /dev/sr0 -pathspecs on \</KBD></DD>
|
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
||||||
<DD><KBD> -rm_r /sounds -- \</KBD></DD>
|
<DD><KBD> -rm_r /sounds -- \</KBD></DD>
|
||||||
<DD><KBD> -mv /pictures/private/horses /horse_show -- \</KBD></DD>
|
<DD><KBD> -mv /pictures/private/horses /horse_show -- \</KBD></DD>
|
||||||
<DD><KBD> -add /sounds=/home/me/prepared_for_dvd/sounds_dummy \</KBD></DD>
|
<DD><KBD> -map /home/me/prepared_for_dvd/sounds_dummy /sounds \</KBD></DD>
|
||||||
<DD><KBD> /movies=/home/me/prepared_for_dvd/movies -- \</KBD></DD>
|
<DD><KBD> -map /home/me/prepared_for_dvd/movies /movies \</KBD></DD>
|
||||||
<DD><KBD> -chmod_r go-rwx / -- \</KBD></DD>
|
<DD><KBD> -chmod_r go-rwx / -- \</KBD></DD>
|
||||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
|
<DD><KBD> -volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
|
||||||
<DD><KBD> -commit_eject all</KBD></DD>
|
<DD><KBD> -commit_eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
@ -230,9 +236,11 @@ run. It will write eventually pending changes to media, if that has not
|
|||||||
already been done by a previous -commit.</DT>
|
already been done by a previous -commit.</DT>
|
||||||
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-dev /dev/sr0 -pathspecs on</B></KBD></DD>
|
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-add /sounds=/home/me/prepared_for_dvd/sounds_dummy /movies=/home/me/prepared_for_dvd/movies</B></KBD></DD>
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
|
||||||
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies /movies</B></KBD></DD>
|
||||||
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-commit</B></KBD></DD>
|
<DD><KBD><B>-commit</B></KBD></DD>
|
||||||
@ -244,27 +252,20 @@ already been done by a previous -commit.</DT>
|
|||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
<DT>The following command can be run on blank media to create a complete
|
<DT>The following command can be run on blank media to create a
|
||||||
copy of the mentioned disk directory trees, and it can be run on appendable
|
copy of the mentioned disk directory trees, and it can be run on appendable
|
||||||
media to perform a minimal set of change operations which update the
|
media to perform a minimal set of change operations which update the
|
||||||
old ISO copies to match the new disk trees. Older states can be retrieved
|
old ISO copies to match the new disk trees.
|
||||||
by help of mount option "session=" from CD-R[W], by help of "sbsector="
|
|
||||||
from DVD-R[W] and DVD+R.
|
|
||||||
So this constitutes true incremental backup.
|
|
||||||
On overwriteable media only the newest state is accessible.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Older states can be retrieved by help of mount option "session=" from CD-R[W],
|
Older states can be retrieved by help of mount option "session=" from CD-R[W],
|
||||||
by help of "sbsector=" from other media.
|
by help of "sbsector=" from other media.
|
||||||
So this constitutes true incremental backup.
|
So this constitutes true incremental backup.
|
||||||
-->
|
<BR>
|
||||||
|
The copies will be complete, except all file names ending
|
||||||
|
with ".o" or ".swp" which are excluded by options -not_leaf.
|
||||||
</DT>
|
</DT>
|
||||||
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
||||||
<DD><KBD> -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
|
<DD><KBD> -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
|
||||||
<!--
|
|
||||||
<DD><KBD> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
<DD><KBD> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
||||||
-->
|
|
||||||
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
||||||
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
||||||
<DD><KBD> -commit -toc -eject all</KBD></DD>
|
<DD><KBD> -commit -toc -eject all</KBD></DD>
|
||||||
@ -278,6 +279,36 @@ with an external consumer of the generated ISO image. Any message
|
|||||||
output will be redirected to stderr in this case.</DT>
|
output will be redirected to stderr in this case.</DT>
|
||||||
<DD>$<KBD> xorriso -outdev - ...other.options... | consumer</KBD></DD>
|
<DD>$<KBD> xorriso -outdev - ...other.options... | consumer</KBD></DD>
|
||||||
|
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
Let xorriso serve underneath growisofs via its alias name "xorrisofs"
|
||||||
|
which enables mkisofs emulation:
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> export MKISOFS="xorrisofs"</KBD></DD>
|
||||||
|
<DD>$<KBD> growisofs -Z /dev/dvd /some/files</KBD></DD>
|
||||||
|
<DD>$<KBD> growisofs -M /dev/dvd /more/files</KBD></DD>
|
||||||
|
<DT>
|
||||||
|
One may switch from mkisofs emulation to xorriso's own command mode:
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
|
||||||
|
</KBD></DD>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
<DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
|
||||||
|
<DD>$<KBD> xorriso -indev /dev/sr0 \</KBD></DD>
|
||||||
|
<DD><KBD> -osirrox on \</KBD></DD>
|
||||||
|
<DD><KBD> -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
|
||||||
|
<DD><KBD> /home/her/buttercup_dir -- \</KBD>
|
||||||
|
<DD><KBD> -extract /sounds /home/her/sounds_from_me</KBD></DD>
|
||||||
|
</DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
@ -291,7 +322,8 @@ output will be redirected to stderr in this case.</DT>
|
|||||||
</DL>
|
</DL>
|
||||||
|
|
||||||
|
|
||||||
Testers wanted who are willing to risk some double layer DVD media.
|
Testers wanted who are willing to risk some double layer DVD media or
|
||||||
|
are interested in using BD-R media.
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -300,8 +332,8 @@ Testers wanted who are willing to risk some double layer DVD media.
|
|||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Download as source code (see README):</H3></DT>
|
<DT><H3>Download as source code (see README):</H3></DT>
|
||||||
<DD><A HREF="xorriso-0.1.4.pl00.tar.gz">xorriso-0.1.4.pl00.tar.gz</A>
|
<DD><A HREF="xorriso-0.2.4.pl00.tar.gz">xorriso-0.2.4.pl00.tar.gz</A>
|
||||||
(955 KB).
|
(1040 KB).
|
||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
</DD>
|
</DD>
|
||||||
@ -325,20 +357,31 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version xorriso-0.1.2.pl00:
|
Bug fixes towards xorriso-0.2.2.pl01:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>Coordination of -cut_out, -compare and -update</LI>
|
|
||||||
<LI>New option -split_size, automated splitting of oversized files</LI>
|
<LI>- none -</LI>
|
||||||
<LI>Improved performance with reading directory trees</LI>
|
|
||||||
<LI>New option -session_log</LI>
|
|
||||||
<LI>Dynamically linkable with release version 0.6.4 of libisofs</LI>
|
|
||||||
</UL>
|
</UL>
|
||||||
Bug fixes towards xorriso-0.1.2.pl00:
|
</P>
|
||||||
|
<P>
|
||||||
|
Enhancements towards previous stable version xorriso-0.2.2.pl01:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>-as mkisofs -no-pad was misspelled -nopad</LI>
|
|
||||||
<LI>Implicite directory attribute copying with -cut_out was wrong</LI>
|
<LI>
|
||||||
|
Included libburn has enhanced Linux drive access and listing code
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
New option -check_media
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
New -find test -damaged, new -find actions "report_damage", "report_lba"
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
New -error_behavior occasion "file_extraction"
|
||||||
|
</LI>
|
||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -346,31 +389,25 @@ Bug fixes towards xorriso-0.1.2.pl00:
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.1.5 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.2.5 :</H3></DT>
|
||||||
<DD>Bug fixes towards xorriso-0.1.4.pl00:
|
<DD>Bug fixes towards xorriso-0.2.4.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>- none yet -</LI>
|
<LI>- none yet -</LI>
|
||||||
<!-- <LI>- none yet -</LI> -->
|
<!--
|
||||||
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD>Enhancements towards stable version 0.1.4.pl00:
|
<DD>Enhancements towards stable version 0.2.4.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>Support for BD-RE</LI>
|
<LI>- none yet -</LI>
|
||||||
<LI>New options -map and -map_single</LI>
|
<!--
|
||||||
<LI>New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m</LI>
|
-->
|
||||||
<LI>Emulated -toc on overwriteable media, new -toc layout with volume id</LI>
|
|
||||||
<LI>New option -rom_toc_scan for read-only drive problems</LI>
|
|
||||||
<LI>New option -load makes alternative sessions accessible</LI>
|
|
||||||
<LI>New option -error_behavior with a first occasion 'image_loading'</LI>
|
|
||||||
<LI>New -blank and -format option 'as_needed'</LI>
|
|
||||||
<LI>New option -list_formats</LI>
|
|
||||||
<!-- <LI>- none yet -</LI> -->
|
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_xorriso_devel">README 0.1.5</A>
|
<DD><A HREF="README_xorriso_devel">README 0.2.5</A>
|
||||||
<DD><A HREF="xorriso_help_devel">xorriso_0.1.5 -help</A></DD>
|
<DD><A HREF="xorriso_help_devel">xorriso_0.2.5 -help</A></DD>
|
||||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.5)</A></DD>
|
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.5)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>If you want to distribute development versions of xorriso, then use
|
<DT>If you want to distribute development versions of xorriso, then use
|
||||||
this tarball which produces static linking between xorriso and the
|
this tarball which produces static linking between xorriso and the
|
||||||
@ -380,8 +417,8 @@ libburnia libraries.
|
|||||||
installation see README)
|
installation see README)
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="xorriso-0.1.5.tar.gz">xorriso-0.1.5.tar.gz</A>
|
<A HREF="xorriso-0.2.5.tar.gz">xorriso-0.2.5.tar.gz</A>
|
||||||
(980 KB).
|
(1040 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DT>A dynamically linked development version of xorriso can be obtained
|
<DT>A dynamically linked development version of xorriso can be obtained
|
||||||
from repositories of
|
from repositories of
|
||||||
@ -403,13 +440,12 @@ versions for dynamic linking. Only release versions are safe for that.
|
|||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
<DD>Install: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
<DD>Install: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
<DD>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
<DT>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
||||||
autotools</A> of at least version 1.7 installed.
|
autotools</A> of at least version 1.7 installed.
|
||||||
But after the run of <KBD>./bootstrap</KBD>, only
|
But after the run of <KBD>./bootstrap</KBD>, only
|
||||||
vanilla tools like make and gcc are needed.</DD>
|
vanilla tools like make and gcc are needed.
|
||||||
</DD>
|
</DT>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
|
|
||||||
</DL>
|
</DL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
@ -20,6 +20,19 @@ xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with
|
|||||||
|
|
||||||
xorriso_xorriso_LDADD = $(THREAD_LIBS)
|
xorriso_xorriso_LDADD = $(THREAD_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_SOURCES = \
|
||||||
\
|
\
|
||||||
xorriso/xorriso.h \
|
xorriso/xorriso.h \
|
||||||
@ -28,6 +41,7 @@ xorriso_xorriso_SOURCES = \
|
|||||||
xorriso/xorrisoburn.h \
|
xorriso/xorrisoburn.h \
|
||||||
xorriso/xorrisoburn.c \
|
xorriso/xorrisoburn.c \
|
||||||
xorriso/xorriso_timestamp.h \
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h \
|
||||||
\
|
\
|
||||||
libisoburn/libisoburn.h \
|
libisoburn/libisoburn.h \
|
||||||
libisoburn/isoburn.h \
|
libisoburn/isoburn.h \
|
||||||
@ -137,7 +151,6 @@ xorriso_xorriso_SOURCES = \
|
|||||||
\
|
\
|
||||||
version.h
|
version.h
|
||||||
|
|
||||||
|
|
||||||
noinst_PROGRAMS = \
|
noinst_PROGRAMS = \
|
||||||
test/compare_file
|
test/compare_file
|
||||||
|
|
||||||
@ -151,6 +164,30 @@ test_compare_file_LDADD =
|
|||||||
test_compare_file_SOURCES = test/compare_file.c
|
test_compare_file_SOURCES = test/compare_file.c
|
||||||
|
|
||||||
|
|
||||||
|
# Install symbolic links to the xorriso binary
|
||||||
|
#
|
||||||
|
install-exec-hook:
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Alternative to the disabled .PHONY above.
|
||||||
|
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||||
|
#
|
||||||
|
buildstamp:
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# For now make buildstamped has to be performed manually.
|
||||||
|
buildstamped: buildstamp
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
# Indent source files
|
# Indent source files
|
||||||
@ -184,6 +221,7 @@ EXTRA_DIST = \
|
|||||||
COPYING \
|
COPYING \
|
||||||
INSTALL \
|
INSTALL \
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
|
xorriso/xorriso_buildstamp_none.h \
|
||||||
$(man_MANS)
|
$(man_MANS)
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#ifndef Xorriso_private_includeD
|
#ifndef Xorriso_private_includeD
|
||||||
#define Xorriso_private_includeD yes
|
#define Xorriso_private_includeD yes
|
||||||
|
|
||||||
#define Xorriso_program_versioN "0.1.5"
|
#define Xorriso_program_versioN "0.2.4"
|
||||||
|
|
||||||
/** The source code release timestamp */
|
/** The source code release timestamp */
|
||||||
#include "xorriso_timestamp.h"
|
#include "xorriso_timestamp.h"
|
||||||
@ -26,7 +26,10 @@
|
|||||||
#define Xorriso_timestamP "-none-given-"
|
#define Xorriso_timestamP "-none-given-"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The binary build timestamp is to be set externally by the compiler */
|
/** The binary build timestamp is to be set externally by the compiler
|
||||||
|
or by a macro definition in xorriso_buildstamp.h.
|
||||||
|
*/
|
||||||
|
#include "xorriso_buildstamp.h"
|
||||||
#ifndef Xorriso_build_timestamP
|
#ifndef Xorriso_build_timestamP
|
||||||
#define Xorriso_build_timestamP "-none-given-"
|
#define Xorriso_build_timestamP "-none-given-"
|
||||||
#endif
|
#endif
|
||||||
@ -42,11 +45,12 @@
|
|||||||
#define Smem_freE free
|
#define Smem_freE free
|
||||||
#define SfileadrL 4096
|
#define SfileadrL 4096
|
||||||
|
|
||||||
/* <<< ??? */
|
struct LinkiteM; /* Trace of hops during symbolic link resolution */
|
||||||
typedef int (*Cleanup_app_handler_T)();
|
struct ExclusionS; /* List of -not_* conditions */
|
||||||
|
struct PermiteM; /* Stack of temporarily altered access permissions */
|
||||||
struct LinkiteM;
|
struct SpotlisT; /* List of intervals with different read qualities */
|
||||||
struct ExclusionS;
|
struct CheckmediajoB; /* Parameters for Xorriso_check_media() */
|
||||||
|
struct SectorbitmaP; /* Distiniction between valid and invalid sectors */
|
||||||
|
|
||||||
|
|
||||||
/* maximum number of history lines to be reported with -status:long_history */
|
/* maximum number of history lines to be reported with -status:long_history */
|
||||||
@ -70,6 +74,13 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
char initial_wdx[SfileadrL];
|
char initial_wdx[SfileadrL];
|
||||||
int no_rc;
|
int no_rc;
|
||||||
|
|
||||||
|
/* Command line argument emulations:
|
||||||
|
0=xorriso mode
|
||||||
|
1=mkisofs mode
|
||||||
|
2=cdrecord mode
|
||||||
|
*/
|
||||||
|
int argument_emulation;
|
||||||
|
|
||||||
/** List of startupfiles */
|
/** List of startupfiles */
|
||||||
char rc_filenames[Xorriso_rc_nuM][SfileadrL];
|
char rc_filenames[Xorriso_rc_nuM][SfileadrL];
|
||||||
int rc_filename_count;
|
int rc_filename_count;
|
||||||
@ -122,6 +133,8 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
1= value is session number
|
1= value is session number
|
||||||
2= value is track number
|
2= value is track number
|
||||||
3= value is lba
|
3= value is lba
|
||||||
|
bit16= with mode 3 : value is possibly 16 too high.
|
||||||
|
Let isoburn_set_msc1() adjust it.
|
||||||
bit30= interference with normal msc1 processing
|
bit30= interference with normal msc1 processing
|
||||||
is enabled. Without this bit,
|
is enabled. Without this bit,
|
||||||
isoburn_set_msc1() will not be called.
|
isoburn_set_msc1() will not be called.
|
||||||
@ -138,18 +151,27 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int volset_change_pending; /* whether -commit would make sense */
|
int volset_change_pending; /* whether -commit would make sense */
|
||||||
int no_volset_present; /* set to 1 on first failure */
|
int no_volset_present; /* set to 1 on first failure */
|
||||||
|
|
||||||
|
struct SectorbitmaP *in_sector_map; /* eventual sector validity bitmap */
|
||||||
|
|
||||||
|
|
||||||
char outdev[SfileadrL];
|
char outdev[SfileadrL];
|
||||||
void *out_drive_handle; /* interpreted only by xorrisoburn.c */
|
void *out_drive_handle; /* interpreted only by xorrisoburn.c */
|
||||||
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
|
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
|
||||||
connected to externaly perveived stdout.
|
connected to externaly perveived stdout.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
int grow_blindly_msc2; /* if >= 0 this causes growing from drive to drive.
|
||||||
|
The value is used as block address offset for
|
||||||
|
image generation. Like in: mkisofs -C msc1,msc2
|
||||||
|
*/
|
||||||
|
|
||||||
int ban_stdio_write;
|
int ban_stdio_write;
|
||||||
int do_dummy;
|
int do_dummy;
|
||||||
int do_close;
|
int do_close;
|
||||||
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
|
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 fs; /* fifo size in 2048 byte chunks : at most 1 GB */
|
||||||
int padding; /* number of bytes to add after ISO 9660 image */
|
int padding; /* number of bytes to add after ISO 9660 image */
|
||||||
|
int do_stream_recording;
|
||||||
|
|
||||||
int keep_boot_image;
|
int keep_boot_image;
|
||||||
int patch_isolinux_image;
|
int patch_isolinux_image;
|
||||||
@ -158,6 +180,14 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
/* XORRISO options */
|
/* XORRISO options */
|
||||||
int allow_graft_points;
|
int allow_graft_points;
|
||||||
|
|
||||||
|
int allow_restore; /* 0= disallowed, 1=allowed, 2=device files allowed */
|
||||||
|
int do_concat_split; /* 1= restore complete split file directories as
|
||||||
|
regular files
|
||||||
|
*/
|
||||||
|
int do_auto_chmod; /* 1= eventually temporarily open access permissions
|
||||||
|
of self-owned directories during restore
|
||||||
|
*/
|
||||||
|
|
||||||
int dialog;
|
int dialog;
|
||||||
|
|
||||||
|
|
||||||
@ -199,8 +229,18 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
char mark_text[SfileadrL]; /* ( stdout+stderr, M: ) */
|
char mark_text[SfileadrL]; /* ( stdout+stderr, M: ) */
|
||||||
int packet_output;
|
int packet_output;
|
||||||
char logfile[4][SfileadrL];
|
char logfile[4][SfileadrL];
|
||||||
|
FILE *logfile_fp[4];
|
||||||
|
FILE *pktlog_fp;
|
||||||
|
struct Xorriso_lsT *result_msglists[Xorriso_max_outlist_stacK];
|
||||||
|
struct Xorriso_lsT *info_msglists[Xorriso_max_outlist_stacK];
|
||||||
|
int msglist_flags[Xorriso_max_outlist_stacK]; /* bit0= result is redirected
|
||||||
|
bit1= info is redirected
|
||||||
|
*/
|
||||||
|
int msglist_stackfill;
|
||||||
|
|
||||||
int status_history_max; /* for -status long_history */
|
int status_history_max; /* for -status long_history */
|
||||||
|
|
||||||
|
|
||||||
char report_about_text[20];
|
char report_about_text[20];
|
||||||
int report_about_severity;
|
int report_about_severity;
|
||||||
int library_msg_direct_print;
|
int library_msg_direct_print;
|
||||||
@ -214,6 +254,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
FILE *errfile_fp;
|
FILE *errfile_fp;
|
||||||
|
|
||||||
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
|
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
|
||||||
|
int extract_error_mode; /* 0=(not yet: best_effort) , 1=keep , 2=delete */
|
||||||
|
|
||||||
char return_with_text[20];
|
char return_with_text[20];
|
||||||
int return_with_severity;
|
int return_with_severity;
|
||||||
@ -246,17 +287,21 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
double error_count; /* double will not roll over */
|
double error_count; /* double will not roll over */
|
||||||
|
|
||||||
/* pacifiers */
|
/* pacifiers */
|
||||||
|
int pacifier_style; /* 0= xorriso, 1=mkisofs 2=cdrecord */
|
||||||
double pacifier_interval;
|
double pacifier_interval;
|
||||||
double start_time;
|
double start_time;
|
||||||
double last_update_time;
|
double last_update_time;
|
||||||
/* optional global counters for brain reduced callback functions */
|
/* optional global counters for brain reduced callback functions */
|
||||||
off_t pacifier_count;
|
off_t pacifier_count;
|
||||||
off_t pacifier_total;
|
off_t pacifier_total;
|
||||||
|
off_t pacifier_byte_count; /* auxiliary counter for data bytes */
|
||||||
|
|
||||||
void *pacifier_fifo;
|
void *pacifier_fifo;
|
||||||
|
|
||||||
int find_compare_result; /* 1=everything matches , 0=mismatch , -1=error */
|
int find_compare_result; /* 1=everything matches , 0=mismatch , -1=error */
|
||||||
|
|
||||||
|
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
|
||||||
|
|
||||||
/* result (stdout, R: ) */
|
/* result (stdout, R: ) */
|
||||||
char result_line[5*SfileadrL];
|
char result_line[5*SfileadrL];
|
||||||
int result_line_counter;
|
int result_line_counter;
|
||||||
@ -386,6 +431,113 @@ int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
|||||||
|
|
||||||
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
|
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= long format
|
||||||
|
bit1= do not print count of nodes
|
||||||
|
bit2= du format
|
||||||
|
bit3= print directories as themselves (ls -d)
|
||||||
|
*/
|
||||||
|
int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
|
||||||
|
int filec, char **filev, off_t boss_mem, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag >>> bit0= remove whole sub tree: rm -r
|
||||||
|
bit1= remove empty directory: rmdir
|
||||||
|
bit2= recursion: do not reassure in mode 2 "tree"
|
||||||
|
bit3= this is for overwriting and not for plain removal
|
||||||
|
bit4= count deleted files in xorriso->pacifier_count
|
||||||
|
bit5= with bit0 only remove directory content, not the directory
|
||||||
|
@return <=0 = error
|
||||||
|
1 = removed leaf file object
|
||||||
|
2 = removed directory or tree
|
||||||
|
3 = did not remove on user revocation
|
||||||
|
*/
|
||||||
|
int Xorriso_rmx(struct XorrisO *xorriso, off_t boss_mem, char *path, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_make_tmp_path(struct XorrisO *xorriso, char *orig_path,
|
||||||
|
char *tmp_path, int *fd, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= path is a directory
|
||||||
|
bit2= recursion: do not reassure in mode 2 "tree"
|
||||||
|
bit3= this is for overwriting and not for plain removal
|
||||||
|
*/
|
||||||
|
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= mark untested areas as valid
|
||||||
|
*/
|
||||||
|
int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||||
|
struct SpotlisT *spotlist,
|
||||||
|
int read_chunk,
|
||||||
|
struct SectorbitmaP **map,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_toc_to_string(struct XorrisO *xorriso, char **toc_text, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
struct Xorriso_lsT {
|
||||||
|
char *text;
|
||||||
|
struct Xorriso_lsT *prev,*next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Create a new list item with arbitrary byte content.
|
||||||
|
@param lstring The newly created object or NULL on failure
|
||||||
|
@param data An array of bytes to be copied into the new object
|
||||||
|
@param data_len Number of bytes to be copied
|
||||||
|
@param link Xorriso_lsT object to which the new object shall be linked
|
||||||
|
@param flag Bitfield for control purposes
|
||||||
|
bit0= insert before link rather than after it
|
||||||
|
bit1= do not copy data (e.g. because *data is invalid)
|
||||||
|
@return <=0 error, 1 ok
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_new_binary(struct Xorriso_lsT **lstring, char *data,
|
||||||
|
int data_len, struct Xorriso_lsT *link, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create a new list item with a 0-terminated text as content.
|
||||||
|
@param lstring The newly created object or NULL on failure
|
||||||
|
@param text A 0-terminated array of bytes
|
||||||
|
@param link Xorriso_lsT object to which the new object shall be linked
|
||||||
|
@param flag Bitfield for control purposes
|
||||||
|
bit0= insert before link rather than after it
|
||||||
|
@return <=0 error, 1 ok
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
|
||||||
|
struct Xorriso_lsT *link, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create a new list item at the end of a given list.
|
||||||
|
@param lstring Contains as input a pointer to a pointer to any existing
|
||||||
|
list item. As output this list item pointer will be
|
||||||
|
changed to the address of the new list item.
|
||||||
|
@param data An array of bytes to be copied into the new object
|
||||||
|
@param data_len Number of bytes to be copied
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return <=0 error, 1 ok
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
|
||||||
|
char *data, int data_len, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Destroy a single list item and connect its eventual list neighbors.
|
||||||
|
@param lstring pointer to the pointer to be freed and set to NULL
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return 0= *lstring was alredy NULL, 1= ok
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_destroy(struct Xorriso_lsT **lstring, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Opens the -check_media data copy in for reading and writing
|
||||||
|
*/
|
||||||
|
int Xorriso_open_job_data_to(struct XorrisO *xorriso,
|
||||||
|
struct CheckmediajoB *job, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
||||||
|
|
||||||
@ -403,6 +555,26 @@ int Sfile_destroy_argv(int *argc, char ***argv, int flag);
|
|||||||
*/
|
*/
|
||||||
int Sfile_count_components(char *path, int flag);
|
int Sfile_count_components(char *path, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag
|
||||||
|
bit0= return -1 if file is missing
|
||||||
|
bit1= return a hardlink with siblings as type 5
|
||||||
|
bit2= evaluate eventual link target rather than the link object itself
|
||||||
|
bit3= return a socket or a char device as types 7 or 8 rather than 0
|
||||||
|
@return
|
||||||
|
0=unknown
|
||||||
|
1=regular
|
||||||
|
2=directory
|
||||||
|
3=symbolic link
|
||||||
|
4=named pipe
|
||||||
|
5=multiple hardlink (with bit1)
|
||||||
|
6=block device
|
||||||
|
7=socket (with bit3)
|
||||||
|
8=character device (with bit3)
|
||||||
|
*/
|
||||||
|
int Sfile_type(char *filename, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *Text_shellsafe(char *in_text, char *out_text, int flag);
|
char *Text_shellsafe(char *in_text, char *out_text, int flag);
|
||||||
|
|
||||||
@ -411,6 +583,12 @@ int Sort_argv(int argc, char **argv, int flag);
|
|||||||
/* @param flag bit0= single letters */
|
/* @param flag bit0= single letters */
|
||||||
char *Ftypetxt(mode_t st_mode, int flag);
|
char *Ftypetxt(mode_t st_mode, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0=with year and seconds
|
||||||
|
bit1=timestamp format YYYY.MM.DD.hhmmss
|
||||||
|
*/
|
||||||
|
char *Ftimetxt(time_t t, char timetext[40], int flag);
|
||||||
|
|
||||||
|
|
||||||
struct DirseQ;
|
struct DirseQ;
|
||||||
|
|
||||||
int Dirseq_new(struct DirseQ **o, char *adr, int flag);
|
int Dirseq_new(struct DirseQ **o, char *adr, int flag);
|
||||||
@ -465,6 +643,9 @@ int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
|
|||||||
|
|
||||||
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
|
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
|
||||||
|
|
||||||
|
int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
|
||||||
|
int *end_lba, int *damage_filter, int flag);
|
||||||
|
|
||||||
|
|
||||||
struct SplitparT;
|
struct SplitparT;
|
||||||
|
|
||||||
@ -486,6 +667,70 @@ int Splitpart__parse(char *name, int *partno, int *total_parts,
|
|||||||
int Splitpart__compose(char *adr, int partno, int total_parts,
|
int Splitpart__compose(char *adr, int partno, int total_parts,
|
||||||
off_t offset, off_t bytes, off_t total_bytes, int flag);
|
off_t offset, off_t bytes, off_t total_bytes, int flag);
|
||||||
|
|
||||||
|
int Splitparts_sort(struct SplitparT *o, int count, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
|
||||||
|
struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Spotlist_new(struct SpotlisT **o, int flag);
|
||||||
|
|
||||||
|
int Spotlist_destroy(struct SpotlisT **o, int flag);
|
||||||
|
|
||||||
|
int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||||
|
int quality, int flag);
|
||||||
|
|
||||||
|
int Spotlist_count(struct SpotlisT *o, int flag);
|
||||||
|
|
||||||
|
int Spotlist_block_count(struct SpotlisT *o, int flag);
|
||||||
|
|
||||||
|
int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag);
|
||||||
|
|
||||||
|
int Spotlist_get_item(struct SpotlisT *o, int idx,
|
||||||
|
int *start_lba, int *blocks, int *quality, int flag);
|
||||||
|
|
||||||
|
char *Spotlist__quality_name(int quality, char name[80], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
#define Xorriso_read_quality_gooD 0x7fffffff
|
||||||
|
#define Xorriso_read_quality_sloW 0x60000000
|
||||||
|
#define Xorriso_read_quality_partiaL 0x50000000
|
||||||
|
#define Xorriso_read_quality_valiD 0x40000000
|
||||||
|
#define Xorriso_read_quality_untesteD 0x3fffffff
|
||||||
|
#define Xorriso_read_quality_invaliD 0x3ffffffe
|
||||||
|
#define Xorriso_read_quality_tao_enD 0x28000000
|
||||||
|
#define Xorriso_read_quality_off_tracK 0x20000000
|
||||||
|
#define Xorriso_read_quality_unreadablE 0x00000000
|
||||||
|
|
||||||
|
|
||||||
|
int Checkmediajob_new(struct CheckmediajoB **o, int flag);
|
||||||
|
|
||||||
|
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
|
||||||
|
int flag);
|
||||||
|
int Sectorbitmap_destroy(struct SectorbitmaP **o, int flag);
|
||||||
|
int Sectorbitmap_from_file(struct SectorbitmaP **o, char *path, char *msg,
|
||||||
|
int *os_errno, int flag);
|
||||||
|
int Sectorbitmap_to_file(struct SectorbitmaP *o, char *path, char *info,
|
||||||
|
char *msg, int *os_errno, int flag);
|
||||||
|
int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag);
|
||||||
|
int Sectorbitmap_set_range(struct SectorbitmaP *o,
|
||||||
|
int start_sector, int sectors, int flag);
|
||||||
|
int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag);
|
||||||
|
int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o,
|
||||||
|
off_t start_byte, off_t end_byte, int flag);
|
||||||
|
|
||||||
|
int Sectorbitmap_get_layout(struct SectorbitmaP *o,
|
||||||
|
int *sectors, int *sector_size, int flag);
|
||||||
|
|
||||||
|
int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to,
|
||||||
|
int flag);
|
||||||
|
|
||||||
#endif /* Xorriso_private_includeD */
|
#endif /* Xorriso_private_includeD */
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.05.15.192118"
|
#define Xorriso_timestamP "2008.08.24.160001"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -14,14 +14,12 @@
|
|||||||
#ifndef Xorrisoburn_includeD
|
#ifndef Xorrisoburn_includeD
|
||||||
#define Xorrisoburn_includeD yes
|
#define Xorrisoburn_includeD yes
|
||||||
|
|
||||||
struct XorrisO;
|
|
||||||
struct FindjoB;
|
|
||||||
|
|
||||||
/* The minimum version of libisoburn to be used with this version of xorriso
|
/* The minimum version of libisoburn to be used with this version of xorriso
|
||||||
*/
|
*/
|
||||||
#define xorriso_libisoburn_req_major 0
|
#define xorriso_libisoburn_req_major 0
|
||||||
#define xorriso_libisoburn_req_minor 1
|
#define xorriso_libisoburn_req_minor 2
|
||||||
#define xorriso_libisoburn_req_micro 5
|
#define xorriso_libisoburn_req_micro 4
|
||||||
|
|
||||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -188,7 +186,13 @@ int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
|||||||
*/
|
*/
|
||||||
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
|
/* @param write_start_address is valid if >=0
|
||||||
|
@param tsize is valid if >0
|
||||||
|
@param flag bit0= grow_overwriteable_iso
|
||||||
|
bit1= do_isosize
|
||||||
|
*/
|
||||||
|
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||||
|
char *track_source, off_t tsize, int flag);
|
||||||
|
|
||||||
/* @param flag bit1= outdev rather than indev
|
/* @param flag bit1= outdev rather than indev
|
||||||
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
||||||
@ -200,8 +204,10 @@ int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
|||||||
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
|
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
||||||
|
*/
|
||||||
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
void **stream, int flag);
|
void *node_pt, void **stream, int flag);
|
||||||
|
|
||||||
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
|
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
|
||||||
int count, int flag);
|
int count, int flag);
|
||||||
@ -216,6 +222,9 @@ int Xorriso_copy_properties(struct XorrisO *xorriso,
|
|||||||
int Xorriso_cut_out(struct XorrisO *xorriso, char *disk_path,
|
int Xorriso_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||||
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_paste_in(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
||||||
|
|
||||||
struct SplitparT;
|
struct SplitparT;
|
||||||
|
|
||||||
/* @param flag bit0= in_node is valid, do not resolve iso_adr
|
/* @param flag bit0= in_node is valid, do not resolve iso_adr
|
||||||
@ -225,5 +234,104 @@ int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
|
|||||||
struct SplitparT **parts, int *count,
|
struct SplitparT **parts, int *count,
|
||||||
struct stat *total_stbuf, int flag);
|
struct stat *total_stbuf, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= node is valid, do not resolve path
|
||||||
|
bit1= insist in complete collection of part files
|
||||||
|
*/
|
||||||
|
int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag
|
||||||
|
>>> bit0= mkdir: graft in as empty directory, not as copy from iso
|
||||||
|
bit1= do not report copied files
|
||||||
|
bit2= -follow, -not_*: this is not a command parameter
|
||||||
|
bit3= use offset and cut_size for -paste_in
|
||||||
|
bit4= return 3 on rejection by exclusion or user
|
||||||
|
bit5= if directory then do not add sub tree
|
||||||
|
bit6= this is a copy action: do not fake times and ownership
|
||||||
|
@return <=0 = error , 1 = added leaf file object , 2 = added directory ,
|
||||||
|
3 = rejected
|
||||||
|
*/
|
||||||
|
int Xorriso_restore(struct XorrisO *xorriso,
|
||||||
|
char *img_path, char *disk_path,
|
||||||
|
off_t offset, off_t cut_size, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= in_node is valid, do not resolve img_path
|
||||||
|
*/
|
||||||
|
int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
||||||
|
char *img_path, char *disk_path,
|
||||||
|
char type_text[5], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the official libburn address of an address string. This may fail
|
||||||
|
if the string does not constitute a valid drive address.
|
||||||
|
@param official_adr must offer SfileadrL bytes of reply buffer
|
||||||
|
@return 1 = success , 0 = failure , -1 = severe error
|
||||||
|
*/
|
||||||
|
int Xorriso_libburn_adr(struct XorrisO *xorriso, char *address_string,
|
||||||
|
char official_adr[], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit1= obtain info from outdev
|
||||||
|
*/
|
||||||
|
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag bit0= obtain iso_lba from indev
|
||||||
|
bit1= head_buffer already contains a valid head
|
||||||
|
bit2= issue message about success
|
||||||
|
bit3= check whether source blocks are banned by in_sector_map
|
||||||
|
*/
|
||||||
|
int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
|
||||||
|
char *head_buffer, struct CheckmediajoB *job,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
struct CheckmediajoB {
|
||||||
|
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
|
||||||
|
|
||||||
|
int min_lba; /* if >=0 : begin checking at this address */
|
||||||
|
int max_lba; /* if >=0 : read up to this address, else use mode */
|
||||||
|
|
||||||
|
int min_block_size; /* >>> not yet implemented:
|
||||||
|
granularity desired by user
|
||||||
|
*/
|
||||||
|
int mode; /* 0= track by track
|
||||||
|
1= single sweep over libisoburn media capacity
|
||||||
|
>>> 2= single sweep over libburn media capacity
|
||||||
|
*/
|
||||||
|
time_t start_time;
|
||||||
|
int time_limit; /* Number of seconds after which to abort */
|
||||||
|
|
||||||
|
int item_limit; /* Maximum number of media check list items as result */
|
||||||
|
|
||||||
|
char abort_file_path[SfileadrL];
|
||||||
|
|
||||||
|
char data_to_path[SfileadrL];
|
||||||
|
int data_to_fd;
|
||||||
|
int patch_lba0;
|
||||||
|
int patch_lba0_msc1;
|
||||||
|
|
||||||
|
char sector_map_path[SfileadrL];
|
||||||
|
struct SectorbitmaP *sector_map;
|
||||||
|
int map_with_volid; /* 0=add quick toc to map file,
|
||||||
|
1=read ISO heads for toc
|
||||||
|
*/
|
||||||
|
|
||||||
|
int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks
|
||||||
|
0= retry with CD, full chunk else
|
||||||
|
*/
|
||||||
|
|
||||||
|
int report_mode; /* 0= print MCL items
|
||||||
|
1= print damaged files
|
||||||
|
*/
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
||||||
|
struct CheckmediajoB *job, int flag);
|
||||||
|
|
||||||
|
|
||||||
#endif /* Xorrisoburn_includeD */
|
#endif /* Xorrisoburn_includeD */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user