Compare commits

..

6 Commits

25 changed files with 1159 additions and 5155 deletions

View File

@ -16,11 +16,9 @@ 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
@ -41,39 +39,7 @@ 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 $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
ln -s xorriso $(bindir)/xorrisofs
if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
ln -s xorriso $(bindir)/osirrox
if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
ln -s xorriso $(bindir)/xorrecord
# Trying to create a build timestamp file
#
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
#
# Processing of the "all:" rule happens too late.
# How to create a dependency of xorriso.c on buildstamp ?
# Not working:
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
# on buildstamp. It runs. But at quite random occasions.
# xorriso/xorriso_buildstamp.h: buildstamp
#
# all: buildstamp
## Build test applications ## Build test applications
@ -89,6 +55,13 @@ 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
## ========================================================================= ## ## ========================================================================= ##
@ -153,7 +126,6 @@ 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)

22
README
View File

@ -4,7 +4,6 @@
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.2.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.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -26,18 +25,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.2.2 : Dynamic library and compile time header requirements for libisoburn-0.1.6 :
- libburn.so.4 , version libburn-0.5.0 or higher - libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher - libisofs.so.6 , version libisofs-0.6.4 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.2.2.pl00.tar.gz, take it to a directory of your choice Obtain libisoburn-0.1.6.pl00.tar.gz, take it to a directory of your choice
and do: and do:
tar xzf libisoburn-0.2.2.pl00.tar.gz tar xzf libisoburn-0.1.6.pl00.tar.gz
cd libisoburn-0.2.2 cd libisoburn-0.1.6
Within that directory execute: Within that directory execute:
@ -60,18 +59,13 @@ 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 standalone tarball as first users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation. preference for xorriso installation.
The libisoburn installation described above produces a dynamically linked The libisoburn installation described above produces a dynamically linked
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so. 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
@ -109,7 +103,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 file to compare, the prefix1 to be cut off from path The path of the first 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

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.2.2], [http://libburnia-project.org]) AC_INIT([libisoburn], [0.1.6], [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 defined in libisoburn/libisoburn.h dnl The API version codes are now 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=2 ISOBURN_MINOR_VERSION=1
ISOBURN_MICRO_VERSION=2 ISOBURN_MICRO_VERSION=6
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,16 +33,15 @@ 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 A80718 dnl ts A80517
dnl This is the release version 0.2.2 = libisoburn.so.1.11.0 dnl This is the release version 0.1.6 = libisoburn.so.1.5.0
dnl ### This is the development version after above stable release dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet. dnl ### LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl dnl
dnl SONAME = 12 - 11 = 1 . Library name = libburn.so.1.11.0 dnl SONAME = 6 - 5 = 1 . Library name = libburn.so.1.5.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=12 LT_CURRENT=6
LT_AGE=11 LT_AGE=5
LT_REVISION=0 LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -100,8 +99,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.5.0 LIBBURN_REQUIRED=0.4.8
LIBISOFS_REQUIRED=0.6.6 LIBISOFS_REQUIRED=0.6.4
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)

View File

@ -23,7 +23,6 @@
#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
@ -39,6 +38,9 @@
#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"
@ -47,16 +49,6 @@
/* 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);
@ -227,18 +219,6 @@ 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;
@ -285,9 +265,6 @@ 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 */
@ -386,7 +363,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
if(conv_ret<=0) { if(conv_ret<=0) {
sprintf(msg, "Unsuitable drive address: '%s'\n",adr); sprintf(msg, "Unsuitable drive address: '%s'\n",adr);
msg[BURN_MSGS_MESSAGE_LEN-1]= 0; msg[BURN_MSGS_MESSAGE_LEN-1]= 0;
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0); burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
ret= 0; goto ex; ret= 0; goto ex;
} }
@ -458,8 +435,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) {
isoburn_msgs_submit(*pt, 0x00060000, burn_msgs_submit(0x00060000,
"Unsuitable drive and media state", 0, "FAILURE", 0); "Unsuitable drive and media state", 0, "FAILURE", NULL);
return(-1); return(-1);
} }
if((*pt)->emulation_mode==0) if((*pt)->emulation_mode==0)
@ -577,8 +554,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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Media contains no recognizable data", 0, "SORRY", 0); "Media contains no recognizable data", 0, "SORRY",NULL);
return(0); return(0);
} }
ret= isoburn_find_emulator(&o, d, 0); ret= isoburn_find_emulator(&o, d, 0);
@ -625,23 +602,6 @@ 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;
@ -681,10 +641,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)");
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0); burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
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");
isoburn_msgs_submit(o, 0x00060000, msg, 0, "HINT", 0); burn_msgs_submit(0x00060000, msg, 0, "HINT", NULL);
burn_drive_cancel(drive); /* mark run as failure */ burn_drive_cancel(drive); /* mark run as failure */
return; return;
} }
@ -698,7 +658,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);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0); burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
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() */
@ -710,7 +670,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)));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "DEBUG", 0); burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
#ifdef Hardcoded_cd_rW #ifdef Hardcoded_cd_rW
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */ /* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
@ -788,9 +748,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) {
isoburn_msgs_submit(o, 0x00060000, burn_msgs_submit(0x00060000,
"Cannot set start byte address with this type of media", "Cannot set start byte address with this type of media",
0, "FAILURE", 0); 0, "FAILURE", NULL);
{ret= 0; goto ex;} {ret= 0; goto ex;}
} }
o->min_start_byte= value; o->min_start_byte= value;
@ -888,6 +848,34 @@ 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
*/ */
@ -896,11 +884,53 @@ 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);
ret= burn_sev_to_text(severity, severity_name, 0); #ifdef Libisoburn_on__libburn_after_0_4_2
return(ret); ret= burn_sev_to_text(severity, severity_name, 0);
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 */
} }
@ -908,10 +938,21 @@ 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);
} }
@ -942,8 +983,7 @@ 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= copy volume id to info (info needs 33 bytes) 1= return volume id
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
@ -972,12 +1012,10 @@ 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 {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Program error: Unknown info mode with isoburn_read_iso_head()", "Program error: Unknown info mode with isoburn_read_iso_head()",
0, "FATAL", 0); 0, "FATAL", NULL);
return(-1); return(-1);
} }
return(1); return(1);
@ -987,9 +1025,7 @@ 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= copy volume id to info (info needs 33 bytes) 1= return volume id
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
@ -1000,31 +1036,25 @@ 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, info_mode; int ret;
off_t data_count; off_t data_count;
info_mode= flag&255;
*image_blocks= 0; *image_blocks= 0;
if(flag&(1<<13)) { ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
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, info_mode); ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info,
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,
info_mode); flag&255);
return(ret); return(ret);
} }
@ -1036,11 +1066,10 @@ 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, scan_count= 0, probe_minus_16= 0, growisofs_nwa; int scan_start= 0;
struct isoburn *o; struct isoburn *o;
struct isoburn_toc_entry *item; 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);
@ -1051,7 +1080,6 @@ 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);
@ -1060,35 +1088,9 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
lba= Libisoburn_overwriteable_starT; lba= Libisoburn_overwriteable_starT;
} }
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 MB", 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) {
@ -1096,7 +1098,6 @@ 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;
} }
@ -1105,7 +1106,7 @@ 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);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0); burn_msgs_submit(0x00060000, msg, 0, "WARNING", NULL);
} }
{ret= 0; goto failure;} {ret= 0; goto failure;}
} }
@ -1113,43 +1114,27 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
lba-= 16; lba-= 16;
ret= isoburn_toc_entry_new(&item, o->toc, 0); ret= isoburn_toc_entry_new(&item, o->toc, 0);
if(ret<=0) { if(ret<=0) {
isoburn_msgs_submit(o, 0x00060000, burn_msgs_submit(0x00060000,
"Not enough memory for emulated TOC entry object", "Not enough memory for emulated TOC entry object",
0, "FATAL", 0); 0, "FATAL", NULL);
ret= -1; goto failure; ret= -1; goto failure;
} }
if(o->toc==NULL) if(o->toc==NULL)
o->toc= item; o->toc= item;
session_count++; session_count++;
scan_count+= 32;
item->session= session_count; item->session= session_count;
item->track_no= session_count; item->track_no= session_count;
item->start_lba= lba; item->start_lba= lba;
item->track_blocks= track_blocks; item->track_blocks= track_blocks;
lba+= track_blocks;
/* growisofs aligns to 16 rather than 32 */ lba+= track_blocks;
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;
} }
if(last_pacifier != start_time) sprintf(msg,
sev= "UPDATE"; "Chain of ISO session headers yielded %d sessions", session_count);
else burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
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);
@ -1430,27 +1415,6 @@ 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)
{ {
@ -1479,7 +1443,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-");
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FAILURE", 0); burn_msgs_submit(0x00060000, msg, 0, "FAILURE", NULL);
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);
@ -1522,12 +1486,7 @@ 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;
@ -1552,7 +1511,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);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "FATAL", 0); burn_msgs_submit(0x00060000, msg, 0, "FATAL", NULL);
ret= 0; goto ex; ret= 0; goto ex;
} }
ret= 1; ret= 1;

