Compare commits
610 Commits
ZeroOneZer
...
ZeroFourZe
Author | SHA1 | Date | |
---|---|---|---|
a1c218edb0 | |||
83f9a405c1 | |||
6abf78c900 | |||
ba742249e4 | |||
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 | |||
0557d1653f | |||
9dd400d630 | |||
883551a41e | |||
bad48be6a9 | |||
973383bb9b | |||
a1968a431d | |||
4de452fb94 | |||
ae5ad5a143 | |||
ceca17e946 | |||
32e15b5432 | |||
510ff61bf3 | |||
a14af44951 | |||
818de9128d | |||
a15e636952 | |||
96d4e1fe92 | |||
0d2e79ece8 | |||
26b3dcb1f5 | |||
0d407b63ad | |||
24ad7e5abe | |||
d784d8f2e9 | |||
b61ca07f13 | |||
a7cfdfeadb | |||
25c4acaf79 | |||
daa98e8008 | |||
cada9d4ba3 | |||
b595c7f836 | |||
440247dc98 | |||
fca0648618 | |||
2b55dd08fe | |||
df05ccc14c | |||
5aab9a006a | |||
e13615cff6 | |||
dc2664f753 | |||
27f8339527 | |||
b9f01ef512 | |||
106ab1fb0c | |||
8ad34a7c76 | |||
e69cd236df | |||
751530f44e | |||
6ba4b25045 | |||
69fd5ff008 | |||
c410093711 | |||
53f462b406 | |||
ad33b43f99 | |||
a2c7c523aa | |||
de589419da | |||
ddf698c1c4 | |||
74da4d1749 | |||
c66cfdf72c | |||
4866be0555 | |||
d7c4fadba3 | |||
b287c109c3 | |||
8abcf1c238 | |||
073da62d73 | |||
191f54eca2 | |||
421693bb73 | |||
5f5b0c7016 | |||
6bc2d3e0a3 | |||
0f8e6f24db | |||
9b7451f893 | |||
fc8d4b8dbe | |||
96b808e0c5 | |||
ad6585dbd7 | |||
6b1eb7d79f | |||
eeab74920f | |||
ca0179ad57 | |||
36aa59297a | |||
aeef058800 | |||
6b459b1cfb | |||
1d8e7620f0 | |||
cf103ac180 | |||
3a4dc252f0 | |||
0e1f89d7c3 | |||
7f1b8b07a6 | |||
252521f930 | |||
e92b796215 | |||
585445ccc8 | |||
e9171b5133 | |||
947bb33173 | |||
3eae8634cd | |||
f830c30196 | |||
e412f65656 | |||
b7caaed66c | |||
8ffcf40fc4 | |||
28d68a79a5 | |||
1576983e17 | |||
97c22f86a4 | |||
f0b1cbddf3 | |||
19e803ba0d | |||
a4c4026446 | |||
68d70682dd | |||
26eb9e659d | |||
c3048d6282 | |||
1a2d3bc70c | |||
adeaf8b749 | |||
4d35893fd0 | |||
b937313bb5 | |||
e1c46f5023 | |||
1fbe8b8010 | |||
c7355e90aa | |||
26b87932a0 | |||
1798a8441c | |||
a6b8794c7c | |||
56a1512732 | |||
1a1694d595 | |||
f7b656183e | |||
e4e6635a71 | |||
1c4a14c8bd | |||
529959878a | |||
9992f64247 | |||
992996f902 | |||
0e394bca6a | |||
27cde95ca0 | |||
691955d387 | |||
3474a6a981 | |||
7ea03c4079 | |||
f9afb4a2f9 | |||
6cfbe6fcd0 | |||
052f992488 | |||
a44e7db9ea | |||
07b54e308a | |||
b0ac8b67ae | |||
3309d84dc3 | |||
65d1be4310 | |||
c90cf38e70 | |||
50b4c033bf | |||
3bc81537a2 | |||
5e06e3c724 | |||
47c72f3059 | |||
2309710729 | |||
4f047c0cf6 | |||
ddc230bcda | |||
77300abd94 | |||
a4b392ef70 | |||
e9c02ebcb1 | |||
005a317059 | |||
5982c8e6b3 | |||
fb1de29cfa | |||
f760da0016 | |||
2c00ae34ae | |||
1fb2d8c392 | |||
5a72e86936 | |||
10a8ce35e8 | |||
f01488b574 | |||
5f5ebb1956 | |||
01983365aa | |||
2528d00aba | |||
0dfc79bd4e | |||
1fb2576e93 | |||
4200446ffe | |||
c41d072448 | |||
2d73d52f7a | |||
460a04fb47 | |||
388996150e | |||
869c8090f4 | |||
41ea389118 | |||
1aac97caf3 | |||
3f039e4b08 | |||
dd4dd5e1e8 | |||
e51ace31b1 | |||
55a70f1463 | |||
cc3b6f75db | |||
d8b0d85ad4 | |||
f717634242 | |||
584aeb7dab | |||
d3cdbc2bfb | |||
69056e7a2b | |||
e947bdece4 | |||
fa4b90c968 | |||
5fe8ac9f7f | |||
1f01e954d4 | |||
212fa7ba72 | |||
25a68fcf77 | |||
43ea3bdef2 | |||
aaeb1204b7 | |||
df83afc55b | |||
be272a685b | |||
08c68166f3 | |||
4a8f206aa2 | |||
40af376f57 | |||
20dec92aab | |||
c0fc786875 | |||
655d7a2463 | |||
87053caf26 | |||
7720153674 | |||
db9c0f7e0d | |||
5163a66a02 |
14
COPYRIGHT
14
COPYRIGHT
@ -1,16 +1,16 @@
|
||||
Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
|
||||
xorriso is Copyright (C) 2007-2008 Thomas Schmitt
|
||||
libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso
|
||||
libisoburn is Copyright (C) 2007-2009 Vreixo Formoso, Thomas Schmitt
|
||||
xorriso is Copyright (C) 2007-2009 Thomas Schmitt
|
||||
libisofs (if included) is Copyright (C) 2007-2009 Vreixo Formoso, Mario Danic
|
||||
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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
it under the terms of the GNU General Public License version 2 as
|
||||
published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
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
|
||||
|
||||
lib_LTLIBRARIES = libisoburn/libisoburn.la
|
||||
@ -17,6 +21,10 @@ libisoburn_libisoburn_la_SOURCES = \
|
||||
libisoburn/libisoburn.h \
|
||||
version.h
|
||||
|
||||
libisoburn_libisoburn_la_LIBADD = \
|
||||
-lisofs \
|
||||
-lburn
|
||||
|
||||
libinclude_HEADERS = \
|
||||
libisoburn/libisoburn.h
|
||||
|
||||
@ -28,16 +36,59 @@ libinclude_HEADERS = \
|
||||
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_with_regeX $(READLINE_DEF)
|
||||
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
|
||||
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN \
|
||||
$(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.h \
|
||||
xorriso/xorriso_private.h \
|
||||
xorriso/xorriso.c \
|
||||
xorriso/xorrisoburn.h \
|
||||
xorriso/xorrisoburn.c \
|
||||
xorriso/xorriso_timestamp.h
|
||||
xorriso/xorriso_timestamp.h \
|
||||
xorriso/xorriso_buildstamp.h
|
||||
|
||||
|
||||
# Install symbolic links to the xorriso binary
|
||||
#
|
||||
install-exec-hook:
|
||||
if test -e "$(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
|
||||
@ -53,13 +104,6 @@ test_compare_file_CFLAGS =
|
||||
test_compare_file_LDADD =
|
||||
test_compare_file_SOURCES = test/compare_file.c
|
||||
|
||||
# ts A80110 - A80210 : we need as minimal demo something better than test.c
|
||||
# test/test
|
||||
|
||||
# test_test_CPPFLAGS = -Ilibisofs -Ilibburn -Ilibisoburn
|
||||
# test_test_LDADD = $(libisoburn_libisoburn_la_OBJECTS) $(THREAD_LIBS) -lburn -lisofs
|
||||
# test_test_SOURCES = test/test.c
|
||||
|
||||
|
||||
## ========================================================================= ##
|
||||
|
||||
@ -117,6 +161,8 @@ man_MANS = xorriso/xorriso.1
|
||||
EXTRA_DIST = \
|
||||
libisoburn-1.pc.in \
|
||||
version.h.in \
|
||||
doc/comments \
|
||||
doc/doxygen.conf.in \
|
||||
README \
|
||||
AUTHORS \
|
||||
CONTRIBUTORS \
|
||||
@ -124,6 +170,7 @@ EXTRA_DIST = \
|
||||
COPYING \
|
||||
INSTALL \
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_buildstamp_none.h \
|
||||
xorriso/README \
|
||||
$(man_MANS)
|
||||
|
||||
|
70
README
70
README
@ -1,15 +1,16 @@
|
||||
------------------------------------------------------------------------------
|
||||
libburnia-project.org
|
||||
http:libburnia-project.org
|
||||
------------------------------------------------------------------------------
|
||||
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Integrated sub project of libburnia-project.org.
|
||||
Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
|
||||
http://files.libburnia-project.org/releases/libisoburn-0.4.0.pl00.tar.gz
|
||||
Copyright (C) 2006-2009 Vreixo Formoso, Thomas Schmitt.
|
||||
Provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
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
|
||||
management on media level and even plain disk files or block devices.
|
||||
|
||||
@ -17,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
|
||||
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:
|
||||
"... without even the implied warranty ..."
|
||||
@ -25,17 +29,17 @@ By using this software you agree to the disclaimer at the end of this text:
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
|
||||
- libburn.so.4 , version libburn-0.4.2 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.2 or higher
|
||||
Dynamic library and compile time header requirements for libisoburn-0.4.0 :
|
||||
- libburn.so.4 , version libburn-0.6.4 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.20 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
headers seen at compile time. So compile in the oldest possible installation
|
||||
setup unless you have reason to enforce a newer bug fix level.
|
||||
headers seen at compile time.
|
||||
|
||||
Obtain libisoburn-0.1.0.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain libisoburn-0.4.0.pl00.tar.gz, take it to a directory of your choice
|
||||
and do:
|
||||
|
||||
tar xzf libisoburn-0.1.0.tar.gz
|
||||
cd libisoburn-0.1.0
|
||||
tar xzf libisoburn-0.4.0.pl00.tar.gz
|
||||
cd libisoburn-0.4.0
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -44,7 +48,7 @@ Within that directory execute:
|
||||
|
||||
Then become superuser and execute
|
||||
make install
|
||||
which will make available libisoburn.so.1 .
|
||||
which will make available libisoburn.so.1 and the program xorriso.
|
||||
|
||||
For the API concepts and calls see
|
||||
./libisoburn/libisoburn.h
|
||||
@ -53,12 +57,39 @@ as well as
|
||||
/usr/lib/libburn/libburn.h
|
||||
|
||||
|
||||
libisoburn includes a command line and dialog application named xorriso,
|
||||
xorriso
|
||||
|
||||
libisoburn comes with a command line and dialog application named xorriso,
|
||||
which offers a substantial part of libisoburn features to shell scripts and
|
||||
users.
|
||||
After installation its documentation is available via
|
||||
users. Its file xorriso/README describes a standalone tarball as first
|
||||
preference for statically linked xorriso installation.
|
||||
The libisoburn installation described above produces a dynamically linked
|
||||
xorriso binary depending on libburn.so, libisofs.so, libisoburn.so.
|
||||
|
||||
After installation documentation is available via
|
||||
man xorriso
|
||||
|
||||
Several alias links point to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||
|
||||
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
|
||||
@ -86,6 +117,9 @@ output drives. The addresses of the disk files have to be preceded by "stdio:".
|
||||
Like:
|
||||
"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
|
||||
|
||||
@ -97,7 +131,7 @@ on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff.
|
||||
This program is not installed systemwide but stays in the installation
|
||||
directory of the xorriso tarball as test/compare_file . Usually it is
|
||||
run as -exec payload of a find command. It demands at least three arguments:
|
||||
The path of the first file to compare, the prefix1 to be cut off from path
|
||||
The path of the file to compare, the prefix1 to be cut off from path
|
||||
and the prefix2 which gets prepended afterwards to obtain the path of the
|
||||
second file to compare.
|
||||
As further argument there can be -no_ctime which suppresses the comparison
|
||||
@ -137,7 +171,7 @@ libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
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
|
||||
parts of old
|
||||
|
@ -1,6 +1,7 @@
|
||||
AC_DEFUN([TARGET_SHIZZLE],
|
||||
[
|
||||
ARCH=""
|
||||
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
|
||||
|
||||
AC_MSG_CHECKING([target operating system])
|
||||
|
||||
@ -12,9 +13,12 @@ AC_DEFUN([TARGET_SHIZZLE],
|
||||
*-*-freebsd*)
|
||||
ARCH=freebsd
|
||||
LIBBURN_ARCH_LIBS=-lcam
|
||||
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
|
||||
|
||||
|
133
configure.ac
133
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libisoburn], [0.0.1], [http://libburnia-project.org])
|
||||
AC_INIT([libisoburn], [0.4.0], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -7,15 +7,22 @@ AC_CANONICAL_TARGET
|
||||
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
|
||||
dnl The API version codes are now defined in libisoburn/libisoburn.h
|
||||
dnl Hint: Search list for version code aspects:
|
||||
dnl /AC_INIT(
|
||||
dnl /ISOBURN_.*_VERSION
|
||||
dnl /LT_.*
|
||||
dnl /LIB.*_REQUIRED
|
||||
|
||||
dnl The API version codes are defined in libisoburn/libisoburn.h
|
||||
dnl #define isoburn_header_version_*
|
||||
dnl configure.ac only rules the libtool revision numbering about
|
||||
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
||||
dnl
|
||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||
ISOBURN_MAJOR_VERSION=0
|
||||
ISOBURN_MINOR_VERSION=0
|
||||
ISOBURN_MICRO_VERSION=1
|
||||
ISOBURN_MINOR_VERSION=4
|
||||
ISOBURN_MICRO_VERSION=0
|
||||
|
||||
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(ISOBURN_MAJOR_VERSION)
|
||||
@ -24,12 +31,19 @@ AC_SUBST(ISOBURN_MICRO_VERSION)
|
||||
dnl AC_SUBST(ISOBURN_VERSION)
|
||||
|
||||
dnl Libtool versioning
|
||||
dnl Generate libisoburn.so.1.0.0
|
||||
dnl Generate libisoburn.so.1.x.y
|
||||
dnl SONAME will become LT_CURRENT - LT_AGE
|
||||
dnl
|
||||
dnl ts A90628
|
||||
dnl This is the release version 0.4.0 = libisoburn.so.1.29.0
|
||||
dnl ### This is the development version after above stable release
|
||||
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 30 - 29 = 1 . Library name = libisoburn.so.1.29.0
|
||||
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
|
||||
LT_CURRENT=1
|
||||
LT_AGE=0
|
||||
LT_CURRENT=30
|
||||
LT_AGE=29
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
@ -57,6 +71,10 @@ if test ! $ac_cv_func_fseeko; then
|
||||
AC_ERROR([Libburn requires largefile support.])
|
||||
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, , )
|
||||
|
||||
AC_PROG_LIBTOOL
|
||||
AC_SUBST(LIBTOOL_DEPS)
|
||||
LIBTOOL="$LIBTOOL --silent"
|
||||
@ -70,28 +88,113 @@ AC_SUBST(THREAD_LIBS)
|
||||
|
||||
TARGET_SHIZZLE
|
||||
AC_SUBST(ARCH)
|
||||
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||
|
||||
|
||||
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 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
|
||||
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
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
dnl >>> How to check for proper library versions ?
|
||||
dnl >>> would need libburn-0.4.2 or higher .so.4
|
||||
dnl >>> would need libisofs-0.6.1 or higher .so.6
|
||||
AC_CHECK_HEADER(libburn/libburn.h)
|
||||
AC_CHECK_HEADER(libisofs/libisofs.h)
|
||||
|
||||
dnl Check for proper library versions
|
||||
LIBBURN_REQUIRED=0.4.2
|
||||
LIBISOFS_REQUIRED=0.6.1
|
||||
LIBBURN_REQUIRED=0.6.4
|
||||
LIBISOFS_REQUIRED=0.6.20
|
||||
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_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
|
||||
# with spaces.
|
||||
|
||||
INPUT = libburn \
|
||||
INPUT = libisoburn \
|
||||
doc \
|
||||
test
|
||||
|
||||
@ -495,9 +495,7 @@ INPUT_ENCODING = UTF-8
|
||||
# *.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
|
||||
|
||||
FILE_PATTERNS = libburn.h \
|
||||
comments \
|
||||
libburner.c
|
||||
FILE_PATTERNS =
|
||||
|
||||
# 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.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
||||
/*
|
||||
data source for libisoburn.
|
||||
|
||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
and Thomas Schmitt <scdbackup@gmx.net>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -28,133 +29,178 @@
|
||||
|
||||
|
||||
/* Cached reading of image tree data */
|
||||
/* Current implementation : single tile 128 kB */
|
||||
/* Multi tile: 32 * 64 kB */
|
||||
|
||||
/* powers of 2 only ! */
|
||||
#define Libisoburn_cache_blockS 64
|
||||
/* The size of a single tile.
|
||||
Powers of 2 only ! Less than 16 makes not much sense.
|
||||
*/
|
||||
#define Libisoburn_tile_blockS 32
|
||||
|
||||
struct isoburn_cached_drive {
|
||||
struct burn_drive *drive;
|
||||
|
||||
char cache_data[Libisoburn_cache_blockS * 2048];
|
||||
uint32_t cache_lba;
|
||||
uint32_t last_error_lba;
|
||||
uint32_t last_aligned_error_lba;
|
||||
int cache_hits;
|
||||
};
|
||||
/* The number of tiles in the cache
|
||||
*/
|
||||
#define Libisoburn_cache_tileS 32
|
||||
|
||||
|
||||
/* Debugging only: This reports cache loads on stderr.
|
||||
#define Libisoburn_read_cache_reporT 1
|
||||
*/
|
||||
#define Libisoburn_use_read_cachE
|
||||
|
||||
#ifdef Libisoburn_use_read_cachE
|
||||
|
||||
int
|
||||
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
struct isoburn_cache_tile {
|
||||
char cache_data[Libisoburn_tile_blockS * 2048];
|
||||
uint32_t cache_lba;
|
||||
uint32_t last_error_lba;
|
||||
uint32_t last_aligned_error_lba;
|
||||
int cache_hits;
|
||||
int age;
|
||||
};
|
||||
|
||||
struct isoburn_cached_drive {
|
||||
struct burn_drive *drive;
|
||||
struct isoburn_cache_tile tiles[Libisoburn_cache_tileS];
|
||||
int current_age;
|
||||
};
|
||||
|
||||
#define Libisoburn_max_agE 2000000000
|
||||
|
||||
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag);
|
||||
|
||||
|
||||
int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
{
|
||||
int ret;
|
||||
int ret, i, oldest, oldest_age;
|
||||
struct burn_drive *d;
|
||||
off_t count;
|
||||
uint32_t aligned_lba;
|
||||
char msg[80];
|
||||
|
||||
struct isoburn_cache_tile *tiles;
|
||||
struct isoburn_cached_drive *icd;
|
||||
|
||||
if(src == NULL || buffer == NULL)
|
||||
return -1;
|
||||
/* It is not required by the specs of libisofs but implicitely assumed
|
||||
by its current implementation that a data source read result <0 is
|
||||
a valid libisofs error code.
|
||||
*/
|
||||
return ISO_NULL_POINTER;
|
||||
|
||||
icd = (struct isoburn_cached_drive *) src->data;
|
||||
d = (struct burn_drive*) icd->drive;
|
||||
|
||||
aligned_lba= lba & ~(Libisoburn_cache_blockS - 1);
|
||||
if(aligned_lba == icd->cache_lba && icd->cache_lba != 0xffffffff) {
|
||||
(icd->cache_hits)++;
|
||||
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||
count= 2048;
|
||||
return 1;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
icd->cache_lba= 0xffffffff; /* invalidate cache */
|
||||
if(icd->last_aligned_error_lba == aligned_lba) {
|
||||
tiles = (struct isoburn_cache_tile *) icd->tiles;
|
||||
|
||||
aligned_lba= lba & ~(Libisoburn_tile_blockS - 1);
|
||||
|
||||
for(i=0; i<Libisoburn_cache_tileS; i++) {
|
||||
if(aligned_lba == tiles[i].cache_lba && tiles[i].cache_lba != 0xffffffff) {
|
||||
(tiles[i].cache_hits)++;
|
||||
memcpy(buffer, tiles[i].cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||
count= 2048;
|
||||
ds_inc_age(icd, i, 0);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* find oldest tile */
|
||||
oldest_age= Libisoburn_max_agE;
|
||||
oldest= 0;
|
||||
for(i= 0; i<Libisoburn_cache_tileS; i++) {
|
||||
if(tiles[i].cache_lba == 0xffffffff) {
|
||||
oldest= i;
|
||||
break;
|
||||
}
|
||||
if(tiles[i].age<oldest_age) {
|
||||
oldest_age= tiles[i].age;
|
||||
oldest= i;
|
||||
}
|
||||
}
|
||||
|
||||
tiles[oldest].cache_lba= 0xffffffff; /* invalidate cache */
|
||||
if(tiles[oldest].last_aligned_error_lba == aligned_lba) {
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = burn_read_data(d, (off_t) aligned_lba * (off_t) 2048,
|
||||
(char *) icd->cache_data,
|
||||
Libisoburn_cache_blockS * 2048, &count, 0);
|
||||
(char *) tiles[oldest].cache_data,
|
||||
Libisoburn_tile_blockS * 2048, &count, 2);
|
||||
}
|
||||
if (ret <= 0 ) {
|
||||
icd->last_aligned_error_lba = aligned_lba;
|
||||
tiles[oldest].last_aligned_error_lba = aligned_lba;
|
||||
|
||||
/* Read-ahead failure ? Try to read 2048 directly. */
|
||||
if(icd->last_error_lba == lba)
|
||||
if(tiles[oldest].last_error_lba == lba)
|
||||
ret = 0;
|
||||
else
|
||||
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
||||
2048, &count, 0);
|
||||
if (ret > 0)
|
||||
return 1;
|
||||
icd->last_error_lba = lba;
|
||||
sprintf(msg, "ds_read_block(%lu) returns -1", (unsigned long) lba);
|
||||
burn_msgs_submit(0x00060000, msg, 0, "DEBUG", NULL);
|
||||
return -1;
|
||||
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
|
||||
...
|
||||
But it is not possible to ignore FAILURE.
|
||||
libisofs insists in original error codes, i.e. libisoburn cannot
|
||||
change severity FAILURE associated with ISO_FILE_READ_ERROR.
|
||||
So ISO_FILE_READ_ERROR is not an option and libisoburn has to
|
||||
misuse ISO_FILE_CANT_WRITE, which is actually for image generation
|
||||
and not for image reading.
|
||||
This is quite wrong, although the error message text is unclear
|
||||
enough to make it appear plausible.
|
||||
*/
|
||||
ret= ISO_FILE_CANT_WRITE;
|
||||
#endif
|
||||
|
||||
if(ret >= 0)
|
||||
ret = -1;
|
||||
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef Libisoburn_read_cache_reporT
|
||||
fprintf(stderr, "After %3d hits, new load from %8x , count= %d\n",
|
||||
icd->cache_hits, aligned_lba, (int) count);
|
||||
fprintf(stderr, "Tile %2.2d : After %3d hits, new load from %8x , count= %d\n",
|
||||
oldest, tiles[oldest].cache_hits, aligned_lba, (int) count);
|
||||
#endif
|
||||
|
||||
icd->cache_lba= aligned_lba;
|
||||
icd->cache_hits= 1;
|
||||
memcpy(buffer, icd->cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||
tiles[oldest].cache_lba= aligned_lba;
|
||||
tiles[oldest].cache_hits= 1;
|
||||
ds_inc_age(icd, oldest, 0);
|
||||
|
||||
memcpy(buffer, tiles[oldest].cache_data + (lba - aligned_lba) * 2048, 2048);
|
||||
count= 2048;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#else /* Libisoburn_use_read_cachE */
|
||||
|
||||
static int
|
||||
ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
||||
{
|
||||
int ret;
|
||||
struct burn_drive *d;
|
||||
off_t count;
|
||||
|
||||
if(src == NULL || buffer == NULL)
|
||||
return -1;
|
||||
|
||||
d = (struct burn_drive*) ((struct isoburn_cached_drive *) src->data)->drive;
|
||||
|
||||
ret = burn_read_data(d, (off_t) lba * (off_t) 2048, (char *) buffer,
|
||||
2048, &count, 0);
|
||||
if (ret <= 0 )
|
||||
return -1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* ! Libisoburn_use_read_cachE */
|
||||
|
||||
|
||||
static int
|
||||
ds_open(IsoDataSource *src)
|
||||
static int ds_open(IsoDataSource *src)
|
||||
{
|
||||
/* nothing to do, device is always grabbed */
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
ds_close(IsoDataSource *src)
|
||||
static int ds_close(IsoDataSource *src)
|
||||
{
|
||||
/* nothing to do, device is always grabbed */
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
ds_free_data(IsoDataSource *src)
|
||||
static void ds_free_data(IsoDataSource *src)
|
||||
{
|
||||
/* nothing to do */;
|
||||
if(src->data != NULL)
|
||||
@ -162,11 +208,24 @@ ds_free_data(IsoDataSource *src)
|
||||
src->data= NULL;
|
||||
}
|
||||
|
||||
IsoDataSource *
|
||||
isoburn_data_source_new(struct burn_drive *d)
|
||||
|
||||
int isoburn_data_source_shutdown(IsoDataSource *src, int flag)
|
||||
{
|
||||
struct isoburn_cached_drive *icd;
|
||||
|
||||
if(src==NULL)
|
||||
return(0);
|
||||
icd= (struct isoburn_cached_drive *) src->data;
|
||||
icd->drive= NULL;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
IsoDataSource *isoburn_data_source_new(struct burn_drive *d)
|
||||
{
|
||||
IsoDataSource *ret;
|
||||
struct isoburn_cached_drive *icd= NULL;
|
||||
int i;
|
||||
|
||||
if (d==NULL)
|
||||
return NULL;
|
||||
@ -181,10 +240,30 @@ isoburn_data_source_new(struct burn_drive *d)
|
||||
ret->free_data = ds_free_data;
|
||||
ret->data = icd;
|
||||
icd->drive = d;
|
||||
icd->cache_lba = 0xffffffff;
|
||||
icd->cache_hits = 0;
|
||||
icd->last_error_lba = 0xffffffff;
|
||||
icd->last_aligned_error_lba = 0xffffffff;
|
||||
icd->current_age= 0;
|
||||
for(i= 0; i<Libisoburn_cache_tileS; i++) {
|
||||
icd->tiles[i].cache_lba = 0xffffffff;
|
||||
icd->tiles[i].cache_hits = 0;
|
||||
icd->tiles[i].last_error_lba = 0xffffffff;
|
||||
icd->tiles[i].last_aligned_error_lba = 0xffffffff;
|
||||
icd->tiles[i].age= 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int ds_inc_age(struct isoburn_cached_drive *icd, int idx, int flag)
|
||||
{
|
||||
int i;
|
||||
|
||||
(icd->current_age)++;
|
||||
if(icd->current_age>=Libisoburn_max_agE) { /* reset all ages (allow waste) */
|
||||
for(i= 0; i<Libisoburn_cache_tileS; i++)
|
||||
(icd->tiles)[i].age= 0;
|
||||
icd->current_age= 1;
|
||||
}
|
||||
(icd->tiles)[idx].age= icd->current_age;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
/*
|
||||
Class core of libisoburn.
|
||||
|
||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
*/
|
||||
|
||||
/* ( derived from stub generated by CgeN on Sat, 01 Sep 2007 12:04:36 GMT ) */
|
||||
@ -37,10 +37,64 @@
|
||||
|
||||
#include "isoburn.h"
|
||||
|
||||
/* No more: version numbers out of configure.ac
|
||||
major.minor.micro now comes from libisoburn.h
|
||||
#include "../version.h"
|
||||
|
||||
/* Default values for application provided msgs_submit methods.
|
||||
To be attached to newly aquired drives.
|
||||
*/
|
||||
int (*libisoburn_default_msgs_submit)
|
||||
(void *handle, int error_code, char msg_text[],
|
||||
int os_errno, char severity[], int flag)= NULL;
|
||||
void *libisoburn_default_msgs_submit_handle= NULL;
|
||||
int libisoburn_default_msgs_submit_flag= 0;
|
||||
|
||||
|
||||
/* ----------------------- isoburn_toc_entry ---------------------- */
|
||||
|
||||
|
||||
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
||||
struct isoburn_toc_entry *boss, int flag)
|
||||
{
|
||||
struct isoburn_toc_entry *o, *s;
|
||||
|
||||
*objpt= o= (struct isoburn_toc_entry *)
|
||||
malloc(sizeof(struct isoburn_toc_entry));
|
||||
if(o==NULL) {
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Cannot allocate memory for isoburn toc entry",
|
||||
0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
o->session= 0;
|
||||
o->track_no= 0;
|
||||
o->start_lba= -1;
|
||||
o->track_blocks= 0;
|
||||
o->volid= NULL;
|
||||
o->next= NULL;
|
||||
if(boss!=NULL) {
|
||||
for(s= boss; s->next!=NULL; s= s->next);
|
||||
s->next= o;
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= delete all subordinates too
|
||||
*/
|
||||
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag)
|
||||
{
|
||||
if(*o==NULL)
|
||||
return(0);
|
||||
if(flag&1)
|
||||
isoburn_toc_entry_destroy(&((*o)->next), flag);
|
||||
if((*o)->volid != NULL)
|
||||
free((*o)->volid);
|
||||
free((char *) (*o));
|
||||
*o= NULL;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* --------------------- end isoburn_toc_entry -------------------- */
|
||||
|
||||
/* -------------------------- isoburn ----------------------- */
|
||||
|
||||
@ -59,30 +113,33 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
||||
|
||||
*objpt= o= (struct isoburn *) malloc(sizeof(struct isoburn));
|
||||
if(o==NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Cannot allocate memory for isoburn control object",
|
||||
0, "FATAL", NULL);
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Cannot allocate memory for isoburn control object",
|
||||
0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
o->drive= NULL;
|
||||
o->emulation_mode= 0;
|
||||
o->min_start_byte= 0;
|
||||
o->nwa= 0;
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
o->fabricated_msc1= -1;
|
||||
o->fabricated_msc2= -1;
|
||||
o->zero_nwa= Libisoburn_overwriteable_starT;
|
||||
o->min_start_byte= o->zero_nwa * 2048;
|
||||
o->nwa= o->zero_nwa;
|
||||
o->truncate= 0;
|
||||
o->iso_source= NULL;
|
||||
#else
|
||||
o->fifo= NULL;
|
||||
#endif
|
||||
|
||||
o->wrote_well= -1;
|
||||
o->fabricated_disc_status= BURN_DISC_UNREADY;
|
||||
for(i=0;i<65536;i++)
|
||||
o->toc= NULL;
|
||||
o->wrote_well= -1;
|
||||
for(i=0;i<Libisoburn_target_head_sizE;i++)
|
||||
o->target_iso_head[i]= 0;
|
||||
o->image= NULL;
|
||||
o->iso_data_source= NULL;
|
||||
o->read_pacifier= NULL;
|
||||
o->read_pacifier_handle= NULL;
|
||||
o->msgs_submit= NULL;
|
||||
o->msgs_submit_handle= NULL;
|
||||
o->msgs_submit_flag= 0;
|
||||
o->prev= NULL;
|
||||
o->next= NULL;
|
||||
ret= iso_image_new("ISOIMAGE", &o->image);
|
||||
@ -119,16 +176,12 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
||||
|
||||
if(o->image!=NULL)
|
||||
iso_image_unref(o->image);
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
if(o->toc!=NULL)
|
||||
isoburn_toc_entry_destroy(&(o->toc), 1); /* all */
|
||||
if(o->iso_source!=NULL)
|
||||
burn_source_free(o->iso_source);
|
||||
#else
|
||||
if(o->fifo!=NULL)
|
||||
burn_source_free(o->fifo);
|
||||
#endif /* ! Libisoburn_no_fifO */
|
||||
|
||||
|
||||
if(o->iso_data_source!=NULL)
|
||||
iso_data_source_unref(o->iso_data_source);
|
||||
free((char *) o);
|
||||
*objpt= NULL;
|
||||
return(1);
|
||||
@ -261,28 +314,81 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||
int os_errno, char severity[], int flag)
|
||||
{
|
||||
int ret, use_drive_method= 0;
|
||||
|
||||
if(o!=NULL)
|
||||
if(o->msgs_submit!=NULL)
|
||||
use_drive_method= 1;
|
||||
if(use_drive_method) {
|
||||
ret= o->msgs_submit(o->msgs_submit_handle, error_code, msg_text, os_errno,
|
||||
severity, o->msgs_submit_flag);
|
||||
return(ret);
|
||||
}
|
||||
if(libisoburn_default_msgs_submit != NULL) {
|
||||
ret= libisoburn_default_msgs_submit(libisoburn_default_msgs_submit_handle,
|
||||
error_code, msg_text, os_errno, severity,
|
||||
libisoburn_default_msgs_submit_flag);
|
||||
return(ret);
|
||||
}
|
||||
/* Fallback: use message queue of libburn */
|
||||
burn_msgs_submit(error_code, msg_text, os_errno, severity, NULL);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= modifying rather than growing
|
||||
bit1= prepare for early release of input drive:
|
||||
wait until input and then disable image data source
|
||||
*/
|
||||
static
|
||||
int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts, int new_img)
|
||||
int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
|
||||
struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts, int flag)
|
||||
{
|
||||
struct burn_source *wsrc;
|
||||
struct burn_session *session;
|
||||
struct burn_track *track;
|
||||
struct isoburn *o;
|
||||
struct isoburn *in_o, *out_o;
|
||||
IsoWriteOpts *wopts= NULL;
|
||||
enum burn_disc_status state;
|
||||
int ret, fifo_chunks;
|
||||
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];
|
||||
|
||||
ret= isoburn_find_emulator(&o, d, 0);
|
||||
if(ret<0 || o==NULL)
|
||||
new_img= flag&1;
|
||||
early_indev_release= flag&2;
|
||||
if(new_img && early_indev_release) {
|
||||
isoburn_msgs_submit(in_o, 0x00060000,
|
||||
"Programming error: Wrong session setup: new_img && early_indev_release",
|
||||
0, "FATAL", 0);
|
||||
{ret= -4; goto ex;}
|
||||
}
|
||||
|
||||
ret= isoburn_find_emulator(&in_o, in_d, 0);
|
||||
if(ret<0 || in_o==NULL)
|
||||
{ret= -1; goto ex;}
|
||||
o->wrote_well= 0; /* early end will be registered as failure */
|
||||
ret= isoburn_find_emulator(&out_o, out_d, 0);
|
||||
if(ret<0 || out_o==NULL)
|
||||
{ret= -1; goto ex;}
|
||||
/* early end will be registered as failure */
|
||||
in_o->wrote_well= out_o->wrote_well= 0;
|
||||
|
||||
state = isoburn_disc_get_status(d);
|
||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE
|
||||
&& (state != BURN_DISC_FULL || ! new_img)) {
|
||||
/* unsuitable status */
|
||||
burn_msgs_submit(0x00060000, "Unsuitable media state", 0, "FAILURE", NULL);
|
||||
state = isoburn_disc_get_status(in_d);
|
||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE &&
|
||||
state != BURN_DISC_FULL) {
|
||||
isoburn_msgs_submit(in_o, 0x00060000, "Unsuitable source media state",
|
||||
0, "FAILURE", 0);
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
state = isoburn_disc_get_status(out_d);
|
||||
if (state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
|
||||
isoburn_msgs_submit(out_o, 0x00060000, "Unsuitable target media state",
|
||||
0, "FAILURE", 0);
|
||||
{ret= -2; goto ex;}
|
||||
}
|
||||
|
||||
@ -302,6 +408,17 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
iso_write_opts_set_rockridge(wopts, opts->rockridge);
|
||||
iso_write_opts_set_joliet(wopts, opts->joliet);
|
||||
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_allow_deep_paths(wopts, opts->allow_deep_paths);
|
||||
iso_write_opts_set_allow_longer_paths(wopts, opts->allow_longer_paths);
|
||||
@ -311,6 +428,10 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
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_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_replace_mode(wopts, opts->replace_dir_mode,
|
||||
opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
|
||||
@ -319,70 +440,72 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
||||
iso_write_opts_set_default_uid(wopts, opts->uid);
|
||||
iso_write_opts_set_default_gid(wopts, opts->gid);
|
||||
iso_write_opts_set_output_charset(wopts, opts->output_charset);
|
||||
#ifdef Libisoburn_no_fifO
|
||||
iso_write_opts_set_fifo_size(wopts, fifo_chunks);
|
||||
#endif /* Libisoburn_no_fifO */
|
||||
|
||||
if (new_img) {
|
||||
iso_write_opts_set_ms_block(wopts, 0);
|
||||
iso_write_opts_set_appendable(wopts, 0);
|
||||
iso_write_opts_set_overwrite_buf(wopts, NULL);
|
||||
} else {
|
||||
int lba, nwa;
|
||||
ret = isoburn_disc_track_lba_nwa(d, NULL, 0, &lba, &nwa);
|
||||
if (ret != 1) {
|
||||
burn_msgs_submit(0x00060000, "Cannot determine next writeable address", 0,
|
||||
"FAILURE", NULL);
|
||||
{ret= -3; goto ex;}
|
||||
}
|
||||
if (nwa == 0 && state == BURN_DISC_APPENDABLE) {
|
||||
/* invalid nwa */
|
||||
burn_msgs_submit(0x00060000, "Encountered 0 as next writeable address", 0,
|
||||
"FAILURE", NULL);
|
||||
{ret= -4; goto ex;}
|
||||
}
|
||||
iso_write_opts_set_ms_block(wopts, nwa);
|
||||
iso_write_opts_set_appendable(wopts, 1);
|
||||
iso_write_opts_set_overwrite_buf(wopts, o->target_iso_head);
|
||||
}
|
||||
|
||||
ret = iso_image_create_burn_source(o->image, wopts, &wsrc);
|
||||
ret = isoburn_disc_track_lba_nwa(out_d, NULL, 0, &lba, &nwa);
|
||||
opts->effective_lba= nwa;
|
||||
ret= isoburn_get_msc2(out_o, NULL, &nwa, 0);
|
||||
if (ret != 1) {
|
||||
isoburn_msgs_submit(out_o, 0x00060000,
|
||||
"Cannot determine next writeable address", 0, "FAILURE", 0);
|
||||
{ret= -3; goto ex;}
|
||||
}
|
||||
iso_write_opts_set_ms_block(wopts, nwa);
|
||||
iso_write_opts_set_appendable(wopts, !new_img);
|
||||
iso_write_opts_set_overwrite_buf(wopts,
|
||||
nwa>0 ? out_o->target_iso_head : NULL);
|
||||
|
||||
ret = iso_image_create_burn_source(in_o->image, wopts, &wsrc);
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot create burn source", 0, "FAILURE", 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
if (early_indev_release) {
|
||||
for(i= 0; i<300; i++) {
|
||||
|
||||
/* <<< ??? */
|
||||
if((i%30) == 0) {
|
||||
sprintf(msg, "Waiting for data in fifo since %d seconds", i/30);
|
||||
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
}
|
||||
|
||||
usleep(100000);
|
||||
ret= iso_ring_buffer_get_status(wsrc, &buffer_size, &buffer_free);
|
||||
if(ret >0 && buffer_size != buffer_free)
|
||||
break;
|
||||
}
|
||||
|
||||
/* <<< ??? */
|
||||
sprintf(msg,
|
||||
"After %.1f seconds: %d bytes of output available (fifo state=%d)",
|
||||
((double) i+1) / 10.0, (int) (buffer_size - buffer_free), ret);
|
||||
isoburn_msgs_submit(in_o, 0x00060000, msg, 0, "DEBUG", 0);
|
||||
|
||||
if(in_o->iso_data_source!=NULL)
|
||||
isoburn_data_source_shutdown(in_o->iso_data_source, 0);
|
||||
}
|
||||
|
||||
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 */
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
o->iso_source= wsrc;
|
||||
#else
|
||||
o->fifo = burn_fifo_source_new(wsrc, 2048, fifo_chunks, 0);
|
||||
burn_source_free(wsrc);
|
||||
if (o->fifo == NULL) {
|
||||
burn_msgs_submit(0x00060000, "Cannot attach fifo", 0, "FATAL", NULL);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
#endif /* ! Libisoburn_no_fifO */
|
||||
out_o->iso_source= wsrc;
|
||||
|
||||
*disc = burn_disc_create();
|
||||
session = burn_session_create();
|
||||
burn_disc_add_session(*disc, session, BURN_POS_END);
|
||||
track = burn_track_create();
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
burn_track_set_source(track, o->iso_source);
|
||||
#else
|
||||
burn_track_set_source(track, o->fifo);
|
||||
#endif /* ! Libisoburn_no_fifO */
|
||||
|
||||
burn_track_set_source(track, out_o->iso_source);
|
||||
burn_session_add_track(session, track, BURN_POS_END);
|
||||
|
||||
/* give up local references */
|
||||
burn_track_free(track);
|
||||
burn_session_free(session);
|
||||
|
||||
o->wrote_well= -1; /* neutral */
|
||||
in_o->wrote_well= out_o->wrote_well= -1; /* neutral */
|
||||
ret= 1;
|
||||
ex:
|
||||
if(wopts!=NULL)
|
||||
@ -390,43 +513,51 @@ ex:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts)
|
||||
{
|
||||
return isoburn_prepare_disc_aux(d, disc, opts, 0);
|
||||
return isoburn_prepare_disc_aux(d, d, disc, opts, 0);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive)
|
||||
{
|
||||
int ret;
|
||||
struct isoburn *in_o, *out_o;
|
||||
|
||||
ret= isoburn_prepare_disc_aux(d, disc, opts, 1);
|
||||
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 1);
|
||||
if (ret<=0)
|
||||
return ret;
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
/* Hand over source reference for optional fifo status inquiry */
|
||||
if(out_drive==NULL)
|
||||
return 1;
|
||||
ret= isoburn_find_emulator(&out_o, out_drive, 0);
|
||||
if(ret<0 || out_o==NULL)
|
||||
return 1;
|
||||
ret= isoburn_find_emulator(&in_o, d, 0);
|
||||
if(ret<0 || in_o==NULL)
|
||||
return 1; /* then without fifo status inquiry */
|
||||
if(out_o->iso_source!=NULL)
|
||||
burn_source_free(out_o->iso_source);
|
||||
out_o->iso_source= in_o->iso_source;
|
||||
in_o->iso_source= NULL;
|
||||
#endif /* Libisoburn_no_fifO */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* API since 0.2.2 */
|
||||
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive, int nwa)
|
||||
{
|
||||
int ret;
|
||||
struct isoburn *o= NULL;
|
||||
|
||||
ret= isoburn_find_emulator(&o, out_drive, 0);
|
||||
if(ret<0 || o==NULL)
|
||||
return(-1);
|
||||
if(nwa >= 0)
|
||||
o->fabricated_msc2= nwa;
|
||||
if(o->nwa == o->zero_nwa)
|
||||
o->nwa= o->zero_nwa= 0;
|
||||
else
|
||||
o->zero_nwa= 0;
|
||||
ret= isoburn_prepare_disc_aux(d, out_drive, disc, opts, 2);
|
||||
if (ret<=0)
|
||||
return ret;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* API @since 0.1.0
|
||||
@param flag bit0= this is a regular end, not an abort
|
||||
give up source reference
|
||||
@ -512,13 +643,17 @@ int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
||||
|
||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
||||
if(o==NULL) {
|
||||
burn_msgs_submit(0x00060000, "Cannot allocate memory for read options",
|
||||
0, "FATAL", NULL);
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Cannot allocate memory for read options", 0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
o->norock= 0;
|
||||
o->nojoliet= 0;
|
||||
o->noiso1999= 1;
|
||||
o->noaaip= 1;
|
||||
o->noacl= 1;
|
||||
o->noea= 1;
|
||||
o->noino= 1;
|
||||
o->preferjoliet= 0;
|
||||
o->uid= geteuid();
|
||||
o->gid= getegid();
|
||||
@ -552,6 +687,10 @@ int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
|
||||
o->noiso1999= !!(ext&4);
|
||||
o->preferjoliet= !!(ext&8);
|
||||
o->pretend_blank= !!(ext&16);
|
||||
o->noaaip= !!(ext & 32);
|
||||
o->noacl= !!(ext & 64);
|
||||
o->noea= !!(ext & 128);
|
||||
o->noino= !!(ext & 256);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -559,7 +698,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)
|
||||
{
|
||||
*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);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -618,14 +759,28 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_in_charset(struct isoburn_read_opts *o,
|
||||
char **input_charset)
|
||||
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||
char **input_charset)
|
||||
{
|
||||
*input_charset= o->input_charset;
|
||||
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,
|
||||
uint32_t *size, int *has_what)
|
||||
{
|
||||
@ -649,15 +804,17 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
|
||||
o= (*new_o)= calloc(1, sizeof(struct isoburn_imgen_opts));
|
||||
if(o==NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Cannot allocate memory for image generation options",
|
||||
0, "FATAL", NULL);
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Cannot allocate memory for image generation options",
|
||||
0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
o->level= 2;
|
||||
o->rockridge= 1;
|
||||
o->joliet= 0;
|
||||
o->iso1999= 0;
|
||||
o->hardlinks= 0;
|
||||
o->aaip = 0;
|
||||
o->omit_version_numbers= 0;
|
||||
o->allow_deep_paths= 1;
|
||||
o->allow_longer_paths= 0;
|
||||
@ -666,6 +823,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
o->allow_lowercase= 0;
|
||||
o->allow_full_ascii= 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->replace_dir_mode= 0;
|
||||
o->replace_file_mode= 0;
|
||||
@ -675,8 +836,10 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||
o->file_mode= 0444;
|
||||
o->uid= 0;
|
||||
o->gid= 0;
|
||||
o->output_charset= 0;
|
||||
o->output_charset= NULL;
|
||||
o->fifo_size= 4*1024*1024;
|
||||
o->effective_lba= -1;
|
||||
o->data_start_lba= -1;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -710,13 +873,16 @@ int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext)
|
||||
o->rockridge= !!(ext&1);
|
||||
o->joliet= !!(ext&2);
|
||||
o->iso1999= !!(ext&4);
|
||||
o->hardlinks= !!(ext & 8);
|
||||
o->aaip= !!(ext & 32);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -731,6 +897,10 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
|
||||
o->allow_lowercase= !!(relax&32);
|
||||
o->allow_full_ascii= !!(relax&64);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -740,7 +910,9 @@ int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax)
|
||||
*relax= (!!o->omit_version_numbers) | ((!!o->allow_deep_paths)<<1) |
|
||||
((!!o->allow_longer_paths)<<2) | ((!!o->max_37_char_filenames)<<3) |
|
||||
((!!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);
|
||||
}
|
||||
|
||||
@ -836,3 +1008,16 @@ int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size)
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba)
|
||||
{
|
||||
*lba= o->effective_lba;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int isoburn_igopt_get_data_start(struct isoburn_imgen_opts *o, int *lba)
|
||||
{
|
||||
*lba= o->data_start_lba;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
@ -10,13 +10,35 @@
|
||||
#define Isoburn_includeD
|
||||
|
||||
|
||||
/* <<< transition macro */
|
||||
#define Libisoburn_no_fifO 1
|
||||
|
||||
|
||||
/* for uint8_t */
|
||||
#include <stdint.h>
|
||||
|
||||
/* For emulated TOC of overwriteable media.
|
||||
Provides minimal info for faking a struct burn_toc_entry.
|
||||
*/
|
||||
struct isoburn_toc_entry {
|
||||
int session;
|
||||
int track_no; /* point */
|
||||
int start_lba;
|
||||
int track_blocks;
|
||||
|
||||
char *volid; /* For caching a volume id from emulated toc on overwriteables */
|
||||
|
||||
struct isoburn_toc_entry *next;
|
||||
};
|
||||
|
||||
int isoburn_toc_entry_new(struct isoburn_toc_entry **objpt,
|
||||
struct isoburn_toc_entry *boss, int flag);
|
||||
|
||||
/* @param flag bit0= delete all subordinates too
|
||||
*/
|
||||
int isoburn_toc_entry_destroy(struct isoburn_toc_entry **o, int flag);
|
||||
|
||||
|
||||
/* Size of target_iso_head which is to be written during
|
||||
isoburn_activate_session()
|
||||
*/
|
||||
#define Libisoburn_target_head_sizE (32*2048)
|
||||
|
||||
struct isoburn {
|
||||
|
||||
@ -36,22 +58,43 @@ struct isoburn {
|
||||
struct isoburn *next;
|
||||
|
||||
|
||||
/* If >= 0, this address is used as reply for isoburn_disc_get_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
|
||||
media (usually Libisoburn_overwriteable_starT, but might be forced to 0)
|
||||
*/
|
||||
int zero_nwa;
|
||||
|
||||
/* Start address as given by image examination (bytes, not blocks) */
|
||||
off_t min_start_byte;
|
||||
|
||||
/* Aligned start address to be used for processing (counted in blocks) */
|
||||
int nwa;
|
||||
|
||||
|
||||
/* Truncate to .nwa an eventual regular file serving as output drive */
|
||||
int truncate;
|
||||
|
||||
/* Eventual freely fabricated isoburn_disc_get_status().
|
||||
BURN_DISC_UNREADY means that normally emulated status is in effect.
|
||||
BURN_DISC_UNREADY means that this variable is disabled
|
||||
and normally emulated status is in effect.
|
||||
*/
|
||||
enum burn_disc_status fabricated_disc_status;
|
||||
|
||||
#ifndef Libisoburn_no_fifO
|
||||
/* The fifo which is installed between track and libisofs burn_source
|
||||
*/
|
||||
struct burn_source *fifo;
|
||||
#endif /* ! Libisoburn_no_fifO */
|
||||
/* Eventual emulated table of content read from the chain of ISO headers
|
||||
on overwriteable media.
|
||||
*/
|
||||
struct isoburn_toc_entry *toc;
|
||||
|
||||
/* Indicator wether the most recent burn run worked :
|
||||
-1 = undetermined, ask libburn , 0 = failure , 1 = success
|
||||
@ -62,17 +105,19 @@ struct isoburn {
|
||||
|
||||
/* Buffered ISO head from media (should that become part of
|
||||
ecma119_read_opts ?) */
|
||||
uint8_t target_iso_head[65536];
|
||||
uint8_t target_iso_head[Libisoburn_target_head_sizE];
|
||||
|
||||
/* Libisofs image context */
|
||||
IsoImage *image;
|
||||
|
||||
#ifdef Libisoburn_no_fifO
|
||||
/* The block data source from which the existing image is read.
|
||||
*/
|
||||
IsoDataSource *iso_data_source;
|
||||
|
||||
/* The burn source which transfers data from libisofs to libburn.
|
||||
It has its own fifo.
|
||||
*/
|
||||
struct burn_source *iso_source;
|
||||
#endif /* Libisoburn_no_fifO */
|
||||
|
||||
/* For iso_tree_set_report_callback() */
|
||||
int (*read_pacifier)(IsoImage*, IsoFileSource*);
|
||||
@ -80,6 +125,12 @@ struct isoburn {
|
||||
/* For iso_image_attach_data() */
|
||||
void *read_pacifier_handle;
|
||||
|
||||
/* An application provided method to immediately deliver messages */
|
||||
int (*msgs_submit)(void *handle, int error_code, char msg_text[],
|
||||
int os_errno, char severity[], int flag);
|
||||
void *msgs_submit_handle; /* specific to application method */
|
||||
int msgs_submit_flag; /* specific to application method */
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -138,6 +189,11 @@ int isoburn_invalidate_iso(struct isoburn *o, int flag);
|
||||
int isoburn_find_emulator(struct isoburn **pt,
|
||||
struct burn_drive *drive, int flag);
|
||||
|
||||
/* Deliver an event message. Either via a non-NULL o->msgs_submit() method
|
||||
or via burn_msgs_submit() of libburn.
|
||||
*/
|
||||
int isoburn_msgs_submit(struct isoburn *o, int error_code, char msg_text[],
|
||||
int os_errno, char severity[], int flag);
|
||||
|
||||
/** Set the start address for an emulated add-on session. The value will
|
||||
be rounded up to the alignment necessary for the media. The aligned
|
||||
@ -149,6 +205,19 @@ int isoburn_find_emulator(struct isoburn **pt,
|
||||
*/
|
||||
int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||
|
||||
/** Obtains the image address offset to be used with image generation.
|
||||
This is either the (emulated) drive nwa or a value set by
|
||||
isoburn_prepare_blind_grow().
|
||||
In any case this is the address to tell to iso_write_opts_set_ms_block().
|
||||
@param o The isoburn object to be inquired
|
||||
@param opts If not NULL: write parameters to be set on drive before query
|
||||
@param msc2 The value to be used with iso_write_opts_set_ms_block()
|
||||
@param flag unused yet
|
||||
@return <=0 is failure , >0 success
|
||||
*/
|
||||
int isoburn_get_msc2(struct isoburn *o,
|
||||
struct burn_write_opts *opts, int *msc2, int flag);
|
||||
|
||||
/** Get a data source suitable for read from a drive using burn_read_data()
|
||||
function.
|
||||
@param d drive to read from. Must be grabbed.
|
||||
@ -159,6 +228,19 @@ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag);
|
||||
IsoDataSource *
|
||||
isoburn_data_source_new(struct burn_drive *d);
|
||||
|
||||
/** Disable read capabilities of a data source which was originally created
|
||||
by isoburn_data_source_new(). After this any attempt to read will yield
|
||||
a FATAL programming error event.
|
||||
This is usually done to allow libburn to release the drive while libisofs
|
||||
still holds a reference to the data source object. libisofs is not supposed
|
||||
to use this object for reading any more, nevertheless. The disabled state
|
||||
of the data source is a safety fence around this daring situation.
|
||||
@param src The data source to be disabled
|
||||
@param flag unused yet
|
||||
@return <=0 is failure , >0 success
|
||||
*/
|
||||
int isoburn_data_source_shutdown(IsoDataSource *src, int flag);
|
||||
|
||||
|
||||
/**
|
||||
* Options for image reading.
|
||||
@ -170,6 +252,15 @@ struct isoburn_read_opts {
|
||||
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
|
||||
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
|
||||
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 */
|
||||
|
||||
unsigned int preferjoliet:1;
|
||||
/*< When both Joliet and RR extensions are present, the RR
|
||||
* tree is used. If you prefer using Joliet, set this to 1. */
|
||||
@ -184,6 +275,15 @@ struct isoburn_read_opts {
|
||||
*/
|
||||
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 */
|
||||
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
|
||||
to 0 if not. */
|
||||
@ -222,6 +322,12 @@ struct isoburn_imgen_opts {
|
||||
unsigned int joliet :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;
|
||||
|
||||
/* relaxed constraints */
|
||||
|
||||
/*
|
||||
@ -277,6 +383,31 @@ struct isoburn_imgen_opts {
|
||||
*/
|
||||
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;
|
||||
/**< If files should be sorted based on their weight. */
|
||||
|
||||
@ -315,6 +446,86 @@ struct isoburn_imgen_opts {
|
||||
*/
|
||||
int fifo_size;
|
||||
|
||||
|
||||
/** Output value: Block address of session start as evaluated from media
|
||||
and other options by libisoburn and libburn.
|
||||
If <0 : Invalid
|
||||
If >=0: Valid block number. Block size is always 2 KiB.
|
||||
*/
|
||||
int effective_lba;
|
||||
|
||||
/** 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;
|
||||
};
|
||||
|
||||
|
||||
/* Alignment for session starts on overwriteable media.
|
||||
(Increased from 16 to 32 blocks for aligning to BD-RE clusters.)
|
||||
*/
|
||||
#define Libisoburn_nwa_alignemenT 32
|
||||
|
||||
|
||||
/* Alignment for outer session scanning with -ROM drives.
|
||||
(E.g. my DVD-ROM drive shows any DVD type as 0x10 "DVD-ROM" with
|
||||
more or less false capacity and TOC.)
|
||||
*/
|
||||
#define Libisoburn_toc_scan_alignemenT 16
|
||||
|
||||
/* Maximum gap to be bridged during a outer TOC scan. Gaps appear between the
|
||||
end of a session and the start of the next session.
|
||||
The longest gap found so far was about 38100 after the first session of a
|
||||
DVD-R.
|
||||
*/
|
||||
#define Libisoburn_toc_scan_max_gaP 65536
|
||||
|
||||
|
||||
/* Creating a chain of image headers which form a TOC:
|
||||
|
||||
The header of the first session is written after the LBA 0 header.
|
||||
So it persists and can give the end of its session. By help of
|
||||
Libisoburn_nwa_alignemenT it should be possible to predict the start
|
||||
of the next session header.
|
||||
The LBA 0 header is written by isoburn_activate_session() already
|
||||
with the first session. So the media is mountable.
|
||||
A problem arises with DVD-RW in Intermediate State. They cannot be
|
||||
written by random access before they were written sequentially.
|
||||
In this case, no copy of the session 1 header is maintained and no TOC
|
||||
will be possible. Thus writing begins sequentially at LBA 0.
|
||||
*/
|
||||
#define Libisoburn_overwriteable_starT \
|
||||
((off_t) (Libisoburn_target_head_sizE/2048))
|
||||
|
||||
|
||||
/* Wrappers for emulation of TOC on overwriteable media */
|
||||
|
||||
struct isoburn_toc_track {
|
||||
/* Either track or toc_entry are supposed to be NULL */
|
||||
struct burn_track *track;
|
||||
struct isoburn_toc_entry *toc_entry;
|
||||
};
|
||||
|
||||
struct isoburn_toc_session {
|
||||
/* Either session or tracks and toc_entry are supposed to be NULL */
|
||||
struct burn_session *session;
|
||||
struct isoburn_toc_track **track_pointers;
|
||||
int track_count;
|
||||
struct isoburn_toc_entry *toc_entry;
|
||||
};
|
||||
|
||||
struct isoburn_toc_disc {
|
||||
/* Either disc or sessions and toc are supposed to be NULL */
|
||||
struct burn_disc *disc;
|
||||
struct isoburn_toc_session *sessions; /* storage array */
|
||||
struct isoburn_toc_session **session_pointers; /* storage array */
|
||||
struct isoburn_toc_track *tracks; /* storage array */
|
||||
struct isoburn_toc_track **track_pointers; /* storage array */
|
||||
int session_count;
|
||||
int track_count;
|
||||
struct isoburn_toc_entry *toc;
|
||||
};
|
||||
|
||||
#endif /* Isoburn_includeD */
|
||||
|
@ -6,12 +6,13 @@
|
||||
/*
|
||||
libisofs related functions of libisoburn.
|
||||
|
||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef Xorriso_standalonE
|
||||
|
||||
@ -26,7 +27,6 @@
|
||||
|
||||
#endif /* Xorriso_standalonE */
|
||||
|
||||
|
||||
#include "isoburn.h"
|
||||
#include "libisoburn.h"
|
||||
|
||||
@ -112,29 +112,29 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
struct isoburn_read_opts *read_opts,
|
||||
IsoImage **image)
|
||||
{
|
||||
int ret, int_num;
|
||||
int ret, int_num, dummy;
|
||||
IsoReadOpts *ropts= NULL;
|
||||
IsoReadImageFeatures *features= NULL;
|
||||
uint32_t ms_block;
|
||||
|
||||
char msg[160];
|
||||
enum burn_disc_status status= BURN_DISC_BLANK;
|
||||
IsoDataSource *ds= NULL;
|
||||
struct isoburn *o= NULL;
|
||||
|
||||
if(read_opts==NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Program error: isoburn_read_image: read_opts==NULL",
|
||||
0, "FATAL", NULL);
|
||||
return(-1);
|
||||
}
|
||||
if(d != NULL) {
|
||||
ret = isoburn_find_emulator(&o, d, 0);
|
||||
if (ret < 0 || o == NULL)
|
||||
return 0;
|
||||
status = isoburn_disc_get_status(d);
|
||||
}
|
||||
if(read_opts==NULL) {
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Program error: isoburn_read_image: read_opts==NULL",
|
||||
0, "FATAL", 0);
|
||||
return(-1);
|
||||
}
|
||||
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
|
||||
|
||||
create_blank_image:;
|
||||
/*
|
||||
* Blank disc, we create a new image without files.
|
||||
*/
|
||||
@ -142,9 +142,9 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
if (d == NULL) {
|
||||
/* New empty image without relation to a drive */
|
||||
if (image==NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Program error: isoburn_read_image: image==NULL",
|
||||
0, "FATAL", NULL);
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Program error: isoburn_read_image: image==NULL",
|
||||
0, "FATAL", 0);
|
||||
return -1;
|
||||
}
|
||||
/* create a new image */
|
||||
@ -166,13 +166,15 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
iso_image_ref(*image); /*protects object from premature free*/
|
||||
}
|
||||
}
|
||||
iso_image_set_ignore_aclea(*image,
|
||||
(!!(read_opts->noacl)) | ((!!read_opts->noea) << 1) );
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (status != BURN_DISC_APPENDABLE && status != BURN_DISC_FULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Program error: isoburn_read_image: incorrect disc status",
|
||||
0, "FATAL", NULL);
|
||||
0, "FATAL", 0);
|
||||
return -4;
|
||||
}
|
||||
|
||||
@ -182,6 +184,12 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
if (ret <= 0)
|
||||
return -2;
|
||||
ms_block= int_num;
|
||||
ret = isoburn_read_iso_head(d, int_num, &dummy, NULL, 0);
|
||||
if (ret <= 0) {
|
||||
sprintf(msg, "No ISO 9660 image at LBA %d. Creating blank image.", int_num);
|
||||
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
|
||||
goto create_blank_image;
|
||||
}
|
||||
|
||||
/* create the data source */
|
||||
ret = iso_read_opts_new(&ropts, 0);
|
||||
@ -192,6 +200,15 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
/* Important: do not return until iso_read_opts_free() */
|
||||
iso_read_opts_set_start_block(ropts, ms_block);
|
||||
iso_read_opts_set_no_rockridge(ropts, read_opts->norock);
|
||||
iso_read_opts_set_no_aaip(ropts, read_opts->noaaip);
|
||||
|
||||
/* <<< #ifdef shall be removed when libisofs-0.6.20 is released */
|
||||
#ifdef Libisofs_hardlink_prooF
|
||||
|
||||
iso_read_opts_set_new_inos(ropts, read_opts->noino);
|
||||
|
||||
#endif /* Libisofs_hardlink_prooF */
|
||||
|
||||
iso_read_opts_set_no_joliet(ropts, read_opts->nojoliet);
|
||||
iso_read_opts_set_no_iso1999(ropts, read_opts->noiso1999);
|
||||
iso_read_opts_set_preferjoliet(ropts, read_opts->preferjoliet);
|
||||
@ -200,7 +217,12 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
iso_read_opts_set_default_uid(ropts, read_opts->uid);
|
||||
iso_read_opts_set_default_gid(ropts, read_opts->gid);
|
||||
iso_read_opts_set_input_charset(ropts, read_opts->input_charset);
|
||||
iso_read_opts_auto_input_charset(ropts, read_opts->auto_input_charset);
|
||||
|
||||
ds = isoburn_data_source_new(d);
|
||||
if(o->iso_data_source!=NULL)
|
||||
iso_data_source_unref(o->iso_data_source);
|
||||
o->iso_data_source= ds;
|
||||
iso_image_attach_data(o->image, o->read_pacifier_handle,
|
||||
isoburn_idle_free_function);
|
||||
if(o->read_pacifier_handle==NULL)
|
||||
@ -210,7 +232,7 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
ret = iso_image_import(o->image, ds, ropts, &features);
|
||||
iso_tree_set_report_callback(o->image, NULL);
|
||||
iso_read_opts_free(ropts);
|
||||
iso_data_source_unref(ds);
|
||||
|
||||
if (ret < 0) {
|
||||
isoburn_report_iso_error(ret, "Cannot import image", 0, "FAILURE", 0);
|
||||
return ret;
|
||||
@ -225,15 +247,6 @@ int isoburn_read_image(struct burn_drive *d,
|
||||
read_opts->hasIso1999 = iso_read_image_features_has_iso1999(features);
|
||||
read_opts->hasElTorito = iso_read_image_features_has_eltorito(features);
|
||||
read_opts->size = iso_read_image_features_get_size(features);
|
||||
|
||||
#ifdef NIX
|
||||
read_opts->hasRR = features->hasRR;
|
||||
read_opts->hasJoliet = features->hasJoliet;
|
||||
read_opts->hasIso1999 = features->hasIso1999;
|
||||
read_opts->hasElTorito = features->hasElTorito;
|
||||
read_opts->size = features->size;
|
||||
#endif
|
||||
|
||||
iso_read_image_features_destroy(features);
|
||||
return 1;
|
||||
}
|
||||
@ -246,15 +259,15 @@ int isoburn_attach_image(struct burn_drive *d, IsoImage *image)
|
||||
int ret;
|
||||
struct isoburn *o;
|
||||
|
||||
if (image == NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Program error: isoburn_attach_image: image==NULL",
|
||||
0, "FATAL", NULL);
|
||||
return -1;
|
||||
}
|
||||
ret = isoburn_find_emulator(&o, d, 0);
|
||||
if (ret < 0 || o == NULL)
|
||||
return 0;
|
||||
if (image == NULL) {
|
||||
isoburn_msgs_submit(o, 0x00060000,
|
||||
"Program error: isoburn_attach_image: image==NULL",
|
||||
0, "FATAL", 0);
|
||||
return -1;
|
||||
}
|
||||
if(o->image != NULL)
|
||||
iso_image_unref(o->image);
|
||||
o->image = image;
|
||||
@ -275,12 +288,16 @@ int isoburn_activate_session(struct burn_drive *drive)
|
||||
|
||||
if (o->emulation_mode != 1)
|
||||
return 1; /* don't need to activate session */
|
||||
if (o->fabricated_msc2 >= 0)
|
||||
return 1; /* blind growing: do not alter anything outside the session */
|
||||
|
||||
if (o->fabricated_disc_status != BURN_DISC_APPENDABLE)
|
||||
if (!(o->fabricated_disc_status == BURN_DISC_APPENDABLE ||
|
||||
(o->fabricated_disc_status == BURN_DISC_BLANK &&
|
||||
o->zero_nwa > 0)))
|
||||
return 1;
|
||||
|
||||
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
|
||||
32*2048, 1);
|
||||
ret = burn_random_access_write(drive, (off_t) 0, (char*)o->target_iso_head,
|
||||
Libisoburn_target_head_sizE, 1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -300,9 +317,9 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
struct ecma119_pri_vol_desc *pvm;
|
||||
|
||||
if(o==NULL) {
|
||||
burn_msgs_submit(0x00060000,
|
||||
"Program error: isoburn_start_emulation: o==NULL",
|
||||
0, "FATAL", NULL);
|
||||
isoburn_msgs_submit(NULL, 0x00060000,
|
||||
"Program error: isoburn_start_emulation: o==NULL",
|
||||
0, "FATAL", 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -311,7 +328,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
/* we can assume 0 as start block for image */
|
||||
/* TODO what about ms? where we validate valid iso image in ms disc? */
|
||||
ret = burn_read_data(drive, (off_t) 0, (char*)o->target_iso_head,
|
||||
sizeof(o->target_iso_head), &data_count, 2);
|
||||
(off_t) Libisoburn_target_head_sizE, &data_count, 2);
|
||||
|
||||
/* an error means an empty disc */
|
||||
if (ret <= 0) {
|
||||
@ -321,7 +338,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
|
||||
/* check first 64K. If 0's, the disc is treated as a blank disc, and thus
|
||||
overwritten without extra check. */
|
||||
i = sizeof(o->target_iso_head);
|
||||
i = Libisoburn_target_head_sizE;
|
||||
while (i && !o->target_iso_head[i-1])
|
||||
--i;
|
||||
|
||||
@ -351,7 +368,7 @@ int isoburn_start_emulation(struct isoburn *o, int flag)
|
||||
} else if (!strncmp((char*)pvm->std_identifier, "CDXX1", 5)) {
|
||||
|
||||
/* empty image */
|
||||
isoburn_set_start_byte(o, (off_t) 0, 0);
|
||||
isoburn_set_start_byte(o, o->zero_nwa * 2048, 0);
|
||||
o->fabricated_disc_status= BURN_DISC_BLANK;
|
||||
} else {
|
||||
/* treat any disc in an unknown format as full */
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
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>
|
||||
*/
|
||||
|
||||
@ -62,12 +62,12 @@ libburn demands rw-permissions to drive device file resp. file object.
|
||||
If the input drive provides a suitable ISO RockRidge image, then its tree
|
||||
may be loaded into memory and can then be manipulated by libisofs API calls.
|
||||
The loading is done by isoburn_read_image() under control of
|
||||
struct isoburn_read_opts which the application obtains from libisoburn.
|
||||
It may be manipulated by the family of isoburn_ropt_set_*() functions.
|
||||
struct isoburn_read_opts which the application obtains from libisoburn
|
||||
and manipulates by the family of isoburn_ropt_set_*() functions.
|
||||
|
||||
Writing of result images is controlled by libisofs related parameters
|
||||
in a struct isoburn_imgen_opts which the application obtains from libisoburn.
|
||||
It may be manipulated by the family of isoburn_igopt_set_*() functions.
|
||||
in a struct isoburn_imgen_opts which the application obtains from libisoburn
|
||||
and manipulates by the family of isoburn_igopt_set_*() functions.
|
||||
|
||||
All multi-session aspects are handled by libisoburn according to these
|
||||
settings. The application does not have to analyze media state and write
|
||||
@ -75,23 +75,35 @@ job parameters. It rather states its desires which libisoburn tries to
|
||||
fulfill, or else will refuse to start the write run.
|
||||
|
||||
|
||||
Setup for Growing or Modifying
|
||||
Setup for Growing, Modifying or Blind Growing
|
||||
|
||||
The connector function family offers two alternative API calls for performing
|
||||
the setup for two alternative image generation strategies.
|
||||
The connector function family offers alternative API calls for performing
|
||||
the setup for several alternative image generation strategies.
|
||||
|
||||
Growing:
|
||||
If input and output drive is the same, then isoburn_prepare_disc() is to
|
||||
If input and output drive are the same, then isoburn_prepare_disc() is to
|
||||
be used. It will lead to an add-on session on appendable or overwriteable
|
||||
media with existing ISO image. With blank media it will produce a first
|
||||
session.
|
||||
|
||||
Modifying:
|
||||
If the output drive is not the input drive, then it has to bear blank media
|
||||
or overwriteable without a valid ISO image. To prepare for such an image
|
||||
generation run, use isoburn_prepare_new_image(). The run will copy file data
|
||||
from an eventual input drive with valid image, add any newly introduced data
|
||||
from the local filesystem, and produce a first session on output media.
|
||||
If the output drive is not the input drive, and if it bears blank media
|
||||
or overwriteable without a valid ISO image, then one may produce a consolidated
|
||||
image with old and new data. This will copy file data from an eventual input
|
||||
drive with valid image, add any newly introduced data from the local
|
||||
filesystem, and produce a first session on output media.
|
||||
To prepare for such an image generation run, use isoburn_prepare_new_image().
|
||||
|
||||
Blind Growing:
|
||||
This method reads the old image from one drive and writes the add-on session
|
||||
to a different drive. That output drive is nevertheless supposed to
|
||||
finally lead to the same media from where the session was loaded. Usually it
|
||||
will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program
|
||||
like with this classic gesture:
|
||||
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||
Blind growing is prepared by the call isoburn_prepare_blind_grow().
|
||||
The input drive should be released immediately after this call in order
|
||||
to allow the consumer of the output stream to access that drive for writing.
|
||||
|
||||
After either of these setups, some peripheral libburn drive parameter settings
|
||||
like burn_write_opts_set_simulate(), burn_write_opts_set_multi(),
|
||||
@ -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
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@ -164,12 +192,19 @@ int isoburn_is_compatible(int major, int minor, int micro, int flag);
|
||||
Pare numbers indicate a version with frozen API. I.e. you can
|
||||
rely on the same set of features to be present in all
|
||||
published releases with that major.minor.micro combination.
|
||||
Features of a pare release will stay available and ABI
|
||||
compatible as long as the SONAME of libisoburn stays "1".
|
||||
Currently there are no plans to ever change the SONAME.
|
||||
|
||||
Odd numbers indicate that API upgrades are in progress.
|
||||
I.e. new features might be already present or they might
|
||||
be still missing.
|
||||
be still missing. Newly introduced features may be changed
|
||||
incompatibly or even be revoked before release of a pare
|
||||
version.
|
||||
So micro revisions {1,3,5,7,9} should never be used for
|
||||
dynamic linking unless the proper library match can be
|
||||
guaranteed by external circumstances.
|
||||
|
||||
@return 1 success, <=0 might in future become an error indication
|
||||
*/
|
||||
void isoburn_version(int *major, int *minor, int *micro);
|
||||
@ -181,15 +216,15 @@ void isoburn_version(int *major, int *minor, int *micro);
|
||||
*/
|
||||
#define isoburn_libisofs_req_major 0
|
||||
#define isoburn_libisofs_req_minor 6
|
||||
#define isoburn_libisofs_req_micro 2
|
||||
#define isoburn_libisofs_req_micro 20
|
||||
|
||||
/** The minimum version of libburn to be used with this version of libisoburn
|
||||
at compile time.
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_libburn_req_major 0
|
||||
#define isoburn_libburn_req_minor 4
|
||||
#define isoburn_libburn_req_micro 2
|
||||
#define isoburn_libburn_req_minor 6
|
||||
#define isoburn_libburn_req_micro 4
|
||||
|
||||
|
||||
/** The minimum version of libisofs to be used with this version of libisoburn
|
||||
@ -224,13 +259,13 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
|
||||
@since 0.1.0
|
||||
*/
|
||||
#define isoburn_header_version_major 0
|
||||
#define isoburn_header_version_minor 0
|
||||
#define isoburn_header_version_micro 1
|
||||
#define isoburn_header_version_minor 4
|
||||
#define isoburn_header_version_micro 0
|
||||
/** Note:
|
||||
Above version numbers are also recorded in configure.ac because libtool
|
||||
wants them as parameters at build time.
|
||||
For the library compatibility check ISOBURN_*_VERSION in configure.ac
|
||||
are not decisive. Only the three numbers above do matter.
|
||||
For the library compatibility check, ISOBURN_*_VERSION in configure.ac
|
||||
are not decisive. Only the three numbers here do matter.
|
||||
*/
|
||||
/** Usage discussion:
|
||||
|
||||
@ -273,12 +308,42 @@ at the cost of excluding some older libraries.
|
||||
|
||||
These two advises are mutually exclusive.
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
For an implementation of the Thomas Schmitt approach,
|
||||
see libisoburn/burn_wrap.c : isoburn_initialize()
|
||||
This connects libisoburn as "application" with libisofs
|
||||
as "library".
|
||||
|
||||
The compatible part of Vreixo Formoso's approach is implemented
|
||||
in configure.ac LIBBURN_REQUIRED, LIBISOFS_REQUIRED.
|
||||
In isoburn_initialize() it would rather test by
|
||||
iso_lib_is_compatible(isoburn_libisofs_req_major,...
|
||||
than by
|
||||
iso_lib_is_compatible(iso_lib_header_version_major,...
|
||||
and would leave out the ugly compile time traps.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** Announce to the library an application provided method for immediate
|
||||
delivery of messages. It is used when no drive is affected directly or
|
||||
if the drive has no own msgs_submit() method attached by
|
||||
isoburn_drive_set_msgs_submit.
|
||||
If no method is preset or if the method is set to NULL then libisoburn
|
||||
delivers its messages through the message queue of libburn.
|
||||
@param msgs_submit The function call which implements the method
|
||||
@param submit_handle Handle to be used as first argument of msgs_submit
|
||||
@param submit_flag Flag to be used as last argument of msgs_submit
|
||||
@param flag Unused yet, submit 0
|
||||
@since 0.2.0
|
||||
*/
|
||||
int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
|
||||
char msg_text[], int os_errno,
|
||||
char severity[], int flag),
|
||||
void *submit_handle, int submit_flag, int flag);
|
||||
|
||||
|
||||
/** Aquire a target drive by its filesystem path resp. libburn persistent
|
||||
address.
|
||||
Wrapper for: burn_drive_scan_and_grab()
|
||||
@ -287,7 +352,8 @@ see libisoburn/burn_wrap.c : isoburn_initialize()
|
||||
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||
the array has no valid elements at all.
|
||||
The returned array should be freed via burn_drive_info_free()
|
||||
when the drive is no longer needed.
|
||||
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 load 1 attempt to load the disc tray. 0 no attempt,rather failure.
|
||||
@return 1 = success , 0 = drive not found , <0 = other error
|
||||
@ -296,17 +362,66 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
||||
char* adr, int load);
|
||||
|
||||
|
||||
/** Aquire a target drive by its filesystem path resp. libburn persistent
|
||||
address. This is a modern successor of isoburn_drive_scan_and_grab().
|
||||
Wrapper for: burn_drive_scan_and_grab()
|
||||
@since 0.1.2
|
||||
@param drive_infos On success returns a one element array with the drive
|
||||
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||
the array has no valid elements at all.
|
||||
The returned array should be freed via burn_drive_info_free()
|
||||
when the drive is no longer needed. 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 flag bit0= attempt to load the disc tray.
|
||||
Else: failure if not loaded.
|
||||
bit1= regard overwriteable media as blank
|
||||
bit2= if the drive is a regular disk file: truncate it to
|
||||
the write start address
|
||||
bit3= if the drive reports a read-only profile try to read
|
||||
table of content by scanning for ISO image headers.
|
||||
(depending on media type and drive this might
|
||||
help or it might make the resulting toc even worse)
|
||||
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
|
||||
*/
|
||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||
char* adr, int flag);
|
||||
|
||||
/** Aquire a drive from the burn_drive_info[] array which was obtained by
|
||||
a previous call of burn_drive_scan().
|
||||
Wrapper for: burn_drive_grab()
|
||||
@since 0.1.0
|
||||
@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.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_drive_grab(struct burn_drive *drive, int load);
|
||||
|
||||
|
||||
/** Attach to a drive an application provided method for immediate
|
||||
delivery of messages.
|
||||
If no method is set or if the method is set to NULL then libisoburn
|
||||
delivers messages of the drive through the global msgs_submit() method
|
||||
set by isoburn_set_msgs_submiti() or by the message queue of libburn.
|
||||
@since 0.2.0
|
||||
@param d The drive to which this function, handle and flag shall apply
|
||||
@param msgs_submit The function call which implements the method
|
||||
@param submit_handle Handle to be used as first argument of msgs_submit
|
||||
@param submit_flag Flag to be used as last argument of msgs_submit
|
||||
@param flag Unused yet, submit 0
|
||||
*/
|
||||
int isoburn_drive_set_msgs_submit(struct burn_drive *d,
|
||||
int (*msgs_submit)(void *handle, int error_code,
|
||||
char msg_text[], int os_errno,
|
||||
char severity[], int flag),
|
||||
void *submit_handle, int submit_flag, int flag);
|
||||
|
||||
|
||||
/** Inquire the media status. Expect the whole spectrum of libburn BURN_DISC_*
|
||||
with multi-session media. Emulated states with random access media are
|
||||
BURN_DISC_BLANK and BURN_DISC_APPENDABLE.
|
||||
@ -341,6 +456,220 @@ int isoburn_disc_erasable(struct burn_drive *d);
|
||||
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||
|
||||
|
||||
/** Set up isoburn_disc_get_msc1() to return a fabricated value.
|
||||
This makes only sense between aquiring the drive and reading the
|
||||
image. After isoburn_read_image() it will confuse the coordination
|
||||
of libisoburn and libisofs.
|
||||
Note: Sessions and tracks are counted beginning with 1, not with 0.
|
||||
@since 0.1.6
|
||||
@param drive The drive where msc1 is to be set
|
||||
@param adr_mode Determines how to interpret adr_value and to set msc1.
|
||||
If adr_value shall represent a number then decimal ASCII
|
||||
digits are expected.
|
||||
0= start lba of last session in TOC, ignore adr_value
|
||||
1= start lba of session number given by adr_value
|
||||
2= start lba of track given number by adr_value
|
||||
3= adr_value itself is the lba to be used
|
||||
4= start lba of last session with volume id
|
||||
given by adr_value
|
||||
@param adr_value A string describing the value to be eventually used.
|
||||
@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 flag);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
/*
|
||||
|
||||
Wrappers for emulation of TOC on overwriteable media
|
||||
|
||||
Media which match the overwriteable usage model lack of a history of sessions
|
||||
and tracks. libburn will not even hand out a burn_disc object for them and
|
||||
always declare them blank. libisoburn checks for a valid ISO filesystem
|
||||
header at LBA 0 and eventually declares them appendable.
|
||||
Nevertheless one can only determine an upper limit of the size of the overall
|
||||
image (by isoburn_get_min_start_byte()) but not a list of stored sessions
|
||||
and their LBAs, as it is possible with true multi-session media.
|
||||
|
||||
The following wrappers add the capability to obtain a session and track TOC
|
||||
from emulated multi-session images on overwriteables if the first session
|
||||
was written by libisoburn-0.1.6 or later (i.e. with a header copy at LBA 32).
|
||||
|
||||
Be aware that the structs emitted by these isoburn calls are not compatible
|
||||
with the libburn structs. I.e. you may use them only with isoburn_toc_*
|
||||
calls.
|
||||
isoburn_toc_disc needs to be freed after use. isoburn_toc_session and
|
||||
isoburn_toc_track vanish together with their isoburn_toc_disc.
|
||||
*/
|
||||
|
||||
/* Opaque handles to media, session, track */
|
||||
struct isoburn_toc_disc;
|
||||
struct isoburn_toc_session;
|
||||
struct isoburn_toc_track;
|
||||
|
||||
|
||||
/** Obtain a master handle for the table of content.
|
||||
This handle governs allocated resources which have to be released by
|
||||
isoburn_toc_disc_free() when no longer needed.
|
||||
Wrapper for: burn_drive_get_disc()
|
||||
@since 0.1.6
|
||||
@param drive The drive with the media to inspect
|
||||
@return NULL in case there is no content info, else it is a valid handle
|
||||
*/
|
||||
struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
|
||||
|
||||
|
||||
/** Tell the number of 2048 byte blocks covered by the table of content.
|
||||
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
|
||||
@param disc The master handle of the media
|
||||
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||
*/
|
||||
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc);
|
||||
|
||||
|
||||
/** Get the array of session handles from the table of content.
|
||||
Wrapper for: burn_disc_get_sessions()
|
||||
@since 0.1.6
|
||||
@param disc The master handle of the media
|
||||
@param num returns the number of sessions in the array
|
||||
@return the address of the array of session handles
|
||||
*/
|
||||
struct isoburn_toc_session **isoburn_toc_disc_get_sessions(
|
||||
struct isoburn_toc_disc *disc, int *num);
|
||||
|
||||
|
||||
/** Tell the number of 2048 byte blocks covered by a particular session.
|
||||
Wrapper for: burn_session_get_sectors()
|
||||
@since 0.1.6
|
||||
@param s The session handle
|
||||
@return number of blocks, <=0 indicates unknown or unreadable state
|
||||
*/
|
||||
int isoburn_toc_session_get_sectors(struct isoburn_toc_session *s);
|
||||
|
||||
|
||||
/** Obtain a copy of the entry which describes the end of a particular session.
|
||||
Wrapper for: burn_session_get_leadout_entry()
|
||||
@since 0.1.6
|
||||
@param s The session handle
|
||||
@param entry A pointer to memory provided by the caller. It will be filled
|
||||
with info according to struct burn_toc_entry as defined
|
||||
in libburn.h
|
||||
*/
|
||||
void isoburn_toc_session_get_leadout_entry(struct isoburn_toc_session *s,
|
||||
struct burn_toc_entry *entry);
|
||||
|
||||
|
||||
/** Get the array of track handles from a particular session.
|
||||
Wrapper for: burn_session_get_tracks()
|
||||
@since 0.1.6
|
||||
@param s The session handle
|
||||
@param num returns the number of tracks in the array
|
||||
@return the address of the array of track handles
|
||||
*/
|
||||
struct isoburn_toc_track **isoburn_toc_session_get_tracks(
|
||||
struct isoburn_toc_session *s, int *num);
|
||||
|
||||
|
||||
/** Obtain a copy of the entry which describes a particular track.
|
||||
Wrapper for: burn_track_get_entry()
|
||||
@since 0.1.6
|
||||
@param t The track handle
|
||||
@param entry A pointer to memory provided by the caller. It will be filled
|
||||
with info according to struct burn_toc_entry as defined
|
||||
in libburn.h
|
||||
*/
|
||||
void isoburn_toc_track_get_entry(struct isoburn_toc_track *t,
|
||||
struct burn_toc_entry *entry);
|
||||
|
||||
|
||||
/** 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.
|
||||
The handle is invalid afterwards and may not be used any more.
|
||||
Wrapper for: burn_disc_free()
|
||||
@since 0.1.6
|
||||
@param disc The master handle of the media
|
||||
*/
|
||||
void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
||||
|
||||
|
||||
/** Try whether the data at the given address look like a ISO 9660
|
||||
image header and obtain its alleged size. Depending on the info mode
|
||||
one other string of text information can be retrieved too.
|
||||
@since 0.1.6
|
||||
@param drive The drive with the media to inspect
|
||||
@param lba The block number from where to read
|
||||
@param image_blocks The number of 2048 bytes blocks
|
||||
@param info Caller provided memory, enough to take eventual info reply
|
||||
@param flag bit0-7: info return mode
|
||||
0= do not return anything in info (do not even touch it)
|
||||
1= copy volume id to info (info needs 33 bytes)
|
||||
2= @since 0.2.2 :
|
||||
copy 64 kB header to info (needs 65536 bytes)
|
||||
bit13= @since 0.2.2:
|
||||
do not read head from media but use first 64 kB from info
|
||||
bit14= check both half buffers (not only second)
|
||||
return 2 if found in first block
|
||||
bit15= return -1 on read error
|
||||
@return >0 seems to be a valid ISO image, 0 format not recognized, <0 error
|
||||
*/
|
||||
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||
int *image_blocks, char *info, int flag);
|
||||
|
||||
|
||||
/** 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);
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
/*
|
||||
|
||||
@ -389,6 +718,27 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
||||
tree is used. If you prefer using Joliet, set this to 1.
|
||||
bit4= pretend_blank
|
||||
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.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
#define isoburn_ropt_norock 1
|
||||
@ -396,6 +746,11 @@ int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
||||
#define isoburn_ropt_noiso1999 4
|
||||
#define isoburn_ropt_preferjoliet 8
|
||||
#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
|
||||
|
||||
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
|
||||
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
|
||||
|
||||
@ -436,7 +791,7 @@ int isoburn_ropt_get_default_dirperms(struct isoburn_read_opts *o,
|
||||
/** Set the character set for reading RR file names from ISO images.
|
||||
@since 0.1.0
|
||||
@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
|
||||
name, e.g. as listed by program iconv -l.
|
||||
Example: "UTF-8".
|
||||
@ -447,6 +802,20 @@ int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
||||
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||
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
|
||||
available in the option set.
|
||||
@ -471,6 +840,13 @@ int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||
#define isoburn_ropt_has_joliet 2
|
||||
#define isoburn_ropt_has_iso1999 4
|
||||
#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,
|
||||
uint32_t *size, int *has_what);
|
||||
|
||||
@ -538,11 +914,23 @@ int isoburn_igopt_get_level(struct isoburn_imgen_opts *o, int *level);
|
||||
Weaker than RockRidge, but also readable with Linux.
|
||||
bit2= iso1999
|
||||
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.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
#define isoburn_igopt_rockridge 1
|
||||
#define isoburn_igopt_joliet 2
|
||||
#define isoburn_igopt_iso1999 4
|
||||
#define isoburn_igopt_hardlinks 8
|
||||
#define isoburn_igopt_aaip 32
|
||||
int isoburn_igopt_set_extensions(struct isoburn_imgen_opts *o, int ext);
|
||||
int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
|
||||
@ -583,6 +971,27 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
bit7= joliet_longer_paths
|
||||
Allow paths in the Joliet tree to have more than
|
||||
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
|
||||
*/
|
||||
#define isoburn_igopt_omit_version_numbers 1
|
||||
@ -593,6 +1002,10 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
|
||||
#define isoburn_igopt_allow_lowercase 32
|
||||
#define isoburn_igopt_allow_full_ascii 64
|
||||
#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_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
|
||||
|
||||
@ -683,6 +1096,33 @@ int isoburn_igopt_set_fifo_size(struct isoburn_imgen_opts *o, int fifo_size);
|
||||
int isoburn_igopt_get_fifo_size(struct isoburn_imgen_opts *o, int *fifo_size);
|
||||
|
||||
|
||||
/** Obtain after image preparation the block address where the session will
|
||||
start on media.
|
||||
This value cannot be set by the application but only be inquired.
|
||||
@since 0.1.4
|
||||
@param o The option set to work on
|
||||
@param lba The block number of the session start on media.
|
||||
<0 means that no address has been determined yet.
|
||||
@return 1 success, <=0 failure
|
||||
*/
|
||||
int isoburn_igopt_get_effective_lba(struct isoburn_imgen_opts *o, int *lba);
|
||||
|
||||
|
||||
/** 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 */
|
||||
/* ----------------------------------------------------------------------- */
|
||||
@ -782,9 +1222,13 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
|
||||
|
||||
|
||||
/** 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,
|
||||
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()
|
||||
@since 0.1.0
|
||||
@param d The drive to inquire
|
||||
@ -822,7 +1266,8 @@ int isoburn_get_min_start_byte(struct burn_drive *d, off_t *start_byte,
|
||||
int flag);
|
||||
|
||||
|
||||
/** Create a disc object for writing the new session from the created or loaded
|
||||
/** To choose the expansion method of Growing:
|
||||
Create a disc object for writing the new session from the created or loaded
|
||||
iso_volset which has been manipulated via libisofs, to the same media from
|
||||
where the image was eventually loaded. This struct burn_disc is ready for
|
||||
use by a subsequent call to isoburn_disc_write().
|
||||
@ -839,9 +1284,10 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts);
|
||||
|
||||
|
||||
/** Create a disc object for producing a new image from a previous image
|
||||
/** To choose the expansion method of Modifying:
|
||||
Create a disc object for producing a new image from a previous image
|
||||
plus the changes made by user. The generated burn_disc is suitable
|
||||
to be written to any grabbed libburn drive with blank writeable media.
|
||||
to be written to a grabbed drive with blank writeable media.
|
||||
But you must not use the same drive for input and output, because data
|
||||
will be read from the source drive while at the same time the target
|
||||
drive is already writing.
|
||||
@ -849,15 +1295,11 @@ int isoburn_prepare_disc(struct burn_drive *drive, struct burn_disc **disc,
|
||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||
burn_disc_write().
|
||||
@since 0.1.0
|
||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
||||
@param in_drive The input drive, grabbed with isoburn_drive_aquire() or
|
||||
one of its alternatives.
|
||||
@param disc Returns the newly created burn_disc object.
|
||||
@param opts Options for image generation and data transport to media.
|
||||
@param out_drive The libburn drive which shall be write target.
|
||||
If the drive was grabbed via libisoburn then it can later
|
||||
access the libisofs source fifo via
|
||||
isoburn_get_fifo_status().
|
||||
Mere libburn drives cannot obtain this info.
|
||||
In that case out_drive may be NULL, as well.
|
||||
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||
@ -865,11 +1307,55 @@ int isoburn_prepare_new_image(struct burn_drive *in_drive,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive);
|
||||
|
||||
/** @since 0.1.0
|
||||
Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
|
||||
running isoburn_disc_write().
|
||||
|
||||
/** To choose the expansion method of Blind Growing:
|
||||
Create a disc object for writing an add-on session from the created or
|
||||
loaded IsoImage which has been manipulated via libisofs, to a different
|
||||
drive than the one from where it was loaded.
|
||||
Usually output will be stdio:/dev/fd/1 (i.e. stdout) being piped
|
||||
into some burn program like with this classic gesture:
|
||||
mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev
|
||||
Parameter translation into libisoburn:
|
||||
$dev is the address by which parameter in_drive of this call was aquired
|
||||
$msc1 was set by isoburn_set_msc1() before image reading
|
||||
or was detected from the in_drive media
|
||||
$nwa is a parameter of this call
|
||||
or can be used as detected from the in_drive media
|
||||
|
||||
This call waits for libisofs output to become available and then detaches
|
||||
the input drive object from the data source object by which libisofs was
|
||||
reading from the input drive.
|
||||
So, as far as libisofs is concerned, that drive may be released immediately
|
||||
after this call in order to allow the consumer to access the drive for
|
||||
writing.
|
||||
The consumer should wait for input to become available and only then open
|
||||
its burn drive. With cdrecord this is caused by option -waiti.
|
||||
|
||||
The resulting burn_disc object has to be disposed when all its writing
|
||||
is done and the drive is BURN_DRIVE_IDLE again after asynchronous
|
||||
burn_disc_write().
|
||||
@since 0.2.2
|
||||
@param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().
|
||||
@param disc Returns the newly created burn_disc object.
|
||||
@param opts Options for image generation and data transport to media.
|
||||
@param out_drive The output drive, from isoburn_drive_aquire() et.al..
|
||||
typically stdio:/dev/fd/1 .
|
||||
@param nwa The address (2048 byte block count) where the add-on
|
||||
session will be finally stored on a mountable media
|
||||
or in a mountable file.
|
||||
If nwa is -1 then the address is used as determined from
|
||||
the in_drive media.
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
|
||||
struct isoburn_imgen_opts *opts,
|
||||
struct burn_drive *out_drive, int nwa);
|
||||
|
||||
|
||||
/**
|
||||
Revoke isoburn_prepare_*() instead of running isoburn_disc_write().
|
||||
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
|
||||
call described here.
|
||||
@since 0.1.0
|
||||
@ -908,7 +1394,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
|
||||
can be obtained by burn_write_opts_get_drive().
|
||||
@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 free_bytes The current free capacity of the fifo
|
||||
@param status_text Returns a pointer to a constant text, see below
|
||||
@ -947,8 +1433,7 @@ int isoburn_drive_wrote_well(struct burn_drive *d);
|
||||
int isoburn_activate_session(struct burn_drive *drive);
|
||||
|
||||
|
||||
/** @since 0.1.0
|
||||
Wait after normal end of operations until libisofs ended all write
|
||||
/** Wait after normal end of operations until libisofs ended all write
|
||||
threads and freed resource reservations.
|
||||
This call is not mandatory. But without it, messages from the ending
|
||||
threads might appear after the application ended its write procedure.
|
||||
@ -964,21 +1449,6 @@ int isoburn_sync_after_write(struct burn_drive *input_drive,
|
||||
struct burn_drive *output_drive, int flag);
|
||||
|
||||
|
||||
#if 0
|
||||
/* >>> NOT YET IMPLEMENTED <<< */
|
||||
/** Write a new session to a disc.
|
||||
This is a synchronous call equivalent to isoburn_prepare_disc +
|
||||
isoburn_disc_write + isoburn_activate_session
|
||||
@param pacifier_func If not NULL: a function to produce appeasing messages.
|
||||
See burn_abort_pacifier() in libburn.h for an example.
|
||||
*/
|
||||
/* TODO implement this */
|
||||
int isoburn_perform_write(struct burn_write_opts *o,
|
||||
int (*pacifier_func)(void *handle, int patience,
|
||||
int elapsed));
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
/** Release an aquired drive.
|
||||
Wrapper for: burn_drive_release()
|
||||
@since 0.1.0
|
||||
|
@ -22,6 +22,68 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
/* @param flag bit0= single letters */
|
||||
char *Ftypetxt(mode_t st_mode, int flag)
|
||||
{
|
||||
if(flag&1)
|
||||
goto single_letters;
|
||||
if(S_ISDIR(st_mode))
|
||||
return("directory");
|
||||
else if(S_ISREG(st_mode))
|
||||
return("regular_file");
|
||||
else if(S_ISLNK(st_mode))
|
||||
return("symbolic_link");
|
||||
else if(S_ISBLK(st_mode))
|
||||
return("block_device");
|
||||
else if(S_ISCHR(st_mode))
|
||||
return("char_device");
|
||||
else if(S_ISFIFO(st_mode))
|
||||
return("name_pipe");
|
||||
else if(S_ISSOCK(st_mode))
|
||||
return("unix_socket");
|
||||
return("unknown");
|
||||
single_letters:;
|
||||
if(S_ISDIR(st_mode))
|
||||
return("d");
|
||||
else if(S_ISREG(st_mode))
|
||||
return("-");
|
||||
else if(S_ISLNK(st_mode))
|
||||
return("l");
|
||||
else if(S_ISBLK(st_mode))
|
||||
return("b");
|
||||
else if(S_ISCHR(st_mode))
|
||||
return("c");
|
||||
else if(S_ISFIFO(st_mode))
|
||||
return("p");
|
||||
else if(S_ISSOCK(st_mode))
|
||||
return("s");
|
||||
return("?");
|
||||
}
|
||||
|
||||
|
||||
char *Ftimetxt(time_t t, char timetext[40], int flag)
|
||||
{
|
||||
char *rpt;
|
||||
struct tm tms, *tmpt;
|
||||
static char months[12][4]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||
|
||||
tmpt= localtime_r(&t, &tms);
|
||||
rpt= timetext;
|
||||
rpt[0]= 0;
|
||||
if(tmpt==0)
|
||||
sprintf(rpt+strlen(rpt), "%12.f", (double) t);
|
||||
else if(time(NULL)-t < 180*86400 && time(NULL)-t >= 0)
|
||||
sprintf(rpt+strlen(rpt), "%3s %2d %2.2d:%2.2d",
|
||||
months[tms.tm_mon], tms.tm_mday, tms.tm_hour, tms.tm_min);
|
||||
else
|
||||
sprintf(rpt+strlen(rpt), "%3s %2d %4.4d",
|
||||
months[tms.tm_mon], tms.tm_mday, 1900+tms.tm_year);
|
||||
return(timetext);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= compare atime
|
||||
@ -31,7 +93,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
||||
{
|
||||
struct stat s1, s2;
|
||||
int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done;
|
||||
char buf1[4096], buf2[4096], a[4096];
|
||||
char buf1[4096], buf2[4096], a[4096], ttx1[40], ttx2[40];
|
||||
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
|
||||
|
||||
ret= lstat(adr1, &s1);
|
||||
@ -39,22 +101,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
||||
printf("? %s : cannot lstat() : %s\n", adr1, strerror(errno));
|
||||
return(0);
|
||||
}
|
||||
if(S_ISDIR(s1.st_mode))
|
||||
strcpy(a, "d");
|
||||
else if(S_ISREG(s1.st_mode))
|
||||
strcpy(a, "-");
|
||||
else if(S_ISLNK(s1.st_mode))
|
||||
strcpy(a, "l");
|
||||
else if(S_ISBLK(s1.st_mode))
|
||||
strcpy(a, "b");
|
||||
else if(S_ISCHR(s1.st_mode))
|
||||
strcpy(a, "c");
|
||||
else if(S_ISFIFO(s1.st_mode))
|
||||
strcpy(a, "p");
|
||||
else if(S_ISSOCK(s1.st_mode))
|
||||
strcpy(a, "s");
|
||||
else
|
||||
strcpy(a, "?");
|
||||
strcpy(a, Ftypetxt(s1.st_mode, 1));
|
||||
strcat(a, " ");
|
||||
if(adrc[0])
|
||||
strcat(a, adrc);
|
||||
@ -69,51 +116,64 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
||||
|
||||
/* Attributes */
|
||||
if(s1.st_mode != s2.st_mode) {
|
||||
printf("%s : st_mode : %7.7o <> %7.7o\n", a, s1.st_mode, s2.st_mode);
|
||||
if((s1.st_mode&~S_IFMT)!=(s2.st_mode&~S_IFMT))
|
||||
printf("%s : st_mode : %7.7o <> %7.7o\n", a,
|
||||
(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))
|
||||
printf("%s : type : %s <> %s\n",
|
||||
a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0));
|
||||
differs= 1;
|
||||
}
|
||||
if(s1.st_uid != s2.st_uid) {
|
||||
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
|
||||
printf("%s : st_uid : %d <> %d\n", a, s1.st_uid, s2.st_uid);
|
||||
differs= 1;
|
||||
}
|
||||
if(s1.st_gid != s2.st_gid) {
|
||||
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
|
||||
printf("%s : st_gid : %d <> %d\n", a, s1.st_gid, s2.st_gid);
|
||||
differs= 1;
|
||||
}
|
||||
if((S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode)) ||
|
||||
(S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode))) {
|
||||
if(s1.st_rdev != s2.st_rdev) {
|
||||
printf("%s : %s st_rdev : %lu <> %lu\n", a,
|
||||
printf("%s : %s st_rdev : %lu <> %lu\n", a,
|
||||
(S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"),
|
||||
(unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev);
|
||||
differs= 1;
|
||||
}
|
||||
}
|
||||
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
|
||||
printf("%s : st_size : %.f <> %.f\n",
|
||||
a, (double) s1.st_size, (double) s2.st_size);
|
||||
printf("%s : st_size : %.f <> %.f diff= %.f\n",
|
||||
a, (double) s1.st_size, (double) s2.st_size,
|
||||
((double) s1.st_size) - (double) s2.st_size);
|
||||
differs= 1;
|
||||
}
|
||||
if(s1.st_mtime != s2.st_mtime) {
|
||||
printf("%s : st_mtime : %u <> %u\n",
|
||||
a, (unsigned int) s1.st_mtime, (unsigned int) s2.st_mtime);
|
||||
printf("%s : st_mtime : %s <> %s diff= %.f s\n",
|
||||
a, Ftimetxt(s1.st_mtime, ttx1, 0),
|
||||
Ftimetxt(s2.st_mtime, ttx2, 0),
|
||||
((double) s1.st_mtime) - (double) s2.st_mtime);
|
||||
differs= 1;
|
||||
}
|
||||
if(flag&1) {
|
||||
if(s1.st_atime != s2.st_atime) {
|
||||
printf("%s : st_atime : %u <> %u\n",
|
||||
a, (unsigned int) s1.st_atime, (unsigned int) s2.st_atime);
|
||||
printf("%s : st_atime : %s <> %s diff= %.f s\n",
|
||||
a, Ftimetxt(s1.st_atime, ttx1, 0),
|
||||
Ftimetxt(s2.st_atime, ttx2, 0),
|
||||
((double) s1.st_atime) - (double) s2.st_atime);
|
||||
differs= 1;
|
||||
}
|
||||
}
|
||||
if(flag&2) {
|
||||
if(s1.st_ctime != s2.st_ctime) {
|
||||
printf("%s : st_ctime : %u <> %u\n",
|
||||
a, (unsigned int) s1.st_ctime, (unsigned int) s2.st_ctime);
|
||||
printf("%s : st_ctime : %s <> %s diff= %.f s\n",
|
||||
a, Ftimetxt(s1.st_ctime, ttx1, 0),
|
||||
Ftimetxt(s2.st_ctime, ttx2, 0),
|
||||
((double) s1.st_ctime) - (double) s2.st_ctime);
|
||||
differs= 1;
|
||||
}
|
||||
}
|
||||
if(S_ISREG(s1.st_mode)) {
|
||||
if(S_ISREG(s1.st_mode) && S_ISREG(s2.st_mode)) {
|
||||
fd1= open(adr1, O_RDONLY);
|
||||
if(fd1==-1) {
|
||||
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
|
||||
@ -169,7 +229,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
||||
if(diffcount>0 || r1count!=r2count) {
|
||||
if(first_diff<0)
|
||||
first_diff= (r1count>r2count ? r2count : r1count);
|
||||
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
|
||||
printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a,
|
||||
(s1.st_mtime==s2.st_mtime ? "CONTENT":"content"),
|
||||
(double) (diffcount + abs(r1count-r2count)), (double) first_diff);
|
||||
differs= 1;
|
||||
@ -208,7 +268,8 @@ int main(int argc, char **argv)
|
||||
}
|
||||
strcpy(adr1, argv[1]);
|
||||
strcpy(adrc, argv[1]+strlen(argv[2]));
|
||||
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
|
||||
sprintf(adr2, "%s%s%s",
|
||||
argv[3], (adrc[0]=='/' || adrc[0]==0 ? "" : "/"), adrc);
|
||||
|
||||
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
|
||||
exit(ret<=0);
|
||||
|
103
xorriso/README
103
xorriso/README
@ -4,8 +4,8 @@
|
||||
xorriso. By Thomas Schmitt <scdbackup@gmx.net>
|
||||
Integrated sub project of libburnia-project.org but also published via:
|
||||
http://scdbackup.sourceforge.net/xorriso_eng.html
|
||||
http://scdbackup.sourceforge.net/xorriso-0.1.0.tar.gz
|
||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||
http://scdbackup.sourceforge.net/xorriso-0.4.0.pl00.tar.gz
|
||||
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -14,30 +14,42 @@ filesystems into Rock Ridge enhanced ISO 9660 filesystems and allows
|
||||
session-wise manipulation of such filesystems. It can load the management
|
||||
information of existing ISO images and it writes the session results to
|
||||
optical media or to filesystem objects.
|
||||
|
||||
Currently it is only supported on Linux with kernels >= 2.4.
|
||||
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||
|
||||
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
|
||||
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:
|
||||
"... without even the implied warranty ..."
|
||||
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
The most simple way to get xorriso is the xorriso standalone tarball.
|
||||
The most simple way to get xorriso from source code is the xorriso standalone
|
||||
tarball.
|
||||
|
||||
Prerequisites:
|
||||
The tarball contains anything that is needed except libc and libpthread.
|
||||
libreadline and the libreadline-dev headers will make dialog mode
|
||||
more convenient, but are not mandatory.
|
||||
The tarball contains anything that is needed except the following system
|
||||
components:
|
||||
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.0.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain xorriso-0.4.0.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
|
||||
tar xzf xorriso-0.1.0.tar.gz
|
||||
cd xorriso-0.1.0
|
||||
tar xzf xorriso-0.4.0.pl00.tar.gz
|
||||
cd xorriso-0.4.0
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -51,8 +63,8 @@ which you may strip to reduce it in size
|
||||
strip ./xorriso/xorriso
|
||||
|
||||
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
|
||||
as superuser:
|
||||
or you may execute xorriso at the place where it was built,
|
||||
or you may execute as superuser:
|
||||
make install
|
||||
|
||||
For general concepts, options and usage examples see
|
||||
@ -67,6 +79,32 @@ It gets installed with "make install" but may also be placed manually in the
|
||||
./man1 directory below one of the directories mentioned in environment
|
||||
variable $MANPATH.
|
||||
|
||||
The installation creates several alias links pointing to the xorriso binary:
|
||||
xorrisofs starts xorriso with -as mkisofs emulation already enabled
|
||||
xorrecord starts xorriso with -as cdrecord emulation already enabled
|
||||
osirrox starts with -osirrox image-to-disk copying already enabled
|
||||
|
||||
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
|
||||
|
||||
@ -106,9 +144,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
|
||||
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:
|
||||
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
|
||||
@ -129,7 +172,7 @@ of ctime date stamps.
|
||||
The exit value is 0 if no difference was detected, non-0 else.
|
||||
|
||||
Example: After
|
||||
xorriso ... -pathspecs on -add /=/original/dir --
|
||||
xorriso ... -pathspecs on -add /=/original/dir -- -commit_eject all
|
||||
mount /media/dvd
|
||||
cd test
|
||||
compare tree /media/dvd with tree /original/dir :
|
||||
@ -140,6 +183,26 @@ and vice versa:
|
||||
| less
|
||||
|
||||
|
||||
File Formats
|
||||
|
||||
Currently there is only one file format peculiar to xorriso : sector maps
|
||||
which 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.
|
||||
|
||||
|
||||
libisoburn
|
||||
|
||||
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
|
||||
@ -159,9 +222,9 @@ and a matching dynamically linked xorriso binary.
|
||||
This binary is leaner but depends on properly installed libraries of suitable
|
||||
revision.
|
||||
|
||||
Dynamic library and compile time header requirements for libisoburn-0.1.0 :
|
||||
- libburn.so.4 , version libburn-0.4.2 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.2 or higher
|
||||
Dynamic library and compile time header requirements for libisoburn-0.4.0 :
|
||||
- libburn.so.4 , version libburn-0.6.4 or higher
|
||||
- libisofs.so.6 , version libisofs-0.6.20 or higher
|
||||
libisoburn and xorriso will not start with libraries which are older than their
|
||||
headers seen at compile time. So compile in the oldest possible installation
|
||||
setup unless you have reason to enforce a newer bug fix level.
|
||||
@ -190,7 +253,7 @@ libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com>,
|
||||
Vreixo Formoso <metalpain2002@yahoo.es>
|
||||
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
|
||||
parts of old
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,22 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
# compile_xorriso.sh
|
||||
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||
# to be executed in a common parent of the directories given with
|
||||
# $isofs $isoburn $burn
|
||||
# compile_xorriso.sh
|
||||
# Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
|
||||
#
|
||||
# Not intended for general use in production installations !
|
||||
# Rather use: ./bootstrap ; ./configure ; make
|
||||
#
|
||||
# This is a development tool which expects a special setup of directories
|
||||
# on a Linux system (e.g. SuSE 10.2).
|
||||
# It is to be executed in a common parent of the directories given with
|
||||
# $isofs $isoburn $burn $xorr
|
||||
|
||||
isofs=./nglibisofs-develop/libisofs
|
||||
isofs=./nglibisofs-develop/libisofs/libisofs_libisofs_la-
|
||||
isofs_filter=./nglibisofs-develop/libisofs/filters/libisofs_libisofs_la-
|
||||
burn=./libburn-develop/libburn
|
||||
isoburn=./libisoburn-develop/libisoburn
|
||||
xorr=./libisoburn-develop/xorriso
|
||||
|
||||
debug_opts="-O2"
|
||||
def_opts=
|
||||
def_opts="-DXorriso_allow_external_filterS"
|
||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||
do_strip=0
|
||||
static_opts=
|
||||
warn_opts="-Wall"
|
||||
nglibisofs=1
|
||||
def_libreadline="-DXorriso_with_readlinE"
|
||||
link_libreadline="-lreadline"
|
||||
|
||||
for i in "$@"
|
||||
do
|
||||
@ -30,11 +39,16 @@ do
|
||||
elif test "$i" = "-g"
|
||||
then
|
||||
debug_opts="-g -O0"
|
||||
elif test "$i" = "-no_libreadline"
|
||||
then
|
||||
def_libreadline=""
|
||||
link_libreadline=""
|
||||
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
|
||||
then
|
||||
echo \
|
||||
"$xorr/compile_xorriso.sh : to be executed above top level directories"
|
||||
echo "Options:"
|
||||
echo " -no_libreadline do not compile for and link with libreadline."
|
||||
echo " -do_diet produce capability reduced lean version."
|
||||
echo " -do_strip apply program strip to compiled programs."
|
||||
echo " -g produce debuggable programm."
|
||||
@ -47,44 +61,50 @@ do
|
||||
done
|
||||
|
||||
libisofs=
|
||||
libisofs="$libisofs $isofs"/buffer.o
|
||||
libisofs="$libisofs $isofs"/builder.o
|
||||
libisofs="$libisofs $isofs"/data_source.o
|
||||
libisofs="$libisofs $isofs"/ecma119.o
|
||||
libisofs="$libisofs $isofs"/ecma119_tree.o
|
||||
libisofs="$libisofs $isofs"/eltorito.o
|
||||
libisofs="$libisofs $isofs"/filesrc.o
|
||||
libisofs="$libisofs $isofs"/fs_image.o
|
||||
libisofs="$libisofs $isofs"/fs_local.o
|
||||
libisofs="$libisofs $isofs"/fsource.o
|
||||
libisofs="$libisofs $isofs"/image.o
|
||||
libisofs="$libisofs $isofs"/iso1999.o
|
||||
libisofs="$libisofs $isofs"/joliet.o
|
||||
libisofs="$libisofs $isofs"/libiso_msgs.o
|
||||
libisofs="$libisofs $isofs"/messages.o
|
||||
libisofs="$libisofs $isofs"/node.o
|
||||
libisofs="$libisofs $isofs"/rockridge.o
|
||||
libisofs="$libisofs $isofs"/rockridge_read.o
|
||||
libisofs="$libisofs $isofs"/stream.o
|
||||
libisofs="$libisofs $isofs"/tree.o
|
||||
libisofs="$libisofs $isofs"/util.o
|
||||
libisofs="$libisofs $isofs"/util_htable.o
|
||||
libisofs="$libisofs $isofs"/util_rbtree.o
|
||||
libisofs="$libisofs $isofs"buffer.o
|
||||
libisofs="$libisofs $isofs"builder.o
|
||||
libisofs="$libisofs $isofs"data_source.o
|
||||
libisofs="$libisofs $isofs"ecma119.o
|
||||
libisofs="$libisofs $isofs"ecma119_tree.o
|
||||
libisofs="$libisofs $isofs"eltorito.o
|
||||
libisofs="$libisofs $isofs"filesrc.o
|
||||
libisofs="$libisofs $isofs"fs_image.o
|
||||
libisofs="$libisofs $isofs"fs_local.o
|
||||
libisofs="$libisofs $isofs"fsource.o
|
||||
libisofs="$libisofs $isofs"image.o
|
||||
libisofs="$libisofs $isofs"iso1999.o
|
||||
libisofs="$libisofs $isofs"joliet.o
|
||||
libisofs="$libisofs $isofs"libiso_msgs.o
|
||||
libisofs="$libisofs $isofs"messages.o
|
||||
libisofs="$libisofs $isofs"node.o
|
||||
libisofs="$libisofs $isofs"rockridge.o
|
||||
libisofs="$libisofs $isofs"rockridge_read.o
|
||||
libisofs="$libisofs $isofs"stream.o
|
||||
libisofs="$libisofs $isofs"tree.o
|
||||
libisofs="$libisofs $isofs"util.o
|
||||
libisofs="$libisofs $isofs"util_htable.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
|
||||
|
||||
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 "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"
|
||||
cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
||||
cc -I. -DXorriso_with_maiN $def_libreadline \
|
||||
$warn_opts \
|
||||
$static_opts \
|
||||
$debug_opts \
|
||||
$def_opts \
|
||||
$largefile_opts \
|
||||
\
|
||||
-DXorriso_build_timestamP='"'"$timestamp"'"' \
|
||||
\
|
||||
-o "$xorr"/xorriso \
|
||||
\
|
||||
"$xorr"/xorriso.c \
|
||||
@ -125,9 +145,11 @@ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
|
||||
\
|
||||
$libisofs \
|
||||
\
|
||||
-lreadline \
|
||||
$link_libreadline \
|
||||
\
|
||||
-lpthread
|
||||
-lpthread \
|
||||
-lacl \
|
||||
-lz
|
||||
|
||||
ret=$?
|
||||
if test "$ret" = 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
AC_INIT([xorriso], [0.1.0], [http://libburnia-project.org])
|
||||
AC_INIT([xorriso], [0.4.0], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -8,31 +8,21 @@ AC_CANONICAL_TARGET
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=4
|
||||
BURN_MICRO_VERSION=3
|
||||
BURN_MINOR_VERSION=6
|
||||
BURN_MICRO_VERSION=7
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
AC_SUBST(BURN_MINOR_VERSION)
|
||||
AC_SUBST(BURN_MICRO_VERSION)
|
||||
|
||||
LIBISOFS_MAJOR_VERSION=0
|
||||
LIBISOFS_MINOR_VERSION=6
|
||||
LIBISOFS_MICRO_VERSION=2
|
||||
LIBISOFS_MICRO_VERSION=21
|
||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||
|
||||
dnl The API version codes are now defined in libisoburn/libisoburn.h
|
||||
dnl The API version codes are defined in libisoburn/libisoburn.h
|
||||
dnl #define isoburn_header_version_*
|
||||
dnl configure.ac only rules the libtool revision numbering about
|
||||
dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
|
||||
dnl
|
||||
dnl These three are only copies to provide libtool with unused LT_RELEASE
|
||||
dnl ISOBURN_MAJOR_VERSION=0
|
||||
dnl ISOBURN_MINOR_VERSION=0
|
||||
dnl ISOBURN_MICRO_VERSION=1
|
||||
dnl AC_SUBST(ISOBURN_MAJOR_VERSION)
|
||||
dnl AC_SUBST(ISOBURN_MINOR_VERSION)
|
||||
dnl AC_SUBST(ISOBURN_MICRO_VERSION)
|
||||
|
||||
|
||||
AC_PREFIX_DEFAULT([/usr/local])
|
||||
@ -53,6 +43,10 @@ if test ! $ac_cv_func_fseeko; then
|
||||
AC_ERROR([Libburn requires largefile support.])
|
||||
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, , )
|
||||
|
||||
AC_PROG_LIBTOOL
|
||||
AC_SUBST(LIBTOOL_DEPS)
|
||||
LIBTOOL="$LIBTOOL --silent"
|
||||
@ -84,8 +78,19 @@ AC_SUBST(THREAD_LIBS)
|
||||
|
||||
TARGET_SHIZZLE
|
||||
AC_SUBST(ARCH)
|
||||
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||
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 See if the user wants aggressive optimizations of the code
|
||||
@ -105,20 +110,97 @@ else
|
||||
CFLAGS="$CFLAGS -DDEBUG"
|
||||
fi
|
||||
|
||||
|
||||
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 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
|
||||
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
|
||||
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_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([
|
||||
Makefile
|
||||
version.h
|
||||
xorriso.pc
|
||||
])
|
||||
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/<b>Session model:<\/b>/\ <BR><b>Session model:<\/b>/' \
|
||||
-e 's/<b>Media types and states:<\/b>/\ <BR><b>Media types and states:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying:<\/b>/\ <BR><b>Creating, Growing, Modifying:<\/b>/' \
|
||||
-e 's/<b>Creating, Growing, Modifying, Blind/\ <BR><b>Creating, Growing, Modifying, Blind/' \
|
||||
-e 's/<b>Libburn drives:<\/b>/\ <BR><b>Libburn drives:<\/b>/' \
|
||||
-e 's/^-dev /\ \ -dev /' \
|
||||
-e 's/^-devices /\ \ -devices /' \
|
||||
-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>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>/' \
|
||||
@ -65,11 +65,17 @@ then
|
||||
-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/^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>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>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/^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>Command compatibility emulations:<\/b>/\ <BR><b>Command compatibility emulations:<\/b><BR>\ <BR>/' \
|
||||
-e 's/^<p><b>−as</<p>\ <BR><b>\−as</' \
|
||||
-e 's/<b>Scripting, dialog and/\ <BR><b>Scripting, dialog and/' \
|
||||
-e 's/^features:<\/b>/features:<\/b><BR>\ <BR>/' \
|
||||
-e 's/<b>Support for frontend/\ <BR><b>Support for frontend/' \
|
||||
|
@ -1,15 +1,20 @@
|
||||
#!/bin/sh
|
||||
|
||||
# make_xorriso_standalone.sh
|
||||
# Copyright 2008 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||
#
|
||||
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||
# Not intended for general use in production installations !
|
||||
#
|
||||
# This is a development tool which expects a special setup of directories.
|
||||
# It is to be executed in a common parent of the directories
|
||||
# nglibisofs-develop libburn-develop libisoburn-develop
|
||||
#
|
||||
# Creates a standalone tree for building xorriso
|
||||
# from the contents of a unified libburnia development tree.
|
||||
#
|
||||
# The ./bootstrap script gets applied and a source tarball
|
||||
# is made.
|
||||
#
|
||||
# To be executed in the parent of the *-develop directories.
|
||||
#
|
||||
# From that tree can be build a binary xorriso/xorriso
|
||||
# which at runtime depends only on libc and libpthread.
|
||||
# Execute in $lone_dir :
|
||||
@ -20,10 +25,11 @@
|
||||
current_dir=$(pwd)
|
||||
lone_dir="$current_dir"/"xorriso-standalone"
|
||||
|
||||
xorriso_rev=0.0.1
|
||||
xorriso_pl=""
|
||||
xorriso_rev=0.4.0
|
||||
# For unstable uploads:
|
||||
# xorriso_pl=""
|
||||
# For stable releases:
|
||||
# xorriso_pl=".pl00"
|
||||
xorriso_pl=".pl00"
|
||||
|
||||
with_bootstrap_tarball=1
|
||||
|
||||
@ -32,7 +38,7 @@ create_dir() {
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
echo "Failed to create : $r1o" >&2
|
||||
echo "Failed to create : $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@ -73,6 +79,9 @@ create_dir "$lone_dir"
|
||||
copy_files \
|
||||
AUTHORS \
|
||||
CONTRIBUTORS \
|
||||
COPYRIGHT \
|
||||
COPYING \
|
||||
INSTALL \
|
||||
acinclude.m4 \
|
||||
aclocal.m4 \
|
||||
bootstrap \
|
||||
@ -94,11 +103,11 @@ 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_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
|
||||
|
||||
echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
|
||||
# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO
|
||||
|
||||
|
||||
# libisoburn
|
||||
@ -115,26 +124,36 @@ copy_files \
|
||||
xorriso/xorrisoburn.[ch] \
|
||||
xorriso/xorriso.[ch1] \
|
||||
xorriso/xorriso_private.h \
|
||||
\
|
||||
xorriso/xorriso_timestamp.h \
|
||||
\
|
||||
xorriso/changelog.txt \
|
||||
xorriso/xorriso_eng.html \
|
||||
xorriso/man_1_xorriso.html \
|
||||
"$lone_dir"/xorriso
|
||||
|
||||
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||
"$lone_dir"/xorriso/xorriso_buildstamp.h
|
||||
copy_files xorriso/xorriso_buildstamp_none.h \
|
||||
"$lone_dir"/xorriso/xorriso_buildstamp_none.h
|
||||
|
||||
create_dir "$lone_dir"/test
|
||||
copy_files \
|
||||
test/compare_file.c \
|
||||
"$lone_dir"/test/compare_file.c
|
||||
|
||||
|
||||
# >>> create compile_xorriso.sh for standalone
|
||||
|
||||
|
||||
# nglibisofs
|
||||
|
||||
create_dir "$lone_dir"/libisofs
|
||||
create_dir "$lone_dir"/libisofs/filters
|
||||
create_dir "$lone_dir"/doc
|
||||
goto_dir "$current_dir"/nglibisofs-develop
|
||||
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
|
||||
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
|
||||
|
||||
# To get a common version.h
|
||||
cat version.h.in >> "$lone_dir"/version.h.in
|
||||
@ -176,8 +195,8 @@ fi
|
||||
create_dir "$lone_dir"/libburn
|
||||
goto_dir "$current_dir"/libburn-develop
|
||||
copy_files libburn/*.[ch] "$lone_dir"/libburn
|
||||
copy_files COPYRIGHT "$lone_dir"/libburn
|
||||
|
||||
copy_files COPYING "$lone_dir"/COPYING
|
||||
|
||||
# To get a common version.h
|
||||
cat version.h.in >> "$lone_dir"/version.h.in
|
||||
|
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)
|
||||
|
2375
xorriso/xorriso.1
2375
xorriso/xorriso.1
File diff suppressed because it is too large
Load Diff
14170
xorriso/xorriso.c
14170
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,
|
||||
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.
|
||||
|
||||
@ -16,25 +16,171 @@
|
||||
struct XorrisO;
|
||||
|
||||
|
||||
#define Xorriso_program_versioN "0.4.0"
|
||||
|
||||
|
||||
/* --------------------- 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.0") 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);
|
||||
|
||||
|
||||
/* 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
|
||||
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);
|
||||
|
||||
|
||||
/* Destroy xorriso object when it is no longer needed.
|
||||
@param flag bit0= Make global librariy shutdown.
|
||||
Use only with last xorriso object to be destroyed.
|
||||
|
||||
/* Read and interpret commands from eventual startup files as listed in
|
||||
man xorriso.
|
||||
@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);
|
||||
|
||||
@ -72,6 +218,13 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
||||
int error_code, char msg_text[], int os_errno,
|
||||
char severity[], int flag);
|
||||
|
||||
/** Alternative call interface of Xorriso_msgs_submit with void* instead
|
||||
of struct XorrisO*
|
||||
*/
|
||||
int Xorriso_msgs_submit_void(void *xorriso,
|
||||
int error_code, char msg_text[], int os_errno,
|
||||
char severity[], int flag);
|
||||
|
||||
|
||||
/** Evaluate an advise whether to abort or whether to go on with option
|
||||
processing. This should be called after any option function was processed.
|
||||
@ -132,6 +285,121 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
|
||||
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 ------------------------ */
|
||||
/* See man 1 xorriso for explanation of the particular options */
|
||||
@ -142,12 +410,27 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
||||
After each call to an option function, there should happen:
|
||||
Xorriso_eval_problem_status()
|
||||
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 */
|
||||
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 */
|
||||
/* @param flag bit0=do not report the added item
|
||||
bit1=do not reset pacifier, no final pacifier message
|
||||
@ -167,6 +450,28 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
|
||||
char *time_type, char *timestring,
|
||||
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 */
|
||||
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -186,6 +491,20 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
|
||||
/* Option -cdx */
|
||||
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);
|
||||
|
||||
/* 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 */
|
||||
/* @param flag bit0=recursive (-chgrp_r)
|
||||
*/
|
||||
@ -220,15 +539,29 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag);
|
||||
*/
|
||||
int Xorriso_option_commit_eject(struct XorrisO *xorriso, char *which, int flag);
|
||||
|
||||
/* Option -compare and -compare_r
|
||||
@param flag bit0= issue summary message
|
||||
bit1= do not reset pacifier, no final pacifier message
|
||||
bit2= do not issue pacifier messages at all
|
||||
bit3= recursive: -compare_r
|
||||
*/
|
||||
int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
|
||||
char *iso_path, int flag);
|
||||
|
||||
/* Option -cpr alias -cpri */
|
||||
int Xorriso_option_cpri( struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* >>> not yet implemented
|
||||
/ * Option -cut_out * /
|
||||
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
||||
/* Options -cpx , -cpax, -cp_rx , -cp_rax */
|
||||
/* @param flag bit0= recursive (-cp_rx, -cp_rax)
|
||||
bit1= full property restore (-cpax, -cp_rax)
|
||||
*/
|
||||
int Xorriso_option_cpx(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -cut_out */
|
||||
int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||
char *start, char *count, char *iso_rr_path, int flag);
|
||||
|
||||
/* Options -dev , -indev, -outdev */
|
||||
/* @param flag bit0=use as indev , bit1= use as outdev
|
||||
@ -244,9 +577,16 @@ int Xorriso_option_devices(struct XorrisO *xorriso, int flag);
|
||||
/* Option -dialog "on"|"off" */
|
||||
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" */
|
||||
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" */
|
||||
int Xorriso_option_dummy(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
@ -261,15 +601,37 @@ int Xorriso_option_eject(struct XorrisO *xorriso, char *which, int flag);
|
||||
*/
|
||||
int Xorriso_option_end(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -iso_rr_pattern "on"|"ls"|"off" */
|
||||
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
/* Option -errfile_log marked|plain path|-|"" */
|
||||
int Xorriso_option_errfile_log(struct XorrisO *xorriso,
|
||||
char *mode, char *path, int flag);
|
||||
|
||||
/* Option -error_behavior */
|
||||
int Xorriso_option_error_behavior(struct XorrisO *xorriso,
|
||||
char *occasion, char *behavior, int flag);
|
||||
|
||||
/* Option -external_filter */
|
||||
int Xorriso_option_external_filter(struct XorrisO *xorriso,
|
||||
int argc, char **argv, int *idx, int flag);
|
||||
|
||||
/* Options -extract , -extract_single */
|
||||
/* @param flag bit0=do not report the restored item
|
||||
bit1=do not reset pacifier, no final pacifier message
|
||||
bit5= -extract_single: eventually do not insert directory tree
|
||||
*/
|
||||
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
|
||||
char *iso_path, int flag);
|
||||
|
||||
/* Option -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 */
|
||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -find alias -findi, and -findx */
|
||||
/* @param flag bit0= -findx rather than -findi
|
||||
bit1= do not reset pacifier, no final pacifier message
|
||||
do not reset find_compare_result
|
||||
*/
|
||||
int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
@ -277,18 +639,48 @@ int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
|
||||
/* Option -fs */
|
||||
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 */
|
||||
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 */
|
||||
int Xorriso_option_help(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -history */
|
||||
int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag);
|
||||
|
||||
/* Option -iso_rr_pattern "on"|"ls"|"off" */
|
||||
int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -joliet "on"|"off" */
|
||||
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -list_delimiter */
|
||||
int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
|
||||
int flag);
|
||||
|
||||
/* Option -list_formats */
|
||||
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -load session|track|sbsector value */
|
||||
/* @param flag bit0= with adr_mode sbsector: adr_value is possibly 16 too high
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_load(struct XorrisO *xorriso, char *adr_mode,
|
||||
char *adr_value, int flag);
|
||||
|
||||
/* Option -logfile */
|
||||
int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
||||
char *fileadr, int flag);
|
||||
@ -313,6 +705,22 @@ int Xorriso_option_lsi(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int Xorriso_option_lsx(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -map */
|
||||
/* @param flag bit0=do not report the added item
|
||||
bit1=do not reset pacifier, no final pacifier message
|
||||
*/
|
||||
int Xorriso_option_map(struct XorrisO *xorriso, char *disk_path,
|
||||
char *iso_path, int flag);
|
||||
|
||||
/* Options -map_l , -compare_l , -update_l , -extract_l */
|
||||
/* @param flag bit8-11= mode 0= -map_l
|
||||
1= -compare_l
|
||||
2= -update_l
|
||||
3= -extract_l
|
||||
*/
|
||||
int Xorriso_option_map_l(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -mark */
|
||||
int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
||||
|
||||
@ -320,6 +728,13 @@ int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
|
||||
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
|
||||
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 */
|
||||
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
@ -327,21 +742,43 @@ int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
||||
/* Option -no_rc */
|
||||
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -options_from_file*/
|
||||
/* Option -not_leaf */
|
||||
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 */
|
||||
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -options_from_file */
|
||||
/* @return <=0 error , 1 = success , 3 = request to end program run */
|
||||
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
|
||||
int flag);
|
||||
|
||||
/* Option -osirrox "on"|"off" */
|
||||
int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -overwrite "on"|"nondir"|"off" */
|
||||
int Xorriso_option_overwrite(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -pacifier */
|
||||
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag);
|
||||
|
||||
/* Option -padding */
|
||||
int Xorriso_option_padding(struct XorrisO *xorriso, char *size, int flag);
|
||||
|
||||
/* Option -page */
|
||||
int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
|
||||
|
||||
/* Option -path-list */
|
||||
/* Option -paste_in */
|
||||
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
|
||||
char *disk_path, char *start, char *count, int flag);
|
||||
|
||||
/* Option -path_list , -quoted_path_list */
|
||||
/* @param flag bit0= -quoted_path_list */
|
||||
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
|
||||
|
||||
/* Option -pathspecs */
|
||||
@ -353,7 +790,9 @@ int Xorriso_option_pkt_output(struct XorrisO *xorriso, char *mode, int flag);
|
||||
/* Option -print */
|
||||
int Xorriso_option_print(struct XorrisO *xorriso, char *text, int flag);
|
||||
|
||||
/* Option -print-size */
|
||||
/* Option -print_size
|
||||
@param flag bit0= report in mkisofs compatible form on real stdout
|
||||
*/
|
||||
int Xorriso_option_print_size(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -prog */
|
||||
@ -362,12 +801,22 @@ int Xorriso_option_prog(struct XorrisO *xorriso, char *name, int flag);
|
||||
/* Option -prog_help */
|
||||
int Xorriso_option_prog_help(struct XorrisO *xorriso, char *name, int flag);
|
||||
|
||||
/* Option -publisher */
|
||||
int Xorriso_option_publisher(struct XorrisO *xorriso, char *name, int flag);
|
||||
|
||||
/* Option -pwd alias -pwdi */
|
||||
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -pwdx */
|
||||
int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -reassure "on"|"tree"|"off" */
|
||||
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
/* Option -relax_compliance */
|
||||
int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -report_about */
|
||||
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
||||
int flag);
|
||||
@ -376,8 +825,8 @@ int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
|
||||
int Xorriso_option_return_with(struct XorrisO *xorriso, char *severity,
|
||||
int exit_value, int flag);
|
||||
|
||||
/* Option -reassure "on"|"tree"|"off" */
|
||||
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
|
||||
/* Option -revoke_exclusions */
|
||||
int Xorriso_option_revoke_exclusions(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Options -rm alias -rmi , -rm_r alias -rm_ri , -rmdir alias -rmdiri */
|
||||
/* @param flag bit0=recursive , bit2= remove empty directory: rmdir */
|
||||
@ -385,13 +834,50 @@ int Xorriso_option_rmi(struct XorrisO *xorriso, int argc, char **argv,
|
||||
int *idx, int flag);
|
||||
|
||||
/* Option -rollback */
|
||||
/* @return <=0 error , 1 success, 2 revoked by -reassure
|
||||
/* @param flag bit0= do not -reassure
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_rollback(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -rom_toc_scan */
|
||||
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -session_log */
|
||||
int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag);
|
||||
|
||||
/* Option -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 */
|
||||
int Xorriso_option_speed(struct XorrisO *xorriso, char *speed, int flag);
|
||||
|
||||
/* Option -split_size */
|
||||
int Xorriso_option_split_size(struct XorrisO *xorriso, char *s, int flag);
|
||||
|
||||
/* Option -status */
|
||||
int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
||||
|
||||
@ -399,6 +885,10 @@ int Xorriso_option_status(struct XorrisO *xorriso, char *mode, int flag);
|
||||
int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num1,
|
||||
int flag);
|
||||
|
||||
/* Option -stream_recording */
|
||||
int Xorriso_option_stream_recording(struct XorrisO *xorriso, char *mode,
|
||||
int flag);
|
||||
|
||||
/* Option -tell_media_space */
|
||||
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -410,7 +900,20 @@ int Xorriso_option_temp_mem_limit(struct XorrisO *xorriso, char *size,
|
||||
int Xorriso_option_toc(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* Option -uid */
|
||||
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *uid, int flag);
|
||||
int Xorriso_option_uid(struct XorrisO *xorriso, char *uid, int flag);
|
||||
|
||||
/* Option -unregister_filter */
|
||||
int Xorriso_option_unregister_filter(struct XorrisO *xorriso, char *name,
|
||||
int flag);
|
||||
|
||||
/* Options -update and -update_r
|
||||
@param flag bit0= issue summary message
|
||||
bit1= do not reset pacifier, no final pacifier message
|
||||
bit2= do not issue pacifier messages at all
|
||||
bit3= recursive: -update_r
|
||||
*/
|
||||
int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
|
||||
char *iso_path, int flag);
|
||||
|
||||
/* Option -use_readline */
|
||||
int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag);
|
||||
@ -421,6 +924,12 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag);
|
||||
/* Option -volid */
|
||||
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 */
|
||||
|
||||
|
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>
|
||||
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
|
||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, scdbackup">
|
||||
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, Linux, 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">
|
||||
<TITLE>xorriso homepage english</TITLE>
|
||||
</HEAD>
|
||||
@ -14,16 +14,18 @@
|
||||
<P><H2> Homepage of </H2>
|
||||
<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>
|
||||
|
||||
<P>
|
||||
<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
|
||||
session-wise manipulation of such filesystems. It can load the management
|
||||
information of existing ISO images and it writes the session results to
|
||||
optical media or to filesystem objects.
|
||||
<BR>
|
||||
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
|
||||
</P>
|
||||
<P>
|
||||
|
||||
@ -33,50 +35,47 @@ optical media or to filesystem objects.
|
||||
|
||||
<P>
|
||||
<H2>Hardware requirements:</H2>
|
||||
A CD/DVD recorder suitable for
|
||||
A CD/DVD/BD recorder suitable for
|
||||
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
||||
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
||||
and to MMC-5 for DVD).
|
||||
and to MMC-5 for DVD or BD).
|
||||
<BR>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
<H2>Software requirements :</H2>
|
||||
<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.6 the drive should not be under ide-scsi.</DD>
|
||||
<DT>libpthread</DT>
|
||||
<DD>is supposed to be a standard system component.</DD>
|
||||
<DT>libreadline and libreadline-dev</DT>
|
||||
<DD>are optional and eventually make dialog more convenient.</DD>
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
<H2>
|
||||
GPL software included:<BR>
|
||||
</H2>
|
||||
<DL>
|
||||
<DT>libburn-0.4.3</DT>
|
||||
<DD>reads and writes data from and to CD and DVD.</DD>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
furthered by team of libburnia-project.org)</DD>
|
||||
<DT>libisofs-0.6.1</DT>
|
||||
<DD>operates ISO 9660 images.</DD>
|
||||
<DD>(By Vreixo Formoso from team of libburnia-project.org)</DD>
|
||||
<DT>libisoburn-0.1.0</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>
|
||||
<DT>or FreeBSD, libc, libpthread :</DT>
|
||||
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
|
||||
<DD>libcam has to be installed.</DD>
|
||||
<DD>libiconv has to be installed.</DD>
|
||||
<DT>or some other X/Open system, libc, libpthread :</DT>
|
||||
<DD>
|
||||
There will be no direct operation of optical drives, but only POSIX i/o
|
||||
with objects of the local filesystem.
|
||||
</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>
|
||||
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>.
|
||||
</P>
|
||||
|
||||
@ -86,32 +85,49 @@ For ports to other usable systems <A HREF="#contact">contact us</A>.
|
||||
<H2>Special features:</H2>
|
||||
<UL>
|
||||
<LI>
|
||||
ISO 9660 formatter and burner for CD or DVD are fixely integrated.
|
||||
ISO 9660 formatter and burner for CD, DVD, BD are fixely integrated.
|
||||
</LI>
|
||||
<LI>
|
||||
Operates on an existing ISO image or creates a new one.
|
||||
<LI>
|
||||
</LI>
|
||||
Copies files from filesystem into the ISO image.
|
||||
<LI>
|
||||
</LI>
|
||||
Renames or deletes file objects in the ISO image.
|
||||
<LI>
|
||||
Changes file properties in the ISO image.
|
||||
</LI>
|
||||
<LI>
|
||||
Can write result as completely new image to optical media or
|
||||
filesystem objects.
|
||||
Copies files from filesystem into the ISO image and vice versa.
|
||||
</LI>
|
||||
<LI>
|
||||
Can write result as add-on session to appendable multi-session media,
|
||||
to overwriteable media, to regular files, and to block devices.
|
||||
Changes file properties, renames or deletes file objects in the ISO image.
|
||||
</LI>
|
||||
<LI>
|
||||
Scans for optical drives, blanks re-useable optical media.
|
||||
Updates ISO subtrees incrementally to match given disk subtrees.
|
||||
</LI>
|
||||
<LI>
|
||||
Suitable for: CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+RW, DVD-RAM.
|
||||
Can record and restore hard link relations, ACL, and xattr.
|
||||
</LI>
|
||||
<LI>
|
||||
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>
|
||||
Scans for optical drives, blanks re-useable optical media, formats media.
|
||||
</LI>
|
||||
<LI>
|
||||
Suitable for:
|
||||
CD-R, CD-RW, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, BD-R, BD-RE.
|
||||
</LI>
|
||||
<LI>
|
||||
Reads its instructions from command line arguments, dialog, and batch files.
|
||||
@ -126,8 +142,14 @@ Provides navigation commands for interactive ISO image manipulation.
|
||||
<P>
|
||||
<H2>Command Examples:</H2>
|
||||
<DL>
|
||||
|
||||
<DT>Get an overview of drives and their addresses</DT>
|
||||
<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>
|
||||
<DT>Ordinary users should then get granted rw access to the /dev files
|
||||
@ -144,8 +166,9 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
|
||||
<DT>Get info about a particular drive and loaded media:</DT>
|
||||
<DD>$<KBD> xorriso -indev /dev/sr0 -du / -- -toc 2>&1 | less</KBD></DD>
|
||||
|
||||
<DT>Make re-usable media writable again, delete any ISO 9660 image:</DT>
|
||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -eject all</KBD></DD>
|
||||
<DT>Make re-usable media writable again, delete any ISO 9660 image,
|
||||
eventually prepare yet unused BD-RE:</DT>
|
||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed -eject all</KBD></DD>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
@ -155,7 +178,7 @@ may accept pathspecs of form target=source as known from program mkisofs.</DT>
|
||||
<DD>$<KBD> xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
|
||||
</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>
|
||||
|
||||
<DT>
|
||||
@ -167,17 +190,17 @@ adjust permissions to make it publicly read-only,
|
||||
write it to media and immediately eject media without
|
||||
previously reloading the written image.
|
||||
</DT>
|
||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank fast -pathspecs on \</KBD></DD>
|
||||
<DD><KBD> -add /sounds=/home/me/sounds \</KBD></DD>
|
||||
<DD><KBD>
|
||||
/pictures=/home/me/pictures -- \</KBD></DD>
|
||||
<DD>$<KBD> cd /home/me</KBD></DD>
|
||||
<DD>$<KBD> xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
|
||||
<DD><KBD> -map /home/me/sounds /sounds \</KBD></DD>
|
||||
<DD><KBD> -map /home/me/pictures /pictures \</KBD></DD>
|
||||
<DD><KBD> -rm_r /sounds/indecent '/pictures/*private*' -- \</KBD></DD>
|
||||
<DD><KBD> -add /pictures/private/horses=/home/me/pictures/private/horses -- \</KBD></DD>
|
||||
<DD><KBD> -cd / \</KBD></DD>
|
||||
<DD><KBD> -add pictures/private/horses* -- \</KBD></DD>
|
||||
<DD><KBD> -chmod_r a+r,a-w / -- \</KBD></DD>
|
||||
<DD><KBD> -find / -type d -exec chmod a+x -- \</KBD></DD>
|
||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_16 \</KBD></DD>
|
||||
<DD><KBD> -commit_eject all</KBD></DD>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
@ -188,15 +211,14 @@ rename /pictures/private/horses,
|
||||
add new directory trees /sounds and /movies,
|
||||
disallow any access for group and others.
|
||||
Finally write as additional session to media and eject:</DT>
|
||||
<DD>$<KBD> xorriso -dev /dev/sr0 -pathspecs on \</KBD></DD>
|
||||
<DD>$<KBD> xorriso -dev /dev/sr0 \</KBD></DD>
|
||||
<DD><KBD> -rm_r /sounds -- \</KBD></DD>
|
||||
<DD><KBD> -mv /pictures/private/horses /horse_show -- \</KBD></DD>
|
||||
<DD><KBD> -add /sounds=/home/me/prepared_for_dvd/sounds_dummy \</KBD></DD>
|
||||
<DD><KBD> /movies=/home/me/prepared_for_dvd/movies -- \</KBD></DD>
|
||||
<DD><KBD> -map /home/me/prepared_for_dvd/sounds_dummy /sounds \</KBD></DD>
|
||||
<DD><KBD> -map /home/me/prepared_for_dvd/movies /movies \</KBD></DD>
|
||||
<DD><KBD> -chmod_r go-rwx / -- \</KBD></DD>
|
||||
<DD><KBD> -volid SOUNDS_PICS_2008_01_17 \</KBD></DD>
|
||||
<DD><KBD> -commit_eject all</KBD></DD>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
@ -218,14 +240,21 @@ Important: -indev and -outdev have to be different drives.
|
||||
</DT>
|
||||
|
||||
<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
|
||||
run. It will write eventually pending changes to media, if that has not
|
||||
already been done by a previous -commit.</DT>
|
||||
arguments have to be given in one single line. Backslash may be used to mark
|
||||
a line as incomplete so it gets continued by the next input line.
|
||||
<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>enter option and arguments :</KBD></DD>
|
||||
<DD><KBD><B>-dev /dev/sr0 -pathspecs on</B></KBD></DD>
|
||||
<DD><KBD><B>-dev /dev/sr0</B></KBD></DD>
|
||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||
<DD><KBD><B>-add /sounds=/home/me/prepared_for_dvd/sounds_dummy /movies=/home/me/prepared_for_dvd/movies</B></KBD></DD>
|
||||
<DD><KBD><B>-map /home/me/prepared_for_dvd/sounds_dummy /sounds</B></KBD></DD>
|
||||
<DD><KBD>enter option and arguments :</KBD></DD>
|
||||
<DD><KBD><B>-map /home/me/prepared_for_dvd/movies \</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><KBD>enter option and arguments :</KBD></DD>
|
||||
<DD><KBD><B>-commit</B></KBD></DD>
|
||||
@ -237,11 +266,141 @@ already been done by a previous -commit.</DT>
|
||||
<HR>
|
||||
</DT>
|
||||
|
||||
<DT>The following command performs incremental backup.
|
||||
It can be run on blank media to create a copy of the mentioned disk
|
||||
directory trees, and it can be run on appendable media to perform a
|
||||
minimal set of change operations which update the old ISO copies
|
||||
to match the new disk trees.
|
||||
Older states can be retrieved by help of mount options like "sbsector="
|
||||
or by help of xorriso option -mount.
|
||||
<BR>
|
||||
Eventual ACL or xattr will be recorded. Data reading will be avoided by
|
||||
accelerator option -disk_dev_ino.
|
||||
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>
|
||||
<DD>$<KBD> xorriso -acl on -xattr on -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> -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
|
||||
<DD><KBD> -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
|
||||
<DD><KBD> -update_r /home/thomas/personal_mail /personal_mail \</KBD></DD>
|
||||
<DD><KBD> -commit -toc -eject all</KBD></DD>
|
||||
|
||||
<DT>
|
||||
To apply zisofs compression to those data files which get newly copied from
|
||||
the local filesystem, perform immediately before -commit :
|
||||
<DD>
|
||||
<KBD> -find / -type f -pending_data -exec set_filter --zisofs -- \</KBD></DD>
|
||||
</DD>
|
||||
</DT>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</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
|
||||
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>
|
||||
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
|
||||
<DT>
|
||||
Let xorriso serve underneath growisofs via its alias name "xorrisofs"
|
||||
which enables mkisofs emulation:
|
||||
</DT>
|
||||
<DD>$<KBD> export MKISOFS="xorrisofs"</KBD></DD>
|
||||
<DD>$<KBD> growisofs -Z /dev/dvd /some/files</KBD></DD>
|
||||
<DD>$<KBD> growisofs -M /dev/dvd /more/files</KBD></DD>
|
||||
<DT>
|
||||
One may switch from mkisofs emulation to xorriso's own command mode:
|
||||
</DT>
|
||||
<DD>$<KBD> growisofs -M /dev/dvd -- outdev - -update_r /my/files /files
|
||||
</KBD></DD>
|
||||
|
||||
<DT>
|
||||
<HR>
|
||||
</DT>
|
||||
|
||||
<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>
|
||||
@ -254,34 +413,17 @@ output will be redirected to stderr in this case.</DT>
|
||||
<DD>$<KBD> <A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD>
|
||||
</DL>
|
||||
|
||||
|
||||
Testers wanted who are willing to risk some double layer DVD media.
|
||||
|
||||
</P>
|
||||
|
||||
<HR>
|
||||
<A NAME="download"></A>
|
||||
<P>
|
||||
<DL>
|
||||
<DT>Download as source code (see README):</DT>
|
||||
<DD><A HREF="xorriso-0.1.0.tar.gz">xorriso-0.1.0.tar.gz</A>
|
||||
( KB).
|
||||
<DT><H3>Download as source code (see README):</H3></DT>
|
||||
<DD><A HREF="xorriso-0.4.0.pl00.tar.gz">xorriso-0.4.0.pl00.tar.gz</A>
|
||||
(1260 KB).
|
||||
</DD>
|
||||
|
||||
<!--
|
||||
<DD> </DD>
|
||||
<DT>Download as single x86 binaries (untar and move to /usr/bin/xorriso):</DT>
|
||||
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0.tar.gz">
|
||||
xorriso_0.1.0.pl00-x86-suse9_0.tar.gz</A>, ( KB),
|
||||
<DL>
|
||||
<DD>runs on SuSE 9.0 (2.4.21) , SuSE 10.2 (2.6.18.2) and others.</DD>
|
||||
</DL>
|
||||
<DD><A HREF="xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz">
|
||||
xorriso_0.1.0.pl00-x86-suse9_0-static.tar.gz</A>, ( KB), -static compiled,
|
||||
<DL>
|
||||
<DD>runs on many other systems.</DD>
|
||||
-->
|
||||
|
||||
<DD>(Released 28 Jun 2009)</DD>
|
||||
</DL>
|
||||
</DD>
|
||||
</DL>
|
||||
@ -303,77 +445,133 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
|
||||
<!--
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
Enhancements towards previous stable version xorriso-0.1.0:
|
||||
Bug fixes towards xorriso-0.3.8.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<LI>SIGSEGV by dereferencing NULL with option -status and no search string</LI>
|
||||
<LI>-load volid did not perform pattern search</LI>
|
||||
<!--
|
||||
<LI>- none -</LI>
|
||||
-->
|
||||
|
||||
</UL>
|
||||
|
||||
Bug fixes towards xorriso-0.1.0.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
Enhancements towards previous stable version xorriso-0.3.8.pl00:
|
||||
<UL>
|
||||
<LI>New option -hardlinks for recording and restoring of hard link relations
|
||||
</LI>
|
||||
<LI>New option -for_backup as shortcut for -acl -xattr -hardlinks
|
||||
</LI>
|
||||
<LI>Improved read performance with -update_r
|
||||
</LI>
|
||||
<LI>Improved read performance with -extract by -osirrox sort_lba
|
||||
</LI>
|
||||
<LI>Operators with option -find : -not, -or, -and, (, ), -if, -then, -else</LI>
|
||||
<LI>New -find tests -wholename, -prune, -sort_lba</LI>
|
||||
|
||||
<!--
|
||||
<LI>- none -</LI>
|
||||
-->
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
<H3>
|
||||
Library copies included in xorriso tarballs:
|
||||
</H3>
|
||||
<DL>
|
||||
<DT>libburn-0.6.7</DT>
|
||||
<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.21</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.0</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.1.0 :</H3></DT>
|
||||
<DD>Enhancements towards stable version 0.1.0.pl00:
|
||||
<DT><H3>Development snapshot, version 0.4.1 :</H3></DT>
|
||||
<DD>Bug fixes towards xorriso-0.4.0.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
<DD>Enhancements towards stable version 0.4.0.pl00:
|
||||
<UL>
|
||||
<LI>- none yet -</LI>
|
||||
<!--
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
<DD> </DD>
|
||||
<DD><A HREF="README_xorriso_devel">README 0.1.1</A>
|
||||
<DD><A HREF="xorriso_help_devel">xorriso_0.1.1 -help</A></DD>
|
||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.1.1)</A></DD>
|
||||
<DD><A HREF="README_xorriso_devel">README 0.4.1</A>
|
||||
<DD><A HREF="xorriso_help_devel">xorriso_0.4.1 -help</A></DD>
|
||||
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.4.1)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>Maintainers of xorriso unstable packages please use SVN of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
|
||||
</KBD></DD>
|
||||
<DD>Build: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
|
||||
</KBD></DD>
|
||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisburn</B>
|
||||
</KBD></DD>
|
||||
<DD>Build: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
|
||||
</KBD></DD>
|
||||
<DD>Download: - libisofs bzr service not functional yet - </DD>
|
||||
<DD>Build: <KBD><B>cd ng-libisofs ; ./autogen.sh ; ./configure --prefix /usr ; make</B>
|
||||
</KBD></DD>
|
||||
<DD>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
||||
autotools</A> of at least version 1.7 installed.
|
||||
But after the run of <KBD>./bootstrap</KBD>, only
|
||||
vanilla tools like make and gcc are needed.</DD>
|
||||
</DD>
|
||||
<DD> </DD>
|
||||
<DT>The following downloads are intended for adventurous end users or
|
||||
admins with full system souvereignty.</DT>
|
||||
<DD>Source (./bootstrap is already applied, build tested, for more see
|
||||
<A HREF="README_xorriso_devel">upcoming README</A> ):
|
||||
<DT>If you want to distribute development versions of xorriso, then use
|
||||
this tarball which produces static linking between xorriso and the
|
||||
libburnia libraries.
|
||||
</DT>
|
||||
<DD>Source (./bootstrap is already applied, build tested,
|
||||
installation see README)
|
||||
</DD>
|
||||
<DD>
|
||||
<A HREF="xorriso-0.1.1.tar.gz">xorriso-0.1.1.tar.gz</A>
|
||||
(680 KB).
|
||||
<A HREF="xorriso-0.4.1.tar.gz">xorriso-0.4.1.tar.gz</A>
|
||||
(1260 KB).
|
||||
</DD>
|
||||
<DD>Binary (untar and move to /usr/bin/xorriso):</DD>
|
||||
<DD><A HREF="xorriso_0.1.1-x86-suse9_0.tar.gz">
|
||||
xorriso_0.1.1-x86-suse9_0.tar.gz</A>, ( KB).
|
||||
</DD>
|
||||
<DD><A HREF="xorriso_0.1.1-x86-suse9_0-static.tar.gz">
|
||||
xorriso_0.1.1-x86-suse9_0-static.tar.gz</A>, ( KB)
|
||||
<DT>A dynamically linked development version of xorriso can be obtained
|
||||
from repositories of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A>.
|
||||
xorriso is part of libisoburn/trunk and will get built by its "make".
|
||||
</DT>
|
||||
<DT>Be warned that the libraries in SVN and bzr are development versions with
|
||||
possibly unstable API/ABI enhancements. Do not distribute development
|
||||
versions for dynamic linking. Only release versions are safe for that.
|
||||
</DT>
|
||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
|
||||
</KBD></DD>
|
||||
<DD>Install: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||
</KBD></DD>
|
||||
<DD>Download:
|
||||
<KBD><B>bzr branch lp:~libburnia-team/libisofs/scdbackup</B></KBD>
|
||||
</DD>
|
||||
<DD>Install: <KBD><B>cd libisofs ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||
</KBD></DD>
|
||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn</B>
|
||||
</KBD></DD>
|
||||
<DD>Install: <KBD><B>cd libisoburn ; ./bootstrap ; ./configure --prefix /usr ; make ; make install</B>
|
||||
</KBD></DD>
|
||||
<DT>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
||||
autotools</A> of at least version 1.7 installed.
|
||||
But after the run of <KBD>./bootstrap</KBD>, only
|
||||
vanilla tools like make and gcc are needed.
|
||||
</DT>
|
||||
<DD> </DD>
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
-->
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
@ -384,7 +582,6 @@ Very special thanks to Andy Polyakov whose
|
||||
provide the libburnia project with invaluable examples on how to deal
|
||||
with DVD media and how to emulate multi-session on overwriteable media.
|
||||
</P>
|
||||
|
||||
<HR>
|
||||
|
||||
|
||||
@ -400,6 +597,11 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
|
||||
<A href="http://sourceforge.net">
|
||||
<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> -->
|
||||
<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>
|
||||
<HR>
|
||||
<DL>
|
||||
@ -416,6 +618,7 @@ pppoem, a DSL throughput monitor (mainly for Linux kernel 2.4)</A></DD>
|
||||
</DL>
|
||||
<BR><BR>
|
||||
Legal statement: This website does not serve any commercial purpose.<BR>
|
||||
<BR><BR>
|
||||
</FONT>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@ -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=
|
||||
|
||||
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
|
||||
# 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 = \
|
||||
\
|
||||
@ -28,6 +47,7 @@ xorriso_xorriso_SOURCES = \
|
||||
xorriso/xorrisoburn.h \
|
||||
xorriso/xorrisoburn.c \
|
||||
xorriso/xorriso_timestamp.h \
|
||||
xorriso/xorriso_buildstamp.h \
|
||||
\
|
||||
libisoburn/libisoburn.h \
|
||||
libisoburn/isoburn.h \
|
||||
@ -36,9 +56,9 @@ xorriso_xorriso_SOURCES = \
|
||||
libisoburn/burn_wrap.c \
|
||||
libisoburn/data_source.c \
|
||||
\
|
||||
libisofs/libisofs.h \
|
||||
libisofs/builder.h \
|
||||
libisofs/builder.c \
|
||||
libisofs/error.h \
|
||||
libisofs/node.h \
|
||||
libisofs/node.c \
|
||||
libisofs/tree.h \
|
||||
@ -50,7 +70,6 @@ xorriso_xorriso_SOURCES = \
|
||||
libisofs/fsource.h \
|
||||
libisofs/fsource.c \
|
||||
libisofs/fs_local.c \
|
||||
libisofs/fs_image.h \
|
||||
libisofs/fs_image.c \
|
||||
libisofs/messages.h \
|
||||
libisofs/messages.c \
|
||||
@ -69,6 +88,7 @@ xorriso_xorriso_SOURCES = \
|
||||
libisofs/ecma119_tree.h \
|
||||
libisofs/ecma119_tree.c \
|
||||
libisofs/writer.h \
|
||||
libisofs/buffer.h \
|
||||
libisofs/buffer.c \
|
||||
libisofs/rockridge.h \
|
||||
libisofs/rockridge.c \
|
||||
@ -78,6 +98,17 @@ xorriso_xorriso_SOURCES = \
|
||||
libisofs/eltorito.h \
|
||||
libisofs/eltorito.c \
|
||||
libisofs/data_source.c \
|
||||
libisofs/find.c \
|
||||
libisofs/filter.h \
|
||||
libisofs/filter.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 \
|
||||
\
|
||||
libburn/async.c \
|
||||
libburn/async.h \
|
||||
@ -133,7 +164,6 @@ xorriso_xorriso_SOURCES = \
|
||||
\
|
||||
version.h
|
||||
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
test/compare_file
|
||||
|
||||
@ -147,6 +177,30 @@ test_compare_file_LDADD =
|
||||
test_compare_file_SOURCES = test/compare_file.c
|
||||
|
||||
|
||||
# Install symbolic links to the xorriso binary
|
||||
#
|
||||
install-exec-hook:
|
||||
if test -e "$(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
|
||||
@ -165,8 +219,8 @@ indent: $(indent_files)
|
||||
## ========================================================================= ##
|
||||
|
||||
# Extra things
|
||||
nodist_pkgconfig_DATA = \
|
||||
xorriso.pc
|
||||
# nodist_pkgconfig_DATA = \
|
||||
# xorriso.pc
|
||||
|
||||
man_MANS = xorriso/xorriso.1
|
||||
|
||||
@ -178,10 +232,19 @@ EXTRA_DIST = \
|
||||
CONTRIBUTORS \
|
||||
COPYRIGHT \
|
||||
COPYING \
|
||||
NEWS \
|
||||
ChangeLog \
|
||||
INSTALL \
|
||||
xorriso/compile_xorriso.sh \
|
||||
$(man_MANS)
|
||||
|
||||
|
||||
xorriso/changelog.txt \
|
||||
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.02.14.182351"
|
||||
#define Xorriso_timestamP "2009.06.28.090001"
|
||||
|
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,
|
||||
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.
|
||||
|
||||
@ -14,14 +14,12 @@
|
||||
#ifndef Xorrisoburn_includeD
|
||||
#define Xorrisoburn_includeD yes
|
||||
|
||||
struct XorrisO;
|
||||
struct FindjoB;
|
||||
|
||||
/* The minimum version of libisoburn to be used with this version of xorriso
|
||||
*/
|
||||
#define xorriso_libisoburn_req_major 0
|
||||
#define xorriso_libisoburn_req_minor 0
|
||||
#define xorriso_libisoburn_req_micro 1
|
||||
#define xorriso_libisoburn_req_minor 4
|
||||
#define xorriso_libisoburn_req_micro 0
|
||||
|
||||
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -40,27 +38,61 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag);
|
||||
|
||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* @param flag bit0=graft in as empty directory, not as copy from disk
|
||||
@return <=0 = error , 1 = added simple node , 2 = added directory
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
@param flag bit0= mkdir: graft in as empty directory, not as copy from disk
|
||||
bit1= do not report added files
|
||||
@return <=0 = error , 1 = added simple node , 2 = added directory
|
||||
*/
|
||||
int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
|
||||
int flag);
|
||||
int Xorriso_graft_in(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *disk_path, char *img_path,
|
||||
off_t offset, off_t cut_size, int flag);
|
||||
|
||||
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
||||
|
||||
/* @param flag bit0=report about output drive
|
||||
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);
|
||||
|
||||
/* @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_tell_media_space(struct XorrisO *xorriso,
|
||||
int *media_space, int *free_space, int flag);
|
||||
|
||||
/* @param flag bit0=fast , bit1=deformat
|
||||
@return 0=failure, did not touch media , -1=failure, altered media
|
||||
1=success, altered media , 2=success, did not touch media
|
||||
*/
|
||||
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
||||
|
||||
int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
||||
/* @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
|
||||
1=success, altered media , 2=success, did not touch media
|
||||
*/
|
||||
int Xorriso_format_media(struct XorrisO *xorriso, off_t size, int flag);
|
||||
|
||||
/* @return <=0 error, 1 success
|
||||
*/
|
||||
int Xorriso_list_formats(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* @param flag bit2= formatting rather than blanking
|
||||
@return 0=failure, did not touch media , -1=failure, altered media
|
||||
1=success, altered media , 2=success, did not touch media
|
||||
*/
|
||||
int Xorriso_blank_as_needed(struct XorrisO *xorriso, int flag);
|
||||
|
||||
|
||||
/* @param boss_iter Opaque internal handle. Use NULL outside xorrisoburn.c :
|
||||
If not NULL then this is an iterator suitable for
|
||||
@ -75,7 +107,7 @@ int Xorriso_format_media(struct XorrisO *xorriso, int flag);
|
||||
2 = removed directory or tree
|
||||
3 = did not remove on user revocation
|
||||
*/
|
||||
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter,
|
||||
int Xorriso_rmi(struct XorrisO *xorriso, void *boss_iter, off_t boss_mem,
|
||||
char *path, int flag);
|
||||
|
||||
/* @param flag bit0= long format
|
||||
@ -91,6 +123,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd,
|
||||
@param flag bit0= long format
|
||||
bit1= only check for directory existence
|
||||
bit2= do not apply search pattern but accept any file
|
||||
bit3= just count nodes and return number
|
||||
*/
|
||||
int Xorriso_ls(struct XorrisO *xorriso, int flag);
|
||||
|
||||
@ -107,7 +140,11 @@ int Xorriso_ls(struct XorrisO *xorriso, int flag);
|
||||
int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd,
|
||||
char *img_path, char eff_path[], int flag);
|
||||
|
||||
int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest,int flag);
|
||||
/* @param boss_iter Opaque handle to be forwarded to actions in ISO image
|
||||
Set to NULL if calling this function from outside ISO world
|
||||
*/
|
||||
int Xorriso_rename(struct XorrisO *xorriso, void *boss_iter,
|
||||
char *origin, char *dest, int flag);
|
||||
|
||||
/* @param flag bit0= do not produce info message on success
|
||||
@return 1=success, 0=was already directory, -1=was other type, -2=bad path
|
||||
@ -132,10 +169,20 @@ int Xorriso_set_gid(struct XorrisO *xorriso, char *in_path, gid_t gid,
|
||||
int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
|
||||
int flag);
|
||||
|
||||
/* @param flag bit0= recursion
|
||||
bit1= do not count deleted files with rm and rm_r
|
||||
*/
|
||||
int Xorriso_findi(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
void *boss_iter, off_t boss_mem,
|
||||
void *dir_node_generic, char *dir_path,
|
||||
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 */
|
||||
int Xorriso_set_volid(struct XorrisO *xorriso, char *volid, int flag);
|
||||
|
||||
@ -145,9 +192,304 @@ int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag);
|
||||
|
||||
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* @return 0= stbuf content is valid , -1 = path not found */
|
||||
/* @return 0= stbuf content is valid ,
|
||||
-1 = path not found , -2 = severe error occured
|
||||
*/
|
||||
int Xorriso_iso_lstat(struct XorrisO *xorriso, char *path, struct stat *stbuf,
|
||||
int flag);
|
||||
|
||||
/* @param flag bit0= -inq
|
||||
bit1= -checkdrive
|
||||
*/
|
||||
int Xorriso_atip(struct XorrisO *xorriso, int flag);
|
||||
|
||||
/* @param write_start_address is valid if >=0
|
||||
@param tsize is valid if >0
|
||||
@param flag bit0= grow_overwriteable_iso
|
||||
bit1= do_isosize
|
||||
*/
|
||||
int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
|
||||
char *track_source, off_t tsize, int flag);
|
||||
|
||||
/* @param flag bit1= outdev rather than indev
|
||||
@return <=0 = failure , 1= ok , 2= ok, is CD profile
|
||||
*/
|
||||
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
||||
char profile_name[80], int flag);
|
||||
|
||||
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
||||
*/
|
||||
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||
void *node_pt, void **stream, int flag);
|
||||
|
||||
int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
|
||||
int count, int flag);
|
||||
|
||||
int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag);
|
||||
|
||||
/* @param bit0= copy link target properties rather than link properties
|
||||
*/
|
||||
int Xorriso_copy_properties(struct XorrisO *xorriso,
|
||||
char *disk_path, char *img_path, int flag);
|
||||
|
||||
int Xorriso_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
||||
|
||||
int Xorriso_paste_in(struct XorrisO *xorriso, char *disk_path,
|
||||
off_t startbyte, off_t bytecount, char *iso_rr_path, int flag);
|
||||
|
||||
struct SplitparT;
|
||||
|
||||
/* @param flag bit0= in_node is valid, do not resolve iso_adr
|
||||
*/
|
||||
int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr,
|
||||
void *in_node,
|
||||
struct SplitparT **parts, int *count,
|
||||
struct stat *total_stbuf, int flag);
|
||||
|
||||
/* @param flag bit0= node is valid, do not resolve path
|
||||
bit1= insist in complete collection of part files
|
||||
*/
|
||||
int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node,
|
||||
int flag);
|
||||
|
||||
|
||||
/* @param flag
|
||||
>>> bit0= mkdir: graft in as empty directory, not as copy from iso
|
||||
bit1= do not report copied files
|
||||
bit2= -follow, -not_*: this is not a command parameter
|
||||
bit3= use offset and cut_size for -paste_in
|
||||
bit4= return 3 on rejection by exclusion or user
|
||||
bit5= if directory then do not add sub tree
|
||||
bit6= this is a copy action: do not fake times and ownership
|
||||
@return <=0 = error , 1 = added leaf file object , 2 = added directory ,
|
||||
3 = rejected
|
||||
*/
|
||||
int Xorriso_restore(struct XorrisO *xorriso,
|
||||
char *img_path, char *disk_path,
|
||||
off_t offset, off_t cut_size, int flag);
|
||||
|
||||
|
||||
/* @param flag bit0= in_node is valid, do not resolve img_path
|
||||
*/
|
||||
int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
||||
char *img_path, char *disk_path,
|
||||
char type_text[5], int flag);
|
||||
|
||||
|
||||
/* 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 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);
|
||||
|
||||
|
||||
struct CheckmediajoB {
|
||||
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
|
||||
|
||||
int min_lba; /* if >=0 : begin checking at this address */
|
||||
int max_lba; /* if >=0 : read up to this address, else use mode */
|
||||
|
||||
int min_block_size; /* >>> not yet implemented:
|
||||
granularity desired by user
|
||||
*/
|
||||
int mode; /* 0= track by track
|
||||
1= single sweep over libisoburn media capacity
|
||||
>>> 2= single sweep over libburn media capacity
|
||||
*/
|
||||
time_t start_time;
|
||||
int time_limit; /* Number of seconds after which to abort */
|
||||
|
||||
int item_limit; /* Maximum number of media check list items as result */
|
||||
|
||||
char abort_file_path[SfileadrL];
|
||||
|
||||
char data_to_path[SfileadrL];
|
||||
int data_to_fd;
|
||||
off_t data_to_offset; /* usually 0 with image copy, negative with file copy */
|
||||
off_t data_to_limit; /* used with file copy */
|
||||
int patch_lba0;
|
||||
int patch_lba0_msc1;
|
||||
|
||||
char sector_map_path[SfileadrL];
|
||||
struct SectorbitmaP *sector_map;
|
||||
int map_with_volid; /* 0=add quick toc to map file,
|
||||
1=read ISO heads for toc
|
||||
*/
|
||||
|
||||
int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks
|
||||
0= retry with CD, full chunk else
|
||||
*/
|
||||
|
||||
int report_mode; /* 0= print MCL items
|
||||
1= print damaged files
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
||||
/* 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 */
|
||||
|
||||
|
Reference in New Issue
Block a user