Compare commits

..

4 Commits

Author SHA1 Message Date
16c4e3b5dc And libisoburn 0.1.4 is out soon! 2008-04-30 05:41:57 +00:00
763f8a8fcb Documented changes and release timestamp 2008-04-28 11:53:45 +00:00
c09d5b8a2c Version leap to 0.1.4 2008-04-28 11:50:37 +00:00
08507c3faf Done branch 2008-04-28 10:24:49 +00:00
21 changed files with 1288 additions and 6808 deletions

23
README
View File

@ -4,7 +4,6 @@
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org.
http://files.libburnia-project.org/releases/libisoburn-0.2.0.pl00.tar.gz
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2.
------------------------------------------------------------------------------
@ -26,18 +25,18 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
- libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
Dynamic library and compile time header requirements for libisoburn-0.1.4 :
- libburn.so.4 , version libburn-0.4.4 or higher
- libisofs.so.6 , version libisofs-0.6.4 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.
Obtain libisoburn-0.2.0.pl00.tar.gz, take it to a directory of your choice
Obtain libisoburn-0.1.4.pl00.tar.gz, take it to a directory of your choice
and do:
tar xzf libisoburn-0.2.0.pl00.tar.gz
cd libisoburn-0.2.0
tar xzf libisoburn-0.1.4.pl00.tar.gz
cd libisoburn-0.1.4
Within that directory execute:
@ -59,10 +58,10 @@ as well as
libisoburn includes a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and
users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation.
The libisoburn installation described above produces a dynamically linked
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
users. Its file xorriso/README describes a standlone tarball as first
preference for xorriso installation.
The installation described above produces a dynamically linked xorriso binary
as described in chapter "libisoburn" at the end of that text.
After installation documentation is available via
man xorriso
@ -104,7 +103,7 @@ on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
This program is not installed systemwide but stays in the installation
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:
The path of the file to compare, the prefix1 to be cut off from path
The path of the first file to compare, the prefix1 to be cut off from path
and the prefix2 which gets prepended afterwards to obtain the path of the
second file to compare.
As further argument there can be -no_ctime which suppresses the comparison

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.2.0], [http://libburnia-project.org])
AC_INIT([libisoburn], [0.1.4], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -13,15 +13,15 @@ dnl /ISOBURN_.*_VERSION
dnl /LT_.*
dnl /LIB.*_REQUIRED
dnl The API version codes are defined in libisoburn/libisoburn.h
dnl The API version codes are now defined in libisoburn/libisoburn.h
dnl #define isoburn_header_version_*
dnl configure.ac only rules the libtool revision numbering about
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=2
ISOBURN_MICRO_VERSION=0
ISOBURN_MINOR_VERSION=1
ISOBURN_MICRO_VERSION=4
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
AC_SUBST(ISOBURN_MAJOR_VERSION)
@ -33,15 +33,15 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y
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 ts A80428
dnl This is the release version 0.1.4 = libisoburn.so.1.3.0
dnl ###This is the development version after stable release libisoburn.so.1.3.0
dnl ### LT_CURRENT++, LT_AGE++ havae not happened yet.
dnl
dnl SONAME = 10 - 9 = 1 . Library name = libburn.so.1.9.0
dnl SONAME = 4 - 3 = 1 . Library name = libburn.so.1.3.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=10
LT_AGE=9
LT_CURRENT=4
LT_AGE=3
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -99,8 +99,8 @@ AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions
LIBBURN_REQUIRED=0.4.8
LIBISOFS_REQUIRED=0.6.6
LIBBURN_REQUIRED=0.4.4
LIBISOFS_REQUIRED=0.6.4
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,7 @@
/*
data source for libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
*/
#include <stdlib.h>
@ -28,24 +27,24 @@
#include "isoburn.h"
/* Cached reading of image tree data */
/* Multi tile: 32 * 64 kB */
/* The size of a single tile.
Powers of 2 only ! Less than 16 makes not much sense.
*/
/* Powers of 2 only ! Less than 16 makes not much sense. */
#define Libisoburn_tile_blockS 32
/* The number of tiles in the cache
/* Undef to get to older single tile version
*/
#define Libisoburn_cache_tileS 32
/* Debugging only: This reports cache loads on stderr.
#define Libisoburn_read_cache_reporT 1
*/
/* Cached reading of image tree data */
#ifdef Libisoburn_cache_tileS
/* Multi tile: 32 * 64 kB */
struct isoburn_cache_tile {
char cache_data[Libisoburn_tile_blockS * 2048];
uint32_t cache_lba;
@ -77,11 +76,7 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
struct isoburn_cached_drive *icd;
if(src == NULL || buffer == NULL)
/* 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;
return -1;
icd = (struct isoburn_cached_drive *) src->data;
d = (struct burn_drive*) icd->drive;
@ -133,24 +128,9 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
if (ret > 0)
return 1;
tiles[oldest].last_error_lba = lba;
/* It is not required by the specs of libisofs but implicitely assumed
...
But it is not possible to ignore FAILURE.
libisofs insists in original error codes, i.e. libisoburn cannot
change severity FAILURE associated with ISO_FILE_READ_ERROR.
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
and not for image reading.
This is quite wrong, although the error message text is unclear
enough to make it appear plausible.
*/
ret= ISO_FILE_CANT_WRITE;
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;
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
return -1;
}
#ifdef Libisoburn_read_cache_reporT
@ -235,3 +215,139 @@ static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
}
#else /* Libisoburn_cache_tileS */
/* Single tile 128 kB */
struct isoburn_cached_drive {
struct burn_drive *drive;
char cache_data[Libisoburn_tile_blockS * 2048];
uint32_t cache_lba;
uint32_t last_error_lba;
uint32_t last_aligned_error_lba;
int cache_hits;
};
/* Debugging only: This reports cache loads on stderr.
#define Libisoburn_read_cache_reporT 1
*/
int
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
{
int ret;
struct burn_drive *d;
off_t count;
uint32_t aligned_lba;
char msg[80];
struct isoburn_cached_drive *icd;
if(src == NULL || buffer == NULL)
return -1;
icd = (struct isoburn_cached_drive *) src->data;
d = (struct burn_drive*) icd->drive;
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
if(aligned_lba == icd->cache_lba && icd->cache_lba != 0xffffffff) {
(icd->cache_hits)++;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
icd->cache_lba= 0xffffffff; /* invalidate cache */
if(icd->last_aligned_error_lba == aligned_lba) {
ret = 0;
} else {
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
(char *) icd->cache_data,
Libisoburn_tile_blockS * 2048, &count, 0);
}
if (ret <= 0 ) {
icd->last_aligned_error_lba = aligned_lba;
/* Read-ahead failure ? Try to read 2048 directly. */
if(icd->last_error_lba == lba)
ret = 0;
else
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
2048, &count, 0);
if (ret > 0)
return 1;
icd->last_error_lba = lba;
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
return -1;
}
#ifdef Libisoburn_read_cache_reporT
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
icd->cache_hits, aligned_lba, (int) count);
#endif
icd->cache_lba= aligned_lba;
icd->cache_hits= 1;
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
count= 2048;
return 1;
}
static int
ds_open(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static int
ds_close(IsoDataSource *src)
{
/* nothing to do, device is always grabbed */
return 1;
}
static void
ds_free_data(IsoDataSource *src)
{
/* nothing to do */;
if(src->data != NULL)
free(src->data);
src->data= NULL;
}
IsoDataSource *
isoburn_data_source_new(struct burn_drive *d)
{
IsoDataSource *ret;
struct isoburn_cached_drive *icd= NULL;
if (d==NULL)
return NULL;
ret = malloc(sizeof(IsoDataSource));
icd = calloc(1,sizeof(struct isoburn_cached_drive));
if (ret == NULL || icd == NULL)
return NULL;
ret->refcount = 1;
ret->read_block = ds_read_block;
ret->open = ds_open;
ret->close = ds_close;
ret->free_data = ds_free_data;
ret->data = icd;
icd->drive = d;
icd->cache_lba = 0xffffffff;
icd->cache_hits = 0;
icd->last_error_lba = 0xffffffff;
icd->last_aligned_error_lba = 0xffffffff;
return ret;
}
#endif /* ! Libisoburn_cache_tileS */

View File

@ -6,8 +6,8 @@
/*
Class core of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net>
*/
/* ( derived from stub generated by CgeN on Sat, 01 Sep 2007 12:04:36 GMT ) */
@ -37,61 +37,10 @@
#include "isoburn.h"
/* Default values for application provided msgs_submit methods.
To be attached to newly aquired drives.
/* No more: version numbers out of configure.ac
major.minor.micro now comes from libisoburn.h
#include "../version.h"
*/
int (*libisoburn_default_msgs_submit)
(void *handle, int error_code, char msg_text[],
int os_errno, char severity[], int flag)= NULL;
void *libisoburn_default_msgs_submit_handle= NULL;
int libisoburn_default_msgs_submit_flag= 0;
/* ----------------------- isoburn_toc_entry ---------------------- */
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 ----------------------- */
@ -110,31 +59,31 @@ int isoburn_new(struct isoburn **objpt, int flag)
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", 0);
burn_msgs_submit(0x00060000,
"Cannot allocate memory for isoburn control object",
0, "FATAL", NULL);
return(-1);
}
o->drive= NULL;
o->emulation_mode= 0;
o->fabricated_msc1= -1;
o->zero_nwa= Libisoburn_overwriteable_starT;
o->min_start_byte= o->zero_nwa * 2048;
o->nwa= o->zero_nwa;
o->min_start_byte= 0;
o->nwa= 0;
o->truncate= 0;
#ifdef Libisoburn_no_fifO
o->iso_source= NULL;
o->fabricated_disc_status= BURN_DISC_UNREADY;
o->toc= NULL;
#else
o->fifo= NULL;
#endif
o->wrote_well= -1;
for(i=0;i<Libisoburn_target_head_sizE;i++)
o->fabricated_disc_status= BURN_DISC_UNREADY;
for(i=0;i<65536;i++)
o->target_iso_head[i]= 0;
o->image= NULL;
o->read_pacifier= NULL;
o->read_pacifier_handle= NULL;
o->msgs_submit= NULL;
o->msgs_submit_handle= NULL;
o->msgs_submit_flag= 0;
o->prev= NULL;
o->next= NULL;
ret= iso_image_new("ISOIMAGE", &o->image);
@ -171,10 +120,15 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
if(o->image!=NULL)
iso_image_unref(o->image);
if(o->toc!=NULL)
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
#ifdef Libisoburn_no_fifO
if(o->iso_source!=NULL)
burn_source_free(o->iso_source);
#else
if(o->fifo!=NULL)
burn_source_free(o->fifo);
#endif /* ! Libisoburn_no_fifO */
free((char *) o);
*objpt= NULL;
@ -308,65 +262,28 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
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
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
struct burn_disc **disc,
int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts, int new_img)
{
struct burn_source *wsrc;
struct burn_session *session;
struct burn_track *track;
struct isoburn *in_o, *out_o;
struct isoburn *o;
IsoWriteOpts *wopts= NULL;
enum burn_disc_status state;
int ret, fifo_chunks, lba, nwa;
int ret, fifo_chunks;
ret= isoburn_find_emulator(&in_o, in_d, 0);
if(ret<0 || in_o==NULL)
ret= isoburn_find_emulator(&o, d, 0);
if(ret<0 || o==NULL)
{ret= -1; goto ex;}
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;
o->wrote_well= 0; /* early end will be registered as failure */
state = isoburn_disc_get_status(in_d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
state != BURN_DISC_FULL) {
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
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);
state = isoburn_disc_get_status(d);
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
&& (state != BURN_DISC_FULL || ! new_img)) {
/* unsuitable status */
burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
{ret= -2; goto ex;}
}
@ -403,28 +320,36 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_default_uid(wopts, opts->uid);
iso_write_opts_set_default_gid(wopts, opts->gid);
iso_write_opts_set_output_charset(wopts, opts->output_charset);
#ifdef Libisoburn_no_fifO
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
#endif /* Libisoburn_no_fifO */
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 (new_img) {
iso_write_opts_set_ms_block(wopts, 0);
opts->effective_lba= 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);
opts->effective_lba= nwa;
iso_write_opts_set_appendable(wopts, 1);
iso_write_opts_set_overwrite_buf(wopts, o->target_iso_head);
}
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);
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
if (ret < 0) {
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
{ret= -1; goto ex;}
@ -432,20 +357,35 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
/* TODO check return values for failure. propertly clean-up on error */
out_o->iso_source= wsrc;
#ifdef Libisoburn_no_fifO
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();
session = burn_session_create();
burn_disc_add_session(*disc, session, BURN_POS_END);
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);
/* give up local references */
burn_track_free(track);
burn_session_free(session);
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */
o->wrote_well= -1; /* neutral */
ret= 1;
ex:
if(wopts!=NULL)
@ -453,23 +393,39 @@ ex:
return ret;
}
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts)
{
return isoburn_prepare_disc_aux(d, d, disc, opts, 0);
return isoburn_prepare_disc_aux(d, disc, opts, 0);
}
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
struct isoburn_imgen_opts *opts,
struct burn_drive *out_drive)
{
int ret;
struct isoburn *in_o, *out_o;
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 1);
ret= isoburn_prepare_disc_aux(d, disc, opts, 1);
if (ret<=0)
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;
}
@ -559,8 +515,8 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for read options", 0, "FATAL", 0);
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
0, "FATAL", NULL);
return(-1);
}
o->norock= 0;
@ -696,9 +652,9 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", 0);
burn_msgs_submit(0x00060000,
"Cannot allocate memory for image generation options",
0, "FATAL", NULL);
return(-1);
}
o->level= 2;