View File

@ -1,8 +1,7 @@
/* /*
data source for libisoburn. data source for libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
*/ */
#include <stdlib.h> #include <stdlib.h>
@ -28,24 +27,24 @@
#include "isoburn.h" #include "isoburn.h"
/* Cached reading of image tree data */ /* Powers of 2 only ! Less than 16 makes not much sense. */
/* 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
/* The number of tiles in the cache /* Undef to get to older single tile version
*/ */
#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;
@ -85,19 +84,6 @@ 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);
@ -162,7 +148,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);
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0); burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
return ret; return ret;
} }
@ -202,19 +188,6 @@ 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;
@ -261,3 +234,139 @@ 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 */

View File

@ -37,16 +37,10 @@
#include "isoburn.h" #include "isoburn.h"
/* No more: version numbers out of configure.ac
/* Default values for application provided msgs_submit methods. major.minor.micro now comes from libisoburn.h
To be attached to newly aquired drives. #include "../version.h"
*/ */
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 ---------------------- */
@ -59,9 +53,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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn toc entry", "Cannot allocate memory for isoburn toc entry",
0, "FATAL", 0); 0, "FATAL", NULL);
return(-1); return(-1);
} }
o->session= 0; o->session= 0;
@ -110,16 +104,15 @@ 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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn control object", "Cannot allocate memory for isoburn control object",
0, "FATAL", 0); 0, "FATAL", NULL);
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;
@ -131,12 +124,8 @@ 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);
@ -177,8 +166,7 @@ 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);
@ -311,80 +299,28 @@ 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 *in_d, struct burn_drive *out_d, int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
struct burn_disc **disc, struct isoburn_imgen_opts *opts, int new_img)
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 *in_o, *out_o; struct isoburn *o;
IsoWriteOpts *wopts= NULL; IsoWriteOpts *wopts= NULL;
enum burn_disc_status state; enum burn_disc_status state;
int ret, fifo_chunks, lba, nwa, i, new_img, early_indev_release; int ret, fifo_chunks;
size_t buffer_size= 0, buffer_free= 0;
char msg[160];
new_img= flag&1; ret= isoburn_find_emulator(&o, d, 0);
early_indev_release= flag&2; if(ret<0 || o==NULL)
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;}
ret= isoburn_find_emulator(&out_o, out_d, 0); o->wrote_well= 0; /* early end will be registered as failure */
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(in_d); state = isoburn_disc_get_status(d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE && if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
state != BURN_DISC_FULL) { && (state != BURN_DISC_FULL || ! new_img)) {
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state", /* unsuitable status */
0, "FAILURE", 0); burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
{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;}
} }
@ -422,66 +358,55 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_default_gid(wopts, opts->gid); iso_write_opts_set_default_gid(wopts, opts->gid);
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);
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa); if (new_img) {
opts->effective_lba= nwa; iso_write_opts_set_ms_block(wopts, 0);
ret= isoburn_get_msc2(out_o, NULL, &nwa, 0); opts->effective_lba= 0;
if (ret != 1) { iso_write_opts_set_appendable(wopts, 0);
isoburn_msgs_submit(out_o, 0x00060000, iso_write_opts_set_overwrite_buf(wopts, NULL);
"Cannot determine next writeable address", 0, "FAILURE", 0); } else {
{ret= -3; goto ex;} int lba, nwa;
ret = isoburn_disc_track_lba_nwa(d, NULL, 0, &lba, &nwa);
if (ret != 1) {
burn_msgs_submit(0x00060000, "Cannot determine next writeable address", 0,
"FAILURE", NULL);
{ret= -3; goto ex;}
}
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
/* invalid nwa */
burn_msgs_submit(0x00060000,
"Encountered 0 as next writeable address 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(in_o->image, wopts, &wsrc); ret = iso_image_create_burn_source(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 */
out_o->iso_source= wsrc; 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, out_o->iso_source); burn_track_set_source(track, 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);
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */ o->wrote_well= -1; /* neutral */
ret= 1; ret= 1;
ex: ex:
if(wopts!=NULL) if(wopts!=NULL)
@ -489,51 +414,39 @@ 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, d, disc, opts, 0); return isoburn_prepare_disc_aux(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, out_drive, disc, opts, 1); ret= isoburn_prepare_disc_aux(d, 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
@ -619,8 +532,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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
"Cannot allocate memory for read options", 0, "FATAL", 0); 0, "FATAL", NULL);
return(-1); return(-1);
} }
o->norock= 0; o->norock= 0;
@ -756,9 +669,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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Cannot allocate memory for image generation options", "Cannot allocate memory for image generation options",
0, "FATAL", 0); 0, "FATAL", NULL);
return(-1); return(-1);
} }
o->level= 2; o->level= 2;

View File

