Compare commits
476 Commits
ZeroTwoZer
...
ZeroFourTw
Author | SHA1 | Date | |
---|---|---|---|
18ae4164f9 | |||
e6a2f5f8c7 | |||
8357f64287 | |||
29e6852014 | |||
ca67cce3f5 | |||
a551125a6d | |||
a15232537c | |||
f9441ad5e4 | |||
c6407f66c2 | |||
912355039c | |||
cc5bd34298 | |||
abb045a26f | |||
36b200e0e9 | |||
b8790971d9 | |||
5d33c841d6 | |||
d284f662da | |||
97a3eb5b1f | |||
a38c256789 | |||
4234319cff | |||
543df52274 | |||
e146eccd5c | |||
56abdd0c2c | |||
5f06ee19c5 | |||
3a88ef260c | |||
bddf8008a1 | |||
7543f5d940 | |||
7c4cf26163 | |||
6d05a2f7fc | |||
f0c12594c1 | |||
1b8f2cc0ee | |||
489a1b6c98 | |||
f155241628 | |||
7e40478a75 | |||
11fe78ffb1 | |||
4d1d3732be | |||
d152de91f4 | |||
16d84807da | |||
3b05800e08 | |||
bc9eac552a | |||
fbaa612ae9 | |||
bfd82b2ccf | |||
219aa7e4b6 | |||
d1490aa95e | |||
6de5c8d9d4 | |||
7966b52a5b | |||
b3bdfec3b1 | |||
d69acf1374 | |||
1fe5898dc1 | |||
ea91d591c3 | |||
920adb9e9f | |||
29de8cf843 | |||
fde2cbfd64 | |||
1cd1cf1662 | |||
7981c59a7c | |||
d47a1702a7 | |||
b627db78ff | |||
d135e33b9e | |||
e21150e227 | |||
9a96d6a175 | |||
2774cbce07 | |||
2946631551 | |||
4ddc39adaf | |||
d478d4ebb4 | |||
794fd96fb2 | |||
44b74461f3 | |||
852941cf58 | |||
67d7e8821b | |||
40e0333edb | |||
4d266bc2f5 | |||
11ed23ff02 | |||
2bf71d14e0 | |||
2c41942b7e | |||
72cd8d6e76 | |||
2b3841264a | |||
bcb54ccaba | |||
94e6000db2 | |||
7aee4b45a7 | |||
5b13b266db | |||
5fcd3217f3 | |||
183fda33a6 | |||
2237469e18 | |||
2faac5462e | |||
eea365ce35 | |||
f70287eaf8 | |||
9704cb8ce1 | |||
91955a715a | |||
1a3297b658 | |||
3a6ecc53c3 | |||
61e22bb9e9 | |||
f7aed1806f | |||
b06bac1c06 | |||
29a3048803 | |||
cc66b5b3a4 | |||
4f41e7aa41 | |||
2499047b82 | |||
6052e04b72 | |||
a7a5be1689 | |||
5a6eb5b141 | |||
0380c1d6a2 | |||
3c3e5af65e | |||
ac9a406a64 | |||
ebeb0f22b3 | |||
36ad5e412d | |||
fedb8fdfba | |||
41b61970bb | |||
1ee9e2a16f | |||
572dfb1584 | |||
2404b9d8a5 | |||
a3f5ffeb11 | |||
5676ae2eab | |||
1229c276fe | |||
8007b3ae8d | |||
25bf8fc5cb | |||
13b24ca32f | |||
f9db31f5a1 | |||
7e3b7f3b7f | |||
1615fea70d | |||
c84e0e0a44 | |||
f99b7182f5 | |||
9192380e90 | |||
48436bee11 | |||
4baa62cb18 | |||
3f0f1c72a5 | |||
f109865cc4 | |||
c89febb7a1 | |||
a50a17c075 | |||
6033dd8ea8 | |||
b4952da4e6 | |||
e3eaea1a4e | |||
25bc0d4101 | |||
f4efc5c3fc | |||
e95dee1fea | |||
60675d21b7 | |||
adff1dd16b | |||
bc1453ad0e | |||
b4332a8387 | |||
d5cb4aa3d0 | |||
359333effa | |||
146cfddf78 | |||
90fba13419 | |||
33aec8f935 | |||
5da590372c | |||
31c61344aa | |||
57430a9feb | |||
d29c2bd0af | |||
268d49efb8 | |||
bb93624293 | |||
d59a2c5907 | |||
3795660f3c | |||
14e408c6e0 | |||
b83fa3ef61 | |||
73db0be503 | |||
7ba923cbbc | |||
0987ced379 | |||
5f110f1a03 | |||
3f4b8b60e0 | |||
723dcbcb89 | |||
1615f39550 | |||
a41b4769b3 | |||
8a1574b632 | |||
1af09c3ac8 | |||
f0734966ff | |||
da07c22d31 | |||
c8122f4659 | |||
b6a998318c | |||
659fb43291 | |||
237113e1af | |||
8e08cf3c57 | |||
ca4777fba9 | |||
e69f4e1234 | |||
1251c6e135 | |||
ef8333effe | |||
333a7d95bb | |||
d9e76c54a6 | |||
5d9f43c7de | |||
26dc31682a | |||
e4b8310812 | |||
d2cc6531c0 | |||
c8fbf6ac4b | |||
af43ee46fd | |||
5d21c97de7 | |||
27c45c6df6 | |||
f5e6a8147b | |||
c854275d51 | |||
0e26c05593 | |||
03e92f4f72 | |||
efa1164328 | |||
f861321c45 | |||
4ceee394f7 | |||
002ba5d6d2 | |||
2756789dfe | |||
db02a5e88a | |||
767b0c3840 | |||
4bc34cc0ed | |||
78a3402bf3 | |||
0e70724dc2 | |||
d048fc4710 | |||
a74260d09f | |||
aaf0c184d1 | |||
0cd2d869c3 | |||
e0fc368105 | |||
fc2d3655b0 | |||
02f2954bd5 | |||
40d4330bcc | |||
75ae510390 | |||
86b5ffda4f | |||
5e1adef785 | |||
21adcfc5b3 | |||
e7036f90dc | |||
41619c2763 | |||
b3b9381dad | |||
b55cea36b1 | |||
8bb3c084e3 | |||
2c11219da5 | |||
2e7f566be0 | |||
a1dd938400 | |||
d03734211f | |||
ecbf829ea9 | |||
d678296449 | |||
9716ac2333 | |||
acfdb36e73 | |||
72743ca23b | |||
c4ced566b1 | |||
2fdd8738ef | |||
bca4682e63 | |||
50ebdac74f | |||
e415034e60 | |||
55ac4a7305 | |||
f803da91b4 | |||
b07e37454a | |||
2d6c71d335 | |||
dcec7a1be9 | |||
598d994644 | |||
aac9c23152 | |||
6caddd2808 | |||
37f4eaa9bb | |||
2c2a394a61 | |||
ef5a1c48ba | |||
f348faeb5f | |||
9376623917 | |||
a0dfbc4441 | |||
28a379db83 | |||
2efe2b0f01 | |||
1a5307c2e9 | |||
d0f8bb5dfe | |||
8cfade6692 | |||
1a0195b25f | |||
071a0c995e | |||
581ff82167 | |||
3f034883a6 | |||
48614c76a9 | |||
a8575df376 | |||
9b0518dfe9 | |||
3099f5cd6e | |||
ed437d4424 | |||
fcbe94656f | |||
af312dbbba | |||
b86f1b128d | |||
d5027ce4ec | |||
775c717fb4 | |||
87ff0c5594 | |||
f5b81c7b97 | |||
ab691084c6 | |||
8e131041a4 | |||
e7ab799c76 | |||
1bc60d0c0c | |||
fc58080467 | |||
b905907d10 | |||
0913122f6f | |||
f8cd26f337 | |||
f7b46d31a4 | |||
6caa4dc86e | |||
dad02dc7ad | |||
8a5540c974 | |||
55aab79ebc | |||
d78ebcf1a1 | |||
a8e38e8f47 | |||
88dab185c4 | |||
c09fd5b1dd | |||
17a2d74512 | |||
3e25482521 | |||
61add0eb5d | |||
61f6a653ab | |||
6241cd8e48 | |||
2a62564d46 | |||
6351d3e8ee | |||
883fe7ff9f | |||
9c136a59dd | |||
13598dd908 | |||
2787932886 | |||
1bb20c2b5d | |||
91ad5bdb0e | |||
fc84ad7fb0 | |||
d9588c4df8 | |||
b288541937 | |||
417f828cff | |||
fa6bb24f93 | |||
84135f523a | |||
0e3b0c7013 | |||
22dc07ce9a | |||
de05652cf1 | |||
cfdee429d9 | |||
8286998e04 | |||
cf920a350d | |||
c17edd608e | |||
6acda56284 | |||
d2985ef379 | |||
de9636ec47 | |||
2bcf60e422 | |||
3b14ee2117 | |||
e76340d4f3 | |||
6ee18d7f85 | |||
9ae189a5e0 | |||
658e0203c9 | |||
7041a551b1 | |||
d2751a07a3 | |||
3f4c998b88 | |||
2db4dc66c6 | |||
0aa8126876 | |||
1e030bb23d | |||
da054ce8f8 | |||
d7bbca0ad8 | |||
fcd0399831 | |||
18b3aea791 | |||
1f91959d51 | |||
0cf369eb38 | |||
c3ed47237f | |||
71a988fc8e | |||
d4aa47c35c | |||
649c1b23e4 | |||
04efd40a86 | |||
76770e97bf | |||
cb6646d49e | |||
cd92b00f61 | |||
a0972af58f | |||
8945bce9ff | |||
b4b2572286 | |||
e40ddf8834 | |||
afd2f0cd61 | |||
e93ab421c2 | |||
e65346cd1b | |||
7685ca5d64 | |||
5d939f185c | |||
c1c033900e | |||
e1c4ed7d17 | |||
8898c58d3c | |||
18da5ec3f2 | |||
d5ec0342cc | |||
6af8449f5a | |||
69a6b4f4a1 | |||
daadfc113d | |||
1625db8bbd | |||
2026814a80 | |||
722e091460 | |||
2d1d4d4b37 | |||
fdea98935a | |||
7044f2cba1 | |||
f65dc9aa82 | |||
cd999a3661 | |||
07a137d64c | |||
26f00d4e08 | |||
bffde87102 | |||
73a9c16384 | |||
d56541d237 | |||
d7864bd13c | |||
bc002b24de | |||
8274230e14 | |||
a314fb5e91 | |||
f8154d6fde | |||
b79a0a1f04 | |||
16f6de937e | |||
410d972188 | |||
5f3f860800 | |||
7f40fbce00 | |||
c89012cb1f | |||
5fbc089f44 | |||
dde99a34a4 | |||
1967c876a6 | |||
262d987004 | |||
0987770afa | |||
0be7fe3329 | |||
62dbe3cbd0 | |||
1f1439f774 | |||
74aa1ed45e | |||
993ad6b8b4 | |||
6821aa77b8 | |||
63b4b64230 | |||
ba75c58f0e | |||
1a265f7645 | |||
e80a9626ce | |||
98fef56409 | |||
cec06c2a9a | |||
32486a5ca2 | |||
2745faabd2 | |||
0465f55485 | |||
d889ba7077 | |||
6eef826c60 | |||
fbc3e6992c | |||
5abdf19a48 | |||
feb3c10d1a | |||
96121a70dc | |||
552911da11 | |||
1d1f3a2265 | |||
3d23a621b2 | |||
c6c82c8333 | |||
afc27f89fe | |||
b5d7d75598 | |||
8ab1fcd4f5 | |||
c0cc40121f | |||
9b85bc0fed | |||
235cbe3dfe | |||
0f0a2e4bb5 | |||
1fd02ceba2 | |||
784684eb92 | |||
d3b35b50cd | |||
8bce9569e1 | |||
94f9c9acf8 | |||
aeb98c3abb | |||
a6da71ba36 | |||
ee7f121a25 | |||
0c7086525b | |||
708be0cde6 | |||
becac4eba6 | |||
319ab37ad9 | |||
a68624cc5c | |||
a745366913 | |||
31809252e8 | |||
58ba5aeff6 | |||
4088bf38a6 | |||
404d120b75 | |||
ad1762c790 | |||
35ff5db496 | |||
d10f3fa7a1 | |||
d382bdba17 | |||
af36e5e127 | |||
69b0edc261 | |||
88d94ad7b7 | |||
8b5af86a64 | |||
cf9bc140b1 | |||
a9c0fb6e58 | |||
06bcc637d6 | |||
c02edc329d | |||
7765835374 | |||
d8b6e69429 | |||
eddb70823e | |||
ed03897759 | |||
c104b0a073 | |||
b45fd0553e | |||
25fd92f2c4 | |||
41aa050551 | |||
766129ec66 | |||
d825fc1a3a | |||
eb9f0f6d6a | |||
d17ddda7db | |||
4d3ef02838 | |||
d42e7b2d9f | |||
4ea0e15acb | |||
e5ba798b14 | |||
673a0e9d2f | |||
7a7232f16e | |||
52d89cc7cc | |||
048bbbe1ef | |||
1e95e13263 | |||
3cd9763879 | |||
94638d6e9b | |||
9fa0a6f441 | |||
362ecda0f3 | |||
f96fdc339a | |||
88ef7d06f4 | |||
837f60c2e4 | |||
ea36885829 | |||
40d9dcf8bb | |||
e35f0b6841 | |||
f882d323b1 | |||
071a3869db | |||
4fba3a4365 |
@ -1,11 +1,11 @@
|
|||||||
Mario Danic <mario.danic@gmail.com>,
|
Mario Danic <mario.danic@gmail.com>,
|
||||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
|
libisoburn is Copyright (C) 2007-2009 Vreixo Formoso, Thomas Schmitt
|
||||||
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
|
xorriso is Copyright (C) 2007-2009 Thomas Schmitt
|
||||||
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso, Mario Danic
|
libisofs (if included) is Copyright (C) 2007-2009 Vreixo Formoso, Mario Danic
|
||||||
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
|
||||||
and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
and Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt
|
||||||
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
69
Makefile.am
69
Makefile.am
@ -1,4 +1,8 @@
|
|||||||
pkgconfigdir=$(libdir)/pkgconfig
|
|
||||||
|
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
|
||||||
|
# was: pkgconfigdir=$(libdir)/pkgconfig
|
||||||
|
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
|
||||||
|
|
||||||
libincludedir=$(includedir)/libisoburn
|
libincludedir=$(includedir)/libisoburn
|
||||||
|
|
||||||
lib_LTLIBRARIES = libisoburn/libisoburn.la
|
lib_LTLIBRARIES = libisoburn/libisoburn.la
|
||||||
@ -16,9 +20,11 @@ libisoburn_libisoburn_la_SOURCES = \
|
|||||||
libisoburn/isofs_wrap.c \
|
libisoburn/isofs_wrap.c \
|
||||||
libisoburn/libisoburn.h \
|
libisoburn/libisoburn.h \
|
||||||
version.h
|
version.h
|
||||||
|
|
||||||
libisoburn_libisoburn_la_LIBADD = \
|
libisoburn_libisoburn_la_LIBADD = \
|
||||||
-lisofs \
|
-lisofs \
|
||||||
-lburn
|
-lburn
|
||||||
|
|
||||||
libinclude_HEADERS = \
|
libinclude_HEADERS = \
|
||||||
libisoburn/libisoburn.h
|
libisoburn/libisoburn.h
|
||||||
|
|
||||||
@ -30,16 +36,59 @@ libinclude_HEADERS = \
|
|||||||
bin_PROGRAMS = \
|
bin_PROGRAMS = \
|
||||||
xorriso/xorriso
|
xorriso/xorriso
|
||||||
|
|
||||||
|
# This looks quite ugly with make install: xorriso.c is compiled twice again
|
||||||
|
#
|
||||||
|
# Trying to create a build timestamp file
|
||||||
|
#
|
||||||
|
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||||
|
#
|
||||||
|
# phony targets get rebuilt every time
|
||||||
|
#
|
||||||
|
# .PHONY: xorriso/xorriso_buildstamp.h
|
||||||
|
# xorriso/xorriso_buildstamp.h:
|
||||||
|
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
# cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
|
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
|
||||||
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
|
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN \
|
||||||
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
|
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
|
||||||
|
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
|
||||||
|
|
||||||
|
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
|
||||||
|
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
xorriso_xorriso_SOURCES = \
|
xorriso_xorriso_SOURCES = \
|
||||||
xorriso/xorriso.h \
|
xorriso/xorriso.h \
|
||||||
xorriso/xorriso_private.h \
|
xorriso/xorriso_private.h \
|
||||||
xorriso/xorriso.c \
|
xorriso/xorriso.c \
|
||||||
xorriso/xorrisoburn.h \
|
xorriso/xorrisoburn.h \
|
||||||
xorriso/xorrisoburn.c \
|
xorriso/xorrisoburn.c \
|
||||||
xorriso/xorriso_timestamp.h
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
|
||||||
|
# Install symbolic links to the xorriso binary
|
||||||
|
#
|
||||||
|
install-exec-hook:
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||||
|
|
||||||
|
|
||||||
|
# Alternative to the disabled .PHONY above.
|
||||||
|
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||||
|
#
|
||||||
|
buildstamp:
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# For now make buildstamped has to be performed explicitely.
|
||||||
|
buildstamped: buildstamp
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Build test applications
|
## Build test applications
|
||||||
@ -55,13 +104,6 @@ test_compare_file_CFLAGS =
|
|||||||
test_compare_file_LDADD =
|
test_compare_file_LDADD =
|
||||||
test_compare_file_SOURCES = test/compare_file.c
|
test_compare_file_SOURCES = test/compare_file.c
|
||||||
|
|
||||||
# ts A80110 - A80210 : we need as minimal demo something better than test.c
|
|
||||||
# test/test
|
|
||||||
|
|
||||||
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
|
|
||||||
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
|
|
||||||
# test_test_SOURCES = test/test.c
|
|
||||||
|
|
||||||
|
|
||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
@ -119,6 +161,8 @@ man_MANS = xorriso/xorriso.1
|
|||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
libisoburn-1.pc.in \
|
libisoburn-1.pc.in \
|
||||||
version.h.in \
|
version.h.in \
|
||||||
|
doc/comments \
|
||||||
|
doc/doxygen.conf.in \
|
||||||
README \
|
README \
|
||||||
AUTHORS \
|
AUTHORS \
|
||||||
CONTRIBUTORS \
|
CONTRIBUTORS \
|
||||||
@ -126,6 +170,7 @@ EXTRA_DIST = \
|
|||||||
COPYING \
|
COPYING \
|
||||||
INSTALL \
|
INSTALL \
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
|
xorriso/xorriso_buildstamp_none.h \
|
||||||
xorriso/README \
|
xorriso/README \
|
||||||
$(man_MANS)
|
$(man_MANS)
|
||||||
|
|
||||||
|
61
README
61
README
@ -4,13 +4,13 @@
|
|||||||
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
|
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
and Thomas Schmitt <scdbackup@gmx.net>
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org.
|
Integrated sub project of libburnia-project.org.
|
||||||
http://files.libburnia-project.org/releases/libisoburn-0.1.9.tar.gz
|
http://files.libburnia-project.org/releases/libisoburn-0.4.2.pl01.tar.gz
|
||||||
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
Copyright (C) 2006-2009 Vreixo Formoso, Thomas Schmitt.
|
||||||
Provided under GPL version 2.
|
Provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
libisoburn is a frontend for libraries libburn and libisofs which enables
|
libisoburn is a frontend for libraries libburn and libisofs which enables
|
||||||
creation and expansion of ISO-9660 filesystems on all CD/DVD media supported
|
creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported
|
||||||
by libburn. This includes media like DVD+RW, which do not support multi-session
|
by libburn. This includes media like DVD+RW, which do not support multi-session
|
||||||
management on media level and even plain disk files or block devices.
|
management on media level and even plain disk files or block devices.
|
||||||
|
|
||||||
@ -18,7 +18,10 @@ The price for that is thorough specialization on data files in ISO-9660
|
|||||||
filesystem images. So libisoburn is not suitable for audio (CD-DA) or any
|
filesystem images. So libisoburn is not suitable for audio (CD-DA) or any
|
||||||
other CD layout which does not entirely consist of ISO-9660 sessions.
|
other CD layout which does not entirely consist of ISO-9660 sessions.
|
||||||
|
|
||||||
Currently it is only supported on Linux with kernels >= 2.4.
|
Currently it is fully supported on Linux with kernels >= 2.4 and on
|
||||||
|
FreeBSD versions with ATAPI/CAM support enabled in the kernel, see atapicam(4).
|
||||||
|
On other X/Open compliant systems libburn will only offer POSIX i/o with disk
|
||||||
|
file objects, but no direct MMC operation on CD/DVD/BD drives.
|
||||||
|
|
||||||
By using this software you agree to the disclaimer at the end of this text:
|
By using this software you agree to the disclaimer at the end of this text:
|
||||||
"... without even the implied warranty ..."
|
"... without even the implied warranty ..."
|
||||||
@ -26,18 +29,17 @@ By using this software you agree to the disclaimer at the end of this text:
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.9 :
|
Dynamic library and compile time header requirements for libisoburn-0.4.2 :
|
||||||
- libburn.so.4 , version libburn-0.4.8 or higher
|
- libburn.so.4 , version libburn-0.7.0 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
- libisofs.so.6 , version libisofs-0.6.22 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
libisoburn and xorriso will not start with libraries which are older than their
|
||||||
headers seen at compile time. So compile in the oldest possible installation
|
headers seen at compile time.
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
|
||||||
|
|
||||||
Obtain libisoburn-0.1.9.tar.gz, take it to a directory of your choice
|
Obtain libisoburn-0.4.2.pl01.tar.gz, take it to a directory of your choice
|
||||||
and do:
|
and do:
|
||||||
|
|
||||||
tar xzf libisoburn-0.1.9.tar.gz
|
tar xzf libisoburn-0.4.2.pl01.tar.gz
|
||||||
cd libisoburn-0.1.9
|
cd libisoburn-0.4.2
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -46,7 +48,7 @@ Within that directory execute:
|
|||||||
|
|
||||||
Then become superuser and execute
|
Then become superuser and execute
|
||||||
make install
|
make install
|
||||||
which will make available libisoburn.so.1 and program xorriso.
|
which will make available libisoburn.so.1 and the program xorriso.
|
||||||
|
|
||||||
For the API concepts and calls see
|
For the API concepts and calls see
|
||||||
./libisoburn/libisoburn.h
|
./libisoburn/libisoburn.h
|
||||||
@ -57,7 +59,7 @@ as well as
|
|||||||
|
|
||||||
xorriso
|
xorriso
|
||||||
|
|
||||||
libisoburn includes a command line and dialog application named xorriso,
|
libisoburn comes with a command line and dialog application named xorriso,
|
||||||
which offers a substantial part of libisoburn features to shell scripts and
|
which offers a substantial part of libisoburn features to shell scripts and
|
||||||
users. Its file xorriso/README describes a standalone tarball as first
|
users. Its file xorriso/README describes a standalone tarball as first
|
||||||
preference for statically linked xorriso installation.
|
preference for statically linked xorriso installation.
|
||||||
@ -67,11 +69,33 @@ xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
|||||||
After installation documentation is available via
|
After installation documentation is available via
|
||||||
man xorriso
|
man xorriso
|
||||||
|
|
||||||
|
Several alias links point to the xorriso binary:
|
||||||
|
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||||
|
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||||
|
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||||
|
|
||||||
|
By default xorriso will depend on libreadline if the readline-dev headers
|
||||||
|
are present. This dependcy can be avoided by running
|
||||||
|
./configure --prefix=/usr --disable-libreadline
|
||||||
|
make clean ; make
|
||||||
|
Never omit the "make clean" command after switching libreadline enabling.
|
||||||
|
Other deliberate dependency reduction options of ./configure are:
|
||||||
|
--disable-libacl avoid use of ACL functions like acl_to_text()
|
||||||
|
--disable-xattr avoid use of xattr functions like listxattr()
|
||||||
|
--disable-zlib avoid use of zlib functions like compress2()
|
||||||
|
|
||||||
|
xorriso allows to use external processes as file content filters. This is
|
||||||
|
a potential security risk which may be avoided by ./configure option
|
||||||
|
--disable-external-filters
|
||||||
|
By default the filter feature is disabled if effective user id and real
|
||||||
|
user id differ. This ban can be lifted by
|
||||||
|
--enable-external-filters-setuid
|
||||||
|
|
||||||
|
|
||||||
Drives and Disk File Objects
|
Drives and Disk File Objects
|
||||||
|
|
||||||
The user of libisoburn applications needs rw-permission for the CD/DVD burner
|
The user of libisoburn applications needs rw-permission for the CD/DVD/BD
|
||||||
devices which shall be used.
|
drives which shall be used, even if only reading is intended.
|
||||||
A list of rw-accessible drives can be obtained by
|
A list of rw-accessible drives can be obtained by
|
||||||
xorriso -devices
|
xorriso -devices
|
||||||
resp. by libburn API call
|
resp. by libburn API call
|
||||||
@ -93,6 +117,9 @@ output drives. The addresses of the disk files have to be preceded by "stdio:".
|
|||||||
Like:
|
Like:
|
||||||
"stdio:/tmp/pseudo_drive"
|
"stdio:/tmp/pseudo_drive"
|
||||||
|
|
||||||
|
Note: xorriso by default prefixes "stdio:" to addresses outside the /dev tree
|
||||||
|
if they do not lead to an optical drive device file.
|
||||||
|
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
|
|
||||||
@ -144,7 +171,7 @@ libburnia-project.org
|
|||||||
By Mario Danic <mario.danic@gmail.com>,
|
By Mario Danic <mario.danic@gmail.com>,
|
||||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||||
|
|
||||||
libburnia-project.org is inspired by and in other components still containing
|
libburnia-project.org is inspired by and in other components still containing
|
||||||
parts of old
|
parts of old
|
||||||
|
100
acinclude.m4
100
acinclude.m4
@ -1,6 +1,7 @@
|
|||||||
AC_DEFUN([TARGET_SHIZZLE],
|
AC_DEFUN([TARGET_SHIZZLE],
|
||||||
[
|
[
|
||||||
ARCH=""
|
ARCH=""
|
||||||
|
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
|
||||||
|
|
||||||
AC_MSG_CHECKING([target operating system])
|
AC_MSG_CHECKING([target operating system])
|
||||||
|
|
||||||
@ -12,11 +13,108 @@ AC_DEFUN([TARGET_SHIZZLE],
|
|||||||
*-*-freebsd*)
|
*-*-freebsd*)
|
||||||
ARCH=freebsd
|
ARCH=freebsd
|
||||||
LIBBURN_ARCH_LIBS=-lcam
|
LIBBURN_ARCH_LIBS=-lcam
|
||||||
|
|
||||||
|
# This may later be overridden by configure --enable-libdir-pkgconfig
|
||||||
|
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_ERROR([You are attempting to compile for an unsupported platform])
|
ARCH=
|
||||||
|
LIBBURN_ARCH_LIBS=
|
||||||
|
# AC_ERROR([You are attempting to compile for an unsupported platform])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AC_MSG_RESULT([$ARCH])
|
AC_MSG_RESULT([$ARCH])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl LIBBURNIA_CHECK_ICONV is by Thomas Schmitt, libburnia project
|
||||||
|
dnl It is based on gestures from:
|
||||||
|
dnl iconv.m4 serial AM7 (gettext-0.18)
|
||||||
|
dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([LIBBURNIA_CHECK_ICONV],
|
||||||
|
[
|
||||||
|
dnl Check whether it is allowed to link with -liconv
|
||||||
|
AC_MSG_CHECKING([for separate -liconv ])
|
||||||
|
libburnia_liconv="no"
|
||||||
|
libburnia_save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS -liconv"
|
||||||
|
AC_TRY_LINK([#include <stdlib.h>
|
||||||
|
#include <iconv.h>],
|
||||||
|
[iconv_t cd = iconv_open("","");
|
||||||
|
iconv(cd,NULL,NULL,NULL,NULL);
|
||||||
|
iconv_close(cd);],
|
||||||
|
[libburnia_liconv="yes"],
|
||||||
|
[LIBS="$libburnia_save_LIBS"]
|
||||||
|
)
|
||||||
|
AC_MSG_RESULT([$libburnia_liconv])
|
||||||
|
|
||||||
|
dnl Check for iconv(..., const char **inbuf, ...)
|
||||||
|
AC_MSG_CHECKING([for const qualifier with iconv() ])
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <iconv.h>
|
||||||
|
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
|
||||||
|
], [], [libburnia_iconv_const=""], [libburnia_iconv_const="const"]
|
||||||
|
)
|
||||||
|
AC_DEFINE_UNQUOTED([ICONV_CONST], [$libburnia_iconv_const])
|
||||||
|
test -z "$libburnia_iconv_const" && libburnia_iconv_const="no"
|
||||||
|
AC_MSG_RESULT([$libburnia_iconv_const])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl LIBBURNIA_SET_PKGCONFIG determines the install directory for the *.pc file.
|
||||||
|
dnl Important: Must be performed _after_ TARGET_SHIZZLE
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([LIBBURNIA_SET_PKGCONFIG],
|
||||||
|
[
|
||||||
|
### for testing --enable-libdir-pkgconfig on Linux
|
||||||
|
### LIBBURNIA_PKGCONFDIR="$libdir"data/pkgconfig
|
||||||
|
|
||||||
|
if test "x$LIBBURNIA_PKGCONFDIR" = "x$libdir"/pkgconfig
|
||||||
|
then
|
||||||
|
dummy=dummy
|
||||||
|
else
|
||||||
|
AC_ARG_ENABLE(libdir-pkgconfig,
|
||||||
|
[ --enable-libdir-pkgconfig Install to $libdir/pkgconfig on any OS, default=no],
|
||||||
|
, enable_libdir_pkgconfig="no")
|
||||||
|
AC_MSG_CHECKING([for --enable-libdir-pkgconfig])
|
||||||
|
if test "x$enable_libdir_pkgconfig" = xyes
|
||||||
|
then
|
||||||
|
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$enable_libdir_pkgconfig])
|
||||||
|
fi
|
||||||
|
|
||||||
|
libburnia_pkgconfig_override="no"
|
||||||
|
AC_ARG_ENABLE(pkgconfig-path,
|
||||||
|
[ --enable-pkgconfig-path=DIR Absolute path of directory for libisofs-*.pc],
|
||||||
|
libburnia_pkgconfig_override="yes" , enable_pkgconfig_path="none")
|
||||||
|
AC_MSG_CHECKING([for overridden pkgconfig directory path])
|
||||||
|
if test "x$enable_pkgconfig_path" = xno
|
||||||
|
then
|
||||||
|
libburnia_pkgconfig_override="no"
|
||||||
|
fi
|
||||||
|
if test "x$enable_pkgconfig_path" = x -o "x$enable_pkgconfig_path" = xyes
|
||||||
|
then
|
||||||
|
libburnia_pkgconfig_override="invalid argument"
|
||||||
|
fi
|
||||||
|
if test "x$libburnia_pkgconfig_override" = xyes
|
||||||
|
then
|
||||||
|
LIBBURNIA_PKGCONFDIR="$enable_pkgconfig_path"
|
||||||
|
AC_MSG_RESULT([$LIBBURNIA_PKGCONFDIR])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([$libburnia_pkgconfig_override])
|
||||||
|
fi
|
||||||
|
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||||
|
|
||||||
|
dnl For debugging only
|
||||||
|
### AC_MSG_RESULT([LIBBURNIA_PKGCONFDIR = $LIBBURNIA_PKGCONFDIR])
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
132
configure.ac
132
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libisoburn], [0.1.9], [http://libburnia-project.org])
|
AC_INIT([libisoburn], [0.4.2], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ AC_CANONICAL_TARGET
|
|||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
dnl Hint: Search list for version code aspects:
|
dnl Hint: Search list for version code aspects:
|
||||||
dnl /AC_INT(
|
dnl /AC_INIT(
|
||||||
dnl /ISOBURN_.*_VERSION
|
dnl /ISOBURN_.*_VERSION
|
||||||
dnl /LT_.*
|
dnl /LT_.*
|
||||||
dnl /LIB.*_REQUIRED
|
dnl /LIB.*_REQUIRED
|
||||||
@ -20,8 +20,9 @@ dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
|||||||
dnl
|
dnl
|
||||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||||
ISOBURN_MAJOR_VERSION=0
|
ISOBURN_MAJOR_VERSION=0
|
||||||
ISOBURN_MINOR_VERSION=1
|
ISOBURN_MINOR_VERSION=4
|
||||||
ISOBURN_MICRO_VERSION=8
|
ISOBURN_MICRO_VERSION=2
|
||||||
|
|
||||||
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
||||||
@ -33,15 +34,16 @@ dnl Libtool versioning
|
|||||||
dnl Generate libisoburn.so.1.x.y
|
dnl Generate libisoburn.so.1.x.y
|
||||||
dnl SONAME will become LT_CURRENT - LT_AGE
|
dnl SONAME will become LT_CURRENT - LT_AGE
|
||||||
dnl
|
dnl
|
||||||
dnl ts A80602
|
dnl ts A90829
|
||||||
dnl ### This is the release version 0.1.8 = libisoburn.so.1.7.0
|
dnl This is the release version 0.4.2 = libisoburn.so.1.31.0
|
||||||
dnl This is the development version after above stable release
|
dnl ### This is the development version after above stable release
|
||||||
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
||||||
|
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||||
dnl
|
dnl
|
||||||
dnl SONAME = 8 - 7 = 1 . Library name = libburn.so.1.7.0
|
dnl SONAME = 32 - 31 = 1 . Library name = libisoburn.so.1.31.0
|
||||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||||
LT_CURRENT=8
|
LT_CURRENT=32
|
||||||
LT_AGE=7
|
LT_AGE=31
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -69,6 +71,12 @@ if test ! $ac_cv_func_fseeko; then
|
|||||||
AC_ERROR([Libburn requires largefile support.])
|
AC_ERROR([Libburn requires largefile support.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl If iconv(3) is in an extra lib, then it gets added to variable LIBS.
|
||||||
|
dnl If not, then no -liconv will be added.
|
||||||
|
AC_CHECK_LIB(iconv, iconv, , )
|
||||||
|
dnl GNU iconv has no function iconv() but libiconv() and a macro iconv()
|
||||||
|
AC_CHECK_LIB(iconv, libiconv, , )
|
||||||
|
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
AC_SUBST(LIBTOOL_DEPS)
|
AC_SUBST(LIBTOOL_DEPS)
|
||||||
LIBTOOL="$LIBTOOL --silent"
|
LIBTOOL="$LIBTOOL --silent"
|
||||||
@ -82,25 +90,119 @@ AC_SUBST(THREAD_LIBS)
|
|||||||
|
|
||||||
TARGET_SHIZZLE
|
TARGET_SHIZZLE
|
||||||
AC_SUBST(ARCH)
|
AC_SUBST(ARCH)
|
||||||
|
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
dnl Determine target directory for libisoburn-*.pc
|
||||||
|
dnl Important: Must be performed _after_ TARGET_SHIZZLE
|
||||||
|
dnl
|
||||||
|
LIBBURNIA_SET_PKGCONFIG
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libreadline,
|
||||||
|
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
|
||||||
|
, enable_libreadline=yes)
|
||||||
|
if test x$enable_libreadline = xyes; then
|
||||||
dnl Check whether there is readline-devel and readline-runtime.
|
dnl Check whether there is readline-devel and readline-runtime.
|
||||||
dnl If not, erase this macro which would enable use of readline(),add_history()
|
dnl If not, erase this macro which would enable use of readline(),add_history()
|
||||||
READLINE_DEF="-DXorriso_with_readlinE"
|
READLINE_DEF="-DXorriso_with_readlinE"
|
||||||
dnl The empty yes case obviously causes -lreadline to be linked
|
dnl The empty yes case obviously causes -lreadline to be linked
|
||||||
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
|
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
|
||||||
dnl The X= in the yes case prevents that -lreadline gets linked twice
|
dnl The X= in the yes case prevents that -lreadline gets linked twice
|
||||||
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
|
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
|
||||||
|
else
|
||||||
|
READLINE_DEF=
|
||||||
|
fi
|
||||||
AC_SUBST(READLINE_DEF)
|
AC_SUBST(READLINE_DEF)
|
||||||
|
|
||||||
|
dnl ts A90329
|
||||||
|
dnl ACL and xattr do not need to be enabled in libisoburn or xorriso source
|
||||||
|
dnl but without AC_CHECK_LIB() xorriso will not be linked with -lacl .
|
||||||
|
dnl On my Linux this does work with an ACL enabled libisofs but in general
|
||||||
|
dnl it seems not be right.
|
||||||
|
dnl So for now it seems to be best to do the same configuration for libisoburn
|
||||||
|
dnl and xorriso as for libisofs.
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libacl,
|
||||||
|
[ --enable-libacl Enable use of libacl by libisofs, default=yes],
|
||||||
|
, enable_libacl=yes)
|
||||||
|
if test x$enable_libacl = xyes; then
|
||||||
|
dnl Check whether there is libacl-devel and libacl-runtime.
|
||||||
|
dnl If not, erase this macro which would enable use of acl_to_text and others
|
||||||
|
LIBACL_DEF="-DLibisofs_with_aaip_acL"
|
||||||
|
dnl The empty yes case obviously causes -lacl to be linked
|
||||||
|
AC_CHECK_HEADER(sys/acl.h, AC_CHECK_LIB(acl, acl_to_text, , LIBACL_DEF= ), LIBACL_DEF= )
|
||||||
|
else
|
||||||
|
LIBACL_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(LIBACL_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(xattr,
|
||||||
|
[ --enable-xattr Enable use of xattr by libisofs, default=yes],
|
||||||
|
, enable_xattr=yes)
|
||||||
|
if test x$enable_xattr = xyes; then
|
||||||
|
dnl Check whether there is the header for Linux xattr.
|
||||||
|
dnl If not, erase this macro which would enable use of listxattr and others
|
||||||
|
XATTR_DEF="-DLibisofs_with_aaip_xattR"
|
||||||
|
AC_CHECK_HEADER(attr/xattr.h, AC_CHECK_LIB(c, listxattr, X= , XATTR_DEF= ), XATTR_DEF= )
|
||||||
|
else
|
||||||
|
XATTR_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(XATTR_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
dnl ts A90409
|
||||||
|
dnl Same situation as with xattr and ACL: libisoburn does not depend directly
|
||||||
|
dnl on zlib. But if it is enabled in libisofs then it seems wise to link it
|
||||||
|
dnl with libisoburn apps.
|
||||||
|
AC_ARG_ENABLE(zlib,
|
||||||
|
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
|
||||||
|
, enable_zlib=yes)
|
||||||
|
if test x$enable_zlib = xyes; then
|
||||||
|
dnl Check whether there is the header for zlib.
|
||||||
|
dnl If not, erase this macro which would enable use of compress2() and others.
|
||||||
|
dnl The empty parameter after "compress2" causes -lz.
|
||||||
|
ZLIB_DEF="-DLibisofs_with_zliB"
|
||||||
|
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compress2, , ZLIB_DEF= ), ZLIB_DEF= )
|
||||||
|
else
|
||||||
|
ZLIB_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(ZLIB_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(external-filters,
|
||||||
|
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
|
||||||
|
, enable_external_filters=yes)
|
||||||
|
if test x"$enable_external_filters" = xyes; then
|
||||||
|
EXTF_DEF="-DXorriso_allow_external_filterS"
|
||||||
|
echo "enabled xorriso external filter programs"
|
||||||
|
else
|
||||||
|
EXTF_DEF=
|
||||||
|
echo "disabled xorriso external filter programs"
|
||||||
|
fi
|
||||||
|
AC_SUBST(EXTF_DEF)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(external-filters-setuid,
|
||||||
|
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
|
||||||
|
, enable_external_filters_setuid=no)
|
||||||
|
if test x$enable_external_filters_setuid = xyes; then
|
||||||
|
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
|
||||||
|
echo "enabled xorriso external filter programs under setuid"
|
||||||
|
else
|
||||||
|
EXTF_SUID_DEF=
|
||||||
|
echo "disabled xorriso external filter programs under setuid"
|
||||||
|
fi
|
||||||
|
AC_SUBST(EXTF_SUID_DEF)
|
||||||
|
|
||||||
|
|
||||||
AC_CHECK_HEADER(libburn/libburn.h)
|
AC_CHECK_HEADER(libburn/libburn.h)
|
||||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||||
|
|
||||||
dnl Check for proper library versions
|
dnl Check for proper library versions
|
||||||
LIBBURN_REQUIRED=0.4.8
|
LIBBURN_REQUIRED=0.7.0
|
||||||
LIBISOFS_REQUIRED=0.6.6
|
LIBISOFS_REQUIRED=0.6.22
|
||||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
|
||||||
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)
|
||||||
|
|
||||||
|
58
doc/comments
Normal file
58
doc/comments
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
@author Mario Danic, Vreixo Formoso, Thomas Schmitt
|
||||||
|
|
||||||
|
@mainpage Libisoburn Documentation Index
|
||||||
|
|
||||||
|
@section intro Introduction
|
||||||
|
|
||||||
|
Libburnia is an open-source project for reading, mastering and writing
|
||||||
|
optical discs. This page is about its capability to read, manipulate, and
|
||||||
|
write ISO 9660 filesystems with Rock Ridge extensions. Media can be optical
|
||||||
|
media or filesystem objects.
|
||||||
|
|
||||||
|
Our scope is currently Linux 2.4 and 2.6, or FreeBSD .
|
||||||
|
|
||||||
|
libisoburn is an add-on to libburn and libisofs which coordinates both and
|
||||||
|
also allows to grow ISO-9660 filesystem images on multi-session media as well
|
||||||
|
as on overwriteable media via the same API.
|
||||||
|
All media peculiarities are handled automatically.
|
||||||
|
|
||||||
|
xorriso is an application of all three libraries which creates, loads,
|
||||||
|
manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions.
|
||||||
|
Manipulation is not only adding or overwriting of files but also deletion,
|
||||||
|
renaming, and attribute changing. An incremental backup feature is provided.
|
||||||
|
See xorriso/README for more
|
||||||
|
|
||||||
|
SONAME:
|
||||||
|
libisoburn.so.1 (since 0.1.0, February 2008).
|
||||||
|
|
||||||
|
|
||||||
|
@section using Using the libraries
|
||||||
|
|
||||||
|
Our build system is based on autotools.
|
||||||
|
User experience tells us that you will need at least autotools version 1.7.
|
||||||
|
|
||||||
|
To build libisoburn go into its toplevel directory and execute
|
||||||
|
|
||||||
|
- ./bootstrap (needed if you downloaded from SVN)
|
||||||
|
|
||||||
|
- ./configure
|
||||||
|
|
||||||
|
- make
|
||||||
|
|
||||||
|
To make the libraries accessible for running resp. developing applications
|
||||||
|
|
||||||
|
- make install
|
||||||
|
|
||||||
|
Read libisoburn/libisoburn.h for a description of the API.
|
||||||
|
See also README, xorriso/README, and the man page xorriso/xorriso.1 which
|
||||||
|
gives an idea of the capabilities provided by Libburnia.
|
||||||
|
|
||||||
|
You will also have to install and understand the two libraries of the
|
||||||
|
Libburnia project which provide fundamental services:
|
||||||
|
libburn is the library by which preformatted data get onto optical media.
|
||||||
|
See libburn/libburn.h for its API description.
|
||||||
|
libisofs is the library to handle ISO 9660 filesystems with Rock Ridge
|
||||||
|
extensions. Its API is described in libisofs/libisofs.h .
|
||||||
|
|
||||||
|
*/
|
@ -477,7 +477,7 @@ WARN_LOGFILE =
|
|||||||
# directories like "/usr/src/myproject". Separate the files or directories
|
# directories like "/usr/src/myproject". Separate the files or directories
|
||||||
# with spaces.
|
# with spaces.
|
||||||
|
|
||||||
INPUT = libburn \
|
INPUT = libisoburn \
|
||||||
doc \
|
doc \
|
||||||
test
|
test
|
||||||
|
|
||||||
@ -495,9 +495,7 @@ INPUT_ENCODING = UTF-8
|
|||||||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
|
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
|
||||||
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
|
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
|
||||||
|
|
||||||
FILE_PATTERNS = libburn.h \
|
FILE_PATTERNS =
|
||||||
comments \
|
|
||||||
libburner.c
|
|
||||||
|
|
||||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
|
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
|
||||||
# should be searched for input files as well. Possible values are YES and NO.
|
# should be searched for input files as well. Possible values are YES and NO.
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
/* libburn wrappers for libisoburn
|
/* libburn wrappers for libisoburn
|
||||||
|
|
||||||
Copyright 2007 - 2008 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007 - 2009 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo
|
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo
|
||||||
@ -24,6 +24,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <regex.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef Xorriso_standalonE
|
#ifndef Xorriso_standalonE
|
||||||
@ -58,7 +59,7 @@ extern void *libisoburn_default_msgs_submit_handle;
|
|||||||
extern int libisoburn_default_msgs_submit_flag;
|
extern int libisoburn_default_msgs_submit_flag;
|
||||||
|
|
||||||
|
|
||||||
int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
static int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
|
|
||||||
int isoburn_initialize(char msg[1024], int flag)
|
int isoburn_initialize(char msg[1024], int flag)
|
||||||
@ -82,11 +83,11 @@ int isoburn_initialize(char msg[1024], int flag)
|
|||||||
iso_lib_header_version_minor
|
iso_lib_header_version_minor
|
||||||
iso_lib_header_version_micro
|
iso_lib_header_version_micro
|
||||||
If the header is too old then the following code shall cause failure of
|
If the header is too old then the following code shall cause failure of
|
||||||
cdrskin compilation rather than to allow production of a program with
|
libisoburn compilation rather than to allow production of a program with
|
||||||
unpredictable bugs or memory corruption.
|
unpredictable bugs or memory corruption.
|
||||||
The compiler messages supposed to appear in this case are:
|
The compiler messages supposed to appear in this case are:
|
||||||
error: 'LIBISOFS_MISCONFIGURATION' undeclared (first use in this function)
|
error: 'LIBISOFS_MISCONFIGURATION' undeclared (first use in this function)
|
||||||
error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_and_burn_wrap_dot_h' undeclared (first use in this function)
|
error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h' undeclared (first use in this function)
|
||||||
error: 'LIBISOFS_MISCONFIGURATION_' undeclared (first use in this function)
|
error: 'LIBISOFS_MISCONFIGURATION_' undeclared (first use in this function)
|
||||||
*/
|
*/
|
||||||
/* The indendation is an advise of man gcc to help old compilers ignoring */
|
/* The indendation is an advise of man gcc to help old compilers ignoring */
|
||||||
@ -102,7 +103,7 @@ int isoburn_initialize(char msg[1024], int flag)
|
|||||||
|
|
||||||
#ifdef Isoburn_libisofs_dot_h_too_olD
|
#ifdef Isoburn_libisofs_dot_h_too_olD
|
||||||
LIBISOFS_MISCONFIGURATION = 0;
|
LIBISOFS_MISCONFIGURATION = 0;
|
||||||
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_and_burn_wrap_dot_h = 0;
|
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libisofs_dot_h_TOO_OLD__SEE_libisoburn_dot_h_AND_burn_wrap_dot_h = 0;
|
||||||
LIBISOFS_MISCONFIGURATION_ = 0;
|
LIBISOFS_MISCONFIGURATION_ = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -263,6 +264,9 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
|
|||||||
@param flag bit0= pretent blank on overwriteable media
|
@param flag bit0= pretent blank on overwriteable media
|
||||||
bit3= if the drive reports a -ROM profile then try to read
|
bit3= if the drive reports a -ROM profile then try to read
|
||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
|
bit4= do not emulate TOC on overwriteable media
|
||||||
|
bit5= ignore ACL from external filesystems
|
||||||
|
bit6= ignore POSIX Extended Attributes from external filesystems
|
||||||
*/
|
*/
|
||||||
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||||
int flag)
|
int flag)
|
||||||
@ -271,6 +275,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
struct burn_multi_caps *caps= NULL;
|
struct burn_multi_caps *caps= NULL;
|
||||||
struct isoburn_toc_entry *t;
|
struct isoburn_toc_entry *t;
|
||||||
char profile_name[80];
|
char profile_name[80];
|
||||||
|
struct isoburn_toc_disc *disc= NULL;
|
||||||
|
struct isoburn_toc_session **sessions;
|
||||||
|
struct isoburn_toc_track **tracks;
|
||||||
|
int num_sessions= 0, num_tracks= 0, track_count= 0, session_no= 0;
|
||||||
|
char msg[80];
|
||||||
|
|
||||||
profile_name[0]= 0;
|
profile_name[0]= 0;
|
||||||
ret= burn_disc_get_profile(d, &profile, profile_name);
|
ret= burn_disc_get_profile(d, &profile, profile_name);
|
||||||
@ -288,6 +297,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
(*o)->msgs_submit= libisoburn_default_msgs_submit;
|
(*o)->msgs_submit= libisoburn_default_msgs_submit;
|
||||||
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
|
(*o)->msgs_submit_handle= libisoburn_default_msgs_submit_handle;
|
||||||
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
|
(*o)->msgs_submit_flag= libisoburn_default_msgs_submit_flag;
|
||||||
|
iso_image_set_ignore_aclea((*o)->image, (flag >> 5 ) & 3);
|
||||||
|
|
||||||
#ifdef Hardcoded_cd_rW
|
#ifdef Hardcoded_cd_rW
|
||||||
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo */
|
||||||
@ -313,23 +323,49 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
/* try to read emulated toc */
|
/* try to read emulated toc */
|
||||||
ret= isoburn_emulate_toc(d, 0);
|
ret= isoburn_emulate_toc(d, flag & 16);
|
||||||
if(ret<0) {
|
if(ret<0) {
|
||||||
(*o)->emulation_mode= -1;
|
(*o)->emulation_mode= -1;
|
||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* >>> recognize unsuitable media (but allow read-only media) */;
|
/* >>> recognize unsuitable media (but allow read-only media) */;
|
||||||
|
|
||||||
if(readonly) {
|
if(readonly) {
|
||||||
/* This might be overwriteable media in a -ROM drive */
|
/* This might be overwriteable media in a -ROM drive.
|
||||||
ret= isoburn_emulate_toc(d, 1);
|
Pitfall:
|
||||||
if(ret<0)
|
Multi-session media which bear a xorriso image for overwriteables
|
||||||
goto ex;
|
in their first session would get a TOC of that first image rather
|
||||||
if(ret==0 && profile !=0x08 && (flag&8)) {
|
than of the media.
|
||||||
|
It is not possible to distinguish a BD-RE from a single session
|
||||||
|
BD-R with an image for overwriteables. But as soon as the media
|
||||||
|
bears 2 logical tracks it cannot be overwriteable.
|
||||||
|
So count the number of tracks first.
|
||||||
|
*/
|
||||||
|
disc= isoburn_toc_drive_get_disc(d);
|
||||||
|
if(disc != NULL) {
|
||||||
|
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
|
||||||
|
for(session_no= 0; session_no < num_sessions; session_no++) {
|
||||||
|
tracks= isoburn_toc_session_get_tracks(sessions[session_no],
|
||||||
|
&num_tracks);
|
||||||
|
track_count+= num_tracks;
|
||||||
|
}
|
||||||
|
isoburn_toc_disc_free(disc);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(msg, "ROM media has libburn track count = %d", track_count);
|
||||||
|
isoburn_msgs_submit(*o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
|
||||||
|
if((flag & 16) || track_count >= 2) {
|
||||||
|
ret= 0; /* toc emulation off, or not overwriteable */
|
||||||
|
} else {
|
||||||
|
ret= isoburn_emulate_toc(d, 1);
|
||||||
|
if(ret<0)
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
if(ret == 0 && profile != 0x08 && (flag&8)) {
|
||||||
/* This might also be multi-session media which do not
|
/* This might also be multi-session media which do not
|
||||||
get shown with a decent TOC.
|
get shown with a decent TOC.
|
||||||
CD-R TOC (profile 0x08) can be trusted. Others not.
|
CD-R TOC (profile 0x08) can be trusted. Others not.
|
||||||
@ -373,29 +409,40 @@ ex:
|
|||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
(depending on media type and drive state this might
|
(depending on media type and drive state this might
|
||||||
help or it might make the resulting toc even worse)
|
help or it might make the resulting toc even worse)
|
||||||
|
bit4= do not emulate TOC on overwriteable media
|
||||||
|
bit5= ignore ACL from external filesystems
|
||||||
|
bit6= ignore POSIX Extended Attributes from external filesystems
|
||||||
*/
|
*/
|
||||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
char *adr, int flag)
|
char *adr, int flag)
|
||||||
{
|
{
|
||||||
int ret, conv_ret, drive_grabbed= 0;
|
int ret, drive_grabbed= 0;
|
||||||
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
|
||||||
struct isoburn *o= NULL;
|
struct isoburn *o= NULL;
|
||||||
char msg[BURN_MSGS_MESSAGE_LEN+4096];
|
|
||||||
|
#ifndef NIX
|
||||||
|
|
||||||
|
/* <<< should be obsolete by new drive addressing of libburn-0.5.2 */
|
||||||
|
/* >>> but helps with kernel 2.4 to use /dev/sr */
|
||||||
|
|
||||||
|
int conv_ret;
|
||||||
|
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
||||||
|
|
||||||
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
||||||
if(conv_ret<=0) {
|
if(conv_ret<=0)
|
||||||
sprintf(msg, "Unsuitable drive address: '%s'\n",adr);
|
strcpy(libburn_drive_adr, adr);
|
||||||
msg[BURN_MSGS_MESSAGE_LEN-1]= 0;
|
|
||||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
|
|
||||||
ret= 0; goto ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
ret= burn_drive_scan_and_grab(drive_infos, adr, flag & 1);
|
||||||
|
|
||||||
|
#endif /* ! NIX */
|
||||||
|
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
drive_grabbed= 1;
|
drive_grabbed= 1;
|
||||||
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
|
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
|
||||||
(flag&8) | !!(flag&2));
|
(flag & (8 | 16 | 32 | 64)) | !!(flag&2));
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
@ -625,6 +672,23 @@ int isoburn_disc_track_lba_nwa(struct burn_drive *d,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_get_msc2(struct isoburn *o,
|
||||||
|
struct burn_write_opts *opts, int *msc2, int flag)
|
||||||
|
{
|
||||||
|
int ret, lba, nwa;
|
||||||
|
|
||||||
|
if(o->fabricated_msc2>=0)
|
||||||
|
*msc2= o->fabricated_msc2;
|
||||||
|
else {
|
||||||
|
ret= isoburn_disc_track_lba_nwa(o->drive, opts, 0, &lba, &nwa);
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
*msc2= nwa;
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
void isoburn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -925,7 +989,8 @@ int isoburn_report_iso_error(int iso_error_code, char msg_text[], int os_errno,
|
|||||||
|
|
||||||
/* @param flag bit0-7: info return mode
|
/* @param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
|
2= do not touch info (caller will copy 64 kB header to it)
|
||||||
bit14= -reserved -
|
bit14= -reserved -
|
||||||
bit15= -reserved-
|
bit15= -reserved-
|
||||||
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
||||||
@ -954,6 +1019,8 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
|||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
info[i]= 0;
|
info[i]= 0;
|
||||||
|
} else if(info_mode==2) {
|
||||||
|
;
|
||||||
} else {
|
} else {
|
||||||
isoburn_msgs_submit(NULL, 0x00060000,
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
"Program error: Unknown info mode with isoburn_read_iso_head()",
|
"Program error: Unknown info mode with isoburn_read_iso_head()",
|
||||||
@ -967,7 +1034,9 @@ int isoburn_read_iso_head_parse(struct burn_drive *d, unsigned char *data,
|
|||||||
/* API
|
/* API
|
||||||
@param flag bit0-7: info return mode
|
@param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
|
2= copy 64 kB header to info (needs 65536 bytes)
|
||||||
|
bit13= do not read head from media but use first 64 kB from info
|
||||||
bit14= check both half buffers (not only second)
|
bit14= check both half buffers (not only second)
|
||||||
return 2 if found in first block
|
return 2 if found in first block
|
||||||
bit15= return-1 on read error
|
bit15= return-1 on read error
|
||||||
@ -978,40 +1047,80 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
|||||||
int *image_blocks, char *info, int flag)
|
int *image_blocks, char *info, int flag)
|
||||||
{
|
{
|
||||||
unsigned char buffer[64*1024];
|
unsigned char buffer[64*1024];
|
||||||
int ret;
|
int ret, info_mode;
|
||||||
off_t data_count;
|
off_t data_count;
|
||||||
|
|
||||||
|
info_mode= flag&255;
|
||||||
*image_blocks= 0;
|
*image_blocks= 0;
|
||||||
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
if(flag&(1<<13)) {
|
||||||
|
memcpy(buffer, info, 64*1024);
|
||||||
|
} else {
|
||||||
|
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
||||||
(off_t) 64*1024, &data_count, 2); /* no error messages */
|
(off_t) 64*1024, &data_count, 2); /* no error messages */
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(-1*!!(flag&(1<<15)));
|
return(-1*!!(flag&(1<<15)));
|
||||||
|
if(info_mode==2)
|
||||||
|
memcpy(info, buffer, 64*1024);
|
||||||
|
}
|
||||||
|
|
||||||
if(flag&(1<<14)) {
|
if(flag&(1<<14)) {
|
||||||
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info,
|
ret= isoburn_read_iso_head_parse(d, buffer, image_blocks, info, info_mode);
|
||||||
flag&255);
|
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
return(ret);
|
return(ret);
|
||||||
if(ret>0)
|
if(ret>0)
|
||||||
return(2);
|
return(2);
|
||||||
}
|
}
|
||||||
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
|
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
|
||||||
flag&255);
|
info_mode);
|
||||||
return(ret);
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
|
||||||
|
int track_blocks, char *volid, int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct isoburn_toc_entry *item;
|
||||||
|
|
||||||
|
ret= isoburn_toc_entry_new(&item, o->toc, 0);
|
||||||
|
if(ret<=0) {
|
||||||
|
no_memory:;
|
||||||
|
isoburn_msgs_submit(o, 0x00060000,
|
||||||
|
"Not enough memory for emulated TOC entry object",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
if(o->toc==NULL)
|
||||||
|
o->toc= item;
|
||||||
|
(*session_count)++;
|
||||||
|
item->session= *session_count;
|
||||||
|
item->track_no= *session_count;
|
||||||
|
item->start_lba= lba;
|
||||||
|
item->track_blocks= track_blocks;
|
||||||
|
if(volid != NULL) {
|
||||||
|
item->volid= strdup(volid);
|
||||||
|
if(item->volid == NULL)
|
||||||
|
goto no_memory;
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= allow unemulated media
|
/* @param flag bit0= allow unemulated media
|
||||||
bit1= free scanning without enclosing LBA-0-header
|
bit1= free scanning without enclosing LBA-0-header
|
||||||
|
bit4= represent emulated media as one single session
|
||||||
|
(not with bit1)
|
||||||
@return -1 severe error, 0= no neat header chain, 1= credible chain read
|
@return -1 severe error, 0= no neat header chain, 1= credible chain read
|
||||||
*/
|
*/
|
||||||
int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
||||||
{
|
{
|
||||||
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
|
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
|
||||||
int scan_start= 0, scan_count= 0;
|
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
|
||||||
|
int with_enclosure= 0;
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
struct isoburn_toc_entry *item;
|
char msg[160], size_text[80], *sev, volid[33], *volid_pt= NULL;
|
||||||
char msg[160], size_text[80], *sev;
|
|
||||||
time_t start_time, last_pacifier, now;
|
time_t start_time, last_pacifier, now;
|
||||||
|
|
||||||
/* is the media emulated multi-session ? */
|
/* is the media emulated multi-session ? */
|
||||||
@ -1030,6 +1139,11 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
{ret= 0; goto failure;}
|
{ret= 0; goto failure;}
|
||||||
lba= Libisoburn_overwriteable_starT;
|
lba= Libisoburn_overwriteable_starT;
|
||||||
|
with_enclosure= 1;
|
||||||
|
if((flag & 16) && o->emulation_mode == 1) {
|
||||||
|
ret= 1;
|
||||||
|
goto failure; /* This will represent the media as single session */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while(lba<image_size || (flag&2)) {
|
while(lba<image_size || (flag&2)) {
|
||||||
now= time(NULL);
|
now= time(NULL);
|
||||||
@ -1038,16 +1152,34 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
if(scan_count>=10*512)
|
if(scan_count>=10*512)
|
||||||
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
|
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
|
||||||
else
|
else
|
||||||
sprintf(size_text, "%.f MB", 2 * (double) scan_count);
|
sprintf(size_text, "%.f kB", 2 * (double) scan_count);
|
||||||
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
|
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
|
||||||
session_count, size_text, (double) (now - start_time));
|
session_count, size_text, (double) (now - start_time));
|
||||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
|
||||||
}
|
}
|
||||||
read_flag= 0;
|
read_flag= 1;
|
||||||
if(flag&2)
|
if(flag&2)
|
||||||
read_flag= (1<<15)|((session_count>0)<<14);
|
read_flag|= (1<<15)|((session_count>0)<<14);
|
||||||
ret= isoburn_read_iso_head(d, lba, &track_blocks, NULL, read_flag);
|
else {
|
||||||
if(ret<=0) {
|
|
||||||
|
/* 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, volid, read_flag);
|
||||||
|
if(ret > 0) {
|
||||||
|
volid_pt= volid;
|
||||||
|
} else {
|
||||||
|
volid_pt= NULL;
|
||||||
if(session_count>0) {
|
if(session_count>0) {
|
||||||
if(flag&2) {
|
if(flag&2) {
|
||||||
if(ret==0) {
|
if(ret==0) {
|
||||||
@ -1063,30 +1195,36 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
"Chain of ISO session headers broken at #%d, LBA %ds",
|
"Chain of ISO session headers broken at #%d, LBA %ds",
|
||||||
session_count+1, lba);
|
session_count+1, lba);
|
||||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
||||||
|
|
||||||
|
if(with_enclosure) {
|
||||||
|
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL,0);
|
||||||
|
if(ret<=0)
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
break; /* do not return failure */
|
||||||
|
|
||||||
}
|
}
|
||||||
{ret= 0; goto failure;}
|
{ret= 0; goto failure;}
|
||||||
}
|
}
|
||||||
if(ret==2) /* ISO header was found in first half block */
|
if(ret==2) /* ISO header was found in first half block */
|
||||||
lba-= 16;
|
lba-= 16;
|
||||||
ret= isoburn_toc_entry_new(&item, o->toc, 0);
|
|
||||||
if(ret<=0) {
|
ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, volid_pt,
|
||||||
isoburn_msgs_submit(o, 0x00060000,
|
0);
|
||||||
"Not enough memory for emulated TOC entry object",
|
if(ret<=0)
|
||||||
0, "FATAL", 0);
|
goto failure;
|
||||||
ret= -1; goto failure;
|
|
||||||
}
|
|
||||||
if(o->toc==NULL)
|
|
||||||
o->toc= item;
|
|
||||||
session_count++;
|
|
||||||
scan_count+= 32;
|
|
||||||
item->session= session_count;
|
|
||||||
item->track_no= session_count;
|
|
||||||
item->start_lba= lba;
|
|
||||||
item->track_blocks= track_blocks;
|
|
||||||
lba+= track_blocks;
|
lba+= track_blocks;
|
||||||
|
scan_count+= 32;
|
||||||
|
|
||||||
|
/* growisofs aligns to 16 rather than 32 */
|
||||||
|
growisofs_nwa= lba;
|
||||||
|
if(growisofs_nwa % 16)
|
||||||
|
growisofs_nwa+= 16 - (growisofs_nwa % 16);
|
||||||
if(lba % Libisoburn_nwa_alignemenT)
|
if(lba % Libisoburn_nwa_alignemenT)
|
||||||
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
|
lba+= Libisoburn_nwa_alignemenT - (lba % Libisoburn_nwa_alignemenT);
|
||||||
scan_start= lba;
|
scan_start= lba;
|
||||||
|
if(lba - growisofs_nwa == 16)
|
||||||
|
probe_minus_16= 1;
|
||||||
}
|
}
|
||||||
if(last_pacifier != start_time)
|
if(last_pacifier != start_time)
|
||||||
sev= "UPDATE";
|
sev= "UPDATE";
|
||||||
@ -1103,6 +1241,10 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
|
|||||||
return(1);
|
return(1);
|
||||||
failure:;
|
failure:;
|
||||||
isoburn_toc_entry_destroy(&(o->toc), 1);
|
isoburn_toc_entry_destroy(&(o->toc), 1);
|
||||||
|
if(with_enclosure && o->emulation_mode == 1) {
|
||||||
|
session_count= 0;
|
||||||
|
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, NULL, 0);
|
||||||
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1247,15 +1389,31 @@ failure:;
|
|||||||
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
|
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
|
||||||
{
|
{
|
||||||
struct isoburn_toc_entry *t;
|
struct isoburn_toc_entry *t;
|
||||||
int ret= 0;
|
int ret= 0, num_sessions, num_tracks;
|
||||||
|
struct burn_session **sessions;
|
||||||
|
struct burn_track **tracks;
|
||||||
|
struct burn_toc_entry entry;
|
||||||
|
|
||||||
if(disc==NULL)
|
if(disc==NULL)
|
||||||
return(0);
|
return(0);
|
||||||
if(disc->toc!=NULL) {
|
if(disc->toc!=NULL) {
|
||||||
for(t= disc->toc; t!=NULL; t= t->next)
|
for(t= disc->toc; t!=NULL; t= t->next)
|
||||||
ret= t->start_lba + t->track_blocks;
|
ret= t->start_lba + t->track_blocks;
|
||||||
} else if(disc->disc!=NULL)
|
} else if(disc->disc!=NULL) {
|
||||||
|
sessions= burn_disc_get_sessions(disc->disc, &num_sessions);
|
||||||
|
if(num_sessions > 0) {
|
||||||
|
tracks = burn_session_get_tracks(sessions[num_sessions - 1],
|
||||||
|
&num_tracks);
|
||||||
|
if(num_tracks > 0) {
|
||||||
|
burn_track_get_entry(tracks[num_tracks - 1], &entry);
|
||||||
|
if(entry.extensions_valid & 1)
|
||||||
|
ret= entry.start_lba + entry.track_blocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
ret= burn_disc_get_sectors(disc->disc);
|
ret= burn_disc_get_sectors(disc->disc);
|
||||||
|
*/
|
||||||
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1358,6 +1516,21 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_toc_track_get_emul(struct isoburn_toc_track *t, int *start_lba,
|
||||||
|
int *image_blocks, char volid[33], int flag)
|
||||||
|
{
|
||||||
|
if(t->toc_entry == NULL)
|
||||||
|
return(0);
|
||||||
|
if(t->toc_entry->volid == NULL)
|
||||||
|
return(0);
|
||||||
|
*start_lba= t->toc_entry->start_lba;
|
||||||
|
*image_blocks= t->toc_entry->track_blocks;
|
||||||
|
strncpy(volid, t->toc_entry->volid, 32);
|
||||||
|
volid[32]= 0;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void isoburn_toc_disc_free(struct isoburn_toc_disc *d)
|
void isoburn_toc_disc_free(struct isoburn_toc_disc *d)
|
||||||
{
|
{
|
||||||
if(d->disc!=NULL)
|
if(d->disc!=NULL)
|
||||||
@ -1399,11 +1572,16 @@ 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
|
||||||
|
bit1= insist in seeing a disc object with at least one session
|
||||||
|
bit2= with adr_mode 4: use adr_value as regular expression
|
||||||
|
*/
|
||||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||||
int flag)
|
int flag)
|
||||||
{
|
{
|
||||||
int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks;
|
int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks;
|
||||||
int lba, best_lba, size;
|
int lba, best_lba, size, re_valid= 0, track_count= 0;
|
||||||
|
time_t start_time= 0, last_pacifier= 0, now;
|
||||||
char volid[33], msg[160];
|
char volid[33], msg[160];
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
struct isoburn_toc_disc *disc= NULL;
|
struct isoburn_toc_disc *disc= NULL;
|
||||||
@ -1411,6 +1589,8 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
|||||||
struct isoburn_toc_track **tracks= NULL;
|
struct isoburn_toc_track **tracks= NULL;
|
||||||
static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"};
|
static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"};
|
||||||
static int max_mode_names= 4;
|
static int max_mode_names= 4;
|
||||||
|
regex_t re;
|
||||||
|
regmatch_t match[1];
|
||||||
|
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
if(ret<0)
|
if(ret<0)
|
||||||
@ -1418,8 +1598,9 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
|||||||
if(o==NULL)
|
if(o==NULL)
|
||||||
return(-1);
|
return(-1);
|
||||||
|
|
||||||
|
start_time= last_pacifier= time(NULL);
|
||||||
adr_num= atoi(adr_value);
|
adr_num= atoi(adr_value);
|
||||||
if(adr_mode!=3) {
|
if(adr_mode!=3 || (flag & 2)) {
|
||||||
disc= isoburn_toc_drive_get_disc(d);
|
disc= isoburn_toc_drive_get_disc(d);
|
||||||
if(disc==NULL) {
|
if(disc==NULL) {
|
||||||
not_found:;
|
not_found:;
|
||||||
@ -1470,21 +1651,53 @@ not_found:;
|
|||||||
|
|
||||||
} else if(adr_mode==3) {
|
} else if(adr_mode==3) {
|
||||||
o->fabricated_msc1= adr_num;
|
o->fabricated_msc1= adr_num;
|
||||||
|
if((flag & 1) && o->fabricated_msc1 >= 16) {
|
||||||
|
/* adr_num is possibly 16 blocks too high */
|
||||||
|
ret= isoburn_read_iso_head(d, o->fabricated_msc1, &size,volid, 1|(1<<14));
|
||||||
|
if(ret==2)
|
||||||
|
o->fabricated_msc1-= 16;
|
||||||
|
}
|
||||||
} else if(adr_mode==4) {
|
} else if(adr_mode==4) {
|
||||||
/* search for volume id that is equal to adr_value */
|
/* search for volume id that is equal to adr_value */
|
||||||
|
if(flag & 4) {
|
||||||
|
ret= regcomp(&re, adr_value, 0);
|
||||||
|
if(ret != 0)
|
||||||
|
flag&= ~4;
|
||||||
|
else
|
||||||
|
re_valid= 1;
|
||||||
|
}
|
||||||
best_lba= -1;
|
best_lba= -1;
|
||||||
for(i=0; i<num_sessions; i++) {
|
for(i=0; i<num_sessions; i++) {
|
||||||
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
|
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
|
||||||
if(tracks==NULL)
|
if(tracks==NULL)
|
||||||
continue;
|
continue;
|
||||||
for(j= 0; j<num_tracks; j++) {
|
for(j= 0; j<num_tracks; j++) {
|
||||||
isoburn_get_track_lba(tracks[0], &lba, 0);
|
now= time(NULL);
|
||||||
ret= isoburn_read_iso_head(d, lba, &size, volid, 1);
|
if(now - last_pacifier >= 5 && track_count > 0) {
|
||||||
if(ret<=0)
|
last_pacifier= now;
|
||||||
|
sprintf(msg,
|
||||||
|
"Scanned %d tracks for matching volid in %.f seconds",
|
||||||
|
track_count, (double) (now - start_time));
|
||||||
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
|
||||||
|
}
|
||||||
|
track_count++;
|
||||||
|
ret= isoburn_toc_track_get_emul(tracks[0], &lba, &size, volid, 0);
|
||||||
|
if(ret < 0)
|
||||||
continue;
|
continue;
|
||||||
if(strcmp(volid, adr_value)!=0)
|
if(ret == 0) {
|
||||||
|
isoburn_get_track_lba(tracks[0], &lba, 0);
|
||||||
|
ret= isoburn_read_iso_head(d, lba, &size, volid, 1);
|
||||||
|
if(ret<=0)
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
if(flag & 4) {
|
||||||
|
ret= regexec(&re, volid, 1, match, 0);
|
||||||
|
if(ret != 0)
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if(strcmp(volid, adr_value)!=0)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
best_lba= lba;
|
best_lba= lba;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1500,9 +1713,73 @@ unknown_mode:;
|
|||||||
}
|
}
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:;
|
ex:;
|
||||||
|
if(start_time != last_pacifier && track_count > 0) {
|
||||||
|
now= time(NULL);
|
||||||
|
sprintf(msg,
|
||||||
|
"Scanned %d tracks for matching volid in %.f seconds",
|
||||||
|
track_count, (double) (now - start_time));
|
||||||
|
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
|
||||||
|
}
|
||||||
if(disc!=NULL)
|
if(disc!=NULL)
|
||||||
isoburn_toc_disc_free(disc);
|
isoburn_toc_disc_free(disc);
|
||||||
|
if((flag & 4) && re_valid)
|
||||||
|
regfree(&re);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_get_mount_params(struct burn_drive *d,
|
||||||
|
int adr_mode, char *adr_value,
|
||||||
|
int *lba, int *track, int *session,
|
||||||
|
char volid[33], int flag)
|
||||||
|
{
|
||||||
|
int msc1_mem, ret, total_tracks, num_sessions, num_tracks, i, j, track_lba;
|
||||||
|
int size, is_iso= 0;
|
||||||
|
struct isoburn *o;
|
||||||
|
struct isoburn_toc_disc *disc= NULL;
|
||||||
|
struct isoburn_toc_session **sessions= NULL;
|
||||||
|
struct isoburn_toc_track **tracks= NULL;
|
||||||
|
|
||||||
|
*lba= *track= *session= -1;
|
||||||
|
volid[0]= 0;
|
||||||
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
|
if(ret < 0 || o == NULL)
|
||||||
|
return(-1);
|
||||||
|
msc1_mem= o->fabricated_msc1;
|
||||||
|
ret= isoburn_set_msc1(d, adr_mode, adr_value, 2 | (flag & 4));
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
*lba= o->fabricated_msc1;
|
||||||
|
|
||||||
|
disc= isoburn_toc_drive_get_disc(d);
|
||||||
|
if(disc==NULL)
|
||||||
|
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
|
||||||
|
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
|
||||||
|
if(sessions==NULL || num_sessions<=0)
|
||||||
|
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
|
||||||
|
total_tracks= 0;
|
||||||
|
for(i=0; i<num_sessions && *session < 0; i++) {
|
||||||
|
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
|
||||||
|
if(tracks==NULL)
|
||||||
|
continue;
|
||||||
|
for(j= 0; j<num_tracks && *track < 0; j++) {
|
||||||
|
total_tracks++;
|
||||||
|
isoburn_get_track_lba(tracks[j], &track_lba, 0);
|
||||||
|
if(track_lba == *lba) {
|
||||||
|
*track= total_tracks;
|
||||||
|
*session= i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret= isoburn_read_iso_head(d, *lba, &size, volid, 1);
|
||||||
|
if(ret <= 0)
|
||||||
|
volid[0]= 0;
|
||||||
|
else
|
||||||
|
is_iso= 1;
|
||||||
|
|
||||||
|
ex:;
|
||||||
|
o->fabricated_msc1= msc1_mem;
|
||||||
|
return(2 - is_iso);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
data source for libisoburn.
|
data source for libisoburn.
|
||||||
|
|
||||||
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
and Thomas Schmitt <scdbackup@gmx.net>
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -85,6 +85,19 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
|
|
||||||
icd = (struct isoburn_cached_drive *) src->data;
|
icd = (struct isoburn_cached_drive *) src->data;
|
||||||
d = (struct burn_drive*) icd->drive;
|
d = (struct burn_drive*) icd->drive;
|
||||||
|
|
||||||
|
if(d == NULL) {
|
||||||
|
/* This would happen if libisoburn saw output data in the fifo and
|
||||||
|
performed early drive release and afterwards libisofs still tries
|
||||||
|
to read data.
|
||||||
|
That would constitute a bad conceptual problem in libisoburn.
|
||||||
|
*/
|
||||||
|
isoburn_msgs_submit(NULL, 0x00060000,
|
||||||
|
"Programming error: Drive released while libisofs still attempts to read",
|
||||||
|
0, "FATAL", 0);
|
||||||
|
return ISO_ASSERT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||||
|
|
||||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
||||||
@ -134,6 +147,10 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
return 1;
|
return 1;
|
||||||
tiles[oldest].last_error_lba = lba;
|
tiles[oldest].last_error_lba = lba;
|
||||||
|
|
||||||
|
#ifdef ISO_DATA_SOURCE_MISHAP
|
||||||
|
ret= ISO_DATA_SOURCE_MISHAP;
|
||||||
|
#else
|
||||||
|
/* <<< pre libisofs-0.6.7 */
|
||||||
/* It is not required by the specs of libisofs but implicitely assumed
|
/* It is not required by the specs of libisofs but implicitely assumed
|
||||||
...
|
...
|
||||||
But it is not possible to ignore FAILURE.
|
But it is not possible to ignore FAILURE.
|
||||||
@ -146,6 +163,8 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
enough to make it appear plausible.
|
enough to make it appear plausible.
|
||||||
*/
|
*/
|
||||||
ret= ISO_FILE_CANT_WRITE;
|
ret= ISO_FILE_CANT_WRITE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(ret >= 0)
|
if(ret >= 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||||
@ -189,6 +208,19 @@ static void ds_free_data(IsoDataSource *src)
|
|||||||
src->data= NULL;
|
src->data= NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
|
||||||
|
{
|
||||||
|
struct isoburn_cached_drive *icd;
|
||||||
|
|
||||||
|
if(src==NULL)
|
||||||
|
return(0);
|
||||||
|
icd= (struct isoburn_cached_drive *) src->data;
|
||||||
|
icd->drive= NULL;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
IsoDataSource *ret;
|
IsoDataSource *ret;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/*
|
/*
|
||||||
Class core of libisoburn.
|
Class core of libisoburn.
|
||||||
|
|
||||||
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -68,6 +68,7 @@ int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
|||||||
o->track_no= 0;
|
o->track_no= 0;
|
||||||
o->start_lba= -1;
|
o->start_lba= -1;
|
||||||
o->track_blocks= 0;
|
o->track_blocks= 0;
|
||||||
|
o->volid= NULL;
|
||||||
o->next= NULL;
|
o->next= NULL;
|
||||||
if(boss!=NULL) {
|
if(boss!=NULL) {
|
||||||
for(s= boss; s->next!=NULL; s= s->next);
|
for(s= boss; s->next!=NULL; s= s->next);
|
||||||
@ -85,6 +86,8 @@ int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag)
|
|||||||
return(0);
|
return(0);
|
||||||
if(flag&1)
|
if(flag&1)
|
||||||
isoburn_toc_entry_destroy(&((*o)->next), flag);
|
isoburn_toc_entry_destroy(&((*o)->next), flag);
|
||||||
|
if((*o)->volid != NULL)
|
||||||
|
free((*o)->volid);
|
||||||
free((char *) (*o));
|
free((char *) (*o));
|
||||||
*o= NULL;
|
*o= NULL;
|
||||||
return(1);
|
return(1);
|
||||||
@ -119,6 +122,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|||||||
o->drive= NULL;
|
o->drive= NULL;
|
||||||
o->emulation_mode= 0;
|
o->emulation_mode= 0;
|
||||||
o->fabricated_msc1= -1;
|
o->fabricated_msc1= -1;
|
||||||
|
o->fabricated_msc2= -1;
|
||||||
o->zero_nwa= Libisoburn_overwriteable_starT;
|
o->zero_nwa= Libisoburn_overwriteable_starT;
|
||||||
o->min_start_byte= o->zero_nwa * 2048;
|
o->min_start_byte= o->zero_nwa * 2048;
|
||||||
o->nwa= o->zero_nwa;
|
o->nwa= o->zero_nwa;
|
||||||
@ -130,6 +134,7 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|||||||
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
||||||
o->target_iso_head[i]= 0;
|
o->target_iso_head[i]= 0;
|
||||||
o->image= NULL;
|
o->image= NULL;
|
||||||
|
o->iso_data_source= NULL;
|
||||||
o->read_pacifier= NULL;
|
o->read_pacifier= NULL;
|
||||||
o->read_pacifier_handle= NULL;
|
o->read_pacifier_handle= NULL;
|
||||||
o->msgs_submit= NULL;
|
o->msgs_submit= NULL;
|
||||||
@ -175,7 +180,8 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
|||||||
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
||||||
if(o->iso_source!=NULL)
|
if(o->iso_source!=NULL)
|
||||||
burn_source_free(o->iso_source);
|
burn_source_free(o->iso_source);
|
||||||
|
if(o->iso_data_source!=NULL)
|
||||||
|
iso_data_source_unref(o->iso_data_source);
|
||||||
free((char *) o);
|
free((char *) o);
|
||||||
*objpt= NULL;
|
*objpt= NULL;
|
||||||
return(1);
|
return(1);
|
||||||
@ -334,10 +340,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
|
static
|
||||||
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||||
struct burn_disc **disc,
|
struct burn_disc **disc,
|
||||||
struct isoburn_imgen_opts *opts, int new_img)
|
struct isoburn_imgen_opts *opts, int flag)
|
||||||
{
|
{
|
||||||
struct burn_source *wsrc;
|
struct burn_source *wsrc;
|
||||||
struct burn_session *session;
|
struct burn_session *session;
|
||||||
@ -345,7 +355,19 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
|||||||
struct isoburn *in_o, *out_o;
|
struct isoburn *in_o, *out_o;
|
||||||
IsoWriteOpts *wopts= NULL;
|
IsoWriteOpts *wopts= NULL;
|
||||||
enum burn_disc_status state;
|
enum burn_disc_status state;
|
||||||
int ret, fifo_chunks, lba, nwa;
|
int ret, fifo_chunks, lba, nwa, i, new_img, early_indev_release;
|
||||||
|
uint32_t data_start= -1;
|
||||||
|
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);
|
ret= isoburn_find_emulator(&in_o, in_d, 0);
|
||||||
if(ret<0 || in_o==NULL)
|
if(ret<0 || in_o==NULL)
|
||||||
@ -386,6 +408,17 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
|||||||
iso_write_opts_set_rockridge(wopts, opts->rockridge);
|
iso_write_opts_set_rockridge(wopts, opts->rockridge);
|
||||||
iso_write_opts_set_joliet(wopts, opts->joliet);
|
iso_write_opts_set_joliet(wopts, opts->joliet);
|
||||||
iso_write_opts_set_iso1999(wopts, opts->iso1999);
|
iso_write_opts_set_iso1999(wopts, opts->iso1999);
|
||||||
|
|
||||||
|
/* <<< #ifdef shall be removed when libisofs-0.6.20 is released */
|
||||||
|
#ifdef Libisofs_hardlink_prooF
|
||||||
|
|
||||||
|
iso_write_opts_set_hardlinks(wopts, opts->hardlinks);
|
||||||
|
if(opts->hardlinks)
|
||||||
|
iso_write_opts_set_rrip_1_10_px_ino(wopts, 1);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
iso_write_opts_set_aaip(wopts, opts->aaip);
|
||||||
iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers);
|
iso_write_opts_set_omit_version_numbers(wopts, opts->omit_version_numbers);
|
||||||
iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths);
|
iso_write_opts_set_allow_deep_paths(wopts, opts->allow_deep_paths);
|
||||||
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
|
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
|
||||||
@ -395,7 +428,12 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
|||||||
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
|
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
|
||||||
iso_write_opts_set_relaxed_vol_atts(wopts, 1);
|
iso_write_opts_set_relaxed_vol_atts(wopts, 1);
|
||||||
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
|
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
|
||||||
|
iso_write_opts_set_always_gmt(wopts, opts->always_gmt);
|
||||||
|
iso_write_opts_set_rrip_version_1_10(wopts, opts->rrip_version_1_10);
|
||||||
|
iso_write_opts_set_dir_rec_mtime(wopts, opts->dir_rec_mtime);
|
||||||
|
iso_write_opts_set_aaip_susp_1_10(wopts, opts->aaip_susp_1_10);
|
||||||
iso_write_opts_set_sort_files(wopts, opts->sort_files);
|
iso_write_opts_set_sort_files(wopts, opts->sort_files);
|
||||||
|
iso_write_opts_set_record_md5(wopts, opts->session_md5, opts->file_md5 & 3);
|
||||||
iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode,
|
iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode,
|
||||||
opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
|
opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
|
||||||
iso_write_opts_set_default_dir_mode(wopts, opts->dir_mode);
|
iso_write_opts_set_default_dir_mode(wopts, opts->dir_mode);
|
||||||
@ -404,22 +442,16 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
|||||||
iso_write_opts_set_default_gid(wopts, opts->gid);
|
iso_write_opts_set_default_gid(wopts, opts->gid);
|
||||||
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
||||||
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
||||||
|
|
||||||
|
|
||||||
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
|
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) {
|
if (ret != 1) {
|
||||||
isoburn_msgs_submit(out_o, 0x00060000,
|
isoburn_msgs_submit(out_o, 0x00060000,
|
||||||
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
||||||
{ret= -3; goto ex;}
|
{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);
|
iso_write_opts_set_ms_block(wopts, nwa);
|
||||||
opts->effective_lba= nwa;
|
|
||||||
iso_write_opts_set_appendable(wopts, !new_img);
|
iso_write_opts_set_appendable(wopts, !new_img);
|
||||||
iso_write_opts_set_overwrite_buf(wopts,
|
iso_write_opts_set_overwrite_buf(wopts,
|
||||||
nwa>0 ? out_o->target_iso_head : NULL);
|
nwa>0 ? out_o->target_iso_head : NULL);
|
||||||
@ -429,6 +461,35 @@ 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);
|
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
}
|
}
|
||||||
|
if (early_indev_release) {
|
||||||
|
for(i= 0; i<300; i++) {
|
||||||
|
|
||||||
|
/* <<< ??? */
|
||||||
|
if((i%30) == 0) {
|
||||||
|
sprintf(msg, "Waiting for data in fifo since %d seconds", i/30);
|
||||||
|
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
usleep(100000);
|
||||||
|
ret= iso_ring_buffer_get_status(wsrc, &buffer_size, &buffer_free);
|
||||||
|
if(ret >0 && buffer_size != buffer_free)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* <<< ??? */
|
||||||
|
sprintf(msg,
|
||||||
|
"After %.1f seconds: %d bytes of output available (fifo state=%d)",
|
||||||
|
((double) i+1) / 10.0, (int) (buffer_size - buffer_free), ret);
|
||||||
|
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||||
|
|
||||||
|
if(in_o->iso_data_source!=NULL)
|
||||||
|
isoburn_data_source_shutdown(in_o->iso_data_source, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret= iso_write_opts_get_data_start(wopts, &data_start, 0);
|
||||||
|
opts->data_start_lba= -1;
|
||||||
|
if(ret > 0 && data_start <= 0x7FFFFFFF)
|
||||||
|
opts->data_start_lba= data_start;
|
||||||
|
|
||||||
/* TODO check return values for failure. propertly clean-up on error */
|
/* TODO check return values for failure. propertly clean-up on error */
|
||||||
|
|
||||||
@ -474,6 +535,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
|
/* API @since 0.1.0
|
||||||
@param flag bit0= this is a regular end, not an abort
|
@param flag bit0= this is a regular end, not an abort
|
||||||
give up source reference
|
give up source reference
|
||||||
@ -566,6 +651,11 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
|||||||
o->norock= 0;
|
o->norock= 0;
|
||||||
o->nojoliet= 0;
|
o->nojoliet= 0;
|
||||||
o->noiso1999= 1;
|
o->noiso1999= 1;
|
||||||
|
o->noaaip= 1;
|
||||||
|
o->noacl= 1;
|
||||||
|
o->noea= 1;
|
||||||
|
o->noino= 1;
|
||||||
|
o->nomd5= 1;
|
||||||
o->preferjoliet= 0;
|
o->preferjoliet= 0;
|
||||||
o->uid= geteuid();
|
o->uid= geteuid();
|
||||||
o->gid= getegid();
|
o->gid= getegid();
|
||||||
@ -599,6 +689,11 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
|
|||||||
o->noiso1999= !!(ext&4);
|
o->noiso1999= !!(ext&4);
|
||||||
o->preferjoliet= !!(ext&8);
|
o->preferjoliet= !!(ext&8);
|
||||||
o->pretend_blank= !!(ext&16);
|
o->pretend_blank= !!(ext&16);
|
||||||
|
o->noaaip= !!(ext & 32);
|
||||||
|
o->noacl= !!(ext & 64);
|
||||||
|
o->noea= !!(ext & 128);
|
||||||
|
o->noino= !!(ext & 256);
|
||||||
|
o->nomd5= !!(ext & 512);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -606,7 +701,9 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
|
|||||||
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
|
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
|
||||||
{
|
{
|
||||||
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
|
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
|
||||||
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4);
|
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4) |
|
||||||
|
((!!o->noaaip) << 5) | ((!!o->noacl) << 6) | ((!!o->noea) << 7) |
|
||||||
|
((!!o->noino) << 8) | ((!!o->nomd5) << 9);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -665,14 +762,28 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_igopt_get_in_charset(struct isoburn_read_opts *o,
|
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||||
char **input_charset)
|
char **input_charset)
|
||||||
{
|
{
|
||||||
*input_charset= o->input_charset;
|
*input_charset= o->input_charset;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode)
|
||||||
|
{
|
||||||
|
o->auto_input_charset= mode & 1;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode)
|
||||||
|
{
|
||||||
|
*mode= o->auto_input_charset;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||||
uint32_t *size, int *has_what)
|
uint32_t *size, int *has_what)
|
||||||
{
|
{
|
||||||
@ -705,6 +816,8 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
o->rockridge= 1;
|
o->rockridge= 1;
|
||||||
o->joliet= 0;
|
o->joliet= 0;
|
||||||
o->iso1999= 0;
|
o->iso1999= 0;
|
||||||
|
o->hardlinks= 0;
|
||||||
|
o->aaip = 0;
|
||||||
o->omit_version_numbers= 0;
|
o->omit_version_numbers= 0;
|
||||||
o->allow_deep_paths= 1;
|
o->allow_deep_paths= 1;
|
||||||
o->allow_longer_paths= 0;
|
o->allow_longer_paths= 0;
|
||||||
@ -713,6 +826,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
o->allow_lowercase= 0;
|
o->allow_lowercase= 0;
|
||||||
o->allow_full_ascii= 0;
|
o->allow_full_ascii= 0;
|
||||||
o->joliet_longer_paths= 0;
|
o->joliet_longer_paths= 0;
|
||||||
|
o->always_gmt= 0;
|
||||||
|
o->rrip_version_1_10= 0;
|
||||||
|
o->dir_rec_mtime= 0;
|
||||||
|
o->aaip_susp_1_10= 0;
|
||||||
o->sort_files= 0;
|
o->sort_files= 0;
|
||||||
o->replace_dir_mode= 0;
|
o->replace_dir_mode= 0;
|
||||||
o->replace_file_mode= 0;
|
o->replace_file_mode= 0;
|
||||||
@ -722,9 +839,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
|||||||
o->file_mode= 0444;
|
o->file_mode= 0444;
|
||||||
o->uid= 0;
|
o->uid= 0;
|
||||||
o->gid= 0;
|
o->gid= 0;
|
||||||
o->output_charset= 0;
|
o->output_charset= NULL;
|
||||||
o->fifo_size= 4*1024*1024;
|
o->fifo_size= 4*1024*1024;
|
||||||
o->effective_lba= -1;
|
o->effective_lba= -1;
|
||||||
|
o->data_start_lba= -1;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -758,13 +876,19 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
|
|||||||
o->rockridge= !!(ext&1);
|
o->rockridge= !!(ext&1);
|
||||||
o->joliet= !!(ext&2);
|
o->joliet= !!(ext&2);
|
||||||
o->iso1999= !!(ext&4);
|
o->iso1999= !!(ext&4);
|
||||||
|
o->hardlinks= !!(ext & 8);
|
||||||
|
o->aaip= !!(ext & 32);
|
||||||
|
o->session_md5= !!(ext & 64);
|
||||||
|
o->file_md5= (ext & (128 | 256)) >> 7;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext)
|
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext)
|
||||||
{
|
{
|
||||||
*ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2);
|
*ext= (!!o->rockridge) | ((!!o->joliet)<<1) | ((!!o->iso1999)<<2) |
|
||||||
|
((!!o->hardlinks) << 3) | ((!!o->aaip) << 5) |
|
||||||
|
((!!o->session_md5) << 6) | ((o->file_md5 & 3) << 7);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,6 +903,10 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
|
|||||||
o->allow_lowercase= !!(relax&32);
|
o->allow_lowercase= !!(relax&32);
|
||||||
o->allow_full_ascii= !!(relax&64);
|
o->allow_full_ascii= !!(relax&64);
|
||||||
o->joliet_longer_paths= !!(relax&128);
|
o->joliet_longer_paths= !!(relax&128);
|
||||||
|
o->always_gmt= !!(relax & isoburn_igopt_always_gmt);
|
||||||
|
o->rrip_version_1_10= !!(relax & isoburn_igopt_rrip_version_1_10);
|
||||||
|
o->dir_rec_mtime= !!(relax & isoburn_igopt_dir_rec_mtime);
|
||||||
|
o->aaip_susp_1_10= !!(relax & isoburn_igopt_aaip_susp_1_10);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +916,9 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
|
|||||||
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
|
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
|
||||||
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
|
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
|
||||||
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
|
((!!o->no_force_dots)<<4) | ((!!o->allow_lowercase)<<5) |
|
||||||
((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7);
|
((!!o->allow_full_ascii)<<6) | ((!!o->joliet_longer_paths)<<7) |
|
||||||
|
((!!o->always_gmt)<<8) | ((!!o->rrip_version_1_10)<<9) |
|
||||||
|
((!!o->dir_rec_mtime)<<10) | ((!!o->aaip_susp_1_10)<<11);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,3 +1021,9 @@ int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_igopt_get_data_start(struct isoburn_imgen_opts *o, int *lba)
|
||||||
|
{
|
||||||
|
*lba= o->data_start_lba;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ struct isoburn_toc_entry {
|
|||||||
int start_lba;
|
int start_lba;
|
||||||
int track_blocks;
|
int track_blocks;
|
||||||
|
|
||||||
|
char *volid; /* For caching a volume id from emulated toc on overwriteables */
|
||||||
|
|
||||||
struct isoburn_toc_entry *next;
|
struct isoburn_toc_entry *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,9 +62,17 @@ struct isoburn {
|
|||||||
*/
|
*/
|
||||||
int fabricated_msc1;
|
int fabricated_msc1;
|
||||||
|
|
||||||
|
/* If >= 0, this address is used in isoburn_disc_track_lba_nwa()
|
||||||
|
as reply parameter nwa.
|
||||||
|
(The other nwa parameters below apply only to the effective write address
|
||||||
|
on random access media. msc2 is handed to libisofs but not to libburn.)
|
||||||
|
*/
|
||||||
|
int fabricated_msc2;
|
||||||
|
|
||||||
|
|
||||||
/* The nwa to be used for a first session on the present kind of overwriteable
|
/* The nwa to be used for a first session on the present kind of overwriteable
|
||||||
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
||||||
*/
|
*/
|
||||||
int zero_nwa;
|
int zero_nwa;
|
||||||
|
|
||||||
/* Start address as given by image examination (bytes, not blocks) */
|
/* Start address as given by image examination (bytes, not blocks) */
|
||||||
@ -71,6 +81,7 @@ struct isoburn {
|
|||||||
/* Aligned start address to be used for processing (counted in blocks) */
|
/* Aligned start address to be used for processing (counted in blocks) */
|
||||||
int nwa;
|
int nwa;
|
||||||
|
|
||||||
|
|
||||||
/* Truncate to .nwa an eventual regular file serving as output drive */
|
/* Truncate to .nwa an eventual regular file serving as output drive */
|
||||||
int truncate;
|
int truncate;
|
||||||
|
|
||||||
@ -99,6 +110,10 @@ struct isoburn {
|
|||||||
/* Libisofs image context */
|
/* Libisofs image context */
|
||||||
IsoImage *image;
|
IsoImage *image;
|
||||||
|
|
||||||
|
/* The block data source from which the existing image is read.
|
||||||
|
*/
|
||||||
|
IsoDataSource *iso_data_source;
|
||||||
|
|
||||||
/* The burn source which transfers data from libisofs to libburn.
|
/* The burn source which transfers data from libisofs to libburn.
|
||||||
It has its own fifo.
|
It has its own fifo.
|
||||||
*/
|
*/
|
||||||
@ -190,6 +205,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);
|
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||||
|
|
||||||
|
/** Obtains the image address offset to be used with image generation.
|
||||||
|
This is either the (emulated) drive nwa or a value set by
|
||||||
|
isoburn_prepare_blind_grow().
|
||||||
|
In any case this is the address to tell to iso_write_opts_set_ms_block().
|
||||||
|
@param o The isoburn object to be inquired
|
||||||
|
@param opts If not NULL: write parameters to be set on drive before query
|
||||||
|
@param msc2 The value to be used with iso_write_opts_set_ms_block()
|
||||||
|
@param flag unused yet
|
||||||
|
@return <=0 is failure , >0 success
|
||||||
|
*/
|
||||||
|
int isoburn_get_msc2(struct isoburn *o,
|
||||||
|
struct burn_write_opts *opts, int *msc2, int flag);
|
||||||
|
|
||||||
/** Get a data source suitable for read from a drive using burn_read_data()
|
/** Get a data source suitable for read from a drive using burn_read_data()
|
||||||
function.
|
function.
|
||||||
@param d drive to read from. Must be grabbed.
|
@param d drive to read from. Must be grabbed.
|
||||||
@ -200,6 +228,19 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
|||||||
IsoDataSource *
|
IsoDataSource *
|
||||||
isoburn_data_source_new(struct burn_drive *d);
|
isoburn_data_source_new(struct burn_drive *d);
|
||||||
|
|
||||||
|
/** Disable read capabilities of a data source which was originally created
|
||||||
|
by isoburn_data_source_new(). After this any attempt to read will yield
|
||||||
|
a FATAL programming error event.
|
||||||
|
This is usually done to allow libburn to release the drive while libisofs
|
||||||
|
still holds a reference to the data source object. libisofs is not supposed
|
||||||
|
to use this object for reading any more, nevertheless. The disabled state
|
||||||
|
of the data source is a safety fence around this daring situation.
|
||||||
|
@param src The data source to be disabled
|
||||||
|
@param flag unused yet
|
||||||
|
@return <=0 is failure , >0 success
|
||||||
|
*/
|
||||||
|
int isoburn_data_source_shutdown(IsoDataSource *src, int flag);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options for image reading.
|
* Options for image reading.
|
||||||
@ -211,6 +252,18 @@ struct isoburn_read_opts {
|
|||||||
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
|
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
|
||||||
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
|
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
|
||||||
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
|
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
|
||||||
|
|
||||||
|
/* ts A90121 */
|
||||||
|
unsigned int noaaip:1; /* Do not read AAIP for ACL and EA */
|
||||||
|
unsigned int noacl:1; /* Do not read ACL from external file objects */
|
||||||
|
unsigned int noea:1; /* Do not read XFS-style EA from externals */
|
||||||
|
|
||||||
|
/* ts A90508 */
|
||||||
|
unsigned int noino:1; /* Discard eventual PX inode numbers */
|
||||||
|
|
||||||
|
/* ts A90810 */
|
||||||
|
unsigned int nomd5:1; /* Do not read eventual MD5 array */
|
||||||
|
|
||||||
unsigned int preferjoliet:1;
|
unsigned int preferjoliet:1;
|
||||||
/*< When both Joliet and RR extensions are present, the RR
|
/*< When both Joliet and RR extensions are present, the RR
|
||||||
* tree is used. If you prefer using Joliet, set this to 1. */
|
* tree is used. If you prefer using Joliet, set this to 1. */
|
||||||
@ -225,6 +278,15 @@ struct isoburn_read_opts {
|
|||||||
*/
|
*/
|
||||||
char *input_charset;
|
char *input_charset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable or disable methods to automatically choose an input charset.
|
||||||
|
* This eventually overrides input_charset.
|
||||||
|
*
|
||||||
|
* bit0= allow to set the input character set automatically from
|
||||||
|
* attribute "isofs.cs" of root directory
|
||||||
|
*/
|
||||||
|
int auto_input_charset;
|
||||||
|
|
||||||
/* modified by the function isoburn_read_image */
|
/* modified by the function isoburn_read_image */
|
||||||
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
|
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
|
||||||
to 0 if not. */
|
to 0 if not. */
|
||||||
@ -263,6 +325,20 @@ struct isoburn_imgen_opts {
|
|||||||
unsigned int joliet :1;
|
unsigned int joliet :1;
|
||||||
unsigned int iso1999 :1;
|
unsigned int iso1999 :1;
|
||||||
|
|
||||||
|
/* Whether to mark suitable IsoNode as hardlinks in RRIP PX */
|
||||||
|
unsigned int hardlinks :1;
|
||||||
|
|
||||||
|
/* Write eventual AAIP info containing ACL and EA */
|
||||||
|
unsigned int aaip :1;
|
||||||
|
|
||||||
|
/* Produce and write a MD5 checksum of the whole session stream. */
|
||||||
|
unsigned int session_md5 :1;
|
||||||
|
|
||||||
|
/* Produce and write MD5 checksums for each single IsoFile.
|
||||||
|
See parameter files of iso_write_opts_set_record_md5().
|
||||||
|
*/
|
||||||
|
unsigned int file_md5 :2;
|
||||||
|
|
||||||
/* relaxed constraints */
|
/* relaxed constraints */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -318,6 +394,31 @@ struct isoburn_imgen_opts {
|
|||||||
*/
|
*/
|
||||||
unsigned int joliet_longer_paths :1;
|
unsigned int joliet_longer_paths :1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store timestamps as GMT rather than in local time.
|
||||||
|
*/
|
||||||
|
unsigned int always_gmt :1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write Rock Ridge info as of specification RRIP-1.10 rather than
|
||||||
|
* RRIP-1.12: signature "RRIP_1991A" rather than "IEEE_1282",
|
||||||
|
* field PX without file serial number
|
||||||
|
*/
|
||||||
|
unsigned int rrip_version_1_10 :1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store as ECMA-119 Directory Record timestamp the mtime
|
||||||
|
* of the source rather than the image creation time.
|
||||||
|
*/
|
||||||
|
unsigned int dir_rec_mtime :1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12.
|
||||||
|
* I.e. without announcing it by an ER field and thus without the need
|
||||||
|
* to preceed the RRIP fields by an ES and to preceed the AA field by ES.
|
||||||
|
*/
|
||||||
|
unsigned int aaip_susp_1_10 :1;
|
||||||
|
|
||||||
unsigned int sort_files:1;
|
unsigned int sort_files:1;
|
||||||
/**< If files should be sorted based on their weight. */
|
/**< If files should be sorted based on their weight. */
|
||||||
|
|
||||||
@ -357,12 +458,19 @@ struct isoburn_imgen_opts {
|
|||||||
int fifo_size;
|
int fifo_size;
|
||||||
|
|
||||||
|
|
||||||
/** Output value: Block address of session start as evaluatedfrom media
|
/** Output value: Block address of session start as evaluated from media
|
||||||
and other options by libisoburn and libburn.
|
and other options by libisoburn and libburn.
|
||||||
If <0 : Invalid
|
If <0 : Invalid
|
||||||
If >=0: Valid block number. Block size is always 2 KiB.
|
If >=0: Valid block number. Block size is always 2 KiB.
|
||||||
*/
|
*/
|
||||||
int effective_lba;
|
int effective_lba;
|
||||||
|
|
||||||
|
/** Output value: Block address of data section start as predicted by
|
||||||
|
libisofs.
|
||||||
|
If < 16: Invalid
|
||||||
|
If >=16: Valid block number. Block size is always 2 KiB.
|
||||||
|
*/
|
||||||
|
int data_start_lba;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/*
|
/*
|
||||||
libisofs related functions of libisoburn.
|
libisofs related functions of libisoburn.
|
||||||
|
|
||||||
Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -166,6 +166,8 @@ create_blank_image:;
|
|||||||
iso_image_ref(*image); /*protects object from premature free*/
|
iso_image_ref(*image); /*protects object from premature free*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
iso_image_set_ignore_aclea(*image,
|
||||||
|
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,6 +200,11 @@ create_blank_image:;
|
|||||||
/* Important: do not return until iso_read_opts_free() */
|
/* Important: do not return until iso_read_opts_free() */
|
||||||
iso_read_opts_set_start_block(ropts, ms_block);
|
iso_read_opts_set_start_block(ropts, ms_block);
|
||||||
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
|
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
|
||||||
|
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
|
||||||
|
iso_read_opts_set_no_md5(ropts, read_opts->nomd5);
|
||||||
|
|
||||||
|
iso_read_opts_set_new_inos(ropts, read_opts->noino);
|
||||||
|
|
||||||
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
|
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
|
||||||
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
|
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
|
||||||
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
|
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
|
||||||
@ -206,12 +213,12 @@ create_blank_image:;
|
|||||||
iso_read_opts_set_default_uid(ropts, read_opts->uid);
|
iso_read_opts_set_default_uid(ropts, read_opts->uid);
|
||||||
iso_read_opts_set_default_gid(ropts, read_opts->gid);
|
iso_read_opts_set_default_gid(ropts, read_opts->gid);
|
||||||
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
|
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
|
||||||
|
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
|
||||||
/* <<< experimental API call of libisofs
|
|
||||||
iso_read_opts_set_error_behavior(ropts, 1);
|
|
||||||
*/
|
|
||||||
|
|
||||||
ds = isoburn_data_source_new(d);
|
ds = isoburn_data_source_new(d);
|
||||||
|
if(o->iso_data_source!=NULL)
|
||||||
|
iso_data_source_unref(o->iso_data_source);
|
||||||
|
o->iso_data_source= ds;
|
||||||
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
||||||
isoburn_idle_free_function);
|
isoburn_idle_free_function);
|
||||||
if(o->read_pacifier_handle==NULL)
|
if(o->read_pacifier_handle==NULL)
|
||||||
@ -221,7 +228,7 @@ create_blank_image:;
|
|||||||
ret = iso_image_import(o->image, ds, ropts, &features);
|
ret = iso_image_import(o->image, ds, ropts, &features);
|
||||||
iso_tree_set_report_callback(o->image, NULL);
|
iso_tree_set_report_callback(o->image, NULL);
|
||||||
iso_read_opts_free(ropts);
|
iso_read_opts_free(ropts);
|
||||||
iso_data_source_unref(ds);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
||||||
return ret;
|
return ret;
|
||||||
@ -277,6 +284,8 @@ int isoburn_activate_session(struct burn_drive *drive)
|
|||||||
|
|
||||||
if (o->emulation_mode != 1)
|
if (o->emulation_mode != 1)
|
||||||
return 1; /* don't need to activate session */
|
return 1; /* don't need to activate session */
|
||||||
|
if (o->fabricated_msc2 >= 0)
|
||||||
|
return 1; /* blind growing: do not alter anything outside the session */
|
||||||
|
|
||||||
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
||||||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
API definition of libisoburn.
|
API definition of libisoburn.
|
||||||
|
|
||||||
Copyright 2007-2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
Copyright 2007-2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||||
and Thomas Schmitt <scdbackup@gmx.net>
|
and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -75,23 +75,35 @@ job parameters. It rather states its desires which libisoburn tries to
|
|||||||
fulfill, or else will refuse to start the write run.
|
fulfill, or else will refuse to start the write run.
|
||||||
|
|
||||||
|
|
||||||
Setup for Growing or Modifying
|
Setup for Growing, Modifying or Blind Growing
|
||||||
|
|
||||||
The connector function family offers two alternative API calls for performing
|
The connector function family offers alternative API calls for performing
|
||||||
the setup for two alternative image generation strategies.
|
the setup for several alternative image generation strategies.
|
||||||
|
|
||||||
Growing:
|
Growing:
|
||||||
If input and output drive is the same, then isoburn_prepare_disc() is to
|
If input and output drive are the same, then isoburn_prepare_disc() is to
|
||||||
be used. It will lead to an add-on session on appendable or overwriteable
|
be used. It will lead to an add-on session on appendable or overwriteable
|
||||||
media with existing ISO image. With blank media it will produce a first
|
media with existing ISO image. With blank media it will produce a first
|
||||||
session.
|
session.
|
||||||
|
|
||||||
Modifying:
|
Modifying:
|
||||||
If the output drive is not the input drive, then it has to bear blank media
|
If the output drive is not the input drive, and if it bears blank media
|
||||||
or overwriteable without a valid ISO image. To prepare for such an image
|
or overwriteable without a valid ISO image, then one may produce a consolidated
|
||||||
generation run, use isoburn_prepare_new_image(). The run will copy file data
|
image with old and new data. This will copy file data from an eventual input
|
||||||
from an eventual input drive with valid image, add any newly introduced data
|
drive with valid image, add any newly introduced data from the local
|
||||||
from the local filesystem, and produce a first session on output media.
|
filesystem, and produce a first session on output media.
|
||||||
|
To prepare for such an image generation run, use isoburn_prepare_new_image().
|
||||||
|
|
||||||
|
Blind Growing:
|
||||||
|
This method reads the old image from one drive and writes the add-on session
|
||||||
|
to a different drive. That output drive is nevertheless supposed to
|
||||||
|
finally lead to the same media from where the session was loaded. Usually it
|
||||||
|
will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program
|
||||||
|
like with this classic gesture:
|
||||||
|
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||||
|
Blind growing is prepared by the call isoburn_prepare_blind_grow().
|
||||||
|
The input drive should be released immediately after this call in order
|
||||||
|
to allow the consumer of the output stream to access that drive for writing.
|
||||||
|
|
||||||
After either of these setups, some peripheral libburn drive parameter settings
|
After either of these setups, some peripheral libburn drive parameter settings
|
||||||
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
||||||
@ -112,6 +124,22 @@ One should inquire isoburn_drive_wrote_well() to learn about overall success.
|
|||||||
Finally one must call isoburn_activate_session() which will complete any
|
Finally one must call isoburn_activate_session() which will complete any
|
||||||
eventual multi-session emulation.
|
eventual multi-session emulation.
|
||||||
|
|
||||||
|
|
||||||
|
Application Constraints
|
||||||
|
|
||||||
|
Applications shall include libisofs/libisofs.h , libburn/libburn.h and this
|
||||||
|
file itself: libisoburn/libisoburn.h .
|
||||||
|
They shall link with -lisofs -lburn -lisoburn or with the .o files emerging
|
||||||
|
from building those libraries from their sources.
|
||||||
|
|
||||||
|
Applications must use 64 bit off_t, e.g. on 32-bit Linux by defining
|
||||||
|
#define _LARGEFILE_SOURCE
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
or take special precautions to interface with the library by 64 bit integers
|
||||||
|
where above .h files prescribe off_t. Not to use 64 bit file i/o will keep
|
||||||
|
the application from producing and processing ISO images of more than 2 GB
|
||||||
|
size.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -188,15 +216,15 @@ void isoburn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define isoburn_libisofs_req_major 0
|
#define isoburn_libisofs_req_major 0
|
||||||
#define isoburn_libisofs_req_minor 6
|
#define isoburn_libisofs_req_minor 6
|
||||||
#define isoburn_libisofs_req_micro 6
|
#define isoburn_libisofs_req_micro 22
|
||||||
|
|
||||||
/** The minimum version of libburn to be used with this version of libisoburn
|
/** The minimum version of libburn to be used with this version of libisoburn
|
||||||
at compile time.
|
at compile time.
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
*/
|
*/
|
||||||
#define isoburn_libburn_req_major 0
|
#define isoburn_libburn_req_major 0
|
||||||
#define isoburn_libburn_req_minor 4
|
#define isoburn_libburn_req_minor 7
|
||||||
#define isoburn_libburn_req_micro 8
|
#define isoburn_libburn_req_micro 0
|
||||||
|
|
||||||
|
|
||||||
/** The minimum version of libisofs to be used with this version of libisoburn
|
/** The minimum version of libisofs to be used with this version of libisoburn
|
||||||
@ -231,8 +259,8 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
|
|||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
*/
|
*/
|
||||||
#define isoburn_header_version_major 0
|
#define isoburn_header_version_major 0
|
||||||
#define isoburn_header_version_minor 1
|
#define isoburn_header_version_minor 4
|
||||||
#define isoburn_header_version_micro 9
|
#define isoburn_header_version_micro 2
|
||||||
/** Note:
|
/** Note:
|
||||||
Above version numbers are also recorded in configure.ac because libtool
|
Above version numbers are also recorded in configure.ac because libtool
|
||||||
wants them as parameters at build time.
|
wants them as parameters at build time.
|
||||||
@ -324,7 +352,8 @@ int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
|
|||||||
(cdrom/burner). Thus use with driveno 0 only. On failure
|
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||||
the array has no valid elements at all.
|
the array has no valid elements at all.
|
||||||
The returned array should be freed via burn_drive_info_free()
|
The returned array should be freed via burn_drive_info_free()
|
||||||
when the drive is no longer needed.
|
when the drive is no longer needed. But before this is done
|
||||||
|
one has to call isoburn_drive_release(drive_infos[0].drive).
|
||||||
@param adr The persistent address of the desired drive.
|
@param adr The persistent address of the desired drive.
|
||||||
@param load 1 attempt to load the disc tray. 0 no attempt,rather failure.
|
@param load 1 attempt to load the disc tray. 0 no attempt,rather failure.
|
||||||
@return 1 = success , 0 = drive not found , <0 = other error
|
@return 1 = success , 0 = drive not found , <0 = other error
|
||||||
@ -341,7 +370,8 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
|||||||
(cdrom/burner). Thus use with driveno 0 only. On failure
|
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||||
the array has no valid elements at all.
|
the array has no valid elements at all.
|
||||||
The returned array should be freed via burn_drive_info_free()
|
The returned array should be freed via burn_drive_info_free()
|
||||||
when the drive is no longer needed.
|
when the drive is no longer needed. But before this is done
|
||||||
|
one has to call isoburn_drive_release(drive_infos[0].drive).
|
||||||
@param adr The persistent address of the desired drive.
|
@param adr The persistent address of the desired drive.
|
||||||
@param flag bit0= attempt to load the disc tray.
|
@param flag bit0= attempt to load the disc tray.
|
||||||
Else: failure if not loaded.
|
Else: failure if not loaded.
|
||||||
@ -352,6 +382,10 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
|||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
(depending on media type and drive this might
|
(depending on media type and drive this might
|
||||||
help or it might make the resulting toc even worse)
|
help or it might make the resulting toc even worse)
|
||||||
|
bit4= do not emulate table of content on overwriteable media
|
||||||
|
bit5= ignore ACL from external filesystems
|
||||||
|
bit6= ignore POSIX Extended Attributes from external
|
||||||
|
filesystems
|
||||||
@return 1 = success , 0 = drive not found , <0 = other error
|
@return 1 = success , 0 = drive not found , <0 = other error
|
||||||
*/
|
*/
|
||||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
@ -362,6 +396,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
|||||||
Wrapper for: burn_drive_grab()
|
Wrapper for: burn_drive_grab()
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param drive The drive to grab. E.g. drive_infos[1].drive .
|
@param drive The drive to grab. E.g. drive_infos[1].drive .
|
||||||
|
Call isoburn_drive_release(drive) when it it no longer needed.
|
||||||
@param load 1 attempt to load the disc tray. 0 no attempt, rather failure.
|
@param load 1 attempt to load the disc tray. 0 no attempt, rather failure.
|
||||||
@return 1 success, <=0 failure
|
@return 1 success, <=0 failure
|
||||||
*/
|
*/
|
||||||
@ -421,7 +456,7 @@ int isoburn_disc_erasable(struct burn_drive *d);
|
|||||||
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||||
|
|
||||||
|
|
||||||
/** Program isoburn_disc_get_msc1() to return a fabricated value.
|
/** Set up isoburn_disc_get_msc1() to return a fabricated value.
|
||||||
This makes only sense between aquiring the drive and reading the
|
This makes only sense between aquiring the drive and reading the
|
||||||
image. After isoburn_read_image() it will confuse the coordination
|
image. After isoburn_read_image() it will confuse the coordination
|
||||||
of libisoburn and libisofs.
|
of libisoburn and libisofs.
|
||||||
@ -437,8 +472,14 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
|||||||
3= adr_value itself is the lba to be used
|
3= adr_value itself is the lba to be used
|
||||||
4= start lba of last session with volume id
|
4= start lba of last session with volume id
|
||||||
given by adr_value
|
given by adr_value
|
||||||
@parm adr_value A string describing the value to be eventually used.
|
@param 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.
|
||||||
|
bit1= insist in seeing a disc object with at least one session
|
||||||
|
bit2= with adr_mode 4: use adr_value as regular expression
|
||||||
*/
|
*/
|
||||||
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
|
||||||
int flag);
|
int flag);
|
||||||
@ -486,7 +527,8 @@ struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
|
|||||||
|
|
||||||
|
|
||||||
/** Tell the number of 2048 byte blocks covered by the table of content.
|
/** Tell the number of 2048 byte blocks covered by the table of content.
|
||||||
Wrapper for: burn_disc_get_sectors()
|
This number includes the eventual gaps between sessions and tracks.
|
||||||
|
So this call is not really a wrapper for burn_disc_get_sectors().
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@param disc The master handle of the media
|
@param disc The master handle of the media
|
||||||
@return number of blocks, <=0 indicates unknown or unreadable state
|
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||||
@ -537,10 +579,10 @@ struct isoburn_toc_track **isoburn_toc_session_get_tracks(
|
|||||||
struct isoburn_toc_session *s, int *num);
|
struct isoburn_toc_session *s, int *num);
|
||||||
|
|
||||||
|
|
||||||
/** Obtain a copy of the entry which describes a particular itrack.
|
/** Obtain a copy of the entry which describes a particular track.
|
||||||
Wrapper for: burn_track_get_entry()
|
Wrapper for: burn_track_get_entry()
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@param s The track handle
|
@param t The track handle
|
||||||
@param entry A pointer to memory provided by the caller. It will be filled
|
@param entry A pointer to memory provided by the caller. It will be filled
|
||||||
with info according to struct burn_toc_entry as defined
|
with info according to struct burn_toc_entry as defined
|
||||||
in libburn.h
|
in libburn.h
|
||||||
@ -549,6 +591,23 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
|||||||
struct burn_toc_entry *entry);
|
struct burn_toc_entry *entry);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain eventual ISO image parameters of an emulated track. This info was
|
||||||
|
gained with much effort and thus gets cached in the track object.
|
||||||
|
If this call returns 1 then one can save a call of isoburn_read_iso_head()
|
||||||
|
with return mode 1 which could cause an expensive read operation.
|
||||||
|
@since 0.4.0
|
||||||
|
@param t The track handle
|
||||||
|
@param start_lba Returns the start address of the ISO session
|
||||||
|
@param image_blocks Returns the number of 2048 bytes blocks
|
||||||
|
@param volid Caller provided memory for the volume id
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return 0= not an emulated ISO session , 1= reply is valid
|
||||||
|
*/
|
||||||
|
int isoburn_toc_track_get_emul(struct isoburn_toc_track *t, int *start_lba,
|
||||||
|
int *image_blocks, char volid[33], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Release the memory associated with a master handle of media.
|
/** Release the memory associated with a master handle of media.
|
||||||
The handle is invalid afterwards and may not be used any more.
|
The handle is invalid afterwards and may not be used any more.
|
||||||
Wrapper for: burn_disc_free()
|
Wrapper for: burn_disc_free()
|
||||||
@ -558,7 +617,7 @@ void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
|||||||
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||||
|
|
||||||
|
|
||||||
/** Try whether at the data at the given address look like a ISO 9660
|
/** Try whether the data at the given address look like a ISO 9660
|
||||||
image header and obtain its alleged size. Depending on the info mode
|
image header and obtain its alleged size. Depending on the info mode
|
||||||
one other string of text information can be retrieved too.
|
one other string of text information can be retrieved too.
|
||||||
@since 0.1.6
|
@since 0.1.6
|
||||||
@ -567,14 +626,50 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
|||||||
@param image_blocks The number of 2048 bytes blocks
|
@param image_blocks The number of 2048 bytes blocks
|
||||||
@param info Caller provided memory, enough to take eventual info reply
|
@param info Caller provided memory, enough to take eventual info reply
|
||||||
@param flag bit0-7: info return mode
|
@param flag bit0-7: info return mode
|
||||||
0= do not return anything in info (do not even touch it)
|
0= do not return anything in info (do not even touch it)
|
||||||
1= return volume id (info needs 33 bytes)
|
1= copy volume id to info (info needs 33 bytes)
|
||||||
@return 1 seems to be a valid ISO image , 0 format not recognized, <0 error
|
2= @since 0.2.2 :
|
||||||
|
copy 64 kB header to info (needs 65536 bytes)
|
||||||
|
bit13= @since 0.2.2:
|
||||||
|
do not read head from media but use first 64 kB from info
|
||||||
|
bit14= check both half buffers (not only second)
|
||||||
|
return 2 if found in first block
|
||||||
|
bit15= return -1 on read error
|
||||||
|
@return >0 seems to be a valid ISO image, 0 format not recognized, <0 error
|
||||||
*/
|
*/
|
||||||
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||||
int *image_blocks, char *info, int flag);
|
int *image_blocks, char *info, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Try to convert the given entity address into various entity addresses
|
||||||
|
which would describe it.
|
||||||
|
Note: Sessions and tracks are counted beginning with 1, not with 0.
|
||||||
|
@since 0.3.2
|
||||||
|
@param drive The drive where msc1 is to be set
|
||||||
|
@param adr_mode Determines how to interpret the input adr_value.
|
||||||
|
If adr_value shall represent a number then decimal ASCII
|
||||||
|
digits are expected.
|
||||||
|
0= start lba of last session in TOC, ignore adr_value
|
||||||
|
1= start lba of session number given by adr_value
|
||||||
|
2= start lba of track given number by adr_value
|
||||||
|
3= adr_value itself is the lba to be used
|
||||||
|
4= start lba of last session with volume id
|
||||||
|
given by adr_value
|
||||||
|
@param adr_value A string describing the value to be eventually used.
|
||||||
|
@param lba returns the block address of the entity, -1 means invalid
|
||||||
|
@param track returns the track number of the entity, -1 means invalid
|
||||||
|
@param session returns the session number of the entity, -1 means invalid
|
||||||
|
@param volid returns the volume id of the entity if it is a ISO session
|
||||||
|
@param flag Bitfield for control purposes.
|
||||||
|
bit2= with adr_mode 4: use adr_value as regular expression
|
||||||
|
@return <=0 error , 1 ok, ISO session, 2 ok, not an ISO session
|
||||||
|
*/
|
||||||
|
int isoburn_get_mount_params(struct burn_drive *d,
|
||||||
|
int adr_mode, char *adr_value,
|
||||||
|
int *lba, int *track, int *session,
|
||||||
|
char volid[33], int flag);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -623,6 +718,30 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
|||||||
tree is used. If you prefer using Joliet, set this to 1.
|
tree is used. If you prefer using Joliet, set this to 1.
|
||||||
bit4= pretend_blank
|
bit4= pretend_blank
|
||||||
Always create empty image.Ignore any image on input drive.
|
Always create empty image.Ignore any image on input drive.
|
||||||
|
bit5= noaaip
|
||||||
|
@since 0.3.4
|
||||||
|
Do not load AAIP information from image. This information
|
||||||
|
eventually contains ACL or XFS-style Extended Attributes.
|
||||||
|
bit6= noacl
|
||||||
|
@since 0.3.4
|
||||||
|
Do not obtain ACL from external filesystem objects (e.g.
|
||||||
|
local filesystem files).
|
||||||
|
bit7= noea
|
||||||
|
@since 0.3.4
|
||||||
|
Do not obtain XFS-style Extended Attributes from external
|
||||||
|
filesystem objects (e.g. local filesystem files).
|
||||||
|
bit8= noino
|
||||||
|
@since 0.4.0
|
||||||
|
Do not load eventual inode numbers from RRIP entry PX,
|
||||||
|
but generate a new unique inode number for each imported
|
||||||
|
IsoNode object.
|
||||||
|
PX inode numbers allow to mark families of hardlinks by
|
||||||
|
giving all family members the same inode number. libisofs
|
||||||
|
keeps the PX inode numbers unaltered when IsoNode objects
|
||||||
|
get written into an ISO image.
|
||||||
|
bit9= nomd5
|
||||||
|
@since 0.4.2
|
||||||
|
Do not load the eventual MD5 checksum array.
|
||||||
@return 1 success, <=0 failure
|
@return 1 success, <=0 failure
|
||||||
*/
|
*/
|
||||||
#define isoburn_ropt_norock 1
|
#define isoburn_ropt_norock 1
|
||||||
@ -630,6 +749,12 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
|||||||
#define isoburn_ropt_noiso1999 4
|
#define isoburn_ropt_noiso1999 4
|
||||||
#define isoburn_ropt_preferjoliet 8
|
#define isoburn_ropt_preferjoliet 8
|
||||||
#define isoburn_ropt_pretend_blank 16
|
#define isoburn_ropt_pretend_blank 16
|
||||||
|
#define isoburn_ropt_noaaip 32
|
||||||
|
#define isoburn_ropt_noacl 64
|
||||||
|
#define isoburn_ropt_noea 128
|
||||||
|
#define isoburn_ropt_noino 256
|
||||||
|
#define isoburn_ropt_nomd5 512
|
||||||
|
|
||||||
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
|
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
|
||||||
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
|
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
|
||||||
|
|
||||||
@ -670,7 +795,7 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
|
|||||||
/** Set the character set for reading RR file names from ISO images.
|
/** Set the character set for reading RR file names from ISO images.
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param o The option set to work on
|
@param o The option set to work on
|
||||||
@param input_charset Set this to NULL to use the default locale charset.
|
@param input_charset Set this to NULL to use the default locale charset
|
||||||
For selecting a particular character set, submit its
|
For selecting a particular character set, submit its
|
||||||
name, e.g. as listed by program iconv -l.
|
name, e.g. as listed by program iconv -l.
|
||||||
Example: "UTF-8".
|
Example: "UTF-8".
|
||||||
@ -681,6 +806,20 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
|||||||
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||||
char **input_charset);
|
char **input_charset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enable or disable methods to automatically choose an input charset.
|
||||||
|
This eventually overrides the name set via isoburn_ropt_set_input_charset()
|
||||||
|
@since 0.3.8
|
||||||
|
|
||||||
|
@param mode Bitfield for control purposes:
|
||||||
|
bit0= allow to set the input character set automatically from
|
||||||
|
attribute "isofs.cs" of root directory.
|
||||||
|
Submit any other bits with value 0.
|
||||||
|
@return 1 success, <=0 failure
|
||||||
|
*/
|
||||||
|
int isoburn_ropt_set_auto_incharset(struct isoburn_read_opts *o, int mode);
|
||||||
|
int isoburn_ropt_get_auto_incharset(struct isoburn_read_opts *o, int *mode);
|
||||||
|
|
||||||
|
|
||||||
/** After calling function isoburn_read_image() there are informations
|
/** After calling function isoburn_read_image() there are informations
|
||||||
available in the option set.
|
available in the option set.
|
||||||
@ -705,6 +844,13 @@ int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
|||||||
#define isoburn_ropt_has_joliet 2
|
#define isoburn_ropt_has_joliet 2
|
||||||
#define isoburn_ropt_has_iso1999 4
|
#define isoburn_ropt_has_iso1999 4
|
||||||
#define isoburn_ropt_has_el_torito 8
|
#define isoburn_ropt_has_el_torito 8
|
||||||
|
|
||||||
|
/* ts A90122 */
|
||||||
|
/* >>> to be implemented:
|
||||||
|
#define isoburn_ropt_has_acl 64
|
||||||
|
#define isoburn_ropt_has_ea 128
|
||||||
|
*/
|
||||||
|
|
||||||
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||||
uint32_t *size, int *has_what);
|
uint32_t *size, int *has_what);
|
||||||
|
|
||||||
@ -772,11 +918,38 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
|
|||||||
Weaker than RockRidge, but also readable with Linux.
|
Weaker than RockRidge, but also readable with Linux.
|
||||||
bit2= iso1999
|
bit2= iso1999
|
||||||
This is rather exotic. Better do not surprise the readers.
|
This is rather exotic. Better do not surprise the readers.
|
||||||
|
bit3= hardlinks
|
||||||
|
Enable hardlink consolidation. IsoNodes which refer to the
|
||||||
|
same source object and have the same properties will get
|
||||||
|
the same ISO image inode numbers.
|
||||||
|
If combined with isoburn_igopt_rrip_version_1_10 below,
|
||||||
|
then the PX entry layout of RRIP-1.12 will be used within
|
||||||
|
RRIP-1.10 (mkisofs does this without causing visible trouble).
|
||||||
|
bit5= aaip
|
||||||
|
The libisofs specific SUSP based extension of ECMA-119 which
|
||||||
|
can encode ACL and XFS-style Extended Attributes.
|
||||||
|
bit6= session_md5
|
||||||
|
@since 0.4.2
|
||||||
|
Produce and write a MD5 checksum of the whole session stream.
|
||||||
|
bit7= file_md5
|
||||||
|
@since 0.4.2
|
||||||
|
Produce and write MD5 checksums for each single IsoFile.
|
||||||
|
bit8= file_stability (only together with file_md5)
|
||||||
|
@since 0.4.2
|
||||||
|
Compute MD5 of each file before copying it into the image and
|
||||||
|
compare this with the MD5 of the actual copying. If they do
|
||||||
|
not match then issue MISHAP event.
|
||||||
|
See also libisofs.h iso_write_opts_set_record_md5()
|
||||||
@return 1 success, <=0 failure
|
@return 1 success, <=0 failure
|
||||||
*/
|
*/
|
||||||
#define isoburn_igopt_rockridge 1
|
#define isoburn_igopt_rockridge 1
|
||||||
#define isoburn_igopt_joliet 2
|
#define isoburn_igopt_joliet 2
|
||||||
#define isoburn_igopt_iso1999 4
|
#define isoburn_igopt_iso1999 4
|
||||||
|
#define isoburn_igopt_hardlinks 8
|
||||||
|
#define isoburn_igopt_aaip 32
|
||||||
|
#define isoburn_igopt_session_md5 64
|
||||||
|
#define isoburn_igopt_file_md5 128
|
||||||
|
#define isoburn_igopt_file_stability 256
|
||||||
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
|
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
|
||||||
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||||
|
|
||||||
@ -817,6 +990,27 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
|||||||
bit7= joliet_longer_paths
|
bit7= joliet_longer_paths
|
||||||
Allow paths in the Joliet tree to have more than
|
Allow paths in the Joliet tree to have more than
|
||||||
240 characters.
|
240 characters.
|
||||||
|
bit8= always_gmt
|
||||||
|
Write timestamps as GMT although the specs prescribe local
|
||||||
|
time with eventual non-zero timezone offset. Negative
|
||||||
|
timezones (west of GMT) can trigger bugs in some operating
|
||||||
|
systems which typically appear in mounted ISO images as if
|
||||||
|
the timezone shift from GMT was applied twice
|
||||||
|
(e.g. in New York 22:36 becomes 17:36).
|
||||||
|
bit9= rrip_version_1_10
|
||||||
|
Write Rock Ridge info as of specification RRIP-1.10 rather
|
||||||
|
than RRIP-1.12: signature "RRIP_1991A" rather than
|
||||||
|
"IEEE_1282", field PX without file serial number.
|
||||||
|
bit10= dir_rec_mtime
|
||||||
|
Store as ECMA-119 Directory Record timestamp the mtime
|
||||||
|
of the source rather than the image creation time.
|
||||||
|
bit11= aaip_susp_1_10
|
||||||
|
Write AAIP fields without announcing AAIP by an ER field and
|
||||||
|
without distinguishing RRIP fields from the AAIP field by
|
||||||
|
prefixed ES fields. This saves 5 to 10 bytes per file and
|
||||||
|
might avoid problems with readers which only accept RRIP.
|
||||||
|
SUSP-1.10 allows it, SUSP-1.12 frowns on it.
|
||||||
|
|
||||||
@return 1 success, <=0 failure
|
@return 1 success, <=0 failure
|
||||||
*/
|
*/
|
||||||
#define isoburn_igopt_omit_version_numbers 1
|
#define isoburn_igopt_omit_version_numbers 1
|
||||||
@ -827,6 +1021,10 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
|||||||
#define isoburn_igopt_allow_lowercase 32
|
#define isoburn_igopt_allow_lowercase 32
|
||||||
#define isoburn_igopt_allow_full_ascii 64
|
#define isoburn_igopt_allow_full_ascii 64
|
||||||
#define isoburn_igopt_joliet_longer_paths 128
|
#define isoburn_igopt_joliet_longer_paths 128
|
||||||
|
#define isoburn_igopt_always_gmt 256
|
||||||
|
#define isoburn_igopt_rrip_version_1_10 512
|
||||||
|
#define isoburn_igopt_dir_rec_mtime 1024
|
||||||
|
#define isoburn_igopt_aaip_susp_1_10 2048
|
||||||
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
|
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
|
||||||
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
|
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
|
||||||
|
|
||||||
@ -929,6 +1127,21 @@ int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
|
|||||||
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba);
|
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain after image preparation the lowest block address of file content
|
||||||
|
data. Failure can occur if libisofs is too old to provide this information,
|
||||||
|
if the result exceeds 31 bit, or if the call is made before image
|
||||||
|
preparation.
|
||||||
|
This value cannot be set by the application but only be inquired.
|
||||||
|
@since 0.3.6
|
||||||
|
@param o The option set to work on
|
||||||
|
@param lba The block number of the session start on media.
|
||||||
|
<0 means that no address has been determined yet.
|
||||||
|
@return 1 success, <=0 failure
|
||||||
|
*/
|
||||||
|
int isoburn_igopt_get_data_start(struct isoburn_imgen_opts *o, int *lba);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/* End of Options for image generation */
|
/* End of Options for image generation */
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
@ -1028,9 +1241,13 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
|
|||||||
|
|
||||||
|
|
||||||
/** Obtain the start block number of the most recent session on media. In
|
/** Obtain the start block number of the most recent session on media. In
|
||||||
case of random access media this will always be 0. Succesfull return is
|
case of random access media this will normally be 0. Successfull return is
|
||||||
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
||||||
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE.
|
nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE
|
||||||
|
or BURN_DISC_FULL.
|
||||||
|
Note: The result of this call may be fabricated by a previous call of
|
||||||
|
isoburn_set_msc1() which can override the rule to load the most recent
|
||||||
|
session.
|
||||||
Wrapper for: burn_disc_get_msc1()
|
Wrapper for: burn_disc_get_msc1()
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param d The drive to inquire
|
@param d The drive to inquire
|
||||||
@ -1068,7 +1285,8 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
|
|||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Create a disc object for writing the new session from the created or loaded
|
/** To choose the expansion method of Growing:
|
||||||
|
Create a disc object for writing the new session from the created or loaded
|
||||||
iso_volset which has been manipulated via libisofs, to the same media from
|
iso_volset which has been manipulated via libisofs, to the same media from
|
||||||
where the image was eventually loaded. This struct burn_disc is ready for
|
where the image was eventually loaded. This struct burn_disc is ready for
|
||||||
use by a subsequent call to isoburn_disc_write().
|
use by a subsequent call to isoburn_disc_write().
|
||||||
@ -1085,9 +1303,10 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
|||||||
struct isoburn_imgen_opts *opts);
|
struct isoburn_imgen_opts *opts);
|
||||||
|
|
||||||
|
|
||||||
/** Create a disc object for producing a new image from a previous image
|
/** To choose the expansion method of Modifying:
|
||||||
|
Create a disc object for producing a new image from a previous image
|
||||||
plus the changes made by user. The generated burn_disc is suitable
|
plus the changes made by user. The generated burn_disc is suitable
|
||||||
to be written to any grabbed libburn drive with blank writeable media.
|
to be written to a grabbed drive with blank writeable media.
|
||||||
But you must not use the same drive for input and output, because data
|
But you must not use the same drive for input and output, because data
|
||||||
will be read from the source drive while at the same time the target
|
will be read from the source drive while at the same time the target
|
||||||
drive is already writing.
|
drive is already writing.
|
||||||
@ -1095,15 +1314,11 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
|||||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||||
burn_disc_write().
|
burn_disc_write().
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
@param in_drive The input drive, grabbed with isoburn_drive_aquire() or
|
||||||
|
one of its alternatives.
|
||||||
@param disc Returns the newly created burn_disc object.
|
@param disc Returns the newly created burn_disc object.
|
||||||
@param opts Options for image generation and data transport to media.
|
@param opts Options for image generation and data transport to media.
|
||||||
@param out_drive The libburn drive which shall be write target.
|
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||||
If the drive was grabbed via libisoburn then it can later
|
|
||||||
access the libisofs source fifo via
|
|
||||||
isoburn_get_fifo_status().
|
|
||||||
Mere libburn drives cannot obtain this info.
|
|
||||||
In that case out_drive may be NULL, as well.
|
|
||||||
@return <=0 error , 1 = success
|
@return <=0 error , 1 = success
|
||||||
*/
|
*/
|
||||||
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||||
@ -1111,11 +1326,55 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
|||||||
struct isoburn_imgen_opts *opts,
|
struct isoburn_imgen_opts *opts,
|
||||||
struct burn_drive *out_drive);
|
struct burn_drive *out_drive);
|
||||||
|
|
||||||
/** @since 0.1.0
|
|
||||||
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
|
/** To choose the expansion method of Blind Growing:
|
||||||
running isoburn_disc_write().
|
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_*() instead of running isoburn_disc_write().
|
||||||
libisofs reserves resources and maybe already starts generating the
|
libisofs reserves resources and maybe already starts generating the
|
||||||
image stream when one of above two calls is performed. It is mandatory to
|
image stream when one of above three calls is performed. It is mandatory to
|
||||||
either run isoburn_disc_write() or to revoke the preparations by the
|
either run isoburn_disc_write() or to revoke the preparations by the
|
||||||
call described here.
|
call described here.
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@ -1154,7 +1413,7 @@ void isoburn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
|
|||||||
Hint: If only burn_write_opts and not burn_drive is known, then the drive
|
Hint: If only burn_write_opts and not burn_drive is known, then the drive
|
||||||
can be obtained by burn_write_opts_get_drive().
|
can be obtained by burn_write_opts_get_drive().
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
@parm d The drive to which the track with the fifo gets burned.
|
@param d The drive to which the track with the fifo gets burned.
|
||||||
@param size The total size of the fifo
|
@param size The total size of the fifo
|
||||||
@param free_bytes The current free capacity of the fifo
|
@param free_bytes The current free capacity of the fifo
|
||||||
@param status_text Returns a pointer to a constant text, see below
|
@param status_text Returns a pointer to a constant text, see below
|
||||||
@ -1193,8 +1452,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
|
|||||||
int isoburn_activate_session(struct burn_drive *drive);
|
int isoburn_activate_session(struct burn_drive *drive);
|
||||||
|
|
||||||
|
|
||||||
/** @since 0.1.0
|
/** Wait after normal end of operations until libisofs ended all write
|
||||||
Wait after normal end of operations until libisofs ended all write
|
|
||||||
threads and freed resource reservations.
|
threads and freed resource reservations.
|
||||||
This call is not mandatory. But without it, messages from the ending
|
This call is not mandatory. But without it, messages from the ending
|
||||||
threads might appear after the application ended its write procedure.
|
threads might appear after the application ended its write procedure.
|
||||||
@ -1210,21 +1468,6 @@ int isoburn_sync_after_write(struct burn_drive *input_drive,
|
|||||||
struct burn_drive *output_drive, int flag);
|
struct burn_drive *output_drive, int flag);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* >>> NOT YET IMPLEMENTED <<< */
|
|
||||||
/** Write a new session to a disc.
|
|
||||||
This is a synchronous call equivalent to isoburn_prepare_disc +
|
|
||||||
isoburn_disc_write + isoburn_activate_session
|
|
||||||
@param pacifier_func If not NULL: a function to produce appeasing messages.
|
|
||||||
See burn_abort_pacifier() in libburn.h for an example.
|
|
||||||
*/
|
|
||||||
/* TODO implement this */
|
|
||||||
int isoburn_perform_write(struct burn_write_opts *o,
|
|
||||||
int (*pacifier_func)(void *handle, int patience,
|
|
||||||
int elapsed));
|
|
||||||
#endif /* 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/** Release an aquired drive.
|
/** Release an aquired drive.
|
||||||
Wrapper for: burn_drive_release()
|
Wrapper for: burn_drive_release()
|
||||||
@since 0.1.0
|
@since 0.1.0
|
||||||
|
@ -117,7 +117,9 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
/* Attributes */
|
/* Attributes */
|
||||||
if(s1.st_mode != s2.st_mode) {
|
if(s1.st_mode != s2.st_mode) {
|
||||||
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
|
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
|
||||||
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
|
printf("%s : st_mode : %7.7o <> %7.7o\n", a,
|
||||||
|
(unsigned int) (s1.st_mode & ~S_IFMT),
|
||||||
|
(unsigned int) (s2.st_mode & ~S_IFMT));
|
||||||
if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
|
if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT))
|
||||||
printf("%s : type : %s <> %s\n",
|
printf("%s : type : %s <> %s\n",
|
||||||
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
|
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
|
||||||
|
143
xorriso/README
143
xorriso/README
@ -4,23 +4,27 @@
|
|||||||
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/xorriso_eng.html
|
http://scdbackup.sourceforge.net/xorriso_eng.html
|
||||||
http://scdbackup.sourceforge.net/xorriso-0.1.9.tar.gz
|
http://scdbackup.sourceforge.net/xorriso-0.4.2.pl01.tar.gz
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
xorriso is a program which maps file objects from POSIX compliant
|
xorriso is a program which copies file objects from POSIX compliant
|
||||||
filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
Currently it is only supported on Linux with kernels >= 2.4.
|
|
||||||
|
|
||||||
A special property of xorriso is that it needs neither an external ISO 9660
|
A special property of xorriso is that it needs neither an external ISO 9660
|
||||||
formatter program nor an external burn program for CD or DVD but rather
|
formatter program nor an external burn program for CD or DVD but rather
|
||||||
incorporates the libraries of libburnia-project.org .
|
incorporates the libraries of libburnia-project.org .
|
||||||
|
|
||||||
|
Currently it is fully supported on Linux with kernels >= 2.4 and on
|
||||||
|
FreeBSD versions with ATAPI/CAM support enabled in the kernel, see atapicam(4).
|
||||||
|
On other X/Open compliant systems there will only be POSIX i/o with disk
|
||||||
|
file objects, but no direct MMC operation on CD/DVD/BD drives.
|
||||||
|
|
||||||
By using this software you agree to the disclaimer at the end of this text:
|
By using this software you agree to the disclaimer at the end of this text:
|
||||||
"... without even the implied warranty ..."
|
"... without even the implied warranty ..."
|
||||||
|
|
||||||
@ -31,14 +35,21 @@ The most simple way to get xorriso from source code is the xorriso standalone
|
|||||||
tarball.
|
tarball.
|
||||||
|
|
||||||
Prerequisites:
|
Prerequisites:
|
||||||
The tarball contains anything that is needed except libc and libpthread.
|
The tarball contains anything that is needed except the following system
|
||||||
libreadline and the readline-dev headers will make dialog mode more convenient,
|
components:
|
||||||
but are not mandatory.
|
libc, libpthread
|
||||||
|
plus on FreeBSD: libiconv, libcam
|
||||||
|
Optional at compile time are:
|
||||||
|
libreadline and the readline-dev headers make dialog mode more convenient.
|
||||||
|
on Linux: libacl and libacl-devel allow getting and setting ACLs.
|
||||||
|
zlib and zlib-devel allow zisofs compression.
|
||||||
|
If they were present at compile time, then the optional libraries have to
|
||||||
|
be present at runtime, too.
|
||||||
|
|
||||||
Obtain xorriso-0.1.9.tar.gz, take it to a directory of your choice and do:
|
Obtain xorriso-0.4.2.pl01.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf xorriso-0.1.9.tar.gz
|
tar xzf xorriso-0.4.2.pl01.tar.gz
|
||||||
cd xorriso-0.1.9
|
cd xorriso-0.4.2
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -52,8 +63,8 @@ which you may strip to reduce it in size
|
|||||||
strip ./xorriso/xorriso
|
strip ./xorriso/xorriso
|
||||||
|
|
||||||
You may copy or move it to a directory where it can be found by the shell,
|
You may copy or move it to a directory where it can be found by the shell,
|
||||||
you may execute xorriso at the place where it was built, or you may execute
|
or you may execute xorriso at the place where it was built,
|
||||||
as superuser:
|
or you may execute as superuser:
|
||||||
make install
|
make install
|
||||||
|
|
||||||
For general concepts, options and usage examples see
|
For general concepts, options and usage examples see
|
||||||
@ -68,10 +79,37 @@ It gets installed with "make install" but may also be placed manually in the
|
|||||||
./man1 directory below one of the directories mentioned in environment
|
./man1 directory below one of the directories mentioned in environment
|
||||||
variable $MANPATH.
|
variable $MANPATH.
|
||||||
|
|
||||||
|
The installation creates several alias links pointing to the xorriso binary:
|
||||||
|
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||||
|
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||||
|
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||||
|
|
||||||
|
If you want to avoid dependecy on libreadline although the libreadline
|
||||||
|
development package is installed, then rather build xorriso by:
|
||||||
|
./configure --prefix=/usr --disable-libreadline
|
||||||
|
make clean ; make
|
||||||
|
Never omit the "make clean" command after switching libreadline enabling.
|
||||||
|
Other deliberate dependency reduction options of ./configure are:
|
||||||
|
--disable-libacl avoid use of ACL functions like acl_to_text()
|
||||||
|
--disable-xattr avoid use of xattr functions like listxattr()
|
||||||
|
--disable-zlib avoid use of zlib functions like compress2()
|
||||||
|
|
||||||
|
xorriso allows to use external processes as file content filters. This is
|
||||||
|
a potential security risk which may be avoided by ./configure option
|
||||||
|
--disable-external-filters
|
||||||
|
|
||||||
|
By default the filter feature is disabled if effective user id and real
|
||||||
|
user id differ. This ban can be lifted by
|
||||||
|
--enable-external-filters-setuid
|
||||||
|
|
||||||
|
If you want xorriso to report a "Build timestamp" with its option -version:
|
||||||
|
make buildstamped
|
||||||
|
|
||||||
|
|
||||||
Drives and Disk File Objects
|
Drives and Disk File Objects
|
||||||
|
|
||||||
The user of xorriso needs rw-permission for the CD burner device.
|
The user of libisoburn applications needs rw-permission for the CD/DVD/BD
|
||||||
|
drives which shall be used, even if only reading is intended.
|
||||||
A list of rw-accessible drives can be obtained by
|
A list of rw-accessible drives can be obtained by
|
||||||
|
|
||||||
xorriso -devices
|
xorriso -devices
|
||||||
@ -107,9 +145,14 @@ Better try to unmount an eventually mounted media before a write run.
|
|||||||
|
|
||||||
|
|
||||||
Besides true optical drives, xorriso can also address disk files as input or
|
Besides true optical drives, xorriso can also address disk files as input or
|
||||||
output drives. The addresses of the disk files have to be preceded by "stdio:".
|
output drives. By default paths to files under /dev are accepted only if the
|
||||||
|
device represents a real optical drive. Other device files may be addressed
|
||||||
|
by prepending "stdio:" to the path.
|
||||||
Like:
|
Like:
|
||||||
xorriso -dev stdio:/tmp/pseudo_drive ...more arguments...
|
xorriso -dev stdio:/dev/sdb ...more arguments...
|
||||||
|
This rule may be changed by xorriso option -drive_class.
|
||||||
|
Prefix "mmc:" causes a path to be accepted only if it is a real optical drive
|
||||||
|
which is accessible by generic SCSI/MMC commands.
|
||||||
|
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
@ -141,6 +184,66 @@ and vice versa:
|
|||||||
| less
|
| less
|
||||||
|
|
||||||
|
|
||||||
|
File Formats
|
||||||
|
|
||||||
|
Sector Maps
|
||||||
|
|
||||||
|
Sector maps describe the valid and invalid blocks on a media or a disk copy of
|
||||||
|
a media. xorriso creates and reads these file with its option -check_media.
|
||||||
|
|
||||||
|
The file begins with 32 bytes of cleartext of which the last one is a
|
||||||
|
newline character. The first 25 say "xorriso sector bitmap v2 ", the
|
||||||
|
remaining six characters give the size of the info text as decimal number.
|
||||||
|
This number of bytes follows the first 32 and will not be interpreted
|
||||||
|
by xorriso. They are rather to inform a human reader about the media type
|
||||||
|
and its track layout.
|
||||||
|
After the info text there are two 4 byte signed integers, most significant
|
||||||
|
byte first. The first one, N, gives the number of bits in the following bitmap
|
||||||
|
and the second number S gives the number of 2 KiB blocks governed by a single
|
||||||
|
bit in the map. Then come the bits in form of 8-bit bytes.
|
||||||
|
Data block M is covered by bit B=M/S in the map, bit number B is stored in
|
||||||
|
byte B/8 as bit B%8. A valid readable data block has its bit set to 1.
|
||||||
|
|
||||||
|
Checksum Tags
|
||||||
|
|
||||||
|
Checksum tags are data blocks inside an ISO 9660 image which do not belong to
|
||||||
|
any file but rather tell the MD5 of a certain range of data blocks.
|
||||||
|
|
||||||
|
The superblock checksum tag is written after the ECMA-119 volume descriptors.
|
||||||
|
The tree checksum tag is written after the ECMA-119 directory entries.
|
||||||
|
The session checksum tag is written after all payload including the checksum
|
||||||
|
array. (Then follows eventual padding.)
|
||||||
|
|
||||||
|
The tags are single lines of printable text, padded by 0 bytes. They have
|
||||||
|
the following format:
|
||||||
|
|
||||||
|
Tag_id pos=# range_start=# range_size=# [session_start|next=#] md5=# self=#\n
|
||||||
|
|
||||||
|
Parameters md5= and self= are 32 digit hex, the others are decimal numbers.
|
||||||
|
|
||||||
|
Tag_id distinguishes the following tag types
|
||||||
|
"libisofs_rlsb32_checksum_tag_v1" Relocated 64 kB superblock tag
|
||||||
|
"libisofs_sb_checksum_tag_v1" Superblock tag
|
||||||
|
"libisofs_tree_checksum_tag_v1" Directory tree tag
|
||||||
|
"libisofs_checksum_tag_v1" Session tag
|
||||||
|
|
||||||
|
A relocated superblock may appear at LBA 0 of an image which was produced for
|
||||||
|
being stored in a disk file or on overwriteable media (e.g. DVD+R, BD-RE).
|
||||||
|
xorriso records a first session recorded with its superblock at LBA 32 and
|
||||||
|
the may follow at the next block address after the session tag which is
|
||||||
|
divisible by 32. Normally no session starts after the address given by
|
||||||
|
relocated superblock parameter session_start=.
|
||||||
|
Session oriented media like CD-R[W], DVD+R, BD-R will have no relocated
|
||||||
|
superblock but rather bear a table-of-content on media level.
|
||||||
|
|
||||||
|
A tag is valid if pos= tells its own block address and self= tells its own MD5
|
||||||
|
up to the last hex digit of md5=. range_start= tells the first block that is
|
||||||
|
covered by md5=, range_size= tells the number of blocks covered by md5=.
|
||||||
|
Relocated superblocks tell the block address of their session by session_start=.
|
||||||
|
Superblock and tree tag tell the block address of the next tag by next=.
|
||||||
|
The newline character at the end is mandatory.
|
||||||
|
|
||||||
|
|
||||||
libisoburn
|
libisoburn
|
||||||
|
|
||||||
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
||||||
@ -160,9 +263,9 @@ and a matching dynamically linked xorriso binary.
|
|||||||
This binary is leaner but depends on properly installed libraries of suitable
|
This binary is leaner but depends on properly installed libraries of suitable
|
||||||
revision.
|
revision.
|
||||||
|
|
||||||
Dynamic library and compile time header requirements for libisoburn-0.1.9 :
|
Dynamic library and compile time header requirements for libisoburn-0.4.0 :
|
||||||
- libburn.so.4 , version libburn-0.4.8 or higher
|
- libburn.so.4 , version libburn-0.7.0 or higher
|
||||||
- libisofs.so.6 , version libisofs-0.6.6 or higher
|
- libisofs.so.6 , version libisofs-0.6.22 or higher
|
||||||
libisoburn and xorriso will not start with libraries which are older than their
|
libisoburn and xorriso will not start with libraries which are older than their
|
||||||
headers seen at compile time. So compile in the oldest possible installation
|
headers seen at compile time. So compile in the oldest possible installation
|
||||||
setup unless you have reason to enforce a newer bug fix level.
|
setup unless you have reason to enforce a newer bug fix level.
|
||||||
@ -191,7 +294,7 @@ libburnia-project.org
|
|||||||
By Mario Danic <mario.danic@gmail.com>,
|
By Mario Danic <mario.danic@gmail.com>,
|
||||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||||
Thomas Schmitt <scdbackup@gmx.net>
|
Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt.
|
||||||
|
|
||||||
libburnia-project.org is inspired by and in other components still containing
|
libburnia-project.org is inspired by and in other components still containing
|
||||||
parts of old
|
parts of old
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,27 +1,31 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# compile_xorriso.sh
|
# compile_xorriso.sh
|
||||||
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
# Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
|
||||||
#
|
#
|
||||||
# Not intended for general use in production installations !
|
# Not intended for general use in production installations !
|
||||||
# Rather use: ./bootstrap ; ./configure ; make
|
# Rather use: ./bootstrap ; ./configure ; make
|
||||||
#
|
#
|
||||||
# This is a development tool which expects a special setup of directories.
|
# This is a development tool which expects a special setup of directories
|
||||||
|
# on a Linux system (e.g. SuSE 10.2).
|
||||||
# It is to be executed in a common parent of the directories given with
|
# It is to be executed in a common parent of the directories given with
|
||||||
# $isofs $isoburn $burn $xorr
|
# $isofs $isoburn $burn $xorr
|
||||||
|
|
||||||
isofs=./nglibisofs-develop/libisofs
|
isofs=./nglibisofs-develop/libisofs/libisofs_libisofs_la-
|
||||||
|
isofs_filter=./nglibisofs-develop/libisofs/filters/libisofs_libisofs_la-
|
||||||
burn=./libburn-develop/libburn
|
burn=./libburn-develop/libburn
|
||||||
isoburn=./libisoburn-develop/libisoburn
|
isoburn=./libisoburn-develop/libisoburn
|
||||||
xorr=./libisoburn-develop/xorriso
|
xorr=./libisoburn-develop/xorriso
|
||||||
|
|
||||||
debug_opts="-O2"
|
debug_opts="-O2"
|
||||||
def_opts=
|
def_opts="-DXorriso_allow_external_filterS"
|
||||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||||
do_strip=0
|
do_strip=0
|
||||||
static_opts=
|
static_opts=
|
||||||
warn_opts="-Wall"
|
warn_opts="-Wall"
|
||||||
nglibisofs=1
|
nglibisofs=1
|
||||||
|
def_libreadline="-DXorriso_with_readlinE"
|
||||||
|
link_libreadline="-lreadline"
|
||||||
|
|
||||||
for i in "$@"
|
for i in "$@"
|
||||||
do
|
do
|
||||||
@ -35,11 +39,16 @@ do
|
|||||||
elif test "$i" = "-g"
|
elif test "$i" = "-g"
|
||||||
then
|
then
|
||||||
debug_opts="-g -O0"
|
debug_opts="-g -O0"
|
||||||
|
elif test "$i" = "-no_libreadline"
|
||||||
|
then
|
||||||
|
def_libreadline=""
|
||||||
|
link_libreadline=""
|
||||||
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
|
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
|
||||||
then
|
then
|
||||||
echo \
|
echo \
|
||||||
"$xorr/compile_xorriso.sh : to be executed above top level directories"
|
"$xorr/compile_xorriso.sh : to be executed above top level directories"
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
|
echo " -no_libreadline do not compile for and link with libreadline."
|
||||||
echo " -do_diet produce capability reduced lean version."
|
echo " -do_diet produce capability reduced lean version."
|
||||||
echo " -do_strip apply program strip to compiled programs."
|
echo " -do_strip apply program strip to compiled programs."
|
||||||
echo " -g produce debuggable programm."
|
echo " -g produce debuggable programm."
|
||||||
@ -52,44 +61,51 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
libisofs=
|
libisofs=
|
||||||
libisofs="$libisofs $isofs"/buffer.o
|
libisofs="$libisofs $isofs"buffer.o
|
||||||
libisofs="$libisofs $isofs"/builder.o
|
libisofs="$libisofs $isofs"builder.o
|
||||||
libisofs="$libisofs $isofs"/data_source.o
|
libisofs="$libisofs $isofs"data_source.o
|
||||||
libisofs="$libisofs $isofs"/ecma119.o
|
libisofs="$libisofs $isofs"ecma119.o
|
||||||
libisofs="$libisofs $isofs"/ecma119_tree.o
|
libisofs="$libisofs $isofs"ecma119_tree.o
|
||||||
libisofs="$libisofs $isofs"/eltorito.o
|
libisofs="$libisofs $isofs"eltorito.o
|
||||||
libisofs="$libisofs $isofs"/filesrc.o
|
libisofs="$libisofs $isofs"filesrc.o
|
||||||
libisofs="$libisofs $isofs"/fs_image.o
|
libisofs="$libisofs $isofs"fs_image.o
|
||||||
libisofs="$libisofs $isofs"/fs_local.o
|
libisofs="$libisofs $isofs"fs_local.o
|
||||||
libisofs="$libisofs $isofs"/fsource.o
|
libisofs="$libisofs $isofs"fsource.o
|
||||||
libisofs="$libisofs $isofs"/image.o
|
libisofs="$libisofs $isofs"image.o
|
||||||
libisofs="$libisofs $isofs"/iso1999.o
|
libisofs="$libisofs $isofs"iso1999.o
|
||||||
libisofs="$libisofs $isofs"/joliet.o
|
libisofs="$libisofs $isofs"joliet.o
|
||||||
libisofs="$libisofs $isofs"/libiso_msgs.o
|
libisofs="$libisofs $isofs"libiso_msgs.o
|
||||||
libisofs="$libisofs $isofs"/messages.o
|
libisofs="$libisofs $isofs"messages.o
|
||||||
libisofs="$libisofs $isofs"/node.o
|
libisofs="$libisofs $isofs"node.o
|
||||||
libisofs="$libisofs $isofs"/rockridge.o
|
libisofs="$libisofs $isofs"rockridge.o
|
||||||
libisofs="$libisofs $isofs"/rockridge_read.o
|
libisofs="$libisofs $isofs"rockridge_read.o
|
||||||
libisofs="$libisofs $isofs"/stream.o
|
libisofs="$libisofs $isofs"stream.o
|
||||||
libisofs="$libisofs $isofs"/tree.o
|
libisofs="$libisofs $isofs"tree.o
|
||||||
libisofs="$libisofs $isofs"/util.o
|
libisofs="$libisofs $isofs"util.o
|
||||||
libisofs="$libisofs $isofs"/util_htable.o
|
libisofs="$libisofs $isofs"util_htable.o
|
||||||
libisofs="$libisofs $isofs"/util_rbtree.o
|
libisofs="$libisofs $isofs"util_rbtree.o
|
||||||
|
libisofs="$libisofs $isofs"system_area.o
|
||||||
|
libisofs="$libisofs $isofs"make_isohybrid_mbr.o
|
||||||
|
libisofs="$libisofs $isofs"aaip_0_2.o
|
||||||
|
libisofs="$libisofs $isofs"filter.o
|
||||||
|
libisofs="$libisofs $isofs_filter"external.o
|
||||||
|
libisofs="$libisofs $isofs_filter"zisofs.o
|
||||||
|
libisofs="$libisofs $isofs_filter"gzip.o
|
||||||
|
libisofs="$libisofs $isofs"md5.o
|
||||||
|
|
||||||
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
|
|
||||||
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
|
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
|
||||||
echo "Build timestamp : $timestamp"
|
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_buildstamp.h
|
||||||
|
echo "Build timestamp : $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"
|
||||||
|
|
||||||
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
|
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
|
||||||
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
cc -I. -DXorriso_with_maiN $def_libreadline \
|
||||||
$warn_opts \
|
$warn_opts \
|
||||||
$static_opts \
|
$static_opts \
|
||||||
$debug_opts \
|
$debug_opts \
|
||||||
$def_opts \
|
$def_opts \
|
||||||
$largefile_opts \
|
$largefile_opts \
|
||||||
\
|
\
|
||||||
-DXorriso_build_timestamP='"'"$timestamp"'"' \
|
|
||||||
\
|
|
||||||
-o "$xorr"/xorriso \
|
-o "$xorr"/xorriso \
|
||||||
\
|
\
|
||||||
"$xorr"/xorriso.c \
|
"$xorr"/xorriso.c \
|
||||||
@ -130,9 +146,11 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
|||||||
\
|
\
|
||||||
$libisofs \
|
$libisofs \
|
||||||
\
|
\
|
||||||
-lreadline \
|
$link_libreadline \
|
||||||
\
|
\
|
||||||
-lpthread
|
-lpthread \
|
||||||
|
-lacl \
|
||||||
|
-lz
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
if test "$ret" = 0
|
if test "$ret" = 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([xorriso], [0.1.9], [http://libburnia-project.org])
|
AC_INIT([xorriso], [0.4.2], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -8,15 +8,15 @@ AC_CANONICAL_TARGET
|
|||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=4
|
BURN_MINOR_VERSION=7
|
||||||
BURN_MICRO_VERSION=9
|
BURN_MICRO_VERSION=1
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
AC_SUBST(BURN_MINOR_VERSION)
|
AC_SUBST(BURN_MINOR_VERSION)
|
||||||
AC_SUBST(BURN_MICRO_VERSION)
|
AC_SUBST(BURN_MICRO_VERSION)
|
||||||
|
|
||||||
LIBISOFS_MAJOR_VERSION=0
|
LIBISOFS_MAJOR_VERSION=0
|
||||||
LIBISOFS_MINOR_VERSION=6
|
LIBISOFS_MINOR_VERSION=6
|
||||||
LIBISOFS_MICRO_VERSION=6
|
LIBISOFS_MICRO_VERSION=23
|
||||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||||
@ -43,6 +43,12 @@ if test ! $ac_cv_func_fseeko; then
|
|||||||
AC_ERROR([Libburn requires largefile support.])
|
AC_ERROR([Libburn requires largefile support.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl If iconv(3) is in an extra libiconv, then it gets added to variable LIBS.
|
||||||
|
dnl If not, then no -liconv will be added.
|
||||||
|
AC_CHECK_LIB(iconv, iconv, , )
|
||||||
|
dnl GNU iconv has no function iconv() but libiconv() and a macro iconv()
|
||||||
|
AC_CHECK_LIB(iconv, libiconv, , )
|
||||||
|
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
AC_SUBST(LIBTOOL_DEPS)
|
AC_SUBST(LIBTOOL_DEPS)
|
||||||
LIBTOOL="$LIBTOOL --silent"
|
LIBTOOL="$LIBTOOL --silent"
|
||||||
@ -74,8 +80,19 @@ AC_SUBST(THREAD_LIBS)
|
|||||||
|
|
||||||
TARGET_SHIZZLE
|
TARGET_SHIZZLE
|
||||||
AC_SUBST(ARCH)
|
AC_SUBST(ARCH)
|
||||||
|
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
dnl ts A90303
|
||||||
|
dnl Check the preconditions for using statvfs() in sg-dummy
|
||||||
|
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
|
||||||
|
STATVFS_DEF=-DLibburn_os_has_statvfS
|
||||||
|
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
|
||||||
|
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
|
||||||
|
CFLAGS="$CFLAGS $STATVFS_DEF"
|
||||||
|
|
||||||
|
|
||||||
dnl Add compiler-specific flags
|
dnl Add compiler-specific flags
|
||||||
|
|
||||||
dnl See if the user wants aggressive optimizations of the code
|
dnl See if the user wants aggressive optimizations of the code
|
||||||
@ -96,19 +113,103 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dnl Determine target directory for libisoburn-*.pc
|
||||||
|
dnl Important: Must be performed _after_ TARGET_SHIZZLE
|
||||||
|
dnl
|
||||||
|
LIBBURNIA_SET_PKGCONFIG
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libreadline,
|
||||||
|
[ --enable-libreadline Enable use of libreadline by xorriso, default=yes],
|
||||||
|
, enable_libreadline=yes)
|
||||||
|
if test x$enable_libreadline = xyes; then
|
||||||
dnl Check whether there is readline-devel and readline-runtime.
|
dnl Check whether there is readline-devel and readline-runtime.
|
||||||
dnl If not, erase this macro which would enable use of readline(),add_history()
|
dnl If not, erase this macro which would enable use of readline(),add_history()
|
||||||
READLINE_DEF="-DXorriso_with_readlinE"
|
READLINE_DEF="-DXorriso_with_readlinE"
|
||||||
dnl The empty yes case obviously causes -lreadline to be linked
|
dnl The empty yes case obviously causes -lreadline to be linked
|
||||||
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
|
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
|
||||||
dnl The X= in the yes case prevents that -lreadline gets linked twice
|
dnl The X= in the yes case prevents that -lreadline gets linked twice
|
||||||
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
|
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
|
||||||
|
else
|
||||||
|
READLINE_DEF=
|
||||||
|
fi
|
||||||
AC_SUBST(READLINE_DEF)
|
AC_SUBST(READLINE_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libacl,
|
||||||
|
[ --enable-libacl Enable use of libacl by libisofs, default=yes],
|
||||||
|
, enable_libacl=yes)
|
||||||
|
if test x$enable_libacl = xyes; then
|
||||||
|
dnl Check whether there is libacl-devel and libacl-runtime.
|
||||||
|
dnl If not, erase this macro which would enable use of acl_to_text and others
|
||||||
|
LIBACL_DEF="-DLibisofs_with_aaip_acL"
|
||||||
|
dnl The empty yes case obviously causes -lacl to be linked
|
||||||
|
AC_CHECK_HEADER(sys/acl.h, AC_CHECK_LIB(acl, acl_to_text, , LIBACL_DEF= ), LIBACL_DEF= )
|
||||||
|
else
|
||||||
|
LIBACL_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(LIBACL_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(xattr,
|
||||||
|
[ --enable-xattr Enable use of xattr by libisofs, default=yes],
|
||||||
|
, enable_xattr=yes)
|
||||||
|
if test x$enable_xattr = xyes; then
|
||||||
|
dnl Check whether there is the header for Linux xattr.
|
||||||
|
dnl If not, erase this macro which would enable use of listxattr and others
|
||||||
|
XATTR_DEF="-DLibisofs_with_aaip_xattR"
|
||||||
|
AC_CHECK_HEADER(attr/xattr.h, AC_CHECK_LIB(c, listxattr, X= , XATTR_DEF= ), XATTR_DEF= )
|
||||||
|
else
|
||||||
|
XATTR_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(XATTR_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(zlib,
|
||||||
|
[ --enable-zlib Enable use of zlib by libisofs, default=yes],
|
||||||
|
, enable_zlib=yes)
|
||||||
|
if test x$enable_zlib = xyes; then
|
||||||
|
dnl Check whether there is the header for zlib.
|
||||||
|
dnl If not, erase this macro which would enable use of compress2() and others.
|
||||||
|
dnl The empty parameter after "compress2" causes -lz.
|
||||||
|
ZLIB_DEF="-DLibisofs_with_zliB"
|
||||||
|
AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, compress2, , ZLIB_DEF= ), ZLIB_DEF= )
|
||||||
|
else
|
||||||
|
ZLIB_DEF=
|
||||||
|
fi
|
||||||
|
AC_SUBST(ZLIB_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(external-filters,
|
||||||
|
[ --enable-external-filters Enable use of external filter programs by xorriso, default=yes],
|
||||||
|
, enable_external_filters=yes)
|
||||||
|
if test x"$enable_external_filters" = xyes; then
|
||||||
|
EXTF_DEF="-DXorriso_allow_external_filterS"
|
||||||
|
echo "enabled xorriso external filter programs"
|
||||||
|
else
|
||||||
|
EXTF_DEF=
|
||||||
|
echo "disabled xorriso external filter programs"
|
||||||
|
fi
|
||||||
|
AC_SUBST(EXTF_DEF)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(external-filters-setuid,
|
||||||
|
[ --enable-external-filters-setuid Enable xorriso external filter programs under setuid, default=no],
|
||||||
|
, enable_external_filters_setuid=no)
|
||||||
|
if test x$enable_external_filters_setuid = xyes; then
|
||||||
|
EXTF_SUID_DEF="-DXorriso_allow_extf_suiD"
|
||||||
|
echo "enabled xorriso external filter programs under setuid"
|
||||||
|
else
|
||||||
|
EXTF_SUID_DEF=
|
||||||
|
echo "disabled xorriso external filter programs under setuid"
|
||||||
|
fi
|
||||||
|
AC_SUBST(EXTF_SUID_DEF)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
version.h
|
version.h
|
||||||
xorriso.pc
|
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
# xorriso.pc
|
||||||
|
@ -47,11 +47,11 @@ then
|
|||||||
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
-e 's/have a look at section EXAMPLES/have a look at section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||||
-e 's/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
-e 's/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
||||||
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||||
-e 's/<b>Creating, Growing, Modifying:<\/b>/\ <BR><b>Creating, Growing, Modifying:<\/b>/' \
|
-e 's/<b>Creating, Growing, Modifying, Blind/\ <BR><b>Creating, Growing, Modifying, Blind/' \
|
||||||
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||||
-e 's/^-dev /\ \ -dev /' \
|
-e 's/^-dev /\ \ -dev /' \
|
||||||
-e 's/^-devices /\ \ -devices /' \
|
-e 's/^-devices /\ \ -devices /' \
|
||||||
-e 's/<b>Rock Ridge, POSIX, X\/Open:<\/b>/\ <BR><b>Rock Ridge, POSIX, X\/Open:<\/b>/' \
|
-e 's/<b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/\ <BR><b>Rock Ridge, POSIX, X\/Open, El Torito, ACL,/' \
|
||||||
-e 's/<b>Command processing:<\/b>/\ <BR><b>Command processing:<\/b>/' \
|
-e 's/<b>Command processing:<\/b>/\ <BR><b>Command processing:<\/b>/' \
|
||||||
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\ <BR><b>Dialog, Readline, Result pager:<\/b>/' \
|
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\ <BR><b>Dialog, Readline, Result pager:<\/b>/' \
|
||||||
-e 's/<b>Aquiring source and target drive:<\/b>/\ <BR><b>Aquiring source and target drive:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Aquiring source and target drive:<\/b>/\ <BR><b>Aquiring source and target drive:<\/b><BR>\ <BR>/' \
|
||||||
@ -65,11 +65,14 @@ then
|
|||||||
-e 's/<b>Settings for result writing:<\/b>/\ <BR><b>Settings for result writing:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Settings for result writing:<\/b>/\ <BR><b>Settings for result writing:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/^706k = 706kB/\ \ 706k = 706kB/' \
|
-e 's/^706k = 706kB/\ \ 706k = 706kB/' \
|
||||||
-e 's/^5540k = 5540kB/\ \ 5540k = 5540kB/' \
|
-e 's/^5540k = 5540kB/\ \ 5540k = 5540kB/' \
|
||||||
|
-e 's/<b>Character sets:<\/b>/\ <BR><b>Character sets:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Exception processing:<\/b>/\ <BR><b>Exception processing:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Exception processing:<\/b>/\ <BR><b>Exception processing:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/<b>El Torito bootable ISO images:<\/b>/\ <BR><b>El Torito bootable ISO images:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Dialog mode control:<\/b>/\ <BR><b>Dialog mode control:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Dialog mode control:<\/b>/\ <BR><b>Dialog mode control:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Drive and media related inquiry actions:<\/b>/\ <BR><b>Drive and media related inquiry actions:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
-e 's/<b>Navigation in ISO image/\ <BR><b>Navigation in ISO image/' \
|
||||||
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\ <BR>/' \
|
||||||
|
-e 's/<b>Evaluation of readability and recovery:<\/b>/\ <BR><b>Evaluation of readability and recovery:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>osirrox restore options:<\/b>/\ <BR><b>osirrox restore options:<\/b><BR>\ <BR>/' \
|
-e 's/<b>osirrox restore options:<\/b>/\ <BR><b>osirrox restore options:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
-e 's/<b>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
||||||
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# make_xorriso_standalone.sh
|
# make_xorriso_standalone.sh
|
||||||
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
# Copyright 2008 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||||
#
|
#
|
||||||
# Not intended for general use in production installations !
|
# Not intended for general use in production installations !
|
||||||
#
|
#
|
||||||
@ -25,11 +25,11 @@
|
|||||||
current_dir=$(pwd)
|
current_dir=$(pwd)
|
||||||
lone_dir="$current_dir"/"xorriso-standalone"
|
lone_dir="$current_dir"/"xorriso-standalone"
|
||||||
|
|
||||||
xorriso_rev=0.1.9
|
xorriso_rev=0.4.2
|
||||||
# For unstable uploads:
|
# For unstable uploads:
|
||||||
xorriso_pl=""
|
## xorriso_pl=""
|
||||||
# For stable releases:
|
# For stable releases:
|
||||||
# xorriso_pl=".pl00"
|
xorriso_pl=".pl00"
|
||||||
|
|
||||||
with_bootstrap_tarball=1
|
with_bootstrap_tarball=1
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ copy_files xorriso/configure_ac.txt "$lone_dir"/configure.ac
|
|||||||
|
|
||||||
copy_files xorriso/xorriso_makefile_am.txt "$lone_dir"/Makefile.am
|
copy_files xorriso/xorriso_makefile_am.txt "$lone_dir"/Makefile.am
|
||||||
|
|
||||||
copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
|
# copy_files xorriso/xorriso_pc_in.txt "$lone_dir"/xorriso.pc.in
|
||||||
|
|
||||||
copy_files xorriso/README "$lone_dir"/README
|
copy_files xorriso/README "$lone_dir"/README
|
||||||
|
|
||||||
@ -124,12 +124,19 @@ copy_files \
|
|||||||
xorriso/xorrisoburn.[ch] \
|
xorriso/xorrisoburn.[ch] \
|
||||||
xorriso/xorriso.[ch1] \
|
xorriso/xorriso.[ch1] \
|
||||||
xorriso/xorriso_private.h \
|
xorriso/xorriso_private.h \
|
||||||
|
\
|
||||||
xorriso/xorriso_timestamp.h \
|
xorriso/xorriso_timestamp.h \
|
||||||
|
\
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
xorriso/xorriso_eng.html \
|
xorriso/xorriso_eng.html \
|
||||||
xorriso/man_1_xorriso.html \
|
xorriso/man_1_xorriso.html \
|
||||||
"$lone_dir"/xorriso
|
"$lone_dir"/xorriso
|
||||||
|
|
||||||
|
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||||
|
"$lone_dir"/xorriso/xorriso_buildstamp.h
|
||||||
|
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||||
|
"$lone_dir"/xorriso/xorriso_buildstamp_none.h
|
||||||
|
|
||||||
create_dir "$lone_dir"/test
|
create_dir "$lone_dir"/test
|
||||||
copy_files \
|
copy_files \
|
||||||
test/compare_file.c \
|
test/compare_file.c \
|
||||||
@ -140,9 +147,12 @@ copy_files \
|
|||||||
|
|
||||||
create_dir "$lone_dir"/libisofs
|
create_dir "$lone_dir"/libisofs
|
||||||
create_dir "$lone_dir"/libisofs/filters
|
create_dir "$lone_dir"/libisofs/filters
|
||||||
|
create_dir "$lone_dir"/doc
|
||||||
goto_dir "$current_dir"/nglibisofs-develop
|
goto_dir "$current_dir"/nglibisofs-develop
|
||||||
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
||||||
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
|
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
|
||||||
|
copy_files doc/susp_aaip*.txt "$lone_dir"/doc
|
||||||
|
copy_files doc/zisofs_format.txt "$lone_dir"/doc
|
||||||
copy_files COPYRIGHT "$lone_dir"/libisofs
|
copy_files COPYRIGHT "$lone_dir"/libisofs
|
||||||
|
|
||||||
# To get a common version.h
|
# To get a common version.h
|
||||||
|
196
xorriso/makefile_libxorriso_am.txt
Normal file
196
xorriso/makefile_libxorriso_am.txt
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
|
||||||
|
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
|
||||||
|
# was: pkgconfigdir=$(libdir)/pkgconfig
|
||||||
|
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
|
||||||
|
|
||||||
|
libincludedir=$(includedir)/libisoburn
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libisoburn/libisoburn.la libxorriso/libxorriso.la
|
||||||
|
|
||||||
|
## ========================================================================= ##
|
||||||
|
|
||||||
|
# Build libraries
|
||||||
|
libisoburn_libisoburn_la_LDFLAGS = \
|
||||||
|
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
|
||||||
|
libisoburn_libisoburn_la_SOURCES = \
|
||||||
|
libisoburn/burn_wrap.c \
|
||||||
|
libisoburn/data_source.c \
|
||||||
|
libisoburn/isoburn.c \
|
||||||
|
libisoburn/isoburn.h \
|
||||||
|
libisoburn/isofs_wrap.c \
|
||||||
|
libisoburn/libisoburn.h \
|
||||||
|
version.h
|
||||||
|
|
||||||
|
libisoburn_libisoburn_la_LIBADD = \
|
||||||
|
-lisofs \
|
||||||
|
-lburn
|
||||||
|
|
||||||
|
libxorriso_libxorriso_la_LDFLAGS = \
|
||||||
|
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
|
||||||
|
libxorriso_libxorriso_la_SOURCES = \
|
||||||
|
xorriso/xorriso.h \
|
||||||
|
xorriso/xorriso_private.h \
|
||||||
|
xorriso/xorriso.c \
|
||||||
|
xorriso/xorrisoburn.h \
|
||||||
|
xorriso/xorrisoburn.c \
|
||||||
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h \
|
||||||
|
version.h
|
||||||
|
|
||||||
|
libxorriso_libxorriso_la_LIBADD = \
|
||||||
|
-lisofs \
|
||||||
|
-lburn \
|
||||||
|
-lisoburn
|
||||||
|
|
||||||
|
libinclude_HEADERS = \
|
||||||
|
libisoburn/libisoburn.h \
|
||||||
|
xorriso/xorriso.h
|
||||||
|
|
||||||
|
## ========================================================================= ##
|
||||||
|
|
||||||
|
|
||||||
|
# This is the reference application of libisoburn. See man xorriso/xorriso.1
|
||||||
|
#
|
||||||
|
bin_PROGRAMS = \
|
||||||
|
xorriso/xorriso
|
||||||
|
|
||||||
|
# This looks quite ugly with make install: xorriso.c is compiled twice again
|
||||||
|
#
|
||||||
|
# Trying to create a build timestamp file
|
||||||
|
#
|
||||||
|
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||||
|
#
|
||||||
|
# phony targets get rebuilt every time
|
||||||
|
#
|
||||||
|
# .PHONY: xorriso/xorriso_buildstamp.h
|
||||||
|
# xorriso/xorriso_buildstamp.h:
|
||||||
|
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
# cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
xorriso_xorriso_CPPFLAGS = -Ilibisoburn
|
||||||
|
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_without_subS \
|
||||||
|
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
|
||||||
|
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
|
||||||
|
|
||||||
|
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn \
|
||||||
|
libxorriso/libxorriso.la \
|
||||||
|
$(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
|
xorriso_xorriso_SOURCES = \
|
||||||
|
xorriso/xorriso.h \
|
||||||
|
xorriso/xorriso_private.h \
|
||||||
|
xorriso/xorriso.c \
|
||||||
|
xorriso/xorrisoburn.h \
|
||||||
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# xorriso/xorrisoburn.c \
|
||||||
|
#
|
||||||
|
|
||||||
|
# Install symbolic links to the xorriso binary
|
||||||
|
#
|
||||||
|
install-exec-hook:
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||||
|
|
||||||
|
|
||||||
|
# Alternative to the disabled .PHONY above.
|
||||||
|
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||||
|
#
|
||||||
|
buildstamp:
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# For now make buildstamped has to be performed explicitely.
|
||||||
|
buildstamped: buildstamp
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Build test applications
|
||||||
|
noinst_PROGRAMS = \
|
||||||
|
test/compare_file
|
||||||
|
|
||||||
|
# A program to compare two files in mirrored trees in mounted filesystems
|
||||||
|
# To compare tree /media/dvd and /original/dir :
|
||||||
|
# find /media/dvd -exec test/compare_file '{}' /media/dvd /original/dir ';'
|
||||||
|
#
|
||||||
|
test_compare_file_CPPFLAGS =
|
||||||
|
test_compare_file_CFLAGS =
|
||||||
|
test_compare_file_LDADD =
|
||||||
|
test_compare_file_SOURCES = test/compare_file.c
|
||||||
|
|
||||||
|
|
||||||
|
## ========================================================================= ##
|
||||||
|
|
||||||
|
## Build documentation (You need Doxygen for this to work)
|
||||||
|
webhost = http://libburn-api.pykix.org
|
||||||
|
webpath = /
|
||||||
|
docdir = $(DESTDIR)$(prefix)/share/doc/$(PACKAGE)-$(VERSION)
|
||||||
|
|
||||||
|
doc: doc/html
|
||||||
|
|
||||||
|
doc/html: doc/doxygen.conf
|
||||||
|
if [ -f ./doc/doc.lock ]; then \
|
||||||
|
$(RM) -r doc/html; \
|
||||||
|
doxygen doc/doxygen.conf; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
doc-upload: doc/html
|
||||||
|
scp -r $</* $(webhost):$(webpath)
|
||||||
|
|
||||||
|
all: doc
|
||||||
|
|
||||||
|
install-data-local:
|
||||||
|
if [ -f ./doc/doc.lock ]; then \
|
||||||
|
$(mkinstalldirs) $(docdir)/html; \
|
||||||
|
$(INSTALL_DATA) doc/html/* $(docdir)/html; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
uninstall-local:
|
||||||
|
rm -rf $(docdir)
|
||||||
|
|
||||||
|
## ========================================================================= ##
|
||||||
|
|
||||||
|
# Indent source files
|
||||||
|
indent_files = \
|
||||||
|
$(libisoburn_libisoburn_la_SOURCES)
|
||||||
|
|
||||||
|
|
||||||
|
indent: $(indent_files)
|
||||||
|
indent -bad -bap -nbbb -nbbo -nbc -bli0 -br -bls \
|
||||||
|
-cdw -ce -cli0 -ncs -nbfda -i8 -l79 -lc79 \
|
||||||
|
-lp -saf -sai -nprs -npsl -saw -sob -ss -ut \
|
||||||
|
-sbi0 -nsc -ts8 -npcs -ncdb -fca \
|
||||||
|
$^
|
||||||
|
|
||||||
|
.PHONY: indent
|
||||||
|
|
||||||
|
## ========================================================================= ##
|
||||||
|
|
||||||
|
# Extra things
|
||||||
|
nodist_pkgconfig_DATA = \
|
||||||
|
libisoburn-1.pc
|
||||||
|
|
||||||
|
man_MANS = xorriso/xorriso.1
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
libisoburn-1.pc.in \
|
||||||
|
version.h.in \
|
||||||
|
doc/comments \
|
||||||
|
doc/doxygen.conf.in \
|
||||||
|
README \
|
||||||
|
AUTHORS \
|
||||||
|
CONTRIBUTORS \
|
||||||
|
COPYRIGHT \
|
||||||
|
COPYING \
|
||||||
|
INSTALL \
|
||||||
|
xorriso/changelog.txt \
|
||||||
|
xorriso/xorriso_buildstamp_none.h \
|
||||||
|
xorriso/README \
|
||||||
|
$(man_MANS)
|
||||||
|
|
1870
xorriso/xorriso.1
1870
xorriso/xorriso.1
File diff suppressed because it is too large
Load Diff
9595
xorriso/xorriso.c
9595
xorriso/xorriso.c
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
|||||||
/* Command line oriented batch and dialog tool which creates, loads,
|
/* Command line oriented batch and dialog tool which creates, loads,
|
||||||
manipulates and burns ISO 9660 filesystem images.
|
manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2.
|
Provided under GPL version 2.
|
||||||
|
|
||||||
@ -16,25 +16,171 @@
|
|||||||
struct XorrisO;
|
struct XorrisO;
|
||||||
|
|
||||||
|
|
||||||
|
#define Xorriso_program_versioN "0.4.2"
|
||||||
|
|
||||||
|
|
||||||
/* --------------------- Fundamental Management ------------------- */
|
/* --------------------- Fundamental Management ------------------- */
|
||||||
|
|
||||||
/* Create a new xorriso object and tell it the program name to be used
|
|
||||||
with messages.
|
/* Get the version text (e.g. "0.4.2") of the program code.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return readonly character string
|
||||||
|
*/
|
||||||
|
char *Xorriso__get_version_text(int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Mandatory call:
|
||||||
|
Create a new xorriso object and tell it the program name to be used
|
||||||
|
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"
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return >0 success , <=0 failure, no object created
|
||||||
*/
|
*/
|
||||||
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
|
int Xorriso_new(struct XorrisO ** xorriso, char *progname, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* Make global library initializations.
|
/* Interpret certain commands which shall get into effect before the
|
||||||
|
libraries get initialized:
|
||||||
|
-abort_on , -report_about , -return_with , -list_delimiter
|
||||||
|
Some commands get executed only if they are the only command in argv:
|
||||||
|
-prog_help , -help , -no_rc
|
||||||
|
Some get examined for the need to redirect stdout messages
|
||||||
|
-dev , -outdev , -indev , -as
|
||||||
|
@param xorriso The context object in which to perform the commands.
|
||||||
|
@param argc Number of arguments.
|
||||||
|
@param argv The arguments. argv[0] contains the program name.
|
||||||
|
argv[1] to argv[argc-1] contain commands and parameters.
|
||||||
|
@param idx Argument cursor. When this function is called, *idx must
|
||||||
|
be at least 1, argv[*idx] must be to a command.
|
||||||
|
*idx will iterate over commands and parameters until this
|
||||||
|
function aborts or until argc is reached.
|
||||||
|
@param flag bit0= do not interpret argv[1]
|
||||||
|
@return <0 error
|
||||||
|
0 end program
|
||||||
|
1 ok, go on
|
||||||
|
*/
|
||||||
|
int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Mandatory call:
|
||||||
|
It has to be made before calling any function listed below this point.
|
||||||
|
|
||||||
|
Make global library initializations.
|
||||||
This must be done with the first xorriso object that gets created and
|
This must be done with the first xorriso object that gets created and
|
||||||
with the first xorriso object that gets created after Xorriso_destroy(,1).
|
with the first xorriso object that gets created after Xorriso_destroy(,1).
|
||||||
|
@param xorriso The context object.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return <=0 error , >0 success
|
||||||
*/
|
*/
|
||||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* Destroy xorriso object when it is no longer needed.
|
/* Read and interpret commands from eventual startup files as listed in
|
||||||
@param flag bit0= Make global librariy shutdown.
|
man xorriso.
|
||||||
Use only with last xorriso object to be destroyed.
|
@param xorriso The context object in which to perform the commands.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return <=0 = error
|
||||||
|
1 = success
|
||||||
|
3 = end program run (e.g. because command -end was encountered)
|
||||||
|
*/
|
||||||
|
int Xorriso_read_rc(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Check whether program arguments shall be backslash decoded and eventually
|
||||||
|
replace *argv by a new argument vector. The old one will not be freed
|
||||||
|
by this call. If it is dynamic memory then you need to keep a copy of
|
||||||
|
the pointer and free it yourself after this call.
|
||||||
|
@param xorriso The context object
|
||||||
|
@param argc Number of arguments.
|
||||||
|
@param argv The arguments. (*argv)[0] contains the program name.
|
||||||
|
(*argv)[1] to (*argv)[argc-1] contain commands and parameters
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return <= 0 error , > 0 success
|
||||||
|
*/
|
||||||
|
int Xorriso_program_arg_bsl(struct XorrisO *xorriso, int argc, char ***argv,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Interpret argv as xorriso command options and their parameters.
|
||||||
|
(An alternative is to call functions of the options API directly and to
|
||||||
|
perform own error status evaluation. See below: Options API.)
|
||||||
|
After the first command and its parameters there may be more commands and
|
||||||
|
parameters. All parameters must be given in the same call as their command.
|
||||||
|
@param xorriso The context object in which to perform the commands.
|
||||||
|
@param argc Number of arguments.
|
||||||
|
@param argv The arguments. argv[0] contains the program name.
|
||||||
|
argv[1] to argv[argc-1] contain commands and parameters.
|
||||||
|
@param idx Argument cursor. When this function is called, *idx must
|
||||||
|
be at least 1, argv[*idx] must be a command.
|
||||||
|
*idx will iterate over commands and parameters until this
|
||||||
|
function aborts or until argc is reached.
|
||||||
|
@param flag bit0= recursion
|
||||||
|
bit1= these are the main() program start arguments
|
||||||
|
@return <=0 = error
|
||||||
|
1 = success
|
||||||
|
2 = problem event ignored
|
||||||
|
3 = end program run (e.g. because command -end was encountered)
|
||||||
|
*/
|
||||||
|
int Xorriso_interpreter(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Parse a command line into words and use them as argv for a call of
|
||||||
|
Xorriso_interpreter(). Put out some info lines about the outcome.
|
||||||
|
@param xorriso The context object in which to perform the commands.
|
||||||
|
@param line A text of one or more words according to man xorriso
|
||||||
|
paragraph "Command processing" up to and including
|
||||||
|
"Backslash Interpretation".
|
||||||
|
@param flag bit0 to bit15 are forwarded to Xorriso_interpreter()
|
||||||
|
bit16= no pageing of info lines
|
||||||
|
bit17= print === bar even if xorriso->found<0
|
||||||
|
@return see return of Xorriso_interpreter()
|
||||||
|
*/
|
||||||
|
int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Enter xorriso command line dialog mode, eventually using libreadline.
|
||||||
|
This call returns immediately if not option -dialog "on" was performed
|
||||||
|
before.
|
||||||
|
@param xorriso The context object in which to perform the commands.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return <=0 error, 1= dialog mode ended normally ,
|
||||||
|
3= dialog mode ended normally,interpreter asks to end program
|
||||||
|
*/
|
||||||
|
int Xorriso_dialog(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Inquire whether option -commit would make sense.
|
||||||
|
@param xorriso The context object to inquire.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return 0= -commit would have nothing to do
|
||||||
|
1= a new image session would emerge at -commit
|
||||||
|
*/
|
||||||
|
int Xorriso_change_is_pending(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Compute the exit value from the recorded maximum event severity.
|
||||||
|
@param xorriso The context object to inquire.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return The computed exit value
|
||||||
|
*/
|
||||||
|
int Xorriso_make_return_value(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Mandatory call:
|
||||||
|
Destroy xorriso object when it is no longer needed.
|
||||||
|
@param xorriso The context object to destroy. *xorriso will become NULL.
|
||||||
|
@param flag bit0= Perform global library shutdown.
|
||||||
|
Use only with last xorriso object to be destroyed.
|
||||||
|
@return <=0 error, >0 success
|
||||||
*/
|
*/
|
||||||
int Xorriso_destroy(struct XorrisO **xorriso, int flag);
|
int Xorriso_destroy(struct XorrisO **xorriso, int flag);
|
||||||
|
|
||||||
@ -139,6 +285,121 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
|
|||||||
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Write a message for option -errfile_log.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param error_code The unique error code of your message.
|
||||||
|
Submit 0 if you do not have reserved error codes within
|
||||||
|
the libburnia project.
|
||||||
|
@param msg_text Not more than 8196 characters of message text.
|
||||||
|
@param os_errno Eventual errno related to the message. Submit 0 if
|
||||||
|
the message is not related to a operating system error.
|
||||||
|
@param flag bit0-7= meaning of msg_text
|
||||||
|
( 0= ERRFILE path , for internal use mainly )
|
||||||
|
1= mark line text (only to be put out if enabled)
|
||||||
|
@return <=0 error , >0 success
|
||||||
|
*/
|
||||||
|
int Xorriso_process_errfile(struct XorrisO *xorriso,
|
||||||
|
int error_code, char msg_text[], int os_errno,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* The outlist stack allows to redirect the info and result messages from
|
||||||
|
their normal channels into a pair of string lists which can at some
|
||||||
|
later time be retrieved by the application.
|
||||||
|
These redirection caches can be stacked to allow stacked applications.
|
||||||
|
xorriso itself uses them for internal purposes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* A list item able of forming double chained lists */
|
||||||
|
struct Xorriso_lsT;
|
||||||
|
|
||||||
|
/** Maximum number of stacked redirections */
|
||||||
|
#define Xorriso_max_outlist_stacK 32
|
||||||
|
|
||||||
|
/** Enable a new redirection of info and/or result channel. The normal message
|
||||||
|
output and eventual older redirections will not see new messages until
|
||||||
|
the redirection is ended by a call to Xorriso_pull_outlists() with the
|
||||||
|
stack_handle value returned by this call.
|
||||||
|
Redirected output is not written to the files of Xorriso_option_logfile()
|
||||||
|
and the Xorriso_option_pkt_output() protocol will not be applied.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param stack_handle returns an id number which is unique as long as
|
||||||
|
its redirection is stacked. It may be re-used after
|
||||||
|
its redirection was pulled from the stack.
|
||||||
|
@param flag Bitfield for control purposes
|
||||||
|
bit0= redirect result channel
|
||||||
|
bit1= redirect info channel
|
||||||
|
If bit0 and bit1 are 0, both channels get redirected.
|
||||||
|
@return 1 on success, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_push_outlists(struct XorrisO *xorriso, int *stack_handle,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Disable the redirection given by stack_handle. If it was the current
|
||||||
|
receiver of messages then switch output to the next older redirection
|
||||||
|
resp. to the normal channels if no redirections are stacked any more.
|
||||||
|
The messages collected by the disabled redirection are handed out as
|
||||||
|
two lists. Both lists have to be disposed via Xorriso_lst_destroy_all()
|
||||||
|
when they are no longer needed.
|
||||||
|
The message lists are either NULL or represented by their first
|
||||||
|
Xorriso_lsT item.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param stack_handle The id number returned by Xorriso_push_outlists()
|
||||||
|
@param result_list Result and mark messages (usually directed to stdout)
|
||||||
|
@param info_list Info and mark messages (usually directed to stderr)
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return 1 on success, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_pull_outlists(struct XorrisO *xorriso, int stack_handle,
|
||||||
|
struct Xorriso_lsT **result_list,
|
||||||
|
struct Xorriso_lsT **info_list, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the text message from the current list item.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the text content of the list item.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the address of the next item in the chain of messages.
|
||||||
|
An iteration over the output of Xorriso_pull_outlists() starts at the
|
||||||
|
returned result_list resp. info_list and ends when this function returns
|
||||||
|
NULL.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the next list item or NULL if end of list.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Obtain the address of the previous item in the chain of messages.
|
||||||
|
@param entry The current list item
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return Pointer to the previous list item or NULL if start of list.
|
||||||
|
This pointer does not have to be freed.
|
||||||
|
*/
|
||||||
|
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Destroy all list items which are directly or indirectly connected to
|
||||||
|
the given link item.
|
||||||
|
Apply this to each of the two list handles obtained by
|
||||||
|
Xorriso_pull_outlists() when the lists are no longer needed.
|
||||||
|
@param lstring *lstring will be freed and set to NULL.
|
||||||
|
It is not dangerous to submit a pointer to a NULL-pointer.
|
||||||
|
@param flag unused yet, submit 0
|
||||||
|
@return -1= lstring was NULL (i.e. wrong use of this call),
|
||||||
|
0= *lstring was already NULL,
|
||||||
|
1= item actually disposed
|
||||||
|
*/
|
||||||
|
int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- Options API ------------------------ */
|
/* ---------------------------- Options API ------------------------ */
|
||||||
/* See man 1 xorriso for explanation of the particular options */
|
/* See man 1 xorriso for explanation of the particular options */
|
||||||
@ -149,12 +410,27 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
|||||||
After each call to an option function, there should happen:
|
After each call to an option function, there should happen:
|
||||||
Xorriso_eval_problem_status()
|
Xorriso_eval_problem_status()
|
||||||
One should follow its eventual advice to abort.
|
One should follow its eventual advice to abort.
|
||||||
|
|
||||||
|
Options with a varying number of arguments get them passed like
|
||||||
|
Xorriso_interpreter(). E.g.:
|
||||||
|
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
They begin to read the arguments at position *idx and will see the list
|
||||||
|
end either at the next argv which contains the -list_delimiter text or
|
||||||
|
at argv[argc-1]. After the call, *idx will be the index of the first not
|
||||||
|
yet interpreted argv.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* Option -abort_on */
|
/* Option -abort_on */
|
||||||
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
|
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Option -acl "on"|"off" */
|
||||||
|
int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* Option -add */
|
/* Option -add */
|
||||||
/* @param flag bit0=do not report the added item
|
/* @param flag bit0=do not report the added item
|
||||||
bit1=do not reset pacifier, no final pacifier message
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
@ -174,6 +450,28 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
|
|||||||
char *time_type, char *timestring,
|
char *time_type, char *timestring,
|
||||||
int argc, char **argv, int *idx, int flag);
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -application_id */
|
||||||
|
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* Option -as */
|
||||||
|
/* @param flag bit0=do not report the added item
|
||||||
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
|
*/
|
||||||
|
int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
|
int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -assert_volid */
|
||||||
|
int Xorriso_option_assert_volid(struct XorrisO *xorriso, char *pattern,
|
||||||
|
char *severity, int flag);
|
||||||
|
|
||||||
|
/* Option -auto_charset "on"|"off" */
|
||||||
|
int Xorriso_option_auto_charset(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -backslash_codes */
|
||||||
|
int Xorriso_option_backslash_codes(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -ban_stdio_write */
|
/* Option -ban_stdio_write */
|
||||||
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -193,6 +491,29 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
|
|||||||
/* Option -cdx */
|
/* Option -cdx */
|
||||||
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
|
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
|
||||||
|
|
||||||
|
/* Option -charset */
|
||||||
|
/* @param flag bit0= set in_charset
|
||||||
|
bit1= set out_charset
|
||||||
|
*/
|
||||||
|
int Xorriso_option_charset(struct XorrisO *xorriso, char *name, int flag);
|
||||||
|
|
||||||
|
/* Options -check_md5 and -check_md5_r
|
||||||
|
@param flag bit0= issue summary message
|
||||||
|
bit1= do not reset pacifier, no final pacifier message
|
||||||
|
bit2= do not issue pacifier messages at all
|
||||||
|
bit3= recursive: -check_md5_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_check_md5(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -check_media */
|
||||||
|
int Xorriso_option_check_media(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -check_media_defaults */
|
||||||
|
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
|
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
|
||||||
/* @param flag bit0=recursive (-chgrp_r)
|
/* @param flag bit0=recursive (-chgrp_r)
|
||||||
*/
|
*/
|
||||||
@ -265,9 +586,16 @@ int Xorriso_option_devices(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -dialog "on"|"off" */
|
/* Option -dialog "on"|"off" */
|
||||||
int Xorriso_option_dialog(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_dialog(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -disk_dev_ino "on"|"off" */
|
||||||
|
int Xorriso_option_disk_dev_ino(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -disk_pattern "on"|"ls"|"off" */
|
/* Option -disk_pattern "on"|"ls"|"off" */
|
||||||
int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -drive_class */
|
||||||
|
int Xorriso_option_drive_class(struct XorrisO *xorriso,
|
||||||
|
char *d_class, char *pattern, int flag);
|
||||||
|
|
||||||
/* Option -dummy "on"|"off" */
|
/* Option -dummy "on"|"off" */
|
||||||
int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
@ -290,6 +618,10 @@ int Xorriso_option_errfile_log(struct XorrisO *xorriso,
|
|||||||
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
||||||
char *occasion, char *behavior, int flag);
|
char *occasion, char *behavior, int flag);
|
||||||
|
|
||||||
|
/* Option -external_filter */
|
||||||
|
int Xorriso_option_external_filter(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Options -extract , -extract_single */
|
/* Options -extract , -extract_single */
|
||||||
/* @param flag bit0=do not report the restored item
|
/* @param flag bit0=do not report the restored item
|
||||||
bit1=do not reset pacifier, no final pacifier message
|
bit1=do not reset pacifier, no final pacifier message
|
||||||
@ -298,6 +630,10 @@ int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
|||||||
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
|
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
|
||||||
char *iso_path, int flag);
|
char *iso_path, int flag);
|
||||||
|
|
||||||
|
/* Option -extract_cut */
|
||||||
|
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
|
||||||
|
char *start, char *count, char *disk_path, int flag);
|
||||||
|
|
||||||
/* Option -follow */
|
/* Option -follow */
|
||||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
@ -312,9 +648,21 @@ int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
/* Option -fs */
|
/* Option -fs */
|
||||||
int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag);
|
int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag);
|
||||||
|
|
||||||
|
/* Option -getfacl alias -getfacli, -getfacl_r alias -getfacl_ri */
|
||||||
|
/* @param flag bit0=recursive -getfacl_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_getfacli(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Option -gid */
|
/* Option -gid */
|
||||||
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
|
int Xorriso_option_gid(struct XorrisO *xorriso, char *gid, int flag);
|
||||||
|
|
||||||
|
/* Option -grow_blindly */
|
||||||
|
int Xorriso_option_grow_blindly(struct XorrisO *xorriso, char *msc2, int flag);
|
||||||
|
|
||||||
|
/* Option -hardlinks "on"|"off" */
|
||||||
|
int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -help and part of -prog_help */
|
/* Option -help and part of -prog_help */
|
||||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -328,11 +676,16 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
|||||||
/* Option -joliet "on"|"off" */
|
/* Option -joliet "on"|"off" */
|
||||||
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -list_delimiter */
|
||||||
|
int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -list_formats */
|
/* Option -list_formats */
|
||||||
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* Option -load session|track|sbsector value */
|
/* Option -load session|track|sbsector value */
|
||||||
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
|
||||||
|
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||||
*/
|
*/
|
||||||
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||||
char *adr_value, int flag);
|
char *adr_value, int flag);
|
||||||
@ -380,10 +733,20 @@ int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
/* Option -mark */
|
/* Option -mark */
|
||||||
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
||||||
|
|
||||||
|
/* Option -md5 */
|
||||||
|
int Xorriso_option_md5(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
/* Option -mkdir alias -mkdiri */
|
/* Option -mkdir alias -mkdiri */
|
||||||
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -mount */
|
||||||
|
/* @param bit0= print mount command to result channel rather than performing it
|
||||||
|
*/
|
||||||
|
int Xorriso_option_mount(struct XorrisO *xorriso, char *dev, char *adr_mode,
|
||||||
|
char *adr, char *cmd, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* Option -mv alias -mvi */
|
/* Option -mv alias -mvi */
|
||||||
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
@ -394,11 +757,15 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -not_leaf */
|
/* Option -not_leaf */
|
||||||
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
|
||||||
|
|
||||||
|
/* Option -not_list , -quoted_not_list */
|
||||||
|
/* @param flag bit0= -quoted_not_list */
|
||||||
|
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||||
|
|
||||||
/* Option -not_paths */
|
/* Option -not_paths */
|
||||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||||
int *idx, int flag);
|
int *idx, int flag);
|
||||||
|
|
||||||
/* Option -options_from_file*/
|
/* Option -options_from_file */
|
||||||
/* @return <=0 error , 1 = success , 3 = request to end program run */
|
/* @return <=0 error , 1 = success , 3 = request to end program run */
|
||||||
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
|
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
|
||||||
int flag);
|
int flag);
|
||||||
@ -409,6 +776,9 @@ int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
|
|||||||
/* Option -overwrite "on"|"nondir"|"off" */
|
/* Option -overwrite "on"|"nondir"|"off" */
|
||||||
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -pacifier */
|
||||||
|
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag);
|
||||||
|
|
||||||
/* Option -padding */
|
/* Option -padding */
|
||||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
||||||
|
|
||||||
@ -419,7 +789,8 @@ int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
|
|||||||
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
|
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
|
||||||
char *disk_path, char *start, char *count, int flag);
|
char *disk_path, char *start, char *count, int flag);
|
||||||
|
|
||||||
/* Option -path-list */
|
/* Option -path_list , -quoted_path_list */
|
||||||
|
/* @param flag bit0= -quoted_path_list */
|
||||||
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
|
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||||
|
|
||||||
/* Option -pathspecs */
|
/* Option -pathspecs */
|
||||||
@ -454,6 +825,10 @@ int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -reassure "on"|"tree"|"off" */
|
/* Option -reassure "on"|"tree"|"off" */
|
||||||
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -relax_compliance */
|
||||||
|
int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Option -report_about */
|
/* Option -report_about */
|
||||||
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
||||||
int flag);
|
int flag);
|
||||||
@ -483,6 +858,32 @@ int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
|
|||||||
/* Option -session_log */
|
/* Option -session_log */
|
||||||
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
|
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
|
||||||
|
/* Option -setfacl_list alias -setfacl_listi */
|
||||||
|
int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* Option -setfacl alias -setfacli , -setfacl_r alias -setfacl_ri */
|
||||||
|
/* @param flag bit0=recursive -setfacl_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_setfacli(struct XorrisO *xorriso, char *acl_text,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
/* Options -setfattr alias -setfattri, -setfattr_r alias -setfattr_ri */
|
||||||
|
/* @param flag bit0=recursive -setfattr_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_setfattri(struct XorrisO *xorriso, char *name, char *value,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
|
/* Option -setfattr_list alias -setfattr_listi */
|
||||||
|
int Xorriso_option_setfattr_listi(struct XorrisO *xorriso, char *path,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* Options -set_filter , -set_filter_r */
|
||||||
|
/* @param flag bit0=recursive -set_filter_r
|
||||||
|
*/
|
||||||
|
int Xorriso_option_set_filter(struct XorrisO *xorriso, char *name,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Option -speed */
|
/* Option -speed */
|
||||||
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
||||||
|
|
||||||
@ -513,6 +914,10 @@ int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -uid */
|
/* Option -uid */
|
||||||
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
|
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
|
||||||
|
|
||||||
|
/* Option -unregister_filter */
|
||||||
|
int Xorriso_option_unregister_filter(struct XorrisO *xorriso, char *name,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* Options -update and -update_r
|
/* Options -update and -update_r
|
||||||
@param flag bit0= issue summary message
|
@param flag bit0= issue summary message
|
||||||
bit1= do not reset pacifier, no final pacifier message
|
bit1= do not reset pacifier, no final pacifier message
|
||||||
@ -531,6 +936,12 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag);
|
|||||||
/* Option -volid */
|
/* Option -volid */
|
||||||
int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag);
|
int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag);
|
||||||
|
|
||||||
|
/* Option -xattr "on"|"off" */
|
||||||
|
int Xorriso_option_xattr(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Option -zisofs */
|
||||||
|
int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
|
||||||
#endif /* Xorriso_includeD */
|
#endif /* Xorriso_includeD */
|
||||||
|
|
||||||
|
3
xorriso/xorriso_buildstamp.h
Normal file
3
xorriso/xorriso_buildstamp.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#ifndef Xorriso_build_timestamP
|
||||||
|
#define Xorriso_build_timestamP "-none-given-"
|
||||||
|
#endif
|
3
xorriso/xorriso_buildstamp_none.h
Normal file
3
xorriso/xorriso_buildstamp_none.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#ifndef Xorriso_build_timestamP
|
||||||
|
#define Xorriso_build_timestamP "-none-given-"
|
||||||
|
#endif
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
||||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
|
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, Linux, FreeBSD, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, BD-R, scdbackup">
|
||||||
<META NAME="robots" CONTENT="follow">
|
<META NAME="robots" CONTENT="follow">
|
||||||
<TITLE>xorriso homepage english</TITLE>
|
<TITLE>xorriso homepage english</TITLE>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
@ -14,16 +14,18 @@
|
|||||||
<P><H2> Homepage of </H2>
|
<P><H2> Homepage of </H2>
|
||||||
<H1> xorriso </H1>
|
<H1> xorriso </H1>
|
||||||
|
|
||||||
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux</H2>
|
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux and FreeBSD</H2>
|
||||||
</CENTER>
|
</CENTER>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<H2>Purpose:</H2>
|
<H2>Purpose:</H2>
|
||||||
xorriso maps file objects from POSIX compliant filesystems
|
xorriso copies file objects from POSIX compliant filesystems
|
||||||
into Rock Ridge enhanced ISO 9660 filesystems and allows
|
into Rock Ridge enhanced ISO 9660 filesystems and allows
|
||||||
session-wise manipulation of such filesystems. It can load the management
|
session-wise manipulation of such filesystems. It can load the management
|
||||||
information of existing ISO images and it writes the session results to
|
information of existing ISO images and it writes the session results to
|
||||||
optical media or to filesystem objects.
|
optical media or to filesystem objects.
|
||||||
|
<BR>
|
||||||
|
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||||
</P>
|
</P>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
@ -33,50 +35,49 @@ optical media or to filesystem objects.
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<H2>Hardware requirements:</H2>
|
<H2>Hardware requirements:</H2>
|
||||||
A CD/DVD/BD recorder suitable for
|
About any CD, DVD, or BD recorder produced in the recent ten years.
|
||||||
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
<BR>
|
||||||
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
<A HREF="http://libburnia-project.org">libburn</A>
|
||||||
and to MMC-5 for DVD or BD).
|
supports recorders which are compliant to standards MMC-1 for CD and
|
||||||
|
MMC-5 for DVD or BD. Linux and FreeBSD allow to access drives connected
|
||||||
|
via SCSI, PATA (aka IDE, ATA), USB, or SATA.
|
||||||
<BR>
|
<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
<H2>Software requirements :</H2>
|
<H2>Software requirements :</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
|
<DT>Linux with kernel 2.4 or higher, libc, libpthread :</DT>
|
||||||
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
|
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
|
||||||
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
|
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
|
||||||
<DT>libpthread</DT>
|
<DT>or FreeBSD, libc, libpthread :</DT>
|
||||||
<DD>is supposed to be a standard system component.</DD>
|
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
|
||||||
<DT>libreadline and libreadline-dev</DT>
|
<DD>libcam has to be installed.</DD>
|
||||||
<DD>are optional and eventually make dialog more convenient.</DD>
|
<DD>libiconv has to be installed.</DD>
|
||||||
</DL>
|
<DT>or some other X/Open system, libc, libpthread :</DT>
|
||||||
</P>
|
<DD>
|
||||||
|
There will be no direct operation of optical drives, but only POSIX i/o
|
||||||
<P>
|
with objects of the local filesystem.
|
||||||
<H2>
|
|
||||||
GPL software included:<BR>
|
|
||||||
</H2>
|
|
||||||
<DL>
|
|
||||||
<DT>libburn-0.4.9</DT>
|
|
||||||
<DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
|
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
|
||||||
furthered since August 2006 by team of libburnia-project.org)</DD>
|
|
||||||
<DT>libisofs-0.6.6</DT>
|
|
||||||
<DD>operates ISO 9660 images.</DD>
|
|
||||||
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
|
|
||||||
<DT>libisoburn-0.1.8</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>
|
|
||||||
</DL>
|
|
||||||
<DD>The source code of this software is independent of
|
|
||||||
cdrecord and mkisofs.</A>
|
|
||||||
</DD>
|
</DD>
|
||||||
|
<DD>
|
||||||
|
Might work with DVD-RAM, DVD+RW, BD-RE
|
||||||
|
but rather not with CD, DVD-R, DVD+R, BD-R.
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
|
||||||
|
<H3>Optional supporting software:</H2>
|
||||||
|
<DL>
|
||||||
|
<DT>libreadline and libreadline-dev</DT>
|
||||||
|
<DD>eventually make dialog more convenient.</DD>
|
||||||
|
<DT>libacl and libacl-devel</DT>
|
||||||
|
<DD>eventually allow on Linux to get and set ACLs.</DD>
|
||||||
|
<DT>zlib and zlib-devel</DT>
|
||||||
|
<DD>eventually allow zisofs and gzip compression.</DD>
|
||||||
|
</DL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
This program system has been tested on Intel/AMD Linux systems only.<BR>
|
This program has been tested on Linux, FreeBSD, and Solaris systems.<BR>
|
||||||
For ports to other usable systems <A HREF="#contact">contact us</A>.
|
For ports to other usable systems <A HREF="#contact">contact us</A>.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -86,40 +87,52 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
|
|||||||
<H2>Special features:</H2>
|
<H2>Special features:</H2>
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>
|
||||||
ISO 9660 formatter and burner for CD, DVD, BD-RE are fixely integrated.
|
ISO 9660 formatter and burner for CD, DVD, BD are fixely integrated.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Operates on an existing ISO image or creates a new one.
|
Operates on an existing ISO image or creates a new one.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Copies files from filesystem into the ISO image.
|
Copies files from filesystem into the ISO image and vice versa.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Renames or deletes file objects in the ISO image.
|
Changes file properties, renames or deletes file objects in the ISO image.
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
Changes file properties in the ISO image.
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Can write result as completely new image to optical media or
|
Can record and restore hard link relations, ACL, and xattr.
|
||||||
filesystem objects.
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Can write result as add-on session to appendable multi-session media,
|
Can attach MD5 checksums to each data file and the whole session.
|
||||||
to overwriteable media, to regular files, and to block devices.
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Can copy single files from ISO image to disk filesystem.
|
File content may get zisofs or gzip compressed or filtered by external
|
||||||
|
processes.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Writes result as completely new image or as add-on session
|
||||||
|
to optical media or filesystem objects.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Can activate ISOLINUX boot images by El Torito boot record.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Can perform multi-session tasks as emulation of mkisofs and cdrecord.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Can issue commands to mount older sessions on Linux or FreeBSD.
|
||||||
|
</LI>
|
||||||
|
<LI>
|
||||||
|
Can check media for damages and copy readable blocks to disk.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Scans for optical drives, blanks re-useable optical media, formats media.
|
Scans for optical drives, blanks re-useable optical media, formats media.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Suitable for:
|
Suitable for:
|
||||||
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-RE.
|
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-R, BD-RE.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
<LI>
|
||||||
Reads its instructions from command line arguments, dialog, and batch files.
|
Reads its instructions from command line arguments, dialog, and batch files.
|
||||||
@ -127,9 +140,6 @@ Reads its instructions from command line arguments, dialog, and batch files.
|
|||||||
<LI>
|
<LI>
|
||||||
Provides navigation commands for interactive ISO image manipulation.
|
Provides navigation commands for interactive ISO image manipulation.
|
||||||
</LI>
|
</LI>
|
||||||
<LI>
|
|
||||||
Adjustable thresholds for abort, exit value, and problem reporting.
|
|
||||||
</LI>
|
|
||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
</P>
|
</P>
|
||||||
@ -137,8 +147,14 @@ Adjustable thresholds for abort, exit value, and problem reporting.
|
|||||||
<P>
|
<P>
|
||||||
<H2>Command Examples:</H2>
|
<H2>Command Examples:</H2>
|
||||||
<DL>
|
<DL>
|
||||||
|
|
||||||
<DT>Get an overview of drives and their addresses</DT>
|
<DT>Get an overview of drives and their addresses</DT>
|
||||||
<DD>#<KBD> xorriso -devices</KBD></DD>
|
<DD>#<KBD> xorriso -devices</KBD></DD>
|
||||||
|
<DD><KBD>...</KBD></DD>
|
||||||
|
<DD><KBD>0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'</KBD></DD>
|
||||||
|
<DD><KBD>1 -dev '/dev/scd1' rwrw-- : 'PHILIPS ' 'SPD3300L'</KBD></DD>
|
||||||
|
<DD><KBD>2 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'</KBD></DD>
|
||||||
|
<DD><KBD>...</KBD></DD>
|
||||||
<DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX .
|
<DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX .
|
||||||
</DT>
|
</DT>
|
||||||
<DT>Ordinary users should then get granted rw access to the /dev files
|
<DT>Ordinary users should then get granted rw access to the /dev files
|
||||||
@ -167,7 +183,7 @@ eventually prepare yet unused BD-RE:</DT>
|
|||||||
<DD>$<KBD> xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
|
<DD>$<KBD> xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
|
||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
|
|
||||||
<DT>Check the result:</DT>
|
<DT>Have a look at the result:</DT>
|
||||||
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
@ -229,16 +245,21 @@ Important: -indev and -outdev have to be different drives.
|
|||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
<DT>Dialog mode accepts one or more options per line. An option and all its
|
<DT>Dialog mode accepts one or more options per line. An option and all its
|
||||||
arguments have to be given in one single line. Command -end stops the program
|
arguments have to be given in one single line. Backslash may be used to mark
|
||||||
run. It will write eventually pending changes to media, if that has not
|
a line as incomplete so it gets continued by the next input line.
|
||||||
already been done by a previous -commit.</DT>
|
<BR>
|
||||||
|
Command -end stops the program run. It will write eventually pending changes
|
||||||
|
to media, if that has not already been done by a previous -commit.</DT>
|
||||||
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
<DD>$<KBD> xorriso -dialog on</KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
|
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies /movies</B></KBD></DD>
|
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies \</B></KBD></DD>
|
||||||
|
<DD><KBD>Trailing backslash : Enter rest of line (or @@@ to clear it) :
|
||||||
|
</KBD></DD>
|
||||||
|
<DD><KBD><B> /movies</B></KBD></DD>
|
||||||
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
<DD>Available navigation commands: -cd, -ls, -du, -find</DD>
|
||||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||||
<DD><KBD><B>-commit</B></KBD></DD>
|
<DD><KBD><B>-commit</B></KBD></DD>
|
||||||
@ -250,48 +271,149 @@ already been done by a previous -commit.</DT>
|
|||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
<DT>The following command can be run on blank media to create a
|
<DT>The following command performs incremental backup.
|
||||||
copy of the mentioned disk directory trees, and it can be run on appendable
|
It can be run on blank media to create a copy of the mentioned disk
|
||||||
media to perform a minimal set of change operations which update the
|
directory trees, and it can be run on appendable media to perform a
|
||||||
old ISO copies to match the new disk trees.
|
minimal set of change operations which update the old ISO copies
|
||||||
Older states can be retrieved by help of mount option "session=" from CD-R[W],
|
to match the new disk trees.
|
||||||
by help of "sbsector=" from other media.
|
Older states can be retrieved by help of mount options like "sbsector="
|
||||||
So this constitutes true incremental backup.
|
or by help of xorriso option -mount.
|
||||||
<BR>
|
<BR>
|
||||||
The copies will be complete, except all file names ending
|
Eventual ACL, xattr and hardlink relations will be recorded. MD5 checksums
|
||||||
with ".o" or ".swp" which are excluded by options -not_leaf.
|
will be computed and recorded. Data reading will be avoided by accelerator
|
||||||
|
option -disk_dev_ino. After writing, the new session will be checked
|
||||||
|
by its recorded MD5.
|
||||||
|
<BR>
|
||||||
|
Only blank media or media with volume id "PROJECTS_MAIL_..." will be accepted.
|
||||||
|
Files with names ending by ".o" or ".swp" are excluded by options -not_leaf.
|
||||||
</DT>
|
</DT>
|
||||||
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
<DD>$<KBD> xorriso -for_backup -disk_dev_ino on \</KBD></DD>
|
||||||
|
<DD><KBD> -assert_volid 'PROJECTS_MAIL_*' FATAL \</KBD></DD>
|
||||||
|
<DD><KBD> -dev /dev/sr0 \</KBD></DD>
|
||||||
<DD><KBD> -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
|
<DD><KBD> -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
|
||||||
<DD><KBD> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
<DD><KBD> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
||||||
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
||||||
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
||||||
<DD><KBD> -commit -toc -eject all</KBD></DD>
|
<DD><KBD> -commit -toc -check_md5 FAILURE -- -eject all</KBD></DD>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
To apply zisofs compression to those data files which get newly copied from
|
||||||
|
the local filesystem, perform immediately before -commit :
|
||||||
|
<DD><KBD> -hardlinks perform_update \</KBD></DD>
|
||||||
|
<DD>
|
||||||
|
<KBD> -find / -type f -pending_data -exec set_filter --zisofs -- \</KBD></DD>
|
||||||
|
</DD>
|
||||||
|
</DT>
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
Operating systems usually mount the most recent session on media.
|
||||||
|
xorriso can issue the appropriate mount commands for older sessions.
|
||||||
|
First get an overview of the sessions on the media:
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -toc</KBD></DD>
|
||||||
|
<PRE>
|
||||||
|
TOC layout : Idx , sbsector , Size , Volume Id
|
||||||
|
ISO session : 1 , 0 , 104719s , PROJECTS_MAIL_2008_08_10_231435
|
||||||
|
ISO session : 2 , 106928 , 6785s , PROJECTS_MAIL_2008_08_14_184548
|
||||||
|
...
|
||||||
|
ISO session : 76 , 820384 , 11035s , PROJECTS_MAIL_2009_01_04_191150
|
||||||
|
</PRE>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
Then become superuser and let xorriso mount the session of August 14, 2008
|
||||||
|
to directory /mnt:
|
||||||
|
</DT>
|
||||||
|
<DD>#<KBD>
|
||||||
|
xorriso -osirrox on -mount /dev/sr0 volid '*_2008_08_14_*' /mnt
|
||||||
|
</KBD></DD>
|
||||||
|
<DT>
|
||||||
|
To be later unmounted by: <KBD>umount /mnt</KBD>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
<DT>
|
||||||
|
After the user has already created a suitable file tree on disk
|
||||||
|
and copied the ISOLINUX files into subdirectory ./boot/isolinux of
|
||||||
|
that tree, xorriso can burn an El Torito bootable media:
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
|
||||||
|
<DD><KBD> -map /home/me/ISOLINUX_prepared_tree / \</KBD></DD>
|
||||||
|
<DD><KBD> -boot_image isolinux dir=/boot/isolinux</KBD></DD>
|
||||||
|
<DT>
|
||||||
|
An additional MBR is generated if the file isolinux.bin is modern enough
|
||||||
|
(syslinux version 3.72) and ready for "isohybrid". An MBR enables booting
|
||||||
|
from hard disk or USB stick.
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
<DT>ISO images may not only be stored on optical media but also in
|
||||||
|
regular disk files or block devices for full multi-session operation.
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> xorriso -dev /tmp/regular_file ...other.options...</DD>
|
||||||
|
<DT>
|
||||||
|
A default setting for safety reasons requires that files below /dev/
|
||||||
|
need prefix "stdio:" if they do not lead to MMC burner devices.
|
||||||
|
Be cautious not to overwrite your hard disk instead of your USB stick:
|
||||||
|
</DT>
|
||||||
|
<DD>$<KBD> xorriso -dev stdio:/dev/sdb ...other.options...</DD>
|
||||||
|
|
||||||
|
<DT>Other file types are suitable only for writing but not for reading:</DT>
|
||||||
|
<DD>$<KBD> xorriso -outdev /tmp/named_pipe ...other.options...</DD>
|
||||||
|
|
||||||
<DT>In batch mode it is possible to operate xorriso in a pipeline
|
<DT>In batch mode it is possible to operate xorriso in a pipeline
|
||||||
with an external consumer of the generated ISO image. Any message
|
with an external consumer of the generated ISO image. Any message
|
||||||
output will be redirected to stderr in this case.</DT>
|
output will be redirected to stderr in this case.
|
||||||
|
Examples for consumers are cdrecord or growisofs on operating systems
|
||||||
|
where xorriso cannot operate the burner drive directly,
|
||||||
|
or a ssh pipe to another system which has the desired drive
|
||||||
|
and a suitable burn program.</DT>
|
||||||
<DD>$<KBD> xorriso -outdev - ...other.options... | consumer</KBD></DD>
|
<DD>$<KBD> xorriso -outdev - ...other.options... | consumer</KBD></DD>
|
||||||
|
|
||||||
|
|
||||||
<DT>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
<DT>Enable reverse operation of xorriso and copy some single files to disk:
|
<DT>
|
||||||
<DD>$<KBD> xorriso -indev /dev/sr0 \</KBD></DD>
|
Let xorriso serve underneath growisofs via its alias name "xorrisofs"
|
||||||
<DD><KBD> -osirrox on \</KBD></DD>
|
which enables mkisofs emulation:
|
||||||
<DD><KBD> -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
|
</DT>
|
||||||
<DD><KBD> /home/her/buttercup_dir \</KBD>
|
<DD>$<KBD> export MKISOFS="xorrisofs"</KBD></DD>
|
||||||
</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>
|
<DT>
|
||||||
<HR>
|
<HR>
|
||||||
</DT>
|
</DT>
|
||||||
|
|
||||||
|
<DT>If for any reason the reading operating system mishandles the ISO image
|
||||||
|
or some files in it, one may enable reverse operation of xorriso and copy
|
||||||
|
files or trees to disk:
|
||||||
|
<DD>$<KBD> xorriso -acl on -xattr on \</KBD></DD>
|
||||||
|
<DD><KBD> -indev /dev/sr0 \</KBD></DD>
|
||||||
|
<DD><KBD> -osirrox on \</KBD></DD>
|
||||||
|
<DD><KBD> -cpx '/pictures/private/horses*/*buttercup*' \</KBD></DD>
|
||||||
|
<DD><KBD> /home/her/buttercup_dir -- \</KBD>
|
||||||
|
<DD><KBD> -extract /sounds /home/her/sounds_from_me</KBD></DD>
|
||||||
|
</DD>
|
||||||
|
<DT>Consider to enter dialog mode and use commands like
|
||||||
|
<KBD>-cd , -du , -lsl , -find<KBD>.
|
||||||
|
<DT>
|
||||||
|
<HR>
|
||||||
|
</DT>
|
||||||
|
|
||||||
|
|
||||||
<DT>Get overview of the options:</DT>
|
<DT>Get overview of the options:</DT>
|
||||||
<DD>$<KBD> <A HREF="xorriso_help">xorriso -help</A></KBD></DD>
|
<DD>$<KBD> <A HREF="xorriso_help">xorriso -help</A></KBD></DD>
|
||||||
@ -300,10 +422,6 @@ output will be redirected to stderr in this case.</DT>
|
|||||||
<DD>$<KBD> <A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD>
|
<DD>$<KBD> <A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD>
|
||||||
</DL>
|
</DL>
|
||||||
|
|
||||||
|
|
||||||
Testers wanted who are willing to risk some double layer DVD media or
|
|
||||||
are interested in using BD-R media.
|
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
@ -311,9 +429,10 @@ are interested in using BD-R media.
|
|||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Download as source code (see README):</H3></DT>
|
<DT><H3>Download as source code (see README):</H3></DT>
|
||||||
<DD><A HREF="xorriso-0.1.8.pl00.tar.gz">xorriso-0.1.8.pl00.tar.gz</A>
|
<DD><A HREF="xorriso-0.4.2.pl01.tar.gz">xorriso-0.4.2.pl01.tar.gz</A>
|
||||||
(990 KB).
|
(1295 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
<DD>(Released 29 Aug 2009)</DD>
|
||||||
</DL>
|
</DL>
|
||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
@ -336,52 +455,100 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
|
|||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Bug fixes towards xorriso-0.1.6.pl00:
|
Bug fixes towards xorriso-0.4.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>-indev -outdev modifying to overwriteable target yielded unmountable results</LI>
|
<LI>xorriso -as mkisofs did not understand the -C option of growisofs any more
|
||||||
<LI>Major,minor numbers of device files appeared as 0,1 in next session</LI>
|
<LI>Option -devices stalled if a U3 enhanced memory stick was present</LI>
|
||||||
|
<!--
|
||||||
|
<LI>- none -</LI>
|
||||||
|
-->
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
</P>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
Bug fixes towards xorriso-0.4.2.pl00:
|
||||||
|
<UL>
|
||||||
|
<LI>-cut_out deleted previously cut-out pieces of the same file</LI>
|
||||||
</UL>
|
</UL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version xorriso-0.1.6.pl00:
|
Enhancements towards previous stable version xorriso-0.4.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>New option -stream_recording for full speed with DVD-RAM and BD-RE</LI>
|
<LI>New option -md5, new -as mkisofs option --md5</LI>
|
||||||
<LI>New options -osirrox and -cpx allow to extract single files from ISO image
|
<LI>New options -check_md5, -check_md5_r</LI>
|
||||||
|
<LI>New find actions check_md5 get_md5, get_any_xattr, make_md5</LI>
|
||||||
|
<LI>New find tests -has_md5, -has_any_xattr</LI>
|
||||||
|
<LI>New option -list_profiles</LI>
|
||||||
|
<LI>New option -calm_drive</LI>
|
||||||
|
<LI>Options -lsl and -lsdl now display correct link counts if -hardlinks is on
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<LI>- none -</LI>
|
||||||
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
|
<H3>
|
||||||
|
Library copies included in xorriso tarballs:
|
||||||
|
</H3>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.1.9 :</H3></DT>
|
<DT>libburn-0.7.1</DT>
|
||||||
<DD>Bug fixes towards xorriso-0.1.8.pl00:
|
<DD>reads and writes data from and to CD, DVD, BD.</DD>
|
||||||
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
|
developed and maintained since August 2006 by
|
||||||
|
Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||||
|
<DT>libisofs-0.6.23</DT>
|
||||||
|
<DD>operates on ISO 9660 filesystem images.</DD>
|
||||||
|
<DD>(By Vreixo Formoso, Mario Danic and Thomas Schmitt
|
||||||
|
from team of libburnia-project.org)</DD>
|
||||||
|
<DT>libisoburn-0.4.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>
|
||||||
|
<DD> </DD>
|
||||||
|
<DT>The source code of this software is independent of
|
||||||
|
cdrecord and mkisofs.</DT>
|
||||||
|
</DL>
|
||||||
|
</P>
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
<DL>
|
||||||
|
<DT><H3>Development snapshot, version 0.4.3 :</H3></DT>
|
||||||
|
<DD>Bug fixes towards xorriso-0.4.2.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>-cut_out deleted previously cut-out pieces of the same file</LI>
|
||||||
-chmod unintentionally performed o-x as first operation
|
<LI>-for_backup did not enable -xattr and -md5 if no drive was chosen yet</LI>
|
||||||
</LI>
|
<LI>With -as cdrecord : -xa1 and -xamix were ignored although they do matter</LI>
|
||||||
|
<LI>xorrisofs -help, xorrecord -help displayed original xorriso -help</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>- none yet -</LI>
|
<LI>- none yet -</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD>Enhancements towards stable version 0.1.8.pl00:
|
<DD>Enhancements towards stable version 0.4.2.pl01:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
|
||||||
New options -cpax, -cp_rx, -cp_rax to restore files and trees from ISO to disk
|
|
||||||
</LI>
|
</LI>
|
||||||
<LI>New option -paste_in to copy ISO files into parts of disk files</LI>
|
|
||||||
<LI>New option -extract restores with arguments of -map or -update_r</LI>
|
<LI>New option -scdbackup_tag</LI>
|
||||||
|
<LI>Option -toc now reports "Media product:"</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>- none yet -</LI>
|
<LI>- none yet -</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_xorriso_devel">README 0.1.9</A>
|
<DD><A HREF="README_xorriso_devel">README 0.4.3</A>
|
||||||
<DD><A HREF="xorriso_help_devel">xorriso_0.1.9 -help</A></DD>
|
<DD><A HREF="xorriso_help_devel">xorriso_0.4.3 -help</A></DD>
|
||||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.9)</A></DD>
|
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.4.3)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>If you want to distribute development versions of xorriso, then use
|
<DT>If you want to distribute development versions of xorriso, then use
|
||||||
this tarball which produces static linking between xorriso and the
|
this tarball which produces static linking between xorriso and the
|
||||||
@ -391,8 +558,8 @@ libburnia libraries.
|
|||||||
installation see README)
|
installation see README)
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="xorriso-0.1.9.tar.gz">xorriso-0.1.9.tar.gz</A>
|
<A HREF="xorriso-0.4.3.tar.gz">xorriso-0.4.3.tar.gz</A>
|
||||||
(990 KB).
|
(1310 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DT>A dynamically linked development version of xorriso can be obtained
|
<DT>A dynamically linked development version of xorriso can be obtained
|
||||||
from repositories of
|
from repositories of
|
||||||
@ -407,7 +574,9 @@ versions for dynamic linking. Only release versions are safe for that.
|
|||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
<DD>Download: <KBD><B>bzr branch lp:libisofs</B></KBD></DD>
|
<DD>Download:
|
||||||
|
<KBD><B>bzr branch lp:~libburnia-team/libisofs/scdbackup</B></KBD>
|
||||||
|
</DD>
|
||||||
<DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
<DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||||
</KBD></DD>
|
</KBD></DD>
|
||||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
|
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
|
||||||
@ -433,7 +602,6 @@ Very special thanks to Andy Polyakov whose
|
|||||||
provide the libburnia project with invaluable examples on how to deal
|
provide the libburnia project with invaluable examples on how to deal
|
||||||
with DVD media and how to emulate multi-session on overwriteable media.
|
with DVD media and how to emulate multi-session on overwriteable media.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
|
|
||||||
@ -449,6 +617,11 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
|
|||||||
<A href="http://sourceforge.net">
|
<A href="http://sourceforge.net">
|
||||||
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
|
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
|
||||||
<!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> -->
|
<!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> -->
|
||||||
|
<P>
|
||||||
|
Enjoying a FreeBSD shell account with the opportunity to
|
||||||
|
build, install and test xorriso at<BR>
|
||||||
|
<A HREF="http://www.en.free-shells.com.ar">free-shells.com.ar</A>
|
||||||
|
</P>
|
||||||
</FONT></CENTER>
|
</FONT></CENTER>
|
||||||
<HR>
|
<HR>
|
||||||
<DL>
|
<DL>
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
pkgconfigdir=$(libdir)/pkgconfig
|
|
||||||
|
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
|
||||||
|
# was: pkgconfigdir=$(libdir)/pkgconfig
|
||||||
|
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
|
||||||
|
|
||||||
libincludedir=
|
libincludedir=
|
||||||
|
|
||||||
lib_LTLIBRARIES =
|
lib_LTLIBRARIES =
|
||||||
@ -16,9 +20,24 @@ xorriso_xorriso_CPPFLAGS = -I./libburn -I./libisofs -I./libisoburn -I./xorriso
|
|||||||
|
|
||||||
# No readline in the vanilla version because the necessary headers
|
# No readline in the vanilla version because the necessary headers
|
||||||
# are in a separate readline-development package.
|
# are in a separate readline-development package.
|
||||||
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
|
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN \
|
||||||
|
$(READLINE_DEF) $(LIBACL_DEF) $(XATTR_DEF) \
|
||||||
|
$(EXTF_DEF) $(EXTF_SUID_DEF) $(ZLIB_DEF)
|
||||||
|
|
||||||
|
xorriso_xorriso_LDADD = $(THREAD_LIBS) $(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# This looks quite ugly with make install: xorriso.c is compiled twice again
|
||||||
|
#
|
||||||
|
# Trying to create a build timestamp file
|
||||||
|
#
|
||||||
|
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
|
||||||
|
# phony targets get rebuilt every time
|
||||||
|
# .PHONY: xorriso/xorriso_buildstamp.h
|
||||||
|
# xorriso/xorriso_buildstamp.h:
|
||||||
|
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
# cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
xorriso_xorriso_LDADD = $(THREAD_LIBS)
|
|
||||||
|
|
||||||
xorriso_xorriso_SOURCES = \
|
xorriso_xorriso_SOURCES = \
|
||||||
\
|
\
|
||||||
@ -28,6 +47,7 @@ xorriso_xorriso_SOURCES = \
|
|||||||
xorriso/xorrisoburn.h \
|
xorriso/xorrisoburn.h \
|
||||||
xorriso/xorrisoburn.c \
|
xorriso/xorrisoburn.c \
|
||||||
xorriso/xorriso_timestamp.h \
|
xorriso/xorriso_timestamp.h \
|
||||||
|
xorriso/xorriso_buildstamp.h \
|
||||||
\
|
\
|
||||||
libisoburn/libisoburn.h \
|
libisoburn/libisoburn.h \
|
||||||
libisoburn/isoburn.h \
|
libisoburn/isoburn.h \
|
||||||
@ -36,9 +56,9 @@ xorriso_xorriso_SOURCES = \
|
|||||||
libisoburn/burn_wrap.c \
|
libisoburn/burn_wrap.c \
|
||||||
libisoburn/data_source.c \
|
libisoburn/data_source.c \
|
||||||
\
|
\
|
||||||
|
libisofs/libisofs.h \
|
||||||
libisofs/builder.h \
|
libisofs/builder.h \
|
||||||
libisofs/builder.c \
|
libisofs/builder.c \
|
||||||
libisofs/error.h \
|
|
||||||
libisofs/node.h \
|
libisofs/node.h \
|
||||||
libisofs/node.c \
|
libisofs/node.c \
|
||||||
libisofs/tree.h \
|
libisofs/tree.h \
|
||||||
@ -50,7 +70,6 @@ xorriso_xorriso_SOURCES = \
|
|||||||
libisofs/fsource.h \
|
libisofs/fsource.h \
|
||||||
libisofs/fsource.c \
|
libisofs/fsource.c \
|
||||||
libisofs/fs_local.c \
|
libisofs/fs_local.c \
|
||||||
libisofs/fs_image.h \
|
|
||||||
libisofs/fs_image.c \
|
libisofs/fs_image.c \
|
||||||
libisofs/messages.h \
|
libisofs/messages.h \
|
||||||
libisofs/messages.c \
|
libisofs/messages.c \
|
||||||
@ -69,6 +88,7 @@ xorriso_xorriso_SOURCES = \
|
|||||||
libisofs/ecma119_tree.h \
|
libisofs/ecma119_tree.h \
|
||||||
libisofs/ecma119_tree.c \
|
libisofs/ecma119_tree.c \
|
||||||
libisofs/writer.h \
|
libisofs/writer.h \
|
||||||
|
libisofs/buffer.h \
|
||||||
libisofs/buffer.c \
|
libisofs/buffer.c \
|
||||||
libisofs/rockridge.h \
|
libisofs/rockridge.h \
|
||||||
libisofs/rockridge.c \
|
libisofs/rockridge.c \
|
||||||
@ -81,7 +101,16 @@ xorriso_xorriso_SOURCES = \
|
|||||||
libisofs/find.c \
|
libisofs/find.c \
|
||||||
libisofs/filter.h \
|
libisofs/filter.h \
|
||||||
libisofs/filter.c \
|
libisofs/filter.c \
|
||||||
libisofs/filters/xor_encrypt.c \
|
libisofs/filters/external.c \
|
||||||
|
libisofs/filters/zisofs.c \
|
||||||
|
libisofs/filters/gzip.c \
|
||||||
|
libisofs/system_area.h \
|
||||||
|
libisofs/system_area.c \
|
||||||
|
libisofs/make_isohybrid_mbr.c \
|
||||||
|
libisofs/aaip_0_2.h \
|
||||||
|
libisofs/aaip_0_2.c \
|
||||||
|
libisofs/md5.h \
|
||||||
|
libisofs/md5.c \
|
||||||
\
|
\
|
||||||
libburn/async.c \
|
libburn/async.c \
|
||||||
libburn/async.h \
|
libburn/async.h \
|
||||||
@ -137,7 +166,6 @@ xorriso_xorriso_SOURCES = \
|
|||||||
\
|
\
|
||||||
version.h
|
version.h
|
||||||
|
|
||||||
|
|
||||||
noinst_PROGRAMS = \
|
noinst_PROGRAMS = \
|
||||||
test/compare_file
|
test/compare_file
|
||||||
|
|
||||||
@ -151,6 +179,30 @@ test_compare_file_LDADD =
|
|||||||
test_compare_file_SOURCES = test/compare_file.c
|
test_compare_file_SOURCES = test/compare_file.c
|
||||||
|
|
||||||
|
|
||||||
|
# Install symbolic links to the xorriso binary
|
||||||
|
#
|
||||||
|
install-exec-hook:
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox
|
||||||
|
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi
|
||||||
|
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Alternative to the disabled .PHONY above.
|
||||||
|
# Trying to create a build timestamp file semi-manually: make buildstamped
|
||||||
|
#
|
||||||
|
buildstamp:
|
||||||
|
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
|
||||||
|
cat xorriso/xorriso_buildstamp.h
|
||||||
|
|
||||||
|
# For now make buildstamped has to be performed manually.
|
||||||
|
buildstamped: buildstamp
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
# Indent source files
|
# Indent source files
|
||||||
@ -169,8 +221,8 @@ indent: $(indent_files)
|
|||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
# Extra things
|
# Extra things
|
||||||
nodist_pkgconfig_DATA = \
|
# nodist_pkgconfig_DATA = \
|
||||||
xorriso.pc
|
# xorriso.pc
|
||||||
|
|
||||||
man_MANS = xorriso/xorriso.1
|
man_MANS = xorriso/xorriso.1
|
||||||
|
|
||||||
@ -184,6 +236,17 @@ EXTRA_DIST = \
|
|||||||
COPYING \
|
COPYING \
|
||||||
INSTALL \
|
INSTALL \
|
||||||
xorriso/changelog.txt \
|
xorriso/changelog.txt \
|
||||||
$(man_MANS)
|
xorriso/xorriso_buildstamp_none.h \
|
||||||
|
$(man_MANS) \
|
||||||
|
doc/susp_aaip_2_0.txt \
|
||||||
|
doc/susp_aaip_isofs_names.txt \
|
||||||
|
doc/zisofs_format.txt \
|
||||||
|
libisofs/aaip-os-dummy.c \
|
||||||
|
libisofs/aaip-os-linux.c \
|
||||||
|
libisofs/aaip-os-freebsd.c \
|
||||||
|
libburn/os-dummy.h \
|
||||||
|
libburn/os-freebsd.h \
|
||||||
|
libburn/os-linux.h \
|
||||||
|
libburn/sg-dummy.c \
|
||||||
|
libburn/sg-freebsd.c \
|
||||||
|
libburn/sg-linux.c
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.06.21.180701"
|
#define Xorriso_timestamP "2009.09.22.153001"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
|||||||
a command line oriented batch and dialog tool which creates, loads,
|
a command line oriented batch and dialog tool which creates, loads,
|
||||||
manipulates and burns ISO 9660 filesystem images.
|
manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2.
|
Provided under GPL version 2.
|
||||||
|
|
||||||
@ -14,14 +14,17 @@
|
|||||||
#ifndef Xorrisoburn_includeD
|
#ifndef Xorrisoburn_includeD
|
||||||
#define Xorrisoburn_includeD yes
|
#define Xorrisoburn_includeD yes
|
||||||
|
|
||||||
struct XorrisO;
|
|
||||||
struct FindjoB;
|
|
||||||
|
|
||||||
/* The minimum version of libisoburn to be used with this version of xorriso
|
/* The minimum version of libisoburn to be used with this version of xorriso
|
||||||
*/
|
*/
|
||||||
#define xorriso_libisoburn_req_major 0
|
#define xorriso_libisoburn_req_major 0
|
||||||
#define xorriso_libisoburn_req_minor 1
|
#define xorriso_libisoburn_req_minor 4
|
||||||
#define xorriso_libisoburn_req_micro 9
|
#define xorriso_libisoburn_req_micro 2
|
||||||
|
|
||||||
|
|
||||||
|
struct SpotlisT; /* List of intervals with different read qualities */
|
||||||
|
struct CheckmediajoB; /* Parameters for Xorriso_check_media() */
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
@ -54,9 +57,16 @@ int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
|||||||
|
|
||||||
/* @param flag bit0=report about output drive
|
/* @param flag bit0=report about output drive
|
||||||
bit1=short report form
|
bit1=short report form
|
||||||
|
bit2=do not try to read ISO heads
|
||||||
|
bit3=report to info channel (else to result channel)
|
||||||
*/
|
*/
|
||||||
int Xorriso_toc(struct XorrisO *xorriso, int flag);
|
int Xorriso_toc(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= no output if no boot record was found
|
||||||
|
bit3= report to info channel (else to result channel)
|
||||||
|
*/
|
||||||
|
int Xorriso_show_boot_info(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
|
int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
||||||
@ -69,15 +79,24 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
|||||||
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* @param flag bit0= try to achieve faster formatting
|
/* @param flag bit0= try to achieve faster formatting
|
||||||
|
bit1= use parameter size (else use default size)
|
||||||
|
bit2= do not re-aquire drive
|
||||||
|
bit7= by_index mode:
|
||||||
|
bit8 to bit15 contain the index of the format to use.
|
||||||
@return 0=failure, did not touch media , -1=failure, altered media
|
@return 0=failure, did not touch media , -1=failure, altered media
|
||||||
1=success, altered media , 2=success, did not touch media
|
1=success, altered media , 2=success, did not touch media
|
||||||
*/
|
*/
|
||||||
int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
int Xorriso_format_media(struct XorrisO *xorriso, off_t size, int flag);
|
||||||
|
|
||||||
/* @return <=0 error, 1 success
|
/* @return <=0 error, 1 success
|
||||||
*/
|
*/
|
||||||
int Xorriso_list_formats(struct XorrisO *xorriso, int flag);
|
int Xorriso_list_formats(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit1= obtain outdrive, else indrive
|
||||||
|
@return <=0 error, 1 success
|
||||||
|
*/
|
||||||
|
int Xorriso_list_profiles(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
/* @param flag bit2= formatting rather than blanking
|
/* @param flag bit2= formatting rather than blanking
|
||||||
@return 0=failure, did not touch media , -1=failure, altered media
|
@return 0=failure, did not touch media , -1=failure, altered media
|
||||||
1=success, altered media , 2=success, did not touch media
|
1=success, altered media , 2=success, did not touch media
|
||||||
@ -168,6 +187,12 @@ int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
|||||||
void *dir_node_generic, char *dir_path,
|
void *dir_node_generic, char *dir_path,
|
||||||
struct stat *dir_stbuf, int depth, int flag);
|
struct stat *dir_stbuf, int depth, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= do not dive into trees
|
||||||
|
bit1= do not perform job->action on resulting node array
|
||||||
|
*/
|
||||||
|
int Xorriso_findi_sorted(struct XorrisO *xorriso, struct FindjoB *job,
|
||||||
|
off_t boss_mem, int filec, char **filev, int flag);
|
||||||
|
|
||||||
/* @param flag bit0= do not mark image as changed */
|
/* @param flag bit0= do not mark image as changed */
|
||||||
int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag);
|
int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag);
|
||||||
|
|
||||||
@ -188,7 +213,13 @@ int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
|||||||
*/
|
*/
|
||||||
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
|
/* @param write_start_address is valid if >=0
|
||||||
|
@param tsize is valid if >0
|
||||||
|
@param flag bit0= grow_overwriteable_iso
|
||||||
|
bit1= do_isosize
|
||||||
|
*/
|
||||||
|
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||||
|
char *track_source, off_t tsize, int flag);
|
||||||
|
|
||||||
/* @param flag bit1= outdev rather than indev
|
/* @param flag bit1= outdev rather than indev
|
||||||
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
||||||
@ -196,11 +227,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, char *track_source, int flag);
|
|||||||
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
||||||
char profile_name[80], int flag);
|
char profile_name[80], int flag);
|
||||||
|
|
||||||
/* @param flag bit0= do not mark image as changed */
|
|
||||||
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
|
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
||||||
|
bit1= dig out the most original stream for reading
|
||||||
*/
|
*/
|
||||||
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
void *node_pt, void **stream, int flag);
|
void *node_pt, void **stream, int flag);
|
||||||
@ -259,5 +287,205 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
|||||||
char *img_path, char *disk_path,
|
char *img_path, char *disk_path,
|
||||||
char type_text[5], int flag);
|
char type_text[5], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the official libburn address of an address string. This may fail
|
||||||
|
if the string does not constitute a valid drive address.
|
||||||
|
@param official_adr must offer SfileadrL bytes of reply buffer
|
||||||
|
@return 1 = success , 0 = failure , -1 = severe error
|
||||||
|
*/
|
||||||
|
int Xorriso_libburn_adr(struct XorrisO *xorriso, char *address_string,
|
||||||
|
char official_adr[], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit1= obtain info from outdev
|
||||||
|
*/
|
||||||
|
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag bit0= obtain iso_lba from indev
|
||||||
|
bit1= head_buffer already contains a valid head
|
||||||
|
bit2= issue message about success
|
||||||
|
bit3= check whether source blocks are banned by in_sector_map
|
||||||
|
*/
|
||||||
|
int Xorriso_update_iso_lba0(struct XorrisO *xorriso, int iso_lba, int isosize,
|
||||||
|
char *head_buffer, struct CheckmediajoB *job,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_get_local_charset(struct XorrisO *xorriso, char **name, int flag);
|
||||||
|
|
||||||
|
int Xorriso_set_local_charset(struct XorrisO *xorriso, char *name, int flag);
|
||||||
|
|
||||||
|
int Xorriso_destroy_node_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_destroy_hln_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_destroy_di_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_new_node_array(struct XorrisO *xorriso, off_t mem_limit,
|
||||||
|
int addon_nodes, int flag);
|
||||||
|
|
||||||
|
int Xorriso_sort_node_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_new_hln_array(struct XorrisO *xorriso, off_t mem_limit, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= allocate xorriso->node_targets too
|
||||||
|
*/
|
||||||
|
int Xorriso_restore_node_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
|
||||||
|
struct CheckmediajoB *job, int flag);
|
||||||
|
|
||||||
|
int Xorriso_extract_cut(struct XorrisO *xorriso,
|
||||||
|
char *img_path, char *disk_path,
|
||||||
|
off_t img_offset, off_t bytes, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* @return 1=ok 2=ok, is default setting */
|
||||||
|
int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024],
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param flag bit0= print mount command to result channel rather than
|
||||||
|
performing it
|
||||||
|
*/
|
||||||
|
int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
||||||
|
char *adr_value, char *cmd, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param node Opaque handle to IsoNode which is to be inquired instead of
|
||||||
|
path if it is not NULL.
|
||||||
|
@param path is used as address if node is NULL.
|
||||||
|
@param acl_text if acl_text is not NULL, then *acl_text will be set to the
|
||||||
|
ACL text (without comments) of the file object. In this
|
||||||
|
case it finally has to be freed by the caller.
|
||||||
|
@param flag bit0= do not report to result but only retrieve ACL text
|
||||||
|
bit1= just check for existence of ACL, do not allocate and
|
||||||
|
set acl_text but return 1 or 2
|
||||||
|
@return 2 ok, no ACL available, eventual *acl_text will be NULL
|
||||||
|
1 ok, ACL available, eventual *acl_text stems from malloc()
|
||||||
|
<=0 error
|
||||||
|
*/
|
||||||
|
int Xorriso_getfacl(struct XorrisO *xorriso, void *node,
|
||||||
|
char *path, char **acl_text, int flag);
|
||||||
|
|
||||||
|
int Xorriso_getfattr(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
char **attr_text, int flag);
|
||||||
|
|
||||||
|
/* Calls iso_image_set_ignore_aclea() according to xorriso->do_aaip */
|
||||||
|
int Xorriso_set_ignore_aclea(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* @param node Opaque handle to IsoNode which is to be manipulated
|
||||||
|
instead of path if it is not NULL.
|
||||||
|
@param path is used as address if node is NULL.
|
||||||
|
@param access_text "access" ACL in long text form
|
||||||
|
@param default_text "default" ACL in long text form
|
||||||
|
@param flag Unused yet, submit 0
|
||||||
|
@return >0 success , <=0 failure
|
||||||
|
*/
|
||||||
|
int Xorriso_setfacl(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
char *access_text, char *default_text, int flag);
|
||||||
|
|
||||||
|
int Xorriso_get_attrs(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
size_t *num_attrs, char ***names,
|
||||||
|
size_t **value_lengths, char ***values, int flag);
|
||||||
|
|
||||||
|
int Xorriso_setfattr(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
size_t num_attrs, char **names,
|
||||||
|
size_t *value_lengths, char **values, int flag);
|
||||||
|
|
||||||
|
int Xorriso_record_dev_inode(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
dev_t dev, ino_t ino,
|
||||||
|
void *in_node, char *iso_path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_local_getfacl(struct XorrisO *xorriso, char *disk_path,
|
||||||
|
char **text, int flag);
|
||||||
|
|
||||||
|
int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
||||||
|
char *path, char *filter_name, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= delete filter with the given name
|
||||||
|
*/
|
||||||
|
int Xorriso_external_filter(struct XorrisO *xorriso,
|
||||||
|
char *name, char *options, char *path,
|
||||||
|
int argc, char **argv, int flag);
|
||||||
|
|
||||||
|
int Xorriso_status_extf(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_destroy_all_extf(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_show_stream(struct XorrisO *xorriso, void *in_node,
|
||||||
|
char *path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= overwrite existing di_array (else return 2)
|
||||||
|
*/
|
||||||
|
int Xorriso_make_di_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= overwrite existing hln_array (else return 2)
|
||||||
|
*/
|
||||||
|
int Xorriso_make_hln_array(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag bit2= -follow: this is not a command parameter
|
||||||
|
@return -1= severe error
|
||||||
|
0= not applicable for hard links
|
||||||
|
1= go on with processing
|
||||||
|
2= iso_rr_path is fully updated
|
||||||
|
*/
|
||||||
|
int Xorriso_hardlink_update(struct XorrisO *xorriso, int *compare_result,
|
||||||
|
char *disk_path, char *iso_rr_path, int flag);
|
||||||
|
|
||||||
|
int Xorriso_finish_hl_update(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
int Xorriso_get_md5(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
char md5[16], int flag);
|
||||||
|
|
||||||
|
int Xorriso_make_md5(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_md5_start(struct XorrisO *xorriso, void **ctx, int flag);
|
||||||
|
|
||||||
|
int Xorriso_md5_compute(struct XorrisO *xorriso, void *ctx,
|
||||||
|
char *data, int datalen, int flag);
|
||||||
|
|
||||||
|
int Xorriso_md5_end(struct XorrisO *xorriso, void **ctx, char md5[16],
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0=input drive
|
||||||
|
bit1=output drive
|
||||||
|
*/
|
||||||
|
int Xorriso_drive_snooze(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
|
||||||
|
For now take the highest possible value.
|
||||||
|
*/
|
||||||
|
#define Xorriso_IFBOOT S_IFMT
|
||||||
|
|
||||||
|
|
||||||
#endif /* Xorrisoburn_includeD */
|
#endif /* Xorrisoburn_includeD */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user