Compare commits
57 Commits
ZeroTwoZer
...
ZeroTwoTwo
Author | SHA1 | Date | |
---|---|---|---|
beb0ce5522 | |||
659f88bec7 | |||
a52ad2fcf5 | |||
f3cb096f46 | |||
3cb1741725 | |||
a68624cc5c | |||
a745366913 | |||
31809252e8 | |||
58ba5aeff6 | |||
4088bf38a6 | |||
404d120b75 | |||
ad1762c790 | |||
35ff5db496 | |||
d10f3fa7a1 | |||
d382bdba17 | |||
af36e5e127 | |||
69b0edc261 | |||
88d94ad7b7 | |||
8b5af86a64 | |||
cf9bc140b1 | |||
a9c0fb6e58 | |||
06bcc637d6 | |||
c02edc329d | |||
7765835374 | |||
d8b6e69429 | |||
eddb70823e | |||
ed03897759 | |||
c104b0a073 | |||
b45fd0553e | |||
25fd92f2c4 | |||
41aa050551 | |||
766129ec66 | |||
d825fc1a3a | |||
eb9f0f6d6a | |||
d17ddda7db | |||
4d3ef02838 | |||
d42e7b2d9f | |||
4ea0e15acb | |||
e5ba798b14 | |||
673a0e9d2f | |||
7a7232f16e | |||
52d89cc7cc | |||
048bbbe1ef | |||
1e95e13263 | |||
3cd9763879 | |||
94638d6e9b | |||
9fa0a6f441 | |||
362ecda0f3 | |||
f96fdc339a | |||
88ef7d06f4 | |||
837f60c2e4 | |||
ea36885829 | |||
40d9dcf8bb | |||
e35f0b6841 | |||
f882d323b1 | |||
071a3869db | |||
4fba3a4365 |
44
Makefile.am
44
Makefile.am
@ -16,9 +16,11 @@ libisoburn_libisoburn_la_SOURCES = \
|
||||
libisoburn/isofs_wrap.c \
|
||||
libisoburn/libisoburn.h \
|
||||
version.h
|
||||
|
||||
libisoburn_libisoburn_la_LIBADD = \
|
||||
-lisofs \
|
||||
-lburn
|
||||
|
||||
libinclude_HEADERS = \
|
||||
libisoburn/libisoburn.h
|
||||
|
||||
@ -39,7 +41,39 @@ xorriso_xorriso_SOURCES = \
|
||||
xorriso/xorriso.c \
|
||||
xorriso/xorrisoburn.h \
|
||||
xorriso/xorrisoburn.c \
|
||||
xorriso/xorriso_timestamp.h
|
||||
xorriso/xorriso_timestamp.h \
|
||||
xorriso/xorriso_buildstamp.h
|
||||
|
||||
|
||||
# Install symbolic links to the xorriso binary
|
||||
#
|
||||
install-exec-hook:
|
||||
if test -e $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/xorrisofs
|
||||
if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/osirrox
|
||||
if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/xorrecord
|
||||
|
||||
|
||||
# Trying to create a build timestamp file
|
||||
#
|
||||
buildstamp:
|
||||
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||
cat xorriso/xorriso_buildstamp.h
|
||||
|
||||
# For now make buildstamped has to be performed explicitely.
|
||||
buildstamped: buildstamp
|
||||
make
|
||||
#
|
||||
# Processing of the "all:" rule happens too late.
|
||||
# How to create a dependency of xorriso.c on buildstamp ?
|
||||
# Not working:
|
||||
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
|
||||
# on buildstamp. It runs. But at quite random occasions.
|
||||
# xorriso/xorriso_buildstamp.h: buildstamp
|
||||
#
|
||||
# all: buildstamp
|
||||
|
||||
|
||||
## Build test applications
|
||||
@ -55,13 +89,6 @@ test_compare_file_CFLAGS =
|
||||
test_compare_file_LDADD =
|
||||
test_compare_file_SOURCES = test/compare_file.c
|
||||
|
||||
# ts A80110 - A80210 : we need as minimal demo something better than test.c
|
||||
# test/test
|
||||
|
||||
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
|
||||
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
|
||||
# test_test_SOURCES = test/test.c
|
||||
|
||||
|
||||
## ========================================================================= ##
|
||||
|
||||
@ -126,6 +153,7 @@ EXTRA_DIST = \
|
||||
COPYING \
|
||||
INSTALL \
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_buildstamp_none.h \
|
||||
xorriso/README \
|
||||
$(man_MANS)
|
||||
|
||||
|
17
README
17
README
@ -4,7 +4,7 @@
|
||||
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
|
||||
http://files.libburnia-project.org/releases/libisoburn-0.2.2.pl00.tar.gz
|
||||
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
||||
Provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
@ -26,18 +26,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
|
||||
Dynamic library and compile time header requirements for libisoburn-0.2.2 :
|
||||
- libburn.so.4 , version libburn-0.5.0 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
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.2.2.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.2.2.pl00.tar.gz
|
||||
cd libisoburn-0.2.2
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -67,6 +67,11 @@ xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
||||
After installation documentation is available via
|
||||
man xorriso
|
||||
|
||||
Several alias links point to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||
|
||||
|
||||
Drives and Disk File Objects
|
||||
|
||||
|
17
configure.ac
17
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libisoburn], [0.2.0], [http://libburnia-project.org])
|
||||
AC_INIT([libisoburn], [0.2.2], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -21,7 +21,7 @@ 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_MICRO_VERSION=2
|
||||
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
||||
@ -33,15 +33,16 @@ 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 ts A80718
|
||||
dnl This is the release version 0.2.2 = libisoburn.so.1.11.0
|
||||
dnl ### This is the development version after above stable release
|
||||
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 10 - 9 = 1 . Library name = libburn.so.1.9.0
|
||||
dnl SONAME = 12 - 11 = 1 . Library name = libburn.so.1.11.0
|
||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||
LT_CURRENT=10
|
||||
LT_AGE=9
|
||||
LT_CURRENT=12
|
||||
LT_AGE=11
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
@ -99,7 +100,7 @@ AC_CHECK_HEADER(libburn/libburn.h)
|
||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||
|
||||
dnl Check for proper library versions
|
||||
LIBBURN_REQUIRED=0.4.8
|
||||
LIBBURN_REQUIRED=0.5.0
|
||||
LIBISOFS_REQUIRED=0.6.6
|
||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
||||
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
||||
|
@ -625,6 +625,23 @@ int isoburn_disc_track_lba_nwa(struct burn_drive *d,
|
||||
}
|
||||
|
||||
|
||||
int isoburn_get_msc2(struct isoburn *o,
|
||||
struct burn_write_opts *opts, int *msc2, int flag)
|
||||
{
|
||||
int ret, lba, nwa;
|
||||
|
||||
if(o->fabricated_msc2>=0)
|
||||
*msc2= o->fabricated_msc2;
|
||||
else {
|
||||
ret= isoburn_disc_track_lba_nwa(o->drive, opts, 0, &lba, &nwa);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
*msc2= nwa;
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
{
|
||||
int ret;
|
||||
@ -925,7 +942,8 @@ int isoburn_report_iso_error(int iso_error_code, char msg_text[], int os_errno,
|
||||
|
||||
/* @param flag bit0-7: info return mode
|
||||
0= do not return anything in info (do not even touch it)
|
||||
1= return volume id
|
||||
1= copy volume id to info (info needs 33 bytes)
|
||||
2= do not touch info (caller will copy 64 kB header to it)
|
||||
bit14= -reserved -
|
||||
bit15= -reserved-
|
||||
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
||||
@ -954,6 +972,8 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
||||
break;
|
||||
else
|
||||
info[i]= 0;
|
||||
} else if(info_mode==2) {
|
||||
;
|
||||
} else {
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Program error: Unknown info mode with isoburn_read_iso_head()",
|
||||
@ -967,7 +987,9 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
||||
/* API
|
||||
@param flag bit0-7: info return mode
|
||||
0= do not return anything in info (do not even touch it)
|
||||
1= return volume id
|
||||
1= copy volume id to info (info needs 33 bytes)
|
||||
2= copy 64 kB header to info (needs 65536 bytes)
|
||||
bit13= do not read head from media but use first 64 kB from info
|
||||
bit14= check both half buffers (not only second)
|
||||
return 2 if found in first block
|
||||
bit15= return-1 on read error
|
||||
@ -978,25 +1000,31 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||
int *image_blocks, char *info, int flag)
|
||||
{
|
||||
unsigned char buffer[64*1024];
|
||||
int ret;
|
||||
int ret, info_mode;
|
||||
off_t data_count;
|
||||
|
||||
info_mode= flag&255;
|
||||
*image_blocks= 0;
|
||||
if(flag&(1<<13)) {
|
||||
memcpy(buffer, info, 64*1024);
|
||||
} else {
|
||||
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
||||
(off_t) 64*1024, &data_count, 2); /* no error messages */
|
||||
if(ret<=0)
|
||||
return(-1*!!(flag&(1<<15)));
|
||||
if(info_mode==2)
|
||||
memcpy(info, buffer, 64*1024);
|
||||
}
|
||||
|
||||
if(flag&(1<<14)) {
|
||||
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info,
|
||||
flag&255);
|
||||
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info, info_mode);
|
||||
if(ret<0)
|
||||
return(ret);
|
||||
if(ret>0)
|
||||
return(2);
|
||||
}
|
||||
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
|
||||
flag&255);
|
||||
info_mode);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -1008,7 +1036,7 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||
int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||
{
|
||||
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
|
||||
int scan_start= 0, scan_count= 0;
|
||||
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
|
||||
struct isoburn *o;
|
||||
struct isoburn_toc_entry *item;
|
||||
char msg[160], size_text[80], *sev;
|
||||
@ -1045,7 +1073,22 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||
}
|
||||
read_flag= 0;
|
||||
if(flag&2)
|
||||
read_flag= (1<<15)|((session_count>0)<<14);
|
||||
read_flag|= (1<<15)|((session_count>0)<<14);
|
||||
else {
|
||||
|
||||
/* growisofs aligns to 16 rather than 32. Overwriteable TOC emulation
|
||||
relies on not accidentially seeing inter-session trash data.
|
||||
But one can safely access 16 blocks earlier because a xorriso header
|
||||
would have overwritten with the unused 16 blocks at its start.
|
||||
If libisoburn alignment would increase, then this would not be
|
||||
possible any more.
|
||||
*/
|
||||
|
||||
if(probe_minus_16)
|
||||
read_flag|= (1<<14);
|
||||
probe_minus_16= 0;
|
||||
}
|
||||
|
||||
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag);
|
||||
if(ret<=0) {
|
||||
if(session_count>0) {
|
||||
@ -1084,9 +1127,16 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||
item->start_lba= lba;
|
||||
item->track_blocks= track_blocks;
|
||||
lba+= track_blocks;
|
||||
|
||||
/* growisofs aligns to 16 rather than 32 */
|
||||
growisofs_nwa= lba;
|
||||
if(growisofs_nwa % 16)
|
||||
growisofs_nwa+= 16 - (growisofs_nwa % 16);
|
||||
if(lba % Libisoburn_nwa_alignemenT)
|
||||
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
|
||||
scan_start= lba;
|
||||
if(lba - growisofs_nwa == 16)
|
||||
probe_minus_16= 1;
|
||||
}
|
||||
if(last_pacifier != start_time)
|
||||
sev= "UPDATE";
|
||||
@ -1399,6 +1449,8 @@ int isoburn_drive_set_msgs_submit(struct burn_drive *d,
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= with adr_mode 3: adr_value might be 16 blocks too high
|
||||
*/
|
||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||
int flag)
|
||||
{
|
||||
@ -1470,7 +1522,12 @@ not_found:;
|
||||
|
||||
} else if(adr_mode==3) {
|
||||
o->fabricated_msc1= adr_num;
|
||||
|
||||
if((flag & 1) && o->fabricated_msc1 >= 16) {
|
||||
/* adr_num is possibly 16 blocks too high */
|
||||
ret= isoburn_read_iso_head(d, o->fabricated_msc1, &size,volid, 1|(1<<14));
|
||||
if(ret==2)
|
||||
o->fabricated_msc1-= 16;
|
||||
}
|
||||
} else if(adr_mode==4) {
|
||||
/* search for volume id that is equal to adr_value */
|
||||
best_lba= -1;
|
||||
|
@ -85,6 +85,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
|
||||
icd = (struct isoburn_cached_drive *) src->data;
|
||||
d = (struct burn_drive*) icd->drive;
|
||||
|
||||
if(d == NULL) {
|
||||
/* This would happen if libisoburn saw output data in the fifo and
|
||||
performed early drive release and afterwards libisofs still tries
|
||||
to read data.
|
||||
That would constitute a bad conceptual problem in libisoburn.
|
||||
*/
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Programming error: Drive released while libisofs still attempts to read",
|
||||
0, "FATAL", 0);
|
||||
return ISO_ASSERT_FAILURE;
|
||||
}
|
||||
|
||||
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||
|
||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
||||
@ -189,6 +202,19 @@ static void ds_free_data(IsoDataSource *src)
|
||||
src->data= NULL;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
|
||||
{
|
||||
struct isoburn_cached_drive *icd;
|
||||
|
||||
if(src==NULL)
|
||||
return(0);
|
||||
icd= (struct isoburn_cached_drive *) src->data;
|
||||
icd->drive= NULL;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||
{
|
||||
IsoDataSource *ret;
|
||||
|
@ -119,6 +119,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
||||
o->drive= NULL;
|
||||
o->emulation_mode= 0;
|
||||
o->fabricated_msc1= -1;
|
||||
o->fabricated_msc2= -1;
|
||||
o->zero_nwa= Libisoburn_overwriteable_starT;
|
||||
o->min_start_byte= o->zero_nwa * 2048;
|
||||
o->nwa= o->zero_nwa;
|
||||
@ -130,6 +131,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
||||
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
||||
o->target_iso_head[i]= 0;
|
||||
o->image= NULL;
|
||||
o->iso_data_source= NULL;
|
||||
o->read_pacifier= NULL;
|
||||
o->read_pacifier_handle= NULL;
|
||||
o->msgs_submit= NULL;
|
||||
@ -175,7 +177,8 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
||||
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
||||
if(o->iso_source!=NULL)
|
||||
burn_source_free(o->iso_source);
|
||||
|
||||
if(o->iso_data_source!=NULL)
|
||||
iso_data_source_unref(o->iso_data_source);
|
||||
free((char *) o);
|
||||
*objpt= NULL;
|
||||
return(1);
|
||||
@ -334,10 +337,14 @@ int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= modifying rather than growing
|
||||
bit1= prepare for early release of input drive:
|
||||
wait until input and then disable image data source
|
||||
*/
|
||||
static
|
||||
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts, int new_img)
|
||||
struct isoburn_imgen_opts *opts, int flag)
|
||||
{
|
||||
struct burn_source *wsrc;
|
||||
struct burn_session *session;
|
||||
@ -345,7 +352,18 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
struct isoburn *in_o, *out_o;
|
||||
IsoWriteOpts *wopts= NULL;
|
||||
enum burn_disc_status state;
|
||||
int ret, fifo_chunks, lba, nwa;
|
||||
int ret, fifo_chunks, lba, nwa, i, new_img, early_indev_release;
|
||||
size_t buffer_size= 0, buffer_free= 0;
|
||||
char msg[160];
|
||||
|
||||
new_img= flag&1;
|
||||
early_indev_release= flag&2;
|
||||
if(new_img && early_indev_release) {
|
||||
isoburn_msgs_submit(in_o, 0x00060000,
|
||||
"Programming error: Wrong session setup: new_img && early_indev_release",
|
||||
0, "FATAL", 0);
|
||||
{ret= -4; goto ex;}
|
||||
}
|
||||
|
||||
ret= isoburn_find_emulator(&in_o, in_d, 0);
|
||||
if(ret<0 || in_o==NULL)
|
||||
@ -405,21 +423,15 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
||||
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
||||
|
||||
|
||||
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
|
||||
opts->effective_lba= nwa;
|
||||
ret= isoburn_get_msc2(out_o, NULL, &nwa, 0);
|
||||
if (ret != 1) {
|
||||
isoburn_msgs_submit(out_o, 0x00060000,
|
||||
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
||||
{ret= -3; goto ex;}
|
||||
}
|
||||
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
|
||||
isoburn_msgs_submit(out_o, 0x00060000,
|
||||
"Encountered 0 as next writeable address of appendable",
|
||||
0, "FAILURE", 0);
|
||||
{ret= -4; goto ex;}
|
||||
}
|
||||
iso_write_opts_set_ms_block(wopts, nwa);
|
||||
opts->effective_lba= nwa;
|
||||
iso_write_opts_set_appendable(wopts, !new_img);
|
||||
iso_write_opts_set_overwrite_buf(wopts,
|
||||
nwa>0 ? out_o->target_iso_head : NULL);
|
||||
@ -429,6 +441,30 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
if (early_indev_release) {
|
||||
for(i= 0; i<300; i++) {
|
||||
|
||||
/* <<< ??? */
|
||||
if((i%30) == 0) {
|
||||
sprintf(msg, "Waiting for data in fifo since %d seconds", i/30);
|
||||
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
}
|
||||
|
||||
usleep(100000);
|
||||
ret= iso_ring_buffer_get_status(wsrc, &buffer_size, &buffer_free);
|
||||
if(ret >0 && buffer_size != buffer_free)
|
||||
break;
|
||||
}
|
||||
|
||||
/* <<< ??? */
|
||||
sprintf(msg,
|
||||
"After %.1f seconds: %d bytes of output available (fifo state=%d)",
|
||||
((double) i+1) / 10.0, (int) (buffer_size - buffer_free), ret);
|
||||
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
|
||||
if(in_o->iso_data_source!=NULL)
|
||||
isoburn_data_source_shutdown(in_o->iso_data_source, 0);
|
||||
}
|
||||
|
||||
/* TODO check return values for failure. propertly clean-up on error */
|
||||
|
||||
@ -474,6 +510,30 @@ int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
||||
}
|
||||
|
||||
|
||||
/* API since 0.2.2 */
|
||||
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive, int nwa)
|
||||
{
|
||||
int ret;
|
||||
struct isoburn *o= NULL;
|
||||
|
||||
ret= isoburn_find_emulator(&o, out_drive, 0);
|
||||
if(ret<0 || o==NULL)
|
||||
return(-1);
|
||||
if(nwa >= 0)
|
||||
o->fabricated_msc2= nwa;
|
||||
if(o->nwa == o->zero_nwa)
|
||||
o->nwa= o->zero_nwa= 0;
|
||||
else
|
||||
o->zero_nwa= 0;
|
||||
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 2);
|
||||
if (ret<=0)
|
||||
return ret;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* API @since 0.1.0
|
||||
@param flag bit0= this is a regular end, not an abort
|
||||
give up source reference
|
||||
|
@ -60,6 +60,14 @@ struct isoburn {
|
||||
*/
|
||||
int fabricated_msc1;
|
||||
|
||||
/* If >= 0, this address is used in isoburn_disc_track_lba_nwa()
|
||||
as reply parameter nwa.
|
||||
(The other nwa parameters below apply only to the effective write address
|
||||
on random access media. msc2 is handed to libisofs but not to libburn.)
|
||||
*/
|
||||
int fabricated_msc2;
|
||||
|
||||
|
||||
/* The nwa to be used for a first session on the present kind of overwriteable
|
||||
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
||||
*/
|
||||
@ -71,6 +79,7 @@ struct isoburn {
|
||||
/* Aligned start address to be used for processing (counted in blocks) */
|
||||
int nwa;
|
||||
|
||||
|
||||
/* Truncate to .nwa an eventual regular file serving as output drive */
|
||||
int truncate;
|
||||
|
||||
@ -99,6 +108,10 @@ struct isoburn {
|
||||
/* Libisofs image context */
|
||||
IsoImage *image;
|
||||
|
||||
/* The block data source from which the existing image is read.
|
||||
*/
|
||||
IsoDataSource *iso_data_source;
|
||||
|
||||
/* The burn source which transfers data from libisofs to libburn.
|
||||
It has its own fifo.
|
||||
*/
|
||||
@ -190,6 +203,19 @@ int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||
*/
|
||||
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||
|
||||
/** Obtains the image address offset to be used with image generation.
|
||||
This is either the (emulated) drive nwa or a value set by
|
||||
isoburn_prepare_blind_grow().
|
||||
In any case this is the address to tell to iso_write_opts_set_ms_block().
|
||||
@param o The isoburn object to be inquired
|
||||
@param opts If not NULL: write parameters to be set on drive before query
|
||||
@param msc2 The value to be used with iso_write_opts_set_ms_block()
|
||||
@param flag unused yet
|
||||
@return <=0 is failure , >0 success
|
||||
*/
|
||||
int isoburn_get_msc2(struct isoburn *o,
|
||||
struct burn_write_opts *opts, int *msc2, int flag);
|
||||
|
||||
/** Get a data source suitable for read from a drive using burn_read_data()
|
||||
function.
|
||||
@param d drive to read from. Must be grabbed.
|
||||
@ -200,6 +226,19 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||
IsoDataSource *
|
||||
isoburn_data_source_new(struct burn_drive *d);
|
||||
|
||||
/** Disable read capabilities of a data source which was originally created
|
||||
by isoburn_data_source_new(). After this any attempt to read will yield
|
||||
a FATAL programming error event.
|
||||
This is usually done to allow libburn to release the drive while libisofs
|
||||
still holds a reference to the data source object. libisofs is not supposed
|
||||
to use this object for reading any more, nevertheless. The disabled state
|
||||
of the data source is a safety fence around this daring situation.
|
||||
@param src The data source to be disabled
|
||||
@param flag unused yet
|
||||
@return <=0 is failure , >0 success
|
||||
*/
|
||||
int isoburn_data_source_shutdown(IsoDataSource *src, int flag);
|
||||
|
||||
|
||||
/**
|
||||
* Options for image reading.
|
||||
|
@ -212,6 +212,9 @@ create_blank_image:;
|
||||
*/
|
||||
|
||||
ds = isoburn_data_source_new(d);
|
||||
if(o->iso_data_source!=NULL)
|
||||
iso_data_source_unref(o->iso_data_source);
|
||||
o->iso_data_source= ds;
|
||||
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
||||
isoburn_idle_free_function);
|
||||
if(o->read_pacifier_handle==NULL)
|
||||
@ -221,7 +224,7 @@ create_blank_image:;
|
||||
ret = iso_image_import(o->image, ds, ropts, &features);
|
||||
iso_tree_set_report_callback(o->image, NULL);
|
||||
iso_read_opts_free(ropts);
|
||||
iso_data_source_unref(ds);
|
||||
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
||||
return ret;
|
||||
@ -277,6 +280,8 @@ int isoburn_activate_session(struct burn_drive *drive)
|
||||
|
||||
if (o->emulation_mode != 1)
|
||||
return 1; /* don't need to activate session */
|
||||
if (o->fabricated_msc2 >= 0)
|
||||
return 1; /* blind growing: do not alter anything outside the session */
|
||||
|
||||
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
||||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
||||
|
@ -75,23 +75,35 @@ job parameters. It rather states its desires which libisoburn tries to
|
||||
fulfill, or else will refuse to start the write run.
|
||||
|
||||
|
||||
Setup for Growing or Modifying
|
||||
Setup for Growing, Modifying or Blind Growing
|
||||
|
||||
The connector function family offers two alternative API calls for performing
|
||||
the setup for two alternative image generation strategies.
|
||||
The connector function family offers alternative API calls for performing
|
||||
the setup for several alternative image generation strategies.
|
||||
|
||||
Growing:
|
||||
If input and output drive is the same, then isoburn_prepare_disc() is to
|
||||
If input and output drive are the same, then isoburn_prepare_disc() is to
|
||||
be used. It will lead to an add-on session on appendable or overwriteable
|
||||
media with existing ISO image. With blank media it will produce a first
|
||||
session.
|
||||
|
||||
Modifying:
|
||||
If the output drive is not the input drive, then it has to bear blank media
|
||||
or overwriteable without a valid ISO image. To prepare for such an image
|
||||
generation run, use isoburn_prepare_new_image(). The run will copy file data
|
||||
from an eventual input drive with valid image, add any newly introduced data
|
||||
from the local filesystem, and produce a first session on output media.
|
||||
If the output drive is not the input drive, and if it bears blank media
|
||||
or overwriteable without a valid ISO image, then one may produce a consolidated
|
||||
image with old and new data. This will copy file data from an eventual input
|
||||
drive with valid image, add any newly introduced data from the local
|
||||
filesystem, and produce a first session on output media.
|
||||
To prepare for such an image generation run, use isoburn_prepare_new_image().
|
||||
|
||||
Blind Growing:
|
||||
This method reads the old image from one drive and writes the add-on session
|
||||
to a different drive. That output drive is nevertheless supposed to
|
||||
finally lead to the same media from where the session was loaded. Usually it
|
||||
will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program
|
||||
like with this classic gesture:
|
||||
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||
Blind growing is prepared by the call isoburn_prepare_blind_grow().
|
||||
The input drive should be released immediately after this call in order
|
||||
to allow the consumer of the output stream to access that drive for writing.
|
||||
|
||||
After either of these setups, some peripheral libburn drive parameter settings
|
||||
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
||||
@ -195,8 +207,8 @@ void isoburn_version(int *major, int *minor, int *micro);
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_libburn_req_major 0
|
||||
#define isoburn_libburn_req_minor 4
|
||||
#define isoburn_libburn_req_micro 8
|
||||
#define isoburn_libburn_req_minor 5
|
||||
#define isoburn_libburn_req_micro 0
|
||||
|
||||
|
||||
/** The minimum version of libisofs to be used with this version of libisoburn
|
||||
@ -232,7 +244,7 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
|
||||
*/
|
||||
#define isoburn_header_version_major 0
|
||||
#define isoburn_header_version_minor 2
|
||||
#define isoburn_header_version_micro 0
|
||||
#define isoburn_header_version_micro 2
|
||||
/** Note:
|
||||
Above version numbers are also recorded in configure.ac because libtool
|
||||
wants them as parameters at build time.
|
||||
@ -421,7 +433,7 @@ 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.
|
||||
/** Set up 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.
|
||||
@ -438,7 +450,11 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||
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.
|
||||
@param flag Bitfield for control purposes.
|
||||
bit0= @since 0.2.2
|
||||
with adr_mode 3: adr_value might be 16 blocks too high
|
||||
(e.g. -C stemming from growisofs). Probe for ISO head
|
||||
at adr_value-16 and eventually adjust setting.
|
||||
*/
|
||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||
int flag);
|
||||
@ -558,7 +574,7 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
||||
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||
|
||||
|
||||
/** Try whether at the data at the given address look like a ISO 9660
|
||||
/** Try whether the data at the given address look like a ISO 9660
|
||||
image header and obtain its alleged size. Depending on the info mode
|
||||
one other string of text information can be retrieved too.
|
||||
@since 0.1.6
|
||||
@ -568,8 +584,15 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||
@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
|
||||
1= copy volume id to info (info needs 33 bytes)
|
||||
2= @since 0.2.2 :
|
||||
copy 64 kB header to info (needs 65536 bytes)
|
||||
bit13= @since 0.2.2:
|
||||
do not read head from media but use first 64 kB from info
|
||||
bit14= check both half buffers (not only second)
|
||||
return 2 if found in first block
|
||||
bit15= return-1 on read error
|
||||
@return >0 seems to be a valid ISO image, 0 format not recognized, <0 error
|
||||
*/
|
||||
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||
int *image_blocks, char *info, int flag);
|
||||
@ -1031,6 +1054,9 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
|
||||
case of random access media this will always be 0. Succesfull return is
|
||||
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
||||
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE.
|
||||
Note: The result of this call may be fabricated by a previous call of
|
||||
isoburn_set_msc1() which can override the rule to load the most recent
|
||||
session.
|
||||
Wrapper for: burn_disc_get_msc1()
|
||||
@since 0.1.0
|
||||
@param d The drive to inquire
|
||||
@ -1068,7 +1094,8 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
|
||||
int flag);
|
||||
|
||||
|
||||
/** Create a disc object for writing the new session from the created or loaded
|
||||
/** To choose the expansion method of Growing:
|
||||
Create a disc object for writing the new session from the created or loaded
|
||||
iso_volset which has been manipulated via libisofs, to the same media from
|
||||
where the image was eventually loaded. This struct burn_disc is ready for
|
||||
use by a subsequent call to isoburn_disc_write().
|
||||
@ -1085,9 +1112,10 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts);
|
||||
|
||||
|
||||
/** Create a disc object for producing a new image from a previous image
|
||||
/** To choose the expansion method of Modifying:
|
||||
Create a disc object for producing a new image from a previous image
|
||||
plus the changes made by user. The generated burn_disc is suitable
|
||||
to be written to any grabbed libburn drive with blank writeable media.
|
||||
to be written to a grabbed drive with blank writeable media.
|
||||
But you must not use the same drive for input and output, because data
|
||||
will be read from the source drive while at the same time the target
|
||||
drive is already writing.
|
||||
@ -1095,15 +1123,11 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||
burn_disc_write().
|
||||
@since 0.1.0
|
||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
||||
@param in_drive The input drive, grabbed with isoburn_drive_aquire() or
|
||||
one of its alternatives.
|
||||
@param disc Returns the newly created burn_disc object.
|
||||
@param opts Options for image generation and data transport to media.
|
||||
@param out_drive The libburn drive which shall be write target.
|
||||
If the drive was grabbed via libisoburn then it can later
|
||||
access the libisofs source fifo via
|
||||
isoburn_get_fifo_status().
|
||||
Mere libburn drives cannot obtain this info.
|
||||
In that case out_drive may be NULL, as well.
|
||||
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||
@ -1111,7 +1135,52 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive);
|
||||
|
||||
/** @since 0.1.0
|
||||
|
||||
/** To choose the expansion method of Blind Growing:
|
||||
Create a disc object for writing an add-on session from the created or
|
||||
loaded IsoImage which has been manipulated via libisofs, to a different
|
||||
drive than the one from where it was loaded.
|
||||
Usually output will be stdio:/dev/fd/1 (i.e. stdout) being piped
|
||||
into some burn program like with this classic gesture:
|
||||
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||
Parameter translation into libisoburn:
|
||||
$dev is the address by which parameter in_drive of this call was aquired
|
||||
$msc1 was set by isoburn_set_msc1() before image reading
|
||||
or was detected from the in_drive media
|
||||
$nwa is a parameter of this call
|
||||
or can be used as detected from the in_drive media
|
||||
|
||||
This call waits for libisofs output to become available and then detaches
|
||||
the input drive object from the data source object by which libisofs was
|
||||
reading from the input drive.
|
||||
So, as far as libisofs is concerned, that drive may be released immediately
|
||||
after this call in order to allow the consumer to access the drive for
|
||||
writing.
|
||||
The consumer should wait for input to become available and only then open
|
||||
its burn drive. With cdrecord this is caused by option -waiti.
|
||||
|
||||
The resulting burn_disc object has to be disposed when all its writing
|
||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||
burn_disc_write().
|
||||
@since 0.2.2
|
||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
||||
@param disc Returns the newly created burn_disc object.
|
||||
@param opts Options for image generation and data transport to media.
|
||||
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||
typically stdio:/dev/fd/1 .
|
||||
@param nwa The address (2048 byte block count) where the add-on
|
||||
session will be finally stored on a mountable media
|
||||
or in a mountable file.
|
||||
If nwa is -1 then the address is used as determined from
|
||||
the in_drive media.
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive, int nwa);
|
||||
|
||||
|
||||
/**
|
||||
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
|
||||
running isoburn_disc_write().
|
||||
libisofs reserves resources and maybe already starts generating the
|
||||
@ -1193,8 +1262,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
|
||||
int isoburn_activate_session(struct burn_drive *drive);
|
||||
|
||||
|
||||
/** @since 0.1.0
|
||||
Wait after normal end of operations until libisofs ended all write
|
||||
/** Wait after normal end of operations until libisofs ended all write
|
||||
threads and freed resource reservations.
|
||||
This call is not mandatory. But without it, messages from the ending
|
||||
threads might appear after the application ended its write procedure.
|
||||
@ -1210,21 +1278,6 @@ int isoburn_sync_after_write(struct burn_drive *input_drive,
|
||||
struct burn_drive *output_drive, int flag);
|
||||
|
||||
|
||||
#if 0
|
||||
/* >>> NOT YET IMPLEMENTED <<< */
|
||||
/** Write a new session to a disc.
|
||||
This is a synchronous call equivalent to isoburn_prepare_disc +
|
||||
isoburn_disc_write + isoburn_activate_session
|
||||
@param pacifier_func If not NULL: a function to produce appeasing messages.
|
||||
See burn_abort_pacifier() in libburn.h for an example.
|
||||
*/
|
||||
/* TODO implement this */
|
||||
int isoburn_perform_write(struct burn_write_opts *o,
|
||||
int (*pacifier_func)(void *handle, int patience,
|
||||
int elapsed));
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
/** Release an aquired drive.
|
||||
Wrapper for: burn_drive_release()
|
||||
@since 0.1.0
|
||||
|
@ -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.2.2.pl00.tar.gz
|
||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -36,10 +36,10 @@ The tarball contains anything that is needed except libc and libpthread.
|
||||
libreadline and the readline-dev headers will make dialog mode more convenient,
|
||||
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.2.2.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.2.2.pl00.tar.gz
|
||||
cd xorriso-0.2.2
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -69,6 +69,11 @@ It gets installed with "make install" but may also be placed manually in the
|
||||
./man1 directory below one of the directories mentioned in environment
|
||||
variable $MANPATH.
|
||||
|
||||
The installation creates several alias links pointing to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||
|
||||
|
||||
Drives and Disk File Objects
|
||||
|
||||
@ -161,8 +166,8 @@ 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
|
||||
Dynamic library and compile time header requirements for libisoburn-0.2.2 :
|
||||
- libburn.so.4 , version libburn-0.5.0 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
headers seen at compile time. So compile in the oldest possible installation
|
||||
|
@ -2951,7 +2951,7 @@ Corrected mistake in xorriso man page
|
||||
xorriso/xorriso.c
|
||||
Removed duplicated help text snippet
|
||||
|
||||
22 Jun 2008 [1783]
|
||||
2008.06.22.090001 [1873]
|
||||
configure.ac
|
||||
README
|
||||
libisoburn/libisoburn.h
|
||||
@ -2964,7 +2964,7 @@ xorriso/make_xorriso_standalone.sh
|
||||
xorriso/configure_ac.txt
|
||||
Version leap to 0.2.0
|
||||
|
||||
[]
|
||||
22 Jun 2008 [1874]
|
||||
xorriso/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
@ -2976,10 +2976,349 @@ Documented changes and release timestamp
|
||||
* New options -map_l, -compare_l, -update_l, -extract_l
|
||||
* New API functions isoburn_set_msgs_submit(), isoburn_drive_set_msgs_submit()
|
||||
|
||||
2008.06.22.111236 [1875]
|
||||
xorriso/xorriso.c
|
||||
Removed duplicated help text snippet
|
||||
|
||||
2008.06.22.135202 [1876]
|
||||
configure.ac
|
||||
README
|
||||
libisoburn/libisoburn.h
|
||||
xorriso/README
|
||||
xorriso/xorriso_timestamp.h
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorriso_eng.html
|
||||
xorriso/make_xorriso_standalone.sh
|
||||
xorriso/configure_ac.txt
|
||||
Version leap to 0.2.1
|
||||
|
||||
22 Jun 2008 [1877]
|
||||
xorriso/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.06.22.135202
|
||||
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 -
|
||||
------------------------------------ cycle - xorriso-0.2.1 -
|
||||
2008.06.27.124201 [1880]
|
||||
xorriso/xorrisoburn.c
|
||||
Bug fix: -as cdrecord -atip falsely announced overwriteable DVD-RW to sdvdbackup
|
||||
|
||||
2008.06.27.130235 [1881]
|
||||
xorriso/xorriso.c
|
||||
Extended -as cdrecord blank= by blank type format_overwrite
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.06.27.130235
|
||||
|
||||
|
||||
2008.07.03.133023 [1882]
|
||||
xorriso/xorriso.c
|
||||
Flushing stdout after each result text to deconfuse stdout/stderr with SSH
|
||||
|
||||
2008.07.04.070001 [1884]
|
||||
xorriso/xorriso.c
|
||||
Supporting option -as cdrecord -waiti
|
||||
|
||||
2008.07.05.132528 [1885]
|
||||
libisoburn/libisoburn.h
|
||||
libisoburn/isoburn.h
|
||||
libisoburn/isoburn.c
|
||||
libisoburn/isofs_wrap.c
|
||||
libisoburn/burn_wrap.c
|
||||
libisoburn/data_source.c
|
||||
New API function isoburn_prepare_blind_grow() for -as mkisofs -multi
|
||||
|
||||
2008.07.05.133721 [1886]
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
New option -grow_blindly
|
||||
|
||||
2008.07.05.180241 [1887]
|
||||
libisoburn/isoburn.c
|
||||
Fixed a bug with -grow_blindly to overwriteable media
|
||||
|
||||
2008.07.05.182424 [1888]
|
||||
xorriso/xorriso.h
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorriso.1
|
||||
New options -C and -M for -as mkisofs
|
||||
|
||||
2008.07.05.184434 [1889]
|
||||
xorriso/xorriso.c
|
||||
Cared for a peculiarity of growisofs when using mkisofs -C
|
||||
|
||||
5 Jul 2008 [1890]
|
||||
xorriso/xorriso_eng.html
|
||||
Updated xorriso homepage
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.05.184434
|
||||
* New API function isoburn_prepare_blind_grow()
|
||||
* New option -grow_blindly
|
||||
* New options -C and -M for -as mkisofs emulation
|
||||
|
||||
|
||||
2008.07.06.110336 [1891]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorrisoburn.c
|
||||
Improved effective drive address with -as mkisofs -M
|
||||
|
||||
2008.07.07.095531 [1892]
|
||||
xorriso/xorriso.c
|
||||
Fixed bug about -as mkisofs without -C
|
||||
|
||||
2008.07.07.102941 [1893]
|
||||
xorriso/xorriso.h
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorriso.c
|
||||
Semi-permanent emulation by start names xorrisofs,genisofs,mkisofs,genioimage
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.07.102941
|
||||
|
||||
2008.07.07.150241 [1894]
|
||||
xorriso/xorriso.c
|
||||
Correction about -as mkisofs -C if already an input device was set
|
||||
|
||||
2008.07.07.150337 [1895]
|
||||
libisoburn/isoburn.c
|
||||
Correction about isoburn_igopt_get_effective_lba() with blind growing
|
||||
|
||||
7 Jul 2008 [1896]
|
||||
xorriso/xorriso.1
|
||||
Clarification about -grow_blindly predicted_nwa
|
||||
|
||||
2008.07.07.150337 [1897]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorriso.1
|
||||
Made leafname triggered emulation more similar to -as emulation
|
||||
|
||||
2008.07.08.092732 [1898]
|
||||
Makefile.am
|
||||
README
|
||||
xorriso/xorriso_makefile_am.txt
|
||||
xorriso/README
|
||||
Installing softlinks xorrisofs and osirrox pointing to the xorriso binary
|
||||
|
||||
2008.07.08.102622 [1899]
|
||||
xorriso/xorriso_private.h
|
||||
Header file forgotten with rev 1897
|
||||
|
||||
2008.07.08.132054 [1900]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
Avoided misleading message about emptied ISO image during -as mkisofs -C
|
||||
|
||||
8 Jul 2008 [1901]
|
||||
xorriso/xorriso_eng.html
|
||||
Documented newest progress
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.08.132054
|
||||
* Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
|
||||
* make install creates xorriso aliases as symbolic links: osirrox, xorrisofs
|
||||
|
||||
2008.07.09.055133 [1901]
|
||||
xorriso/xorriso.c
|
||||
Avoided to use MMC code with -as mkisofs -M by prepending stdio: to address
|
||||
|
||||
2008.07.09.055133 [1902]
|
||||
xorriso/xorriso.h
|
||||
xorriso/xorriso.c
|
||||
Fixed bug with -as mkisofs -x and pattern expansion
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.09.055133
|
||||
|
||||
|
||||
2008.07.09.155540 [1903]
|
||||
Makefile.am
|
||||
xorriso/xorriso_private.h
|
||||
+ xorriso/xorriso_buildstamp.h
|
||||
+ xorriso/xorriso_buildstamp_none.h
|
||||
xorriso/xorriso_makefile_am.txt
|
||||
xorriso/make_xorriso_standalone.sh
|
||||
Opportunity to generate build timestamp via make buildstamped
|
||||
|
||||
9 Jul 2008 [1904]
|
||||
xorriso/xorriso_makefile_am.txt
|
||||
Completed (unused) dist rule of standalone-xorriso
|
||||
|
||||
2008.07.10.141731 [1905]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
Enabled -multi and -msinfo with -as cdrecord
|
||||
|
||||
2008.07.10.141913 [1906]
|
||||
libisoburn/libisoburn.h
|
||||
Small correction in API introduction text
|
||||
|
||||
2008.07.10.144535 [1907]
|
||||
xorriso/xorriso_private.h
|
||||
Header file forgotten with rev 1903
|
||||
|
||||
2008.07.10.162809 [1908]
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorriso.1
|
||||
cdrecord emulation by start names xorrecord, cdrecord, wodim, cdrskin
|
||||
|
||||
2008.07.10.164015 [1909]
|
||||
xorriso/xorriso.c
|
||||
Reacted on compiler warning
|
||||
|
||||
2008.07.10.164412 [1910]
|
||||
Makefile.am
|
||||
README
|
||||
xorriso/xorriso_makefile_am.txt
|
||||
xorriso/README
|
||||
Installing softlink xorrecord pointing to the xorriso binary
|
||||
|
||||
10 Jul 2008 [1911]
|
||||
xorriso/xorriso.1
|
||||
xorriso/xorriso_eng.html
|
||||
xorriso/convert_man_to_html.sh
|
||||
Some documentation updates
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.10.164412
|
||||
* New options -multi and -msinfo for -as cdrecord emulation
|
||||
* make install creates xorriso alias as symbolic link: xorrecord
|
||||
|
||||
|
||||
2008.07.12.181846 [1912]
|
||||
libisoburn/libisoburn.h
|
||||
libisoburn/burn_wrap.c
|
||||
New info mode 2 with isoburn_read_iso_head()
|
||||
|
||||
2008.07.12.184833 [1913]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
New options --grow_overwriteable_iso and write_start_address= with -as cdrecord
|
||||
|
||||
2008.07.14.114515 [1918]
|
||||
libisoburn/libisoburn.h
|
||||
Required libburn version is now 0.4.9
|
||||
|
||||
2008.07.14.114613 [1919]
|
||||
configure.ac
|
||||
Did LT_CURRENT++, LT_AGE++ which was forgotten with revision 1885
|
||||
|
||||
2008.07.14.120527 [1920]
|
||||
libisoburn/libisoburn.h
|
||||
libisoburn/burn_wrap.c
|
||||
New flag options with isoburn_read_iso_head()
|
||||
|
||||
2008.07.14.125133 [1921]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
New option -isosize with -as cdrecord
|
||||
|
||||
14 Jul 2008 [1923]
|
||||
xorriso/convert_man_to_html.sh
|
||||
Small correction with a sed expression
|
||||
|
||||
2008.07.15.063040 [1924]
|
||||
xorriso/xorriso_makefile_am.txt
|
||||
Generating automatic build timestamp
|
||||
|
||||
2008.07.15.121754 [1925]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
New option tsize= with -as cdrecord
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.15.121754
|
||||
* New options --grow_overwriteable_iso and write_start_address= with -as cdrecord
|
||||
* New options -isosize and tsize= with -as cdrecord
|
||||
|
||||
|
||||
2008.07.16.130711 [1933]
|
||||
xorriso/xorriso.h
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
New option -pacifier, more compatible pacifier with -as mkisofs
|
||||
|
||||
2008.07.16.130758 [1934]
|
||||
xorriso/configure_ac.txt
|
||||
Updated xorriso standalone configure.ac version number BURN_*_VERSION
|
||||
|
||||
2008.07.16.130841 [1935]
|
||||
libisoburn/libisoburn.h
|
||||
Required libburn version is now 0.5.0
|
||||
|
||||
2008.07.16.131110 [1936]
|
||||
configure.ac
|
||||
Required libburn version is now 0.5.0
|
||||
|
||||
2008.07.16.140043 [1937]
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorriso.1
|
||||
Recognizing "b" as speed factor for BD media
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.16.140043
|
||||
* New option -pacifier, more compatible pacifier with -as mkisofs
|
||||
|
||||
2008.07.17.110812 [1939]
|
||||
libisoburn/libisoburn.h
|
||||
libisoburn/burn_wrap.c
|
||||
Ability to emulate a featured bug with mkisofs -C : read 16 block too early
|
||||
|
||||
2008.07.17.111411 [1940]
|
||||
xorriso/xorriso.h
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
xorriso/xorriso.1
|
||||
Rectified usage of original xorriso options underneath growisofs
|
||||
|
||||
2008.07.17.183024 [1941]
|
||||
libisoburn/burn_wrap.c
|
||||
Recognizing growisofs follow-up sessions on xorriso overwriteables
|
||||
|
||||
2008.07.17.184520 [1942]
|
||||
libisoburn/burn_wrap.c
|
||||
xorriso/xorriso.c
|
||||
xorriso/xorrisoburn.c
|
||||
Removed MULTI construction site remarks
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.1 - 2008.07.17.184520
|
||||
|
||||
2008.07.18.120001 [1944]
|
||||
configure.ac
|
||||
README
|
||||
libisoburn/libisoburn.h
|
||||
xorriso/README
|
||||
xorriso/xorriso_timestamp.h
|
||||
xorriso/xorriso_private.h
|
||||
xorriso/xorrisoburn.h
|
||||
xorriso/xorriso_eng.html
|
||||
xorriso/make_xorriso_standalone.sh
|
||||
xorriso/configure_ac.txt
|
||||
Version leap to 0.2.2
|
||||
|
||||
18 Jul 2008 []
|
||||
xorriso/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
---------------------------------- release - xorriso-0.2.2 - 2008.07.18.120001
|
||||
* New API function isoburn_prepare_blind_grow()
|
||||
* New option -grow_blindly
|
||||
* Options -C and -M for -as mkisofs emulation
|
||||
* Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
|
||||
* make install creates aliases as symbolic links: osirrox, xorrisofs, xorrecord
|
||||
* Options for -as cdrecord emulation: -multi, -msinfo, -isosize, tsize,
|
||||
--grow_overwriteable_iso, write_start_address,
|
||||
* New option -pacifier, more compatible pacifier with -as mkisofs
|
||||
|
||||
|
||||
------------------------------------ cycle - xorriso-0.2.3 -
|
||||
------------------------------------ cycle - xorriso-0.2.3 -
|
||||
|
||||
|
||||
===============================================================================
|
||||
@ -2990,12 +3329,11 @@ Documented changes and release timestamp
|
||||
|
||||
------------------------------------------------- important
|
||||
|
||||
|
||||
------------------------------------------------- development
|
||||
|
||||
??? Clarify handling of links in ISO and on disk during restore
|
||||
|
||||
- mkisofs,cdrecord multi session
|
||||
|
||||
> Relative addressing and pattern matching :
|
||||
iso_rr_pattern on
|
||||
cd /u/FERTIG
|
||||
@ -3033,9 +3371,22 @@ Documented changes and release timestamp
|
||||
|
||||
- Error code for libisoburn data source read errors.
|
||||
|
||||
- Proper reaction on severity of errors issued by data_source
|
||||
(currently even a FATAL gets converted to ISO_FILE_READ_ERROR
|
||||
in iso_stream_read())
|
||||
|
||||
- #define ISO_ERR_PRIO(e) ((e & 0x00700000) << 8)
|
||||
(rather than 0x00F00000, see ticket 135)
|
||||
|
||||
- the error handling system should be comprehensively documented
|
||||
and eventually rectified where needed.
|
||||
|
||||
- With softlink /X/YZ and Joliet enabled:
|
||||
libisofs: HINT : Can't add YZ to Joliet tree. This kind of files can only be added to a Rock Ridget tree. Skipping.
|
||||
HINT is not a suitable severity for this. Better: WARNING, SORRY, MISHAP
|
||||
One should at least give the full path of /X/YZ or the type of the file.
|
||||
|
||||
|
||||
------ feature enhancements :
|
||||
|
||||
- Data files >= 4 GiB.
|
||||
|
@ -1,4 +1,4 @@
|
||||
AC_INIT([xorriso], [0.2.0], [http://libburnia-project.org])
|
||||
AC_INIT([xorriso], [0.2.2], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -8,8 +8,8 @@ AC_CANONICAL_TARGET
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=4
|
||||
BURN_MICRO_VERSION=9
|
||||
BURN_MINOR_VERSION=5
|
||||
BURN_MICRO_VERSION=1
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
AC_SUBST(BURN_MINOR_VERSION)
|
||||
AC_SUBST(BURN_MICRO_VERSION)
|
||||
|
@ -47,7 +47,7 @@ then
|
||||
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
-e 's/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
||||
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying:<\/b>/\ <BR><b>Creating, Growing, Modifying:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying, Blind/\ <BR><b>Creating, Growing, Modifying, Blind/' \
|
||||
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||
-e 's/^-dev /\ \ -dev /' \
|
||||
-e 's/^-devices /\ \ -devices /' \
|
||||
|
@ -25,7 +25,7 @@
|
||||
current_dir=$(pwd)
|
||||
lone_dir="$current_dir"/"xorriso-standalone"
|
||||
|
||||
xorriso_rev=0.2.0
|
||||
xorriso_rev=0.2.2
|
||||
# For unstable uploads:
|
||||
# xorriso_pl=""
|
||||
# For stable releases:
|
||||
@ -124,12 +124,17 @@ copy_files \
|
||||
xorriso/xorrisoburn.[ch] \
|
||||
xorriso/xorriso.[ch1] \
|
||||
xorriso/xorriso_private.h \
|
||||
\
|
||||
xorriso/xorriso_timestamp.h \
|
||||
\
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_eng.html \
|
||||
xorriso/man_1_xorriso.html \
|
||||
"$lone_dir"/xorriso
|
||||
|
||||
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||
"$lone_dir"/xorriso/xorriso_buildstamp.h
|
||||
|
||||
create_dir "$lone_dir"/test
|
||||
copy_files \
|
||||
test/compare_file.c \
|
||||
|
@ -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 "Jul, 17, 2008"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.\"
|
||||
.\" Some roff macros, for reference:
|
||||
@ -50,11 +50,10 @@ Changes file properties in the ISO image.
|
||||
.br
|
||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||
.br
|
||||
Can write result as completely new image to optical media or
|
||||
filesystem objects.
|
||||
Writes result either as completely new image or as add-on session
|
||||
to optical media or filesystem objects.
|
||||
.br
|
||||
Can write result as add-on session to appendable multi-session media,
|
||||
to overwriteable media, to regular files, and to block devices.
|
||||
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
||||
.br
|
||||
Can restore files from ISO image to disk filesystem (see osirrox).
|
||||
.br
|
||||
@ -72,7 +71,7 @@ Session model
|
||||
.br
|
||||
Media types and states
|
||||
.br
|
||||
Creating, Growing, Modifying
|
||||
Creating, Growing, Modifying, Blind Growing
|
||||
.br
|
||||
Libburn drives
|
||||
.br
|
||||
@ -121,7 +120,8 @@ filesystems. This expansion method is referred as emulated growing.
|
||||
.PP
|
||||
xorriso provides both ways of growing as well as an own method named
|
||||
\fBmodifying\fR which produces a completely new ISO image from the old
|
||||
one and the modifications. See paragraph Creating, Growing, Modifying below.
|
||||
one and the modifications.
|
||||
See paragraph Creating, Growing, Modifying, Blind Growing below.
|
||||
.PP
|
||||
xorriso adopts the concept of multi-session by loading an eventual image
|
||||
directory tree, allowing to manipulate it by several actions, and to write
|
||||
@ -196,7 +196,7 @@ contain unrecognizable data in the first 32 data blocks.
|
||||
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.
|
||||
.SS
|
||||
.B Creating, Growing, Modifying:
|
||||
.B Creating, Growing, Modifying, Blind Growing:
|
||||
.br
|
||||
A new empty ISO image gets \fBcreated\fR
|
||||
if there is no input drive with a valid
|
||||
@ -229,11 +229,25 @@ named pipes, character devices, sockets.
|
||||
On the other hand modified sessions cannot be written to appendable media
|
||||
but to blank media only.
|
||||
.br
|
||||
Modifying takes place whenever input drive and output drive are not the same.
|
||||
This is achieved by options -indev and -outdev.
|
||||
.br
|
||||
So for this method one needs either two optical drives or has to work with
|
||||
filesystem objects as source and/or target media.
|
||||
.br
|
||||
Modifying takes place if input drive and output drive are not the same and
|
||||
if option -grow_blindly is set to its default "off".
|
||||
This is achieved by options -indev and -outdev.
|
||||
.PP
|
||||
If option -grow_blindly is set to a non-negative number and if -indev and
|
||||
-outdev are both set to different drives, then \fBblind growing\fR is
|
||||
performed. It produces an add-on session which is ready for being written
|
||||
to the given block address. This is the usage model of
|
||||
.br
|
||||
mkisofs -M $indev -C $msc1,$msc2 -o $outdev
|
||||
.br
|
||||
which gives much room for wrong parameter combinations and should thus only be
|
||||
employed if a strict distinction between ISO formatter xorriso and the burn
|
||||
program is desired. -C $msc1,$msc2 is equivalent to:
|
||||
.br
|
||||
-load sbsector $msc1 -grow_blindly $msc2
|
||||
.SS
|
||||
.B Libburn drives:
|
||||
.br
|
||||
@ -245,8 +259,8 @@ Rock Ridge info must be present in existing ISO images and it will be generated
|
||||
by the program unconditionally.
|
||||
.PP
|
||||
Output drive, i.e. target for writing, can be any libburn drive.
|
||||
Some drive types do not support the method of growing but only the method
|
||||
of modifying. They all are suitable for newly created images.
|
||||
Some drive types do not support the method of growing but only the methods
|
||||
of modifying and blind growing. They all are suitable for newly created images.
|
||||
.br
|
||||
All drive file objects have to offer rw-permission to the user of xorriso.
|
||||
Even those which will not be useable for reading an ISO image.
|
||||
@ -277,7 +291,8 @@ their path in the filesystem. E.g.:
|
||||
If path leads to a regular file or to a block device then the emulated drive
|
||||
is random access readable and can be used for the method of growing if it
|
||||
already contains a valid ISO 9660 image. Any other file type is not readable
|
||||
via "stdio:" and can only be used as target for the method of modifying.
|
||||
via "stdio:" and can only be used as target for the method of modifying or
|
||||
blind growing.
|
||||
Non existing paths in existing directories are handled as empty regular files.
|
||||
.PP
|
||||
A very special kind of pseudo drive are open file descriptors. They are
|
||||
@ -289,7 +304,7 @@ To prevent a fatal intermingling of ISO image and text messages, all result
|
||||
texts get redirected to stderr if -*dev "-" or "stdio:/dev/fd/1" is among
|
||||
the start arguments of the program.
|
||||
.br
|
||||
Standard output is currently suitable for creating a single new session
|
||||
Standard output is currently suitable for creating one session
|
||||
per program run without dialog. Use in other situations is discouraged
|
||||
and several restrictions apply:
|
||||
.br
|
||||
@ -427,13 +442,15 @@ 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
|
||||
from -outdev then switch from growing to modifying. The same rules and
|
||||
restrictions apply as with -dev.
|
||||
from -outdev then switch from growing to modifying or to blind growing.
|
||||
It depends on the setting of -grow_blindly which of both gets activated.
|
||||
The same rules and restrictions apply as with -dev.
|
||||
.TP
|
||||
\fB\-outdev\fR address
|
||||
Set output drive and if it differs from the input drive then switch from
|
||||
growing to modifying. Unlike -dev and -indev this action does not load a
|
||||
new ISO image. So it can be performed even if there are pending changes.
|
||||
growing to modifying or to blind growing. Unlike -dev and -indev this action
|
||||
does not load a new ISO image. So it can be performed even if there are pending
|
||||
changes.
|
||||
.br
|
||||
-outdev can be performed without previous -dev or -indev. In that case an
|
||||
empty ISO image with no changes pending is created. It can either be populated
|
||||
@ -446,6 +463,21 @@ 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\-grow_blindly\fR "off"|predicted_nwa
|
||||
If predicted_nwa is a non-negative number then perform blind growing rather
|
||||
than modifying if -indev and -outdev are set to different drives.
|
||||
"off" or "-1" switch to modifying, which is the default.
|
||||
.br
|
||||
predicted_nwa is the block address where the add-on session of blind
|
||||
growing will finally end up. It is the responsibility of the user to ensure
|
||||
this final position and the presence of the older sessions. Else the
|
||||
overall ISO image will not be mountable or will produce read errors when
|
||||
accessing file content. xorriso will write the session to the address
|
||||
as obtained from examining -outdev and not necessarily to predicted_nwa.
|
||||
.br
|
||||
During a run of blind growing, the input drive gets released before output
|
||||
begins. The output drive gets released when writing is done.
|
||||
.TP
|
||||
\fB\-load\fR entity id
|
||||
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
|
||||
@ -908,8 +940,8 @@ Discard the manipulated ISO image. End program without loading a new image.
|
||||
\fB\-commit\fR
|
||||
Perform the write operation. Afterwards eventually make the
|
||||
-outdev the new -dev and load the image from there.
|
||||
Switch from eventual modifiying mode to growing mode.
|
||||
(A subsequent -outdev will activate modification mode.)
|
||||
Switch to growing mode.
|
||||
(A subsequent -outdev will activate modification mode or blind growing.)
|
||||
-commit is performed automatically at end of program if there
|
||||
are uncommitted manipulations pending.
|
||||
So, to perform a final write operation with no new -dev
|
||||
@ -1196,12 +1228,14 @@ User id to be used for all files when the new ISO tree gets written to media.
|
||||
\fB\-gid\fR gid
|
||||
Group id to be used for all files when the new ISO tree gets written to media.
|
||||
.TP
|
||||
\fB\-speed\fR number[k|m|c|d]
|
||||
\fB\-speed\fR number[k|m|c|d|b]
|
||||
Set the burn speed. Default is 0 = maximum speed.
|
||||
Speed can be given in media dependent numbers or as a
|
||||
desired throughput per second in MMC compliant kB (= 1000)
|
||||
or MB (= 1000 kB). Media x-speed factor can be set explicity
|
||||
by "c" for CD and "d" for DVD. Example speeds:
|
||||
by "c" for CD, "d" for DVD, "b" for BD, "x" is optional.
|
||||
.br
|
||||
Example speeds:
|
||||
.br
|
||||
706k = 706kB/s = 4c = 4xCD
|
||||
.br
|
||||
@ -1717,25 +1751,22 @@ as ISO 9660 image producer and cdrecord as burn program.
|
||||
xorriso does not strive for their comprehensive emulation.
|
||||
Nevertheless it is ready to perform some of its core tasks under control
|
||||
of commands which in said programs trigger comparable actions.
|
||||
The scope is for now only a single first data track to be written to blank or
|
||||
overwriteable media. If possible the media will get closed afterwards.
|
||||
Multi-session is yet only possible via xorriso's own commands.
|
||||
.TP
|
||||
\fB\-as\fR personality option [options] --
|
||||
.br
|
||||
Performs its variable length option list as sparse emulation of the program
|
||||
depicted by the personality word. This is only allowed if no image changes
|
||||
are pending. The input drive is given up.
|
||||
depicted by the personality word.
|
||||
.br
|
||||
|
||||
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
|
||||
supported and lead to failure of the mkisofs emulation. Some are ignored,
|
||||
but better do not rely on this tolerance.
|
||||
Among them: -R (always on), -J, -o, -M, -C, -path-list, -m, -exclude-list,
|
||||
-f, -print-size, -pad, -no-pad, -V, -v, -version, -graft-points,
|
||||
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
|
||||
-graft-points is equivalent to -pathspecs on. Note that pathspecs without "="
|
||||
are interpreted differently than with xorriso option -add. Directories get
|
||||
@ -1746,10 +1777,11 @@ Other than with the "cdrecord" personality there is no automatic -commit at
|
||||
the end of a "mkisofs" option list. Verbosity settings -v (= "UPDATE") and
|
||||
-quiet (= "SORRY") persist. The output file, eventually chosen with -o,
|
||||
persists until things happen like -commit, -rollback, -dev, or end of xorriso.
|
||||
-pacifier gets set to "mkisofs" if files are added to the image.
|
||||
.br
|
||||
If no output file was chosen before or during a "mkisofs" option list, then
|
||||
standard output (-outdev "-") will get into effect before pathspecs get
|
||||
added. If -o points to a regular file, then it will be truncated to 0 bytes
|
||||
If pathspecs are given and if no output file was chosen before or during the
|
||||
"mkisofs" option list, then standard output (-outdev "-") will get into effect.
|
||||
If -o points to a regular file, then it will be truncated to 0 bytes
|
||||
when finally writing begins. This truncation does not happen if the drive
|
||||
is chosen by xorriso options before or after -as mkisofs.
|
||||
Directories and symbolic links are no valid -o targets.
|
||||
@ -1758,20 +1790,33 @@ Writing to stdout is possible only if -as "mkisofs" was among the start
|
||||
arguments or if other start arguments pointed the output drive to
|
||||
standard output.
|
||||
.br
|
||||
Personalites "\fBgenisoimage\fR" and "\fBgenisofs\fR"
|
||||
Personalites "\fBxorrisofs\fR", "\fBgenisoimage\fR", and "\fBgenisofs\fR"
|
||||
are aliases for "mkisofs".
|
||||
.br
|
||||
If xorriso is started with one of the leafnames "xorrisofs", "genisofs",
|
||||
"mkisofs", or "genisoimage", then it automatically prepends -as "genisofs"
|
||||
to the command line arguments. I.e. all arguments will be interpreted mkisofs
|
||||
style until "--" is encountered. From then on, options are interpreted
|
||||
as xorriso options.
|
||||
.br
|
||||
|
||||
Personality "\fBcdrecord\fR" accepts the options listed with:
|
||||
.br
|
||||
-as cdrecord -help --
|
||||
.br
|
||||
Among them: -v, dev=, speed=, blank=, fs=, -eject, -atip, padsize=,
|
||||
Among them: -v, dev=, speed=, blank=, fs=, -eject, -atip, padsize=, tsize=,
|
||||
-isosize, -multi, -msinfo, --grow_overwriteable_iso, write_start_address=,
|
||||
track source file path or "-" for standard input as track source.
|
||||
.br
|
||||
It ignores most other options of cdrecord and cdrskin but refuses on
|
||||
-audio, -scanbus, -multi, -msinfo, --grow_overwriteable_iso,
|
||||
and on blanking modes unknown to xorriso.
|
||||
-audio, -scanbus, and on blanking modes unknown to xorriso.
|
||||
.br
|
||||
The scope is only a single data track per session to be written
|
||||
to blank, overwriteable, or appendable media. The media gets closed if
|
||||
closing is applicable and not option -multi is present.
|
||||
.br
|
||||
An eventually aquired input drive is given up.
|
||||
This is only allowed if no image changes are pending.
|
||||
.br
|
||||
dev= must be given as xorriso device address. Adresses like 0,0,0 or ATA:1,1,0
|
||||
are not supported.
|
||||
@ -1779,9 +1824,37 @@ are not supported.
|
||||
If a track source is given, then an automatic -commit happens at the end of
|
||||
the "cdrecord" option list.
|
||||
.br
|
||||
--grow_overwriteable_iso enables emulation of multi-session on overwriteable
|
||||
media. To enable emulation of a TOC, the first session needs -C 0,32 with
|
||||
-as mkisofs (but no -M) and --grow_overwriteable_iso write_start_address=32s
|
||||
with -as cdrecord.
|
||||
.br
|
||||
A much more elaborate libburn based cdrecord emulator is the program cdrskin.
|
||||
.br
|
||||
Personalites "\fBwodim\fR" and "\fBcdrskin\fR" are aliases for "cdrecord".
|
||||
Personalites "\fBxorrecord\fR", "\fBwodim\fR", and "\fBcdrskin\fR" are aliases
|
||||
for "cdrecord".
|
||||
.br
|
||||
If xorriso is started with one of the leafnames "xorrecord", "cdrskin",
|
||||
"cdrecord", or "wodim", then it automatically prepends -as "cdrskin"
|
||||
to the command line arguments. I.e. all arguments will be interpreted cdrecord
|
||||
style until "--" is encountered and an eventual commit happens.
|
||||
From then on, options are interpreted as xorriso options.
|
||||
.TP
|
||||
\fB\-pacifier\fR behavior_code
|
||||
Control behavior of UPDATE pacifiers during write operations.
|
||||
The following behavior codes are defined:
|
||||
.br
|
||||
"xorriso" is the default format:
|
||||
.br
|
||||
Writing: sector XXXXX of YYYYYY [fifo active, nn% fill]
|
||||
.br
|
||||
"cdrecord" looks like:
|
||||
.br
|
||||
X of Y MB written (fifo nn%) [buf mmm%]
|
||||
.br
|
||||
"mkisofs"
|
||||
.br
|
||||
nn% done, estimate finish Tue Jul 15 20:13:28 2008
|
||||
.TP
|
||||
.B Scripting, dialog and program control features:
|
||||
.TP
|
||||
@ -1921,9 +1994,11 @@ Manipulating an existing ISO image on the same media
|
||||
.br
|
||||
Copy modified ISO image from one media to another
|
||||
.br
|
||||
Write a ISO image into a pipe (single-session only)
|
||||
Write a ISO image into a pipe
|
||||
.br
|
||||
Perform a single session run as of cdrtools traditions
|
||||
Perform multi-session runs as of cdrtools traditions
|
||||
.br
|
||||
Let xorriso work underneath growisofs
|
||||
.br
|
||||
Adjust thresholds for verbosity, exit value and program abort
|
||||
.br
|
||||
@ -2071,21 +2146,67 @@ first and only session to the output drive.
|
||||
.br
|
||||
-commit -eject all
|
||||
.SS
|
||||
.B Write a ISO image into a pipe (single-session only)
|
||||
.B Write a ISO image into a pipe
|
||||
\fB$\fR xorriso -outdev - \\
|
||||
.br
|
||||
...
|
||||
.br
|
||||
| gzip >image.iso.gz
|
||||
.SS
|
||||
.B Perform a single session run as of cdrtools traditions
|
||||
This shall illustrate how xorriso can act in either role.
|
||||
.B Perform multi-session runs as of cdrtools traditions
|
||||
Between both processes there can be performed arbitrary transportation
|
||||
or filtering.
|
||||
.br
|
||||
\fB$\fR xorriso -as mkisofs -J -R /home/prepared_for_iso/tree | \\
|
||||
The first session is written like this:
|
||||
.br
|
||||
xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -eject -
|
||||
\fB$\fR xorriso -as mkisofs prepared_for_iso/tree1 | \\
|
||||
.br
|
||||
xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject -
|
||||
.br
|
||||
Follow-up sessions are written like this:
|
||||
.br
|
||||
\fB$\fR m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo)
|
||||
.br
|
||||
\fB$\fR xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \\
|
||||
.br
|
||||
xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject -
|
||||
.br
|
||||
Always eject the drive tray between sessions. The old sessions
|
||||
get read via stdio:/dev/sr0 and thus are prone to device driver
|
||||
peculiarities.
|
||||
.br
|
||||
This example works for multi-session media only.
|
||||
Add cdrskin option --grow_overwriteable_iso to all -as cdrecord runs
|
||||
in order to enable multi-session emulation on overwriteable media.
|
||||
.SS
|
||||
.B Let xorriso work underneath growisofs
|
||||
growisofs expects an ISO formatter program which understands options -C and
|
||||
-M. If xorriso gets started by name "xorrisofs" then it is suitable for that.
|
||||
.br
|
||||
\fB$\fR export MKISOFS="xorrisofs"
|
||||
.br
|
||||
\fB$\fR growisofs -Z /dev/dvd /some/files
|
||||
.br
|
||||
\fB$\fR growisofs -M /dev/dvd /more/files
|
||||
.br
|
||||
If no "xorrisofs" is available on your system, then you will have to create
|
||||
a link pointing to the xorriso binary and tell growisofs to use it. E.g. by:
|
||||
.br
|
||||
\fB$\fR ln -s $(which xorriso) "$HOME/xorrisofs"
|
||||
.br
|
||||
\fB$\fR export MKISOFS="$HOME/xorrisofs"
|
||||
.br
|
||||
One may quit mkisofs emulation by argument "--" and make
|
||||
use of all xorriso commands. growisofs dislikes options which
|
||||
start with "-o" but -outdev must be set to "-".
|
||||
So use "outdev" instead:
|
||||
.br
|
||||
\fB$\fR growisofs -Z /dev/dvd -- outdev - -update_r /my/files /files
|
||||
.br
|
||||
\fB$\fR growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
|
||||
.br
|
||||
growisofs has excellent burn capabilities with DVD and BD.
|
||||
It does not emulate session history on overwriteable media, though.
|
||||
.SS
|
||||
.B Adjust thresholds for verbosity, exit value and program abort
|
||||
Be quite verbous, exit 32 if severity "FAILURE" was encountered,
|
||||
|
@ -765,8 +765,10 @@ bit15= with bit1 or bit2: close depicted log file
|
||||
if(flag&(2|4))
|
||||
return(1);
|
||||
if(flag&1) {
|
||||
if(channel_no==1 || channel_no==3)
|
||||
if(channel_no==1 || channel_no==3) {
|
||||
printf("%s",text);
|
||||
fflush(stdout);
|
||||
}
|
||||
if(channel_no==2 || channel_no==3)
|
||||
fprintf(stderr,"%s",text);
|
||||
if(logfile_fp[channel_no]!=NULL) {
|
||||
@ -1315,7 +1317,10 @@ completed:;
|
||||
|
||||
|
||||
/* @param flag bit0=with year and seconds
|
||||
bit1=timestamp format YYYY.MM.DD.hhmmss
|
||||
bit1-3= form
|
||||
0= ls -l format
|
||||
1= timestamp format YYYY.MM.DD.hhmmss
|
||||
2= Wdy Mon Day hh:mm:ss Year
|
||||
*/
|
||||
char *Ftimetxt(time_t t, char timetext[40], int flag)
|
||||
{
|
||||
@ -1323,16 +1328,23 @@ char *Ftimetxt(time_t t, char timetext[40], int flag)
|
||||
struct tm tms, *tmpt;
|
||||
static char months[12][4]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||
static char days[7][4]= {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
||||
int form;
|
||||
|
||||
form= (flag>>1)&7;
|
||||
tmpt= localtime_r(&t, &tms);
|
||||
rpt= timetext;
|
||||
rpt[0]= 0;
|
||||
if(tmpt==0)
|
||||
sprintf(rpt+strlen(rpt), "%12.f", (double) t);
|
||||
else if (flag&2)
|
||||
else if (form==1)
|
||||
sprintf(rpt+strlen(rpt), "%4.4d.%2.2d.%2.2d.%2.2d%2.2d%2.2d",
|
||||
1900+tms.tm_year, tms.tm_mon, tms.tm_mday,
|
||||
tms.tm_hour, tms.tm_min, tms.tm_sec);
|
||||
else if (form==2)
|
||||
sprintf(rpt+strlen(rpt), "%s %s %2.2d %2.2d:%2.2d:%2.2d %4.4d",
|
||||
days[tms.tm_wday], months[tms.tm_mon], tms.tm_mday,
|
||||
tms.tm_hour, tms.tm_min, tms.tm_sec, 1900+tms.tm_year);
|
||||
else if (flag&1)
|
||||
sprintf(rpt+strlen(rpt), "%2d %3s %4.4d %2.2d:%2.2d:%2.2d",
|
||||
tms.tm_mday, months[tms.tm_mon], 1900+tms.tm_year,
|
||||
@ -1386,6 +1398,30 @@ single_letters:;
|
||||
}
|
||||
|
||||
|
||||
int Wait_for_input(int fd, int microsec, int flag)
|
||||
{
|
||||
struct timeval wt;
|
||||
fd_set rds,wts,exs;
|
||||
int ready;
|
||||
|
||||
FD_ZERO(&rds);
|
||||
FD_ZERO(&wts);
|
||||
FD_ZERO(&exs);
|
||||
FD_SET(fd,&rds);
|
||||
FD_SET(fd,&exs);
|
||||
wt.tv_sec= microsec/1000000;
|
||||
wt.tv_usec= microsec%1000000;
|
||||
ready= select(fd+1,&rds,&wts,&exs,&wt);
|
||||
if(ready<=0)
|
||||
return(0);
|
||||
if(FD_ISSET(fd,&exs))
|
||||
return(-1);
|
||||
if(FD_ISSET(fd,&rds))
|
||||
return(1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
|
||||
@ -2779,6 +2815,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
if(getcwd(m->initial_wdx,sizeof(m->initial_wdx)-1)==NULL)
|
||||
m->initial_wdx[0]= 0;
|
||||
m->no_rc= 0;
|
||||
m->argument_emulation= 0;
|
||||
|
||||
m->rc_filename_count= Xorriso_rc_nuM;
|
||||
for(i=0;i<m->rc_filename_count-1;i++)
|
||||
@ -2823,6 +2860,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->outdev[0]= 0;
|
||||
m->out_drive_handle= NULL;
|
||||
m->dev_fd_1= -1;
|
||||
m->grow_blindly_msc2= -1;
|
||||
m->ban_stdio_write= 0;
|
||||
m->do_dummy= 0;
|
||||
m->do_close= 0;
|
||||
@ -2885,6 +2923,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->insert_count= 0;
|
||||
m->insert_bytes= 0;
|
||||
m->error_count= 0;
|
||||
m->pacifier_style= 0;
|
||||
m->pacifier_interval= 1.0;
|
||||
m->pacifier_count= 0;
|
||||
m->pacifier_total= 0;
|
||||
@ -2905,6 +2944,16 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
goto failure;
|
||||
if(strcmp(leafname, "osirrox")==0)
|
||||
m->allow_restore= 1;
|
||||
else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==0 ||
|
||||
strcmp(leafname, "mkisofs")==0 || strcmp(leafname, "genisoimage")==0) {
|
||||
m->argument_emulation= 1;
|
||||
m->pacifier_style= 1;
|
||||
Xorriso_protect_stdout(*xorriso, 0);
|
||||
} else if(strcmp(leafname, "xorrecord")==0 || strcmp(leafname, "wodim")==0 ||
|
||||
strcmp(leafname, "cdrecord")==0 || strcmp(leafname, "cdrskin")==0) {
|
||||
m->argument_emulation= 2;
|
||||
m->pacifier_style= 2;
|
||||
}
|
||||
ret= Exclusions_new(&(m->disk_exclusions), 0);
|
||||
if(ret<=0)
|
||||
goto failure;
|
||||
@ -4153,6 +4202,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (xorriso->pacifier_style==0);
|
||||
sprintf(line,"-pacifier '%s'\n",
|
||||
xorriso->pacifier_style==1 ? "mkisofs" :
|
||||
xorriso->pacifier_style==2 ? "cdrecord" : "xorriso");
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (strcmp(xorriso->return_with_text,"SORRY")==0 &&
|
||||
xorriso->return_with_value==32);
|
||||
sprintf(line,"-return_with %s %d\n",
|
||||
@ -4216,6 +4272,13 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
}
|
||||
|
||||
is_default= (xorriso->grow_blindly_msc2<0);
|
||||
sprintf(sfe, "%d", xorriso->grow_blindly_msc2);
|
||||
sprintf(line,"-grow_blindly %s\n",
|
||||
xorriso->grow_blindly_msc2 < 0 ? "off" : sfe);
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
if(strcmp(xorriso->indev,xorriso->outdev)==0) {
|
||||
sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0));
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
@ -7026,9 +7089,11 @@ int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag)
|
||||
int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
|
||||
int flag)
|
||||
{
|
||||
int ret, i, k, mem_do_close, aq_ret, eject_ret;
|
||||
int ret, i, k, mem_do_close, aq_ret, eject_ret, msc1, msc2, hflag;
|
||||
int do_atip= 0, do_checkdrive= 0, do_eject= 0, do_scanbus= 0;
|
||||
int do_toc= 0, do_verbous= 0, do_version= 0, do_help= 0;
|
||||
int do_toc= 0, do_verbous= 0, do_version= 0, do_help= 0, do_waiti= 0;
|
||||
int do_multi= 0, do_msinfo= 0, do_grow= 0, do_isosize= 0;
|
||||
double write_start_address= -1.0, tsize= -1.0;
|
||||
char track_source[SfileadrL], sfe[5*SfileadrL], dev_adr[SfileadrL], *cpt;
|
||||
char mem_report_about_text[80], *report_about= "SORRY", blank_mode[80];
|
||||
char speed[80];
|
||||
@ -7044,9 +7109,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
|
||||
"drive_scsi_dev_family=", "fallback_program=", "modesty_on_drive=",
|
||||
"tao_to_sao_tsize=",
|
||||
|
||||
"direct_write_amount=", "write_start_address=", "msifile=",
|
||||
|
||||
"tsize=",
|
||||
"direct_write_amount=", "msifile=",
|
||||
|
||||
""
|
||||
};
|
||||
@ -7059,8 +7122,8 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
|
||||
"-cdi", "-preemp", "-nopreemp", "-copy", "-nocopy",
|
||||
"-scms", "-shorttrack", "-noshorttrack", "-packet", "-noclose",
|
||||
"-media-info", "-minfo",
|
||||
"-isosize", "-load", "-lock", "-raw96r", "-sao", "-dao", "-swab",
|
||||
"-tao", "-waiti", "-force", "-format",
|
||||
"-load", "-lock", "-raw96r", "-sao", "-dao", "-swab",
|
||||
"-tao", "-force", "-format",
|
||||
|
||||
"--adjust_speed_to_drive", "--allow_emulated_drives", "--allow_setuid",
|
||||
"--allow_untested_media", "--any_track", "--demand_a_drive",
|
||||
@ -7087,17 +7150,24 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
|
||||
"\tblank=type\tblank a CD-RW disc (see blank=help)",
|
||||
"\tfs=#\t\tSet fifo size to # (0 to disable, default is 4 MB)",
|
||||
"\t-eject\t\teject the disk after doing the work",
|
||||
"\t-dummy\t\tdo everything with laser turned off",
|
||||
"\t-msinfo\t\tretrieve multi-session info for mkisofs >= 1.10",
|
||||
"\t-toc\t\tretrieve and print TOC/PMA data",
|
||||
"\t-atip\t\tretrieve media state, print \"Is *erasable\"",
|
||||
"\t-multi\t\tgenerate a TOC that allows multi session",
|
||||
"\t-waiti\t\twait until input is available before opening SCSI",
|
||||
"\ttsize=#\t\tannounces exact size of source data",
|
||||
"\tpadsize=#\tAmount of padding",
|
||||
"\t-data\t\tSubsequent tracks are CD-ROM data mode 1 (default)",
|
||||
"\t-isosize\tUse iso9660 file system size for next data track",
|
||||
"\t-pad\t\tpadsize=30k",
|
||||
"\t-nopad\t\tDo not pad",
|
||||
"\t--grow_overwriteable_iso\temulate multi-session on DVD+RW",
|
||||
"\twrite_start_address=#\t\twrite to given byte address on DVD+RW",
|
||||
"\t-help\t\tprint this text to stderr and exit emulation",
|
||||
"Actually this is the integrated ISO RockRidge filesystem manipulator xorriso",
|
||||
"lending its libburn capabilities to a very limited cdrecord emulation.",
|
||||
"Only a single data track can be burnt to blank or overwriteable media which",
|
||||
"will be finalized afterwards if possible.",
|
||||
"lending its libburn capabilities to a very limited cdrecord emulation. Only",
|
||||
"a single data track can be burnt to blank, appendable or overwriteable media.",
|
||||
"A much more elaborate cdrecord emulator is cdrskin from the same project.",
|
||||
"@End_of_helptexT@"
|
||||
};
|
||||
@ -7111,7 +7181,8 @@ static char blank_help[][80]= {
|
||||
"\tfast\t\tminimally blank the entire disk",
|
||||
"\tminimal\t\tminimally blank the entire disk",
|
||||
"\tdeformat\t\tblank a formatted DVD-RW",
|
||||
"\tdeformat_quickest\t\tminimally blank a formatted DVD-RW to DAO only",
|
||||
"\tdeformat_quickest\tminimally blank a formatted DVD-RW to DAO only",
|
||||
"\tformat_overwrite\tformat a DVD-RW to \"Restricted Overwrite\"",
|
||||
"@End_of_helptexT@"
|
||||
};
|
||||
|
||||
@ -7124,7 +7195,7 @@ static char blank_help[][80]= {
|
||||
speed[0]= 0;
|
||||
|
||||
if(xorriso->in_drive_handle != NULL) {
|
||||
ret= Xorriso_option_dev(xorriso, "", 1); /* give up indev */
|
||||
ret= Xorriso_option_dev(xorriso, "", 1|32); /* give up indev */
|
||||
if(ret!=1)
|
||||
return(ret);
|
||||
}
|
||||
@ -7177,6 +7248,8 @@ no_volunteer:;
|
||||
strcmp(cpt,"deformat_quickest")==0 ||
|
||||
strcmp(cpt,"deformat_sequential_quickest")==0) {
|
||||
strcpy(blank_mode, cpt);
|
||||
} else if(strcmp(cpt,"format_overwrite")==0) {
|
||||
strcpy(blank_mode, "format_overwrite");
|
||||
} else {
|
||||
sprintf(xorriso->info_text,
|
||||
"-as %s: blank=%s not supported. See blank=help .",
|
||||
@ -7191,9 +7264,9 @@ no_volunteer:;
|
||||
} else if(strncmp(argv[i], "-dev=", 5)==0 ||
|
||||
strncmp(argv[i], "dev=", 4)==0) {
|
||||
cpt= strchr(argv[i], '=')+1;
|
||||
ret= Xorriso_option_dev(xorriso, cpt, 2|8); /* overwriteables as blank */
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
strcpy(dev_adr, cpt);
|
||||
} else if(strcmp(argv[i], "--devices")==0) {
|
||||
do_scanbus= 2;
|
||||
} else if(strncmp(argv[i],"driveropts=", 11)==0 ||
|
||||
strncmp(argv[i],"-driveropts=", 12)==0) {
|
||||
if(strcmp(argv[i]+11, "help")==0) {
|
||||
@ -7210,8 +7283,18 @@ no_volunteer:;
|
||||
ret= Xorriso_option_fs(xorriso, cpt, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strcmp(argv[i], "--grow_overwriteable_iso")==0) {
|
||||
do_grow= 1;
|
||||
} else if(strcmp(argv[i], "-help")==0) {
|
||||
do_help= 1;
|
||||
} else if(strcmp(argv[i], "-isosize")==0) {
|
||||
do_isosize= 1;
|
||||
} else if(strcmp(argv[i], "-inq")==0) {
|
||||
do_checkdrive= 2;
|
||||
} else if(strcmp(argv[i], "-msinfo")==0) {
|
||||
do_msinfo= 1;
|
||||
} else if(strcmp(argv[i], "-multi")==0) {
|
||||
do_multi= 1;
|
||||
} else if(strcmp(argv[i], "-nopad")==0) {
|
||||
xorriso->padding= 0;
|
||||
} else if(strcmp(argv[i], "-pad")==0) {
|
||||
@ -7222,21 +7305,6 @@ no_volunteer:;
|
||||
ret= Xorriso_option_padding(xorriso, cpt, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strncmp(argv[i], "-speed=", 7)==0 ||
|
||||
strncmp(argv[i], "speed=", 6)==0) {
|
||||
cpt= strchr(argv[i], '=')+1;
|
||||
strncpy(speed, cpt, 79);
|
||||
speed[79]= 0;
|
||||
} else if(strcmp(argv[i], "-multi")==0) {
|
||||
sprintf(xorriso->info_text, "-as %s: Option -multi not supported.", whom);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
} else if(strcmp(argv[i], "-msinfo")==0) {
|
||||
sprintf(xorriso->info_text, "-as %s: Option -msinfo not supported.",whom);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
} else if(strcmp(argv[i], "--devices")==0) {
|
||||
do_scanbus= 2;
|
||||
} else if(strcmp(argv[i], "-scanbus")==0) {
|
||||
sprintf(xorriso->info_text, "-as %s: Option -scanbus not supported.",
|
||||
whom);
|
||||
@ -7244,14 +7312,22 @@ no_volunteer:;
|
||||
ret= 0; goto ex;
|
||||
|
||||
/* do_scanbus= 1; */
|
||||
} else if(strncmp(argv[i], "-speed=", 7)==0 ||
|
||||
strncmp(argv[i], "speed=", 6)==0) {
|
||||
cpt= strchr(argv[i], '=')+1;
|
||||
strncpy(speed, cpt, 79);
|
||||
speed[79]= 0;
|
||||
} else if(strcmp(argv[i], "-toc")==0) {
|
||||
do_toc= 1;
|
||||
} else if(strcmp(argv[i], "--grow_overwriteable_iso")==0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-as %s: Option --grow_overwriteable_iso not supported.",
|
||||
whom);
|
||||
} else if(strncmp(argv[i], "-tsize=", 7)==0 ||
|
||||
strncmp(argv[i], "tsize=", 6)==0) {
|
||||
cpt= strchr(argv[i], '=')+1;
|
||||
tsize= Scanf_io_size(cpt, 1);
|
||||
if(tsize > 1024.0*1024.0*1024.0*1024.0*1024.0) {
|
||||
sprintf(xorriso->info_text, "-as %s: much too large: %s",whom, argv[i]);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
} else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i],"-verbose")==0) {
|
||||
do_verbous++;
|
||||
} else if(strcmp(argv[i], "-vv")==0) {
|
||||
@ -7260,8 +7336,10 @@ no_volunteer:;
|
||||
do_verbous+= 3;
|
||||
} else if(strcmp(argv[i], "-version")==0) {
|
||||
do_version= 1;
|
||||
} else if(strcmp(argv[i], "-help")==0) {
|
||||
do_help= 1;
|
||||
} else if(strcmp(argv[i], "-waiti")==0) {
|
||||
do_waiti= 1;
|
||||
} else if(strncmp(argv[i], "write_start_address=", 20)==0) {
|
||||
write_start_address= Scanf_io_size(argv[i]+20,0);
|
||||
} else if(argv[i][0]=='-' && argv[i][1]!=0) {
|
||||
sprintf(xorriso->info_text, "-as %s: Unknown option %s",
|
||||
whom, Text_shellsafe(argv[i], sfe, 0));
|
||||
@ -7290,6 +7368,29 @@ no_volunteer:;
|
||||
Xorriso_option_version(xorriso, 0);
|
||||
ret= 1; goto ex;
|
||||
}
|
||||
if(do_waiti) {
|
||||
sprintf(xorriso->info_text,
|
||||
"xorriso: Option -waiti pauses program until input appears at stdin\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
sprintf(xorriso->result_line, "Waiting for data on stdin...\n");
|
||||
Xorriso_result(xorriso, 1);
|
||||
for(ret= 0; ret==0; )
|
||||
ret= Wait_for_input(0,1000000,0);
|
||||
if(ret<0 || feof(stdin)) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"stdin produces exception rather than data", 0, "NOTE", 0);
|
||||
}
|
||||
sprintf(xorriso->info_text, "xorriso: Option -waiti pausing is done.\n");
|
||||
}
|
||||
if(dev_adr[0]) {
|
||||
hflag= 2|32;
|
||||
if(!do_grow)
|
||||
hflag|= 8; /* consider overwriteables as blank */
|
||||
ret= Xorriso_option_dev(xorriso, dev_adr, hflag);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
if(do_help) {
|
||||
for(i= 0; strcmp(helptext[i], "@End_of_helptexT@")!=0; i++) {
|
||||
sprintf(xorriso->info_text, "%s\n", helptext[i]);
|
||||
@ -7313,7 +7414,7 @@ no_volunteer:;
|
||||
}
|
||||
|
||||
if(!(do_checkdrive || do_atip || do_toc || blank_mode[0] || track_source[0] ||
|
||||
do_eject))
|
||||
do_eject || do_msinfo))
|
||||
{ret= 1; goto ex;}
|
||||
|
||||
if(xorriso->out_drive_handle==NULL) {
|
||||
@ -7321,6 +7422,15 @@ no_volunteer:;
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
|
||||
if(do_msinfo) {
|
||||
ret= Xorriso_msinfo(xorriso, &msc1, &msc2, 2 | !!do_grow);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
sprintf(xorriso->result_line, "%d,%d\n", msc1, msc2);
|
||||
Xorriso_result(xorriso, 1);
|
||||
}
|
||||
|
||||
if(speed[0]) {
|
||||
ret= Xorriso_option_speed(xorriso, speed, 0);
|
||||
if(ret<=0)
|
||||
@ -7352,14 +7462,20 @@ no_volunteer:;
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
if(blank_mode[0]) {
|
||||
if(strcmp(blank_mode, "format_overwrite")==0) {
|
||||
ret= Xorriso_option_blank(xorriso, "fast", 1);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(blank_mode[0]) {
|
||||
ret= Xorriso_option_blank(xorriso, blank_mode, 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
if(track_source[0]) {
|
||||
xorriso->do_close= 1;
|
||||
ret= Xorriso_burn_track(xorriso, track_source, 0);
|
||||
xorriso->do_close= !do_multi;
|
||||
ret= Xorriso_burn_track(xorriso, (off_t) write_start_address,
|
||||
track_source, (off_t) tsize,
|
||||
(!!do_grow)|((!!do_isosize)<<1));
|
||||
aq_ret= Xorriso_reaquire_outdev(xorriso, 2*(ret>0));
|
||||
if(ret<=0 && ret<aq_ret)
|
||||
goto ex;
|
||||
@ -7389,10 +7505,10 @@ ex:;
|
||||
int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
int argc, char **argv, int flag)
|
||||
{
|
||||
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points;
|
||||
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points, mem;
|
||||
int do_print_size= 0, idx_offset= 0, fd, idx;
|
||||
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL];
|
||||
char *ept, *add_pt, eff_path[SfileadrL];
|
||||
char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
|
||||
|
||||
/* mkisofs 2.01 options which are not scheduled for implementation, yet */
|
||||
static char ignored_arg0_options[][41]= {
|
||||
@ -7416,12 +7532,15 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
" -graft-points Allow to use graft points for filenames",
|
||||
" -help Print option help",
|
||||
" -J, -joliet Generate Joliet directory information",
|
||||
" -no-pad Do not pad output",
|
||||
" -o FILE, -output FILE Set output file name",
|
||||
" -m GLOBFILE, -exclude GLOBFILE",
|
||||
" Exclude file name",
|
||||
" -exclude-list FILE File with list of file names to exclude",
|
||||
" -pad Pad output by 300k (default)",
|
||||
" -no-pad Do not pad output",
|
||||
" -M FILE, -prev-session FILE Set path to previous session to merge",
|
||||
" -C PARAMS, -cdrecord-params PARAMS",
|
||||
" Magic paramters from cdrecord",
|
||||
" -path-list FILE File with list of pathnames to process",
|
||||
" -print-size Print estimated filesystem size and exit",
|
||||
" -quiet Run quietly",
|
||||
@ -7434,13 +7553,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
|
||||
strcpy(ra_text, xorriso->report_about_text);
|
||||
|
||||
if(xorriso->in_drive_handle != NULL) {
|
||||
ret= Xorriso_option_dev(xorriso, "", 1); /* give up indev */
|
||||
if(ret!=1)
|
||||
return(ret);
|
||||
}
|
||||
|
||||
adr[0]= 0;
|
||||
adr[0]= indev[0]= msc[0]= 0;
|
||||
for(i= 0; i<argc; i++) {
|
||||
if(strcmp(argv[i], "-version")==0) {
|
||||
sprintf(xorriso->result_line,
|
||||
@ -7458,10 +7571,26 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
adr[0]= 0;
|
||||
if(strcmp(argv[i],"-")!=0)
|
||||
if(strcmp(argv[i],"-")!=0 && strncmp(argv[i], "stdio:", 6)!=0)
|
||||
strcpy(adr, "stdio:");
|
||||
if(Sfile_str(adr+strlen(adr), argv[i], 0)<=0)
|
||||
{ret= -1; goto ex;}
|
||||
} else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0 ||
|
||||
strcmp(argv[i], "-prev-session")==0) {
|
||||
if(i+1>=argc)
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
if(strncmp(argv[i], "stdio:", 6)!=0)
|
||||
strcpy(indev, "stdio:");
|
||||
if(Sfile_str(indev+strlen(indev), argv[i], 0)<=0)
|
||||
{ret= -1; goto ex;}
|
||||
} else if(strcmp(argv[i], "-C")==0 ||
|
||||
strcmp(argv[i], "-cdrecord-params")==0) {
|
||||
if(i+1>=argc)
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
strncpy(msc, argv[i], sizeof(msc)-1);
|
||||
msc[sizeof(msc)-1]= 0;
|
||||
} else if(strcmp(argv[i], "-help")==0) {
|
||||
Xorriso_option_report_about(xorriso, "NOTE", 0);
|
||||
for(i= 0; strcmp(helptext[i], "@End_of_helptexT@")!=0; i++) {
|
||||
@ -7499,14 +7628,50 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
if(!was_other_option)
|
||||
{ret= 1; goto ex;}
|
||||
if(xorriso->out_drive_handle==NULL) {
|
||||
if(was_other_option && xorriso->out_drive_handle==NULL) {
|
||||
ret= Xorriso_option_dev(xorriso, "-", 2|4); /* set outdev to stdout */
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
}
|
||||
|
||||
if(msc[0]) {
|
||||
cpt= strchr(msc, ',');
|
||||
if(cpt==NULL) {
|
||||
illegal_c:;
|
||||
sprintf(xorriso->info_text,
|
||||
"-as %s: unusable parameter with option -C: %s",
|
||||
whom, Text_shellsafe(msc, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
} else if(cpt==msc || msc[1]==0)
|
||||
goto illegal_c;
|
||||
strncpy(sfe, msc, cpt-msc);
|
||||
sfe[cpt-msc]= 0;
|
||||
if(xorriso->in_drive_handle!=NULL && indev[0]) {
|
||||
/* give up indev before setting the load address */
|
||||
ret= Xorriso_option_dev(xorriso, "", 1);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
}
|
||||
/* growisofs submits msc1+16 to avoid a theoretical bug in mkisofs.
|
||||
Therefore this bug has to be emulated here. Sigh.
|
||||
*/
|
||||
ret= Xorriso_option_load(xorriso, "sbsector", sfe, 1);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
ret= Xorriso_option_grow_blindly(xorriso, cpt+1, 0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
}
|
||||
if(indev[0]) {
|
||||
ret= Xorriso_option_dev(xorriso, indev, 1);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
if(!was_other_option)
|
||||
{ret= 1; goto ex;}
|
||||
|
||||
xorriso->padding= 300*1024;
|
||||
|
||||
for(i= 0; i<argc; i++) {
|
||||
@ -7563,6 +7728,12 @@ not_enough_args:;
|
||||
} else if(strcmp(argv[i], "-o")==0) {
|
||||
i++;
|
||||
/* was already handled in first argument scan */;
|
||||
} else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0) {
|
||||
i++;
|
||||
/* was already handled in first argument scan */;
|
||||
} else if(strcmp(argv[i], "-C")==0) {
|
||||
i++;
|
||||
/* was already handled in first argument scan */;
|
||||
} else if(strcmp(argv[i], "-help")==0) {
|
||||
/* was already handled in first argument scan */;
|
||||
} else if(strcmp(argv[i], "-V")==0 || strcmp(argv[i], "-volid")==0) {
|
||||
@ -7584,18 +7755,24 @@ not_enough_args:;
|
||||
if(i+1>=argc)
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
mem= xorriso->do_disk_pattern;
|
||||
xorriso->do_disk_pattern= 1;
|
||||
if(strchr(argv[i], '/')!=NULL) {
|
||||
idx= i;
|
||||
ret= Xorriso_option_not_paths(xorriso, i+1, argv, &idx, 0);
|
||||
} else
|
||||
ret= Xorriso_option_not_leaf(xorriso, argv[i], 0);
|
||||
xorriso->do_disk_pattern= mem;
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strcmp(argv[i], "-exclude-list")==0) {
|
||||
if(i+1>=argc)
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
ret= Xorriso_option_not_leaf(xorriso, argv[i], 0);
|
||||
mem= xorriso->do_disk_pattern;
|
||||
xorriso->do_disk_pattern= 1;
|
||||
ret= Xorriso_option_not_list(xorriso, argv[i], 0);
|
||||
xorriso->do_disk_pattern= mem;
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-quiet")==0) {
|
||||
@ -7639,6 +7816,7 @@ not_enough_args:;
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
was_path= 1;
|
||||
xorriso->pacifier_style= 1;
|
||||
}
|
||||
}
|
||||
if(do_print_size) {
|
||||
@ -7658,6 +7836,38 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_as_genisofs(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int end_idx, ret, idx_count, old_idx;
|
||||
|
||||
old_idx= *idx;
|
||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1);
|
||||
(*idx)= end_idx;
|
||||
idx_count= end_idx-old_idx;
|
||||
if(end_idx<=0 || old_idx>=argc)
|
||||
return(1);
|
||||
ret= Xorriso_genisofs(xorriso, "genisofs", end_idx-old_idx, argv+old_idx, 0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_as_cdrskin(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag)
|
||||
{
|
||||
int end_idx, ret, idx_count, old_idx;
|
||||
|
||||
old_idx= *idx;
|
||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1);
|
||||
(*idx)= end_idx;
|
||||
idx_count= end_idx-old_idx;
|
||||
if(end_idx<=0 || old_idx>=argc)
|
||||
return(1);
|
||||
ret= Xorriso_cdrskin(xorriso, "cdrskin", end_idx-old_idx, argv+old_idx, 0);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param flag bit2= -follow: this is not a command parameter
|
||||
@ -8174,14 +8384,15 @@ int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(strcmp(argv[*idx], "cdrecord")==0 || strcmp(argv[*idx], "wodim")==0 ||
|
||||
strcmp(argv[*idx], "cdrskin")==0) {
|
||||
strcmp(argv[*idx], "cdrskin")==0 || strcmp(argv[*idx], "xorrecord")==0) {
|
||||
ret= Xorriso_cdrskin(xorriso, argv[*idx], end_idx-(*idx)-1, argv+(*idx)+1,
|
||||
0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strcmp(argv[*idx], "mkisofs")==0 ||
|
||||
strcmp(argv[*idx], "genisoimage")==0 ||
|
||||
strcmp(argv[*idx], "genisofs")==0) {
|
||||
strcmp(argv[*idx], "genisofs")==0 ||
|
||||
strcmp(argv[*idx], "xorrisofs")==0) {
|
||||
ret= Xorriso_genisofs(xorriso, argv[*idx], end_idx-(*idx)-1, argv+(*idx)+1,
|
||||
0);
|
||||
if(ret<=0)
|
||||
@ -8661,6 +8872,9 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag)
|
||||
if(flag&1)
|
||||
return(1);
|
||||
strcpy(newdev, xorriso->outdev);
|
||||
if(xorriso->grow_blindly_msc2>=0)
|
||||
ret= Xorriso_option_dev(xorriso, "", 3|4);
|
||||
else
|
||||
ret= Xorriso_option_dev(xorriso, newdev, 3|4);
|
||||
return(ret);
|
||||
}
|
||||
@ -8992,6 +9206,7 @@ int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||
bit3= regard overwriteable media as blank
|
||||
bit4= if the drive is a regular disk file: truncate it to
|
||||
the write start address
|
||||
bit5= do not print toc of aquired drive
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
||||
@ -9026,7 +9241,7 @@ int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
if((flag&1) && !(flag&4)) {
|
||||
if((flag&1) && (xorriso->in_drive_handle != NULL || adr[0]) && !(flag&4)) {
|
||||
ret= Xorriso_reassure(xorriso, (flag&2) ? "-dev" : "-indev",
|
||||
"eventually discard the current image", 0);
|
||||
if(ret<=0)
|
||||
@ -9043,15 +9258,15 @@ int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
||||
Text_shellsafe(xorriso->indev, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
if((flag&2) && xorriso->in_drive_handle != NULL &&
|
||||
if((flag&2) && xorriso->out_drive_handle != NULL &&
|
||||
xorriso->in_drive_handle != xorriso->out_drive_handle) {
|
||||
sprintf(xorriso->info_text,"Giving up -outdev %s",
|
||||
Text_shellsafe(xorriso->outdev, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
ret= Xorriso_give_up_drive(xorriso, flag&3);
|
||||
ret= Xorriso_give_up_drive(xorriso, (flag&3)|((flag&32)>>2));
|
||||
} else
|
||||
ret= Xorriso_aquire_drive(xorriso, adr, (flag&3)|((flag&(8|16))>>1));
|
||||
ret= Xorriso_aquire_drive(xorriso, adr, (flag&(3|32))|(((flag&(8|16))>>1)));
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
if(xorriso->in_drive_handle == NULL)
|
||||
@ -9660,6 +9875,25 @@ int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -grow_blindly */
|
||||
int Xorriso_option_grow_blindly(struct XorrisO *xorriso, char *msc2, int flag)
|
||||
{
|
||||
double num;
|
||||
int l;
|
||||
|
||||
if(msc2[0]==0 || msc2[0]=='-' || strcmp(msc2, "off")==0) {
|
||||
xorriso->grow_blindly_msc2= -1;
|
||||
return(1);
|
||||
}
|
||||
num= Scanf_io_size(msc2, 0);
|
||||
l= strlen(msc2);
|
||||
if(msc2[l-1]<'0' || msc2[l-1]>'9')
|
||||
num/= 2048.0;
|
||||
xorriso->grow_blindly_msc2= num;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -help and part of -prog_help */
|
||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
@ -9681,10 +9915,12 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
"disk files with prefix \"stdio:\", e.g. stdio:/tmp/pseudo_drive .",
|
||||
" -dev address Set input and output drive and load eventual ISO image.",
|
||||
" Set the image expansion method to growing.",
|
||||
" -indev address Set input drive and load eventual ISO image. Switch from",
|
||||
" growing to modifying.",
|
||||
" -indev address Set input drive and load eventual ISO image. Use expansion",
|
||||
" methods modifying or blind growing.",
|
||||
" -outdev address",
|
||||
" Set output drive and switch from growing to modifying.",
|
||||
" Set output drive and use modifying or blind growing.",
|
||||
" -grow_blindly \"off\"|predicted_nwa",
|
||||
" Switch between modifying and blind growing.",
|
||||
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
|
||||
" Load a particular (outdated) ISO image from a -dev or",
|
||||
" -indev which hosts more than one session.",
|
||||
@ -9839,7 +10075,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Append extra bytes to image stream. (Default is 300k)",
|
||||
" -dummy \"on\"|\"off\"",
|
||||
" If \"on\" simulate burning. Refuse if media cannot simulate.",
|
||||
" -speed number[\"k\"|\"m\"|\"[x]CD\"|\"[x]DVD\"]",
|
||||
" -speed number[\"k/s\"|\"m/s\"|\"[x]CD\"|\"[x]DVD\"|\"[x]BD\"]",
|
||||
" Set the burn speed. Default is 0 = maximum speed.",
|
||||
" -stream_recording \"on\"|\"off\"",
|
||||
" Try to circumvent slow checkread on DVD-RAM and BD-RE.",
|
||||
@ -9932,12 +10168,15 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
||||
" Copy ISO file content into a byte interval of a disk file.",
|
||||
"",
|
||||
"Compatibility emulation (argument list may be ended by --):",
|
||||
" -as mkisofs [-help|-o|-R|-J|-V|-P|-f|-m|-graft-points|-path-list|pathspecs]",
|
||||
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
|
||||
" -M|-C|-graft-points|-path-list|pathspecs]",
|
||||
" Perform some mkisofs gestures, understand pathspecs as mkisofs",
|
||||
" does. Commit happens outside emulation at usual occasions.",
|
||||
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|path|-]",
|
||||
" Perform some cdrecord gestures, eventually write at most one",
|
||||
" data track to blank or overwriteable media.",
|
||||
" -pacifier \"xorriso\"|\"cdrecord\"|\"mkisofs\"",
|
||||
" Choose format of UPDATE pacifier during write operations.",
|
||||
"",
|
||||
"General options:",
|
||||
" -help Print this text",
|
||||
@ -10104,7 +10343,8 @@ 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
|
||||
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||
char *adr_value, int flag)
|
||||
@ -10128,7 +10368,7 @@ int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||
else if(strcmp(adr_mode, "track")==0)
|
||||
xorriso->image_start_mode= 2;
|
||||
else if(strcmp(adr_mode, "lba")==0 || strcmp(adr_mode, "sbsector")==0)
|
||||
xorriso->image_start_mode= 3;
|
||||
xorriso->image_start_mode= 3 | ((flag&1) << 16);
|
||||
else if(strcmp(adr_mode, "volid")==0)
|
||||
xorriso->image_start_mode= 4;
|
||||
else {
|
||||
@ -10781,7 +11021,7 @@ int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||
|
||||
|
||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx,
|
||||
xorriso->do_disk_pattern==1);
|
||||
(xorriso->do_disk_pattern==1) | 2);
|
||||
if(end_idx<=0)
|
||||
return(end_idx);
|
||||
num_descr= end_idx - *idx;
|
||||
@ -10983,6 +11223,26 @@ int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* Option -pacifier */
|
||||
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
|
||||
{
|
||||
if(strcmp(style, "xorriso")==0 || strcmp(style, "default")==0)
|
||||
xorriso->pacifier_style= 0;
|
||||
else if(strcmp(style, "mkisofs")==0 || strcmp(style, "genisofs")==0 ||
|
||||
strcmp(style, "genisoimage")==0 || strcmp(style, "xorrisofs")==0)
|
||||
xorriso->pacifier_style= 1;
|
||||
else if(strcmp(style, "cdrecord")==0 || strcmp(style, "cdrskin")==0 ||
|
||||
strcmp(style, "wodim")==0 || strcmp(style, "xorrecord")==0)
|
||||
xorriso->pacifier_style= 2;
|
||||
else {
|
||||
sprintf(xorriso->info_text, "-pacifier: unknown behavior code '%s'", style);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -padding */
|
||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag)
|
||||
{
|
||||
@ -11486,17 +11746,24 @@ int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag)
|
||||
} else if(*cpt=='x' || *cpt=='X')
|
||||
cpt++;
|
||||
|
||||
if(*cpt=='c' || *cpt=='C') {
|
||||
if (unit_found) {
|
||||
;
|
||||
} else if(*cpt=='c' || *cpt=='C') {
|
||||
cd_speed:;
|
||||
num*= 176.4;
|
||||
} else if(*cpt=='d' || *cpt=='D') {
|
||||
dvd_speed:;
|
||||
num*= 1385;
|
||||
} else if (!unit_found) {
|
||||
} else if(*cpt=='b' || *cpt=='B') {
|
||||
bd_speed:;
|
||||
num*= 4495.625;
|
||||
} else {
|
||||
ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 2);
|
||||
is_cd= (ret==2);
|
||||
if(is_cd)
|
||||
goto cd_speed;
|
||||
else if (profile_name[0]=='B' && profile_name[1]=='D')
|
||||
goto bd_speed;
|
||||
else
|
||||
goto dvd_speed;
|
||||
}
|
||||
@ -11931,7 +12198,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
static char arg1_commands[][40]= {
|
||||
"abort_on","add_plainly","blank","cd","cdi","cdx","close","dev",
|
||||
"dummy","dialog","disk_pattern","eject","iso_rr_pattern","follow",
|
||||
"format","fs","gid","history","indev","joliet","mark","not_leaf",
|
||||
"format","fs","gid","grow_blindly",
|
||||
"history","indev","joliet","mark","not_leaf",
|
||||
"not_list","not_mgt","options_from_file","osirrox","outdev","overwrite",
|
||||
"padding","path_list","pathspecs","pkt_output","print","prompt",
|
||||
"prog","publisher","reassure","report_about","rom_toc_scan",
|
||||
@ -12015,10 +12283,11 @@ return:
|
||||
*/
|
||||
/*
|
||||
bit0= recursion
|
||||
bit1= these are command line arguments (for xorriso->argument_emulation)
|
||||
*/
|
||||
{
|
||||
int ret, was_dashed, end_ret, num1, num2;
|
||||
char *cmd, *original_cmd, cmd_data[2*SfileadrL], *arg1, *arg2, type_text[5];
|
||||
char *cmd, *original_cmd, cmd_data[2*SfileadrL], *arg1, *arg2;
|
||||
|
||||
if(xorriso==NULL)
|
||||
return(0);
|
||||
@ -12029,6 +12298,21 @@ return:
|
||||
}
|
||||
|
||||
next_command:;
|
||||
if(flag&2) {
|
||||
ret= 1;
|
||||
if(xorriso->argument_emulation==1)
|
||||
ret= Xorriso_as_genisofs(xorriso, argc, argv, idx, 0);
|
||||
else if(xorriso->argument_emulation==2)
|
||||
ret= Xorriso_as_cdrskin(xorriso, argc, argv, idx, 0);
|
||||
if(xorriso->argument_emulation>0) {
|
||||
xorriso->argument_emulation= 0;
|
||||
if(ret<=0)
|
||||
goto eval_any_problems;
|
||||
if((*idx)>=argc)
|
||||
{ret= 1; goto ex;}
|
||||
}
|
||||
}
|
||||
|
||||
xorriso->prepended_wd= 0;
|
||||
xorriso->request_to_abort= xorriso->request_not_to_ask= 0;
|
||||
Xorriso_set_problem_status(xorriso, "", 0);
|
||||
@ -12247,6 +12531,10 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_gid(xorriso,arg1,0);
|
||||
|
||||
} else if(strcmp(cmd,"grow_blindly")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_grow_blindly(xorriso,arg1,0);
|
||||
|
||||
} else if(strcmp(cmd,"help")==0) {
|
||||
Xorriso_option_help(xorriso,0);
|
||||
|
||||
@ -12349,6 +12637,10 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_overwrite(xorriso,arg1,0);
|
||||
|
||||
} else if(strcmp(cmd,"pacifier")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_pacifier(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"padding")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_padding(xorriso, arg1, 0);
|
||||
@ -12485,13 +12777,17 @@ next_command:;
|
||||
ret= Xorriso_option_temp_mem_limit(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"test")==0) { /* This option does not exist. */
|
||||
(*idx)+= 2;
|
||||
ret= Xorriso_restore_is_identical(xorriso, NULL, arg2, arg1, type_text, 2);
|
||||
if(ret>=0) {
|
||||
sprintf(xorriso->info_text, "ISO node and disk file are %s\n",
|
||||
ret>0 ? ret==2 ? "suspicious" : "identical" : "different");
|
||||
char buf[SfileadrL];
|
||||
|
||||
(*idx)+= 1;
|
||||
ret= Xorriso_libburn_adr(xorriso, arg1, buf, 0);
|
||||
if(ret>0)
|
||||
sprintf(xorriso->info_text, " %s -> %s\n", arg1, buf);
|
||||
else if(ret==0)
|
||||
sprintf(xorriso->info_text, " not a libburn drive: %s\n", arg1);
|
||||
else
|
||||
sprintf(xorriso->info_text, " severe error with: %s\n", arg1);
|
||||
Xorriso_info(xorriso, 0);
|
||||
}
|
||||
|
||||
} else if(strcmp(cmd,"toc")==0) {
|
||||
Xorriso_option_toc(xorriso, 0);
|
||||
@ -12760,7 +13056,7 @@ protect_stdout:;
|
||||
|
||||
} else if(strcmp(cmd,"as")==0 && was_dashed) {
|
||||
if(strcmp(arg1, "mkisofs")==0 || strcmp(arg1, "genisoimage")==0 ||
|
||||
strcmp(arg1, "genisofs")==0)
|
||||
strcmp(arg1, "genisofs")==0 || strcmp(arg1, "xorrisofs")==0)
|
||||
goto protect_stdout;
|
||||
|
||||
} else {
|
||||
@ -12875,7 +13171,7 @@ int Xorriso_main(int argc, char **argv)
|
||||
|
||||
/* Interpret program arguments */
|
||||
i= 1;
|
||||
ret= Xorriso_interpreter(xorriso,argc,argv,&i,0);
|
||||
ret= Xorriso_interpreter(xorriso,argc,argv,&i,2);
|
||||
if(ret==3)
|
||||
goto end_sucessfully;
|
||||
if(ret<=0)
|
||||
|
@ -19,7 +19,17 @@ struct XorrisO;
|
||||
/* --------------------- Fundamental Management ------------------- */
|
||||
|
||||
/* Create a new xorriso object and tell it the program name to be used
|
||||
with messages.
|
||||
with messages and for decision of special behavior.
|
||||
@param xorriso returns the newly created XorrisO object
|
||||
@param progname typically argv[0] of main(). Some leafnames of the progname
|
||||
path have special meaning and trigger special behavior:
|
||||
"osirrox" allows image-to-disk copying: -osirrox "on"
|
||||
"xorrisofs" activates permanent mkisofs emulation
|
||||
"genisofs" alias of "xorrisofs"
|
||||
"mkisofs" alias of "xorrisofs"
|
||||
"genisoimage" alias of "xorrisofs"
|
||||
@parm flag unused yet, submit 0
|
||||
@return >0 success , <=0 failure, no object created
|
||||
*/
|
||||
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
|
||||
|
||||
@ -315,6 +325,9 @@ int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag);
|
||||
/* Option -gid */
|
||||
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
|
||||
|
||||
/* Option -grow_blindly */
|
||||
int Xorriso_option_grow_blindly(struct XorrisO *xorriso, char *msc2, int flag);
|
||||
|
||||
/* Option -help and part of -prog_help */
|
||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -332,7 +345,8 @@ int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
||||
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
|
||||
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||
char *adr_value, int flag);
|
||||
@ -394,6 +408,9 @@ 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_list */
|
||||
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||
|
||||
/* Option -not_paths */
|
||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
@ -409,6 +426,9 @@ 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);
|
||||
|
||||
/* Option -pacifier */
|
||||
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag);
|
||||
|
||||
/* Option -padding */
|
||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
||||
|
||||
|
3
xorriso/xorriso_buildstamp.h
Normal file
3
xorriso/xorriso_buildstamp.h
Normal file
@ -0,0 +1,3 @@
|
||||
#ifndef Xorriso_build_timestamP
|
||||
#define Xorriso_build_timestamP "-none-given-"
|
||||
#endif
|
3
xorriso/xorriso_buildstamp_none.h
Normal file
3
xorriso/xorriso_buildstamp_none.h
Normal file
@ -0,0 +1,3 @@
|
||||
#ifndef Xorriso_build_timestamP
|
||||
#define Xorriso_build_timestamP "-none-given-"
|
||||
#endif
|
@ -60,7 +60,7 @@ and to MMC-5 for DVD or BD).
|
||||
GPL software included:<BR>
|
||||
</H2>
|
||||
<DL>
|
||||
<DT>libburn-0.4.9</DT>
|
||||
<DT>libburn-0.5.1</DT>
|
||||
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
furthered since August 2006 by
|
||||
@ -68,7 +68,7 @@ Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||
<DT>libisofs-0.6.6</DT>
|
||||
<DD>operates on ISO 9660 filesystem images.</DD>
|
||||
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
|
||||
<DT>libisoburn-0.2.0</DT>
|
||||
<DT>libisoburn-0.2.2</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>
|
||||
@ -107,12 +107,11 @@ Changes file properties in the ISO image.
|
||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||
</LI>
|
||||
<LI>
|
||||
Can write result as completely new image to optical media or
|
||||
filesystem objects.
|
||||
Writes result as completely new image or as add-on session
|
||||
to optical media or filesystem objects.
|
||||
</LI>
|
||||
<LI>
|
||||
Can write result as add-on session to appendable multi-session media,
|
||||
to overwriteable media, to regular files, and to block devices.
|
||||
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
||||
</LI>
|
||||
<LI>
|
||||
Can restore single files and whole trees from ISO image to disk filesystem.
|
||||
@ -280,6 +279,24 @@ with an external consumer of the generated ISO image. Any message
|
||||
output will be redirected to stderr in this case.</DT>
|
||||
<DD>$<KBD> xorriso -outdev - ...other.options... | consumer</KBD></DD>
|
||||
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
|
||||
<DT>
|
||||
Let xorriso serve underneath growisofs via its alias name "xorrisofs"
|
||||
which enables mkisofs emulation:
|
||||
</DT>
|
||||
<DD>$<KBD> export MKISOFS="xorrisofs"</KBD></DD>
|
||||
<DD>$<KBD> growisofs -Z /dev/dvd /some/files</KBD></DD>
|
||||
<DD>$<KBD> growisofs -M /dev/dvd /more/files</KBD></DD>
|
||||
<DT>
|
||||
One may switch from mkisofs emulation to xorriso's own command mode:
|
||||
</DT>
|
||||
<DD>$<KBD> growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
|
||||
</KBD></DD>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
@ -315,8 +332,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.2.2.pl00.tar.gz">xorriso-0.2.2.pl00.tar.gz</A>
|
||||
(1020 KB).
|
||||
</DD>
|
||||
</DL>
|
||||
</DD>
|
||||
@ -341,22 +358,30 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
|
||||
|
||||
<HR>
|
||||
<P>
|
||||
Bug fixes towards xorriso-0.1.8.pl00:
|
||||
Bug fixes towards xorriso-0.2.0.pl00:
|
||||
<UL>
|
||||
<LI>
|
||||
-chmod unintentionally performed o-x as first operation
|
||||
</LI>
|
||||
|
||||
<LI>libburn could not access drives /dev/scdN without existing /dev/srN</LI>
|
||||
|
||||
</UL>
|
||||
</P>
|
||||
<P>
|
||||
Enhancements towards previous stable version xorriso-0.1.8.pl00:
|
||||
Enhancements towards previous stable version xorriso-0.2.0.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>New option -grow_blindly</LI>
|
||||
<LI>Options -C and -M with -as mkisofs emulation</LI>
|
||||
<LI>Options with -as cdrecord emulation:<BR>
|
||||
-multi , -msinfo , --grow_overwriteable_iso , write_start_address= ,
|
||||
-isosize , tsize=
|
||||
</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>make install creates xorriso aliases as symbolic links:
|
||||
osirrox, xorrisofs, xorrecord
|
||||
</LI>
|
||||
<LI>
|
||||
Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
@ -364,16 +389,15 @@ 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.2.3 :</H3></DT>
|
||||
<DD>Bug fixes towards xorriso-0.2.2.pl00:
|
||||
<UL>
|
||||
</LI>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
<DD>Enhancements towards stable version 0.2.0.pl00:
|
||||
<DD>Enhancements towards stable version 0.2.2.pl00:
|
||||
<UL>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
@ -381,9 +405,9 @@ New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
|
||||
</UL>
|
||||
</DD>
|
||||
<DD> </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.2.3</A>
|
||||
<DD><A HREF="xorriso_help_devel">xorriso_0.2.3 -help</A></DD>
|
||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.3)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>If you want to distribute development versions of xorriso, then use
|
||||
this tarball which produces static linking between xorriso and the
|
||||
@ -393,8 +417,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.2.3.tar.gz">xorriso-0.2.3.tar.gz</A>
|
||||
(1020 KB).
|
||||
</DD>
|
||||
<DT>A dynamically linked development version of xorriso can be obtained
|
||||
from repositories of
|
||||
|
@ -20,6 +20,17 @@ xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with
|
||||
|
||||
xorriso_xorriso_LDADD = $(THREAD_LIBS)
|
||||
|
||||
|
||||
# Trying to create a build timestamp file
|
||||
#
|
||||
BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||
# phony targets get rebuilt every time
|
||||
.PHONY: xorriso/xorriso_buildstamp.h
|
||||
xorriso/xorriso_buildstamp.h:
|
||||
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||
cat xorriso/xorriso_buildstamp.h
|
||||
|
||||
|
||||
xorriso_xorriso_SOURCES = \
|
||||
\
|
||||
xorriso/xorriso.h \
|
||||
@ -28,6 +39,7 @@ xorriso_xorriso_SOURCES = \
|
||||
xorriso/xorrisoburn.h \
|
||||
xorriso/xorrisoburn.c \
|
||||
xorriso/xorriso_timestamp.h \
|
||||
xorriso/xorriso_buildstamp.h \
|
||||
\
|
||||
libisoburn/libisoburn.h \
|
||||
libisoburn/isoburn.h \
|
||||
@ -137,7 +149,6 @@ xorriso_xorriso_SOURCES = \
|
||||
\
|
||||
version.h
|
||||
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
test/compare_file
|
||||
|
||||
@ -151,6 +162,41 @@ test_compare_file_LDADD =
|
||||
test_compare_file_SOURCES = test/compare_file.c
|
||||
|
||||
|
||||
# Install symbolic links to the xorriso binary
|
||||
#
|
||||
install-exec-hook:
|
||||
if test -e $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/xorrisofs
|
||||
if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/osirrox
|
||||
if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
|
||||
ln -s xorriso $(bindir)/xorrecord
|
||||
|
||||
|
||||
|
||||
# <<< seems to be outperformed by the .PHONY above
|
||||
|
||||
# Trying to create a build timestamp file
|
||||
#
|
||||
buildstamp:
|
||||
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||
cat xorriso/xorriso_buildstamp.h
|
||||
|
||||
# For now make buildstamped has to be performed manually.
|
||||
buildstamped: buildstamp
|
||||
make
|
||||
#
|
||||
# Processing of the "all:" rule happens too late.
|
||||
# How to create a dependency of xorriso.c on buildstamp ?
|
||||
# Not working:
|
||||
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
|
||||
# on buildstamp. It runs. But at quite random occasions.
|
||||
# xorriso/xorriso_buildstamp.h: buildstamp
|
||||
#
|
||||
# all: buildstamp
|
||||
|
||||
# <<< seems to be outperformed by the .PHONY above
|
||||
|
||||
## ========================================================================= ##
|
||||
|
||||
# Indent source files
|
||||
@ -184,6 +230,7 @@ EXTRA_DIST = \
|
||||
COPYING \
|
||||
INSTALL \
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_buildstamp_none.h \
|
||||
$(man_MANS)
|
||||
|
||||
|
||||
|
@ -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.2.2"
|
||||
|
||||
/** The source code release timestamp */
|
||||
#include "xorriso_timestamp.h"
|
||||
@ -26,7 +26,10 @@
|
||||
#define Xorriso_timestamP "-none-given-"
|
||||
#endif
|
||||
|
||||
/** The binary build timestamp is to be set externally by the compiler */
|
||||
/** The binary build timestamp is to be set externally by the compiler
|
||||
or by a macro definition in xorriso_buildstamp.h.
|
||||
*/
|
||||
#include "xorriso_buildstamp.h"
|
||||
#ifndef Xorriso_build_timestamP
|
||||
#define Xorriso_build_timestamP "-none-given-"
|
||||
#endif
|
||||
@ -71,6 +74,13 @@ struct XorrisO { /* the global context of xorriso */
|
||||
char initial_wdx[SfileadrL];
|
||||
int no_rc;
|
||||
|
||||
/* Command line argument emulations:
|
||||
0=xorriso mode
|
||||
1=mkisofs mode
|
||||
2=cdrecord mode
|
||||
*/
|
||||
int argument_emulation;
|
||||
|
||||
/** List of startupfiles */
|
||||
char rc_filenames[Xorriso_rc_nuM][SfileadrL];
|
||||
int rc_filename_count;
|
||||
@ -123,6 +133,8 @@ struct XorrisO { /* the global context of xorriso */
|
||||
1= value is session number
|
||||
2= value is track number
|
||||
3= value is lba
|
||||
bit16= with mode 3 : value is possibly 16 too high.
|
||||
Let isoburn_set_msc1() adjust it.
|
||||
bit30= interference with normal msc1 processing
|
||||
is enabled. Without this bit,
|
||||
isoburn_set_msc1() will not be called.
|
||||
@ -145,6 +157,11 @@ struct XorrisO { /* the global context of xorriso */
|
||||
connected to externaly perveived stdout.
|
||||
*/
|
||||
|
||||
int grow_blindly_msc2; /* if >= 0 this causes growing from drive to drive.
|
||||
The value is used as block address offset for
|
||||
image generation. Like in: mkisofs -C msc1,msc2
|
||||
*/
|
||||
|
||||
int ban_stdio_write;
|
||||
int do_dummy;
|
||||
int do_close;
|
||||
@ -256,6 +273,7 @@ struct XorrisO { /* the global context of xorriso */
|
||||
double error_count; /* double will not roll over */
|
||||
|
||||
/* pacifiers */
|
||||
int pacifier_style; /* 0= xorriso, 1=mkisofs 2=cdrecord */
|
||||
double pacifier_interval;
|
||||
double start_time;
|
||||
double last_update_time;
|
||||
@ -434,6 +452,8 @@ int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag);
|
||||
|
||||
int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
|
||||
|
||||
int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag);
|
||||
|
||||
|
||||
int Sfile_str(char target[SfileadrL], char *source, int flag);
|
||||
|
||||
@ -479,6 +499,12 @@ int Sort_argv(int argc, char **argv, int flag);
|
||||
/* @param flag bit0= single letters */
|
||||
char *Ftypetxt(mode_t st_mode, int flag);
|
||||
|
||||
/* @param flag bit0=with year and seconds
|
||||
bit1=timestamp format YYYY.MM.DD.hhmmss
|
||||
*/
|
||||
char *Ftimetxt(time_t t, char timetext[40], int flag);
|
||||
|
||||
|
||||
struct DirseQ;
|
||||
|
||||
int Dirseq_new(struct DirseQ **o, char *adr, int flag);
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2008.06.22.090001"
|
||||
#define Xorriso_timestamP "2008.07.18.120001"
|
||||
|
@ -409,6 +409,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
|
||||
bit2= regard overwriteable media as blank
|
||||
bit3= if the drive is a regular disk file: truncate it to
|
||||
the write start address
|
||||
bit5= do not print toc
|
||||
@return <=0 failure , 1= ok
|
||||
2=success, but not writeable with bit1
|
||||
3=success, but not blank and not ISO with bit0
|
||||
@ -486,7 +487,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
xorriso->image_start_mode&= ~0xffff; /* perform auto setting */
|
||||
if((xorriso->image_start_mode&(1<<30))) { /* if enabled at all */
|
||||
ret= isoburn_set_msc1(drive, xorriso->image_start_mode & 0xffff,
|
||||
xorriso->image_start_value, 0);
|
||||
xorriso->image_start_value,
|
||||
!!(xorriso->image_start_mode & (1<<16)));
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
if(xorriso->image_start_mode&(1<<31))
|
||||
@ -534,6 +536,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
}
|
||||
if(!(flag&32))
|
||||
Xorriso_toc(xorriso, 1|2);
|
||||
{ret= 1+not_writeable; goto ex;}
|
||||
}
|
||||
@ -578,7 +581,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
Xorriso_set_image_severities(xorriso, 0);
|
||||
Xorriso_give_up_drive(xorriso, 1);
|
||||
Xorriso_give_up_drive(xorriso, 1|((flag&32)>>2));
|
||||
sprintf(xorriso->info_text,"Cannot read ISO image tree");
|
||||
sev= "FAILURE";
|
||||
if(xorriso->img_read_error_mode==2)
|
||||
@ -618,10 +621,11 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
boot_fate);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
|
||||
if(!(flag&32)) {
|
||||
Xorriso_toc(xorriso, 1);
|
||||
if(xorriso->loaded_volid[0]!=0) {
|
||||
sprintf(xorriso->result_line,"Volume id : '%s'\n",xorriso->loaded_volid);
|
||||
sprintf(xorriso->result_line,"Volume id : '%s'\n",
|
||||
xorriso->loaded_volid);
|
||||
Xorriso_result(xorriso,0);
|
||||
if(strcmp(xorriso->loaded_volid, xorriso->volid)!=0 &&
|
||||
!xorriso->volid_default) {
|
||||
@ -629,11 +633,12 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
ret= 1+not_writeable;
|
||||
ex:
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0) {
|
||||
hret= Xorriso_give_up_drive(xorriso, flag&3);
|
||||
hret= Xorriso_give_up_drive(xorriso, (flag&3)|((flag&32)>>2));
|
||||
if(hret<ret)
|
||||
ret= hret;
|
||||
}
|
||||
@ -812,7 +817,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
int ret, relax= 0, i, profile, status, num_formats;
|
||||
int major, minor, micro;
|
||||
unsigned dummy;
|
||||
char xorriso_id[256], *img_id, profile_name[80];
|
||||
char xorriso_id[256], *img_id, profile_name[80], sfe[5*SfileadrL];
|
||||
struct isoburn_imgen_opts *sopts= NULL;
|
||||
struct burn_drive_info *dinfo, *source_dinfo;
|
||||
struct burn_drive *drive, *source_drive;
|
||||
@ -952,7 +957,18 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
if(ret<0)
|
||||
{ret= 0; goto ex;}
|
||||
Xorriso_set_abort_severity(xorriso, 1);
|
||||
if(xorriso->out_drive_handle == xorriso->in_drive_handle ||
|
||||
if (xorriso->grow_blindly_msc2 >= 0 &&
|
||||
xorriso->out_drive_handle != xorriso->in_drive_handle) {
|
||||
ret= isoburn_prepare_blind_grow(source_drive, &disc, sopts, drive,
|
||||
xorriso->grow_blindly_msc2);
|
||||
if(ret>0) {
|
||||
/* Allow the consumer of output to access the input drive */
|
||||
source_drive= NULL;
|
||||
ret= Xorriso_give_up_drive(xorriso, 1|8);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
} else if(xorriso->out_drive_handle == xorriso->in_drive_handle ||
|
||||
xorriso->in_drive_handle == NULL) {
|
||||
ret= isoburn_prepare_disc(source_drive, &disc, sopts);
|
||||
} else {
|
||||
@ -964,6 +980,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
|
||||
isoburn_igopt_get_effective_lba(sopts, &(xorriso->session_lba));
|
||||
|
||||
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
||||
@ -1010,7 +1027,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_info(xorriso, 0);
|
||||
}
|
||||
}
|
||||
|
||||
ret= isoburn_activate_session(drive);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0) {
|
||||
@ -1027,7 +1043,8 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
isoburn_sync_after_write(source_drive, drive, 0);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
sprintf(xorriso->info_text, "Writing completed sucessfully.\n\n");
|
||||
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
|
||||
Text_shellsafe(xorriso->outdev,sfe,0));
|
||||
Xorriso_info(xorriso, 0);
|
||||
ret= 1;
|
||||
ex:;
|
||||
@ -1080,7 +1097,8 @@ int Xorriso_check_burn_abort(struct XorrisO *xorriso, int flag)
|
||||
It issues pacifying update messages to the user.
|
||||
@param flag bit0-3 = emulation mode
|
||||
0= xorriso
|
||||
1= cdrskin
|
||||
1= mkisofs
|
||||
2= cdrecord
|
||||
bit4= report speed in CD units
|
||||
*/
|
||||
int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
@ -1088,16 +1106,19 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
{
|
||||
int ret, size, free_bytes, i, aborting= 0, emul, buffer_fill= 50, last_sector;
|
||||
struct burn_progress progress;
|
||||
char *status_text;
|
||||
char *status_text, date_text[80];
|
||||
enum burn_drive_status drive_status;
|
||||
double start_time, current_time, last_time;
|
||||
double measured_speed, speed_factor= 1385000;
|
||||
double measured_speed, speed_factor= 1385000, quot;
|
||||
time_t time_prediction;
|
||||
|
||||
start_time= Sfile_microtime(0);
|
||||
while(burn_drive_get_status(drive, NULL) == BURN_DRIVE_SPAWNING)
|
||||
usleep(100002);
|
||||
|
||||
emul= flag&15;
|
||||
if(emul==0)
|
||||
emul= xorriso->pacifier_style;
|
||||
if(flag&16)
|
||||
speed_factor= 150.0*1024;
|
||||
progress.sector= 0;
|
||||
@ -1110,7 +1131,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
break;
|
||||
current_time= Sfile_microtime(0);
|
||||
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {
|
||||
if(emul==1) {
|
||||
if(emul==2) {
|
||||
if(progress.sector<=progress.sectors)
|
||||
sprintf(xorriso->info_text, "%4d of %4d MB written",
|
||||
progress.sector / 512, progress.sectors / 512);
|
||||
@ -1118,14 +1139,15 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
sprintf(xorriso->info_text, "%4d MB written",
|
||||
progress.sector / 512);
|
||||
|
||||
if(xorriso->pacifier_fifo!=NULL) {
|
||||
if(xorriso->pacifier_fifo!=NULL)
|
||||
ret= burn_fifo_inquire_status(xorriso->pacifier_fifo,
|
||||
&size, &free_bytes, &status_text);
|
||||
else
|
||||
ret= isoburn_get_fifo_status(drive, &size, &free_bytes, &status_text);
|
||||
if(ret>0 )
|
||||
sprintf(xorriso->info_text+strlen(xorriso->info_text),
|
||||
" (fifo %2d%%)",
|
||||
(int) (100.0-100.0*((double) free_bytes)/(double) size));
|
||||
}
|
||||
|
||||
buffer_fill= 50;
|
||||
if(progress.buffer_capacity>0)
|
||||
@ -1142,6 +1164,19 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
measured_speed/speed_factor);
|
||||
}
|
||||
|
||||
} else if(emul == 1 &&
|
||||
progress.sectors > 0 && progress.sector <= progress.sectors) {
|
||||
/* "37.87% done, estimate finish Tue Jul 15 18:55:07 2008" */
|
||||
|
||||
quot= ((double) progress.sector) / ((double) progress.sectors);
|
||||
sprintf(xorriso->info_text, " %2.2f%% done", quot*100.0);
|
||||
if(current_time - start_time >= 2 && quot >= 0.02) {
|
||||
time_prediction= current_time +
|
||||
(1.0 - quot) / quot * (current_time-start_time) + 1;
|
||||
Ftimetxt(time_prediction, date_text, 4);
|
||||
sprintf(xorriso->info_text+strlen(xorriso->info_text),
|
||||
", estimate finish %s", date_text);
|
||||
}
|
||||
} else {
|
||||
if(progress.sector<=progress.sectors)
|
||||
sprintf(xorriso->info_text, "Writing: sector %d of %d",
|
||||
@ -3606,7 +3641,7 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
|
||||
int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
char adr[BURN_DRIVE_ADR_LEN];
|
||||
int i;
|
||||
int i, j, max_dev_len= 1, pad;
|
||||
struct burn_drive_info *drive_list= NULL;
|
||||
unsigned int drive_count;
|
||||
char *respt, perms[8];
|
||||
@ -3633,7 +3668,16 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
|
||||
sprintf(xorriso->info_text, "Full drive scan done\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
|
||||
sprintf(xorriso->info_text, "-----------------------------------------------------------------------------\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
respt= xorriso->result_line;
|
||||
for(i= 0; i < drive_count && !(xorriso->request_to_abort); i++) {
|
||||
if(burn_drive_get_adr(&(drive_list[i]), adr)<=0)
|
||||
strcpy(adr, "-get_adr_failed-");
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(strlen(adr)>max_dev_len)
|
||||
max_dev_len= strlen(adr);
|
||||
}
|
||||
for(i= 0; i < drive_count && !(xorriso->request_to_abort); i++) {
|
||||
if(burn_drive_get_adr(&(drive_list[i]), adr)<=0)
|
||||
strcpy(adr, "-get_adr_failed-");
|
||||
@ -3649,10 +3693,18 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
|
||||
if(stbuf.st_mode&S_IROTH) perms[4]= 'r';
|
||||
if(stbuf.st_mode&S_IWOTH) perms[5]= 'w';
|
||||
}
|
||||
sprintf(respt, "%d -dev '%s' %s : '%-8.8s' '%s' \n",
|
||||
i, adr, perms, drive_list[i].vendor, drive_list[i].product);
|
||||
sprintf(respt, "%d -dev '%s' ", i, adr);
|
||||
pad= max_dev_len-strlen(adr);
|
||||
if(pad>0)
|
||||
for(j= 0; j<pad; j++)
|
||||
strcat(respt, " ");
|
||||
sprintf(respt+strlen(respt), "%s : '%-8.8s' '%s' \n",
|
||||
perms, drive_list[i].vendor, drive_list[i].product);
|
||||
Xorriso_result(xorriso,0);
|
||||
}
|
||||
sprintf(xorriso->info_text, "-----------------------------------------------------------------------------\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
|
||||
burn_drive_info_free(drive_list);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
return(1);
|
||||
@ -5871,8 +5923,10 @@ int Xorriso_atip(struct XorrisO *xorriso, int flag)
|
||||
if(strstr(profile_name,"DVD")==profile_name) {
|
||||
sprintf(respt, "book type: %s (emulated booktype)\n", profile_name);
|
||||
Xorriso_result(xorriso,1);
|
||||
if(profile_number == 0x13) {
|
||||
sprintf(respt, "xorriso: message for sdvdbackup: \"(growisofs mode Restricted Overwrite)\"\n");
|
||||
Xorriso_result(xorriso,1);
|
||||
}
|
||||
} else {
|
||||
sprintf(respt, "ATIP info from disk:\n");
|
||||
Xorriso_result(xorriso,1);
|
||||
@ -5906,9 +5960,16 @@ int Xorriso_atip(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
/* @param write_start_address is valid if >=0
|
||||
@param tsize is valid if >0
|
||||
@param flag bit0= grow_overwriteable_iso
|
||||
bit1= do_isosize
|
||||
*/
|
||||
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
char *track_source, off_t tsize, int flag)
|
||||
{
|
||||
int ret, fd, unpredicted_size, profile_number, is_cd= 0;
|
||||
int ret, fd, unpredicted_size, profile_number, is_cd= 0, dummy, nwa= -1;
|
||||
int isosize= -1, i, full_size, do_isosize;
|
||||
struct burn_drive_info *dinfo;
|
||||
struct burn_drive *drive;
|
||||
struct burn_write_opts *burn_options;
|
||||
@ -5920,8 +5981,9 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
struct burn_source *data_src, *fifo_src;
|
||||
enum burn_disc_status disc_state;
|
||||
char reasons[BURN_REASONS_LEN], sfe[5*SfileadrL], profile_name[80];
|
||||
char head_buffer[64*1024], *headpt;
|
||||
|
||||
|
||||
do_isosize= !!(flag&2);
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to burn track", 2);
|
||||
if(ret<=0)
|
||||
@ -5934,7 +5996,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
session= burn_session_create();
|
||||
ret= burn_disc_add_session(disc,session,BURN_POS_END);
|
||||
if(ret==0) {
|
||||
/* >>> */;
|
||||
sprintf(xorriso->info_text, "Cannot add session object to disc object.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
goto ex;
|
||||
}
|
||||
track= burn_track_create();
|
||||
@ -5959,6 +6022,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(do_isosize && xorriso->fs < 64)
|
||||
xorriso->fs= 64;
|
||||
fifo_src= burn_fifo_source_new(data_src, 2048, xorriso->fs, 0);
|
||||
if(fifo_src == NULL) {
|
||||
sprintf(xorriso->info_text, "Could not create fifo object of 4 MB");
|
||||
@ -5975,20 +6040,19 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
burn_session_add_track(session, track, BURN_POS_END);
|
||||
burn_source_free(data_src);
|
||||
|
||||
if(flag&1)
|
||||
/* consider overwriteables with ISO as appendable */
|
||||
disc_state= isoburn_disc_get_status(drive);
|
||||
else
|
||||
/* handle overwriteables as always blank */
|
||||
disc_state= burn_disc_get_status(drive);
|
||||
if(disc_state == BURN_DISC_BLANK) {
|
||||
|
||||
if(disc_state == BURN_DISC_BLANK || disc_state == BURN_DISC_APPENDABLE) {
|
||||
/* ok */;
|
||||
} else if(disc_state == BURN_DISC_APPENDABLE) {
|
||||
if(!isoburn_needs_emulation(drive)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Appendable media with data detected. Need blank media.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
} else {
|
||||
if(disc_state == BURN_DISC_FULL) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Closed media with data detected. Need blank media.");
|
||||
"Closed media with data detected. Need blank or appendable media.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
if(burn_disc_erasable(drive)) {
|
||||
sprintf(xorriso->info_text, "Try --blank_fast\n");
|
||||
@ -6004,6 +6068,66 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
}
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(isoburn_needs_emulation(drive))
|
||||
burn_write_opts_set_multi(burn_options, 0);
|
||||
|
||||
if(tsize > 0) {
|
||||
fixed_size= tsize;
|
||||
burn_track_set_size(track, fixed_size);
|
||||
}
|
||||
if(do_isosize) {
|
||||
ret= burn_fifo_peek_data(xorriso->pacifier_fifo, head_buffer, 64*1024, 0);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot obtain first 64 kB from input stream.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
/* read isosize from head_buffer, not from media*/
|
||||
ret= isoburn_read_iso_head(drive, 0, &isosize, head_buffer, (1<<13));
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Option -isosize given but data stream seems not to be ISO 9660");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
sprintf(xorriso->info_text, "Size of ISO 9660 image: %ds", isosize);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
fixed_size= ((off_t) (isosize)) * (off_t) 2048;
|
||||
burn_track_set_size(track, fixed_size);
|
||||
}
|
||||
|
||||
ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 2);
|
||||
is_cd= (ret==2);
|
||||
|
||||
if(isoburn_needs_emulation(drive)) {
|
||||
if(flag&1) {
|
||||
ret= isoburn_disc_track_lba_nwa(drive, burn_options, 0, &dummy, &nwa);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot obtain next writeable address of emulated multi-session media\n");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(nwa==32)
|
||||
nwa= 0; /* No automatic toc emulation. Formatter might not be aware. */
|
||||
burn_write_opts_set_start_byte(burn_options,((off_t) nwa) * (off_t) 2048);
|
||||
} else {
|
||||
nwa= 0;
|
||||
burn_write_opts_set_start_byte(burn_options, (off_t) 0);
|
||||
}
|
||||
}
|
||||
|
||||
if(write_start_address>=0) {
|
||||
nwa= write_start_address / (off_t) 2048;
|
||||
if(((off_t) nwa) * (off_t) 2048 < write_start_address )
|
||||
nwa++;
|
||||
burn_write_opts_set_start_byte(burn_options, ((off_t) nwa) * (off_t) 2048);
|
||||
}
|
||||
|
||||
if(burn_write_opts_auto_write_type(burn_options, disc, reasons, 0) ==
|
||||
BURN_WRITE_NONE) {
|
||||
sprintf(xorriso->info_text,
|
||||
@ -6014,10 +6138,6 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
|
||||
ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 2);
|
||||
is_cd= (ret==2);
|
||||
if(isoburn_needs_emulation(drive))
|
||||
burn_write_opts_set_start_byte(burn_options, (off_t) 0);
|
||||
ret= Xorriso_sanitize_image_size(xorriso, drive, disc, burn_options, 2);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
@ -6025,7 +6145,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
xorriso->run_state= 1; /* Indicate that burning has started */
|
||||
burn_disc_write(burn_options, disc);
|
||||
|
||||
ret= Xorriso_pacifier_loop(xorriso, drive, 1|(is_cd<<4));
|
||||
ret= Xorriso_pacifier_loop(xorriso, drive, 2|(is_cd<<4));
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
if(!burn_drive_wrote_well(drive)) {
|
||||
@ -6036,7 +6156,37 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag)
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
|
||||
sprintf(xorriso->info_text, "Writing completed sucessfully.\n\n");
|
||||
/* Update ISO header at lba 0 */
|
||||
if((flag&1) && nwa >= 32) {
|
||||
if(!do_isosize) {
|
||||
/* head_buffer was not filled yet. Read it from output media. */
|
||||
ret= isoburn_read_iso_head(drive, nwa, &isosize, head_buffer, 2);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot read freshly written ISO image head");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
/* patch ISO header */
|
||||
full_size= nwa + isosize;
|
||||
headpt= head_buffer + 32*1024;
|
||||
for(i=0;i<4;i++)
|
||||
headpt[87-i]= headpt[80+i]= (full_size >> (8*i)) & 0xff;
|
||||
ret= burn_random_access_write(drive, (off_t) 0, head_buffer,
|
||||
(off_t) (64*1024), 1);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"Cannot write new ISO image head to LBA 0");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(xorriso->info_text, "Writing to %s completed sucessfully.\n\n",
|
||||
Text_shellsafe(xorriso->outdev,sfe,0));
|
||||
Xorriso_info(xorriso, 0);
|
||||
ret= 1;
|
||||
ex:;
|
||||
@ -6051,7 +6201,6 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* @param flag bit1= outdev rather than indev
|
||||
@return <0 error, 0 = no profile to see , 1= ok , 2= ok, is CD profile
|
||||
*/
|
||||
@ -6328,3 +6477,66 @@ int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node,
|
||||
return(ret>0);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_libburn_adr(struct XorrisO *xorriso, char *path, char adr[],
|
||||
int flag)
|
||||
{
|
||||
int ret;
|
||||
char local_adr[BURN_DRIVE_ADR_LEN];
|
||||
|
||||
adr[0]= 0;
|
||||
ret= burn_drive_convert_fs_adr(path, local_adr);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
if(strlen(local_adr)>=SfileadrL)
|
||||
return(2);
|
||||
strcpy(adr, local_adr);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= grow_overwriteable_iso
|
||||
bit1= obtain info from outdev
|
||||
*/
|
||||
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag)
|
||||
{
|
||||
int ret, dummy;
|
||||
struct burn_drive *drive;
|
||||
struct burn_drive_info *dinfo;
|
||||
enum burn_disc_status disc_state;
|
||||
|
||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||
"on attempt to obtain msinfo", flag&2);
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
|
||||
if(flag&1)
|
||||
disc_state= isoburn_disc_get_status(drive);
|
||||
else
|
||||
disc_state= burn_disc_get_status(drive);
|
||||
if(disc_state != BURN_DISC_APPENDABLE) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,
|
||||
"%s media is not appendable. Cannot obtain -msinfo.",
|
||||
(flag&2) ? "Output" : "Input");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
ret= isoburn_disc_get_msc1(drive, msc1);
|
||||
if(ret<=0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text, "Cannot obtain address of most recent session");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
ret= isoburn_disc_track_lba_nwa(drive, NULL, 0, &dummy, msc2);
|
||||
if(ret<0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text, "Cannot obtain next writeable address on media");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ struct FindjoB;
|
||||
*/
|
||||
#define xorriso_libisoburn_req_major 0
|
||||
#define xorriso_libisoburn_req_minor 2
|
||||
#define xorriso_libisoburn_req_micro 0
|
||||
#define xorriso_libisoburn_req_micro 2
|
||||
|
||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -188,7 +188,13 @@ int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
||||
*/
|
||||
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
||||
|
||||
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
|
||||
/* @param write_start_address is valid if >=0
|
||||
@param tsize is valid if >0
|
||||
@param flag bit0= grow_overwriteable_iso
|
||||
bit1= do_isosize
|
||||
*/
|
||||
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
char *track_source, off_t tsize, int flag);
|
||||
|
||||
/* @param flag bit1= outdev rather than indev
|
||||
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
||||
@ -259,5 +265,20 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
||||
char *img_path, char *disk_path,
|
||||
char type_text[5], int flag);
|
||||
|
||||
|
||||
/* Return the official libburn address of an address string. This may fail
|
||||
if the string does not constitute a valid drive address.
|
||||
@param official_adr must offer SfileadrL bytes of reply buffer
|
||||
@return 1 = success , 0 = failure , -1 = severe error
|
||||
*/
|
||||
int Xorriso_libburn_adr(struct XorrisO *xorriso, char *address_string,
|
||||
char official_adr[], int flag);
|
||||
|
||||
|
||||
/* @param flag bit1= obtain info from outdev
|
||||
*/
|
||||
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag);
|
||||
|
||||
|
||||
#endif /* Xorrisoburn_includeD */
|
||||
|
||||
|
Reference in New Issue
Block a user