View File

@ -10,33 +10,13 @@
#define Isoburn_includeD
/* <<< transition macro */
#define Libisoburn_no_fifO 1
/* for uint8_t */
#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 {
@ -56,15 +36,6 @@ struct isoburn {
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) */
off_t min_start_byte;
@ -80,10 +51,11 @@ struct isoburn {
*/
enum burn_disc_status fabricated_disc_status;
/* Eventual emulated table of content read from the chain of ISO headers
on overwriteable media.
*/
struct isoburn_toc_entry *toc;
#ifndef Libisoburn_no_fifO
/* The fifo which is installed between track and libisofs burn_source
*/
struct burn_source *fifo;
#endif /* ! Libisoburn_no_fifO */
/* Indicator wether the most recent burn run worked :
-1 = undetermined, ask libburn , 0 = failure , 1 = success
@ -94,15 +66,17 @@ struct isoburn {
/* Buffered ISO head from media (should that become part of
ecma119_read_opts ?) */
uint8_t target_iso_head[Libisoburn_target_head_sizE];
uint8_t target_iso_head[65536];
/* Libisofs image context */
IsoImage *image;
#ifdef Libisoburn_no_fifO
/* The burn source which transfers data from libisofs to libburn.
It has its own fifo.
*/
struct burn_source *iso_source;
#endif /* Libisoburn_no_fifO */
/* For iso_tree_set_report_callback() */
int (*read_pacifier)(IsoImage*, IsoFileSource*);
@ -110,12 +84,6 @@ struct isoburn {
/* For iso_image_attach_data() */
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 */
};
@ -174,11 +142,6 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
int isoburn_find_emulator(struct isoburn **pt,
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
be rounded up to the alignment necessary for the media. The aligned
@ -365,71 +328,5 @@ struct isoburn_imgen_opts {
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 */

View File

@ -6,13 +6,12 @@
/*
libisofs related functions of libisoburn.
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net>
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#ifndef Xorriso_standalonE
@ -27,6 +26,7 @@
#endif /* Xorriso_standalonE */
#include "isoburn.h"
#include "libisoburn.h"
@ -112,29 +112,29 @@ int isoburn_read_image(struct burn_drive *d,
struct isoburn_read_opts *read_opts,
IsoImage **image)
{
int ret, int_num, dummy;
int ret, int_num;
IsoReadOpts *ropts= NULL;
IsoReadImageFeatures *features= NULL;
uint32_t ms_block;
char msg[160];
enum burn_disc_status status= BURN_DISC_BLANK;
IsoDataSource *ds= 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) {
ret = isoburn_find_emulator(&o, d, 0);
if (ret < 0 || o == NULL)
return 0;
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) {
create_blank_image:;
/*
* Blank disc, we create a new image without files.
*/
@ -142,9 +142,9 @@ create_blank_image:;
if (d == NULL) {
/* New empty image without relation to a drive */
if (image==NULL) {
isoburn_msgs_submit(o, 0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", 0);
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: image==NULL",
0, "FATAL", NULL);
return -1;
}
/* create a new image */
@ -170,9 +170,9 @@ create_blank_image:;
}
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
isoburn_msgs_submit(o, 0x00060000,
burn_msgs_submit(0x00060000,
"Program error: isoburn_read_image: incorrect disc status",
0, "FATAL", 0);
0, "FATAL", NULL);
return -4;
}
@ -182,12 +182,6 @@ create_blank_image:;
if (ret <= 0)
return -2;
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 */
ret = iso_read_opts_new(&ropts, 0);
@ -206,11 +200,6 @@ create_blank_image:;
iso_read_opts_set_default_uid(ropts, read_opts->uid);
iso_read_opts_set_default_gid(ropts, read_opts->gid);
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);
iso_image_attach_data(o->image, o->read_pacifier_handle,
isoburn_idle_free_function);
@ -236,6 +225,15 @@ create_blank_image:;
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
read_opts->hasElTorito = iso_read_image_features_has_eltorito(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);
return 1;
}
@ -248,15 +246,15 @@ int isoburn_attach_image(struct burn_drive *d, IsoImage *image)
int ret;
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);
if (ret < 0 || o == NULL)
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)
iso_image_unref(o->image);
o->image = image;
@ -278,13 +276,11 @@ int isoburn_activate_session(struct burn_drive *drive)
if (o->emulation_mode != 1)
return 1; /* don't need to activate session */
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
o->zero_nwa > 0)))
if (o->fabricated_disc_status != BURN_DISC_APPENDABLE)
return 1;
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
Libisoburn_target_head_sizE, 1);
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
32*2048, 1);
return ret;
}
@ -304,9 +300,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
struct ecma119_pri_vol_desc *pvm;
if(o==NULL) {
isoburn_msgs_submit(NULL, 0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", 0);
burn_msgs_submit(0x00060000,
"Program error: isoburn_start_emulation: o==NULL",
0, "FATAL", NULL);
return -1;
}
@ -315,7 +311,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
/* we can assume 0 as start block for image */
/* 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,
(off_t) Libisoburn_target_head_sizE, &data_count, 2);
sizeof(o->target_iso_head), &data_count, 2);
/* an error means an empty disc */
if (ret <= 0) {
@ -325,7 +321,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
overwritten without extra check. */
i = Libisoburn_target_head_sizE;
i = sizeof(o->target_iso_head);
while (i && !o->target_iso_head[i-1])
--i;
@ -355,7 +351,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
/* empty image */
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
isoburn_set_start_byte(o, (off_t) 0, 0);
o->fabricated_disc_status= BURN_DISC_BLANK;
} else {
/* treat any disc in an unknown format as full */

View File

@ -188,7 +188,7 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 6
#define isoburn_libisofs_req_micro 4
/** The minimum version of libburn to be used with this version of libisoburn
at compile time.
@ -196,7 +196,7 @@ void isoburn_version(int *major, int *minor, int *micro);
*/
#define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 4
#define isoburn_libburn_req_micro 8
#define isoburn_libburn_req_micro 4
/** The minimum version of libisofs to be used with this version of libisoburn
@ -231,8 +231,8 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
@since 0.1.0
*/
#define isoburn_header_version_major 0
#define isoburn_header_version_minor 2
#define isoburn_header_version_micro 0
#define isoburn_header_version_minor 1
#define isoburn_header_version_micro 4
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.
@ -298,24 +298,6 @@ and would leave out the ugly compile time traps.
*/
/** Announce to the library an application provided method for immediate
delivery of messages. It is used when no drive is affected directly or
if the drive has no own msgs_submit() method attached by
isoburn_drive_set_msgs_submit.
If no method is preset or if the method is set to NULL then libisoburn
delivers its messages through the message queue of libburn.
@param msgs_submit The function call which implements the method
@param submit_handle Handle to be used as first argument of msgs_submit
@param submit_flag Flag to be used as last argument of msgs_submit
@param flag Unused yet, submit 0
@since 0.2.0
*/
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
char msg_text[], int os_errno,
char severity[], int flag),
void *submit_handle, int submit_flag, int flag);
/** Aquire a target drive by its filesystem path resp. libburn persistent
address.
Wrapper for: burn_drive_scan_and_grab()
@ -348,15 +330,12 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
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
a previous call of burn_drive_scan().
Wrapper for: burn_drive_grab()
@ -368,25 +347,6 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
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_*
with multi-session media. Emulated states with random access media are
BURN_DISC_BLANK and BURN_DISC_APPENDABLE.
@ -421,160 +381,6 @@ int isoburn_disc_erasable(struct burn_drive *d);
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);
/* ----------------------------------------------------------------------- */
/*

View File

@ -4,7 +4,7 @@
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.2.0.pl00.tar.gz
http://scdbackup.sourceforge.net/xorriso-0.1.4.pl00.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -14,7 +14,6 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
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.
@ -36,10 +35,10 @@ The tarball contains anything that is needed except libc and libpthread.
libreadline and the readline-dev headers will make dialog mode more convenient,
but are not mandatory.
Obtain xorriso-0.2.0.pl00.tar.gz, take it to a directory of your choice and do:
Obtain xorriso-0.1.4.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.2.0.pl00.tar.gz
cd xorriso-0.2.0
tar xzf xorriso-0.1.4.pl00.tar.gz
cd xorriso-0.1.4
Within that directory execute:
@ -161,9 +160,9 @@ and a matching dynamically linked xorriso binary.
This binary is leaner but depends on properly installed libraries of suitable
revision.
Dynamic library and compile time header requirements for libisoburn-0.2.0 :
- libburn.so.4 , version libburn-0.4.8 or higher
- libisofs.so.6 , version libisofs-0.6.6 or higher
Dynamic library and compile time header requirements for libisoburn-0.1.4 :
- libburn.so.4 , version libburn-0.4.4 or higher
- libisofs.so.6 , version libisofs-0.6.4 or higher
libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level.

View File

@ -2247,7 +2247,7 @@ Updated libisofs version number in xorriso-standalone
------------------------------------ cycle - xorriso-0.1.3 - 2008.04.28.082539
* Now depending on libisofs-0.6.4
2008.04.28.120001 [branch 1711]
2008.04.28.120001 [branch ]
configure.ac
README
libisoburn/libisoburn.h (isoburn_header_version_*)
@ -2260,10 +2260,11 @@ xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.4
28 Apr 2008 [branch 1712]
28 Apr 2008 [branch ]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.1.4 - 2008.04.28.120001
* Bug fix: -as mkisofs -no-pad was misspelled -nopad
* Bug fix: Implicite directory attribute copying with -cut_out was wrong
@ -2273,714 +2274,7 @@ Documented changes and release timestamp
* New option -session_log
* Dynamically linkable with release version 0.6.4 of libisofs
2008.04.28.122244 [1713]
configure.ac
README
libisoburn/libisoburn.h (isoburn_header_version_*)
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h (xorriso_libisoburn_req_*)
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.5
28 Apr 2008 [1714]
xorriso/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - xorriso-0.1.5 - 2008.04.28.122244
2008.05.01.124248 [1716]
libisoburn/isofs_wrap.c
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -error_behavior with a first occasion 'image_loading'
1 May 2008 [1717]
xorriso/convert_man_to_html.sh
Fine tuning of HTML man page appearance
1 May 2008 [1718]
xorriso/xorriso.1
Clarified "best_effort" behavior
2008.05.01.135421 [1719]
libisoburn/data_source.c
Adjusted ds_read_block() to inofficial libisofs expectations
2008.05.01.174110 [1720]
libisoburn/data_source.c
Adjusted ds_read_block() to inofficial libisofs expectations
2008.05.02.072505 [1721]
libisoburn/data_source.c
Adjusted ds_read_block() to inofficial libisofs expectations
2008.05.02.204942 [1722]
xorriso/xorriso_private.h
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Working towards exclusion of user defined absolute paths and leaf patterns
2008.05.03.151106 [1724]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Working towards exclusion of user defined absolute paths and leaf patterns
2008.05.03.223204 [1725]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Working towards exclusion of user defined absolute paths and leaf patterns
2008.05.04.133525 [1726]
xorriso/xorriso.c
xorriso/xorriso.1
New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m
4 May 2008 [1727]
xorriso/xorriso_eng.html
xorriso/changelog.txt
Mentioned new options
------------------------------------ cycle - xorriso-0.1.5 - 2008.05.04.133525
* New option -error_behavior with a first occasion 'image_loading'
* New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m
2008.05.05.210317 [1728]
xorriso/xorrisoburn.c
After formatting DVD-RW write 128 MB and close track to end Intermediate State
2008.05.06.084439 [1731]
xorriso/xorrisoburn.c
Calling isoburn_cancel_prepared_write() after failed isoburn_disc_write()
2008.05.06.144606 [1732]
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/isofs_wrap.c
libisoburn/burn_wrap.c
Experiment for TOC on overwriteables: Keep a target_head copy of session #1
2008.05.07.071427 [1737]
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/burn_wrap.c
libisoburn/isofs_wrap.c
Removed some outdated ifdef cases
2008.05.07.175508 [1738]
libisoburn/libisoburn.h
libisoburn/isoburn.h
libisoburn/burn_wrap.c
Reading emulated toc info from overwriteable media, new API isoburn_toc_*()
2008.05.07.175640 [1739]
xorriso/xorrisoburn.c
Making use of new isoburn_toc_* functions
2008.05.07.214343 [1740]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
New API function isoburn_read_iso_head()
2008.05.07.214442 [1741]
xorriso/xorrisoburn.c
New format with -toc is more concise and shows volume id
2008.05.08.141054 [1742]
libisoburn/libisoburn.h
libisoburn/isoburn.h
libisoburn/burn_wrap.c
Try to read header chain from alleged -ROM media (e.g. DVD+RW in -ROM drive)
2008.05.08.141920 [1743]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New TOC layout with volume id and sbsector=, new option -rom_toc_scan
8 May 2008 [1744]
xorriso/xorriso_eng.html
Mentioned new features
------------------------------------ cycle - xorriso-0.1.5 - 2008.05.08.141920
* Emulated TOC on overwriteable media
* New TOC layout with volume id and sbsector=
* New option -rom_toc_scan
2008.05.08.185350 [1745]
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/burn_wrap.c
Adjusted reply of isoburn_disc_get_msc1() to eventual -rom_toc_scan result
8 May 2008 [1746]
xorriso/xorriso.1
Updated man page examples
8 May 2008 [1747]
xorriso/xorriso.1
Updated man page examples
------------------------------------ cycle - xorriso-0.1.5 - 2008.05.08.205551
9 May 2008 [1751]
xorriso/xorriso_eng.html
Updated details in web page
2008.05.09.205517 [1752]
libisoburn/isofs_wrap.c
Trying to better handle non ISO images on -indev
10 May 2008 [1761]
xorriso/configure_ac.txt
Adapted xorriso standalone production to new libburn cycle 0.4.7
10 May 2008 [1762]
xorriso/xorriso.1
xorriso/xorriso_eng.html
Minor change in -update_r example
2008.05.10.194336 [1763]
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.c
Better behavior of update_r with no image present
2008.05.12.080812 [1765]
configure.ac
libisoburn/libisoburn.h
Switched requirements to libburn-0.4.6
2008.05.12.081331 [1766]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
New API call isoburn_set_msc1()
2008.05.12.082733 [1767]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New option -load session|track|sbsector|volid
------------------------------------ cycle - xorriso-0.1.5 - 2008.05.12.082733
* New option -load session|track|sbsector|volid
* Now depending on libburn-0.4.6
2008.05.12.193341 [1768]
libisoburn/burn_wrap.c
Reacted on harmless compiler warning
2008.05.12.193642 [1769]
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New -blank and -format modes as_needed
2008.05.13.115901 [1770]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New option -list_formats
2008.05.13.135251 [1771]
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/isofs_wrap.c
libisoburn/burn_wrap.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Corrected strange behavior with non-ISO images on overwriteable media
2008.05.13.153837 [1772]
xorriso/xorrisoburn.c
Prepared Xorriso_get_profile() for potential call without flag bit1
2008.05.13.180624 [1773]
xorriso/xorrisoburn.c
Handled -list_format with non MMC drives
2008.05.13.180912 [1774]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
Eat up leading dashes with command options, convert inner dashes to underscores
------------------------------------ cycle - xorriso-0.1.5 - 2008.05.13.180912
* New -blank and -format modes as_needed
* New option -list_formats
2008.05.14.114548 [1775]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New -format types by_index and fast_by_index
2008.05.14.173201 [1779]
configure.ac
libisoburn/libisoburn.h
Required libburn version is now 0.4.7 (because of DVD-RAM BD-RE bug fix)
2008.05.14.173430 [1780]
xorriso/xorrisoburn.c
Automatic fast format on attempt to write to unformatted DVD-RAM or BD-RE
2008.05.14.174846 [1781]
xorriso/xorriso_private.h
Uploaded forgotten enhancements
2008.05.15.092028 [1783]
xorriso/xorriso.c
Enabled a pacifier for compare_r
2008.05.15.150041 [1784]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New options -map and -map_single
2008.05.15.192118 [1785]
xorriso/xorriso.c
Bug fix: -update_r and others did not work properly with relative paths
------------------------------------ cycle - xorriso-0.1.5 -
* New options -map and -map_single
* Bug fix: -update_r and others did not work properly with relative paths
2008.05.17.162753 [1794]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Corrected ugly message with -update_r and root directory
2008.05.17.170001 [1796]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.6, requiring libburn-0.4.8 now
2008.05.18.070001 [1797]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Bug fix: -findi operated on nodes which ceased existence shortly before
18 May 2008 [1799]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.1.6 - 2008.05.18.070001
* New option -error_behavior with a first occasion 'image_loading'
* New options -not_paths, -not_leaf, -not_list, -not_mgt, -as mkisofs -m
* Emulated TOC on overwriteable media
* New TOC layout with volume id and sbsector=
* New option -rom_toc_scan
* New option -load session|track|sbsector|volid
* Now depending on libburn-0.4.8
* New -blank and -format modes as_needed
* New option -list_formats
* New options -map and -map_single
* Bug fix: -update_r and others did not work properly with relative paths
* Bug fix: -findi operated on nodes which ceased existence shortly before
2008.05.18.082208 [1798]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Bug fix: -findi operated on nodes which ceased existence shortly before
2008.05.18.084729 [1800]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
xorriso/changelog.txt
Version leap to 0.1.7, requiring libburn-0.4.8 now
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.18.084729
2008.05.20.075142 [1804]
xorriso/xorriso.c
Making Xorriso_prescan_args() safe against misunderstandings
2008.05.22.192618 [1808]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
First experiments of osirrox ISO-to-disk copying
2008.05.22.192737 [1809]
libisoburn/data_source.c
Removed outdated code branch
2008.05.22.210835 [1810]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New options -osirrox and -cpx
2008.05.24.092546 [1812]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Enabled osirrox of more file types, curbed with device files
2008.05.24.092853 [1813]
libisoburn/isoburn.c
Bug fix: modifying to overwriteable target yielded unmountable results
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.24.092853
* Bug fix: Modifying to overwriteable target yielded unmountable results
* New options -osirrox and -cpx
2008.05.24.170109 [1814]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Some polishing with -cpx
26 May 2008 [1815]
xorriso/configure_ac.txt
standalone version switch to libisofs-0.6.5
2008.05.26.181210 [1816]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Improved access permission restauration by osirrox
2008.05.27.201513 [1817]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New option -stream_recording
2008.05.31.174045 [1819]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
Implemented concatenation of split files during -cpx
------------------------------------ cycle - xorriso-0.1.7 - 2008.05.31.174045
* New option -stream_recording
2008.06.01.134322 [1820]
xorriso/xorrisoburn.c
Reacted on harmless compiler warning
2008.06.01.145038 [1821]
xorriso/configure_ac.txt
standalone version switch to libisofs-0.6.6
2008.06.01.145155 [1822]
configure.ac
libisoburn/libisoburn.h
Switched requirements to libisofs-0.6.6
------------------------------------ cycle - xorriso-0.1.7 - 2008.06.01.145155
* Bug fix: major,minor numbers of device files appeared as 0,1 in next session
2008.06.02.070301 [1824]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.8
2 Jun 2008 [1825]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.1.8 - 2008.06.02.070301
* Bug fix: Modifying to overwriteable target yielded unmountable results
* Bug fix: major,minor numbers of device files appeared as 0,1 in next session
* New option -stream_recording for full speed with DVD-RAM and BD-RE
* New options -osirrox and -cpx allow to extract single files from ISO image
2008.06.02.141334 [1826]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.1.9
2 Jun 2008 [1827]
xorriso/changelog.txt
Documented changes and release timestamp
2 Jun 2008 [1828]
xorriso/xorriso.1
Beautified documentation of -osirrox
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.02.141334
5 Jun 2008 [1834]
xorriso/convert_man_to_html.sh
Beautified HTML man page
2008.06.05.165023 [1835]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
2008.06.06.083432 [1839]
xorriso/xorriso.c
Bug fix: -chmod unintentionally performed o-x as first operation
2008.06.06.103735 [1840]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Fine tuning of directory attribute copying with -cp_rx
------------------------------------ cycle - xorriso-0.1.9 -
* New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
* Bug fix: -chmod unintentionally performed o-x as first operation
2008.06.09.134432 [1841]
xorriso/xorriso.h
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
Allowing to restore from image with pending changes
2008.06.09.165735 [1842]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Removed some outdated code parts
2008.06.10.094304 [1844]
libisoburn/isoburn.c
libisoburn/burn_wrap.c
Removed outdated code parts
2008.06.10.100231 [1845]
xorriso/xorrisoburn.c
Removed outdated code parts
2008.06.11.131607 [1846]
xorriso/xorrisoburn.c
xorriso/xorriso.1
Proper handling of restore overwrite situations with directories and softlinks
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.11.131607
2008.06.12.112644 [1847]
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Corrections about restoring of directories
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.12.112644
2008.06.13.151630 [1848]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
xorriso/xorriso.1
New option -paste_in
2008.06.14.104745 [1849]
xorriso/xorriso.c
xorriso/xorriso.1
xorriso/xorriso_eng.html
New options -extract and -extract_single
14 Jun 2008 [1850]
xorriso/convert_man_to_html.sh
Beautification of HTML man page
2008.06.14.140459 [1851]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
Correction about -extract / /
2008.06.14.184512 [1854]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
xorriso/convert_man_to_html.sh
Gave up the unusual parameter sequences of -extract and -paste_in
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.14.184512
* New option -paste_in to copy ISO files into parts of disk files
* New option -extract restores with arguments of -map or -update_r
2008.06.17.121524 [1857]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorriso.1
New options -map_l, -compare_l, -update_l, -extract_l
2008.06.17.133914 [1858]
xorriso/xorriso.c
Reacted on harmless compiler warning
2008.06.17.170622 [1859]
xorriso/xorriso.c
xorriso/xorrisoburn.c
Fixed a bug about -update_l
2008.06.18.132057 [1860]
libisoburn/isoburn.h
libisoburn/burn_wrap.c
Made -rom_toc_scan work on closed DVD-R in a DVD-ROM drive
2008.06.18.161512 [1861]
libisoburn/libisoburn.h
libisoburn/isoburn.h
libisoburn/isoburn.c
libisoburn/isofs_wrap.c
libisoburn/burn_wrap.c
libisoburn/data_source.c
New API functions isoburn_preset_msgs_submit(), isoburn_set_msgs_submit()
2008.06.18.161723 [1862]
xorriso/xorriso.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
Made use of isoburn_preset_msgs_submit()
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.18.161723
* New options -map_l, -compare_l, -update_l, -extract_l
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
2008.06.18.192913 [1863]
libisoburn/burn_wrap.c
Improved pacifier with -rom_toc_scan
2008.06.19.090436 [1864]
libisoburn/libisoburn.h
libisoburn/burn_wrap.c
xorriso/xorrisoburn.c
Renamed isoburn_*set_msgs_submit() and slightly changed meaning
2008.06.19.092458 [1865]
libisoburn/burn_wrap.c
Corrected wrong size unit MB to kB in toc scan pacifier text
2008.06.20.091647 [1866]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.c
xorriso/xorriso.1
New -osirrox option auto_chmod_on
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.20.091647
2008.06.20.164105 [1867]
xorriso/xorriso_private.h
xorriso/xorriso.c
xorriso/xorrisoburn.h
xorriso/xorrisoburn.c
Fixed several bugs with restore operations
2008.06.21.180701 [1870]
xorriso/xorriso.1
Corrected mistake in xorriso man page
------------------------------------ cycle - xorriso-0.1.9 - 2008.06.21.180701
2008.06.22.080000 [1872]
xorriso/xorriso.c
Removed duplicated help text snippet
22 Jun 2008 [1783]
configure.ac
README
libisoburn/libisoburn.h
xorriso/README
xorriso/xorriso_timestamp.h
xorriso/xorriso_private.h
xorriso/xorrisoburn.h
xorriso/xorriso_eng.html
xorriso/make_xorriso_standalone.sh
xorriso/configure_ac.txt
Version leap to 0.2.0
[]
xorriso/changelog.txt
Documented changes and release timestamp
---------------------------------- release - xorriso-0.2.0 - 2008.06.22.090001
* Bug fix: -chmod unintentionally performed o-x as first operation
* New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
* New option -extract restores with arguments of -map or -update_r
* New option -paste_in to copy ISO files into parts of disk files
* New options -map_l, -compare_l, -update_l, -extract_l
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
------------------------------------ cycle - xorriso-0.2.1 -
------------------------------------ cycle - xorriso-0.2.1 -
===============================================================================
TODO
@ -2988,26 +2282,36 @@ Documented changes and release timestamp
------------------------------------------------- bugs
- downgrade unreadable image from FAILURE to WARNING
------------------------------------------------- important
- pacifier for -compare_r : try read pacifier without newline
------------------------------------------------- development
??? Clarify handling of links in ISO and on disk during restore
- evaluate possibility of emulated session table on overwriteables
- exclusion of unwanted files and subtrees
- leaf
- branch
- option -map disk_path iso_rr_path for no-fuzz file mapping
- mkisofs,cdrecord multi session
- -restore
??? -compare_l -update_l /disk_path_start iso_rr_path_start path[s] --
??? backup area shaping with -yes -not for -compare_r and -update_r ?
- Make use of iso_tree_add_new_node() in Xorriso_tree_graft_node()
> Relative addressing and pattern matching :
iso_rr_pattern on
cd /u/FERTIG
lsd nonexist/..
- perform any long lasting operation in separate threads while
the main thread cares for user and message queues.
- Introduce an interrupt key for dialog
- watch read latency and evaluate read quality indicator
- regularly do valgrind check for memory leaks
- ??? http://scan.coverity.com/faq.html
@ -3026,41 +2330,13 @@ Documented changes and release timestamp
> Make transactional the tree deletions meant for replacing
- Introduce an interrupt key for dialog
------------------------------------------------- libisofs wishes
-------------------------------------------- jump to libburn 0.4.4
------ problem fixes :
- make use of burn_sev_to_text() in libisoburn and xorriso
- Error code for libisoburn data source read errors.
- #define ISO_ERR_PRIO(e) ((e & 0x00700000) << 8)
(rather than 0x00F00000, see ticket 135)
------ feature enhancements :
- Data files >= 4 GiB.
- API: iso_image_update_sizes() to be run immediately before -commit
- A repeatable shell command as origin ("disk_file")
of a regular file in the ISO image.
- API: iso_stream_get_dev_ino() to get the source side dev_t and ino_t
- API: iso_cout_stream_get_params(stream, &path, &offset, &size)
- Image checksum tag in the last data blocks of an image.
A data file entry should point to that block.
- creation of bootable images
------ extended attribute stunts: Not visible for mount but for libisofs
- file checksums
- ACLs
- man attr(5) extended attributes
- If iso_msgs_submit() : use it in isoburn_report_iso_error()
===============================================================================

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.2.0], [http://libburnia-project.org])
AC_INIT([xorriso], [0.1.4], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -9,14 +9,14 @@ AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4
BURN_MICRO_VERSION=9
BURN_MICRO_VERSION=5
AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=6
LIBISOFS_MICRO_VERSION=4
AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION)

View File

@ -70,9 +70,6 @@ then
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \
-e 's/<b>Scripting, dialog and/\&nbsp;<BR><b>Scripting, dialog and/' \
-e 's/^features:<\/b>/features:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Support for frontend/\&nbsp;<BR><b>Support for frontend/' \

View File

@ -25,7 +25,7 @@
current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.2.0
xorriso_rev=0.1.4
# For unstable uploads:
# xorriso_pl=""
# For stable releases:

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Jun, 21, 2008"
.TH XORRISO 1 "April, 3, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -15,7 +15,6 @@
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.nh
.SH NAME
xorriso - creates, loads, manipulates and writes ISO 9660 filesystem images
with Rock Ridge extensions.
@ -31,8 +30,6 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
.br
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
.PP
A special property of xorriso is that it needs neither an external ISO 9660
formatter program nor an external burn program for CD or DVD but rather
@ -56,8 +53,6 @@ filesystem objects.
Can write result as add-on session to appendable multi-session media,
to overwriteable media, to regular files, and to block devices.
.br
Can restore files from ISO image to disk filesystem (see osirrox).
.br
Scans for optical drives, blanks re-useable optical media.
.br
Reads its instructions from command line arguments, dialog, and batch files.
@ -149,13 +144,11 @@ There are two families of media in the MMC standard:
.br
\fBMulti-session\fR media are CD-R, CD-RW, DVD-R, DVD+R, DVD+R/DL, and
unformatted DVD-RW. These media provide a table of content which
describes their existing sessions. See option \fB-toc\fR.
describes their existing sessions.
.br
\fBOverwriteable\fR media are DVD-RAM, DVD+RW, BD-RE, and formatted DVD-RW.
\fBOverwriteable\fR media are DVD-RAM, DVD+RW, and formatted DVD-RW.
They allow random write access but do not provide information about their
session history. If they contain one or more ISO 9660 sessions and if the
first session was written by xorriso, then a table of content can
be emulated. Else only a single overall session will be visible.
session history.
.br
DVD-RW media can be formatted by -format full.
They can be made unformatted by -blank deformat.
@ -171,10 +164,10 @@ capabilities.
suitable for xorriso.
.br
Blank is the state of newly purchased optical media.
With used CD-RW and DVD-RW it can be achieved by action -blank "as_needed".
With used CD-RW and DVD-RW it can be achieved by action -blank "fast".
Overwriteable media are considered blank unless they contain an ISO image
suitable for xorriso. Action -blank "as_needed" can be used to invalidate the
image on overwriteable media, or to apply eventual mandatory formatting.
suitable for xorriso. Action -blank "fast" can be used to invalidate the image
on overwriteable media.
.br
\fBAppendable\fR media accept further sessions. Either they are MMC
multi-session media in appendable state, or they are overwriteable media
@ -186,15 +179,10 @@ Appendable is the state after writing a session with option -close off.
for xorriso.
.br
Closed is the state of DVD-ROM media and of multi-session media which were
written with option -close on. If the drive is read-only hardware then it will
written with option -close on. If the drive is incapable of writing it will
probably show any media as closed CD-ROM resp. DVD-ROM.
.br
Overwriteable media assume this state in such read-only drives or if they
contain unrecognizable data in the first 32 data blocks.
.br
\fBRead-only\fR drives may or may not show session histories of multi-session
media. Often only the first and the last session are visible. Sometimes
not even that. Option -rom_toc_scan might or might not help in such cases.
Overwriteable media assume this state only in such read-only drives.
.SS
.B Creating, Growing, Modifying:
.br
@ -224,8 +212,7 @@ Growing is achieved by option -dev.
The write method of \fBmodifying\fR produces compact filesystem
images with no outdated files or directory trees. Modifying can write its
images to target media which are completely unsuitable for multi-session
operations. E.g. DVD-RW which were treated with -blank deformat_quickest,
named pipes, character devices, sockets.
operations. E.g. fast blanked DVD-RW, named pipes, character devices, sockets.
On the other hand modified sessions cannot be written to appendable media
but to blank media only.
.br
@ -298,7 +285,7 @@ among the start arguments. Do not try to fool this ban via backdoor addresses
to stdout.
.br
If stdout is used as drive, then -use_readline is permanently disabled.
Use of backdoors will cause severe memory and/or tty corruption.
Use of backdoors will cause severe memory and/or terminal corruption.
.PP
Be aware that especially the superuser can write into any accessible file or
device by using its path with the "stdio:" prefix. Addresses without prefix
@ -404,9 +391,6 @@ All command words are shown with a leading dash although this dash is not
mandatory for the option to be recognized. There may be future emulation
modes, where dashes may become mandatory in order to distinguish options
from file addresses.
.br
Normally any number of leading dashes is ignored with command words and
inner dashes are interpreted as underscores.
.TP
.B Aquiring source and target drive:
.TP
@ -426,7 +410,7 @@ An empty address string "" gives up the current device
without aquiring a new one.
.TP
\fB\-indev\fR address
Set input drive and load an eventual ISO image. If the new input drive differs
Set input drive and load eventual ISO image. If the new input drive differs
from -outdev then switch from growing to modifying. The same rules and
restrictions apply as with -dev.
.TP
@ -446,48 +430,6 @@ apply. See above paragraph "Libburn drives".
An empty address string "" gives up the current output drive
without aquiring a new one. No writing is possible without an output drive.
.TP
\fB\-load\fR entity id
Load a particular (possibly outdated) ISO image from a -dev or -indev which
hosts more than one session. Usually all available sessions are shown with
option -toc.
.br
entity depicts the kind of addressing. id depicts the particular
address. The following entities are defined:
.br
"auto" with any id addresses the last session in -toc. This is the default.
.br
"session" with id being a number as of a line "ISO session", column "Idx".
.br
"track" with id being a number as of a line "ISO track", column "Idx".
.br
"lba" or "sbsector" with a number as of a line "ISO ...", column "sbsector".
.br
"volid" with a text as of a line "ISO ...", column "Volume Id".
.br
Adressing a non-existing entity or one which does not represent an ISO
image will either abandon -indev or at least lead to a blank image.
.br
If an input drive is set at the moment when -load is executed, then the
addressed ISO image is loaded immediately. Else, the setting will be pending
until the next -dev or -indev. After the image has been loaded once, the
setting is valid for -rollback until next -dev or -indev, where it
will be reset to "auto".
.TP
\fB\-rom_toc_scan\fR "on"|"off"
Read-only drives do not tell the actual media type but show any media as
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
be truncated to first and last session or even be completely false.
(The eventual emulated history of overwriteable media is not affected by this.)
.br
To have in case of failure a chance of getting the session history and
especially the address of the last session, there is a scan for ISO 9660
filesystem headers which might help but also might yield worse results
than the drive's table of content. At its end it can cause read attempts
to invalid addresses and thus ugly drive behavior.
.br
To be in effect, -rom_toc_scan has to be enabled by "on" before the -*dev
command which aquires drive and media.
.TP
\fB\-ban_stdio_write\fR
Allow for writing only the usage of MMC optical drives. Disallow
to write the result into files of nearly arbitrary type.
@ -604,16 +546,22 @@ Like -add but read the parameter words from file disk_path
or standard input if disk_path is "-".
The list must contain exactly one pathspec resp. disk_path pattern per line.
.TP
\fB\-map\fR disk_path iso_rr_path
Insert file object disk_path into the ISO image as iso_rr_path. If disk_path
is a directory then its whole sub tree is inserted into the ISO image.
.TP
\fB\-map_single\fR disk_path iso_rr_path
Like -map, but if disk_path is a directory then its sub tree is not inserted.
.TP
\fB\-map_l\fR disk_prefix iso_rr_prefix disk_path [***]
Performs -map with each of the disk_path arguments. iso_rr_path will be
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
\fB\-cpr\fR disk_path [***] iso_rr_path
Insert the given files or directory trees from filesystem
into the ISO image.
.br
The rules for generating the ISO addresses are similar as with
shell command cp -r. Nevertheless, directories of the iso_rr_path
are created if necessary. Especially a not yet existing iso_rr_path
will be handled as directory if multiple disk_paths are present.
The leafnames of the multiple disk_paths will be grafted under that
directory as would be done with an existing directory.
.br
If a single disk_path is present then a non-existing iso_rr_path will
get the same type as the disk_path.
.br
If a disk_path does not begin with '/' then -cdx is prepended.
If the iso_rr_path does not begin with '/' then -cd is prepended.
.TP
\fB\-update\fR disk_path iso_rr_path
Compare file object disk_path with file object iso_rr_path. If they do not
@ -622,10 +570,6 @@ a matching copy of disk_path. This comparison will imply lengthy content
reading before a decision is made. On the other hand it strives for the
smallest possible amount of add-on data which is needed to achieve the
matching copy.
.br
If disk_path is a directory and iso_rr_path does not exist yet, then the
whole subtree will be inserted. Else only directory attributes will be
updated.
.TP
\fB\-update_r\fR disk_path iso_rr_path
Like -update but working recursively. I.e. all file objects below both
@ -638,10 +582,10 @@ should always be the same as with the first adding of disk_path as iso_rr_path.
.br
If iso_rr_path does not exist yet, then it gets added. If disk_path does not
exist, then iso_rr_path gets deleted.
.TP
\fB\-update_l\fR disk_prefix iso_rr_prefix disk_path [***]
Performs -update_r with each of the disk_path arguments. iso_rr_path will be
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
.br
-update_r is also a convenient compromise between -add addressing and -cp_r
addressing: Its semantics is similar to -add and thus avoids the pitfalls
inherited from cp -r behavior. Its syntax resembles cp, though.
.TP
\fB\-cut_out\fR disk_path byte_offset byte_count iso_rr_path
Map a byte interval of a regular disk file into a regular file in the ISO
@ -695,23 +639,6 @@ to the directory if it already contains all parts of the old disk file.
If not all parts are present, then only those present parts will
be updated.
.TP
\fB\-cpr\fR disk_path [***] iso_rr_path
Insert the given files or directory trees from filesystem
into the ISO image.
.br
The rules for generating the ISO addresses are similar as with
shell command cp -r. Nevertheless, directories of the iso_rr_path
are created if necessary. Especially a not yet existing iso_rr_path
will be handled as directory if multiple disk_paths are present.
The leafnames of the multiple disk_paths will be grafted under that
directory as would be done with an existing directory.
.br
If a single disk_path is present then a non-existing iso_rr_path will
get the same type as the disk_path.
.br
If a disk_path does not begin with '/' then -cdx is prepended.
If the iso_rr_path does not begin with '/' then -cd is prepended.
.TP
\fB\-rm\fR iso_rr_path [***]
Delete the given files from the ISO image.
.br
@ -914,7 +841,7 @@ Switch from eventual modifiying mode to growing mode.
are uncommitted manipulations pending.
So, to perform a final write operation with no new -dev
and no new loading of image, rather execute option -end.
To suppress a final write, execute -rollback_end.
To suppress a final write, execute -rollback -end.
To eject outdev after write without new loading of image, use -commit_eject.
.br
@ -942,23 +869,18 @@ Combined -commit and -eject. When writing has finished do not make
-indev and/or -outdev. Eventually give up any non-ejected drive.
.TP
\fB\-blank\fR mode
Make media ready for writing from scratch (if not -dummy is activated).
Blank media resp. invalidate ISO image on media if not -dummy
is activated.
.br
This affects only the -outdev not the -indev.
If both drives are the same and if the ISO image was altered
then this command leads to a FAILURE event.
Defined modes are:
as_needed, fast, all, deformat, deformat_quickest
.br
"as_needed" cares for used CD-RW, DVD-RW and for used overwriteable media
by applying -blank "fast". It applies -format "full" to yet unformatted
DVD-RAM or BD-RE. Other media or states are gracefully ignored.
fast, all, deformat, deformat_quickest
.br
"fast" and "all" make CD-RW and unformatted DVD-RW re-usable,
or invalidate overwriteable ISO images.
.br
"deformat" converts overwriteable DVD-RW into unformatted ones.
.br
"deformat_quickest" is a faster way to deformat or blank DVD-RW
but produces media which are only suitable for a single session.
xorriso will write onto them only if option -close is set to "on".
@ -969,111 +891,28 @@ reported percentages. Blanking was successful if no SORRY event or
worse occured.
.TP
\fB\-format\fR mode
Convert unformatted DVD-RW into overwriteable ones, "de-ice" DVD+RW, format
newly purchased BD-RE, re-format DVD-RAM or BD-RE.
Convert unformatted DVD-RW into overwriteable ones,
"de-ice" DVD+RW.
For now, mode should be the word "full".
.br
Defined modes are:
This action has no effect on media if -dummy is activated.
.br
as_needed, full, fast, by_index_<num>, fast_by_index_<num>
Be warned that re-formatting DVD+RW is considered to be risky
to the media's health. DVD+RW get formatted as far as needed
during writing, but an entirely formatted media might be better
readable in some DVD players.
.br
"as_needed" formats yet unformatted DVD-RW, DVD-RAM, BD-RE. Other media
are left untouched.
.br
"full" (re-)formats DVD-RW, DVD+RW, DVD-RAM, BD-RE.
.br
"fast" does the same as "full" but tries to be quicker.
.br
"by_index_" selects a format out of the descriptor list issued by option
-list_formats. The index number from that list is to be appended to the
mode word. E.g: "by_index_3".
.br
"fast_by_index_" does the same as "by_index_" but tries to be quicker.
.br
The formatting action has no effect on media if -dummy is activated.
.br
Formatting is normally needed only once during the lifetime of a media,
if ever. But it is a reason for re-formatting if:
.br
DVD-RW was deformatted by -blank,
.br
DVD+RW has read failures (re-formatting might help or not),
.br
DVD-RAM or BD-RE shall change their amount of defect reserve.
On the other hand unreliable DVD+RW can sometimes be repaired by
re-formatting.
.br
The progress reports issued by some drives while formatting are
quite unrealistic. Do not conclude success or failure from the
reported percentages. Formatting was successful if no SORRY event
or worse occured. Be patient with apparently frozen progress.
.TP
\fB\-list_formats\fR
Put out a list of format descriptors as reported by the output drive for
the current media. The list gives the index number after "Format idx",
a MMC format code, the announced size in blocks (like "2236704s")
and the same size in MiB.
.br
MMC format codes are manifold. Most important are:
"00h" general formatting, "01h" increases reserve space for DVD-RAM,
"26h" for DVD+RW, "30h" for BD-RE with reserve space,
"31h" for BD-RE without reserve space.
.br
Smaller format size with DVD-RAM or BD-RE means more reserve space.
or worse occured.
.TP
.B Settings for data insertion:
.TP
\fB\-not_mgt\fR code[:code[...]]
Control the behavior of the exclusion lists.
.br
Exclusion processing happens before disk_paths get mapped to the ISO image
and before disk files get compared with image files.
The absolute disk path of the source is matched against the -not_paths list.
The leafname of the disk path is matched against the patterns in the -not_leaf
list. If a match is detected then the disk path will not be regarded as an
existing file and not be added to the ISO image.
.br
Several codes are defined.
The _on/_off settings persist until they are revoked by their_off/_on
counterparts.
.br
"erase" empties the lists which were accumulated by -not_paths and -not_leaf.
.br
"reset" is like "erase" but also re-installs default behavior.
.br
"off" disables exclusion processing temporarily without invalidating
the lists and settings.
.br
"on" re-enables exclusion processing.
.br
"param_off" applies exclusion processing only to paths below disk_path
parameter of commands. I.e. explicitely given disk_paths are exempted
from exclusion processing.
.br
"param_on" applies exclusion processing to command parameters as well as
to files below such parameters.
.br
"subtree_off" with "param_on" excludes parameter paths only if they
match a -not_paths item exactly.
.br
"subtree_on" additionally excludes parameter paths which lead to a file
address below any -not_paths item.
.br
"ignore_off" treats excluded disk files as if they were missing. I.e. they
get reported with -compare and deleted from the image with -update.
.br
"ignore_on" keeps excluded files out of -compare or -update activities.
.TP
\fB\-not_paths\fR disk_path [***]
Add the given paths to the list of excluded absolute disk paths. If a given
path is relative, then the current -cdx is prepended to form an absolute path.
Eventual pattern matching happens at definition time and not when exclusion
checks are made.
.br
(Do not forget to end the list of disk_paths by "--")
.TP
\fB\-not_leaf\fR pattern
Add a single shell parser style pattern to the list of exclusions for
disk leafnames. These patterns are evaluated when the exclusion checks are
made.
.TP
\fB\-follow\fR occasion[:occasion[...]]
Enable or disable resolution of symbolic links and mountpoints under
disk_paths. This applies to actions -add, -du*x, -ls*x, -findx,
@ -1149,9 +988,6 @@ With setting "nondir", only directories are protected by such events, other
existing file types get treated with -rm before the new file gets added.
Setting "on" allows automatic -rm_r. I.e. a non-directory can replace an
existing directory and all its subordinates.
.br
If restoring of files is enabled, then the overwrite rule applies to the
target file objects on disk as well, but "on" is downgraded to "nondir".
.TP
\fB\-split_size\fR number["k"|"m"]
Set the threshold for automatic splitting of regular files. Such splitting
@ -1214,15 +1050,8 @@ MMC drives usually activate their own idea of speed and take
the speed value given by the burn program only as upper limit
for their own decision.
.TP
\fB\-stream_recording\fR "on"|"off"
Setting "on" tries to circumvent the management of defects on DVD-RAM and
DVD+RW. Defect management keeps partly damaged media usable. But it reduces
write speed to half nominal speed even if the media is in perfect shape.
For the case of flawless media, one may use -stream_recording "on" to get
full speed.
.TP
\fB\-dummy\fR "on"|"off"
If "on" then simulate burning or refuse with FAILURE event if
If "on" simulate burning or refuse with FAILURE event if
no simulation is possible, do neither blank nor format.
.TP
\fB-fs\fR number["k"|"m"]
@ -1354,22 +1183,6 @@ A special property of this option is that the first -report_about setting
among the start arguments is in effect already when the first operations
of xorriso begin. Only "-report_about" with dash "-" is recognized that way.
.TP
\fB\-error_behavior\fR occasion behavior
Control the program behavior at problem event occasions.
.br
For now this applies only to occasion "image_loading" which is given while
an image tree is read from the input device. There are three behaviors
available:
.br
"best_effort" goes on with reading after events with severity below FAILURE
if the threshold of option -abort_on allows this.
.br
"failure" aborts image tree reading on first event of at least SORRY.
It issues an own FAILURE event.
.br
"fatal" acts like "failure" but issues the own event as FATAL.
This is the default.
.TP
.B Dialog mode control:
.TP
\fB\-dialog\fR "on"|"off"
@ -1397,8 +1210,6 @@ If "on" then ask the user for "y" or "n":
.br
before deleting or overwriting any file in the ISO image,
.br
before overwriting any disk file during restore operations,
.br
before rolling back pending image changes,
.br
before committing image changes to media,
@ -1427,6 +1238,17 @@ use -rollback to revoke the whole session.
.TP
.B Drive and media related inquiry actions:
.TP
\fB\-toc\fR
.br
Show media specific table of content. This is the media
structure, not the ISO image directory tree. In case of
overwriteable media holding a valid ISO image, a single
session gets fabricated from the ISO image size info.
.br
A drive which is incapable of writing may show any media as CD-ROM or DVD-ROM
with only one or two sessions on it. The last of these sessions is supposed
to be the most recent real session then.
.TP
\fB\-devices\fR
Show list of available MMC drives with the addresses of
their libburn standard device files.
@ -1442,24 +1264,7 @@ who is able to see all drives.
.br
Drives which are occupied by other processes get not shown.
.TP
\fB\-toc\fR
.br
Show media specific table of content. This is the media session history,
not the ISO image directory tree.
.br
In case of overwriteable media holding a valid ISO image, a single session
gets fabricated from the ISO image size info. But if the first session on the
overwriteable media was written by xorriso then in most cases a complete
session history can be emulated.
.br
A drive which is incapable of writing may show any media as CD-ROM or DVD-ROM
with only one or two sessions on it. The last of these sessions is supposed
to be the most recent real session then.
.br
Some read-only drives and media show no usable session history at all.
Eventually option -rom_toc_scan might help.
.TP
\fB\-print_size\fR
\fB\-print-size\fR
Print the foreseeable consumption of 2048 byte blocks
by next -commit. This can last a while as a -commit gets
prepared and only in last moment is revoked by this option.
@ -1610,106 +1415,6 @@ Like -compare but working recursively. I.e. all file objects below both
addresses get compared whether they have counterparts below the other address
and whether both counterparts match.
.TP
\fB\-compare_l\fR disk_prefix iso_rr_prefix disk_path [***]
Performs -compare_r with each of the disk_path arguments. iso_rr_path will be
composed from disk_path by replacing disk_prefix by iso_rr_prefix.
.TP
.B osirrox restore options:
.PP
Normally xorriso only writes to disk files which were given as stdio:
pseudo-drives or as log files.
But its alter ego, osirrox, is able to extract file objects
from ISO images and to create, overwrite, or delete file objects on disk.
.br
Disk file exclusions by -not_mgt, -not_leaf, -not_paths apply.
If disk file objects already exist then the settings of -overwrite and
-reassure apply. But -overwrite "on" only triggers the behavior
of -overwrite "nondir". I.e. directories cannot be deleted.
.br
Access permissions of files in the ISO image do not restrict restoring.
The directory permissions on disk have to allow rwx.
.TP
\fB\-osirrox\fR "on"|"device_files"|"off"[:option:...]
Setting "off" disables disk filesystem manipulations. This is the default
unless the program was started with leafname "osirrox". Elsewise
the capability to restore files can be enabled explicitly by -osirrox "on".
.br
To enable restoring of special files by "device_files" is potentially
dangerous.
The meaning of the number st_rdev (see man 2 stat) depends much on the
operating system. Best is to restore device files only to the same system
from where they were copied. If not enabled, device files in the ISO image
are ignored during restore operations.
.br
Due to a bug of previous versions, device files from previous sessions might
have been altered to major=0, minor=1. So this combination does not get
restored.
.br
Option "concat_split_on" is default. It enables restoring of split file
directories as data files if the directory contains a complete collection
of -cut_out part files. With option "concat_split_off" such directories are
handled like any other ISO image directory.
.br
Option "auto_chmod_off" is default. If "auto_chmod_on" is set then access
restrictions for disk directories get circumvented if those directories
are owned by the effective user who runs xorriso. This happens by temporarily
granting rwx permission to the owner. It will not work with ACL restrictions.
.TP
\fB\-extract\fR iso_rr_path disk_path
Restore the file objects at and underneath iso_rr_path to their corresponding
addresses at and underneath disk_path.
This is the inverse of -map or -update_r.
.br
If iso_rr_path is a directory and disk_path is an existing directory then
both trees will be merged. Directory attributes get extracted only if the disk
directory is newly created by the restore operation.
Disk files get removed only if they are to be replaced
by file objects from the ISO image.
.br
As many attributes as possible are copied together with restored
file objects.
.TP
\fB\-extract_single\fR iso_rr_path disk_path
Like -extract, but if iso_rr_path is a directory then its sub tree gets not
restored.
.TP
\fB\-extract_l\fR iso_rr_prefix disk_prefix iso_rr_path [***]
Performs -extract with each of the iso_rr_path arguments. disk_path will be
composed from iso_rr_path by replacing iso_rr_prefix by disk_prefix.
.TP
\fB\-cpx\fR iso_rr_path [***] disk_path
Extract single leaf file objects from the ISO image and store them under
the address given by disk_path. If more then one iso_rr_path is given then
disk_path must be a directory or non-existent. In the latter case it gets
created and the extracted files get installed in it with the same leafnames.
.br
Missing directory components in disk_path will get created, if possible.
.br
Directories are allowed as iso_rr_path only with -osirrox "concat_split_on"
and only if they actually represent a complete collection of -cut_out split
file parts.
.TP
\fB\-cpax\fR iso_rr_path [***] disk_path
Like -cpx but restoring mtime, atime as in ISO image and trying to set
ownership and group as in ISO image.
.TP
\fB\-cp_rx\fR iso_rr_path [***] disk_path
Like -cpx but also extracting whole directory trees from the ISO image.
.br
The resulting disk paths are determined as with shell command cp -r :
If disk_path is an existing directory then the trees will be inserted or merged
underneath this directory and will keep their leaf names. The ISO directory "/"
has no leaf name and thus gets mapped directly to disk_path.
.TP
\fB\-cp_rax\fR iso_rr_path [***] disk_path
Like -cp_rx but restoring mtime, atime as in ISO image and trying to set
ownership and group as in ISO image.
.TP
\fB\-paste_in\fR iso_rr_path disk_path byte_offset byte_count
Read the content of a ISO data file and write it into a data file on disk
beginning at the byte_offset. Write at most byte_count bytes.
This is the inverse of option -cut_out.
.TP
.B Command compatibility emulations:
.PP
Writing of ISO 9660 on CD is traditionally done by program mkisofs
@ -1732,8 +1437,8 @@ Personality "\fBmkisofs\fR" accepts the options listed with:
.br
-as mkisofs -help --
.br
Among them: -R (always on), -J, -graft-points, -o, -path-list, -m, -print-size,
-V, -v, -version, pathspecs as with xorriso -add. A lot of options are not
Among them: -R (always on), -J, -graft-points, -o, -path-list, -print-size, -V,
-v, -version, pathspecs as with xorriso -add. A lot of options are not
supported and lead to failure of the mkisofs emulation. Some are ignored,
but better do not rely on this tolerance.
.br
@ -1859,7 +1564,8 @@ This transport becomes visible with -report_about "ALL".
If path is not empty it gives the address of a plain text file where
a log record gets appended after each session. This log can be used to
determine the start_lba of a session for mount option sbsector= from
date or volume id.
date or volume id. With non-multi-session media this is currently the only
way to obtain this parameter.
.br
Record format is: timestamp start_lba size volume-id
.br
@ -1930,8 +1636,6 @@ Adjust thresholds for verbosity, exit value and program abort
Examples of input timestrings
.br
Incremental backup of a few directory trees
.br
Restore directory trees from a particular ISO session to disk
.SS
.B As superuser learn about available drives
Consider to give rw permissions to those users or groups
@ -1954,15 +1658,19 @@ Re-add some wanted stuff.
Because no -dialog "on" is given, the program will then end by committing the
session to media.
.br
\fB$\fR cd /home/me
.br
\fB$\fR xorriso -outdev /dev/sr2 \\
.br
-blank as_needed \\
-blank fast \\
.br
-map /home/me/sounds /sounds \\
-pathspecs on \\
.br
-map /home/me/pictures /pictures \\
-add \\
.br
/sounds=/home/me/sounds \\
.br
/pictures \\
.br
-- \\
.br
-rm_r \\
.br
@ -1974,12 +1682,12 @@ session to media.
.br
-- \\
.br
-cd / \\
-add \\
.br
-add pictures/confidential/work*
/pictures/confidential/work*
.br
Note that '/pictures/*private*' is a pattern for iso_rr_paths
while pictures/confidential/work* gets expanded by the shell
while /pictures/confidential/work* gets expanded by the shell
with addresses from the hard disk.
.SS
.B A dialog session doing about the same
@ -1994,7 +1702,7 @@ made ready for being overwritten and the loaded ISO image is made empty.
In order to be able to eject the media, the session needs to be committed
explicitely.
.br
.B $ xorriso -dialog on -page 20 80 -disk_pattern on
.B $ xorriso -pathspecs on -dialog on -page 20 80
.br
enter option and arguments :
.br
@ -2002,11 +1710,11 @@ enter option and arguments :
.br
enter option and arguments :
.br
.B \-blank as_needed
.B \-blank fast
.br
enter option and arguments :
.br
.B \-map /home/me/sounds /sounds -map /home/me/pictures /pictures
.B \-add /sounds=/home/me/sounds /pictures
.br
enter option and arguments :
.br
@ -2014,11 +1722,7 @@ enter option and arguments :
.br
enter option and arguments :
.br
.B \-cdx /home/me/pictures -cd /pictures
.br
enter option and arguments :
.br
.B \-add confidential/office confidential/factory
.B \-add /pictures/confidential/office /pictures/confidential/factory
.br
enter option and arguments :
.br
@ -2050,9 +1754,15 @@ Add new directory trees /sounds and /movies. Burn to the same media and eject.
.br
-chmod go-rwx /pictures/restricted -- \\
.br
-map /home/me/prepared_for_dvd/sounds_dummy /sounds \\
-pathsspecs on \\
.br
-map /home/me/prepared_for_dvd/movies /movies \\
-add \\
.br
/sounds=/home/me/prepared_for_dvd/sounds_dummy \\
.br
/movies=/home/me/prepared_for_dvd/movies \\
.br
-- \\
.br
-commit -eject all
.SS
@ -2067,7 +1777,7 @@ first and only session to the output drive.
.br
...
.br
-outdev /dev/sr0 -blank as_needed \\
-outdev /dev/sr0 -blank fast \\
.br
-commit -eject all
.SS
@ -2132,19 +1842,14 @@ compare them with their disk counterparts,
add disk file objects which are missing yet,
overwrite those which are different on disk,
and delete those which have vanished on disk.
But do not add or overwrite files matching *.o, *.swp.
.br
\fB$\fR xorriso -dev /dev/sr0 \\
.br
-volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \\
.br
-not_leaf '*.o' -not_leaf '*.swp' \\
.br
-update_r /home/thomas/open_source_projects /open_source_projects \\
.br
-update_r /home/thomas/personal_mail /personal_mail \\
.br
-commit -toc -eject all
-commit_eject all
.br
To be used several times on the same media, whenever an update of
the two disk trees to the media is desired. Begin with blank media and start
@ -2155,14 +1860,21 @@ This makes most sense with backups on non-erasable media like CD-R,
DVD-R, DVD+R if the full backup leaves substantial remaining capacity
on media and if the expected changes are much smaller than the full backup.
An update run will probably save no time but last longer than a full backup.
Another good reason may be given if read speed is much higher than write speed.
.br
With \fBmount\fR option \fB"sbsector="\fR it is possible to access the session
trees which represent the older backup versions. With CD media, Linux mount
accepts session numbers directly by its option "session=".
trees which represent the older backup versions. Multi-session media can tell
the sbsector by xorriso option -toc, as "data lba:". For other media one
may set before writing a suitable path for xorriso option -session_log where
the sbsector number gets recorded as the second word in each line.
.br
Multi-session media and most overwriteable media written by xorriso can tell
the sbsector of a session by xorriso option -toc.
With CD media, Linux mount accepts session numbers directly by its option
"session=".
.br
\fBDo not write more than about 50 sessions\fR to one multi-session media.
Theoretical limits are higher but in practice the media deteriorate more early.
It might also be that your operating system has a session limit with mount.
Always have a blank media ready to perform a full backup in case the update
attempt fails. An overview of sessions is given by option -toc.
.br
Sessions on multi-session media are separated by several MB of unused blocks.
So with small sessions the payload capacity can become substantially lower
@ -2174,34 +1886,14 @@ automatically.
Have at least two media which you use alternatingly. So only older backups
get endangered by the new write operation, while the newest backup is
stored safely on a different media.
Always have a blank media ready to perform a full backup in case the update
attempt fails due to insufficient remaining capacity.
.SS
.B Restore directory trees from a particular ISO session to disk
This is an alternative to mounting the media and using normal file operations.
.br
If you have enough re-useable media for a round-robin scheme then better do
full backups with blank media each time. Blanking can be achieved by
either a separate run:
.br
First check which backup sessions are on the media:
\fB$\fR xorriso -outdev /dev/sr0 -blank fast -eject all
.br
\fB$\fR xorriso -outdev /dev/sr0 -toc
.br
Then load the desired session and copy the file trees to disk.
Avoid to eventually create /home/thomas/restored without rwx-permission.
.br
\fB$\fR xorriso -load volid PROJECTS_MAIL_2008_06_19_205956 \\
.br
-indev /dev/sr0 \\
.br
-osirrox on:auto_chmod_on \\
.br
-chmod u+rwx / -- \\
.br
-extract /open_source_projects \\
.br
/home/thomas/restored/open_source_projects \\
.br
-extract /personal_mail /home/thomas/restored/personal_mail
.br
-rollback_end
or in the update run by using option -blank "fast" before option -update_r.
.br
.SH FILES
.SS

File diff suppressed because it is too large Load Diff

View File

@ -72,13 +72,6 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
int error_code, char msg_text[], int os_errno,
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
processing. This should be called after any option function was processed.
@ -240,13 +233,6 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Options -cpx , -cpax, -cp_rx , -cp_rax */
/* @param flag bit0= recursive (-cp_rx, -cp_rax)
bit1= full property restore (-cpax, -cp_rax)
*/
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -cut_out */
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
char *start, char *count, char *iso_rr_path, int flag);
@ -282,21 +268,9 @@ int Xorriso_option_eject(struct XorrisO *xorriso, char *which, int flag);
*/
int Xorriso_option_end(struct XorrisO *xorriso, int flag);
/* Option -errfile_log marked|plain path|-|"" */
int Xorriso_option_errfile_log(struct XorrisO *xorriso,
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 -iso_rr_pattern "on"|"ls"|"off" */
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
@ -321,22 +295,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag);
/* Option -history */
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" */
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 */
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
char *fileadr, int flag);
@ -361,22 +322,6 @@ int Xorriso_option_lsi(struct XorrisO *xorriso, int argc, char **argv,
int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
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 */
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
@ -391,21 +336,11 @@ int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
/* Option -no_rc */
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*/
/* @return <=0 error , 1 = success , 3 = request to end program run */
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
int flag);
/* Option -osirrox "on"|"off" */
int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
/* Option -overwrite "on"|"nondir"|"off" */
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
@ -415,10 +350,6 @@ int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
/* Option -page */
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 */
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
@ -431,7 +362,7 @@ int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
/* Option -print */
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);
@ -451,9 +382,6 @@ int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
/* Option -pwdx */
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 */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag);
@ -462,8 +390,8 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int Xorriso_option_return_with(struct XorrisO *xorriso, char *severity,
int exit_value, int flag);
/* Option -revoke_exclusions */
int Xorriso_option_revoke_exclusions(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
/* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
@ -471,15 +399,10 @@ int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -rollback */
/* @param flag bit0= do not -reassure
@return <=0 error , 1 success, 2 revoked by -reassure
/* @return <=0 error , 1 success, 2 revoked by -reassure
*/
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);
@ -496,10 +419,6 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
int flag);
/* Option -stream_recording */
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -tell_media_space */
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);