@ -60,17 +60,9 @@ 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) */
@ -79,7 +71,6 @@ 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;
@ -108,10 +99,6 @@ 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.
*/ */
@ -123,12 +110,6 @@ 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 */
}; };
@ -187,11 +168,6 @@ 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
@ -203,19 +179,6 @@ int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
*/ */
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.
@ -226,19 +189,6 @@ int isoburn_get_msc2(struct isoburn *o,
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.
@ -419,10 +369,8 @@ 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 65536 #define Libisoburn_toc_scan_max_gaP 8192
/* Creating a chain of image headers which form a TOC: /* Creating a chain of image headers which form a TOC:

View File

@ -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) {
isoburn_msgs_submit(o, 0x00060000, burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: image==NULL", "Program error: isoburn_read_image: image==NULL",
0, "FATAL", 0); 0, "FATAL", NULL);
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) {
isoburn_msgs_submit(o, 0x00060000, burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: incorrect disc status", "Program error: isoburn_read_image: incorrect disc status",
0, "FATAL", 0); 0, "FATAL", NULL);
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);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0); burn_msgs_submit(0x00060000, msg, 0, "WARNING", NULL);
goto create_blank_image; goto create_blank_image;
} }
@ -212,9 +212,6 @@ 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)
@ -224,7 +221,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;
@ -251,15 +248,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;
@ -280,8 +277,6 @@ 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 &&
@ -309,9 +304,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) {
isoburn_msgs_submit(NULL, 0x00060000, burn_msgs_submit(0x00060000,
"Program error: isoburn_start_emulation: o==NULL", "Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", 0); 0, "FATAL", NULL);
return -1; return -1;
} }

View File

@ -75,35 +75,23 @@ 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, Modifying or Blind Growing Setup for Growing or Modifying
The connector function family offers alternative API calls for performing The connector function family offers two alternative API calls for performing
the setup for several alternative image generation strategies. the setup for two alternative image generation strategies.
Growing: Growing:
If input and output drive are the same, then isoburn_prepare_disc() is to If input and output drive is 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, and if it bears blank media If the output drive is not the input drive, then it has to bear blank media
or overwriteable without a valid ISO image, then one may produce a consolidated or overwriteable without a valid ISO image. To prepare for such an image
image with old and new data. This will copy file data from an eventual input generation run, use isoburn_prepare_new_image(). The run will copy file data
drive with valid image, add any newly introduced data from the local from an eventual input drive with valid image, add any newly introduced data
filesystem, and produce a first session on output media. from the local 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(),
@ -200,15 +188,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 6 #define isoburn_libisofs_req_micro 4
/** 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 5 #define isoburn_libburn_req_minor 4
#define isoburn_libburn_req_micro 0 #define isoburn_libburn_req_micro 8
/** 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
@ -243,8 +231,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 2 #define isoburn_header_version_minor 1
#define isoburn_header_version_micro 2 #define isoburn_header_version_micro 6
/** 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.
@ -310,24 +298,6 @@ 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()
@ -369,6 +339,7 @@ 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()
@ -380,25 +351,6 @@ 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.
@ -433,7 +385,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);
/** Set up isoburn_disc_get_msc1() to return a fabricated value. /** Program 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.
@ -450,11 +402,7 @@ 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. @param flag Bitfield for control purposes. Unused yet. Submit 0.
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);
@ -574,7 +522,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 the data at the given address look like a ISO 9660 /** Try whether at the data at the given address look like a ISO 9660
image header and obtain its alleged size. Depending on the info mode 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
@ -583,16 +531,9 @@ 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= copy volume id to info (info needs 33 bytes) 1= return volume id (info needs 33 bytes)
2= @since 0.2.2 : @return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
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);
@ -1054,9 +995,6 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
case of random access media this will always be 0. Succesfull return is case of random access media this will always be 0. Succesfull 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.
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
@ -1094,8 +1032,7 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
int flag); int flag);
/** To choose the expansion method of Growing: /** Create a disc object for writing the new session from the created or loaded
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().
@ -1112,10 +1049,9 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
struct isoburn_imgen_opts *opts); struct isoburn_imgen_opts *opts);
/** To choose the expansion method of Modifying: /** Create a disc object for producing a new image from a previous image
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 a grabbed drive with blank writeable media. to be written to any grabbed libburn 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.
@ -1123,11 +1059,15 @@ 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_aquire() or @param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
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 output drive, from isoburn_drive_aquire() et.al.. @param out_drive The libburn drive which shall be write target.
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,
@ -1135,52 +1075,7 @@ 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
@ -1262,7 +1157,8 @@ 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);
/** Wait after normal end of operations until libisofs ended all write /** @since 0.1.0
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.
@ -1278,6 +1174,21 @@ 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

View File

@ -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.2.2.pl00.tar.gz http://scdbackup.sourceforge.net/xorriso-0.1.6.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,7 +14,6 @@ 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.
@ -36,10 +35,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.2.2.pl00.tar.gz, take it to a directory of your choice and do: Obtain xorriso-0.1.6.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.2.2.pl00.tar.gz tar xzf xorriso-0.1.6.pl00.tar.gz
cd xorriso-0.2.2 cd xorriso-0.1.6
Within that directory execute: Within that directory execute:
@ -69,11 +68,6 @@ 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
@ -166,9 +160,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.2.2 : Dynamic library and compile time header requirements for libisoburn-0.1.6 :
- libburn.so.4 , version libburn-0.5.0 or higher - libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher - libisofs.so.6 , version libisofs-0.6.4 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.

View File

@ -2594,10 +2594,11 @@ xorriso/xorriso.c
xorriso/xorrisoburn.c xorriso/xorrisoburn.c
Bug fix: -findi operated on nodes which ceased existence shortly before Bug fix: -findi operated on nodes which ceased existence shortly before
18 May 2008 [1799] 18 May 2008 []
xorriso/changelog.txt xorriso/changelog.txt
Documented changes and release timestamp Documented changes and release timestamp
---------------------------------- release - xorriso-0.1.6 - 2008.05.18.070001 ---------------------------------- release - xorriso-0.1.6 - 2008.05.18.070001
* New option -error_behavior with a first occasion 'image_loading' * New option -error_behavior with a first occasion 'image_loading'
* New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m * New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m
@ -2605,7 +2606,7 @@ Documented changes and release timestamp
* New TOC layout with volume id and sbsector= * New TOC layout with volume id and sbsector=
* New option -rom_toc_scan * New option -rom_toc_scan
* New option -load session|track|sbsector|volid * New option -load session|track|sbsector|volid
* Now depending on libburn-0.4.8 * Now depending on libburn-0.4.6
* New -blank and -format modes as_needed * New -blank and -format modes as_needed
* New option -list_formats * New option -list_formats
* New options -map and -map_single * New options -map and -map_single
@ -2618,7 +2619,7 @@ xorriso/xorriso.c
xorriso/xorrisoburn.c xorriso/xorrisoburn.c
Bug fix: -findi operated on nodes which ceased existence shortly before Bug fix: -findi operated on nodes which ceased existence shortly before
2008.05.18.084729 [1800] []
configure.ac configure.ac
README README
libisoburn/libisoburn.h libisoburn/libisoburn.h
@ -2632,693 +2633,10 @@ xorriso/configure_ac.txt
xorriso/changelog.txt xorriso/changelog.txt
Version leap to 0.1.7, requiring libburn-0.4.8 now Version leap to 0.1.7, requiring libburn-0.4.8 now
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.18.084729 ------------------------------------ cycle - xorriso-0.1.7 - 2008.05.18.
2008.05.20.075142 [1804] ------------------------------------ cycle - xorriso-0.1.7 -
xorriso/xorriso.c ------------------------------------ cycle - xorriso-0.1.7 -
Making Xorriso_prescan_args() safe against misunderstandings
2008.05.22.192618 [1808]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
First experiments of osirrox ISO-to-disk copying
2008.05.22.192737 [1809]
libisoburn/data_source.c
Removed outdated code branch
2008.05.22.210835 [1810]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New options -osirrox and -cpx
2008.05.24.092546 [1812]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Enabled osirrox of more file types, curbed with device files
2008.05.24.092853 [1813]
libisoburn/isoburn.c
Bug fix: modifying to overwriteable target yielded unmountable results
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.24.092853
* Bug fix: Modifying to overwriteable target yielded unmountable results
* New options -osirrox and -cpx
2008.05.24.170109 [1814]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Some polishing with -cpx
26 May 2008 [1815]
xorriso/configure_ac.txt
standalone version switch to libisofs-0.6.5
2008.05.26.181210 [1816]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Improved access permission restauration by osirrox
2008.05.27.201513 [1817]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New option -stream_recording
2008.05.31.174045 [1819]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
Implemented concatenation of split files during -cpx
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.31.174045
* New option -stream_recording
2008.06.01.134322 [1820]
xorriso/xorrisoburn.c
Reacted on harmless compiler warning
2008.06.01.145038 [1821]
xorriso/configure_ac.txt
standalone version switch to libisofs-0.6.6
2008.06.01.145155 [1822]
configure.ac
libisoburn/libisoburn.h
Switched requirements to libisofs-0.6.6
------------------------------------ cycle - xorriso-0.1.7 - 2008.06.01.145155
* Bug fix: major,minor numbers of device files appeared as 0,1 in next session
2008.06.02.070301 [1824]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.8
2 Jun 2008 [1825]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.1.8 - 2008.06.02.070301
* Bug fix: Modifying to overwriteable target yielded unmountable results
* Bug fix: major,minor numbers of device files appeared as 0,1 in next session
* New option -stream_recording for full speed with DVD-RAM and BD-RE
* New options -osirrox and -cpx allow to extract single files from ISO image
2008.06.02.141334 [1826]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.9
2 Jun 2008 [1827]
xorriso/changelog.txt
Documented changes and release timestamp
2 Jun 2008 [1828]
xorriso/xorriso.1
Beautified documentation of -osirrox
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.02.141334
5 Jun 2008 [1834]
xorriso/convert_man_to_html.sh
Beautified HTML man page
2008.06.05.165023 [1835]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
2008.06.06.083432 [1839]
xorriso/xorriso.c
Bug fix: -chmod unintentionally performed o-x as first operation
2008.06.06.103735 [1840]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Fine tuning of directory attribute copying with -cp_rx
------------------------------------ cycle - xorriso-0.1.9 -
* New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
* Bug fix: -chmod unintentionally performed o-x as first operation
2008.06.09.134432 [1841]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
Allowing to restore from image with pending changes
2008.06.09.165735 [1842]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Removed some outdated code parts
2008.06.10.094304 [1844]
libisoburn/isoburn.c
libisoburn/burn_wrap.c
Removed outdated code parts
2008.06.10.100231 [1845]
xorriso/xorrisoburn.c
Removed outdated code parts
2008.06.11.131607 [1846]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Proper handling of restore overwrite situations with directories and softlinks
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.11.131607
2008.06.12.112644 [1847]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Corrections about restoring of directories
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.12.112644
2008.06.13.151630 [1848]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -paste_in
2008.06.14.104745 [1849]
xorriso/xorriso.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New options -extract and -extract_single
14 Jun 2008 [1850]
xorriso/convert_man_to_html.sh
Beautification of HTML man page
2008.06.14.140459 [1851]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Correction about -extract / /
2008.06.14.184512 [1854]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
xorriso/convert_man_to_html.sh
Gave up the unusual parameter sequences of -extract and -paste_in
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.14.184512
* New option -paste_in to copy ISO files into parts of disk files
* New option -extract restores with arguments of -map or -update_r
2008.06.17.121524 [1857]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
New options -map_l, -compare_l, -update_l, -extract_l
2008.06.17.133914 [1858]
xorriso/xorriso.c
Reacted on harmless compiler warning
2008.06.17.170622 [1859]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Fixed a bug about -update_l
2008.06.18.132057 [1860]
libisoburn/isoburn.h
libisoburn/burn_wrap.c
Made -rom_toc_scan work on closed DVD-R in a DVD-ROM drive
2008.06.18.161512 [1861]
libisoburn/libisoburn.h
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/isofs_wrap.c
libisoburn/burn_wrap.c
libisoburn/data_source.c
New API functions isoburn_preset_msgs_submit(), isoburn_set_msgs_submit()
2008.06.18.161723 [1862]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Made use of isoburn_preset_msgs_submit()
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.18.161723
* New options -map_l, -compare_l, -update_l, -extract_l
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
2008.06.18.192913 [1863]
libisoburn/burn_wrap.c
Improved pacifier with -rom_toc_scan
2008.06.19.090436 [1864]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
xorriso/xorrisoburn.c
Renamed isoburn_*set_msgs_submit() and slightly changed meaning
2008.06.19.092458 [1865]
libisoburn/burn_wrap.c
Corrected wrong size unit MB to kB in toc scan pacifier text
2008.06.20.091647 [1866]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New -osirrox option auto_chmod_on
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.20.091647
2008.06.20.164105 [1867]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
Fixed several bugs with restore operations
2008.06.21.180701 [1870]
xorriso/xorriso.1
Corrected mistake in xorriso man page
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.21.180701
2008.06.22.080000 [1872]
xorriso/xorriso.c
Removed duplicated help text snippet
2008.06.22.090001 [1873]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.0
22 Jun 2008 [1874]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.2.0 - 2008.06.22.090001
* Bug fix: -chmod unintentionally performed o-x as first operation
* New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
* New option -extract restores with arguments of -map or -update_r
* New option -paste_in to copy ISO files into parts of disk files
* New options -map_l, -compare_l, -update_l, -extract_l
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
2008.06.22.111236 [1875]
xorriso/xorriso.c
Removed duplicated help text snippet
2008.06.22.135202 [1876]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.1
22 Jun 2008 [1877]
xorriso/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - xorriso-0.2.1 - 2008.06.22.135202
2008.06.27.124201 [1880]
xorriso/xorrisoburn.c
Bug fix: -as cdrecord -atip falsely announced overwriteable DVD-RW to sdvdbackup
2008.06.27.130235 [1881]
xorriso/xorriso.c
Extended -as cdrecord blank= by blank type format_overwrite
------------------------------------ cycle - xorriso-0.2.1 - 2008.06.27.130235
2008.07.03.133023 [1882]
xorriso/xorriso.c
Flushing stdout after each result text to deconfuse stdout/stderr with SSH
2008.07.04.070001 [1884]
xorriso/xorriso.c
Supporting option -as cdrecord -waiti
2008.07.05.132528 [1885]
libisoburn/libisoburn.h
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/isofs_wrap.c
libisoburn/burn_wrap.c
libisoburn/data_source.c
New API function isoburn_prepare_blind_grow() for -as mkisofs -multi
2008.07.05.133721 [1886]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -grow_blindly
2008.07.05.180241 [1887]
libisoburn/isoburn.c
Fixed a bug with -grow_blindly to overwriteable media
2008.07.05.182424 [1888]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
New options -C and -M for -as mkisofs
2008.07.05.184434 [1889]
xorriso/xorriso.c
Cared for a peculiarity of growisofs when using mkisofs -C
5 Jul 2008 [1890]
xorriso/xorriso_eng.html
Updated xorriso homepage
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.05.184434
* New API function isoburn_prepare_blind_grow()
* New option -grow_blindly
* New options -C and -M for -as mkisofs emulation
2008.07.06.110336 [1891]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
Improved effective drive address with -as mkisofs -M
2008.07.07.095531 [1892]
xorriso/xorriso.c
Fixed bug about -as mkisofs without -C
2008.07.07.102941 [1893]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
Semi-permanent emulation by start names xorrisofs,genisofs,mkisofs,genioimage
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.07.102941
2008.07.07.150241 [1894]
xorriso/xorriso.c
Correction about -as mkisofs -C if already an input device was set
2008.07.07.150337 [1895]
libisoburn/isoburn.c
Correction about isoburn_igopt_get_effective_lba() with blind growing
7 Jul 2008 [1896]
xorriso/xorriso.1
Clarification about -grow_blindly predicted_nwa
2008.07.07.150337 [1897]
xorriso/xorriso.c
xorriso/xorriso.1
Made leafname triggered emulation more similar to -as emulation
2008.07.08.092732 [1898]
Makefile.am
README
xorriso/xorriso_makefile_am.txt
xorriso/README
Installing softlinks xorrisofs and osirrox pointing to the xorriso binary
2008.07.08.102622 [1899]
xorriso/xorriso_private.h
Header file forgotten with rev 1897
2008.07.08.132054 [1900]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Avoided misleading message about emptied ISO image during -as mkisofs -C
8 Jul 2008 [1901]
xorriso/xorriso_eng.html
Documented newest progress
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.08.132054
* Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
* make install creates xorriso aliases as symbolic links: osirrox, xorrisofs
2008.07.09.055133 [1901]
xorriso/xorriso.c
Avoided to use MMC code with -as mkisofs -M by prepending stdio: to address
2008.07.09.055133 [1902]
xorriso/xorriso.h
xorriso/xorriso.c
Fixed bug with -as mkisofs -x and pattern expansion
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.09.055133
2008.07.09.155540 [1903]
Makefile.am
xorriso/xorriso_private.h
+ xorriso/xorriso_buildstamp.h
+ xorriso/xorriso_buildstamp_none.h
xorriso/xorriso_makefile_am.txt
xorriso/make_xorriso_standalone.sh
Opportunity to generate build timestamp via make buildstamped
9 Jul 2008 [1904]
xorriso/xorriso_makefile_am.txt
Completed (unused) dist rule of standalone-xorriso
2008.07.10.141731 [1905]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
Enabled -multi and -msinfo with -as cdrecord
2008.07.10.141913 [1906]
libisoburn/libisoburn.h
Small correction in API introduction text
2008.07.10.144535 [1907]
xorriso/xorriso_private.h
Header file forgotten with rev 1903
2008.07.10.162809 [1908]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorriso.1
cdrecord emulation by start names xorrecord, cdrecord, wodim, cdrskin
2008.07.10.164015 [1909]
xorriso/xorriso.c
Reacted on compiler warning
2008.07.10.164412 [1910]
Makefile.am
README
xorriso/xorriso_makefile_am.txt
xorriso/README
Installing softlink xorrecord pointing to the xorriso binary
10 Jul 2008 [1911]
xorriso/xorriso.1
xorriso/xorriso_eng.html
xorriso/convert_man_to_html.sh
Some documentation updates
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.10.164412
* New options -multi and -msinfo for -as cdrecord emulation
* make install creates xorriso alias as symbolic link: xorrecord
2008.07.12.181846 [1912]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
New info mode 2 with isoburn_read_iso_head()
2008.07.12.184833 [1913]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New options --grow_overwriteable_iso and write_start_address= with -as cdrecord
2008.07.14.114515 [1918]
libisoburn/libisoburn.h
Required libburn version is now 0.4.9
2008.07.14.114613 [1919]
configure.ac
Did LT_CURRENT++, LT_AGE++ which was forgotten with revision 1885
2008.07.14.120527 [1920]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
New flag options with isoburn_read_iso_head()
2008.07.14.125133 [1921]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -isosize with -as cdrecord
14 Jul 2008 [1923]
xorriso/convert_man_to_html.sh
Small correction with a sed expression
2008.07.15.063040 [1924]
xorriso/xorriso_makefile_am.txt
Generating automatic build timestamp
2008.07.15.121754 [1925]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option tsize= with -as cdrecord
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.15.121754
* New options --grow_overwriteable_iso and write_start_address= with -as cdrecord
* New options -isosize and tsize= with -as cdrecord
2008.07.16.130711 [1933]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -pacifier, more compatible pacifier with -as mkisofs
2008.07.16.130758 [1934]
xorriso/configure_ac.txt
Updated xorriso standalone configure.ac version number BURN_*_VERSION
2008.07.16.130841 [1935]
libisoburn/libisoburn.h
Required libburn version is now 0.5.0
2008.07.16.131110 [1936]
configure.ac
Required libburn version is now 0.5.0
2008.07.16.140043 [1937]
xorriso/xorriso.c
xorriso/xorriso.1
Recognizing "b" as speed factor for BD media
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.16.140043
* New option -pacifier, more compatible pacifier with -as mkisofs
2008.07.17.110812 [1939]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
Ability to emulate a featured bug with mkisofs -C : read 16 block too early
2008.07.17.111411 [1940]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Rectified usage of original xorriso options underneath growisofs
2008.07.17.183024 [1941]
libisoburn/burn_wrap.c
Recognizing growisofs follow-up sessions on xorriso overwriteables
2008.07.17.184520 [1942]
libisoburn/burn_wrap.c
xorriso/xorriso.c
xorriso/xorrisoburn.c
Removed MULTI construction site remarks
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.17.184520
2008.07.18.120001 [1944]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.2
18 Jul 2008 []
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.2.2 - 2008.07.18.120001
* New API function isoburn_prepare_blind_grow()
* New option -grow_blindly
* Options -C and -M for -as mkisofs emulation
* Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
* make install creates aliases as symbolic links: osirrox, xorrisofs, xorrecord
* Options for -as cdrecord emulation: -multi, -msinfo, -isosize, tsize,
--grow_overwriteable_iso, write_start_address,
* New option -pacifier, more compatible pacifier with -as mkisofs
------------------------------------ cycle - xorriso-0.2.3 -
------------------------------------ cycle - xorriso-0.2.3 -
=============================================================================== ===============================================================================
@ -3329,23 +2647,21 @@ Documented changes and release timestamp
------------------------------------------------- important ------------------------------------------------- important
make Xorriso_prescan_args() safe against misunderstandings
------------------------------------------------- development ------------------------------------------------- development
??? Clarify handling of links in ISO and on disk during restore - mkisofs,cdrecord multi session
- -restore
??? -compare_l -update_l /disk_path_start iso_rr_path_start path[s] --
> Relative addressing and pattern matching : > Relative addressing and pattern matching :
iso_rr_pattern on iso_rr_pattern on
cd /u/FERTIG cd /u/FERTIG
lsd nonexist/.. lsd nonexist/..
- perform any long lasting operation in separate threads while
the main thread cares for user and message queues.
- Introduce an interrupt key for dialog
- watch read latency and evaluate read quality indicator
- regularly do valgrind check for memory leaks - regularly do valgrind check for memory leaks
- ??? http://scan.coverity.com/faq.html - ??? http://scan.coverity.com/faq.html
@ -3364,54 +2680,7 @@ Documented changes and release timestamp
> Make transactional the tree deletions meant for replacing > Make transactional the tree deletions meant for replacing
- Introduce an interrupt key for dialog
------------------------------------------------- libisofs wishes
------ problem fixes :
- Error code for libisoburn data source read errors.
- Proper reaction on severity of errors issued by data_source
(currently even a FATAL gets converted to ISO_FILE_READ_ERROR
in iso_stream_read())
- #define ISO_ERR_PRIO(e) ((e & 0x00700000) << 8)
(rather than 0x00F00000, see ticket 135)
- the error handling system should be comprehensively documented
and eventually rectified where needed.
- With softlink /X/YZ and Joliet enabled:
libisofs: HINT : Can't add YZ to Joliet tree. This kind of files can only be added to a Rock Ridget tree. Skipping.
HINT is not a suitable severity for this. Better: WARNING, SORRY, MISHAP
One should at least give the full path of /X/YZ or the type of the file.
------ feature enhancements :
- Data files >= 4 GiB.
- API: iso_image_update_sizes() to be run immediately before -commit
- A repeatable shell command as origin ("disk_file")
of a regular file in the ISO image.
- API: iso_stream_get_dev_ino() to get the source side dev_t and ino_t
- API: iso_cout_stream_get_params(stream, &path, &offset, &size)
- Image checksum tag in the last data blocks of an image.
A data file entry should point to that block.
- creation of bootable images
------ extended attribute stunts: Not visible for mount but for libisofs
- file checksums
- ACLs
- man attr(5) extended attributes
=============================================================================== ===============================================================================

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.2.2], [http://libburnia-project.org]) AC_INIT([xorriso], [0.1.6], [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=5 BURN_MINOR_VERSION=4
BURN_MICRO_VERSION=1 BURN_MICRO_VERSION=9
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=6 LIBISOFS_MICRO_VERSION=4
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)

View File

@ -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>/\&nbsp;<BR><b>Session model:<\/b>/' \ -e 's/<b>Session model:<\/b>/\&nbsp;<BR><b>Session model:<\/b>/' \
-e 's/<b>Media types and states:<\/b>/\&nbsp;<BR><b>Media types and states:<\/b>/' \ -e 's/<b>Media types and states:<\/b>/\&nbsp;<BR><b>Media types and states:<\/b>/' \
-e 's/<b>Creating, Growing, Modifying, Blind/\&nbsp;<BR><b>Creating, Growing, Modifying, Blind/' \ -e 's/<b>Creating, Growing, Modifying:<\/b>/\&nbsp;<BR><b>Creating, Growing, Modifying:<\/b>/' \
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \ -e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \ -e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \ -e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
@ -70,7 +70,6 @@ then
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \ -e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \ -e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \ -e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \
-e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \ -e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \

View File

@ -25,7 +25,7 @@
current_dir=$(pwd) current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone" lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.2.2 xorriso_rev=0.1.6
# For unstable uploads: # For unstable uploads:
# xorriso_pl="" # xorriso_pl=""
# For stable releases: # For stable releases:
@ -124,17 +124,12 @@ 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 \

View File

@ -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 "Jul, 17, 2008" .TH XORRISO 1 "May, 15, 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,7 +15,6 @@
.\" .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.
@ -31,8 +30,6 @@ 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
@ -50,12 +47,11 @@ 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
Writes result either as completely new image or as add-on session Can write result as completely new image to optical media or
to optical media or filesystem objects. filesystem objects.
.br .br
Can perform multi-session tasks as emulation of mkisofs and cdrecord. Can write result as add-on session to appendable multi-session media,
.br to overwriteable media, to regular files, and to block devices.
Can restore files from ISO image to disk filesystem (see osirrox).
.br .br
Scans for optical drives, blanks re-useable optical media. Scans for optical drives, blanks re-useable optical media.
.br .br
@ -71,7 +67,7 @@ Session model
.br .br
Media types and states Media types and states
.br .br
Creating, Growing, Modifying, Blind Growing Creating, Growing, Modifying
.br .br
Libburn drives Libburn drives
.br .br
@ -120,8 +116,7 @@ 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. one and the modifications. See paragraph Creating, Growing, Modifying below.
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
@ -151,7 +146,7 @@ There are two families of media in the MMC standard:
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, BD-RE, and formatted DVD-RW. \fBOverwriteable\fR media are DVD-RAM, DVD+RW, 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
@ -186,7 +181,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 read-only hardware then it will written with option -close on. If the drive is incapable of writing 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
@ -196,7 +191,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, Blind Growing: .B Creating, Growing, Modifying:
.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
@ -229,25 +224,11 @@ 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
@ -259,8 +240,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 methods Some drive types do not support the method of growing but only the method
of modifying and blind growing. They all are suitable for newly created images. of modifying. 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.
@ -291,8 +272,7 @@ 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 or via "stdio:" and can only be used as target for the method of modifying.
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
@ -304,7 +284,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 one session Standard output is currently suitable for creating a single new 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
@ -442,15 +422,13 @@ 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 or to blind growing. from -outdev then switch from growing to modifying. The same rules and
It depends on the setting of -grow_blindly which of both gets activated. restrictions apply as with -dev.
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 or to blind growing. Unlike -dev and -indev this action growing to modifying. Unlike -dev and -indev this action does not load a
does not load a new ISO image. So it can be performed even if there are pending new ISO image. So it can be performed even if there are pending changes.
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
@ -463,21 +441,6 @@ 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
@ -643,10 +606,6 @@ 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
@ -670,10 +629,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.
.TP .br
\fB\-update_l\fR disk_prefix iso_rr_prefix disk_path [***] -update_r is also a convenient compromise between -add addressing and -cpr
Performs -update_r with each of the disk_path arguments. iso_rr_path will be addressing: Its semantics is similar to -add and thus avoids the pitfalls
composed from disk_path by replacing disk_prefix by iso_rr_prefix. inherited from cp -r behavior. Its syntax resembles cp, though.
.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
@ -940,13 +899,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 to growing mode. Switch from eventual modifiying mode to growing mode.
(A subsequent -outdev will activate modification mode or blind growing.) (A subsequent -outdev will activate modification mode.)
-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
@ -984,7 +943,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. Other media or states are gracefully ignored. DVD-RAM or BD-RE.
.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.
@ -1181,9 +1140,6 @@ 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
@ -1228,14 +1184,12 @@ 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|b] \fB\-speed\fR number[k|m|c|d]
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, "d" for DVD, "b" for BD, "x" is optional. by "c" for CD and "d" for DVD. Example speeds:
.br
Example speeds:
.br .br
706k = 706kB/s = 4c = 4xCD 706k = 706kB/s = 4c = 4xCD
.br .br
@ -1248,15 +1202,8 @@ 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" then simulate burning or refuse with FAILURE event if If "on" 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"]
@ -1431,8 +1378,6 @@ 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,
@ -1461,21 +1406,6 @@ 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,
@ -1493,6 +1423,21 @@ 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
@ -1644,106 +1589,6 @@ 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 [***]
Performs -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 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
@ -1751,22 +1596,25 @@ 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. depicted by the personality word. This is only allowed if no image changes
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, -o, -M, -C, -path-list, -m, -exclude-list, Among them: -R (always on), -J, -graft-points, -o, -path-list, -m, -print-size,
-f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points, -V, -v, -version, pathspecs as with xorriso -add. A lot of options are not
pathspecs as with xorriso -add. supported and lead to failure of the mkisofs emulation. Some are ignored,
A lot of options are not supported and lead to failure of the mkisofs but better do not rely on this tolerance.
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
@ -1777,11 +1625,10 @@ 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 pathspecs are given and if no output file was chosen before or during the If no output file was chosen before or during a "mkisofs" option list, then
"mkisofs" option list, then standard output (-outdev "-") will get into effect. standard output (-outdev "-") will get into effect before pathspecs get
If -o points to a regular file, then it will be truncated to 0 bytes added. 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.
@ -1790,33 +1637,20 @@ 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 "\fBxorrisofs\fR", "\fBgenisoimage\fR", and "\fBgenisofs\fR" Personalites "\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=, tsize=, Among them: -v, dev=, speed=, blank=, fs=, -eject, -atip, padsize=,
-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, and on blanking modes unknown to xorriso. -audio, -scanbus, -multi, -msinfo, --grow_overwriteable_iso,
.br and on blanking modes unknown to xorriso.
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.
@ -1824,37 +1658,9 @@ 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 "\fBxorrecord\fR", "\fBwodim\fR", and "\fBcdrskin\fR" are aliases Personalites "\fBwodim\fR" and "\fBcdrskin\fR" are aliases for "cdrecord".
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
@ -1994,19 +1800,15 @@ 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 Write a ISO image into a pipe (single-session only)
.br .br
Perform multi-session runs as of cdrtools traditions Perform a single session run 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
@ -2146,67 +1948,21 @@ 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 .B Write a ISO image into a pipe (single-session only)
\fB$\fR xorriso -outdev - \\ \fB$\fR xorriso -outdev - \\
.br .br
... ...
.br .br
| gzip >image.iso.gz | gzip >image.iso.gz
.SS .SS
.B Perform multi-session runs as of cdrtools traditions .B Perform a single session run 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
The first session is written like this: \fB$\fR xorriso -as mkisofs -J -R /home/prepared_for_iso/tree | \\
.br .br
\fB$\fR xorriso -as mkisofs prepared_for_iso/tree1 | \\ xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -eject -
.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,
@ -2279,11 +2035,21 @@ 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. With CD media, Linux mount trees which represent the older backup versions. Multi-session media and
accepts session numbers directly by its option "session=". most overwriteable media written by xorriso can tell
the sbsector by xorriso option -toc.
.br .br
Multi-session media and most overwriteable media written by xorriso can tell Another way to keep track of incremental sessions is to
the sbsector of a session by xorriso option -toc. set before writing a suitable path for xorriso option -session_log where
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
@ -2297,32 +2063,15 @@ 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 .br
.B Restore directory trees from a particular ISO session to disk If you have enough re-useable media for a round-robin scheme then better do
This is an alternative to mounting the media and using normal file operations. full backups with blank media each time. Blanking can be achieved by
either a separate run:
.br .br
First check which backup sessions are on the media: \fB$\fR xorriso -outdev /dev/sr0 -blank as_needed -eject all
.br .br
\fB$\fR xorriso -outdev /dev/sr0 -toc or in the update run by using option -blank "as_needed" before
.br option -update_r.
Then load the desired session and copy the file trees to disk.
Avoid to eventually create /home/thomas/restored without rwx-permission.
.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
.br .br
.SH FILES .SH FILES
.SS .SS

File diff suppressed because it is too large Load Diff

View File

@ -19,17 +19,7 @@ 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 and for decision of special behavior. with messages.
@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);
@ -82,13 +72,6 @@ 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.
@ -250,13 +233,6 @@ 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);
@ -300,13 +276,9 @@ 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);
/* Options -extract , -extract_single */ /* Option -iso_rr_pattern "on"|"ls"|"off" */
/* @param flag bit0=do not report the restored item int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
bit1=do not reset pacifier, no final pacifier message int flag);
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);
@ -325,19 +297,12 @@ 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);
@ -345,8 +310,7 @@ 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 */
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high /* @return <=0 error , 1 success, 2 revoked by -reassure
@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);
@ -382,15 +346,6 @@ 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);
@ -408,9 +363,6 @@ 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);
@ -420,25 +372,15 @@ 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);
@ -516,10 +458,6 @@ 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);

View File

@ -1,3 +0,0 @@
#ifndef Xorriso_build_timestamP
#define Xorriso_build_timestamP "-none-given-"
#endif

View File

@ -1,3 +0,0 @@
#ifndef Xorriso_build_timestamP
#define Xorriso_build_timestamP "-none-given-"
#endif

View File

@ -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, BD-RE, 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, scdbackup">
<META NAME="robots" CONTENT="follow"> <META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE> <TITLE>xorriso homepage english</TITLE>
</HEAD> </HEAD>
@ -24,8 +24,6 @@ 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>
@ -35,10 +33,10 @@ Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
<P> <P>
<H2>Hardware requirements:</H2> <H2>Hardware requirements:</H2>
A CD/DVD/BD recorder suitable for A CD/DVD 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 or BD). and to MMC-5 for DVD).
<BR> <BR>
</P> </P>
@ -60,15 +58,14 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR> GPL software included:<BR>
</H2> </H2>
<DL> <DL>
<DT>libburn-0.5.1</DT> <DT>libburn-0.4.9</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD> <DD>reads and writes data from and to CD and DVD.</DD>
<DD>(founded by Derek Foreman and Ben Jansens, <DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by furthered since August 2006 by team of libburnia-project.org)</DD>
Thomas Schmitt from team of libburnia-project.org)</DD> <DT>libisofs-0.6.4</DT>
<DT>libisofs-0.6.6</DT> <DD>operates ISO 9660 images.</DD>
<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.2.2</DT> <DT>libisoburn-0.1.6</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>
@ -89,7 +86,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, DVD, BD-RE are fixely integrated. ISO 9660 formatter and burner for CD or DVD 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.
@ -107,17 +104,15 @@ Changes file properties in the ISO image.
Updates ISO subtrees incrementally to match given disk subtrees. Updates ISO subtrees incrementally to match given disk subtrees.
</LI> </LI>
<LI> <LI>
Writes result as completely new image or as add-on session Can write result as completely new image to optical media or
to optical media or filesystem objects. filesystem objects.
</LI> </LI>
<LI> <LI>
Can perform multi-session tasks as emulation of mkisofs and cdrecord. Can write result as add-on session to appendable multi-session media,
to overwriteable media, to regular files, and to block devices.
</LI> </LI>
<LI> <LI>
Can restore single files and whole trees from ISO image to disk filesystem. Scans for optical drives, blanks re-useable optical media.
</LI>
<LI>
Scans for optical drives, blanks re-useable optical media, formats media.
</LI> </LI>
<LI> <LI>
Suitable for: Suitable for:
@ -279,36 +274,6 @@ 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>&nbsp;xorriso -outdev - ...other.options... | consumer</KBD></DD> <DD>$<KBD>&nbsp;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>&nbsp;export MKISOFS="xorrisofs"</KBD></DD>
<DD>$<KBD>&nbsp;growisofs -Z /dev/dvd /some/files</KBD></DD>
<DD>$<KBD>&nbsp;growisofs -M /dev/dvd /more/files</KBD></DD>
<DT>
One may switch from mkisofs emulation to xorriso's own command mode:
</DT>
<DD>$<KBD>&nbsp;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>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT> <DT>
<HR> <HR>
</DT> </DT>
@ -322,8 +287,7 @@ One may switch from mkisofs emulation to xorriso's own command mode:
</DL> </DL>
Testers wanted who are willing to risk some double layer DVD media or Testers wanted who are willing to risk some double layer DVD media.
are interested in using BD-R media.
</P> </P>
@ -332,8 +296,8 @@ are interested in using BD-R 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.2.2.pl00.tar.gz">xorriso-0.2.2.pl00.tar.gz</A> <DD><A HREF="xorriso-0.1.6.pl00.tar.gz">xorriso-0.1.6.pl00.tar.gz</A>
(1020 KB). (980 KB).
</DD> </DD>
</DL> </DL>
</DD> </DD>
@ -358,30 +322,21 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
<HR> <HR>
<P> <P>
Bug fixes towards xorriso-0.2.0.pl00: Bug fixes towards xorriso-0.1.4.pl00:
<UL> <UL>
<LI>-update_r and others did not work properly with relative paths</LI>
<LI>libburn could not access drives /dev/scdN without existing /dev/srN</LI>
</UL> </UL>
</P> </P>
<P> <P>
Enhancements towards previous stable version xorriso-0.2.0.pl00: Enhancements towards previous stable version xorriso-0.1.4.pl00:
<UL> <UL>
<LI>Support for BD-RE</LI>
<LI>New option -grow_blindly</LI> <LI>New options -map and -map_single</LI>
<LI>Options -C and -M with -as mkisofs emulation</LI> <LI>New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m</LI>
<LI>Options with -as cdrecord emulation:<BR> <LI>Emulated -toc on overwriteable media, new -toc layout with volume id</LI>
-multi , -msinfo , --grow_overwriteable_iso , write_start_address= , <LI>New option -load makes alternative sessions accessible</LI>
-isosize , tsize= <LI>New -blank and -format modes 'as_needed'</LI>
</LI> <LI>New option -list_formats and -format mode 'by_index_' </LI>
<LI>make install creates xorriso aliases as symbolic links:
osirrox, xorrisofs, xorrecord
</LI>
<LI>
Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
</LI>
</UL> </UL>
</P> </P>
@ -389,25 +344,25 @@ Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
<P> <P>
<DL> <DL>
<DT><H3>Development snapshot, version 0.2.3 :</H3></DT> <DT><H3>Development snapshot, version 0.1.7 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.2.pl00: <DD>Bug fixes towards xorriso-0.1.6.pl00:
<UL> <UL>
<LI>- none yet -</LI>
<!-- <!--
--> -->
<LI>- none yet -</LI>
</UL> </UL>
</DD> </DD>
<DD>Enhancements towards stable version 0.2.2.pl00: <DD>Enhancements towards stable version 0.1.6.pl00:
<UL> <UL>
<LI>- none yet -</LI>
<!-- <!--
--> -->
<LI>- none yet -</LI>
</UL> </UL>
</DD> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.2.3</A> <DD><A HREF="README_xorriso_devel">README 0.1.7</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.2.3 -help</A></DD> <DD><A HREF="xorriso_help_devel">xorriso_0.1.7 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.3)</A></DD> <DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.7)</A></DD>
<DD>&nbsp;</DD> <DD>&nbsp;</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
@ -417,8 +372,8 @@ libburnia libraries.
installation see README) installation see README)
</DD> </DD>
<DD> <DD>
<A HREF="xorriso-0.2.3.tar.gz">xorriso-0.2.3.tar.gz</A> <A HREF="xorriso-0.1.7.tar.gz">xorriso-0.1.7.tar.gz</A>
(1020 KB). (980 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
@ -440,12 +395,13 @@ 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>
<DT>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/"> <DD>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. vanilla tools like make and gcc are needed.</DD>
</DT> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
</DL> </DL>
</P> </P>

View File

@ -20,17 +20,6 @@ xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with
xorriso_xorriso_LDADD = $(THREAD_LIBS) xorriso_xorriso_LDADD = $(THREAD_LIBS)
# 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 \
@ -39,7 +28,6 @@ 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 \
@ -149,6 +137,7 @@ xorriso_xorriso_SOURCES = \
\ \
version.h version.h
noinst_PROGRAMS = \ noinst_PROGRAMS = \
test/compare_file test/compare_file
@ -162,41 +151,6 @@ 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 $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
ln -s xorriso $(bindir)/xorrisofs
if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
ln -s xorriso $(bindir)/osirrox
if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
ln -s xorriso $(bindir)/xorrecord
# <<< seems to be outperformed by the .PHONY above
# Trying to create a build timestamp file
#
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
#
# Processing of the "all:" rule happens too late.
# How to create a dependency of xorriso.c on buildstamp ?
# Not working:
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
# on buildstamp. It runs. But at quite random occasions.
# xorriso/xorriso_buildstamp.h: buildstamp
#
# all: buildstamp
# <<< seems to be outperformed by the .PHONY above
## ========================================================================= ## ## ========================================================================= ##
# Indent source files # Indent source files
@ -230,7 +184,6 @@ EXTRA_DIST = \
COPYING \ COPYING \
INSTALL \ INSTALL \
xorriso/changelog.txt \ xorriso/changelog.txt \
xorriso/xorriso_buildstamp_none.h \
$(man_MANS) $(man_MANS)

View File

@ -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.2.2" #define Xorriso_program_versioN "0.1.6"
/** The source code release timestamp */ /** The source code release timestamp */
#include "xorriso_timestamp.h" #include "xorriso_timestamp.h"
@ -26,10 +26,7 @@
#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
@ -48,9 +45,8 @@
/* <<< ??? */ /* <<< ??? */
typedef int (*Cleanup_app_handler_T)(); typedef int (*Cleanup_app_handler_T)();
struct LinkiteM; /* Trace of hops during symbolic link resolution */ struct LinkiteM;
struct ExclusionS; /* List of -not_* conditions */ struct ExclusionS;
struct PermiteM; /* Stack of temporarily altered access permissions */
/* maximum number of history lines to be reported with -status:long_history */ /* maximum number of history lines to be reported with -status:long_history */
@ -74,13 +70,6 @@ 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;
@ -133,8 +122,6 @@ 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.
@ -157,18 +144,12 @@ struct XorrisO { /* the global context of xorriso */
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;
@ -177,14 +158,6 @@ 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;
@ -273,21 +246,17 @@ 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;
@ -417,43 +386,6 @@ 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);
int Sfile_str(char target[SfileadrL], char *source, int flag); int Sfile_str(char target[SfileadrL], char *source, int flag);
@ -471,26 +403,6 @@ 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);
@ -499,12 +411,6 @@ 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);
@ -580,42 +486,6 @@ 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);
struct LstrinG {
char *text;
struct LstrinG *prev,*next;
};
int Lstring_destroy(struct LstrinG **lstring, int flag);
int Lstring_destroy_all(struct LstrinG **lstring, int flag);
/*
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
*/
int Lstring_new_binary(struct LstrinG **lstring, char *data, int data_len,
struct LstrinG *link, int flag);
/*
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
*/
int Lstring_new(struct LstrinG **lstring, char *text, struct LstrinG *link,
int flag);
int Lstring_append_binary(struct LstrinG **entry, char *data, int data_len,
int flag);
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
int flag);
int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
struct XorrisO *xorriso, int flag);
#endif /* Xorriso_private_includeD */ #endif /* Xorriso_private_includeD */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.07.18.120001" #define Xorriso_timestamP "2008.05.18.070001"

File diff suppressed because it is too large Load Diff

View File

@ -20,8 +20,8 @@ struct FindjoB;
/* The minimum version of libisoburn to be used with this version of xorriso /* 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 2 #define xorriso_libisoburn_req_minor 1
#define xorriso_libisoburn_req_micro 2 #define xorriso_libisoburn_req_micro 6
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag); int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -188,13 +188,7 @@ 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);
/* @param write_start_address is valid if >=0 int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
@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
@ -206,10 +200,8 @@ 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 *node_pt, void **stream, int flag); 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);
@ -224,9 +216,6 @@ 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
@ -236,49 +225,5 @@ 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);
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */