Compare commits
192 Commits
ZeroOneZer
...
ZeroTwoZer
Author | SHA1 | Date | |
---|---|---|---|
4d864281a7 | |||
382626010e | |||
33915de0d3 | |||
49fdad6f48 | |||
554651dc68 | |||
0557d1653f | |||
9dd400d630 | |||
883551a41e | |||
bad48be6a9 | |||
973383bb9b | |||
a1968a431d | |||
4de452fb94 | |||
ae5ad5a143 | |||
ceca17e946 | |||
32e15b5432 | |||
510ff61bf3 | |||
a14af44951 | |||
818de9128d | |||
a15e636952 | |||
96d4e1fe92 | |||
0d2e79ece8 | |||
26b3dcb1f5 | |||
0d407b63ad | |||
24ad7e5abe | |||
d784d8f2e9 | |||
b61ca07f13 | |||
a7cfdfeadb | |||
25c4acaf79 | |||
daa98e8008 | |||
cada9d4ba3 | |||
b595c7f836 | |||
440247dc98 | |||
fca0648618 | |||
2b55dd08fe | |||
df05ccc14c | |||
5aab9a006a | |||
e13615cff6 | |||
dc2664f753 | |||
27f8339527 | |||
b9f01ef512 | |||
106ab1fb0c | |||
8ad34a7c76 | |||
e69cd236df | |||
751530f44e | |||
6ba4b25045 | |||
69fd5ff008 | |||
c410093711 | |||
53f462b406 | |||
ad33b43f99 | |||
a2c7c523aa | |||
de589419da | |||
ddf698c1c4 | |||
74da4d1749 | |||
c66cfdf72c | |||
4866be0555 | |||
d7c4fadba3 | |||
b287c109c3 | |||
8abcf1c238 | |||
073da62d73 | |||
191f54eca2 | |||
421693bb73 | |||
5f5b0c7016 | |||
6bc2d3e0a3 | |||
0f8e6f24db | |||
9b7451f893 | |||
fc8d4b8dbe | |||
96b808e0c5 | |||
ad6585dbd7 | |||
6b1eb7d79f | |||
eeab74920f | |||
ca0179ad57 | |||
36aa59297a | |||
aeef058800 | |||
6b459b1cfb | |||
1d8e7620f0 | |||
cf103ac180 | |||
3a4dc252f0 | |||
0e1f89d7c3 | |||
7f1b8b07a6 | |||
252521f930 | |||
e92b796215 | |||
585445ccc8 | |||
e9171b5133 | |||
947bb33173 | |||
3eae8634cd | |||
f830c30196 | |||
e412f65656 | |||
b7caaed66c | |||
8ffcf40fc4 | |||
28d68a79a5 | |||
1576983e17 | |||
97c22f86a4 | |||
f0b1cbddf3 | |||
19e803ba0d | |||
a4c4026446 | |||
68d70682dd | |||
26eb9e659d | |||
c3048d6282 | |||
1a2d3bc70c | |||
adeaf8b749 | |||
4d35893fd0 | |||
b937313bb5 | |||
e1c46f5023 | |||
1fbe8b8010 | |||
c7355e90aa | |||
26b87932a0 | |||
1798a8441c | |||
a6b8794c7c | |||
56a1512732 | |||
1a1694d595 | |||
f7b656183e | |||
e4e6635a71 | |||
1c4a14c8bd | |||
529959878a | |||
9992f64247 | |||
992996f902 | |||
0e394bca6a | |||
27cde95ca0 | |||
691955d387 | |||
3474a6a981 | |||
7ea03c4079 | |||
f9afb4a2f9 | |||
6cfbe6fcd0 | |||
052f992488 | |||
a44e7db9ea | |||
07b54e308a | |||
b0ac8b67ae | |||
3309d84dc3 | |||
65d1be4310 | |||
c90cf38e70 | |||
50b4c033bf | |||
3bc81537a2 | |||
5e06e3c724 | |||
47c72f3059 | |||
2309710729 | |||
4f047c0cf6 | |||
ddc230bcda | |||
77300abd94 | |||
a4b392ef70 | |||
e9c02ebcb1 | |||
005a317059 | |||
5982c8e6b3 | |||
fb1de29cfa | |||
f760da0016 | |||
2c00ae34ae | |||
1fb2d8c392 | |||
5a72e86936 | |||
10a8ce35e8 | |||
f01488b574 | |||
5f5ebb1956 | |||
01983365aa | |||
2528d00aba | |||
0dfc79bd4e | |||
1fb2576e93 | |||
4200446ffe | |||
c41d072448 | |||
2d73d52f7a | |||
460a04fb47 | |||
388996150e | |||
869c8090f4 | |||
41ea389118 | |||
1aac97caf3 | |||
3f039e4b08 | |||
dd4dd5e1e8 | |||
e51ace31b1 | |||
55a70f1463 | |||
cc3b6f75db | |||
d8b0d85ad4 | |||
f717634242 | |||
584aeb7dab | |||
d3cdbc2bfb | |||
69056e7a2b | |||
e947bdece4 | |||
fa4b90c968 | |||
5fe8ac9f7f | |||
1f01e954d4 | |||
212fa7ba72 | |||
25a68fcf77 | |||
43ea3bdef2 | |||
aaeb1204b7 | |||
df83afc55b | |||
be272a685b | |||
08c68166f3 | |||
4a8f206aa2 | |||
40af376f57 | |||
20dec92aab | |||
c0fc786875 | |||
655d7a2463 | |||
87053caf26 | |||
7720153674 | |||
db9c0f7e0d | |||
5163a66a02 |
@ -1,16 +1,16 @@
|
|||||||
|
Mario Danic <mario.danic@gmail.com>,
|
||||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
|
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
|
||||||
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
|
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
|
||||||
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso
|
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso, Mario Danic
|
||||||
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
||||||
and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
||||||
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License version 2 as
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
published by the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -16,7 +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 = \
|
||||||
|
-lisofs \
|
||||||
|
-lburn
|
||||||
libinclude_HEADERS = \
|
libinclude_HEADERS = \
|
||||||
libisoburn/libisoburn.h
|
libisoburn/libisoburn.h
|
||||||
|
|
||||||
|
31
README
31
README
@ -1,9 +1,10 @@
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
libburnia-project.org
|
http:libburnia-project.org
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
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.0.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
||||||
Provided under GPL version 2.
|
Provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@ -25,17 +26,18 @@ By using this software you agree to the disclaimer at the end of this text:
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
|
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
|
||||||
- libburn.so.4 , version libburn-0.4.2 or higher
|
- libburn.so.4 , version libburn-0.4.8 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.2 or higher
|
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
libisoburn and xorriso will not start with libraries which are older than their
|
||||||
headers seen at compile time. So compile in the oldest possible installation
|
headers seen at compile time. So compile in the oldest possible installation
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
setup unless you have reason to enforce a newer bug fix level.
|
||||||
|
|
||||||
Obtain libisoburn-0.1.0.tar.gz, take it to a directory of your choice and do:
|
Obtain libisoburn-0.2.0.pl00.tar.gz, take it to a directory of your choice
|
||||||
|
and do:
|
||||||
|
|
||||||
tar xzf libisoburn-0.1.0.tar.gz
|
tar xzf libisoburn-0.2.0.pl00.tar.gz
|
||||||
cd libisoburn-0.1.0
|
cd libisoburn-0.2.0
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -44,7 +46,7 @@ Within that directory execute:
|
|||||||
|
|
||||||
Then become superuser and execute
|
Then become superuser and execute
|
||||||
make install
|
make install
|
||||||
which will make available libisoburn.so.1 .
|
which will make available libisoburn.so.1 and program xorriso.
|
||||||
|
|
||||||
For the API concepts and calls see
|
For the API concepts and calls see
|
||||||
./libisoburn/libisoburn.h
|
./libisoburn/libisoburn.h
|
||||||
@ -53,12 +55,17 @@ as well as
|
|||||||
/usr/lib/libburn/libburn.h
|
/usr/lib/libburn/libburn.h
|
||||||
|
|
||||||
|
|
||||||
|
xorriso
|
||||||
|
|
||||||
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.
|
users. Its file xorriso/README describes a standalone tarball as first
|
||||||
After installation its documentation is available via
|
preference for statically linked xorriso installation.
|
||||||
man xorriso
|
The libisoburn installation described above produces a dynamically linked
|
||||||
|
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
||||||
|
|
||||||
|
After installation documentation is available via
|
||||||
|
man xorriso
|
||||||
|
|
||||||
|
|
||||||
Drives and Disk File Objects
|
Drives and Disk File Objects
|
||||||
@ -97,7 +104,7 @@ on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
|
|||||||
This program is not installed systemwide but stays in the installation
|
This program is not installed systemwide but stays in the installation
|
||||||
directory of the xorriso tarball as test/compare_file . Usually it is
|
directory of the xorriso tarball as test/compare_file . Usually it is
|
||||||
run as -exec payload of a find command. It demands at least three arguments:
|
run as -exec payload of a find command. It demands at least three arguments:
|
||||||
The path of the first file to compare, the prefix1 to be cut off from path
|
The path of the file to compare, the prefix1 to be cut off from path
|
||||||
and the prefix2 which gets prepended afterwards to obtain the path of the
|
and the prefix2 which gets prepended afterwards to obtain the path of the
|
||||||
second file to compare.
|
second file to compare.
|
||||||
As further argument there can be -no_ctime which suppresses the comparison
|
As further argument there can be -no_ctime which suppresses the comparison
|
||||||
|
33
configure.ac
33
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libisoburn], [0.0.1], [http://libburnia-project.org])
|
AC_INIT([libisoburn], [0.2.0], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -7,15 +7,21 @@ AC_CANONICAL_TARGET
|
|||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
dnl The API version codes are now defined in libisoburn/libisoburn.h
|
dnl Hint: Search list for version code aspects:
|
||||||
|
dnl /AC_INT(
|
||||||
|
dnl /ISOBURN_.*_VERSION
|
||||||
|
dnl /LT_.*
|
||||||
|
dnl /LIB.*_REQUIRED
|
||||||
|
|
||||||
|
dnl The API version codes are defined in libisoburn/libisoburn.h
|
||||||
dnl #define isoburn_header_version_*
|
dnl #define isoburn_header_version_*
|
||||||
dnl configure.ac only rules the libtool revision numbering about
|
dnl configure.ac only rules the libtool revision numbering about
|
||||||
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
||||||
dnl
|
dnl
|
||||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||||
ISOBURN_MAJOR_VERSION=0
|
ISOBURN_MAJOR_VERSION=0
|
||||||
ISOBURN_MINOR_VERSION=0
|
ISOBURN_MINOR_VERSION=2
|
||||||
ISOBURN_MICRO_VERSION=1
|
ISOBURN_MICRO_VERSION=0
|
||||||
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)
|
||||||
@ -24,12 +30,18 @@ AC_SUBST(ISOBURN_MICRO_VERSION)
|
|||||||
dnl AC_SUBST(ISOBURN_VERSION)
|
dnl AC_SUBST(ISOBURN_VERSION)
|
||||||
|
|
||||||
dnl Libtool versioning
|
dnl Libtool versioning
|
||||||
dnl Generate libisoburn.so.1.0.0
|
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 ts A80622
|
||||||
|
dnl This is the release version 0.2.0 = libisoburn.so.1.9.0
|
||||||
|
dnl ### This is the development version after above stable release
|
||||||
|
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
||||||
dnl
|
dnl
|
||||||
|
dnl SONAME = 10 - 9 = 1 . Library name = libburn.so.1.9.0
|
||||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||||
LT_CURRENT=1
|
LT_CURRENT=10
|
||||||
LT_AGE=0
|
LT_AGE=9
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -83,15 +95,12 @@ AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , REA
|
|||||||
AC_SUBST(READLINE_DEF)
|
AC_SUBST(READLINE_DEF)
|
||||||
|
|
||||||
|
|
||||||
dnl >>> How to check for proper library versions ?
|
|
||||||
dnl >>> would need libburn-0.4.2 or higher .so.4
|
|
||||||
dnl >>> would need libisofs-0.6.1 or higher .so.6
|
|
||||||
AC_CHECK_HEADER(libburn/libburn.h)
|
AC_CHECK_HEADER(libburn/libburn.h)
|
||||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||||
|
|
||||||
dnl Check for proper library versions
|
dnl Check for proper library versions
|
||||||
LIBBURN_REQUIRED=0.4.2
|
LIBBURN_REQUIRED=0.4.8
|
||||||
LIBISOFS_REQUIRED=0.6.1
|
LIBISOFS_REQUIRED=0.6.6
|
||||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
||||||
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
data source for libisoburn.
|
data source for libisoburn.
|
||||||
|
|
||||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -28,133 +29,159 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Cached reading of image tree data */
|
/* Cached reading of image tree data */
|
||||||
/* Current implementation : single tile 128 kB */
|
/* Multi tile: 32 * 64 kB */
|
||||||
|
|
||||||
/* powers of 2 only ! */
|
/* The size of a single tile.
|
||||||
#define Libisoburn_cache_blockS 64
|
Powers of 2 only ! Less than 16 makes not much sense.
|
||||||
|
*/
|
||||||
|
#define Libisoburn_tile_blockS 32
|
||||||
|
|
||||||
struct isoburn_cached_drive {
|
/* The number of tiles in the cache
|
||||||
struct burn_drive *drive;
|
*/
|
||||||
|
#define Libisoburn_cache_tileS 32
|
||||||
char cache_data[Libisoburn_cache_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.
|
/* Debugging only: This reports cache loads on stderr.
|
||||||
#define Libisoburn_read_cache_reporT 1
|
#define Libisoburn_read_cache_reporT 1
|
||||||
*/
|
*/
|
||||||
#define Libisoburn_use_read_cachE
|
|
||||||
|
|
||||||
#ifdef Libisoburn_use_read_cachE
|
|
||||||
|
|
||||||
int
|
struct isoburn_cache_tile {
|
||||||
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
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;
|
||||||
|
int age;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct isoburn_cached_drive {
|
||||||
|
struct burn_drive *drive;
|
||||||
|
struct isoburn_cache_tile tiles[Libisoburn_cache_tileS];
|
||||||
|
int current_age;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define Libisoburn_max_agE 2000000000
|
||||||
|
|
||||||
|
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, i, oldest, oldest_age;
|
||||||
struct burn_drive *d;
|
struct burn_drive *d;
|
||||||
off_t count;
|
off_t count;
|
||||||
uint32_t aligned_lba;
|
uint32_t aligned_lba;
|
||||||
char msg[80];
|
char msg[80];
|
||||||
|
struct isoburn_cache_tile *tiles;
|
||||||
struct isoburn_cached_drive *icd;
|
struct isoburn_cached_drive *icd;
|
||||||
|
|
||||||
if(src == NULL || buffer == NULL)
|
if(src == NULL || buffer == NULL)
|
||||||
return -1;
|
/* It is not required by the specs of libisofs but implicitely assumed
|
||||||
|
by its current implementation that a data source read result <0 is
|
||||||
|
a valid libisofs error code.
|
||||||
|
*/
|
||||||
|
return ISO_NULL_POINTER;
|
||||||
|
|
||||||
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;
|
||||||
|
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||||
|
|
||||||
aligned_lba= lba & ~(Libisoburn_cache_blockS - 1);
|
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 */
|
for(i=0; i<Libisoburn_cache_tileS; i++) {
|
||||||
if(icd->last_aligned_error_lba == aligned_lba) {
|
if(aligned_lba == tiles[i].cache_lba && tiles[i].cache_lba != 0xffffffff) {
|
||||||
|
(tiles[i].cache_hits)++;
|
||||||
|
memcpy(buffer, tiles[i].cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||||
|
count= 2048;
|
||||||
|
ds_inc_age(icd, i, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find oldest tile */
|
||||||
|
oldest_age= Libisoburn_max_agE;
|
||||||
|
oldest= 0;
|
||||||
|
for(i= 0; i<Libisoburn_cache_tileS; i++) {
|
||||||
|
if(tiles[i].cache_lba == 0xffffffff) {
|
||||||
|
oldest= i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(tiles[i].age<oldest_age) {
|
||||||
|
oldest_age= tiles[i].age;
|
||||||
|
oldest= i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tiles[oldest].cache_lba= 0xffffffff; /* invalidate cache */
|
||||||
|
if(tiles[oldest].last_aligned_error_lba == aligned_lba) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
} else {
|
} else {
|
||||||
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
|
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
|
||||||
(char *) icd->cache_data,
|
(char *) tiles[oldest].cache_data,
|
||||||
Libisoburn_cache_blockS * 2048, &count, 0);
|
Libisoburn_tile_blockS * 2048, &count, 2);
|
||||||
}
|
}
|
||||||
if (ret <= 0 ) {
|
if (ret <= 0 ) {
|
||||||
icd->last_aligned_error_lba = aligned_lba;
|
tiles[oldest].last_aligned_error_lba = aligned_lba;
|
||||||
|
|
||||||
/* Read-ahead failure ? Try to read 2048 directly. */
|
/* Read-ahead failure ? Try to read 2048 directly. */
|
||||||
if(icd->last_error_lba == lba)
|
if(tiles[oldest].last_error_lba == lba)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
else
|
else
|
||||||
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
||||||
2048, &count, 0);
|
2048, &count, 0);
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
return 1;
|
return 1;
|
||||||
icd->last_error_lba = lba;
|
tiles[oldest].last_error_lba = lba;
|
||||||
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
|
|
||||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
/* It is not required by the specs of libisofs but implicitely assumed
|
||||||
return -1;
|
...
|
||||||
|
But it is not possible to ignore FAILURE.
|
||||||
|
libisofs insists in original error codes, i.e. libisoburn cannot
|
||||||
|
change severity FAILURE associated with ISO_FILE_READ_ERROR.
|
||||||
|
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
|
||||||
|
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
|
||||||
|
and not for image reading.
|
||||||
|
This is quite wrong, although the error message text is unclear
|
||||||
|
enough to make it appear plausible.
|
||||||
|
*/
|
||||||
|
ret= ISO_FILE_CANT_WRITE;
|
||||||
|
if(ret >= 0)
|
||||||
|
ret = -1;
|
||||||
|
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||||
|
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Libisoburn_read_cache_reporT
|
#ifdef Libisoburn_read_cache_reporT
|
||||||
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
|
fprintf(stderr, "Tile %2.2d : After %3d hits, new load from %8x , count= %d\n",
|
||||||
icd->cache_hits, aligned_lba, (int) count);
|
oldest, tiles[oldest].cache_hits, aligned_lba, (int) count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
icd->cache_lba= aligned_lba;
|
tiles[oldest].cache_lba= aligned_lba;
|
||||||
icd->cache_hits= 1;
|
tiles[oldest].cache_hits= 1;
|
||||||
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
|
ds_inc_age(icd, oldest, 0);
|
||||||
|
|
||||||
|
memcpy(buffer, tiles[oldest].cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||||
count= 2048;
|
count= 2048;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* Libisoburn_use_read_cachE */
|
|
||||||
|
|
||||||
static int
|
static int ds_open(IsoDataSource *src)
|
||||||
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct burn_drive *d;
|
|
||||||
off_t count;
|
|
||||||
|
|
||||||
if(src == NULL || buffer == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
d = (struct burn_drive*) ((struct isoburn_cached_drive *) src->data)->drive;
|
|
||||||
|
|
||||||
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
|
||||||
2048, &count, 0);
|
|
||||||
if (ret <= 0 )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* ! Libisoburn_use_read_cachE */
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
ds_open(IsoDataSource *src)
|
|
||||||
{
|
{
|
||||||
/* nothing to do, device is always grabbed */
|
/* nothing to do, device is always grabbed */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int ds_close(IsoDataSource *src)
|
||||||
ds_close(IsoDataSource *src)
|
|
||||||
{
|
{
|
||||||
/* nothing to do, device is always grabbed */
|
/* nothing to do, device is always grabbed */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void ds_free_data(IsoDataSource *src)
|
||||||
ds_free_data(IsoDataSource *src)
|
|
||||||
{
|
{
|
||||||
/* nothing to do */;
|
/* nothing to do */;
|
||||||
if(src->data != NULL)
|
if(src->data != NULL)
|
||||||
@ -162,11 +189,11 @@ ds_free_data(IsoDataSource *src)
|
|||||||
src->data= NULL;
|
src->data= NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IsoDataSource *
|
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||||
isoburn_data_source_new(struct burn_drive *d)
|
|
||||||
{
|
{
|
||||||
IsoDataSource *ret;
|
IsoDataSource *ret;
|
||||||
struct isoburn_cached_drive *icd= NULL;
|
struct isoburn_cached_drive *icd= NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (d==NULL)
|
if (d==NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -181,10 +208,30 @@ isoburn_data_source_new(struct burn_drive *d)
|
|||||||
ret->free_data = ds_free_data;
|
ret->free_data = ds_free_data;
|
||||||
ret->data = icd;
|
ret->data = icd;
|
||||||
icd->drive = d;
|
icd->drive = d;
|
||||||
icd->cache_lba = 0xffffffff;
|
icd->current_age= 0;
|
||||||
icd->cache_hits = 0;
|
for(i= 0; i<Libisoburn_cache_tileS; i++) {
|
||||||
icd->last_error_lba = 0xffffffff;
|
icd->tiles[i].cache_lba = 0xffffffff;
|
||||||
icd->last_aligned_error_lba = 0xffffffff;
|
icd->tiles[i].cache_hits = 0;
|
||||||
|
icd->tiles[i].last_error_lba = 0xffffffff;
|
||||||
|
icd->tiles[i].last_aligned_error_lba = 0xffffffff;
|
||||||
|
icd->tiles[i].age= 0;
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
(icd->current_age)++;
|
||||||
|
if(icd->current_age>=Libisoburn_max_agE) { /* reset all ages (allow waste) */
|
||||||
|
for(i= 0; i<Libisoburn_cache_tileS; i++)
|
||||||
|
(icd->tiles)[i].age= 0;
|
||||||
|
icd->current_age= 1;
|
||||||
|
}
|
||||||
|
(icd->tiles)[idx].age= icd->current_age;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
/*
|
/*
|
||||||
Class core of libisoburn.
|
Class core of libisoburn.
|
||||||
|
|
||||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
and Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ( derived from stub generated by CgeN on Sat, 01 Sep 2007 12:04:36 GMT ) */
|
/* ( derived from stub generated by CgeN on Sat, 01 Sep 2007 12:04:36 GMT ) */
|
||||||
@ -37,10 +37,61 @@
|
|||||||
|
|
||||||
#include "isoburn.h"
|
#include "isoburn.h"
|
||||||
|
|
||||||
/* No more: version numbers out of configure.ac
|
|
||||||
major.minor.micro now comes from libisoburn.h
|
/* Default values for application provided msgs_submit methods.
|
||||||
#include "../version.h"
|
To be attached to newly aquired drives.
|
||||||
*/
|
*/
|
||||||
|
int (*libisoburn_default_msgs_submit)
|
||||||
|
(void *handle, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag)= NULL;
|
||||||
|
void *libisoburn_default_msgs_submit_handle= NULL;
|
||||||
|
int libisoburn_default_msgs_submit_flag= 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------- isoburn_toc_entry ---------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
||||||
|
struct isoburn_toc_entry *boss, int flag)
|
||||||
|
{
|
||||||
|
struct isoburn_toc_entry *o, *s;
|
||||||
|
|
||||||
|
*objpt= o= (struct isoburn_toc_entry *)
|
||||||
|
malloc(sizeof(struct isoburn_toc_entry));
|
||||||
|
if(o==NULL) {
|
||||||
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
|
"Cannot allocate memory for isoburn toc entry",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
o->session= 0;
|
||||||
|
o->track_no= 0;
|
||||||
|
o->start_lba= -1;
|
||||||
|
o->track_blocks= 0;
|
||||||
|
o->next= NULL;
|
||||||
|
if(boss!=NULL) {
|
||||||
|
for(s= boss; s->next!=NULL; s= s->next);
|
||||||
|
s->next= o;
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= delete all subordinates too
|
||||||
|
*/
|
||||||
|
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag)
|
||||||
|
{
|
||||||
|
if(*o==NULL)
|
||||||
|
return(0);
|
||||||
|
if(flag&1)
|
||||||
|
isoburn_toc_entry_destroy(&((*o)->next), flag);
|
||||||
|
free((char *) (*o));
|
||||||
|
*o= NULL;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------- end isoburn_toc_entry -------------------- */
|
||||||
|
|
||||||
/* -------------------------- isoburn ----------------------- */
|
/* -------------------------- isoburn ----------------------- */
|
||||||
|
|
||||||
@ -59,30 +110,31 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|||||||
|
|
||||||
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
|
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Cannot allocate memory for isoburn control object",
|
"Cannot allocate memory for isoburn control object",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
o->drive= NULL;
|
o->drive= NULL;
|
||||||
o->emulation_mode= 0;
|
o->emulation_mode= 0;
|
||||||
o->min_start_byte= 0;
|
o->fabricated_msc1= -1;
|
||||||
o->nwa= 0;
|
o->zero_nwa= Libisoburn_overwriteable_starT;
|
||||||
|
o->min_start_byte= o->zero_nwa * 2048;
|
||||||
#ifdef Libisoburn_no_fifO
|
o->nwa= o->zero_nwa;
|
||||||
|
o->truncate= 0;
|
||||||
o->iso_source= NULL;
|
o->iso_source= NULL;
|
||||||
#else
|
|
||||||
o->fifo= NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
o->wrote_well= -1;
|
|
||||||
o->fabricated_disc_status= BURN_DISC_UNREADY;
|
o->fabricated_disc_status= BURN_DISC_UNREADY;
|
||||||
for(i=0;i<65536;i++)
|
o->toc= NULL;
|
||||||
|
o->wrote_well= -1;
|
||||||
|
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->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);
|
||||||
@ -119,15 +171,10 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
|||||||
|
|
||||||
if(o->image!=NULL)
|
if(o->image!=NULL)
|
||||||
iso_image_unref(o->image);
|
iso_image_unref(o->image);
|
||||||
|
if(o->toc!=NULL)
|
||||||
#ifdef Libisoburn_no_fifO
|
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);
|
||||||
#else
|
|
||||||
if(o->fifo!=NULL)
|
|
||||||
burn_source_free(o->fifo);
|
|
||||||
#endif /* ! Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
|
|
||||||
free((char *) o);
|
free((char *) o);
|
||||||
*objpt= NULL;
|
*objpt= NULL;
|
||||||
@ -261,28 +308,65 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||||
|
struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts, int new_img)
|
struct isoburn_imgen_opts *opts, int new_img)
|
||||||
{
|
{
|
||||||
struct burn_source *wsrc;
|
struct burn_source *wsrc;
|
||||||
struct burn_session *session;
|
struct burn_session *session;
|
||||||
struct burn_track *track;
|
struct burn_track *track;
|
||||||
struct isoburn *o;
|
struct isoburn *in_o, *out_o;
|
||||||
IsoWriteOpts *wopts= NULL;
|
IsoWriteOpts *wopts= NULL;
|
||||||
enum burn_disc_status state;
|
enum burn_disc_status state;
|
||||||
int ret, fifo_chunks;
|
int ret, fifo_chunks, lba, nwa;
|
||||||
|
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
ret= isoburn_find_emulator(&in_o, in_d, 0);
|
||||||
if(ret<0 || o==NULL)
|
if(ret<0 || in_o==NULL)
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
o->wrote_well= 0; /* early end will be registered as failure */
|
ret= isoburn_find_emulator(&out_o, out_d, 0);
|
||||||
|
if(ret<0 || out_o==NULL)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
/* early end will be registered as failure */
|
||||||
|
in_o->wrote_well= out_o->wrote_well= 0;
|
||||||
|
|
||||||
state = isoburn_disc_get_status(d);
|
state = isoburn_disc_get_status(in_d);
|
||||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
|
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
|
||||||
&& (state != BURN_DISC_FULL || ! new_img)) {
|
state != BURN_DISC_FULL) {
|
||||||
/* unsuitable status */
|
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
|
||||||
burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
|
0, "FAILURE", 0);
|
||||||
|
{ret= -2; goto ex;}
|
||||||
|
}
|
||||||
|
state = isoburn_disc_get_status(out_d);
|
||||||
|
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
|
||||||
|
isoburn_msgs_submit(out_o, 0x00060000, "Unsuitable target media state",
|
||||||
|
0, "FAILURE", 0);
|
||||||
{ret= -2; goto ex;}
|
{ret= -2; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,34 +403,28 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|||||||
iso_write_opts_set_default_uid(wopts, opts->uid);
|
iso_write_opts_set_default_uid(wopts, opts->uid);
|
||||||
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);
|
||||||
#ifdef Libisoburn_no_fifO
|
|
||||||
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
||||||
#endif /* Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
if (new_img) {
|
|
||||||
iso_write_opts_set_ms_block(wopts, 0);
|
|
||||||
iso_write_opts_set_appendable(wopts, 0);
|
|
||||||
iso_write_opts_set_overwrite_buf(wopts, NULL);
|
|
||||||
} else {
|
|
||||||
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", 0,
|
|
||||||
"FAILURE", NULL);
|
|
||||||
{ret= -4; goto ex;}
|
|
||||||
}
|
|
||||||
iso_write_opts_set_ms_block(wopts, nwa);
|
|
||||||
iso_write_opts_set_appendable(wopts, 1);
|
|
||||||
iso_write_opts_set_overwrite_buf(wopts, o->target_iso_head);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
|
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
|
||||||
|
if (ret != 1) {
|
||||||
|
isoburn_msgs_submit(out_o, 0x00060000,
|
||||||
|
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
||||||
|
{ret= -3; goto ex;}
|
||||||
|
}
|
||||||
|
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
|
||||||
|
isoburn_msgs_submit(out_o, 0x00060000,
|
||||||
|
"Encountered 0 as next writeable address of appendable",
|
||||||
|
0, "FAILURE", 0);
|
||||||
|
{ret= -4; goto ex;}
|
||||||
|
}
|
||||||
|
iso_write_opts_set_ms_block(wopts, nwa);
|
||||||
|
opts->effective_lba= 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);
|
||||||
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;}
|
||||||
@ -354,35 +432,20 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|||||||
|
|
||||||
/* TODO check return values for failure. propertly clean-up on error */
|
/* TODO check return values for failure. propertly clean-up on error */
|
||||||
|
|
||||||
#ifdef Libisoburn_no_fifO
|
out_o->iso_source= wsrc;
|
||||||
o->iso_source= wsrc;
|
|
||||||
#else
|
|
||||||
o->fifo = burn_fifo_source_new(wsrc, 2048, fifo_chunks, 0);
|
|
||||||
burn_source_free(wsrc);
|
|
||||||
if (o->fifo == NULL) {
|
|
||||||
burn_msgs_submit(0x00060000, "Cannot attach fifo", 0, "FATAL", NULL);
|
|
||||||
{ret= -1; goto ex;}
|
|
||||||
}
|
|
||||||
#endif /* ! Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
*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);
|
||||||
#ifdef Libisoburn_no_fifO
|
|
||||||
burn_track_set_source(track, o->iso_source);
|
|
||||||
#else
|
|
||||||
burn_track_set_source(track, o->fifo);
|
|
||||||
#endif /* ! Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
burn_session_add_track(session, track, BURN_POS_END);
|
burn_session_add_track(session, track, BURN_POS_END);
|
||||||
|
|
||||||
/* give up local references */
|
/* give up local references */
|
||||||
burn_track_free(track);
|
burn_track_free(track);
|
||||||
burn_session_free(session);
|
burn_session_free(session);
|
||||||
|
|
||||||
o->wrote_well= -1; /* neutral */
|
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:
|
ex:
|
||||||
if(wopts!=NULL)
|
if(wopts!=NULL)
|
||||||
@ -390,39 +453,23 @@ ex:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts)
|
struct isoburn_imgen_opts *opts)
|
||||||
{
|
{
|
||||||
return isoburn_prepare_disc_aux(d, disc, opts, 0);
|
return isoburn_prepare_disc_aux(d, d, disc, opts, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts,
|
struct isoburn_imgen_opts *opts,
|
||||||
struct burn_drive *out_drive)
|
struct burn_drive *out_drive)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct isoburn *in_o, *out_o;
|
|
||||||
|
|
||||||
ret= isoburn_prepare_disc_aux(d, disc, opts, 1);
|
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 1);
|
||||||
if (ret<=0)
|
if (ret<=0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef Libisoburn_no_fifO
|
|
||||||
/* 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;
|
|
||||||
#endif /* Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,8 +559,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
|||||||
|
|
||||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
0, "FATAL", NULL);
|
"Cannot allocate memory for read options", 0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
o->norock= 0;
|
o->norock= 0;
|
||||||
@ -649,9 +696,9 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
|
|
||||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
||||||
if(o==NULL) {
|
if(o==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Cannot allocate memory for image generation options",
|
"Cannot allocate memory for image generation options",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
o->level= 2;
|
o->level= 2;
|
||||||
@ -677,6 +724,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
o->gid= 0;
|
o->gid= 0;
|
||||||
o->output_charset= 0;
|
o->output_charset= 0;
|
||||||
o->fifo_size= 4*1024*1024;
|
o->fifo_size= 4*1024*1024;
|
||||||
|
o->effective_lba= -1;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,3 +884,10 @@ int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba)
|
||||||
|
{
|
||||||
|
*lba= o->effective_lba;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,13 +10,33 @@
|
|||||||
#define Isoburn_includeD
|
#define Isoburn_includeD
|
||||||
|
|
||||||
|
|
||||||
/* <<< transition macro */
|
|
||||||
#define Libisoburn_no_fifO 1
|
|
||||||
|
|
||||||
|
|
||||||
/* for uint8_t */
|
/* for uint8_t */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* For emulated TOC of overwriteable media.
|
||||||
|
Provides minimal info for faking a struct burn_toc_entry.
|
||||||
|
*/
|
||||||
|
struct isoburn_toc_entry {
|
||||||
|
int session;
|
||||||
|
int track_no; /* point */
|
||||||
|
int start_lba;
|
||||||
|
int track_blocks;
|
||||||
|
|
||||||
|
struct isoburn_toc_entry *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
||||||
|
struct isoburn_toc_entry *boss, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= delete all subordinates too
|
||||||
|
*/
|
||||||
|
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Size of target_iso_head which is to be written during
|
||||||
|
isoburn_activate_session()
|
||||||
|
*/
|
||||||
|
#define Libisoburn_target_head_sizE (32*2048)
|
||||||
|
|
||||||
struct isoburn {
|
struct isoburn {
|
||||||
|
|
||||||
@ -36,22 +56,34 @@ struct isoburn {
|
|||||||
struct isoburn *next;
|
struct isoburn *next;
|
||||||
|
|
||||||
|
|
||||||
|
/* If >= 0, this address is used as reply for isoburn_disc_get_msc1()
|
||||||
|
*/
|
||||||
|
int fabricated_msc1;
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
*/
|
||||||
|
int zero_nwa;
|
||||||
|
|
||||||
/* Start address as given by image examination (bytes, not blocks) */
|
/* Start address as given by image examination (bytes, not blocks) */
|
||||||
off_t min_start_byte;
|
off_t min_start_byte;
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
int truncate;
|
||||||
|
|
||||||
/* Eventual freely fabricated isoburn_disc_get_status().
|
/* Eventual freely fabricated isoburn_disc_get_status().
|
||||||
BURN_DISC_UNREADY means that normally emulated status is in effect.
|
BURN_DISC_UNREADY means that this variable is disabled
|
||||||
|
and normally emulated status is in effect.
|
||||||
*/
|
*/
|
||||||
enum burn_disc_status fabricated_disc_status;
|
enum burn_disc_status fabricated_disc_status;
|
||||||
|
|
||||||
#ifndef Libisoburn_no_fifO
|
/* Eventual emulated table of content read from the chain of ISO headers
|
||||||
/* The fifo which is installed between track and libisofs burn_source
|
on overwriteable media.
|
||||||
*/
|
*/
|
||||||
struct burn_source *fifo;
|
struct isoburn_toc_entry *toc;
|
||||||
#endif /* ! Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
/* Indicator wether the most recent burn run worked :
|
/* Indicator wether the most recent burn run worked :
|
||||||
-1 = undetermined, ask libburn , 0 = failure , 1 = success
|
-1 = undetermined, ask libburn , 0 = failure , 1 = success
|
||||||
@ -62,17 +94,15 @@ struct isoburn {
|
|||||||
|
|
||||||
/* Buffered ISO head from media (should that become part of
|
/* Buffered ISO head from media (should that become part of
|
||||||
ecma119_read_opts ?) */
|
ecma119_read_opts ?) */
|
||||||
uint8_t target_iso_head[65536];
|
uint8_t target_iso_head[Libisoburn_target_head_sizE];
|
||||||
|
|
||||||
/* Libisofs image context */
|
/* Libisofs image context */
|
||||||
IsoImage *image;
|
IsoImage *image;
|
||||||
|
|
||||||
#ifdef Libisoburn_no_fifO
|
|
||||||
/* 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.
|
||||||
*/
|
*/
|
||||||
struct burn_source *iso_source;
|
struct burn_source *iso_source;
|
||||||
#endif /* Libisoburn_no_fifO */
|
|
||||||
|
|
||||||
/* For iso_tree_set_report_callback() */
|
/* For iso_tree_set_report_callback() */
|
||||||
int (*read_pacifier)(IsoImage*, IsoFileSource*);
|
int (*read_pacifier)(IsoImage*, IsoFileSource*);
|
||||||
@ -80,6 +110,12 @@ struct isoburn {
|
|||||||
/* For iso_image_attach_data() */
|
/* For iso_image_attach_data() */
|
||||||
void *read_pacifier_handle;
|
void *read_pacifier_handle;
|
||||||
|
|
||||||
|
/* An application provided method to immediately deliver messages */
|
||||||
|
int (*msgs_submit)(void *handle, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag);
|
||||||
|
void *msgs_submit_handle; /* specific to application method */
|
||||||
|
int msgs_submit_flag; /* specific to application method */
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -138,6 +174,11 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
|
|||||||
int isoburn_find_emulator(struct isoburn **pt,
|
int isoburn_find_emulator(struct isoburn **pt,
|
||||||
struct burn_drive *drive, int flag);
|
struct burn_drive *drive, int flag);
|
||||||
|
|
||||||
|
/* Deliver an event message. Either via a non-NULL o->msgs_submit() method
|
||||||
|
or via burn_msgs_submit() of libburn.
|
||||||
|
*/
|
||||||
|
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||||
|
int os_errno, char severity[], int flag);
|
||||||
|
|
||||||
/** Set the start address for an emulated add-on session. The value will
|
/** Set the start address for an emulated add-on session. The value will
|
||||||
be rounded up to the alignment necessary for the media. The aligned
|
be rounded up to the alignment necessary for the media. The aligned
|
||||||
@ -315,6 +356,79 @@ struct isoburn_imgen_opts {
|
|||||||
*/
|
*/
|
||||||
int fifo_size;
|
int fifo_size;
|
||||||
|
|
||||||
|
|
||||||
|
/** Output value: Block address of session start as evaluatedfrom media
|
||||||
|
and other options by libisoburn and libburn.
|
||||||
|
If <0 : Invalid
|
||||||
|
If >=0: Valid block number. Block size is always 2 KiB.
|
||||||
|
*/
|
||||||
|
int effective_lba;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Alignment for session starts on overwriteable media.
|
||||||
|
(Increased from 16 to 32 blocks for aligning to BD-RE clusters.)
|
||||||
|
*/
|
||||||
|
#define Libisoburn_nwa_alignemenT 32
|
||||||
|
|
||||||
|
|
||||||
|
/* Alignment for outer session scanning with -ROM drives.
|
||||||
|
(E.g. my DVD-ROM drive shows any DVD type as 0x10 "DVD-ROM" with
|
||||||
|
more or less false capacity and TOC.)
|
||||||
|
*/
|
||||||
|
#define Libisoburn_toc_scan_alignemenT 16
|
||||||
|
|
||||||
|
/* 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.
|
||||||
|
The longest gap found so far was about 38100 after the first session of a
|
||||||
|
DVD-R.
|
||||||
|
*/
|
||||||
|
#define Libisoburn_toc_scan_max_gaP 65536
|
||||||
|
|
||||||
|
|
||||||
|
/* Creating a chain of image headers which form a TOC:
|
||||||
|
|
||||||
|
The header of the first session is written after the LBA 0 header.
|
||||||
|
So it persists and can give the end of its session. By help of
|
||||||
|
Libisoburn_nwa_alignemenT it should be possible to predict the start
|
||||||
|
of the next session header.
|
||||||
|
The LBA 0 header is written by isoburn_activate_session() already
|
||||||
|
with the first session. So the media is mountable.
|
||||||
|
A problem arises with DVD-RW in Intermediate State. They cannot be
|
||||||
|
written by random access before they were written sequentially.
|
||||||
|
In this case, no copy of the session 1 header is maintained and no TOC
|
||||||
|
will be possible. Thus writing begins sequentially at LBA 0.
|
||||||
|
*/
|
||||||
|
#define Libisoburn_overwriteable_starT \
|
||||||
|
((off_t) (Libisoburn_target_head_sizE/2048))
|
||||||
|
|
||||||
|
|
||||||
|
/* Wrappers for emulation of TOC on overwriteable media */
|
||||||
|
|
||||||
|
struct isoburn_toc_track {
|
||||||
|
/* Either track or toc_entry are supposed to be NULL */
|
||||||
|
struct burn_track *track;
|
||||||
|
struct isoburn_toc_entry *toc_entry;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct isoburn_toc_session {
|
||||||
|
/* Either session or tracks and toc_entry are supposed to be NULL */
|
||||||
|
struct burn_session *session;
|
||||||
|
struct isoburn_toc_track **track_pointers;
|
||||||
|
int track_count;
|
||||||
|
struct isoburn_toc_entry *toc_entry;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct isoburn_toc_disc {
|
||||||
|
/* Either disc or sessions and toc are supposed to be NULL */
|
||||||
|
struct burn_disc *disc;
|
||||||
|
struct isoburn_toc_session *sessions; /* storage array */
|
||||||
|
struct isoburn_toc_session **session_pointers; /* storage array */
|
||||||
|
struct isoburn_toc_track *tracks; /* storage array */
|
||||||
|
struct isoburn_toc_track **track_pointers; /* storage array */
|
||||||
|
int session_count;
|
||||||
|
int track_count;
|
||||||
|
struct isoburn_toc_entry *toc;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* Isoburn_includeD */
|
#endif /* Isoburn_includeD */
|
||||||
|
@ -6,12 +6,13 @@
|
|||||||
/*
|
/*
|
||||||
libisofs related functions of libisoburn.
|
libisofs related functions of libisoburn.
|
||||||
|
|
||||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifndef Xorriso_standalonE
|
#ifndef Xorriso_standalonE
|
||||||
|
|
||||||
@ -26,7 +27,6 @@
|
|||||||
|
|
||||||
#endif /* Xorriso_standalonE */
|
#endif /* Xorriso_standalonE */
|
||||||
|
|
||||||
|
|
||||||
#include "isoburn.h"
|
#include "isoburn.h"
|
||||||
#include "libisoburn.h"
|
#include "libisoburn.h"
|
||||||
|
|
||||||
@ -112,29 +112,29 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
struct isoburn_read_opts *read_opts,
|
struct isoburn_read_opts *read_opts,
|
||||||
IsoImage **image)
|
IsoImage **image)
|
||||||
{
|
{
|
||||||
int ret, int_num;
|
int ret, int_num, dummy;
|
||||||
IsoReadOpts *ropts= NULL;
|
IsoReadOpts *ropts= NULL;
|
||||||
IsoReadImageFeatures *features= NULL;
|
IsoReadImageFeatures *features= NULL;
|
||||||
uint32_t ms_block;
|
uint32_t ms_block;
|
||||||
|
char msg[160];
|
||||||
enum burn_disc_status status= BURN_DISC_BLANK;
|
enum burn_disc_status status= BURN_DISC_BLANK;
|
||||||
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:;
|
||||||
/*
|
/*
|
||||||
* Blank disc, we create a new image without files.
|
* Blank disc, we create a new image without files.
|
||||||
*/
|
*/
|
||||||
@ -142,9 +142,9 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
if (d == NULL) {
|
if (d == NULL) {
|
||||||
/* New empty image without relation to a drive */
|
/* New empty image without relation to a drive */
|
||||||
if (image==NULL) {
|
if (image==NULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
"Program error: isoburn_read_image: image==NULL",
|
"Program error: isoburn_read_image: image==NULL",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* create a new image */
|
/* create a new image */
|
||||||
@ -170,9 +170,9 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
|
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
"Program error: isoburn_read_image: incorrect disc status",
|
"Program error: isoburn_read_image: incorrect disc status",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,6 +182,12 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
return -2;
|
return -2;
|
||||||
ms_block= int_num;
|
ms_block= int_num;
|
||||||
|
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
|
||||||
|
if (ret <= 0) {
|
||||||
|
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
|
||||||
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
||||||
|
goto create_blank_image;
|
||||||
|
}
|
||||||
|
|
||||||
/* create the data source */
|
/* create the data source */
|
||||||
ret = iso_read_opts_new(&ropts, 0);
|
ret = iso_read_opts_new(&ropts, 0);
|
||||||
@ -200,6 +206,11 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
iso_read_opts_set_default_uid(ropts, read_opts->uid);
|
iso_read_opts_set_default_uid(ropts, read_opts->uid);
|
||||||
iso_read_opts_set_default_gid(ropts, read_opts->gid);
|
iso_read_opts_set_default_gid(ropts, read_opts->gid);
|
||||||
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
|
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
|
||||||
|
|
||||||
|
/* <<< experimental API call of libisofs
|
||||||
|
iso_read_opts_set_error_behavior(ropts, 1);
|
||||||
|
*/
|
||||||
|
|
||||||
ds = isoburn_data_source_new(d);
|
ds = isoburn_data_source_new(d);
|
||||||
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);
|
||||||
@ -225,15 +236,6 @@ int isoburn_read_image(struct burn_drive *d,
|
|||||||
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
|
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
|
||||||
read_opts->hasElTorito = iso_read_image_features_has_eltorito(features);
|
read_opts->hasElTorito = iso_read_image_features_has_eltorito(features);
|
||||||
read_opts->size = iso_read_image_features_get_size(features);
|
read_opts->size = iso_read_image_features_get_size(features);
|
||||||
|
|
||||||
#ifdef NIX
|
|
||||||
read_opts->hasRR = features->hasRR;
|
|
||||||
read_opts->hasJoliet = features->hasJoliet;
|
|
||||||
read_opts->hasIso1999 = features->hasIso1999;
|
|
||||||
read_opts->hasElTorito = features->hasElTorito;
|
|
||||||
read_opts->size = features->size;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
iso_read_image_features_destroy(features);
|
iso_read_image_features_destroy(features);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -246,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;
|
||||||
@ -276,11 +278,13 @@ 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_disc_status != BURN_DISC_APPENDABLE)
|
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
||||||
|
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
||||||
|
o->zero_nwa > 0)))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
|
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
|
||||||
32*2048, 1);
|
Libisoburn_target_head_sizE, 1);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -300,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) {
|
||||||
burn_msgs_submit(0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Program error: isoburn_start_emulation: o==NULL",
|
"Program error: isoburn_start_emulation: o==NULL",
|
||||||
0, "FATAL", NULL);
|
0, "FATAL", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,7 +315,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
|||||||
/* we can assume 0 as start block for image */
|
/* we can assume 0 as start block for image */
|
||||||
/* TODO what about ms? where we validate valid iso image in ms disc? */
|
/* TODO what about ms? where we validate valid iso image in ms disc? */
|
||||||
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
|
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
|
||||||
sizeof(o->target_iso_head), &data_count, 2);
|
(off_t) Libisoburn_target_head_sizE, &data_count, 2);
|
||||||
|
|
||||||
/* an error means an empty disc */
|
/* an error means an empty disc */
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
@ -321,7 +325,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
|||||||
|
|
||||||
/* check first 64K. If 0's, the disc is treated as a blank disc, and thus
|
/* check first 64K. If 0's, the disc is treated as a blank disc, and thus
|
||||||
overwritten without extra check. */
|
overwritten without extra check. */
|
||||||
i = sizeof(o->target_iso_head);
|
i = Libisoburn_target_head_sizE;
|
||||||
while (i && !o->target_iso_head[i-1])
|
while (i && !o->target_iso_head[i-1])
|
||||||
--i;
|
--i;
|
||||||
|
|
||||||
@ -351,7 +355,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
|||||||
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
|
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
|
||||||
|
|
||||||
/* empty image */
|
/* empty image */
|
||||||
isoburn_set_start_byte(o, (off_t) 0, 0);
|
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
|
||||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||||
} else {
|
} else {
|
||||||
/* treat any disc in an unknown format as full */
|
/* treat any disc in an unknown format as full */
|
||||||
|
@ -62,12 +62,12 @@ libburn demands rw-permissions to drive device file resp. file object.
|
|||||||
If the input drive provides a suitable ISO RockRidge image, then its tree
|
If the input drive provides a suitable ISO RockRidge image, then its tree
|
||||||
may be loaded into memory and can then be manipulated by libisofs API calls.
|
may be loaded into memory and can then be manipulated by libisofs API calls.
|
||||||
The loading is done by isoburn_read_image() under control of
|
The loading is done by isoburn_read_image() under control of
|
||||||
struct isoburn_read_opts which the application obtains from libisoburn.
|
struct isoburn_read_opts which the application obtains from libisoburn
|
||||||
It may be manipulated by the family of isoburn_ropt_set_*() functions.
|
and manipulates by the family of isoburn_ropt_set_*() functions.
|
||||||
|
|
||||||
Writing of result images is controlled by libisofs related parameters
|
Writing of result images is controlled by libisofs related parameters
|
||||||
in a struct isoburn_imgen_opts which the application obtains from libisoburn.
|
in a struct isoburn_imgen_opts which the application obtains from libisoburn
|
||||||
It may be manipulated by the family of isoburn_igopt_set_*() functions.
|
and manipulates by the family of isoburn_igopt_set_*() functions.
|
||||||
|
|
||||||
All multi-session aspects are handled by libisoburn according to these
|
All multi-session aspects are handled by libisoburn according to these
|
||||||
settings. The application does not have to analyze media state and write
|
settings. The application does not have to analyze media state and write
|
||||||
@ -164,12 +164,19 @@ int isoburn_is_compatible(int major, int minor, int micro, int flag);
|
|||||||
Pare numbers indicate a version with frozen API. I.e. you can
|
Pare numbers indicate a version with frozen API. I.e. you can
|
||||||
rely on the same set of features to be present in all
|
rely on the same set of features to be present in all
|
||||||
published releases with that major.minor.micro combination.
|
published releases with that major.minor.micro combination.
|
||||||
|
Features of a pare release will stay available and ABI
|
||||||
|
compatible as long as the SONAME of libisoburn stays "1".
|
||||||
|
Currently there are no plans to ever change the SONAME.
|
||||||
|
|
||||||
Odd numbers indicate that API upgrades are in progress.
|
Odd numbers indicate that API upgrades are in progress.
|
||||||
I.e. new features might be already present or they might
|
I.e. new features might be already present or they might
|
||||||
be still missing.
|
be still missing. Newly introduced features may be changed
|
||||||
|
incompatibly or even be revoked before release of a pare
|
||||||
|
version.
|
||||||
So micro revisions {1,3,5,7,9} should never be used for
|
So micro revisions {1,3,5,7,9} should never be used for
|
||||||
dynamic linking unless the proper library match can be
|
dynamic linking unless the proper library match can be
|
||||||
guaranteed by external circumstances.
|
guaranteed by external circumstances.
|
||||||
|
|
||||||
@return 1 success, <=0 might in future become an error indication
|
@return 1 success, <=0 might in future become an error indication
|
||||||
*/
|
*/
|
||||||
void isoburn_version(int *major, int *minor, int *micro);
|
void isoburn_version(int *major, int *minor, int *micro);
|
||||||
@ -181,7 +188,7 @@ 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 2
|
#define isoburn_libisofs_req_micro 6
|
||||||
|
|
||||||
/** The minimum version of libburn to be used with this version of libisoburn
|
/** The minimum version of libburn to be used with this version of libisoburn
|
||||||
at compile time.
|
at compile time.
|
||||||
@ -189,7 +196,7 @@ void isoburn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define isoburn_libburn_req_major 0
|
#define isoburn_libburn_req_major 0
|
||||||
#define isoburn_libburn_req_minor 4
|
#define isoburn_libburn_req_minor 4
|
||||||
#define isoburn_libburn_req_micro 2
|
#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
|
||||||
@ -224,13 +231,13 @@ 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 0
|
#define isoburn_header_version_minor 2
|
||||||
#define isoburn_header_version_micro 1
|
#define isoburn_header_version_micro 0
|
||||||
/** 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.
|
||||||
For the library compatibility check ISOBURN_*_VERSION in configure.ac
|
For the library compatibility check, ISOBURN_*_VERSION in configure.ac
|
||||||
are not decisive. Only the three numbers above do matter.
|
are not decisive. Only the three numbers here do matter.
|
||||||
*/
|
*/
|
||||||
/** Usage discussion:
|
/** Usage discussion:
|
||||||
|
|
||||||
@ -273,12 +280,42 @@ at the cost of excluding some older libraries.
|
|||||||
|
|
||||||
These two advises are mutually exclusive.
|
These two advises are mutually exclusive.
|
||||||
|
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
For an implementation of the Thomas Schmitt approach,
|
For an implementation of the Thomas Schmitt approach,
|
||||||
see libisoburn/burn_wrap.c : isoburn_initialize()
|
see libisoburn/burn_wrap.c : isoburn_initialize()
|
||||||
|
This connects libisoburn as "application" with libisofs
|
||||||
|
as "library".
|
||||||
|
|
||||||
|
The compatible part of Vreixo Formoso's approach is implemented
|
||||||
|
in configure.ac LIBBURN_REQUIRED, LIBISOFS_REQUIRED.
|
||||||
|
In isoburn_initialize() it would rather test by
|
||||||
|
iso_lib_is_compatible(isoburn_libisofs_req_major,...
|
||||||
|
than by
|
||||||
|
iso_lib_is_compatible(iso_lib_header_version_major,...
|
||||||
|
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()
|
||||||
@ -296,6 +333,30 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
|||||||
char* adr, int load);
|
char* adr, int load);
|
||||||
|
|
||||||
|
|
||||||
|
/** Aquire a target drive by its filesystem path resp. libburn persistent
|
||||||
|
address. This is a modern successor of isoburn_drive_scan_and_grab().
|
||||||
|
Wrapper for: burn_drive_scan_and_grab()
|
||||||
|
@since 0.1.2
|
||||||
|
@param drive_infos On success returns a one element array with the drive
|
||||||
|
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||||
|
the array has no valid elements at all.
|
||||||
|
The returned array should be freed via burn_drive_info_free()
|
||||||
|
when the drive is no longer needed.
|
||||||
|
@param adr The persistent address of the desired drive.
|
||||||
|
@param flag bit0= attempt to load the disc tray.
|
||||||
|
Else: failure if not loaded.
|
||||||
|
bit1= regard overwriteable media as blank
|
||||||
|
bit2= if the drive is a regular disk file: truncate it to
|
||||||
|
the write start address
|
||||||
|
bit3= if the drive reports a read-only profile try to read
|
||||||
|
table of content by scanning for ISO image headers.
|
||||||
|
(depending on media type and drive this might
|
||||||
|
help or it might make the resulting toc even worse)
|
||||||
|
@return 1 = success , 0 = drive not found , <0 = other error
|
||||||
|
*/
|
||||||
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
|
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()
|
||||||
@ -307,6 +368,25 @@ int isoburn_drive_scan_and_grab(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.
|
||||||
@ -341,6 +421,160 @@ int isoburn_disc_erasable(struct burn_drive *d);
|
|||||||
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||||
|
|
||||||
|
|
||||||
|
/** Program isoburn_disc_get_msc1() to return a fabricated value.
|
||||||
|
This makes only sense between aquiring the drive and reading the
|
||||||
|
image. After isoburn_read_image() it will confuse the coordination
|
||||||
|
of libisoburn and libisofs.
|
||||||
|
Note: Sessions and tracks are counted beginning with 1, not with 0.
|
||||||
|
@since 0.1.6
|
||||||
|
@param drive The drive where msc1 is to be set
|
||||||
|
@param adr_mode Determines how to interpret adr_value and to set msc1.
|
||||||
|
If adr_value shall represent a number then decimal ASCII
|
||||||
|
digits are expected.
|
||||||
|
0= start lba of last session in TOC, ignore adr_value
|
||||||
|
1= start lba of session number given by adr_value
|
||||||
|
2= start lba of track given number by adr_value
|
||||||
|
3= adr_value itself is the lba to be used
|
||||||
|
4= start lba of last session with volume id
|
||||||
|
given by adr_value
|
||||||
|
@parm adr_value A string describing the value to be eventually used.
|
||||||
|
@param flag Bitfield for control purposes. Unused yet. Submit 0.
|
||||||
|
*/
|
||||||
|
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
|
||||||
|
Wrappers for emulation of TOC on overwriteable media
|
||||||
|
|
||||||
|
Media which match the overwriteable usage model lack of a history of sessions
|
||||||
|
and tracks. libburn will not even hand out a burn_disc object for them and
|
||||||
|
always declare them blank. libisoburn checks for a valid ISO filesystem
|
||||||
|
header at LBA 0 and eventually declares them appendable.
|
||||||
|
Nevertheless one can only determine an upper limit of the size of the overall
|
||||||
|
image (by isoburn_get_min_start_byte()) but not a list of stored sessions
|
||||||
|
and their LBAs, as it is possible with true multi-session media.
|
||||||
|
|
||||||
|
The following wrappers add the capability to obtain a session and track TOC
|
||||||
|
from emulated multi-session images on overwriteables if the first session
|
||||||
|
was written by libisoburn-0.1.6 or later (i.e. with a header copy at LBA 32).
|
||||||
|
|
||||||
|
Be aware that the structs emitted by these isoburn calls are not compatible
|
||||||
|
with the libburn structs. I.e. you may use them only with isoburn_toc_*
|
||||||
|
calls.
|
||||||
|
isoburn_toc_disc needs to be freed after use. isoburn_toc_session and
|
||||||
|
isoburn_toc_track vanish together with their isoburn_toc_disc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Opaque handles to media, session, track */
|
||||||
|
struct isoburn_toc_disc;
|
||||||
|
struct isoburn_toc_session;
|
||||||
|
struct isoburn_toc_track;
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain a master handle for the table of content.
|
||||||
|
This handle governs allocated resources which have to be released by
|
||||||
|
isoburn_toc_disc_free() when no longer needed.
|
||||||
|
Wrapper for: burn_drive_get_disc()
|
||||||
|
@since 0.1.6
|
||||||
|
@param drive The drive with the media to inspect
|
||||||
|
@return NULL in case there is no content info, else it is a valid handle
|
||||||
|
*/
|
||||||
|
struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
|
||||||
|
|
||||||
|
|
||||||
|
/** Tell the number of 2048 byte blocks covered by the table of content.
|
||||||
|
Wrapper for: burn_disc_get_sectors()
|
||||||
|
@since 0.1.6
|
||||||
|
@param disc The master handle of the media
|
||||||
|
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||||
|
*/
|
||||||
|
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc);
|
||||||
|
|
||||||
|
|
||||||
|
/** Get the array of session handles from the table of content.
|
||||||
|
Wrapper for: burn_disc_get_sessions()
|
||||||
|
@since 0.1.6
|
||||||
|
@param disc The master handle of the media
|
||||||
|
@param num returns the number of sessions in the array
|
||||||
|
@return the address of the array of session handles
|
||||||
|
*/
|
||||||
|
struct isoburn_toc_session **isoburn_toc_disc_get_sessions(
|
||||||
|
struct isoburn_toc_disc *disc, int *num);
|
||||||
|
|
||||||
|
|
||||||
|
/** Tell the number of 2048 byte blocks covered by a particular session.
|
||||||
|
Wrapper for: burn_session_get_sectors()
|
||||||
|
@since 0.1.6
|
||||||
|
@param s The session handle
|
||||||
|
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||||
|
*/
|
||||||
|
int isoburn_toc_session_get_sectors(struct isoburn_toc_session *s);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain a copy of the entry which describes the end of a particular session.
|
||||||
|
Wrapper for: burn_session_get_leadout_entry()
|
||||||
|
@since 0.1.6
|
||||||
|
@param s The session handle
|
||||||
|
@param entry A pointer to memory provided by the caller. It will be filled
|
||||||
|
with info according to struct burn_toc_entry as defined
|
||||||
|
in libburn.h
|
||||||
|
*/
|
||||||
|
void isoburn_toc_session_get_leadout_entry(struct isoburn_toc_session *s,
|
||||||
|
struct burn_toc_entry *entry);
|
||||||
|
|
||||||
|
|
||||||
|
/** Get the array of track handles from a particular session.
|
||||||
|
Wrapper for: burn_session_get_tracks()
|
||||||
|
@since 0.1.6
|
||||||
|
@param s The session handle
|
||||||
|
@param num returns the number of tracks in the array
|
||||||
|
@return the address of the array of track handles
|
||||||
|
*/
|
||||||
|
struct isoburn_toc_track **isoburn_toc_session_get_tracks(
|
||||||
|
struct isoburn_toc_session *s, int *num);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain a copy of the entry which describes a particular itrack.
|
||||||
|
Wrapper for: burn_track_get_entry()
|
||||||
|
@since 0.1.6
|
||||||
|
@param s The track handle
|
||||||
|
@param entry A pointer to memory provided by the caller. It will be filled
|
||||||
|
with info according to struct burn_toc_entry as defined
|
||||||
|
in libburn.h
|
||||||
|
*/
|
||||||
|
void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
||||||
|
struct burn_toc_entry *entry);
|
||||||
|
|
||||||
|
|
||||||
|
/** Release the memory associated with a master handle of media.
|
||||||
|
The handle is invalid afterwards and may not be used any more.
|
||||||
|
Wrapper for: burn_disc_free()
|
||||||
|
@since 0.1.6
|
||||||
|
@param disc The master handle of the media
|
||||||
|
*/
|
||||||
|
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||||
|
|
||||||
|
|
||||||
|
/** 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
|
||||||
|
one other string of text information can be retrieved too.
|
||||||
|
@since 0.1.6
|
||||||
|
@param drive The drive with the media to inspect
|
||||||
|
@param lba The block number from where to read
|
||||||
|
@param image_blocks The number of 2048 bytes blocks
|
||||||
|
@param info Caller provided memory, enough to take eventual info reply
|
||||||
|
@param flag bit0-7: info return mode
|
||||||
|
0= do not return anything in info (do not even touch it)
|
||||||
|
1= return volume id (info needs 33 bytes)
|
||||||
|
@return 1 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 *image_blocks, char *info, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -683,6 +917,18 @@ int isoburn_igopt_set_fifo_size(struct isoburn_imgen_opts *o, int fifo_size);
|
|||||||
int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
|
int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain after image preparation the block address where the session will
|
||||||
|
start on media.
|
||||||
|
This value cannot be set by the application but only be inquired.
|
||||||
|
@since 0.1.4
|
||||||
|
@param o The option set to work on
|
||||||
|
@param lba The block number of the session start on media.
|
||||||
|
<0 means that no address has been determined yet.
|
||||||
|
@return 1 success, <=0 failure
|
||||||
|
*/
|
||||||
|
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/* End of Options for image generation */
|
/* End of Options for image generation */
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
@ -22,6 +22,68 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= single letters */
|
||||||
|
char *Ftypetxt(mode_t st_mode, int flag)
|
||||||
|
{
|
||||||
|
if(flag&1)
|
||||||
|
goto single_letters;
|
||||||
|
if(S_ISDIR(st_mode))
|
||||||
|
return("directory");
|
||||||
|
else if(S_ISREG(st_mode))
|
||||||
|
return("regular_file");
|
||||||
|
else if(S_ISLNK(st_mode))
|
||||||
|
return("symbolic_link");
|
||||||
|
else if(S_ISBLK(st_mode))
|
||||||
|
return("block_device");
|
||||||
|
else if(S_ISCHR(st_mode))
|
||||||
|
return("char_device");
|
||||||
|
else if(S_ISFIFO(st_mode))
|
||||||
|
return("name_pipe");
|
||||||
|
else if(S_ISSOCK(st_mode))
|
||||||
|
return("unix_socket");
|
||||||
|
return("unknown");
|
||||||
|
single_letters:;
|
||||||
|
if(S_ISDIR(st_mode))
|
||||||
|
return("d");
|
||||||
|
else if(S_ISREG(st_mode))
|
||||||
|
return("-");
|
||||||
|
else if(S_ISLNK(st_mode))
|
||||||
|
return("l");
|
||||||
|
else if(S_ISBLK(st_mode))
|
||||||
|
return("b");
|
||||||
|
else if(S_ISCHR(st_mode))
|
||||||
|
return("c");
|
||||||
|
else if(S_ISFIFO(st_mode))
|
||||||
|
return("p");
|
||||||
|
else if(S_ISSOCK(st_mode))
|
||||||
|
return("s");
|
||||||
|
return("?");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *Ftimetxt(time_t t, char timetext[40], int flag)
|
||||||
|
{
|
||||||
|
char *rpt;
|
||||||
|
struct tm tms, *tmpt;
|
||||||
|
static char months[12][4]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||||
|
|
||||||
|
tmpt= localtime_r(&t, &tms);
|
||||||
|
rpt= timetext;
|
||||||
|
rpt[0]= 0;
|
||||||
|
if(tmpt==0)
|
||||||
|
sprintf(rpt+strlen(rpt), "%12.f", (double) t);
|
||||||
|
else if(time(NULL)-t < 180*86400 && time(NULL)-t >= 0)
|
||||||
|
sprintf(rpt+strlen(rpt), "%3s %2d %2.2d:%2.2d",
|
||||||
|
months[tms.tm_mon], tms.tm_mday, tms.tm_hour, tms.tm_min);
|
||||||
|
else
|
||||||
|
sprintf(rpt+strlen(rpt), "%3s %2d %4.4d",
|
||||||
|
months[tms.tm_mon], tms.tm_mday, 1900+tms.tm_year);
|
||||||
|
return(timetext);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= compare atime
|
/* @param flag bit0= compare atime
|
||||||
@ -31,7 +93,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
{
|
{
|
||||||
struct stat s1, s2;
|
struct stat s1, s2;
|
||||||
int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done;
|
int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done;
|
||||||
char buf1[4096], buf2[4096], a[4096];
|
char buf1[4096], buf2[4096], a[4096], ttx1[40], ttx2[40];
|
||||||
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
|
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
|
||||||
|
|
||||||
ret= lstat(adr1, &s1);
|
ret= lstat(adr1, &s1);
|
||||||
@ -39,22 +101,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
printf("? %s : cannot lstat() : %s\n", adr1, strerror(errno));
|
printf("? %s : cannot lstat() : %s\n", adr1, strerror(errno));
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if(S_ISDIR(s1.st_mode))
|
strcpy(a, Ftypetxt(s1.st_mode, 1));
|
||||||
strcpy(a, "d");
|
|
||||||
else if(S_ISREG(s1.st_mode))
|
|
||||||
strcpy(a, "-");
|
|
||||||
else if(S_ISLNK(s1.st_mode))
|
|
||||||
strcpy(a, "l");
|
|
||||||
else if(S_ISBLK(s1.st_mode))
|
|
||||||
strcpy(a, "b");
|
|
||||||
else if(S_ISCHR(s1.st_mode))
|
|
||||||
strcpy(a, "c");
|
|
||||||
else if(S_ISFIFO(s1.st_mode))
|
|
||||||
strcpy(a, "p");
|
|
||||||
else if(S_ISSOCK(s1.st_mode))
|
|
||||||
strcpy(a, "s");
|
|
||||||
else
|
|
||||||
strcpy(a, "?");
|
|
||||||
strcat(a, " ");
|
strcat(a, " ");
|
||||||
if(adrc[0])
|
if(adrc[0])
|
||||||
strcat(a, adrc);
|
strcat(a, adrc);
|
||||||
@ -69,51 +116,62 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
|
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
if(s1.st_mode != s2.st_mode) {
|
if(s1.st_mode != s2.st_mode) {
|
||||||
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
|
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
|
||||||
|
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
|
||||||
|
if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
|
||||||
|
printf("%s : type : %s <> %s\n",
|
||||||
|
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
if(s1.st_uid != s2.st_uid) {
|
if(s1.st_uid != s2.st_uid) {
|
||||||
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
|
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
if(s1.st_gid != s2.st_gid) {
|
if(s1.st_gid != s2.st_gid) {
|
||||||
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
|
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
if((S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode)) ||
|
if((S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode)) ||
|
||||||
(S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode))) {
|
(S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode))) {
|
||||||
if(s1.st_rdev != s2.st_rdev) {
|
if(s1.st_rdev != s2.st_rdev) {
|
||||||
printf("%s : %s st_rdev : %lu <> %lu\n", a,
|
printf("%s : %s st_rdev : %lu <> %lu\n", a,
|
||||||
(S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"),
|
(S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"),
|
||||||
(unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev);
|
(unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
|
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
|
||||||
printf("%s : st_size : %.f <> %.f\n",
|
printf("%s : st_size : %.f <> %.f diff= %.f\n",
|
||||||
a, (double) s1.st_size, (double) s2.st_size);
|
a, (double) s1.st_size, (double) s2.st_size,
|
||||||
|
((double) s1.st_size) - (double) s2.st_size);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
if(s1.st_mtime != s2.st_mtime) {
|
if(s1.st_mtime != s2.st_mtime) {
|
||||||
printf("%s : st_mtime : %u <> %u\n",
|
printf("%s : st_mtime : %s <> %s diff= %.f s\n",
|
||||||
a, (unsigned int) s1.st_mtime, (unsigned int) s2.st_mtime);
|
a, Ftimetxt(s1.st_mtime, ttx1, 0),
|
||||||
|
Ftimetxt(s2.st_mtime, ttx2, 0),
|
||||||
|
((double) s1.st_mtime) - (double) s2.st_mtime);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
if(flag&1) {
|
if(flag&1) {
|
||||||
if(s1.st_atime != s2.st_atime) {
|
if(s1.st_atime != s2.st_atime) {
|
||||||
printf("%s : st_atime : %u <> %u\n",
|
printf("%s : st_atime : %s <> %s diff= %.f s\n",
|
||||||
a, (unsigned int) s1.st_atime, (unsigned int) s2.st_atime);
|
a, Ftimetxt(s1.st_atime, ttx1, 0),
|
||||||
|
Ftimetxt(s2.st_atime, ttx2, 0),
|
||||||
|
((double) s1.st_atime) - (double) s2.st_atime);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag&2) {
|
if(flag&2) {
|
||||||
if(s1.st_ctime != s2.st_ctime) {
|
if(s1.st_ctime != s2.st_ctime) {
|
||||||
printf("%s : st_ctime : %u <> %u\n",
|
printf("%s : st_ctime : %s <> %s diff= %.f s\n",
|
||||||
a, (unsigned int) s1.st_ctime, (unsigned int) s2.st_ctime);
|
a, Ftimetxt(s1.st_ctime, ttx1, 0),
|
||||||
|
Ftimetxt(s2.st_ctime, ttx2, 0),
|
||||||
|
((double) s1.st_ctime) - (double) s2.st_ctime);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(S_ISREG(s1.st_mode)) {
|
if(S_ISREG(s1.st_mode) && S_ISREG(s2.st_mode)) {
|
||||||
fd1= open(adr1, O_RDONLY);
|
fd1= open(adr1, O_RDONLY);
|
||||||
if(fd1==-1) {
|
if(fd1==-1) {
|
||||||
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
|
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
|
||||||
@ -169,7 +227,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
if(diffcount>0 || r1count!=r2count) {
|
if(diffcount>0 || r1count!=r2count) {
|
||||||
if(first_diff<0)
|
if(first_diff<0)
|
||||||
first_diff= (r1count>r2count ? r2count : r1count);
|
first_diff= (r1count>r2count ? r2count : r1count);
|
||||||
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
|
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
|
||||||
(s1.st_mtime==s2.st_mtime ? "CONTENT":"content"),
|
(s1.st_mtime==s2.st_mtime ? "CONTENT":"content"),
|
||||||
(double) (diffcount + abs(r1count-r2count)), (double) first_diff);
|
(double) (diffcount + abs(r1count-r2count)), (double) first_diff);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
@ -208,7 +266,8 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
strcpy(adr1, argv[1]);
|
strcpy(adr1, argv[1]);
|
||||||
strcpy(adrc, argv[1]+strlen(argv[2]));
|
strcpy(adrc, argv[1]+strlen(argv[2]));
|
||||||
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
|
sprintf(adr2, "%s%s%s",
|
||||||
|
argv[3], (adrc[0]=='/' || adrc[0]==0 ? "" : "/"), adrc);
|
||||||
|
|
||||||
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
|
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
|
||||||
exit(ret<=0);
|
exit(ret<=0);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/xorriso_eng.html
|
http://scdbackup.sourceforge.net/xorriso_eng.html
|
||||||
http://scdbackup.sourceforge.net/xorriso-0.1.0.tar.gz
|
http://scdbackup.sourceforge.net/xorriso-0.2.0.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -14,6 +14,7 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
|||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
|
|
||||||
Currently it is only supported on Linux with kernels >= 2.4.
|
Currently it is only supported on Linux with kernels >= 2.4.
|
||||||
|
|
||||||
@ -27,17 +28,18 @@ By using this software you agree to the disclaimer at the end of this text:
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
The most simple way to get xorriso is the xorriso standalone tarball.
|
The most simple way to get xorriso from source code is the xorriso standalone
|
||||||
|
tarball.
|
||||||
|
|
||||||
Prerequisites:
|
Prerequisites:
|
||||||
The tarball contains anything that is needed except libc and libpthread.
|
The tarball contains anything that is needed except libc and libpthread.
|
||||||
libreadline and the libreadline-dev headers will make dialog mode
|
libreadline and the readline-dev headers will make dialog mode more convenient,
|
||||||
more convenient, but are not mandatory.
|
but are not mandatory.
|
||||||
|
|
||||||
Obtain xorriso-0.1.0.tar.gz, take it to a directory of your choice and do:
|
Obtain xorriso-0.2.0.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf xorriso-0.1.0.tar.gz
|
tar xzf xorriso-0.2.0.pl00.tar.gz
|
||||||
cd xorriso-0.1.0
|
cd xorriso-0.2.0
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -129,7 +131,7 @@ of ctime date stamps.
|
|||||||
The exit value is 0 if no difference was detected, non-0 else.
|
The exit value is 0 if no difference was detected, non-0 else.
|
||||||
|
|
||||||
Example: After
|
Example: After
|
||||||
xorriso ... -pathspecs on -add /=/original/dir --
|
xorriso ... -pathspecs on -add /=/original/dir -- -commit_eject all
|
||||||
mount /media/dvd
|
mount /media/dvd
|
||||||
cd test
|
cd test
|
||||||
compare tree /media/dvd with tree /original/dir :
|
compare tree /media/dvd with tree /original/dir :
|
||||||
@ -159,9 +161,9 @@ and a matching dynamically linked xorriso binary.
|
|||||||
This binary is leaner but depends on properly installed libraries of suitable
|
This binary is leaner but depends on properly installed libraries of suitable
|
||||||
revision.
|
revision.
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
|
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
|
||||||
- libburn.so.4 , version libburn-0.4.2 or higher
|
- libburn.so.4 , version libburn-0.4.8 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.2 or higher
|
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
libisoburn and xorriso will not start with libraries which are older than their
|
||||||
headers seen at compile time. So compile in the oldest possible installation
|
headers seen at compile time. So compile in the oldest possible installation
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
setup unless you have reason to enforce a newer bug fix level.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# compile_xorriso.sh
|
# compile_xorriso.sh
|
||||||
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
|
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||||
# to be executed in a common parent of the directories given with
|
#
|
||||||
# $isofs $isoburn $burn
|
# Not intended for general use in production installations !
|
||||||
|
# Rather use: ./bootstrap ; ./configure ; make
|
||||||
|
#
|
||||||
|
# This is a development tool which expects a special setup of directories.
|
||||||
|
# It is to be executed in a common parent of the directories given with
|
||||||
|
# $isofs $isoburn $burn $xorr
|
||||||
|
|
||||||
isofs=./nglibisofs-develop/libisofs
|
isofs=./nglibisofs-develop/libisofs
|
||||||
burn=./libburn-develop/libburn
|
burn=./libburn-develop/libburn
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([xorriso], [0.1.0], [http://libburnia-project.org])
|
AC_INIT([xorriso], [0.2.0], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -9,30 +9,20 @@ AM_INIT_AUTOMAKE([subdir-objects])
|
|||||||
|
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=4
|
BURN_MINOR_VERSION=4
|
||||||
BURN_MICRO_VERSION=3
|
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=2
|
LIBISOFS_MICRO_VERSION=6
|
||||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||||
|
|
||||||
dnl The API version codes are now defined in libisoburn/libisoburn.h
|
dnl The API version codes are defined in libisoburn/libisoburn.h
|
||||||
dnl #define isoburn_header_version_*
|
dnl #define isoburn_header_version_*
|
||||||
dnl configure.ac only rules the libtool revision numbering about
|
|
||||||
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
|
||||||
dnl
|
|
||||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
|
||||||
dnl ISOBURN_MAJOR_VERSION=0
|
|
||||||
dnl ISOBURN_MINOR_VERSION=0
|
|
||||||
dnl ISOBURN_MICRO_VERSION=1
|
|
||||||
dnl AC_SUBST(ISOBURN_MAJOR_VERSION)
|
|
||||||
dnl AC_SUBST(ISOBURN_MINOR_VERSION)
|
|
||||||
dnl AC_SUBST(ISOBURN_MICRO_VERSION)
|
|
||||||
|
|
||||||
|
|
||||||
AC_PREFIX_DEFAULT([/usr/local])
|
AC_PREFIX_DEFAULT([/usr/local])
|
||||||
|
@ -70,6 +70,9 @@ then
|
|||||||
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
||||||
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/<b>osirrox restore options:<\/b>/\ <BR><b>osirrox restore options:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||||
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
||||||
-e 's/^features:<\/b>/features:<\/b><BR>\ <BR>/' \
|
-e 's/^features:<\/b>/features:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Support for frontend/\ <BR><b>Support for frontend/' \
|
-e 's/<b>Support for frontend/\ <BR><b>Support for frontend/' \
|
||||||
|
@ -1,15 +1,20 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
#
|
# make_xorriso_standalone.sh
|
||||||
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||||
#
|
#
|
||||||
|
# Not intended for general use in production installations !
|
||||||
|
#
|
||||||
|
# This is a development tool which expects a special setup of directories.
|
||||||
|
# It is to be executed in a common parent of the directories
|
||||||
|
# nglibisofs-develop libburn-develop libisoburn-develop
|
||||||
|
#
|
||||||
# Creates a standalone tree for building xorriso
|
# Creates a standalone tree for building xorriso
|
||||||
# from the contents of a unified libburnia development tree.
|
# from the contents of a unified libburnia development tree.
|
||||||
|
#
|
||||||
# The ./bootstrap script gets applied and a source tarball
|
# The ./bootstrap script gets applied and a source tarball
|
||||||
# is made.
|
# is made.
|
||||||
#
|
#
|
||||||
# To be executed in the parent of the *-develop directories.
|
|
||||||
#
|
|
||||||
# From that tree can be build a binary xorriso/xorriso
|
# From that tree can be build a binary xorriso/xorriso
|
||||||
# which at runtime depends only on libc and libpthread.
|
# which at runtime depends only on libc and libpthread.
|
||||||
# Execute in $lone_dir :
|
# Execute in $lone_dir :
|
||||||
@ -20,10 +25,11 @@
|
|||||||
current_dir=$(pwd)
|
current_dir=$(pwd)
|
||||||
lone_dir="$current_dir"/"xorriso-standalone"
|
lone_dir="$current_dir"/"xorriso-standalone"
|
||||||
|
|
||||||
xorriso_rev=0.0.1
|
xorriso_rev=0.2.0
|
||||||
xorriso_pl=""
|
# For unstable uploads:
|
||||||
|
# xorriso_pl=""
|
||||||
# For stable releases:
|
# For stable releases:
|
||||||
# xorriso_pl=".pl00"
|
xorriso_pl=".pl00"
|
||||||
|
|
||||||
with_bootstrap_tarball=1
|
with_bootstrap_tarball=1
|
||||||
|
|
||||||
@ -32,7 +38,7 @@ create_dir() {
|
|||||||
then
|
then
|
||||||
dummy=dummy
|
dummy=dummy
|
||||||
else
|
else
|
||||||
echo "Failed to create : $r1o" >&2
|
echo "Failed to create : $1" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -73,6 +79,9 @@ create_dir "$lone_dir"
|
|||||||
copy_files \
|
copy_files \
|
||||||
AUTHORS \
|
AUTHORS \
|
||||||
CONTRIBUTORS \
|
CONTRIBUTORS \
|
||||||
|
COPYRIGHT \
|
||||||
|
COPYING \
|
||||||
|
INSTALL \
|
||||||
acinclude.m4 \
|
acinclude.m4 \
|
||||||
aclocal.m4 \
|
aclocal.m4 \
|
||||||
bootstrap \
|
bootstrap \
|
||||||
@ -98,7 +107,7 @@ copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
|
|||||||
|
|
||||||
copy_files xorriso/README "$lone_dir"/README
|
copy_files xorriso/README "$lone_dir"/README
|
||||||
|
|
||||||
echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
|
# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
|
||||||
|
|
||||||
|
|
||||||
# libisoburn
|
# libisoburn
|
||||||
@ -127,14 +136,14 @@ copy_files \
|
|||||||
"$lone_dir"/test/compare_file.c
|
"$lone_dir"/test/compare_file.c
|
||||||
|
|
||||||
|
|
||||||
# >>> create compile_xorriso.sh for standalone
|
|
||||||
|
|
||||||
|
|
||||||
# nglibisofs
|
# nglibisofs
|
||||||
|
|
||||||
create_dir "$lone_dir"/libisofs
|
create_dir "$lone_dir"/libisofs
|
||||||
|
create_dir "$lone_dir"/libisofs/filters
|
||||||
goto_dir "$current_dir"/nglibisofs-develop
|
goto_dir "$current_dir"/nglibisofs-develop
|
||||||
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
||||||
|
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
|
||||||
|
copy_files COPYRIGHT "$lone_dir"/libisofs
|
||||||
|
|
||||||
# To get a common version.h
|
# To get a common version.h
|
||||||
cat version.h.in >> "$lone_dir"/version.h.in
|
cat version.h.in >> "$lone_dir"/version.h.in
|
||||||
@ -176,8 +185,8 @@ fi
|
|||||||
create_dir "$lone_dir"/libburn
|
create_dir "$lone_dir"/libburn
|
||||||
goto_dir "$current_dir"/libburn-develop
|
goto_dir "$current_dir"/libburn-develop
|
||||||
copy_files libburn/*.[ch] "$lone_dir"/libburn
|
copy_files libburn/*.[ch] "$lone_dir"/libburn
|
||||||
|
copy_files COPYRIGHT "$lone_dir"/libburn
|
||||||
|
|
||||||
copy_files COPYING "$lone_dir"/COPYING
|
|
||||||
|
|
||||||
# To get a common version.h
|
# To get a common version.h
|
||||||
cat version.h.in >> "$lone_dir"/version.h.in
|
cat version.h.in >> "$lone_dir"/version.h.in
|
||||||
|
File diff suppressed because it is too large
Load Diff
5525
xorriso/xorriso.c
5525
xorriso/xorriso.c
File diff suppressed because it is too large
Load Diff
@ -72,6 +72,13 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
|||||||
int error_code, char msg_text[], int os_errno,
|
int error_code, char msg_text[], int os_errno,
|
||||||
char severity[], int flag);
|
char severity[], int flag);
|
||||||
|
|
||||||
|
/** Alternative call interface of Xorriso_msgs_submit with void* instead
|
||||||
|
of struct XorrisO*
|
||||||
|
*/
|
||||||
|
int Xorriso_msgs_submit_void(void *xorriso,
|
||||||
|
int error_code, char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Evaluate an advise whether to abort or whether to go on with option
|
/** Evaluate an advise whether to abort or whether to go on with option
|
||||||
processing. This should be called after any option function was processed.
|
processing. This should be called after any option function was processed.
|
||||||
@ -220,15 +227,29 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag);
|
|||||||
*/
|
*/
|
||||||
int Xorriso_option_commit_eject(struct XorrisO *xorriso, char *which, int flag);
|
int Xorriso_option_commit_eject(struct XorrisO *xorriso, char *which, int flag);
|
||||||
|
|
||||||
|
/* Option -compare and -compare_r
|
||||||
|
@param flag bit0= issue summary message
|
||||||
|
bit1= do not reset pacifier, no final pacifier message
|
||||||
|
bit2= do not issue pacifier messages at all
|
||||||
|
bit3= recursive: -compare_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char *iso_path, int flag);
|
||||||
|
|
||||||
/* Option -cpr alias -cpri */
|
/* Option -cpr alias -cpri */
|
||||||
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);
|
||||||
|
|
||||||
/* >>> not yet implemented
|
/* Options -cpx , -cpax, -cp_rx , -cp_rax */
|
||||||
/ * Option -cut_out * /
|
/* @param flag bit0= recursive (-cp_rx, -cp_rax)
|
||||||
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
bit1= full property restore (-cpax, -cp_rax)
|
||||||
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
|
||||||
*/
|
*/
|
||||||
|
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -cut_out */
|
||||||
|
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char *start, char *count, char *iso_rr_path, int flag);
|
||||||
|
|
||||||
/* Options -dev , -indev, -outdev */
|
/* Options -dev , -indev, -outdev */
|
||||||
/* @param flag bit0=use as indev , bit1= use as outdev
|
/* @param flag bit0=use as indev , bit1= use as outdev
|
||||||
@ -261,15 +282,29 @@ int Xorriso_option_eject(struct XorrisO *xorriso, char *which, int flag);
|
|||||||
*/
|
*/
|
||||||
int Xorriso_option_end(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_end(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -iso_rr_pattern "on"|"ls"|"off" */
|
/* Option -errfile_log marked|plain path|-|"" */
|
||||||
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
int Xorriso_option_errfile_log(struct XorrisO *xorriso,
|
||||||
int flag);
|
char *mode, char *path, int flag);
|
||||||
|
|
||||||
|
/* Option -error_behavior */
|
||||||
|
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
||||||
|
char *occasion, char *behavior, int flag);
|
||||||
|
|
||||||
|
/* Options -extract , -extract_single */
|
||||||
|
/* @param flag bit0=do not report the restored item
|
||||||
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
|
bit5= -extract_single: eventually do not insert directory tree
|
||||||
|
*/
|
||||||
|
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char *iso_path, int flag);
|
||||||
|
|
||||||
/* Option -follow */
|
/* Option -follow */
|
||||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -find alias -findi, and -findx */
|
/* Option -find alias -findi, and -findx */
|
||||||
/* @param flag bit0= -findx rather than -findi
|
/* @param flag bit0= -findx rather than -findi
|
||||||
|
bit1= do not reset pacifier, no final pacifier message
|
||||||
|
do not reset find_compare_result
|
||||||
*/
|
*/
|
||||||
int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
@ -286,9 +321,22 @@ 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);
|
||||||
|
|
||||||
|
/* Option -list_formats */
|
||||||
|
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* Option -load session|track|sbsector value */
|
||||||
|
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
|
*/
|
||||||
|
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||||
|
char *adr_value, int flag);
|
||||||
|
|
||||||
/* Option -logfile */
|
/* Option -logfile */
|
||||||
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
||||||
char *fileadr, int flag);
|
char *fileadr, int flag);
|
||||||
@ -313,6 +361,22 @@ int Xorriso_option_lsi(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -map */
|
||||||
|
/* @param flag bit0=do not report the added item
|
||||||
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
|
*/
|
||||||
|
int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
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);
|
||||||
|
|
||||||
@ -327,11 +391,21 @@ int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
/* Option -no_rc */
|
/* Option -no_rc */
|
||||||
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* Option -not_leaf */
|
||||||
|
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
||||||
|
|
||||||
|
/* Option -not_paths */
|
||||||
|
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
|
||||||
/* Option -options_from_file*/
|
/* Option -options_from_file*/
|
||||||
/* @return <=0 error , 1 = success , 3 = request to end program run */
|
/* @return <=0 error , 1 = success , 3 = request to end program run */
|
||||||
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);
|
||||||
|
|
||||||
@ -341,6 +415,10 @@ 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);
|
||||||
|
|
||||||
@ -353,7 +431,9 @@ int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
|
|||||||
/* Option -print */
|
/* Option -print */
|
||||||
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
|
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
|
||||||
|
|
||||||
/* Option -print-size */
|
/* Option -print_size
|
||||||
|
@param flag bit0= report in mkisofs compatible form on real stdout
|
||||||
|
*/
|
||||||
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -prog */
|
/* Option -prog */
|
||||||
@ -362,12 +442,18 @@ int Xorriso_option_prog(struct XorrisO *xorriso, char *name, int flag);
|
|||||||
/* Option -prog_help */
|
/* Option -prog_help */
|
||||||
int Xorriso_option_prog_help(struct XorrisO *xorriso, char *name, int flag);
|
int Xorriso_option_prog_help(struct XorrisO *xorriso, char *name, int flag);
|
||||||
|
|
||||||
|
/* Option -publisher */
|
||||||
|
int Xorriso_option_publisher(struct XorrisO *xorriso, char *name, int flag);
|
||||||
|
|
||||||
/* Option -pwd alias -pwdi */
|
/* Option -pwd alias -pwdi */
|
||||||
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -pwdx */
|
/* Option -pwdx */
|
||||||
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* Option -reassure "on"|"tree"|"off" */
|
||||||
|
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -report_about */
|
/* Option -report_about */
|
||||||
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
||||||
int flag);
|
int flag);
|
||||||
@ -376,8 +462,8 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
|||||||
int Xorriso_option_return_with(struct XorrisO *xorriso, char *severity,
|
int Xorriso_option_return_with(struct XorrisO *xorriso, char *severity,
|
||||||
int exit_value, int flag);
|
int exit_value, int flag);
|
||||||
|
|
||||||
/* Option -reassure "on"|"tree"|"off" */
|
/* Option -revoke_exclusions */
|
||||||
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_revoke_exclusions(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
|
/* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
|
||||||
/* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
|
/* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
|
||||||
@ -385,13 +471,24 @@ int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
|
|
||||||
/* Option -rollback */
|
/* Option -rollback */
|
||||||
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
/* @param flag bit0= do not -reassure
|
||||||
|
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
*/
|
*/
|
||||||
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* Option -rom_toc_scan */
|
||||||
|
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* Option -session_log */
|
||||||
|
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
|
||||||
/* Option -speed */
|
/* Option -speed */
|
||||||
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
||||||
|
|
||||||
|
/* Option -split_size */
|
||||||
|
int Xorriso_option_split_size(struct XorrisO *xorriso, char *s, int flag);
|
||||||
|
|
||||||
/* Option -status */
|
/* Option -status */
|
||||||
int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
@ -399,6 +496,10 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
|||||||
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
|
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* Option -stream_recording */
|
||||||
|
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -tell_media_space */
|
/* Option -tell_media_space */
|
||||||
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -410,7 +511,16 @@ int Xorriso_option_temp_mem_limit(struct XorrisO *xorriso, char *size,
|
|||||||
int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -uid */
|
/* Option -uid */
|
||||||
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *uid, int flag);
|
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
|
||||||
|
|
||||||
|
/* Options -update and -update_r
|
||||||
|
@param flag bit0= issue summary message
|
||||||
|
bit1= do not reset pacifier, no final pacifier message
|
||||||
|
bit2= do not issue pacifier messages at all
|
||||||
|
bit3= recursive: -update_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char *iso_path, int flag);
|
||||||
|
|
||||||
/* Option -use_readline */
|
/* Option -use_readline */
|
||||||
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
@ -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, scdbackup">
|
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
|
||||||
<META NAME="robots" CONTENT="follow">
|
<META NAME="robots" CONTENT="follow">
|
||||||
<TITLE>xorriso homepage english</TITLE>
|
<TITLE>xorriso homepage english</TITLE>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
@ -24,6 +24,8 @@ into Rock Ridge enhanced ISO 9660 filesystems and allows
|
|||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
<BR>
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
</P>
|
</P>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
@ -33,10 +35,10 @@ optical media or to filesystem objects.
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<H2>Hardware requirements:</H2>
|
<H2>Hardware requirements:</H2>
|
||||||
A CD/DVD recorder suitable for
|
A CD/DVD/BD recorder suitable for
|
||||||
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
||||||
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
||||||
and to MMC-5 for DVD).
|
and to MMC-5 for DVD or BD).
|
||||||
<BR>
|
<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -58,14 +60,15 @@ and to MMC-5 for DVD).
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-0.4.3</DT>
|
<DT>libburn-0.4.9</DT>
|
||||||
<DD>reads and writes data from and to CD and DVD.</DD>
|
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
furthered by team of libburnia-project.org)</DD>
|
furthered since August 2006 by
|
||||||
<DT>libisofs-0.6.1</DT>
|
Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||||
<DD>operates ISO 9660 images.</DD>
|
<DT>libisofs-0.6.6</DT>
|
||||||
<DD>(By Vreixo Formoso from team of libburnia-project.org)</DD>
|
<DD>operates on ISO 9660 filesystem images.</DD>
|
||||||
<DT>libisoburn-0.1.0</DT>
|
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
|
||||||
|
<DT>libisoburn-0.2.0</DT>
|
||||||
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
|
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
|
||||||
<DD>(By Vreixo Formoso and Thomas Schmitt
|
<DD>(By Vreixo Formoso and Thomas Schmitt
|
||||||
from team of libburnia-project.org)</DD>
|
from team of libburnia-project.org)</DD>
|
||||||
@ -86,20 +89,24 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
|
|||||||
<H2>Special features:</H2>
|
<H2>Special features:</H2>
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>
|
||||||
ISO 9660 formatter and burner for CD or DVD are fixely integrated.
|
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Operates on an existing ISO image or creates a new one.
|
Operates on an existing ISO image or creates a new one.
|
||||||
<LI>
|
|
||||||
</LI>
|
</LI>
|
||||||
|
<LI>
|
||||||
Copies files from filesystem into the ISO image.
|
Copies files from filesystem into the ISO image.
|
||||||
<LI>
|
|
||||||
</LI>
|
</LI>
|
||||||
|
<LI>
|
||||||
Renames or deletes file objects in the ISO image.
|
Renames or deletes file objects in the ISO image.
|
||||||
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Changes file properties in the ISO image.
|
Changes file properties in the ISO image.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
|
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
Can write result as completely new image to optical media or
|
Can write result as completely new image to optical media or
|
||||||
filesystem objects.
|
filesystem objects.
|
||||||
</LI>
|
</LI>
|
||||||
@ -108,10 +115,14 @@ Can write result as add-on session to appendable multi-session media,
|
|||||||
to overwriteable media, to regular files, and to block devices.
|
to overwriteable media, to regular files, and to block devices.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Scans for optical drives, blanks re-useable optical media.
|
Can restore single files and whole trees from ISO image to disk filesystem.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Suitable for: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+RW, DVD-RAM.
|
Scans for optical drives, blanks re-useable optical media, formats media.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Suitable for:
|
||||||
|
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-RE.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Reads its instructions from command line arguments, dialog, and batch files.
|
Reads its instructions from command line arguments, dialog, and batch files.
|
||||||
@ -119,6 +130,9 @@ Reads its instructions from command line arguments, dialog, and batch files.
|
|||||||
<LI>
|
<LI>
|
||||||
Provides navigation commands for interactive ISO image manipulation.
|
Provides navigation commands for interactive ISO image manipulation.
|
||||||
</LI>
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Adjustable thresholds for abort, exit value, and problem reporting.
|
||||||
|
</LI>
|
||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
</P>
|
</P>
|
||||||
@ -144,8 +158,9 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
|
|||||||
<DT>Get info about a particular drive and loaded media:</DT>
|
<DT>Get info about a particular drive and loaded media:</DT>
|
||||||
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
||||||
|
|
||||||
<DT>Make re-usable media writable again, delete any ISO 9660 image:</DT>
|
<DT>Make re-usable media writable again, delete any ISO 9660 image,
|
||||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -eject all</KBD></DD>
|
eventually prepare yet unused BD-RE:</DT>
|
||||||
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed -eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
@ -167,17 +182,17 @@ adjust permissions to make it publicly read-only,
|
|||||||
write it to media and immediately eject media without
|
write it to media and immediately eject media without
|
||||||
previously reloading the written image.
|
previously reloading the written image.
|
||||||
</DT>
|
</DT>
|
||||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -pathspecs on \</KBD></DD>
|
<DD>$<KBD> cd /home/me</KBD></DD>
|
||||||
<DD><KBD> -add /sounds=/home/me/sounds \</KBD></DD>
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
|
||||||
<DD><KBD>
|
<DD><KBD> -map /home/me/sounds /sounds \</KBD></DD>
|
||||||
/pictures=/home/me/pictures -- \</KBD></DD>
|
<DD><KBD> -map /home/me/pictures /pictures \</KBD></DD>
|
||||||
<DD><KBD> -rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
|
<DD><KBD> -rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
|
||||||
<DD><KBD> -add /pictures/private/horses=/home/me/pictures/private/horses -- \</KBD></DD>
|
<DD><KBD> -cd / \</KBD></DD>
|
||||||
|
<DD><KBD> -add pictures/private/horses* -- \</KBD></DD>
|
||||||
<DD><KBD> -chmod_r a+r,a-w / -- \</KBD></DD>
|
<DD><KBD> -chmod_r a+r,a-w / -- \</KBD></DD>
|
||||||
<DD><KBD> -find / -type d -exec chmod a+x -- \</KBD></DD>
|
<DD><KBD> -find / -type d -exec chmod a+x -- \</KBD></DD>
|
||||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
|
<DD><KBD> -volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
|
||||||
<DD><KBD> -commit_eject all</KBD></DD>
|
<DD><KBD> -commit_eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
@ -188,15 +203,14 @@ rename /pictures/private/horses,
|
|||||||
add new directory trees /sounds and /movies,
|
add new directory trees /sounds and /movies,
|
||||||
disallow any access for group and others.
|
disallow any access for group and others.
|
||||||
Finally write as additional session to media and eject:</DT>
|
Finally write as additional session to media and eject:</DT>
|
||||||
<DD>$<KBD> xorriso -dev /dev/sr0 -pathspecs on \</KBD></DD>
|
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
||||||
<DD><KBD> -rm_r /sounds -- \</KBD></DD>
|
<DD><KBD> -rm_r /sounds -- \</KBD></DD>
|
||||||
<DD><KBD> -mv /pictures/private/horses /horse_show -- \</KBD></DD>
|
<DD><KBD> -mv /pictures/private/horses /horse_show -- \</KBD></DD>
|
||||||
<DD><KBD> -add /sounds=/home/me/prepared_for_dvd/sounds_dummy \</KBD></DD>
|
<DD><KBD> -map /home/me/prepared_for_dvd/sounds_dummy /sounds \</KBD></DD>
|
||||||
<DD><KBD> /movies=/home/me/prepared_for_dvd/movies -- \</KBD></DD>
|
<DD><KBD> -map /home/me/prepared_for_dvd/movies /movies \</KBD></DD>
|
||||||
<DD><KBD> -chmod_r go-rwx / -- \</KBD></DD>
|
<DD><KBD> -chmod_r go-rwx / -- \</KBD></DD>
|
||||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
|
<DD><KBD> -volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
|
||||||
<DD><KBD> -commit_eject all</KBD></DD>
|
<DD><KBD> -commit_eject all</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
@ -223,9 +237,11 @@ run. It will write eventually pending changes to media, if that has not
|
|||||||
already been done by a previous -commit.</DT>
|
already been done by a previous -commit.</DT>
|
||||||
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-dev /dev/sr0 -pathspecs on</B></KBD></DD>
|
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-add /sounds=/home/me/prepared_for_dvd/sounds_dummy /movies=/home/me/prepared_for_dvd/movies</B></KBD></DD>
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
|
||||||
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies /movies</B></KBD></DD>
|
||||||
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-commit</B></KBD></DD>
|
<DD><KBD><B>-commit</B></KBD></DD>
|
||||||
@ -237,6 +253,28 @@ already been done by a previous -commit.</DT>
|
|||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
|
<DT>The following command can be run on blank media to create a
|
||||||
|
copy of the mentioned disk directory trees, and it can be run on appendable
|
||||||
|
media to perform a minimal set of change operations which update the
|
||||||
|
old ISO copies to match the new disk trees.
|
||||||
|
Older states can be retrieved by help of mount option "session=" from CD-R[W],
|
||||||
|
by help of "sbsector=" from other media.
|
||||||
|
So this constitutes true incremental backup.
|
||||||
|
<BR>
|
||||||
|
The copies will be complete, except all file names ending
|
||||||
|
with ".o" or ".swp" which are excluded by options -not_leaf.
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
||||||
|
<DD><KBD> -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
|
||||||
|
<DD><KBD> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
||||||
|
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
||||||
|
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
||||||
|
<DD><KBD> -commit -toc -eject all</KBD></DD>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
<DT>In batch mode it is possible to operate xorriso in a pipeline
|
<DT>In batch mode it is possible to operate xorriso in a pipeline
|
||||||
with an external consumer of the generated ISO image. Any message
|
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>
|
||||||
@ -246,6 +284,18 @@ output will be redirected to stderr in this case.</DT>
|
|||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
|
<DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
|
||||||
|
<DD>$<KBD> xorriso -indev /dev/sr0 \</KBD></DD>
|
||||||
|
<DD><KBD> -osirrox on \</KBD></DD>
|
||||||
|
<DD><KBD> -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
|
||||||
|
<DD><KBD> /home/her/buttercup_dir -- \</KBD>
|
||||||
|
<DD><KBD> -extract /sounds /home/her/sounds_from_me</KBD></DD>
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
|
||||||
<DT>Get overview of the options:</DT>
|
<DT>Get overview of the options:</DT>
|
||||||
<DD>$<KBD> <A HREF="xorriso_help">xorriso -help</A></KBD></DD>
|
<DD>$<KBD> <A HREF="xorriso_help">xorriso -help</A></KBD></DD>
|
||||||
@ -255,7 +305,8 @@ output will be redirected to stderr in this case.</DT>
|
|||||||
</DL>
|
</DL>
|
||||||
|
|
||||||
|
|
||||||
Testers wanted who are willing to risk some double layer DVD media.
|
Testers wanted who are willing to risk some double layer DVD media or
|
||||||
|
are interested in using BD-R media.
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -263,25 +314,10 @@ Testers wanted who are willing to risk some double layer DVD media.
|
|||||||
<A NAME="download"></A>
|
<A NAME="download"></A>
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Download as source code (see README):</DT>
|
<DT><H3>Download as source code (see README):</H3></DT>
|
||||||
<DD><A HREF="xorriso-0.1.0.tar.gz">xorriso-0.1.0.tar.gz</A>
|
<DD><A HREF="xorriso-0.2.0.pl00.tar.gz">xorriso-0.2.0.pl00.tar.gz</A>
|
||||||
( KB).
|
(1000 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<!--
|
|
||||||
<DD> </DD>
|
|
||||||
<DT>Download as single x86 binaries (untar and move to /usr/bin/xorriso):</DT>
|
|
||||||
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0.tar.gz">
|
|
||||||
xorriso_0.1.0.pl00-x86-suse9_0.tar.gz</A>, ( KB),
|
|
||||||
<DL>
|
|
||||||
<DD>runs on SuSE 9.0 (2.4.21) , SuSE 10.2 (2.6.18.2) and others.</DD>
|
|
||||||
</DL>
|
|
||||||
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz">
|
|
||||||
xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz</A>, ( KB), -static compiled,
|
|
||||||
<DL>
|
|
||||||
<DD>runs on many other systems.</DD>
|
|
||||||
-->
|
|
||||||
|
|
||||||
</DL>
|
</DL>
|
||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
@ -303,77 +339,92 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
|
|||||||
</DL>
|
</DL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version xorriso-0.1.0:
|
Bug fixes towards xorriso-0.1.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>
|
||||||
|
-chmod unintentionally performed o-x as first operation
|
||||||
|
</LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
</P>
|
||||||
Bug fixes towards xorriso-0.1.0.pl00:
|
<P>
|
||||||
|
Enhancements towards previous stable version xorriso-0.1.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>New option -extract restores with arguments of -map or -update_r</LI>
|
||||||
|
<LI>
|
||||||
|
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
|
||||||
|
</LI>
|
||||||
|
<LI>New option -paste_in to copy ISO files into parts of disk files</LI>
|
||||||
|
<LI>New options -map_l, -compare_l, -update_l, -extract_l</LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.1.0 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.2.1 :</H3></DT>
|
||||||
<DD>Enhancements towards stable version 0.1.0.pl00:
|
<DD>Bug fixes towards xorriso-0.2.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
</LI>
|
||||||
|
<LI>- none yet -</LI>
|
||||||
|
<!--
|
||||||
|
-->
|
||||||
|
</UL>
|
||||||
|
</DD>
|
||||||
|
<DD>Enhancements towards stable version 0.2.0.pl00:
|
||||||
|
<UL>
|
||||||
|
<LI>- none yet -</LI>
|
||||||
|
<!--
|
||||||
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_xorriso_devel">README 0.1.1</A>
|
<DD><A HREF="README_xorriso_devel">README 0.2.1</A>
|
||||||
<DD><A HREF="xorriso_help_devel">xorriso_0.1.1 -help</A></DD>
|
<DD><A HREF="xorriso_help_devel">xorriso_0.2.1 -help</A></DD>
|
||||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.1)</A></DD>
|
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.1)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Maintainers of xorriso unstable packages please use SVN of
|
<DT>If you want to distribute development versions of xorriso, then use
|
||||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
this tarball which produces static linking between xorriso and the
|
||||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
|
libburnia libraries.
|
||||||
</KBD></DD>
|
</DT>
|
||||||
<DD>Build: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
|
<DD>Source (./bootstrap is already applied, build tested,
|
||||||
</KBD></DD>
|
installation see README)
|
||||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisburn</B>
|
|
||||||
</KBD></DD>
|
|
||||||
<DD>Build: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
|
|
||||||
</KBD></DD>
|
|
||||||
<DD>Download: - libisofs bzr service not functional yet - </DD>
|
|
||||||
<DD>Build: <KBD><B>cd ng-libisofs ; ./autogen.sh ; ./configure --prefix /usr ; make</B>
|
|
||||||
</KBD></DD>
|
|
||||||
<DD>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
|
||||||
autotools</A> of at least version 1.7 installed.
|
|
||||||
But after the run of <KBD>./bootstrap</KBD>, only
|
|
||||||
vanilla tools like make and gcc are needed.</DD>
|
|
||||||
</DD>
|
|
||||||
<DD> </DD>
|
|
||||||
<DT>The following downloads are intended for adventurous end users or
|
|
||||||
admins with full system souvereignty.</DT>
|
|
||||||
<DD>Source (./bootstrap is already applied, build tested, for more see
|
|
||||||
<A HREF="README_xorriso_devel">upcoming README</A> ):
|
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="xorriso-0.1.1.tar.gz">xorriso-0.1.1.tar.gz</A>
|
<A HREF="xorriso-0.2.1.tar.gz">xorriso-0.2.1.tar.gz</A>
|
||||||
(680 KB).
|
(1000 KB).
|
||||||
</DD>
|
|
||||||
<DD>Binary (untar and move to /usr/bin/xorriso):</DD>
|
|
||||||
<DD><A HREF="xorriso_0.1.1-x86-suse9_0.tar.gz">
|
|
||||||
xorriso_0.1.1-x86-suse9_0.tar.gz</A>, ( KB).
|
|
||||||
</DD>
|
|
||||||
<DD><A HREF="xorriso_0.1.1-x86-suse9_0-static.tar.gz">
|
|
||||||
xorriso_0.1.1-x86-suse9_0-static.tar.gz</A>, ( KB)
|
|
||||||
</DD>
|
</DD>
|
||||||
|
<DT>A dynamically linked development version of xorriso can be obtained
|
||||||
|
from repositories of
|
||||||
|
<A HREF="http://libburnia-project.org"> libburnia-project.org</A>.
|
||||||
|
xorriso is part of libisoburn/trunk and will get built by its "make".
|
||||||
|
</DT>
|
||||||
|
<DT>Be warned that the libraries in SVN and bzr are development versions with
|
||||||
|
possibly unstable API/ABI enhancements. Do not distribute development
|
||||||
|
versions for dynamic linking. Only release versions are safe for that.
|
||||||
|
</DT>
|
||||||
|
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
|
||||||
|
</KBD></DD>
|
||||||
|
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
|
</KBD></DD>
|
||||||
|
<DD>Download: <KBD><B>bzr branch lp:libisofs</B></KBD></DD>
|
||||||
|
<DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
|
</KBD></DD>
|
||||||
|
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
|
||||||
|
</KBD></DD>
|
||||||
|
<DD>Install: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
|
</KBD></DD>
|
||||||
|
<DT>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
||||||
|
autotools</A> of at least version 1.7 installed.
|
||||||
|
But after the run of <KBD>./bootstrap</KBD>, only
|
||||||
|
vanilla tools like make and gcc are needed.
|
||||||
|
</DT>
|
||||||
|
<DD> </DD>
|
||||||
</DL>
|
</DL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
-->
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
@ -416,6 +467,7 @@ pppoem, a DSL throughput monitor (mainly for Linux kernel 2.4)</A></DD>
|
|||||||
</DL>
|
</DL>
|
||||||
<BR><BR>
|
<BR><BR>
|
||||||
Legal statement: This website does not serve any commercial purpose.<BR>
|
Legal statement: This website does not serve any commercial purpose.<BR>
|
||||||
|
<BR><BR>
|
||||||
</FONT>
|
</FONT>
|
||||||
</BODY>
|
</BODY>
|
||||||
</HTML>
|
</HTML>
|
||||||
|
@ -78,6 +78,10 @@ xorriso_xorriso_SOURCES = \
|
|||||||
libisofs/eltorito.h \
|
libisofs/eltorito.h \
|
||||||
libisofs/eltorito.c \
|
libisofs/eltorito.c \
|
||||||
libisofs/data_source.c \
|
libisofs/data_source.c \
|
||||||
|
libisofs/find.c \
|
||||||
|
libisofs/filter.h \
|
||||||
|
libisofs/filter.c \
|
||||||
|
libisofs/filters/xor_encrypt.c \
|
||||||
\
|
\
|
||||||
libburn/async.c \
|
libburn/async.c \
|
||||||
libburn/async.h \
|
libburn/async.h \
|
||||||
@ -178,10 +182,8 @@ EXTRA_DIST = \
|
|||||||
CONTRIBUTORS \
|
CONTRIBUTORS \
|
||||||
COPYRIGHT \
|
COPYRIGHT \
|
||||||
COPYING \
|
COPYING \
|
||||||
NEWS \
|
|
||||||
ChangeLog \
|
|
||||||
INSTALL \
|
INSTALL \
|
||||||
xorriso/compile_xorriso.sh \
|
xorriso/changelog.txt \
|
||||||
$(man_MANS)
|
$(man_MANS)
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#ifndef Xorriso_private_includeD
|
#ifndef Xorriso_private_includeD
|
||||||
#define Xorriso_private_includeD yes
|
#define Xorriso_private_includeD yes
|
||||||
|
|
||||||
#define Xorriso_program_versioN "0.0.1"
|
#define Xorriso_program_versioN "0.2.0"
|
||||||
|
|
||||||
/** The source code release timestamp */
|
/** The source code release timestamp */
|
||||||
#include "xorriso_timestamp.h"
|
#include "xorriso_timestamp.h"
|
||||||
@ -45,7 +45,10 @@
|
|||||||
/* <<< ??? */
|
/* <<< ??? */
|
||||||
typedef int (*Cleanup_app_handler_T)();
|
typedef int (*Cleanup_app_handler_T)();
|
||||||
|
|
||||||
struct LinkiteM;
|
struct LinkiteM; /* Trace of hops during symbolic link resolution */
|
||||||
|
struct ExclusionS; /* List of -not_* conditions */
|
||||||
|
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 */
|
||||||
#define Xorriso_status_history_maX 100
|
#define Xorriso_status_history_maX 100
|
||||||
@ -77,6 +80,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int did_something_useful;
|
int did_something_useful;
|
||||||
|
|
||||||
int add_plainly;
|
int add_plainly;
|
||||||
|
off_t split_size;
|
||||||
|
|
||||||
/* >>> put libisofs aspects here <<< */
|
/* >>> put libisofs aspects here <<< */
|
||||||
|
|
||||||
@ -101,13 +105,39 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int volid_default;
|
int volid_default;
|
||||||
char loaded_volid[33];
|
char loaded_volid[33];
|
||||||
|
|
||||||
|
char publisher[129];
|
||||||
|
|
||||||
|
char session_logfile[SfileadrL];
|
||||||
|
int session_lba;
|
||||||
|
int session_blocks;
|
||||||
|
|
||||||
/* >>> put libburn/isoburn aspects here */
|
/* >>> put libburn/isoburn aspects here */
|
||||||
|
|
||||||
|
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
|
||||||
|
scan -ROM profiles for ISO sessions
|
||||||
|
*/
|
||||||
|
|
||||||
|
int image_start_mode; /* From what address to load the ISO image
|
||||||
|
bit0-15= addressing mode
|
||||||
|
0= automatic lba as deduced from media
|
||||||
|
1= value is session number
|
||||||
|
2= value is track number
|
||||||
|
3= value is lba
|
||||||
|
bit30= interference with normal msc1 processing
|
||||||
|
is enabled. Without this bit,
|
||||||
|
isoburn_set_msc1() will not be called.
|
||||||
|
bit31= image loading has happened,
|
||||||
|
setting is kept for rollback only.
|
||||||
|
Always apply as 0=auto.
|
||||||
|
*/
|
||||||
|
char image_start_value[81]; /* value according image_start_mode */
|
||||||
|
|
||||||
char indev[SfileadrL];
|
char indev[SfileadrL];
|
||||||
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
|
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
|
||||||
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
|
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
|
||||||
|
|
||||||
int volset_change_pending; /* whether -commit would make sense */
|
int volset_change_pending; /* whether -commit would make sense */
|
||||||
|
int no_volset_present; /* set to 1 on first failure */
|
||||||
|
|
||||||
char outdev[SfileadrL];
|
char outdev[SfileadrL];
|
||||||
void *out_drive_handle; /* interpreted only by xorrisoburn.c */
|
void *out_drive_handle; /* interpreted only by xorrisoburn.c */
|
||||||
@ -121,6 +151,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
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;
|
||||||
@ -129,6 +160,14 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
/* XORRISO options */
|
/* XORRISO options */
|
||||||
int allow_graft_points;
|
int allow_graft_points;
|
||||||
|
|
||||||
|
int allow_restore; /* 0= disallowed, 1=allowed, 2=device files allowed */
|
||||||
|
int do_concat_split; /* 1= restore complete split file directories as
|
||||||
|
regular files
|
||||||
|
*/
|
||||||
|
int do_auto_chmod; /* 1= eventually temporarily open access permissions
|
||||||
|
of self-owned directories during restore
|
||||||
|
*/
|
||||||
|
|
||||||
int dialog;
|
int dialog;
|
||||||
|
|
||||||
|
|
||||||
@ -156,6 +195,14 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
|
|
||||||
int temp_mem_limit;
|
int temp_mem_limit;
|
||||||
|
|
||||||
|
struct ExclusionS *disk_exclusions;
|
||||||
|
int disk_excl_mode; /* bit0= on (else off)
|
||||||
|
bit1= parameter too (else rekursion only)
|
||||||
|
bit2= whole subtree banned (else only exact path)
|
||||||
|
bit3= when comparing ignore excluded files rather
|
||||||
|
than to treat them as truely missing on disk
|
||||||
|
*/
|
||||||
|
|
||||||
int use_stdin; /* use raw stdin even if readline support is compiled */
|
int use_stdin; /* use raw stdin even if readline support is compiled */
|
||||||
int result_page_length;
|
int result_page_length;
|
||||||
int result_page_width;
|
int result_page_width;
|
||||||
@ -172,6 +219,12 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int problem_status; /* Severity rank number. 0= no abort condition present */
|
int problem_status; /* Severity rank number. 0= no abort condition present */
|
||||||
char problem_status_text[20];
|
char problem_status_text[20];
|
||||||
|
|
||||||
|
char errfile_log[SfileadrL]; /* for -errfile_log */
|
||||||
|
int errfile_mode; /* bit0= marked */
|
||||||
|
FILE *errfile_fp;
|
||||||
|
|
||||||
|
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
|
||||||
|
|
||||||
char return_with_text[20];
|
char return_with_text[20];
|
||||||
int return_with_severity;
|
int return_with_severity;
|
||||||
int return_with_value;
|
int return_with_value;
|
||||||
@ -209,6 +262,13 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
/* 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;
|
||||||
|
|
||||||
|
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];
|
||||||
@ -322,6 +382,59 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
|
|||||||
off_t count, off_t todo, char *current_object,
|
off_t count, off_t todo, char *current_object,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||||
|
Set to NULL if calling this function from outside ISO world
|
||||||
|
@param flag bit0= update rather than compare
|
||||||
|
*/
|
||||||
|
int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||||
|
char *iso_path, char *iso_prefix, char *disk_prefix,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||||
|
Set to NULL if calling this function from outside ISO world
|
||||||
|
*/
|
||||||
|
int Xorriso_update_interpreter(struct XorrisO *xorriso, void *boss_iter,
|
||||||
|
int compare_result, char *disk_path,
|
||||||
|
char *iso_rr_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 Sfile_str(char target[SfileadrL], char *source, int flag);
|
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
||||||
|
|
||||||
double Sfile_microtime(int flag);
|
double Sfile_microtime(int flag);
|
||||||
@ -332,10 +445,40 @@ int Sfile_scale(double value, char *result, int siz, double thresh, int flag);
|
|||||||
|
|
||||||
int Sfile_destroy_argv(int *argc, char ***argv, int flag);
|
int Sfile_destroy_argv(int *argc, char ***argv, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
bit0= do not ignore trailing slash
|
||||||
|
bit1= do not ignore empty components (other than the empty root name)
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
|
||||||
int Sort_argv(int argc, char **argv, int flag);
|
int Sort_argv(int argc, char **argv, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= single letters */
|
||||||
|
char *Ftypetxt(mode_t st_mode, 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);
|
||||||
@ -388,6 +531,65 @@ int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
|
|||||||
|
|
||||||
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
|
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
|
||||||
|
|
||||||
|
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
struct SplitparT;
|
||||||
|
|
||||||
|
int Splitparts_new(struct SplitparT **o, int count, int flag);
|
||||||
|
|
||||||
|
int Splitparts_destroy(struct SplitparT **o, int count, int flag);
|
||||||
|
|
||||||
|
int Splitparts_set(struct SplitparT *o, int idx,
|
||||||
|
char *name, int partno, int total_parts,
|
||||||
|
off_t offset, off_t bytes, off_t total_bytes, int flag);
|
||||||
|
|
||||||
|
int Splitparts_get(struct SplitparT *o, int idx, char **name, int *partno,
|
||||||
|
int *total_parts, off_t *offset, off_t *bytes,
|
||||||
|
off_t *total_bytes, int flag);
|
||||||
|
|
||||||
|
int Splitpart__parse(char *name, int *partno, int *total_parts,
|
||||||
|
off_t *offset, off_t *bytes, off_t *total_bytes, int flag);
|
||||||
|
|
||||||
|
int Splitpart__compose(char *adr, int partno, int total_parts,
|
||||||
|
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 */
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.02.14.182351"
|
#define Xorriso_timestamP "2008.06.22.090001"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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 0
|
#define xorriso_libisoburn_req_minor 2
|
||||||
#define xorriso_libisoburn_req_micro 1
|
#define xorriso_libisoburn_req_micro 0
|
||||||
|
|
||||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -40,11 +40,15 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag);
|
|||||||
|
|
||||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag);
|
int Xorriso_write_session(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* @param flag bit0=graft in as empty directory, not as copy from disk
|
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||||
@return <=0 = error , 1 = added simple node , 2 = added directory
|
Set to NULL if calling this function from outside ISO world
|
||||||
|
@param flag bit0= mkdir: graft in as empty directory, not as copy from disk
|
||||||
|
bit1= do not report added files
|
||||||
|
@return <=0 = error , 1 = added simple node , 2 = added directory
|
||||||
*/
|
*/
|
||||||
int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
|
int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||||
int flag);
|
char *disk_path, char *img_path,
|
||||||
|
off_t offset, off_t cut_size, int flag);
|
||||||
|
|
||||||
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
||||||
|
|
||||||
@ -58,10 +62,29 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
|
|||||||
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
||||||
int *media_space, int *free_space, int flag);
|
int *media_space, int *free_space, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0=fast , bit1=deformat
|
||||||
|
@return 0=failure, did not touch media , -1=failure, altered media
|
||||||
|
1=success, altered media , 2=success, did not touch media
|
||||||
|
*/
|
||||||
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= try to achieve faster formatting
|
||||||
|
@return 0=failure, did not touch media , -1=failure, altered media
|
||||||
|
1=success, altered media , 2=success, did not touch media
|
||||||
|
*/
|
||||||
int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @return <=0 error, 1 success
|
||||||
|
*/
|
||||||
|
int Xorriso_list_formats(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit2= formatting rather than blanking
|
||||||
|
@return 0=failure, did not touch media , -1=failure, altered media
|
||||||
|
1=success, altered media , 2=success, did not touch media
|
||||||
|
*/
|
||||||
|
int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* @param boss_iter Opaque internal handle. Use NULL outside xorrisoburn.c :
|
/* @param boss_iter Opaque internal handle. Use NULL outside xorrisoburn.c :
|
||||||
If not NULL then this is an iterator suitable for
|
If not NULL then this is an iterator suitable for
|
||||||
iso_dir_iter_remove() which is then to be used instead
|
iso_dir_iter_remove() which is then to be used instead
|
||||||
@ -75,7 +98,7 @@ int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
|||||||
2 = removed directory or tree
|
2 = removed directory or tree
|
||||||
3 = did not remove on user revocation
|
3 = did not remove on user revocation
|
||||||
*/
|
*/
|
||||||
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter,
|
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
|
||||||
char *path, int flag);
|
char *path, int flag);
|
||||||
|
|
||||||
/* @param flag bit0= long format
|
/* @param flag bit0= long format
|
||||||
@ -91,6 +114,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
|
|||||||
@param flag bit0= long format
|
@param flag bit0= long format
|
||||||
bit1= only check for directory existence
|
bit1= only check for directory existence
|
||||||
bit2= do not apply search pattern but accept any file
|
bit2= do not apply search pattern but accept any file
|
||||||
|
bit3= just count nodes and return number
|
||||||
*/
|
*/
|
||||||
int Xorriso_ls(struct XorrisO *xorriso, int flag);
|
int Xorriso_ls(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -107,7 +131,11 @@ int Xorriso_ls(struct XorrisO *xorriso, int flag);
|
|||||||
int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd,
|
int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd,
|
||||||
char *img_path, char eff_path[], int flag);
|
char *img_path, char eff_path[], int flag);
|
||||||
|
|
||||||
int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest,int flag);
|
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||||
|
Set to NULL if calling this function from outside ISO world
|
||||||
|
*/
|
||||||
|
int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
|
||||||
|
char *origin, char *dest, int flag);
|
||||||
|
|
||||||
/* @param flag bit0= do not produce info message on success
|
/* @param flag bit0= do not produce info message on success
|
||||||
@return 1=success, 0=was already directory, -1=was other type, -2=bad path
|
@return 1=success, 0=was already directory, -1=was other type, -2=bad path
|
||||||
@ -132,7 +160,11 @@ int Xorriso_set_gid(struct XorrisO *xorriso, char *in_path, gid_t gid,
|
|||||||
int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
|
int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= recursion
|
||||||
|
bit1= do not count deleted files with rm and rm_r
|
||||||
|
*/
|
||||||
int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
||||||
|
void *boss_iter, off_t boss_mem,
|
||||||
void *dir_node_generic, char *dir_path,
|
void *dir_node_generic, char *dir_path,
|
||||||
struct stat *dir_stbuf, int depth, int flag);
|
struct stat *dir_stbuf, int depth, int flag);
|
||||||
|
|
||||||
@ -145,9 +177,87 @@ int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag);
|
|||||||
|
|
||||||
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag);
|
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* @return 0= stbuf content is valid , -1 = path not found */
|
/* @return 0= stbuf content is valid ,
|
||||||
|
-1 = path not found , -2 = severe error occured
|
||||||
|
*/
|
||||||
int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= -inq
|
||||||
|
bit1= -checkdrive
|
||||||
|
*/
|
||||||
|
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit1= outdev rather than indev
|
||||||
|
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
||||||
|
*/
|
||||||
|
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
||||||
|
char profile_name[80], int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= do not mark image as changed */
|
||||||
|
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,
|
||||||
|
void *node_pt, void **stream, int flag);
|
||||||
|
|
||||||
|
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
|
||||||
|
int count, int flag);
|
||||||
|
|
||||||
|
int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag);
|
||||||
|
|
||||||
|
/* @param bit0= copy link target properties rather than link properties
|
||||||
|
*/
|
||||||
|
int Xorriso_copy_properties(struct XorrisO *xorriso,
|
||||||
|
char *disk_path, char *img_path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
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;
|
||||||
|
|
||||||
|
/* @param flag bit0= in_node is valid, do not resolve iso_adr
|
||||||
|
*/
|
||||||
|
int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
|
||||||
|
void *in_node,
|
||||||
|
struct SplitparT **parts, int *count,
|
||||||
|
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);
|
||||||
|
|
||||||
#endif /* Xorrisoburn_includeD */
|
#endif /* Xorrisoburn_includeD */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user