View File

@ -2,7 +2,7 @@
<HEAD>
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R/DL, scdbackup">
<META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE>
</HEAD>
@ -24,8 +24,6 @@ into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to
optical media or to filesystem objects.
<BR>
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
</P>
<P>
@ -35,10 +33,10 @@ Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
<P>
<H2>Hardware requirements:</H2>
A CD/DVD/BD recorder suitable for
A CD/DVD recorder suitable for
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
and to MMC-5 for DVD or BD).
and to MMC-5 for DVD).
<BR>
</P>
@ -60,15 +58,14 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.4.9</DT>
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DT>libburn-0.4.5</DT>
<DD>reads and writes data from and to CD and DVD.</DD>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.6</DT>
<DD>operates on ISO 9660 filesystem images.</DD>
furthered since August 2006 by team of libburnia-project.org)</DD>
<DT>libisofs-0.6.4</DT>
<DD>operates ISO 9660 images.</DD>
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
<DT>libisoburn-0.2.0</DT>
<DT>libisoburn-0.1.4</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD>
@ -89,7 +86,7 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
<H2>Special features:</H2>
<UL>
<LI>
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
ISO 9660 formatter and burner for CD or DVD are fixely integrated.
</LI>
<LI>
Operates on an existing ISO image or creates a new one.
@ -115,14 +112,10 @@ Can write result as add-on session to appendable multi-session media,
to overwriteable media, to regular files, and to block devices.
</LI>
<LI>
Can restore single files and whole trees from ISO image to disk filesystem.
Scans for optical drives, blanks re-useable optical media.
</LI>
<LI>
Scans for optical drives, blanks re-useable optical media, formats media.
</LI>
<LI>
Suitable for:
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-RE.
Suitable for: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R/DL, DVD+RW, DVD-RAM.
</LI>
<LI>
Reads its instructions from command line arguments, dialog, and batch files.
@ -158,9 +151,8 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
<DT>Get info about a particular drive and loaded media:</DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD>
<DT>Make re-usable media writable again, delete any ISO 9660 image,
eventually prepare yet unused BD-RE:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed -eject all</KBD></DD>
<DT>Make re-usable media writable again, delete any ISO 9660 image:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank fast -eject all</KBD></DD>
<DT>
<HR>
@ -182,17 +174,17 @@ adjust permissions to make it publicly read-only,
write it to media and immediately eject media without
previously reloading the written image.
</DT>
<DD>$<KBD>&nbsp;cd /home/me</KBD></DD>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/sounds /sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/pictures /pictures \</KBD></DD>
<DD>$<KBD>&nbsp;xorriso -outdev /dev/sr0 -blank fast -pathspecs on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /sounds=/home/me/sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/pictures=/home/me/pictures -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-cd / \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add pictures/private/horses* -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /pictures/private/horses=/home/me/pictures/private/horses -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-chmod_r a+r,a-w / -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-find / -type d -exec chmod a+x -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-commit_eject all</KBD></DD>
<DT>
<HR>
</DT>
@ -203,14 +195,15 @@ rename /pictures/private/horses,
add new directory trees /sounds and /movies,
disallow any access for group and others.
Finally write as additional session to media and eject:</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 \</KBD></DD>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -pathspecs on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-rm_r /sounds -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-mv /pictures/private/horses /horse_show -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/prepared_for_dvd/sounds_dummy /sounds \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-map /home/me/prepared_for_dvd/movies /movies \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-add /sounds=/home/me/prepared_for_dvd/sounds_dummy \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /movies=/home/me/prepared_for_dvd/movies -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-chmod_r go-rwx / -- \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-commit_eject all</KBD></DD>
<DT>
<HR>
</DT>
@ -237,11 +230,9 @@ run. It will write eventually pending changes to media, if that has not
already been done by a previous -commit.</DT>
<DD>$<KBD>&nbsp;xorriso -dialog on</KBD></DD>
<DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
<DD><KBD><B>-dev /dev/sr0 -pathspecs on</B></KBD></DD>
<DD><KBD>enter option and arguments :</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><KBD><B>-add /sounds=/home/me/prepared_for_dvd/sounds_dummy /movies=/home/me/prepared_for_dvd/movies</B></KBD></DD>
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
<DD><KBD>enter option and arguments :</KBD></DD>
<DD><KBD><B>-commit</B></KBD></DD>
@ -253,23 +244,18 @@ already been done by a previous -commit.</DT>
<HR>
</DT>
<DT>The following command can be run on blank media to create a
<DT>The following command can be run on blank media to create a complete
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.
old ISO copies to match the new disk trees. On CD-R[W], DVD-R[W] and DVD+R
older states can be retrieved by help of mount option "session=".
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.
On overwriteable media only the newest state is accessible.
</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -commit -toc -eject all</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -commit_eject all \</KBD></DD>
<DT>
<HR>
@ -284,18 +270,6 @@ output will be redirected to stderr in this case.</DT>
<HR>
</DT>
<DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD>
<DT>
<HR>
</DT>
<DT>Get overview of the options:</DT>
<DD>$<KBD>&nbsp;<A HREF="xorriso_help">xorriso -help</A></KBD></DD>
@ -305,8 +279,7 @@ output will be redirected to stderr in this case.</DT>
</DL>
Testers wanted who are willing to risk some double layer DVD media or
are interested in using BD-R media.
Testers wanted who are willing to risk some double layer DVD media.
</P>
@ -315,8 +288,8 @@ are interested in using BD-R media.
<P>
<DL>
<DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.2.0.pl00.tar.gz">xorriso-0.2.0.pl00.tar.gz</A>
(1000 KB).
<DD><A HREF="xorriso-0.1.4.pl00.tar.gz">xorriso-0.1.4.pl00.tar.gz</A>
(955 KB).
</DD>
</DL>
</DD>
@ -340,23 +313,20 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
</P>
<HR>
<P>
Bug fixes towards xorriso-0.1.8.pl00:
Enhancements towards previous stable version xorriso-0.1.2.pl00:
<UL>
<LI>
-chmod unintentionally performed o-x as first operation
</LI>
<LI>Coordination of -cut_out, -compare and -update</LI>
<LI>New option -split_size, automated splitting of oversized files</LI>
<LI>Improved performance with reading directory trees</LI>
<LI>New option -session_log</LI>
<LI>Dynamically linkable with release version 0.6.4 of libisofs</LI>
</UL>
</P>
<P>
Enhancements towards previous stable version xorriso-0.1.8.pl00:
Bug fixes towards xorriso-0.1.2.pl00:
<UL>
<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>
<LI>-as mkisofs -no-pad was misspelled -nopad</LI>
<LI>Implicite directory attribute copying with -cut_out was wrong</LI>
</UL>
</P>
@ -364,26 +334,23 @@ New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
<P>
<DL>
<DT><H3>Development snapshot, version 0.2.1 :</H3></DT>
<DD>Bug fixes towards xorriso-0.2.0.pl00:
<DT><H3>Development snapshot, version 0.1.5 :</H3></DT>
<DD>Bug fixes towards xorriso-0.1.4.pl00:
<UL>
</LI>
<LI>- none yet -</LI>
<!--
-->
<!-- <LI>- none yet -</LI> -->
</UL>
</DD>
<DD>Enhancements towards stable version 0.2.0.pl00:
<DD>Enhancements towards stable version 0.1.4.pl00:
<UL>
<LI>- none yet -</LI>
<!--
-->
<!-- <LI>- none yet -</LI> -->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.2.1</A>
<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.2.1)</A></DD>
<DD><A HREF="README_xorriso_devel">README 0.1.5</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.1.5 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.5)</A></DD>
<DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the
@ -393,8 +360,8 @@ libburnia libraries.
installation see README)
</DD>
<DD>
<A HREF="xorriso-0.2.1.tar.gz">xorriso-0.2.1.tar.gz</A>
(1000 KB).
<A HREF="xorriso-0.1.5.tar.gz">xorriso-0.1.5.tar.gz</A>
(960 KB).
</DD>
<DT>A dynamically linked development version of xorriso can be obtained
from repositories of
@ -416,12 +383,13 @@ versions for dynamic linking. Only release versions are safe for that.
</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/">
<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.
</DT>
vanilla tools like make and gcc are needed.</DD>
</DD>
<DD>&nbsp;</DD>
</DL>
</P>

View File

@ -18,7 +18,7 @@
#ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.2.0"
#define Xorriso_program_versioN "0.1.4"
/** The source code release timestamp */
#include "xorriso_timestamp.h"
@ -45,10 +45,7 @@
/* <<< ??? */
typedef int (*Cleanup_app_handler_T)();
struct LinkiteM; /* Trace of hops during symbolic link resolution */
struct ExclusionS; /* List of -not_* conditions */
struct PermiteM; /* Stack of temporarily altered access permissions */
struct LinkiteM;
/* maximum number of history lines to be reported with -status:long_history */
#define Xorriso_status_history_maX 100
@ -113,25 +110,6 @@ struct XorrisO { /* the global context of xorriso */
/* >>> 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];
void *in_drive_handle; /* interpreted only by xorrisoburn.c */
void *in_volset_handle; /* interpreted only by xorrisoburn.c */
@ -151,7 +129,6 @@ struct XorrisO { /* the global context of xorriso */
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
int fs; /* fifo size in 2048 byte chunks : at most 1 GB */
int padding; /* number of bytes to add after ISO 9660 image */
int do_stream_recording;
int keep_boot_image;
int patch_isolinux_image;
@ -160,14 +137,6 @@ struct XorrisO { /* the global context of xorriso */
/* XORRISO options */
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;
@ -195,14 +164,6 @@ struct XorrisO { /* the global context of xorriso */
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 result_page_length;
int result_page_width;
@ -223,8 +184,6 @@ struct XorrisO { /* the global context of xorriso */
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];
int return_with_severity;
int return_with_value;
@ -262,14 +221,11 @@ struct XorrisO { /* the global context of xorriso */
/* optional global counters for brain reduced callback functions */
off_t pacifier_count;
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: ) */
char result_line[5*SfileadrL];
int result_line_counter;
@ -397,44 +353,6 @@ 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);
double Sfile_microtime(int flag);
@ -451,26 +369,6 @@ int Sfile_destroy_argv(int *argc, char ***argv, int flag);
*/
int Sfile_count_components(char *path, int flag);
/*
@param flag
bit0= return -1 if file is missing
bit1= return a hardlink with siblings as type 5
bit2= evaluate eventual link target rather than the link object itself
bit3= return a socket or a char device as types 7 or 8 rather than 0
@return
0=unknown
1=regular
2=directory
3=symbolic link
4=named pipe
5=multiple hardlink (with bit1)
6=block device
7=socket (with bit3)
8=character device (with bit3)
*/
int Sfile_type(char *filename, int flag);
char *Text_shellsafe(char *in_text, char *out_text, int flag);
@ -554,42 +452,6 @@ int Splitpart__parse(char *name, int *partno, int *total_parts,
int Splitpart__compose(char *adr, int partno, int total_parts,
off_t offset, off_t bytes, off_t total_bytes, int flag);
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 */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.06.22.090001"
#define Xorriso_timestamP "2008.04.28.120001"

File diff suppressed because it is too large Load Diff

View File

@ -20,8 +20,8 @@ struct FindjoB;
/* The minimum version of libisoburn to be used with this version of xorriso
*/
#define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 2
#define xorriso_libisoburn_req_micro 0
#define xorriso_libisoburn_req_minor 1
#define xorriso_libisoburn_req_micro 4
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -62,29 +62,10 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
int Xorriso_tell_media_space(struct XorrisO *xorriso,
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);
/* @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);
/* @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 :
If not NULL then this is an iterator suitable for
iso_dir_iter_remove() which is then to be used instead
@ -177,9 +158,7 @@ int Xorriso_set_abort_severity(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 , -2 = severe error occured
*/
/* @return 0= stbuf content is valid , -1 = path not found */
int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
int flag);
@ -200,10 +179,8 @@ int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
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);
void **stream, int flag);
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
int count, int flag);
@ -218,9 +195,6 @@ int Xorriso_copy_properties(struct XorrisO *xorriso,
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
@ -230,34 +204,5 @@ int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
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 */