Compare commits

..

5 Commits

33 changed files with 1317 additions and 13409 deletions

View File

@ -1,11 +1,11 @@
Mario Danic <mario.danic@gmail.com>, Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
libisoburn is Copyright (C) 2007-2009 Vreixo Formoso, Thomas Schmitt libisoburn is Copyright (C) 2007-2008 Vreixo Formoso, Thomas Schmitt
xorriso is Copyright (C) 2007-2009 Thomas Schmitt xorriso is Copyright (C) 2007-2008 Thomas Schmitt
libisofs (if included) is Copyright (C) 2007-2009 Vreixo Formoso, Mario Danic libisofs (if included) is Copyright (C) 2007-2008 Vreixo Formoso, Mario Danic
libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens libburn (if included) is Copyright (C) 2002-2006 Derek Foreman, Ben Jansens
and Copyright (C) 2006-2009 Mario Danic, Thomas Schmitt and Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify

View File

@ -32,21 +32,8 @@ libinclude_HEADERS = \
bin_PROGRAMS = \ bin_PROGRAMS = \
xorriso/xorriso xorriso/xorriso
# This looks quite ugly with make install: xorriso.c is compiled twice again
#
# Trying to create a build timestamp file
#
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h
#
# phony targets get rebuilt every time
#
# .PHONY: xorriso/xorriso_buildstamp.h
# xorriso/xorriso_buildstamp.h:
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
# cat xorriso/xorriso_buildstamp.h
xorriso_xorriso_CPPFLAGS = -Ilibisoburn xorriso_xorriso_CPPFLAGS = -Ilibisoburn
xorriso_xorriso_CFLAGS = -DXorriso_with_maiN $(READLINE_DEF) xorriso_xorriso_CFLAGS = -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS) xorriso_xorriso_LDADD = libisoburn/libisoburn.la -lisofs -lburn $(THREAD_LIBS)
xorriso_xorriso_SOURCES = \ xorriso_xorriso_SOURCES = \
xorriso/xorriso.h \ xorriso/xorriso.h \
@ -61,16 +48,15 @@ xorriso_xorriso_SOURCES = \
# Install symbolic links to the xorriso binary # Install symbolic links to the xorriso binary
# #
install-exec-hook: install-exec-hook:
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi if test -e $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs ln -s xorriso $(bindir)/xorrisofs
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox ln -s xorriso $(bindir)/osirrox
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord ln -s xorriso $(bindir)/xorrecord
# Alternative to the disabled .PHONY above. # Trying to create a build timestamp file
# Trying to create a build timestamp file semi-manually: make buildstamped
# #
buildstamp: buildstamp:
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
@ -79,7 +65,15 @@ buildstamp:
# For now make buildstamped has to be performed explicitely. # For now make buildstamped has to be performed explicitely.
buildstamped: buildstamp buildstamped: buildstamp
make make
#
# Processing of the "all:" rule happens too late.
# How to create a dependency of xorriso.c on buildstamp ?
# Not working:
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
# on buildstamp. It runs. But at quite random occasions.
# xorriso/xorriso_buildstamp.h: buildstamp
#
# all: buildstamp
## Build test applications ## Build test applications
@ -152,8 +146,6 @@ man_MANS = xorriso/xorriso.1
EXTRA_DIST = \ EXTRA_DIST = \
libisoburn-1.pc.in \ libisoburn-1.pc.in \
version.h.in \ version.h.in \
doc/comments \
doc/doxygen.conf.in \
README \ README \
AUTHORS \ AUTHORS \
CONTRIBUTORS \ CONTRIBUTORS \

31
README
View File

@ -4,13 +4,13 @@
libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es> libisoburn. By Vreixo Formoso <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org. Integrated sub project of libburnia-project.org.
http://files.libburnia-project.org/releases/libisoburn-0.3.2.pl00.tar.gz http://files.libburnia-project.org/releases/libisoburn-0.2.2.pl00.tar.gz
Copyright (C) 2006-2009 Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2008 Vreixo Formoso, Thomas Schmitt.
Provided under GPL version 2. Provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
libisoburn is a frontend for libraries libburn and libisofs which enables libisoburn is a frontend for libraries libburn and libisofs which enables
creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported creation and expansion of ISO-9660 filesystems on all CD/DVD media supported
by libburn. This includes media like DVD+RW, which do not support multi-session by libburn. This includes media like DVD+RW, which do not support multi-session
management on media level and even plain disk files or block devices. management on media level and even plain disk files or block devices.
@ -18,8 +18,7 @@ The price for that is thorough specialization on data files in ISO-9660
filesystem images. So libisoburn is not suitable for audio (CD-DA) or any filesystem images. So libisoburn is not suitable for audio (CD-DA) or any
other CD layout which does not entirely consist of ISO-9660 sessions. other CD layout which does not entirely consist of ISO-9660 sessions.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions Currently it is only supported on Linux with kernels >= 2.4.
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
By using this software you agree to the disclaimer at the end of this text: By using this software you agree to the disclaimer at the end of this text:
"... without even the implied warranty ..." "... without even the implied warranty ..."
@ -27,18 +26,18 @@ By using this software you agree to the disclaimer at the end of this text:
Compilation, First Glimpse, Installation Compilation, First Glimpse, Installation
Dynamic library and compile time header requirements for libisoburn-0.3.2 : Dynamic library and compile time header requirements for libisoburn-0.2.2 :
- libburn.so.4 , version libburn-0.6.0 or higher - libburn.so.4 , version libburn-0.5.0 or higher
- libisofs.so.6 , version libisofs-0.6.12 or higher - libisofs.so.6 , version libisofs-0.6.6 or higher
libisoburn and xorriso will not start with libraries which are older than their libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level. setup unless you have reason to enforce a newer bug fix level.
Obtain libisoburn-0.3.2.pl00.tar.gz, take it to a directory of your choice Obtain libisoburn-0.2.2.pl00.tar.gz, take it to a directory of your choice
and do: and do:
tar xzf libisoburn-0.3.2.pl00.tar.gz tar xzf libisoburn-0.2.2.pl00.tar.gz
cd libisoburn-0.3.2 cd libisoburn-0.2.2
Within that directory execute: Within that directory execute:
@ -58,7 +57,7 @@ as well as
xorriso xorriso
libisoburn comes with a command line and dialog application named xorriso, libisoburn includes a command line and dialog application named xorriso,
which offers a substantial part of libisoburn features to shell scripts and which offers a substantial part of libisoburn features to shell scripts and
users. Its file xorriso/README describes a standalone tarball as first users. Its file xorriso/README describes a standalone tarball as first
preference for statically linked xorriso installation. preference for statically linked xorriso installation.
@ -73,12 +72,6 @@ Several alias links point to the xorriso binary:
xorrecord starts xorriso with -as cdrecord emulation already enabled xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying 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.
Drives and Disk File Objects Drives and Disk File Objects
@ -156,7 +149,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>, By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components still containing libburnia-project.org is inspired by and in other components still containing
parts of old parts of old

View File

@ -1,4 +1,4 @@
AC_INIT([libisoburn], [0.3.2], [http://libburnia-project.org]) AC_INIT([libisoburn], [0.2.2], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@ -8,7 +8,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects]) AM_INIT_AUTOMAKE([subdir-objects])
dnl Hint: Search list for version code aspects: dnl Hint: Search list for version code aspects:
dnl /AC_INIT( dnl /AC_INT(
dnl /ISOBURN_.*_VERSION dnl /ISOBURN_.*_VERSION
dnl /LT_.* dnl /LT_.*
dnl /LIB.*_REQUIRED dnl /LIB.*_REQUIRED
@ -20,7 +20,7 @@ dnl LT_CURREN, LT_AGE, LT_REVISION where SONAME becomes LT_CURRENT - LT_AGE
dnl dnl
dnl These three are only copies to provide libtool with unused LT_RELEASE dnl These three are only copies to provide libtool with unused LT_RELEASE
ISOBURN_MAJOR_VERSION=0 ISOBURN_MAJOR_VERSION=0
ISOBURN_MINOR_VERSION=3 ISOBURN_MINOR_VERSION=2
ISOBURN_MICRO_VERSION=2 ISOBURN_MICRO_VERSION=2
dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION
@ -33,16 +33,16 @@ dnl Libtool versioning
dnl Generate libisoburn.so.1.x.y dnl Generate libisoburn.so.1.x.y
dnl SONAME will become LT_CURRENT - LT_AGE dnl SONAME will become LT_CURRENT - LT_AGE
dnl dnl
dnl ts A90105 dnl ts A80718
dnl This is the release version 0.3.2 = libisoburn.so.1.21.0 dnl This is the release version 0.2.2 = libisoburn.so.1.11.0
dnl ### This is the development version after above stable release dnl ### This is the development version after above stable release
dnl LT_CURRENT++, LT_AGE++ have not happened happened yet. dnl LT_CURRENT++, LT_AGE++ have not happened happened yet.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile. dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl dnl
dnl SONAME = 22 - 21 = 1 . Library name = libisoburn.so.1.21.0 dnl SONAME = 12 - 11 = 1 . Library name = libburn.so.1.11.0
LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION
LT_CURRENT=22 LT_CURRENT=12
LT_AGE=21 LT_AGE=11
LT_REVISION=0 LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -86,28 +86,22 @@ AC_SUBST(ARCH)
AC_SUBST(LIBBURN_ARCH_LIBS) 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 Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history() dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE" READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= ) AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= ) AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF) AC_SUBST(READLINE_DEF)
AC_CHECK_HEADER(libburn/libburn.h) AC_CHECK_HEADER(libburn/libburn.h)
AC_CHECK_HEADER(libisofs/libisofs.h) AC_CHECK_HEADER(libisofs/libisofs.h)
dnl Check for proper library versions dnl Check for proper library versions
LIBBURN_REQUIRED=0.6.0 LIBBURN_REQUIRED=0.5.0
LIBISOFS_REQUIRED=0.6.12 LIBISOFS_REQUIRED=0.6.6
PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED) PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED)
PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED) PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED)

View File

@ -1,58 +0,0 @@
/**
@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 .
*/

View File

@ -477,7 +477,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories # directories like "/usr/src/myproject". Separate the files or directories
# with spaces. # with spaces.
INPUT = libisoburn \ INPUT = libburn \
doc \ doc \
test test
@ -495,7 +495,9 @@ INPUT_ENCODING = UTF-8
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
FILE_PATTERNS = FILE_PATTERNS = libburn.h \
comments \
libburner.c
# The RECURSIVE tag can be used to turn specify whether or not subdirectories # The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO. # should be searched for input files as well. Possible values are YES and NO.

View File

@ -1,328 +0,0 @@
Arbitrary Attribute Interchange Protocol
Draft version 0.2
Dec 19 2008
Interchange of Persistent File Attributes
by Thomas Schmitt - mailto:scdbackup@gmx.net
Libburnia project - mailto:libburn-hackers@pykix.org
AAIP is intended as companion of the Rock Ridge Interchange Protocol RRIP
which under the general design of System Use Sharing Protocol SUSP extends
ISO 9660 aka ECMA-119 filesystem semantics to match POSIX needs.
Goal is to have for each file an arbitrary number of attributes which consist
of two components (Name and Value) of arbitrary length and to have a compact
representation of ACLs.
This document describes a SUSP field with adjustable name (Signature Word).
The name is defined in an ER field of which the content form is described here.
Recommended is to use the name "AA" which collides neither with SUSP 1.12 nor
with RRIP 1.12.
The field has been designed to be as similar to the RRIP field SL as possible.
Since the size of a SUSP field is limited to 255, multiple fields may be
needed to describe one component. The CE mechanism of SUSP shall be used to
address enough storage if needed.
-------------------------------------------------------------------------------
System Entries Provided by this Specification
* AA (or another name which does not disturb other co-existing SUSP protocols)
Description of the "AA" System Use Entry
The field has exactly the same layout as RRIP field SL. One has to expect
more data bytes than with SL, though, and any of the 256 possible byte values.
The reader shall be prepared to detect and handle oversized data.
One or more AA fields form the Attribute List of a file object with
a pare number of components. Each two consequtive components form a pair of
Name and Value. The empty name is reserved for a compact representation of
ALCs. The meaning of any other name is not specified by this document.
All AA fields except the last one shall have the CONTINUE flag set. An AA
field with CONTINUE set to 0 indicates the end of the Attribute List.
The format of the "AA" System Use Field is as follows:
[1] "BP 1 to BP 2 - Signature Word" shall be (41)(41) ("AA") resp. the word
that is defined in the ER field. See below.
[2] "BP 3 - Length" shall specify as an 8-bit number the length in bytes of
the "AA" entry recorded according to ISO 9660:7.1.1.
[3] "BP 4 - System Use Entry Version" shall be 1 as in ISO 9660:7.1.1.
[4] "BP 5 - Flags" shall contain bit field flags numbered 0 to 7 starting
with the least significant bit as follows:
0 CONTINUE This AA field continues in the next AA field.
All other bits shall be set to 0.
[5] "BP 6 to Length - Component Area" shall contain Component Records
as described below.
| 'A' | 'A' | LENGTH | 1 | FLAGS | COMPONENT AREA |
Within "AA" fields each component (Name or Value) shall be recorded as one
or more component records. If a component does not fit into the remaining
space of an AA field then it shall be continued in following AA fields.
All Component Records of a component except the last one shall have the
CONTINUE flag set. A Component Record with CONTINUE set to 0 indicates the end
of the component. An eventually following Component Record starts the next
component.
-------------------------------------------------------------------------------
The Component Record format is identical to the one of the SL field.
The complete form of the following summary can be found in RRIP 1.12 "4.1.3.1".
In case of discrepancies, RRIP 1.12 is the decisive specification.
Component Records shall be recorded contiguously within each Component Area,
starting in the first byte of the Component Area. The last Component Record
in the Component Area of an "AA" System Use Entry may be continued in the
Component Area of the next recorded "AA" System Use Entry in the same
System Use Area.
Each Component Record shall have the following format:
[A] "BP 1 - Component Flags" shall contain bit field flags numbered 0 to 7,
starting with the least significant bit, as follows:
0 CONTINUE This Component Record continues in the next
AA Component Record.
The following bits are defined but may not be set if the Component
Record shall carry payload. (Their use case is unclear yet.)
1 CURRENT This Component Record refers to the current
directory.
2 PARENT This Component Record refers to the parent of
the current directory.
3 ROOT This Component Record refers to root directory.
all others are RESERVED and shall be 0.
No more than one of "AA" Component Flag Bits 0-3 shall be set to ONE.
[B] "BP 2 - Component Length (LEN_CP)" shall specify as an 8-bit number the
number of component bytes in the Component Record. This length shall not
include the first two bytes of the Component Record.
If any of the bit positions 1-3 is set, the value of this field shall be
set to ZERO and no Component Content shall be recorded.
This field shall be recorded according to ISO 9660 Format section 7.1.1.
[C] "BP 3 to 2 + LEN_CP - Component Content" shall contain the component
bytes in the Component Record.
| COMPONENT FLAGS | LEN_CP | COMPONENT BYTES |
Example: Two pairs of "name"="long...content" and "one"="more" encoded as
two AA fields
Field 1 contains the Component Record of Name and one Component Record of
Value :
{ 'A', 'A', 255, 1, 1,
0, 4, 'n', 'a', 'm', 'e',
1, 255, 'l', 'o', 'n', 'g', ... 238 more bytes, 13 go to next AA ... }
Field 2 contains the rest of "long...content" and the complete second pair.
It marks the end of the Attribute List :
{ 'A', 'A', 38, 1, 0,
... 13 remaining bytes of the Component Record in first field ...
0, 7, 'c', 'o', 'n', 't', 'e', 'n', 't',
0, 3, 'o', 'n', 'e',
0, 4, 'm', 'o', 'r', 'e' }
-------------------------------------------------------------------------------
Specification of binary ACL representation as special Arbitrary Attribute
The Name component of a binary ACL shall be of length 0.
The Value shall be an arbitrary number of ACL Entries:
[a] "BP 1 - Entry Flags" shall contain bit field flags numbered 0 to 7,
starting with the least significant bit, as follows:
0 EXEC indicates that this entry grants execute permission
1 WRITE write permission
2 READ read permission
3 QUALIFIER indicates that one or more Qualifier Records follow
4 - 7 TYPE
shall contain the tag type of the ACL entry as four bit code:
0 TRANSLATE entry for a global map of name to numeric id
1 ACL_USER_OBJ permissions of owning user (as of PX field)
2 ACL_USER of arbitrary user, with name as qualifier
3 ACL_GROUP_OBJ permissions of owning group (as of PX field)
4 ACL_GROUP of arbitrary group, with name as qualifier
5 ACL_MASK restricts 2, 3, and 4 via logical AND
6 ACL_OTHER permissions of non-listed, non-owning users
8 SWITCH_MARK switch from "access" ACL to "default" ACL
10 ACL_USER_N like 2, with numeric user id as qualifier
12 ACL_GROUP_N like 4, with numeric group id as qualifier
15 FUTURE_VERSION will indicate that this document
does not apply to the entry.
The other values are reserved. Readers shall ignore them if
they are not aware of updates of this document which would
assign a meaning to them.
If any of ACL_USER_OBJ, ACL_GROUP_OBJ, ACL_OTHER are missing then the settings
from the PX field shall get into effect. If they exist then they shall override
the PX field.
A numeric qualifier is a binary number of variable length. The Most Significant
Byte comes first. The number shall be the "POSIX File User ID" resp.
"POSIX File Group ID" as also used in RRIP PX fields. The ids of owning user
and owning group shall be taken from the PX field of the file object.
Optional TRANSLATE entries may associate user or group names with numeric
ids to allow the reading system to remap the numeric ids. See below.
The writer is not obliged to write them and the reader is not obliged to
interpret them.
The ACL entries belong to the "access" ACL of a file object. An optional
SWITCH_MARK entry may direct further entries to the "default" ACL which
is defined for directory objects. The switching is controlled by the EXEC bit.
0 "access" ACL
1 "default" ACL
The bits for WRITE, READ, QUALIFIER shall be 0 with SWITCH_MARK.
The eventually needed qualifier is stored in one or more Qualifier Records.
[b] "BP 2 - Qualifier Record Head" shall be present only if QUALIFIER is set
to 1. It shall give the number of Qualifier Bytes and eventually
indicate that the qualifier continues in a Qualifier Record which comes
imediately after this record.
0 to 127 Q_LENGTH, the qualifier is complete by this record
128 to 255 Q_LENGTH+128, the qualifier is continued by next record
So a Qualifier Record can contain at most 127 Qualifier Bytes.
This field shall be recorded according to ISO 9660 Format section 7.1.1.
[c] "BP 3 to BP 2 + Q_LENGTH - Qualifier Bytes" shall be present only if
QUALIFIER is set to 1 and hold the announced number of bytes of the
user or group name.
| ENTRY FLAGS [ | QUALIFIER HEAD | QUALIFIER BYTES | ]
Example: From man 5 acl: u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r--
{ 'A', 'A', 28, 1, 0,
0, 0,
0, 19, 0x16,
0x2E, 4, 'l', 'i', 's', 'a',
0x34,
0x4E, 7, 't', 'o', 'o', 'l', 'i', 'e', 's',
0x54,
0x64 }
Example: An entry with very long qualifier u:His_Excellency_..._the_Boss:r--
0x2C, 255, 'H', 'i', 's', '_', 'E', 'x', 'c', 'e', 'l', 'e',
... 117 more bytes ...,
8, 't', 'h', 'e', '_', 'B', 'o', 's', 's',
Example: User number 71 in numerical form gets rwx
0xAF, 1, 71,
Group number 65534 gets r-x
0xCD, 2, 255, 254,
-------------------------------------------------------------------------------
About Names and Numeric Identifiers
It makes an important difference whether qualifiers are represented as names
or as id numbers. By storing names (and usually wasting space) it is possible
to control permissions in a way that is portable between uncoordinated
computers as long as the human readable user/group names are present on both
sides. POSIX File ID numbers make most sense in backups which shall be read
by the same system which wrote it.
Rock Ridge can only record POSIX File Ids but not user or group names.
The entry flag value 0x08 TRANSLATE is not a ACL entry of the hosting object
but rather a global hint about the relation of roles, names and numeric ids.
If it is recorded at all, then it shall be recorded with the first Directory
Entry of the volume's root directory. According to the description of SUSP
field ER, this has to be "dot" or (00). Other than with ER, a TRANSLATE entry
may not appear in the root of directory sub trees.
An interested reader shall examine the Arbitrary Attributes of this Directory
Entry in order to collect a translation table.
The advised translation is: PX or AA Id number -> name -> local id number.
The Qualifier Bytes of a TRANSLATE entry shall have the following format:
[i] "BP 0 - Role" shall tell whether it is about a user name (role 0) or
a group name (role 1). Other values are not allowed.
[ii] "BP 1 to BP 8 - Numeric Id" shall hold the 32 bit POSIX Id number of the
entry. This field shall be recorded according to ISO 9660:7.3.3.
[iii] "BP 9 to End Of Qualifier - Name" shall hold the name bytes of this
entry.
| ROLE | NUMERIC ID | NAME |
Example: User id number 1001 gets associated with user name "lisa"
0x08, 13, 0, 233,3,0,0, 0,0,3,233, 'l', 'i', 's', 'a',
-------------------------------------------------------------------------------
Specification of the ER System Use Entry Values for AAIP:
The Extension Version number for this version of AAIP shall be 1.
The Extension Identifier field shall be "AAIP_0002" with Identifier Length 9.
The mandatory content form of the Extension Descriptor is
"AA PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES IN ISO 9660 IMAGES"
with possibly two letters other than "AA" at the start of the string.
The Description Length is 81.
The reader of AAIP shall take the actual name of the AA field from BP 19 and
BP 20 of the ER field.
The recommended content of the Extension Source is
"PLEASE CONTACT THE LIBBURNIA PROJECT VIA LIBBURNIA-PROJECT.ORG".
The corresponding Source Length is 62.
-------------------------------------------------------------------------------
Model Relations:
Attribute List ------------- [1:0..1] ------------- ACL
[1:0..n] [1:0..n]
Arbitrary Attribute ( [1:0..1] ACL ) Entry
[1:2..2n] [1:0..1]
Component ( [1..m:1..n] AA Field ) Qualifier
[1:1..n] << one of >>
Component Record / \ \
[1..m:1..n] Translation Entry , Name , Numeric Id
AA Field | | |
[1:1..n] [1:1..n] [1:1]
\ | /
Qualifier Record
-------------------------------------------------------------------------------
Revoked drafts:
There was a draft AAIP 0.0 with ER signature "AAIP_2008A". It did not resemble
the existing field SL and therefore shall not be used by writers of ISO images.
-------------------------------------------------------------------------------
References:
ECMA-119 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
SUSP 1.12 ftp://ftp.ymi.com/pub/rockridge/susp112.ps
RRIP 1.12 ftp://ftp.ymi.com/pub/rockridge/rrip112.ps
(especially field SL)

View File

@ -6,7 +6,7 @@
*/ */
/* libburn wrappers for libisoburn /* libburn wrappers for libisoburn
Copyright 2007 - 2009 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007 - 2008 Thomas Schmitt, <scdbackup@gmx.net>
*/ */
/* <<< A70929 : hardcoded CD-RW with fabricated -msinfo /* <<< A70929 : hardcoded CD-RW with fabricated -msinfo
@ -24,7 +24,6 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
#include <regex.h>
#ifndef Xorriso_standalonE #ifndef Xorriso_standalonE
@ -59,7 +58,7 @@ extern void *libisoburn_default_msgs_submit_handle;
extern int libisoburn_default_msgs_submit_flag; extern int libisoburn_default_msgs_submit_flag;
static int isoburn_emulate_toc(struct burn_drive *d, int flag); int isoburn_emulate_toc(struct burn_drive *d, int flag);
int isoburn_initialize(char msg[1024], int flag) int isoburn_initialize(char msg[1024], int flag)
@ -264,7 +263,6 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
@param flag bit0= pretent blank on overwriteable media @param flag bit0= pretent blank on overwriteable media
bit3= if the drive reports a -ROM profile then try to read bit3= if the drive reports a -ROM profile then try to read
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
bit4= do not emulate TOC on overwriteable media
*/ */
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag) int flag)
@ -314,13 +312,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->emulation_mode= -1; (*o)->emulation_mode= -1;
goto ex; goto ex;
} }
if(!(flag & 16)) { /* try to read emulated toc */
/* try to read emulated toc */ ret= isoburn_emulate_toc(d, 0);
ret= isoburn_emulate_toc(d, 0); if(ret<0) {
if(ret<0) { (*o)->emulation_mode= -1;
(*o)->emulation_mode= -1; goto ex;
goto ex;
}
} }
} }
@ -330,13 +326,9 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
if(readonly) { if(readonly) {
/* This might be overwriteable media in a -ROM drive */ /* This might be overwriteable media in a -ROM drive */
if((flag & 16)) { ret= isoburn_emulate_toc(d, 1);
ret= 0; if(ret<0)
} else { goto ex;
ret= isoburn_emulate_toc(d, 1);
if(ret<0)
goto ex;
}
if(ret==0 && profile !=0x08 && (flag&8)) { if(ret==0 && profile !=0x08 && (flag&8)) {
/* This might also be multi-session media which do not /* This might also be multi-session media which do not
get shown with a decent TOC. get shown with a decent TOC.
@ -381,38 +373,29 @@ ex:
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
(depending on media type and drive state this might (depending on media type and drive state this might
help or it might make the resulting toc even worse) help or it might make the resulting toc even worse)
bit4= do not emulate TOC on overwriteable media
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag) char *adr, int flag)
{ {
int ret, drive_grabbed= 0; int ret, conv_ret, drive_grabbed= 0;
struct isoburn *o= NULL;
#ifndef NIX
/* <<< should be obsolete by new drive addressing of libburn-0.5.2 */
/* >>> but helps with kernel 2.4 to use /dev/sr */
int conv_ret;
char libburn_drive_adr[BURN_DRIVE_ADR_LEN]; char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
struct isoburn *o= NULL;
char msg[BURN_MSGS_MESSAGE_LEN+4096];
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr); conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
if(conv_ret<=0) if(conv_ret<=0) {
strcpy(libburn_drive_adr, adr); sprintf(msg, "Unsuitable drive address: '%s'\n",adr);
msg[BURN_MSGS_MESSAGE_LEN-1]= 0;
isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0);
ret= 0; goto ex;
}
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1); ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
#else
ret= burn_drive_scan_and_grab(drive_infos, adr, flag & 1);
#endif /* ! NIX */
if(ret<=0) if(ret<=0)
goto ex; goto ex;
drive_grabbed= 1; drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive, ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag & 24) | !!(flag&2)); (flag&8) | !!(flag&2));
if(ret<=0) if(ret<=0)
goto ex; goto ex;
@ -1042,33 +1025,7 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
} }
ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info, ret= isoburn_read_iso_head_parse(d, buffer+32*1024, image_blocks, info,
info_mode); info_mode);
if(ret<=0) return(ret);
return(ret);
return(1);
}
int isoburn_make_toc_entry(struct isoburn *o, int *session_count, int lba,
int track_blocks, int flag)
{
int ret;
struct isoburn_toc_entry *item;
ret= isoburn_toc_entry_new(&item, o->toc, 0);
if(ret<=0) {
isoburn_msgs_submit(o, 0x00060000,
"Not enough memory for emulated TOC entry object",
0, "FATAL", 0);
return(-1);
}
if(o->toc==NULL)
o->toc= item;
(*session_count)++;
item->session= *session_count;
item->track_no= *session_count;
item->start_lba= lba;
item->track_blocks= track_blocks;
return(1);
} }
@ -1080,8 +1037,8 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
{ {
int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0; int ret, image_size= 0, lba, track_blocks, session_count= 0, read_flag= 0;
int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa; int scan_start= 0, scan_count= 0, probe_minus_16= 0, growisofs_nwa;
int with_enclosure= 0;
struct isoburn *o; struct isoburn *o;
struct isoburn_toc_entry *item;
char msg[160], size_text[80], *sev; char msg[160], size_text[80], *sev;
time_t start_time, last_pacifier, now; time_t start_time, last_pacifier, now;
@ -1101,7 +1058,6 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(ret<=0) if(ret<=0)
{ret= 0; goto failure;} {ret= 0; goto failure;}
lba= Libisoburn_overwriteable_starT; lba= Libisoburn_overwriteable_starT;
with_enclosure= 1;
} }
while(lba<image_size || (flag&2)) { while(lba<image_size || (flag&2)) {
now= time(NULL); now= time(NULL);
@ -1110,7 +1066,7 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
if(scan_count>=10*512) if(scan_count>=10*512)
sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0); sprintf(size_text, "%.f MB", ((double) scan_count) / 512.0);
else else
sprintf(size_text, "%.f kB", 2 * (double) scan_count); sprintf(size_text, "%.f MB", 2 * (double) scan_count);
sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds", sprintf(msg, "Found %d ISO sessions by scanning %s in %.f seconds",
session_count, size_text, (double) (now - start_time)); session_count, size_text, (double) (now - start_time));
isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0); isoburn_msgs_submit(o, 0x00060000, msg, 0, "UPDATE", 0);
@ -1150,25 +1106,27 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
"Chain of ISO session headers broken at #%d, LBA %ds", "Chain of ISO session headers broken at #%d, LBA %ds",
session_count+1, lba); session_count+1, lba);
isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0); isoburn_msgs_submit(o, 0x00060000, msg, 0, "WARNING", 0);
if(with_enclosure) {
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
if(ret<=0)
goto failure;
}
break; /* do not return failure */
} }
{ret= 0; goto failure;} {ret= 0; goto failure;}
} }
if(ret==2) /* ISO header was found in first half block */ if(ret==2) /* ISO header was found in first half block */
lba-= 16; lba-= 16;
ret= isoburn_toc_entry_new(&item, o->toc, 0);
ret= isoburn_make_toc_entry(o, &session_count, lba, track_blocks, 0); if(ret<=0) {
if(ret<=0) isoburn_msgs_submit(o, 0x00060000,
goto failure; "Not enough memory for emulated TOC entry object",
lba+= track_blocks; 0, "FATAL", 0);
ret= -1; goto failure;
}
if(o->toc==NULL)
o->toc= item;
session_count++;
scan_count+= 32; scan_count+= 32;
item->session= session_count;
item->track_no= session_count;
item->start_lba= lba;
item->track_blocks= track_blocks;
lba+= track_blocks;
/* growisofs aligns to 16 rather than 32 */ /* growisofs aligns to 16 rather than 32 */
growisofs_nwa= lba; growisofs_nwa= lba;
@ -1195,10 +1153,6 @@ int isoburn_emulate_toc(struct burn_drive *d, int flag)
return(1); return(1);
failure:; failure:;
isoburn_toc_entry_destroy(&(o->toc), 1); isoburn_toc_entry_destroy(&(o->toc), 1);
if(with_enclosure && o->emulation_mode == 1) {
session_count= 0;
ret= isoburn_make_toc_entry(o, &session_count, 0, image_size, 0);
}
return(ret); return(ret);
} }
@ -1343,31 +1297,15 @@ failure:;
int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc) int isoburn_toc_disc_get_sectors(struct isoburn_toc_disc *disc)
{ {
struct isoburn_toc_entry *t; struct isoburn_toc_entry *t;
int ret= 0, num_sessions, num_tracks; int ret= 0;
struct burn_session **sessions;
struct burn_track **tracks;
struct burn_toc_entry entry;
if(disc==NULL) if(disc==NULL)
return(0); return(0);
if(disc->toc!=NULL) { if(disc->toc!=NULL) {
for(t= disc->toc; t!=NULL; t= t->next) for(t= disc->toc; t!=NULL; t= t->next)
ret= t->start_lba + t->track_blocks; ret= t->start_lba + t->track_blocks;
} else if(disc->disc!=NULL) { } else if(disc->disc!=NULL)
sessions= burn_disc_get_sessions(disc->disc, &num_sessions);
if(num_sessions > 0) {
tracks = burn_session_get_tracks(sessions[num_sessions - 1],
&num_tracks);
if(num_tracks > 0) {
burn_track_get_entry(tracks[num_tracks - 1], &entry);
if(entry.extensions_valid & 1)
ret= entry.start_lba + entry.track_blocks;
}
}
/*
ret= burn_disc_get_sectors(disc->disc); ret= burn_disc_get_sectors(disc->disc);
*/
}
return(ret); return(ret);
} }
@ -1512,14 +1450,12 @@ int isoburn_drive_set_msgs_submit(struct burn_drive *d,
/* @param flag bit0= with adr_mode 3: adr_value might be 16 blocks too high /* @param flag bit0= with adr_mode 3: adr_value might be 16 blocks too high
bit1= insist in seeing a disc object with at least one session
bit2= with adr_mode 4: use adr_value as regular expression
*/ */
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value, int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag) int flag)
{ {
int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks; int ret, num_sessions, num_tracks, adr_num, i, j, total_tracks;
int lba, best_lba, size, re_valid= 0; int lba, best_lba, size;
char volid[33], msg[160]; char volid[33], msg[160];
struct isoburn *o; struct isoburn *o;
struct isoburn_toc_disc *disc= NULL; struct isoburn_toc_disc *disc= NULL;
@ -1527,8 +1463,6 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
struct isoburn_toc_track **tracks= NULL; struct isoburn_toc_track **tracks= NULL;
static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"}; static char mode_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_mode_names= 4; static int max_mode_names= 4;
regex_t re;
regmatch_t match[1];
ret= isoburn_find_emulator(&o, d, 0); ret= isoburn_find_emulator(&o, d, 0);
if(ret<0) if(ret<0)
@ -1537,7 +1471,7 @@ int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
return(-1); return(-1);
adr_num= atoi(adr_value); adr_num= atoi(adr_value);
if(adr_mode!=3 || (flag & 2)) { if(adr_mode!=3) {
disc= isoburn_toc_drive_get_disc(d); disc= isoburn_toc_drive_get_disc(d);
if(disc==NULL) { if(disc==NULL) {
not_found:; not_found:;
@ -1596,13 +1530,6 @@ not_found:;
} }
} else if(adr_mode==4) { } else if(adr_mode==4) {
/* search for volume id that is equal to adr_value */ /* search for volume id that is equal to adr_value */
if(flag & 4) {
ret= regcomp(&re, adr_value, 0);
if(ret != 0)
flag&= ~4;
else
re_valid= 1;
}
best_lba= -1; best_lba= -1;
for(i=0; i<num_sessions; i++) { for(i=0; i<num_sessions; i++) {
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks); tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
@ -1613,14 +1540,8 @@ not_found:;
ret= isoburn_read_iso_head(d, lba, &size, volid, 1); ret= isoburn_read_iso_head(d, lba, &size, volid, 1);
if(ret<=0) if(ret<=0)
continue; continue;
if(flag & 4) { if(strcmp(volid, adr_value)!=0)
ret= regexec(&re, volid, 1, match, 0);
if(ret != 0)
continue; continue;
} else {
if(strcmp(volid, adr_value)!=0)
continue;
}
best_lba= lba; best_lba= lba;
} }
} }
@ -1638,64 +1559,7 @@ unknown_mode:;
ex:; ex:;
if(disc!=NULL) if(disc!=NULL)
isoburn_toc_disc_free(disc); isoburn_toc_disc_free(disc);
if((flag & 4) && re_valid)
regfree(&re);
return(ret); return(ret);
} }
int isoburn_get_mount_params(struct burn_drive *d,
int adr_mode, char *adr_value,
int *lba, int *track, int *session,
char volid[33], int flag)
{
int msc1_mem, ret, total_tracks, num_sessions, num_tracks, i, j, track_lba;
int size, is_iso= 0;
struct isoburn *o;
struct isoburn_toc_disc *disc= NULL;
struct isoburn_toc_session **sessions= NULL;
struct isoburn_toc_track **tracks= NULL;
*lba= *track= *session= -1;
volid[0]= 0;
ret= isoburn_find_emulator(&o, d, 0);
if(ret < 0 || o == NULL)
return(-1);
msc1_mem= o->fabricated_msc1;
ret= isoburn_set_msc1(d, adr_mode, adr_value, 2 | (flag & 4));
if(ret <= 0)
return(ret);
*lba= o->fabricated_msc1;
disc= isoburn_toc_drive_get_disc(d);
if(disc==NULL)
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
if(sessions==NULL || num_sessions<=0)
{ret= -1; goto ex;} /* cannot happen because checked by isoburn_set_msc1 */
total_tracks= 0;
for(i=0; i<num_sessions && *session < 0; i++) {
tracks= isoburn_toc_session_get_tracks(sessions[i], &num_tracks);
if(tracks==NULL)
continue;
for(j= 0; j<num_tracks && *track < 0; j++) {
total_tracks++;
isoburn_get_track_lba(tracks[j], &track_lba, 0);
if(track_lba == *lba) {
*track= total_tracks;
*session= i + 1;
}
}
}
ret= isoburn_read_iso_head(d, *lba, &size, volid, 1);
if(ret <= 0)
volid[0]= 0;
else
is_iso= 1;
ex:;
o->fabricated_msc1= msc1_mem;
return(2 - is_iso);
}

View File

@ -1,7 +1,7 @@
/* /*
data source for libisoburn. data source for libisoburn.
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -147,10 +147,6 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
return 1; return 1;
tiles[oldest].last_error_lba = lba; tiles[oldest].last_error_lba = lba;
#ifdef ISO_DATA_SOURCE_MISHAP
ret= ISO_DATA_SOURCE_MISHAP;
#else
/* <<< pre libisofs-0.6.7 */
/* It is not required by the specs of libisofs but implicitely assumed /* It is not required by the specs of libisofs but implicitely assumed
... ...
But it is not possible to ignore FAILURE. But it is not possible to ignore FAILURE.
@ -163,8 +159,6 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
enough to make it appear plausible. enough to make it appear plausible.
*/ */
ret= ISO_FILE_CANT_WRITE; ret= ISO_FILE_CANT_WRITE;
#endif
if(ret >= 0) if(ret >= 0)
ret = -1; ret = -1;
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret); sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);

View File

@ -6,7 +6,7 @@
/* /*
Class core of libisoburn. Class core of libisoburn.
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -413,9 +413,6 @@ int isoburn_prepare_disc_aux(struct burn_drive *in_d, struct burn_drive *out_d,
iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii); iso_write_opts_set_allow_full_ascii(wopts, opts->allow_full_ascii);
iso_write_opts_set_relaxed_vol_atts(wopts, 1); iso_write_opts_set_relaxed_vol_atts(wopts, 1);
iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths); iso_write_opts_set_joliet_longer_paths(wopts, opts->joliet_longer_paths);
iso_write_opts_set_always_gmt(wopts, opts->always_gmt);
iso_write_opts_set_rrip_version_1_10(wopts, opts->rrip_version_1_10);
iso_write_opts_set_dir_rec_mtime(wopts, opts->dir_rec_mtime);
iso_write_opts_set_sort_files(wopts, opts->sort_files); iso_write_opts_set_sort_files(wopts, opts->sort_files);
iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode, iso_write_opts_set_replace_mode(wopts, opts->replace_dir_mode,
opts->replace_file_mode, opts->replace_uid, opts->replace_gid); opts->replace_file_mode, opts->replace_uid, opts->replace_gid);
@ -776,9 +773,6 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->allow_lowercase= 0; o->allow_lowercase= 0;
o->allow_full_ascii= 0; o->allow_full_ascii= 0;
o->joliet_longer_paths= 0; o->joliet_longer_paths= 0;
o->always_gmt= 0;
o->rrip_version_1_10= 0;
o->dir_rec_mtime= 0;
o->sort_files= 0; o->sort_files= 0;
o->replace_dir_mode= 0; o->replace_dir_mode= 0;
o->replace_file_mode= 0; o->replace_file_mode= 0;
@ -788,7 +782,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
o->file_mode= 0444; o->file_mode= 0444;
o->uid= 0; o->uid= 0;
o->gid= 0; o->gid= 0;
o->output_charset= NULL; o->output_charset= 0;
o->fifo_size= 4*1024*1024; o->fifo_size= 4*1024*1024;
o->effective_lba= -1; o->effective_lba= -1;
return(1); return(1);
@ -845,9 +839,6 @@ int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax)
o->allow_lowercase= !!(relax&32); o->allow_lowercase= !!(relax&32);
o->allow_full_ascii= !!(relax&64); o->allow_full_ascii= !!(relax&64);
o->joliet_longer_paths= !!(relax&128); o->joliet_longer_paths= !!(relax&128);
o->always_gmt= !!(relax & isoburn_igopt_always_gmt);
o->rrip_version_1_10= !!(relax & isoburn_igopt_rrip_version_1_10);
o->dir_rec_mtime= !!(relax & isoburn_igopt_dir_rec_mtime);
return(1); return(1);
} }

View File

@ -357,24 +357,6 @@ struct isoburn_imgen_opts {
*/ */
unsigned int joliet_longer_paths :1; unsigned int joliet_longer_paths :1;
/**
* Store timestamps as GMT rather than in local time.
*/
unsigned int always_gmt :1;
/**
* Write Rock Ridge info as of specification RRIP-1.10 rather than
* RRIP-1.12: signature "RRIP_1991A" rather than "IEEE_1282",
* field PX without file serial number
*/
unsigned int rrip_version_1_10 :1;
/**
* Store as ECMA-119 Directory Record timestamp the mtime
* of the source rather than the image creation time.
*/
unsigned int dir_rec_mtime :1;
unsigned int sort_files:1; unsigned int sort_files:1;
/**< If files should be sorted based on their weight. */ /**< If files should be sorted based on their weight. */

View File

@ -6,7 +6,7 @@
/* /*
libisofs related functions of libisoburn. libisofs related functions of libisoburn.
Copyright 2007 - 2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007 - 2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
*/ */

View File

@ -2,7 +2,7 @@
/* /*
API definition of libisoburn. API definition of libisoburn.
Copyright 2007-2009 Vreixo Formoso Lopes <metalpain2002@yahoo.es> Copyright 2007-2008 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
and Thomas Schmitt <scdbackup@gmx.net> and Thomas Schmitt <scdbackup@gmx.net>
*/ */
@ -200,14 +200,14 @@ void isoburn_version(int *major, int *minor, int *micro);
*/ */
#define isoburn_libisofs_req_major 0 #define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6 #define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 12 #define isoburn_libisofs_req_micro 6
/** The minimum version of libburn to be used with this version of libisoburn /** The minimum version of libburn to be used with this version of libisoburn
at compile time. at compile time.
@since 0.1.0 @since 0.1.0
*/ */
#define isoburn_libburn_req_major 0 #define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 6 #define isoburn_libburn_req_minor 5
#define isoburn_libburn_req_micro 0 #define isoburn_libburn_req_micro 0
@ -243,7 +243,7 @@ int isoburn_libburn_req(int *major, int *minor, int *micro);
@since 0.1.0 @since 0.1.0
*/ */
#define isoburn_header_version_major 0 #define isoburn_header_version_major 0
#define isoburn_header_version_minor 3 #define isoburn_header_version_minor 2
#define isoburn_header_version_micro 2 #define isoburn_header_version_micro 2
/** Note: /** Note:
Above version numbers are also recorded in configure.ac because libtool Above version numbers are also recorded in configure.ac because libtool
@ -336,8 +336,7 @@ int isoburn_set_msgs_submit(int (*msgs_submit)(void *handle, int error_code,
(cdrom/burner). Thus use with driveno 0 only. On failure (cdrom/burner). Thus use with driveno 0 only. On failure
the array has no valid elements at all. the array has no valid elements at all.
The returned array should be freed via burn_drive_info_free() The returned array should be freed via burn_drive_info_free()
when the drive is no longer needed. But before this is done when the drive is no longer needed.
one has to call isoburn_drive_release(drive_infos[0].drive).
@param adr The persistent address of the desired drive. @param adr The persistent address of the desired drive.
@param load 1 attempt to load the disc tray. 0 no attempt,rather failure. @param load 1 attempt to load the disc tray. 0 no attempt,rather failure.
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
@ -354,8 +353,7 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
(cdrom/burner). Thus use with driveno 0 only. On failure (cdrom/burner). Thus use with driveno 0 only. On failure
the array has no valid elements at all. the array has no valid elements at all.
The returned array should be freed via burn_drive_info_free() The returned array should be freed via burn_drive_info_free()
when the drive is no longer needed. But before this is done when the drive is no longer needed.
one has to call isoburn_drive_release(drive_infos[0].drive).
@param adr The persistent address of the desired drive. @param adr The persistent address of the desired drive.
@param flag bit0= attempt to load the disc tray. @param flag bit0= attempt to load the disc tray.
Else: failure if not loaded. Else: failure if not loaded.
@ -366,7 +364,6 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
table of content by scanning for ISO image headers. table of content by scanning for ISO image headers.
(depending on media type and drive this might (depending on media type and drive this might
help or it might make the resulting toc even worse) help or it might make the resulting toc even worse)
bit4= do not emulate table of content on overwriteable media
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
@ -377,7 +374,6 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
Wrapper for: burn_drive_grab() Wrapper for: burn_drive_grab()
@since 0.1.0 @since 0.1.0
@param drive The drive to grab. E.g. drive_infos[1].drive . @param drive The drive to grab. E.g. drive_infos[1].drive .
Call isoburn_drive_release(drive) when it it no longer needed.
@param load 1 attempt to load the disc tray. 0 no attempt, rather failure. @param load 1 attempt to load the disc tray. 0 no attempt, rather failure.
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
@ -453,14 +449,12 @@ void isoburn_disc_erase(struct burn_drive *drive, int fast);
3= adr_value itself is the lba to be used 3= adr_value itself is the lba to be used
4= start lba of last session with volume id 4= start lba of last session with volume id
given by adr_value given by adr_value
@param adr_value A string describing the value to be eventually used. @parm adr_value A string describing the value to be eventually used.
@param flag Bitfield for control purposes. @param flag Bitfield for control purposes.
bit0= @since 0.2.2 bit0= @since 0.2.2
with adr_mode 3: adr_value might be 16 blocks too high with adr_mode 3: adr_value might be 16 blocks too high
(e.g. -C stemming from growisofs). Probe for ISO head (e.g. -C stemming from growisofs). Probe for ISO head
at adr_value-16 and eventually adjust setting. at adr_value-16 and eventually adjust setting.
bit1= insist in seeing a disc object with at least one session
bit2= with adr_mode 4: use adr_value as regular expression
*/ */
int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value, int isoburn_set_msc1(struct burn_drive *d, int adr_mode, char *adr_value,
int flag); int flag);
@ -508,8 +502,7 @@ struct isoburn_toc_disc *isoburn_toc_drive_get_disc(struct burn_drive *d);
/** Tell the number of 2048 byte blocks covered by the table of content. /** Tell the number of 2048 byte blocks covered by the table of content.
This number includes the eventual gaps between sessions and tracks. Wrapper for: burn_disc_get_sectors()
So this call is not really a wrapper for burn_disc_get_sectors().
@since 0.1.6 @since 0.1.6
@param disc The master handle of the media @param disc The master handle of the media
@return number of blocks, <=0 indicates unknown or unreadable state @return number of blocks, <=0 indicates unknown or unreadable state
@ -560,7 +553,7 @@ struct isoburn_toc_track **isoburn_toc_session_get_tracks(
struct isoburn_toc_session *s, int *num); struct isoburn_toc_session *s, int *num);
/** Obtain a copy of the entry which describes a particular track. /** Obtain a copy of the entry which describes a particular itrack.
Wrapper for: burn_track_get_entry() Wrapper for: burn_track_get_entry()
@since 0.1.6 @since 0.1.6
@param s The track handle @param s The track handle
@ -605,35 +598,6 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
int *image_blocks, char *info, int flag); int *image_blocks, char *info, int flag);
/** Try to convert the given entity address into various entity addresses
which would describe it.
Note: Sessions and tracks are counted beginning with 1, not with 0.
@since 0.3.2
@param drive The drive where msc1 is to be set
@param adr_mode Determines how to interpret the input adr_value.
If adr_value shall represent a number then decimal ASCII
digits are expected.
0= start lba of last session in TOC, ignore adr_value
1= start lba of session number given by adr_value
2= start lba of track given number by adr_value
3= adr_value itself is the lba to be used
4= start lba of last session with volume id
given by adr_value
@param adr_value A string describing the value to be eventually used.
@param lba returns the block address of the entity, -1 means invalid
@param track returns the track number of the entity, -1 means invalid
@param session returns the session number of the entity, -1 means invalid
@param volid returns the volume id of the entity if it is a ISO session
@param flag Bitfield for control purposes.
bit2= with adr_mode 4: use adr_value as regular expression
@return <=0 error , 1 ok, ISO session, 2 ok, not an ISO session
*/
int isoburn_get_mount_params(struct burn_drive *d,
int adr_mode, char *adr_value,
int *lba, int *track, int *session,
char volid[33], int flag);
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
/* /*
@ -876,21 +840,6 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
bit7= joliet_longer_paths bit7= joliet_longer_paths
Allow paths in the Joliet tree to have more than Allow paths in the Joliet tree to have more than
240 characters. 240 characters.
bit8= always_gmt
Write timestamps as GMT although the specs prescribe local
time with eventual non-zero timezone offset. Negative
timezones (west of GMT) can trigger bugs in some operating
systems which typically appear in mounted ISO images as if
the timezone shift from GMT was applied twice
(e.g. in New York 22:36 becomes 17:36).
bit9= rrip_version_1_10
Write Rock Ridge info as of specification RRIP-1.10 rather
than RRIP-1.12: signature "RRIP_1991A" rather than
"IEEE_1282", field PX without file serial number.
bit10= dir_rec_mtime
Store as ECMA-119 Directory Record timestamp the mtime
of the source rather than the image creation time.
@return 1 success, <=0 failure @return 1 success, <=0 failure
*/ */
#define isoburn_igopt_omit_version_numbers 1 #define isoburn_igopt_omit_version_numbers 1
@ -901,9 +850,6 @@ int isoburn_igopt_get_extensions(struct isoburn_imgen_opts *o, int *ext);
#define isoburn_igopt_allow_lowercase 32 #define isoburn_igopt_allow_lowercase 32
#define isoburn_igopt_allow_full_ascii 64 #define isoburn_igopt_allow_full_ascii 64
#define isoburn_igopt_joliet_longer_paths 128 #define isoburn_igopt_joliet_longer_paths 128
#define isoburn_igopt_always_gmt 256
#define isoburn_igopt_rrip_version_1_10 512
#define isoburn_igopt_dir_rec_mtime 1024
int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax); int isoburn_igopt_set_relaxed(struct isoburn_imgen_opts *o, int relax);
int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax); int isoburn_igopt_get_relaxed(struct isoburn_imgen_opts *o, int *relax);
@ -1105,10 +1051,9 @@ off_t isoburn_disc_available_space(struct burn_drive *d,
/** Obtain the start block number of the most recent session on media. In /** Obtain the start block number of the most recent session on media. In
case of random access media this will normally be 0. Successfull return is case of random access media this will always be 0. Succesfull return is
not a guarantee that there is a ISO-9660 image at all. The call will fail, 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 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 isoburn_set_msc1() which can override the rule to load the most recent
session. session.
@ -1236,9 +1181,10 @@ int isoburn_prepare_blind_grow(struct burn_drive *d, struct burn_disc **disc,
/** /**
Revoke isoburn_prepare_*() instead of running isoburn_disc_write(). Revoke isoburn_prepare_new_image() or isoburn_prepare_disc() instead of
running isoburn_disc_write().
libisofs reserves resources and maybe already starts generating the libisofs reserves resources and maybe already starts generating the
image stream when one of above three calls is performed. It is mandatory to image stream when one of above two calls is performed. It is mandatory to
either run isoburn_disc_write() or to revoke the preparations by the either run isoburn_disc_write() or to revoke the preparations by the
call described here. call described here.
@since 0.1.0 @since 0.1.0
@ -1277,7 +1223,7 @@ void isoburn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
Hint: If only burn_write_opts and not burn_drive is known, then the drive Hint: If only burn_write_opts and not burn_drive is known, then the drive
can be obtained by burn_write_opts_get_drive(). can be obtained by burn_write_opts_get_drive().
@since 0.1.0 @since 0.1.0
@param d The drive to which the track with the fifo gets burned. @parm d The drive to which the track with the fifo gets burned.
@param size The total size of the fifo @param size The total size of the fifo
@param free_bytes The current free capacity of the fifo @param free_bytes The current free capacity of the fifo
@param status_text Returns a pointer to a constant text, see below @param status_text Returns a pointer to a constant text, see below

View File

@ -1,283 +0,0 @@
/*
aaip-os-freebsd.c
Arbitrary Attribute Interchange Protocol , system adapter for getting and
setting of ACLs and XFS-style Extended Attributes.
To be included by aaip_0_2.c
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/acl.h>
/* ------------------------------ Getters --------------------------------- */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag)
{
acl_t acl= NULL;
if(flag & (1 << 15)) {
if(*text != NULL)
acl_free(text);
*text= NULL;
return(1);
}
*text= NULL;
/* Note: no ACL_TYPE_DEFAULT in FreeBSD */
if(flag & 1)
return(0);
acl= acl_get_file(path, ACL_TYPE_ACCESS);
if(acl == NULL)
return(-1);
*text= acl_to_text(acl, NULL);
acl_free(acl);
if(*text == NULL)
return(-1);
return(1);
}
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode().
Note: There are no Extended Attributes in FreeBSD. So only ACL will be
obtained.
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACL (access and eventually default)
bit1= use numeric ACL qualifiers rather than names
bit2= do not encode attributes other than ACL
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
int ret, retry= 0;
char *list= NULL;
ssize_t list_size= 0, i, num_names, value_ret;
size_t a_acl_len= 0, d_acl_len= 0, acl_len= 0;
unsigned char *a_acl= NULL, *d_acl= NULL, *acl= NULL;
char *acl_text= NULL;
if(flag & (1 << 15)) { /* Free memory */
if(*names != NULL)
list= (*names)[0];
{ret= 1; goto ex;}
}
*num_attrs= 0;
*names= NULL;
*value_lengths= NULL;
*values= NULL;
if(flag & 1)
num_names++;
if(num_names == 0)
{ret= 1; goto ex;}
(*names)= calloc(num_names, sizeof(char *));
(*value_lengths)= calloc(num_names, sizeof(size_t));
(*values)= calloc(num_names, sizeof(char *));
if(*names == NULL || *value_lengths == NULL || *values == NULL)
{ret= -1; goto ex;}
for(i= *num_attrs; i < num_names; i++)
(*names)[i]= NULL;
for(i= 0; i < num_names; i++) {
(*values)[i]= NULL;
(*value_lengths)[i]= 0;
}
if(flag & 1) { /* Obtain ACL */
/* access-ACL */
ret= aaip_get_acl_text(path, &acl_text, 0);
if(ret <= 0)
goto ex;
ret= aaip_encode_acl(acl_text, &a_acl_len, &a_acl, flag & 2);
if(ret <= 0)
goto ex;
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
/* Note: There are no default-ACL in FreeBSD */
/* Set as attribute with empty name */;
(*names)[*num_attrs]= strdup("");
if((*names)[*num_attrs] == NULL)
{ret= -1; goto ex;}
(*values)[*num_attrs]= (char *) acl;
(*value_lengths)[*num_attrs]= acl_len;
(*num_attrs)++;
}
ret= 1;
ex:;
if(a_acl != NULL)
free(a_acl);
if(d_acl != NULL)
free(d_acl);
if(acl_text != NULL)
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
if(ret <= 0 || (flag & (1 << 15))) {
if(list != NULL)
free(list);
if(*names != NULL)
free(*names);
*names= NULL;
if(*value_lengths != NULL)
free(*value_lengths);
*value_lengths= NULL;
if(*values != NULL) {
for(i= 0; i < *num_attrs; i++)
free((*values)[i]);
free(*values);
}
if(acl != NULL)
free(acl);
*values= NULL;
*num_attrs= 0;
}
return(ret);
}
/* ------------------------------ Setters --------------------------------- */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag)
{
int ret;
acl_t acl= NULL;
acl= acl_from_text(text);
if(acl == NULL) {
ret= -1; goto ex;
}
/* Note: no ACL_TYPE_DEFAULT in FreeBSD */
if(flag & 1)
{ret= 0; goto ex;}
ret= acl_set_file(path, ACL_TYPE_ACCESS, acl);
if(ret == -1)
goto ex;
ret= 1;
ex:
if(acl != NULL)
acl_free(acl);
return(ret);
}
/* Bring the given attributes and/or ACLs into effect with the given file.
Note: There are no Extended Attributes in FreeBSD. So only ACL get set.
@param flag Bitfield for control purposes
bit0= decode and set ACLs
( bit1= first clear all existing attributes of the file )
( bit2= do not set attributes other than ACLs )
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
( -4 error with setting attribute )
( -5 error with deleting attribute )
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
int ret, has_default_acl= 0;
size_t i, consumed, acl_text_fill, list_size= 0;
char *acl_text= NULL, *list= NULL;
for(i= 0; i < num_attrs; i++) {
if(names[i] == NULL || values[i] == NULL)
continue;
if(names[i][0] == 0) { /* Decode ACLs */
/* access ACL */
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
has_default_acl= (ret == 2);
ret= aaip_set_acl_text(path, acl_text, 0);
if(ret <= 0)
{ret= -3; goto ex;}
if(has_default_acl) {
free(acl_text);
acl_text= NULL;
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
ret= aaip_set_acl_text(path, acl_text, 1);
if(ret <= 0)
{ret= -3; goto ex;}
}
}
}
ret= 1;
ex:;
if(acl_text != NULL)
free(acl_text);
if(list != NULL)
free(list);
return(ret);
}

View File

@ -1,371 +0,0 @@
/*
aaip-os-linux.c
Arbitrary Attribute Interchange Protocol , system adapter for getting and
setting of ACLs and XFS-style Extended Attributes.
To be included by aaip_0_2.c
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/acl.h>
#include <attr/xattr.h>
#define Aaip_acl_attrnamE "system.posix_acl_access"
/* ------------------------------ Getters --------------------------------- */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag)
{
acl_t acl= NULL;
if(flag & (1 << 15)) {
if(*text != NULL)
acl_free(text);
*text= NULL;
return(1);
}
*text= NULL;
acl= acl_get_file(path, (flag & 1) ? ACL_TYPE_DEFAULT : ACL_TYPE_ACCESS);
if(acl == NULL)
return(-1);
*text= acl_to_text(acl, NULL);
acl_free(acl);
if(*text == NULL)
return(-1);
return(1);
}
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode().
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACL (access and eventually default)
bit1= use numeric ACL qualifiers rather than names
bit2= do not obtain attributes other than ACL
bit3= do not ignore eventual local ACL attribute
(e.g. system.posix_acl_access)
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
int ret, retry= 0;
char *list= NULL;
ssize_t list_size= 0, i, num_names= 0, value_ret;
size_t a_acl_len= 0, d_acl_len= 0, acl_len= 0;
unsigned char *a_acl= NULL, *d_acl= NULL, *acl= NULL;
char *acl_text= NULL;
if(flag & (1 << 15)) { /* Free memory */
if(*names != NULL)
list= (*names)[0];
{ret= 1; goto ex;}
}
*num_attrs= 0;
*names= NULL;
*value_lengths= NULL;
*values= NULL;
/* Set up arrays */
if(!(flag & 4)) { /* Get xattr names */
list_size= listxattr(path, list, 0);
if(list_size == -1)
{ret= -1; goto ex;}
list= calloc(list_size, 1);
if(list == NULL)
{ret= -1; goto ex;}
list_size= listxattr(path, list, list_size);
if(list_size == -1)
{ret= -1; goto ex;}
for(i= 0; i < list_size; i+= strlen(list + i) + 1)
num_names++;
}
if(flag & 1)
num_names++;
if(num_names == 0)
{ret= 1; goto ex;}
(*names)= calloc(num_names, sizeof(char *));
(*value_lengths)= calloc(num_names, sizeof(size_t));
(*values)= calloc(num_names, sizeof(char *));
if(*names == NULL || *value_lengths == NULL || *values == NULL)
{ret= -1; goto ex;}
if(!(flag & 4))
for(i= 0; i < list_size && num_names > *num_attrs;
i+= strlen(list + i) + 1) {
if(!(flag & 8))
if(strcmp(list + i, Aaip_acl_attrnamE) == 0)
continue;
(*names)[(*num_attrs)++]= list + i;
}
for(i= *num_attrs; i < num_names; i++)
(*names)[i]= NULL;
for(i= 0; i < num_names; i++) {
(*values)[i]= NULL;
(*value_lengths)[i]= 0;
}
if(!(flag & 4)) { /* Get xattr values */
for(i= 0; i < *num_attrs; i++) {
if(!(flag & 8))
if(strcmp((*names)[i], Aaip_acl_attrnamE) == 0)
continue;
value_ret= getxattr(path, (*names)[i], NULL, 0);
if(value_ret == -1)
continue;
(*values)[i]= calloc(value_ret + 1, 1);
if((*values)[i] == NULL)
{ret= -1; goto ex;}
(*value_lengths)[i]= getxattr(path, (*names)[i], (*values)[i], value_ret);
if(value_ret == -1) { /* there could be a race condition */
if(retry++ > 5)
{ret= -1; goto ex;}
i--;
continue;
}
(*value_lengths)[i]= value_ret;
retry= 0;
}
}
if(flag & 1) { /* Obtain ACL */
/* access-ACL */
ret= aaip_get_acl_text(path, &acl_text, 0);
if(ret <= 0)
goto ex;
ret= aaip_encode_acl(acl_text, &a_acl_len, &a_acl, flag & 2);
if(ret <= 0)
goto ex;
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
/* eventually default-ACL */
ret= aaip_get_acl_text(path, &acl_text, 1);
if(ret > 0) {
/* encode and append to a_acl */;
ret= aaip_encode_acl(acl_text, &d_acl_len, &d_acl, (flag & 2) | 4);
if(ret <= 0)
goto ex;
acl= calloc(a_acl_len + d_acl_len + 1, 1);
if(acl == NULL)
{ret= -1; goto ex;}
if(a_acl_len)
memcpy(acl, a_acl, a_acl_len);
if(d_acl_len)
memcpy(acl + a_acl_len, d_acl, d_acl_len);
acl_len= a_acl_len + d_acl_len;
} else {
acl= a_acl;
a_acl= NULL;
acl_len= a_acl_len;
}
/* Set as attribute with empty name */;
(*names)[*num_attrs]= strdup("");
if((*names)[*num_attrs] == NULL)
{ret= -1; goto ex;}
(*values)[*num_attrs]= (char *) acl;
(*value_lengths)[*num_attrs]= acl_len;
(*num_attrs)++;
}
ret= 1;
ex:;
if(a_acl != NULL)
free(a_acl);
if(d_acl != NULL)
free(d_acl);
if(acl_text != NULL)
aaip_get_acl_text("", &acl_text, 1 << 15); /* free */
if(ret <= 0 || (flag & (1 << 15))) {
if(list != NULL)
free(list);
if(*names != NULL)
free(*names);
*names= NULL;
if(*value_lengths != NULL)
free(*value_lengths);
*value_lengths= NULL;
if(*values != NULL) {
for(i= 0; i < *num_attrs; i++)
free((*values)[i]);
free(*values);
}
if(acl != NULL)
free(acl);
*values= NULL;
*num_attrs= 0;
}
return(ret);
}
/* ------------------------------ Setters --------------------------------- */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag)
{
int ret;
acl_t acl= NULL;
acl= acl_from_text(text);
if(acl == NULL) {
ret= -1; goto ex;
}
ret= acl_set_file(path, (flag & 1) ? ACL_TYPE_DEFAULT : ACL_TYPE_ACCESS, acl);
if(ret == -1)
goto ex;
ret= 1;
ex:
if(acl != NULL)
acl_free(acl);
return(ret);
}
/* Bring the given attributes and/or ACLs into effect with the given file.
@param flag Bitfield for control purposes
bit0= decode and set ACLs
bit1= first clear all existing attributes of the file
bit2= do not set attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
-4 error with setting attribute
-5 error with deleting attributes
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
int ret, has_default_acl= 0;
size_t i, consumed, acl_text_fill, list_size= 0, acl_idx= 0;
char *acl_text= NULL, *list= NULL;
if(flag & 2) /* Delete all file attributes */
list_size= listxattr(path, list, 0);
if(list_size > 0) { /* Delete all file attributes */
list= calloc(list_size, 1);
if(list == NULL)
{ret= -5; goto ex;}
list_size= listxattr(path, list, list_size);
if(list_size == -1)
{ret= -5; goto ex;}
for(i= 0; i < list_size; i+= strlen(list + i) + 1) {
if(!(flag & 8))
if(strcmp(list + i, Aaip_acl_attrnamE) == 0)
continue;
ret= removexattr(path, list + i);
if(ret == -1)
{ret= -5; goto ex;}
}
free(list); list= NULL;
}
for(i= 0; i < num_attrs; i++) {
if(names[i] == NULL || values[i] == NULL)
continue;
if(names[i][0] == 0) { /* ACLs */
if(flag & 1)
acl_idx= i + 1;
continue;
}
/* Extended Attribute */
if((flag & 1) && !(flag & 8))
if(strcmp(names[i], Aaip_acl_attrnamE) == 0)
continue;
ret= setxattr(path, names[i], values[i], value_lengths[i], 0);
if(ret == -1)
{ret= -4; goto ex;}
}
/* Decode ACLs */
if(acl_idx == 0)
{ret= 1; goto ex;}
i= acl_idx - 1;
/* "access" ACL */
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) values[i], value_lengths[i],
&consumed, acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
has_default_acl= (ret == 2);
ret= aaip_set_acl_text(path, acl_text, 0);
if(ret <= 0)
{ret= -3; goto ex;}
/* "default" ACL */
if(has_default_acl) {
free(acl_text);
acl_text= NULL;
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
NULL, 0, &acl_text_fill, 1);
if(ret <= 0)
{ret= -2; goto ex;}
acl_text= calloc(acl_text_fill, 1);
if(acl_text == NULL)
{ret= -1; goto ex;}
ret= aaip_decode_acl((unsigned char *) (values[i] + consumed),
value_lengths[i] - consumed, &consumed,
acl_text, acl_text_fill, &acl_text_fill, 0);
if(ret <= 0)
{ret= -2; goto ex;}
ret= aaip_set_acl_text(path, acl_text, 1);
if(ret <= 0)
{ret= -3; goto ex;}
}
ret= 1;
ex:;
if(acl_text != NULL)
free(acl_text);
if(list != NULL)
free(list);
return(ret);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,381 +0,0 @@
/*
Arbitrary Attribute Interchange Protocol , AAIP version 0.2
Demonstration program for encoding and decoding EA and ACL.
See http://libburnia-project.org/wiki/AAIP
or doc/susp_aaip_0_2.txt
test/aaip_0.2.h - Public declarations
*/
#ifndef Aaip_h_is_includeD
#define Aaip_h_is_includeD yes
/* --------------------------------- Encoder ---------------------------- */
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
@param aa_name The 2 byte SUSP Signature Word of the fields
@param num_attrs Number of attributes
@param names Array of pointers to 0 terminated name strings
@param value_lengths Array of byte lengths for each value
@param values Array of pointers to the value bytes
@param result_len Number of bytes in the resulting SUSP field string
@param result *result will point to the start of the result string.
This is malloc() memory which needs to be freed when
no longer needed
@param flag Bitfield for control purposes
bit0= set CONTINUE bit of last AA field to 1
@return >0 is the number of SUSP fields generated,
0 means error
*/
unsigned int aaip_encode(char aa_name[2],
unsigned int num_attrs, char **names,
size_t *value_lengths, char **values,
size_t *result_len, unsigned char **result, int flag);
/* ------ ACL representation ------ */
/* Convert an ACL from long text form into the value of an Arbitrary
Attribute. According to AAIP 0.2 this value is to be stored together with
an empty name.
@param acl_text The ACL in long text form
@param result_len Number of bytes in the resulting value
@param result *result will point to the start of the result string.
This is malloc() memory which needs to be freed when
no longer needed
@param flag Bitfield for control purposes
bit0= count only
bit1= use numeric qualifiers rather than names
@return >0 means ok
0 means error
*/
int aaip_encode_acl(char *acl_text,
size_t *result_len, unsigned char **result, int flag);
/* ------ OS interface ------ */
/* Obtain the ACL of the given file in long text form.
@param path Path to the file
@param text Will hold the result. This is a managed object which
finally has to be freed by a call to this function
with bit15 of flag.
@param flag Bitfield for control purposes
bit0= obtain default ACL rather than access ACL
bit15= free text and return 1
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_get_acl_text(char *path, char **text, int flag);
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode(). The returned data objects finally have
to be freed by a call with flag bit 15.
@param path Path to the file
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit0= obtain ACLs (access and eventually default) via
system ACL API and encode
bit1= use numeric ACL qualifiers rather than names
bit2= do not obtain attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
bit15= free memory of names, value_lengths, values
@return >0 ok
<=0 error
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag);
/* --------------------------------- Decoder ---------------------------- */
/*
The AAIP decoder offers several levels of abstraction of which the
lower two avoid the use of dynamic memory. It provides a stateful decoding
context with a small buffer which delivers results to caller provided
memory locations.
The lowest level is the stream-like Component Level Interface. It allows
to decode very many very long attributes.
Next is the Pair Level Interface which delivers to fixly sized storage for
name and value. It allows to decode very many attributes.
The List Level Interface uses dynamic memory allocation to provide arrays
of names, values and value lengths. It is intended for moderately sized
attribute lists but may also be used as alternative to Pair Level.
*/
/* The AAIP decoder context.
*/
struct aaip_state;
/* Obtain the size in bytes of an aaip_state object.
*/
size_t aaip_sizeof_aaip_state(void);
/* Initialize a AAIP decoder context.
This has to be done before the first AA field of a node is processed.
The caller has to provide the storage of the struct aaip_state.
@param aaip The AAIP decoder context to be initialized
@param aa_name The Signature Word (advised is "AA")
@param flag Bitfield for control purposes
submit 0
@return <=0 error , >0 ok
*/
int aaip_init_aaip_state(struct aaip_state *aaip, char aa_name[2], int flag);
/* ------------------------- Component Level Interface ------------------- */
/*
Provides support for unlimited component size but demands the caller
to have a growing storage facility resp. to do own oversize handling.
This interface expects moderatly sized input pieces and will hand out
moderately sized result pieces. The number of transactions is virtually
unlimited.
*/
/* Submit small data chunk for decoding.
The return value will tell whether data are pending for being fetched.
@param aaip The AAIP decoder context
@param data Not more than 2048 bytes input for the decoder
@param num_data Number of bytes in data
0 inquires the buffer status avoiding replies <= 0
@param ready_bytes Number of decoded bytes ready for delivery
@param flag Bitfield for control purposes
@return -1= non-AA field detected
*ready_bytes gives number of consumed bytes in data
0= cannot accept data because buffer full
1= no component record complete, submit more data
2= component record complete, may be delivered
3= component complete, may be delivered
4= no component available, no more data expected, done
*/
int aaip_submit_data(struct aaip_state *aaip,
unsigned char *data, size_t num_data,
size_t *ready_bytes, int flag);
/* Fetch the available part of current component.
The return value will tell whether it belongs to name or to value and
whether that name or value is completed now.
@param aaip The AAIP decoder context
@param result Has to point to storage for the component data
@param result_size Gives the amount of provided result storage
@param num_result Will tell the number of fetched result bytes
@param flag Bitfield for control purposes
bit0= discard data rather than copying to result
@return -2 = insufficient result_size
-1 = no data ready for delivery
0 = result holds the final part of a name
1 = result holds an intermediate part of a name
2 = result holds the final part of a value
3 = result holds an intermediate part of a value
*/
int aaip_fetch_data(struct aaip_state *aaip,
char *result, size_t result_size, size_t *num_result,
int flag);
/* Skip the current component and eventually the following value component.
This has to be called if fetching of a component shall be aborted
but the next component resp. pair shall be fetchable again.
aaip_submit_data() will not indicate readiness for fetching until all
bytes of the skipped components are submitted. Those bytes get discarded.
@param aaip The AAIP decoder context
@param flag Bitfield for control purposes
bit0= do not skip value if current component is name
@return <=0 error , 1= now in skip state, 2= not in skip state
*/
int aaip_skip_component(struct aaip_state *aaip, int flag);
/* ------------------------- Pair Level Interface ------------------------ */
/*
Provides support for names and values of limited size. The limits are
given by the caller who has to provide the storage for name and value.
This interface expects moderatly sized input pieces.
The number of input transcations is virtually unlimited.
The number of pair transactions after aaip_init() should be limited
to 4 billion.
*/
/* Accept raw input data and collect a pair of name and value.
The return value will indicate whether the pair is complete, whether more
pairs are complete or whether more data are desired. No input data will be
accepted as long as complete pairs are pending. The end of the attribute
list will be indicated.
@param aaip The AAIP decoder context
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param name Buffer to build the name string
@param name_size Maximum number of bytes in name
@param name_fill Holds the current buffer fill of name
@param value Buffer to build the value string
@param value_size Maximum number of bytes in value
@param value_fill Holds the current buffer fill of value
@param flag Bitfield for control purposes - submit 0 for now
@return <0 error
0 data not accepted, first fetch pending pairs with num_data == 0
1 name and value are not valid yet, submit more data
2 name and value are valid, submit more data
3 name and value are valid, pairs pending, fetch with num_data == 0
4 name and value are valid, no more data expected
5 name and value are not valid, no more data expected
*/
int aaip_decode_pair(struct aaip_state *aaip,
unsigned char *data, size_t num_data, size_t *consumed,
char *name, size_t name_size, size_t *name_fill,
char *value, size_t value_size, size_t *value_fill,
int flag);
/* Inquire the number of pairs which were skipped because being oversized.
@param aaip The AAIP decoder context
@param flag Bitfield for control purposes - submit 0 for now
@return The number of pairs skipped since aaip_init()
*/
unsigned int aaip_get_pairs_skipped(struct aaip_state *aaip, int flag);
/* ------------------------- List Level Interface ------------------------ */
/*
Provides support for names and values of limited size. The limits are
given for total memory consumption and for number of attributes.
Iterated decoding is supported as long as no single attribute exceeds
the memory limit.
*/
/* Accept raw input data and collect arrays of name pointers, value lengths
and value pointers. A handle object will emerge which finally has to be
be freed by a call with bit 15.
@param handle The decoding context.
It will be created by this call with flag bit 0 or if
*handle == NULL. This handle has to be the same as long
as decoding goes on and finally has to be freed by a
call with bit15.
@param aa_name The Signature Word (advised is "AA")
@param memory_limit Maximum number of bytes to allocate
@param num_attr_limit Maximum number of name-value pairs to allocate
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param flag Bitfield for control purposes
bit0= this is the first call for a file object
bit15= end decoding :
Free handle and its intermediate list memory.
@return <=0 error
1 not complete yet, submit more data
2 arrays are complete, call aaip_get_decoded_attrs()
3 limit exceeded, not complete yet, call with bit15 and give up
4 limit exceeded, call aaip_get_decoded_attrs() and try again
*/
int aaip_decode_attrs(struct aaip_state **handle, char aa_name[2],
size_t memory_limit, size_t num_attr_limit,
unsigned char *data, size_t num_data, size_t *consumed,
int flag);
/* Obtain the resulting attributes when aaip_decode_attrs() indicates to
be done or to have the maximum possible amount of result ready.
The returned data objects get detached from handle making it ready for
the next round of decoding with possibly a different input source. The
returned data objects finally have to be freed by a call with flag bit 15.
@param handle The decoding context created by aaip_decode_attrs()
@param num_attrs Will return the number of name-value pairs
@param names Will return an array of pointers to 0-terminated names
@param value_lengths Will return an arry with the lenghts of values
@param values Will return an array of pointers to 8-bit values
@param flag Bitfield for control purposes
bit15= free memory of names, value_lengths, values
*/
int aaip_get_decoded_attrs(struct aaip_state **handle, size_t *num_attrs,
char ***names, size_t **value_lengths, char ***values,
int flag);
/* ------ ACL representation ------ */
/* Convert an AAIP 0.2 ACL attribute value into the long text form of ACL.
@param data The raw data to decode
@param num_data Number of data bytes provided
@param consumed Returns the number of consumed data bytes
@param acl_text Will be filled with ACL long text form
@param acl_text_size Maximum number of bytes to be written to acl_text
@param acl_text_fill Will return the number of bytes in acl_text
@param flag Bitfield for control purposes
bit0= count only, do not really produce bytes:
acl_text will not be touched,
acl_text_size will be ignored,
*acl_text_fill will return the counted number
bit1= expected is a default ACL (see return value 2)
@return 1 success
2 success, begin of default/access ACL encountered,
submit data + *consumed for access/default ACL
-1 error with reading of qualifier
-2 error with writing of ACL text line
-3 version mismatch
-4 unknown tag type encountered
*/
int aaip_decode_acl(unsigned char *data, size_t num_data, size_t *consumed,
char *acl_text, size_t acl_text_size,
size_t *acl_text_fill, int flag);
/* ------ OS interface ------ */
/* Set the ACL of the given file to a given list in long text form.
@param path Path to the file
@param text The input text (0 terminated, ACL long text form)
@param flag Bitfield for control purposes
bit0= set default ACL rather than access ACL
@return > 0 ok
-1 failure of system ACL service (see errno)
*/
int aaip_set_acl_text(char *path, char *text, int flag);
/* Bring the given attributes and/or ACLs into effect with the given file.
@param path Path to the file
@param num_attrs Number of attributes
@param names Array of pointers to 0 terminated name strings
@param value_lengths Array of byte lengths for each attribute payload
@param values Array of pointers to the attribute payload bytes
@param flag Bitfield for control purposes
bit0= decode and set ACLs
bit1= first clear all existing attributes of the file
bit2= do not set attributes other than ACLs
bit3= do not ignore eventual ACL attribute
(e.g. system.posix_acl_access)
@return 1 success
-1 error memory allocation
-2 error with decoding of ACL
-3 error with setting ACL
-4 error with setting attribute
-5 error with deleting attributes
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag);
#endif /* ! Aaip_h_is_includeD */

View File

@ -1,443 +0,0 @@
/*
Arbitrary Attribute Interchange Protocol , AAIP version 0.2
Demonstration program for encoding and decoding EA and ACL.
See http://libburnia-project.org/wiki/AAIP
test/aaip_0_2_test.c - Main program for test binary
Compile:
cc -g -Wall -o test/aaip test/aaip_0_2.c test/aaip_0_2_test.c -lacl
Usage: ./aaip name value
Long parameters ./aaip -name"x100" -value"x100"
>>> ACLs
*/
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/acl.h>
#include "aaip_0_2.h"
#define Aaip_test_name_sizE 1024
#define Aaip_test_value_sizE 1024
static int print_result(unsigned char *result, size_t result_len, int flag)
{
int i;
printf(
" - - - - - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9\n");
printf("\n");
printf("%4u : ", 0);
for(i= 0; i < result_len; i++) {
if(result[i] >= 32 && result[i] <= 126)
printf("'%c' ", result[i]);
else
printf("%3u ", (unsigned int) ((unsigned char *) result)[i]);
if((i % 10) == 9)
printf("\n%4u : ", (unsigned int) (i + 1));
}
printf("\n\n");
printf(
" - - - - - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9\n");
printf("\n");
return(1);
}
static int print_attrs(size_t num_attrs, char **names, size_t *value_lengths,
char **values, int flag)
{
size_t i, j;
for(i= 0; i < num_attrs; i++) {
printf("name='");
for(j= 0; names[i][j] != 0; j++) {
if(names[i][j] >= 32 && names[i][j] <= 126 &&
names[i][j] != '\\' && names[i][j] != '\'')
printf("%c", names[i][j]);
else
printf("\\%o", (unsigned int) ((unsigned char **) names)[i][j]);
}
printf("' (%d)\n", (int) j);
printf("value='");
for(j= 0; j < value_lengths[i]; j++) {
if(values[i][j] >= 32 && values[i][j] <= 126 &&
values[i][j] != '\\' && values[i][j] != '\'')
printf("%c", values[i][j]);
else
printf("\\%3.3o", (unsigned int) ((unsigned char **) values)[i][j]);
}
printf("' (%d)\n\n", (int) j);
}
return(1);
}
static int do_touch(char *path, int flag)
{
FILE *fp;
fp= fopen(path, "a");
if(fp == NULL) {
fprintf(stderr, "fopen(\"%s\") failed: %d %s\n",
path, errno, errno != 0 ? strerror(errno) : "");
return(0);
}
fclose(fp);
return(1);
}
static int decode_acl(unsigned char *result, size_t result_len,
char *out_path, int flag)
{
int ret;
size_t consumed, text_fill;
char *text= NULL;
ret= aaip_decode_acl(result, result_len, &consumed, NULL, 0, &text_fill, 1);
if(ret <= 0) {
fprintf(stderr, "aaip_decode_acl(,1) failed: ret= %d\n", ret);
ret= 0; goto ex;
}
text= calloc(text_fill, 1);
ret= aaip_decode_acl(result, result_len, &consumed, text, text_fill,
&text_fill, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_decode_acl(,0) failed: ret= %d\n", ret);
ret= 0; goto ex;
}
printf("--- ret= %d , text=\n%s--- end of text\n\n", ret, text);
if(out_path == NULL)
{ret= 1; goto ex;}
ret= do_touch(out_path, 0);
if(ret <= 0)
goto ex;
ret= aaip_set_acl_text(out_path, text, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_set_acl_text() failed");
if(ret == -1)
fprintf(stderr, ": %d %s\n", errno, errno != 0 ? strerror(errno) : "");
else
fprintf(stderr, "\n");
ret= 0; goto ex;
}
ret= 1;
ex:
if(text != NULL)
free(text);
return(ret);
}
static int test_acl(char *in_path, char *out_path, int flag)
{
int ret;
char *acl_text= NULL;
unsigned char *result= NULL;
size_t result_len;
ret= aaip_get_acl_text(in_path, &acl_text, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_get_acl_text() failed");
if(ret == -1)
fprintf(stderr, ": %d %s\n", errno, errno != 0 ? strerror(errno) : "");
else
fprintf(stderr, "\n");
ret= 6; goto ex;
}
printf("--- ACL:\n%s--- end of ACL\n\n", acl_text);
ret= aaip_encode_acl(acl_text, &result_len, &result, 0);
if(ret <= 0) {
fprintf(stderr, "aaip_encode_acl(text) failed: ret= %d\n", ret);
ret= 7; goto ex;
}
print_result(result, result_len, 0);
ret= decode_acl(result, result_len, out_path, 0);
if(ret <= 0)
{ret= 8; goto ex;}
free(result); result= NULL;
ret= aaip_encode_acl(acl_text, &result_len, &result, 2);
if(ret <= 0) {
fprintf(stderr, "aaip_encode_acl(num) failed: ret= %d\n", ret);
ret= 9; goto ex;
}
print_result(result, result_len, 0);
ret= decode_acl(result, result_len, out_path, 0);
if(ret <= 0)
{ret= 10; goto ex;}
ret= 0;
ex:;
aaip_get_acl_text("", &acl_text, 1 << 15);
if(result != NULL)
free(result);
return(ret);
}
int synthetic_pairs(char *prog, int argc, char **argv, int flag)
{
int ret, l, mult= 0, k;
size_t result_len, i;
unsigned char *result= NULL;
char **names= NULL, **values= NULL, *cpt, **param;
size_t *value_lengths= NULL;
struct aaip_state *aaip;
size_t consumed= 0;
char name[Aaip_test_name_sizE + 1];
size_t name_fill;
char value[Aaip_test_value_sizE + 1];
size_t value_fill;
size_t todo;
int submit_data, is_done;
unsigned char *rpt;
unsigned int skipped, was_skipped= 0;
aaip= (struct aaip_state *) calloc(aaip_sizeof_aaip_state(), 1);
names= calloc(sizeof(char *), argc / 2);
values= calloc(sizeof(char *), argc / 2);
value_lengths= calloc(sizeof(size_t), argc / 2);
for(i= 0; i < argc; i++) {
if(i % 2)
param= values + i / 2;
else
param= names + i / 2;
(*param)= argv[i];
if(argv[i][0] == '-') {
cpt= strchr(argv[i], 'x');
if(cpt != NULL) {
l= cpt - argv[i] - 1;
if(l > 0)
sscanf(cpt + 1, "%d", &mult);
if(l > 0 && mult > 0) {
(*param)= calloc(1, l * mult + 1);
if((*param) != NULL) {
for(k= 0; k < mult; k++)
memcpy((*param) + k * l, argv[i] + 1, l);
(*param)[mult * l]= 0;
} else
(*param)= argv[i];
}
}
}
if(i % 2)
value_lengths[i / 2]= strlen(values[i / 2]);
}
ret= aaip_encode("AA", (unsigned int) (argc / 2), names,
value_lengths, values,
&result_len, &result, 0);
if(ret <= 0) {
fprintf(stderr, "%s : aaip_encode failed with ret= %d\n", prog, ret);
return(2);
}
print_result(result, result_len, 0);
aaip_init_aaip_state(aaip, "AA", 0);
rpt= result;
submit_data= 1;
is_done= 0;
while(!is_done) {
if(submit_data) {
todo= result_len - (rpt - result);
if(todo > 2048)
todo= 2048;
if(todo == 0) {
fprintf(stderr, "%s : Out of data while still prompted to submit\n",
prog);
return(5);
}
} else
todo= 0;
ret= aaip_decode_pair(aaip, rpt, todo, &consumed,
name, Aaip_test_name_sizE, &name_fill,
value, Aaip_test_value_sizE, &value_fill, 0);
skipped= aaip_get_pairs_skipped(aaip, 0);
if(skipped > was_skipped) {
printf("- skipped %d pair%s -\n\n", skipped - was_skipped,
skipped - was_skipped > 1 ? "s" : "");
was_skipped= skipped;
}
if(ret < 0) {
fprintf(stderr, "%s : aaip_decode_pair failed with ret= %d\n", prog, ret);
return(3);
}
rpt+= todo;
if(ret == 0) {
rpt-= todo;
submit_data= 0;
continue;
} else if(ret == 1) {
submit_data= 1;
continue;
} else if(ret == 2) {
submit_data= 1;
} else if(ret == 3) {
submit_data= 0;
} else if(ret == 4) {
is_done= 1;
} else if(ret == 5) {
is_done= 1;
break;
} else {
fprintf(stderr, "%s : Unknown return %d from aaip_decode_pair()\n",
prog, ret);
return(4);
}
name[name_fill]= 0;
value[value_fill]= 0;
if((name_fill < 1000 && value_fill < 1000)) {
printf("name = '%s' (%lu)\n", name, (unsigned long) name_fill);
printf("value= '%s' (%lu)\n", value, (unsigned long) value_fill);
} else {
printf("name = (%lu)\n", (unsigned long) name_fill);
printf("value= (%lu)\n", (unsigned long) value_fill);
}
printf("\n");
}
return(0);
}
/*
@param flag bit0= use numeric qualifiers
*/
static int copy_all(char *in_path, char *out_path, int flag)
{
int ret;
struct aaip_state *aaip= NULL;
size_t in_num_attrs, *in_value_lengths= NULL;
char **in_names= NULL, **in_values= NULL;
int is_done= 0, first_round= 1;
unsigned char *result= NULL, *rpt;
size_t result_len, todo, consumed;
size_t out_num_attrs, *out_value_lengths= NULL;
char **out_names= NULL, **out_values= NULL;
ret= aaip_get_attr_list(in_path, &in_num_attrs, &in_names, &in_value_lengths,
&in_values, 1 | ((flag & 1) << 1));
if(ret <= 0)
{ret= 11; goto ex;}
print_attrs(in_num_attrs, in_names, in_value_lengths, in_values, 0);
ret= aaip_encode("AA", (unsigned int) in_num_attrs, in_names,
in_value_lengths, in_values, &result_len, &result, 0);
if(ret == 0)
{ret= 12; goto ex;}
if(result_len <= 0) {
fprintf(stderr, "No result\n");
ret= 13; goto ex;
}
print_result(result, result_len, 0);
rpt= result;
while(!is_done) {
todo= result_len - (rpt - result);
if(todo > 2048)
todo= 2048;
if(todo == 0) {
fprintf(stderr, "Out of data while still prompted to submit\n");
ret= 14; goto ex;
}
/* Allow 1 million bytes of memory consumption, 100,000 attributes */
ret= aaip_decode_attrs(&aaip, "AA", (size_t) 1000000, (size_t) 100000,
rpt, todo, &consumed, first_round);
rpt+= consumed;
first_round= 0;
if(ret == 1)
continue;
if(ret == 2)
break;
fprintf(stderr, "aaip_decode_attrs() returns %d\n", ret);
ret= 15; goto ex;
}
if(rpt - result != result_len) {
fprintf(stderr, "aaip_decode_attrs() returns 2 but %d bytes are left\n",
(int) (result_len - (rpt - result)));
ret= 16; goto ex;
}
ret= aaip_get_decoded_attrs(&aaip, &out_num_attrs, &out_names,
&out_value_lengths, &out_values, 0);
if(ret != 1) {
fprintf(stderr, "aaip_get_decoded_attrs() returns %d\n", ret);
ret= 17; goto ex;
}
print_attrs(out_num_attrs, out_names, out_value_lengths, out_values, 0);
ret= do_touch(out_path, 0);
if(ret <= 0)
{ret= 19; goto ex;}
ret= aaip_set_attr_list(out_path, out_num_attrs, out_names, out_value_lengths,
out_values, 1 | 2);
if(ret != 1) {
fprintf(stderr, "aaip_set_attr_list() returns %d\n", ret);
ret= 18; goto ex;
}
ret= 0;
ex:;
if(in_names != NULL || in_value_lengths != NULL || in_values != NULL)
aaip_get_attr_list(in_path, &in_num_attrs, &in_names, &in_value_lengths,
&in_values, 1 << 15);
if(out_names != NULL || out_value_lengths != NULL || out_values != NULL)
aaip_get_decoded_attrs(&aaip, &out_num_attrs, &out_names,
&out_value_lengths, &out_values, 15);
aaip_decode_attrs(&aaip, "AA", (size_t) 0, (size_t) 0, NULL, (size_t) 0,
&consumed, 1 << 15);
return(ret);
}
int main(int argc, char **argv)
{
int ret;
if(argc < 2) {
usage:
fprintf(stderr, "usage : %s options\n", argv[0]);
fprintf(stderr, " -pairs [-]name[xNNN] [-]value[xNNN] [...]\n");
fprintf(stderr, " -copy_acl source_path target_path\n");
fprintf(stderr, " -copy source_path target_path\n");
exit(1);
}
if(strcmp(argv[1], "-pairs") == 0) {
if(argc < 4 || (argc % 2) != 0)
goto usage;
ret= synthetic_pairs(argv[0], argc - 2, argv + 2, 0);
} else if(strcmp(argv[1], "-copy_acl") == 0) {
if(argc != 4)
goto usage;
ret= test_acl(argv[2], argv[3], 0);
} else if(strcmp(argv[1], "-copy") == 0) {
if(argc != 4)
goto usage;
ret= copy_all(argv[2], argv[3], 1);
} else
goto usage;
exit(ret);
}

View File

@ -4,8 +4,8 @@
xorriso. By Thomas Schmitt <scdbackup@gmx.net> xorriso. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via: Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/xorriso_eng.html http://scdbackup.sourceforge.net/xorriso_eng.html
http://scdbackup.sourceforge.net/xorriso-0.3.2.pl00.tar.gz http://scdbackup.sourceforge.net/xorriso-0.2.2.pl00.tar.gz
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2. Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -16,8 +16,7 @@ information of existing ISO images and it writes the session results to
optical media or to filesystem objects. optical media or to filesystem objects.
Vice versa xorriso is able to restore file objects from ISO 9660 filesystems. Vice versa xorriso is able to restore file objects from ISO 9660 filesystems.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions Currently it is only supported on Linux with kernels >= 2.4.
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
A special property of xorriso is that it needs neither an external ISO 9660 A special property of xorriso is that it needs neither an external ISO 9660
formatter program nor an external burn program for CD or DVD but rather formatter program nor an external burn program for CD or DVD but rather
@ -37,10 +36,10 @@ The tarball contains anything that is needed except libc and libpthread.
libreadline and the readline-dev headers will make dialog mode more convenient, libreadline and the readline-dev headers will make dialog mode more convenient,
but are not mandatory. but are not mandatory.
Obtain xorriso-0.3.2.pl00.tar.gz, take it to a directory of your choice and do: Obtain xorriso-0.2.2.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf xorriso-0.3.2.pl00.tar.gz tar xzf xorriso-0.2.2.pl00.tar.gz
cd xorriso-0.3.2 cd xorriso-0.2.2
Within that directory execute: Within that directory execute:
@ -54,8 +53,8 @@ which you may strip to reduce it in size
strip ./xorriso/xorriso strip ./xorriso/xorriso
You may copy or move it to a directory where it can be found by the shell, You may copy or move it to a directory where it can be found by the shell,
or you may execute xorriso at the place where it was built, you may execute xorriso at the place where it was built, or you may execute
or you may execute as superuser: as superuser:
make install make install
For general concepts, options and usage examples see For general concepts, options and usage examples see
@ -75,15 +74,6 @@ The installation creates several alias links pointing to the xorriso binary:
xorrecord starts xorriso with -as cdrecord emulation already enabled xorrecord starts xorriso with -as cdrecord emulation already enabled
osirrox starts with -osirrox image-to-disk copying 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.
If you want xorriso to report a "Build timestamp" with its option -version:
make buildstamped
Drives and Disk File Objects Drives and Disk File Objects
@ -123,13 +113,9 @@ Better try to unmount an eventually mounted media before a write run.
Besides true optical drives, xorriso can also address disk files as input or Besides true optical drives, xorriso can also address disk files as input or
output drives. By default paths to files under /dev are accepted only if the output drives. The addresses of the disk files have to be preceded by "stdio:".
device represents a real optical drive. Other device files may be addressed
by prepending "stdio:" to the path.
Like: Like:
xorriso -dev stdio:/dev/sdb ...more arguments... xorriso -dev stdio:/tmp/pseudo_drive ...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.
Testing Testing
@ -161,26 +147,6 @@ and vice versa:
| less | 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 libisoburn
xorriso is based on libisofs which does ISO 9600 filesystem aspects and on xorriso is based on libisofs which does ISO 9600 filesystem aspects and on
@ -200,9 +166,9 @@ and a matching dynamically linked xorriso binary.
This binary is leaner but depends on properly installed libraries of suitable This binary is leaner but depends on properly installed libraries of suitable
revision. revision.
Dynamic library and compile time header requirements for libisoburn-0.3.2 : Dynamic library and compile time header requirements for libisoburn-0.2.2 :
- libburn.so.4 , version libburn-0.6.0 or higher - libburn.so.4 , version libburn-0.5.0 or higher
- libisofs.so.6 , version libisofs-0.6.12 or higher - libisofs.so.6 , version libisofs-0.6.6 or higher
libisoburn and xorriso will not start with libraries which are older than their libisoburn and xorriso will not start with libraries which are older than their
headers seen at compile time. So compile in the oldest possible installation headers seen at compile time. So compile in the oldest possible installation
setup unless you have reason to enforce a newer bug fix level. setup unless you have reason to enforce a newer bug fix level.
@ -231,7 +197,7 @@ libburnia-project.org
By Mario Danic <mario.danic@gmail.com>, By Mario Danic <mario.danic@gmail.com>,
Vreixo Formoso <metalpain2002@yahoo.es> Vreixo Formoso <metalpain2002@yahoo.es>
Thomas Schmitt <scdbackup@gmx.net> Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2009 Mario Danic, Vreixo Formoso, Thomas Schmitt. Copyright (C) 2006-2008 Mario Danic, Vreixo Formoso, Thomas Schmitt.
libburnia-project.org is inspired by and in other components still containing libburnia-project.org is inspired by and in other components still containing
parts of old parts of old

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# compile_xorriso.sh # compile_xorriso.sh
# Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL # Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
# #
# Not intended for general use in production installations ! # Not intended for general use in production installations !
# Rather use: ./bootstrap ; ./configure ; make # Rather use: ./bootstrap ; ./configure ; make
@ -22,8 +22,6 @@ do_strip=0
static_opts= static_opts=
warn_opts="-Wall" warn_opts="-Wall"
nglibisofs=1 nglibisofs=1
def_libreadline="-DXorriso_with_readlinE"
link_libreadline="-lreadline"
for i in "$@" for i in "$@"
do do
@ -37,16 +35,11 @@ do
elif test "$i" = "-g" elif test "$i" = "-g"
then then
debug_opts="-g -O0" debug_opts="-g -O0"
elif test "$i" = "-no_libreadline"
then
def_libreadline=""
link_libreadline=""
elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h" elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
then then
echo \ echo \
"$xorr/compile_xorriso.sh : to be executed above top level directories" "$xorr/compile_xorriso.sh : to be executed above top level directories"
echo "Options:" echo "Options:"
echo " -no_libreadline do not compile for and link with libreadline."
echo " -do_diet produce capability reduced lean version." echo " -do_diet produce capability reduced lean version."
echo " -do_strip apply program strip to compiled programs." echo " -do_strip apply program strip to compiled programs."
echo " -g produce debuggable programm." echo " -g produce debuggable programm."
@ -82,23 +75,21 @@ libisofs="$libisofs $isofs"/tree.o
libisofs="$libisofs $isofs"/util.o libisofs="$libisofs $isofs"/util.o
libisofs="$libisofs $isofs"/util_htable.o libisofs="$libisofs $isofs"/util_htable.o
libisofs="$libisofs $isofs"/util_rbtree.o libisofs="$libisofs $isofs"/util_rbtree.o
libisofs="$libisofs $isofs"/system_area.o
libisofs="$libisofs $isofs"/make_isohybrid_mbr.o
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)" echo "Version timestamp : $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"
echo "Build timestamp : $timestamp"
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_buildstamp.h
echo "Build timestamp : $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"
echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts" echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts"
cc -I. -DXorriso_with_maiN $def_libreadline \ cc -I. -DXorriso_with_maiN -DXorriso_with_regeX -DXorriso_with_readlinE \
$warn_opts \ $warn_opts \
$static_opts \ $static_opts \
$debug_opts \ $debug_opts \
$def_opts \ $def_opts \
$largefile_opts \ $largefile_opts \
\ \
-DXorriso_build_timestamP='"'"$timestamp"'"' \
\
-o "$xorr"/xorriso \ -o "$xorr"/xorriso \
\ \
"$xorr"/xorriso.c \ "$xorr"/xorriso.c \
@ -139,7 +130,7 @@ cc -I. -DXorriso_with_maiN $def_libreadline \
\ \
$libisofs \ $libisofs \
\ \
$link_libreadline \ -lreadline \
\ \
-lpthread -lpthread

View File

@ -1,4 +1,4 @@
AC_INIT([xorriso], [0.3.2], [http://libburnia-project.org]) AC_INIT([xorriso], [0.2.2], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@ -8,7 +8,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects]) AM_INIT_AUTOMAKE([subdir-objects])
BURN_MAJOR_VERSION=0 BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=6 BURN_MINOR_VERSION=5
BURN_MICRO_VERSION=1 BURN_MICRO_VERSION=1
AC_SUBST(BURN_MAJOR_VERSION) AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION) AC_SUBST(BURN_MINOR_VERSION)
@ -16,7 +16,7 @@ AC_SUBST(BURN_MICRO_VERSION)
LIBISOFS_MAJOR_VERSION=0 LIBISOFS_MAJOR_VERSION=0
LIBISOFS_MINOR_VERSION=6 LIBISOFS_MINOR_VERSION=6
LIBISOFS_MICRO_VERSION=12 LIBISOFS_MICRO_VERSION=6
AC_SUBST(LIBISOFS_MAJOR_VERSION) AC_SUBST(LIBISOFS_MAJOR_VERSION)
AC_SUBST(LIBISOFS_MINOR_VERSION) AC_SUBST(LIBISOFS_MINOR_VERSION)
AC_SUBST(LIBISOFS_MICRO_VERSION) AC_SUBST(LIBISOFS_MICRO_VERSION)
@ -95,20 +95,14 @@ else
CFLAGS="$CFLAGS -DDEBUG" CFLAGS="$CFLAGS -DDEBUG"
fi 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 Check whether there is readline-devel and readline-runtime.
dnl If not, erase this macro which would enable use of readline(),add_history() dnl If not, erase this macro which would enable use of readline(),add_history()
READLINE_DEF="-DXorriso_with_readlinE" READLINE_DEF="-DXorriso_with_readlinE"
dnl The empty yes case obviously causes -lreadline to be linked dnl The empty yes case obviously causes -lreadline to be linked
AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= ) AC_CHECK_HEADER(readline/readline.h, AC_CHECK_LIB(readline, readline, , READLINE_DEF= ), READLINE_DEF= )
dnl The X= in the yes case prevents that -lreadline gets linked twice dnl The X= in the yes case prevents that -lreadline gets linked twice
AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= ) AC_CHECK_HEADER(readline/history.h, AC_CHECK_LIB(readline, add_history, X= , READLINE_DEF= ), READLINE_DEF= )
else
READLINE_DEF=
fi
AC_SUBST(READLINE_DEF) AC_SUBST(READLINE_DEF)

View File

@ -51,7 +51,7 @@ then
-e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \ -e 's/<b>Libburn drives:<\/b>/\&nbsp;<BR><b>Libburn drives:<\/b>/' \
-e 's/^-dev /\&nbsp;\&nbsp;-dev /' \ -e 's/^-dev /\&nbsp;\&nbsp;-dev /' \
-e 's/^-devices /\&nbsp;\&nbsp;-devices /' \ -e 's/^-devices /\&nbsp;\&nbsp;-devices /' \
-e 's/<b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open, and El Torito:<\/b>/' \ -e 's/<b>Rock Ridge, POSIX, X\/Open:<\/b>/\&nbsp;<BR><b>Rock Ridge, POSIX, X\/Open:<\/b>/' \
-e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \ -e 's/<b>Command processing:<\/b>/\&nbsp;<BR><b>Command processing:<\/b>/' \
-e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><b>Dialog, Readline, Result pager:<\/b>/' \ -e 's/<b>Dialog, Readline, Result pager:<\/b>/\&nbsp;<BR><b>Dialog, Readline, Result pager:<\/b>/' \
-e 's/<b>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Aquiring source and target drive:<\/b>/\&nbsp;<BR><b>Aquiring source and target drive:<\/b><BR>\&nbsp;<BR>/' \
@ -65,14 +65,11 @@ then
-e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><b>Settings for result writing:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Settings for result writing:<\/b>/\&nbsp;<BR><b>Settings for result writing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \ -e 's/^706k = 706kB/\&nbsp;\&nbsp;706k = 706kB/' \
-e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \ -e 's/^5540k = 5540kB/\&nbsp;\&nbsp;5540k = 5540kB/' \
-e 's/<b>Character sets:<\/b>/\&nbsp;<BR><b>Character sets:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Exception processing:<\/b>/\&nbsp;<BR><b>Exception processing:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>El Torito bootable ISO images:<\/b>/\&nbsp;<BR><b>El Torito bootable ISO images:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Dialog mode control:<\/b>/\&nbsp;<BR><b>Dialog mode control:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Drive and media related inquiry actions:<\/b>/\&nbsp;<BR><b>Drive and media related inquiry actions:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \ -e 's/<b>Navigation in ISO image/\&nbsp;<BR><b>Navigation in ISO image/' \
-e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \ -e 's/^filesystem:<\/b>/filesystem:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Evaluation of readability and recovery:<\/b>/\&nbsp;<BR><b>Evaluation of readability and recovery:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>osirrox restore options:<\/b>/\&nbsp;<BR><b>osirrox restore options:<\/b><BR>\&nbsp;<BR>/' \
-e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \ -e 's/<b>Command compatibility emulations:<\/b>/\&nbsp;<BR><b>Command compatibility emulations:<\/b><BR>\&nbsp;<BR>/' \
-e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \ -e 's/^<p><b>&minus;as</<p>\&nbsp;<BR><b>\&minus;as</' \

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# make_xorriso_standalone.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 ! # Not intended for general use in production installations !
# #
@ -25,7 +25,7 @@
current_dir=$(pwd) current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone" lone_dir="$current_dir"/"xorriso-standalone"
xorriso_rev=0.3.2 xorriso_rev=0.2.2
# For unstable uploads: # For unstable uploads:
# xorriso_pl="" # xorriso_pl=""
# For stable releases: # For stable releases:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
/* Command line oriented batch and dialog tool which creates, loads, /* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2. Provided under GPL version 2.
@ -150,104 +150,6 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
/* The outlist stack allows to redirect the info and result messages from
their normal channels into a pair of string lists which can at some
later time be retrieved by the application.
These redirection caches can be stacked to allow stacked applications.
xorriso itself uses them for internal purposes.
*/
/* A list item able of forming double chained lists */
struct Xorriso_lsT;
/** Maximum number of stacked redirections */
#define Xorriso_max_outlist_stacK 32
/** Enable a new redirection of info and/or result channel. The normal message
output and eventual older redirections will not see new messages until
the redirection is ended by a call to Xorriso_pull_outlists() with the
stack_handle value returned by this call.
Redirected output is not written to the files of Xorriso_option_logfile()
and the Xorriso_option_pkt_output() protocol will not be applied.
@param xorriso The environment handle
@param stack_handle returns an id number which is unique as long as
its redirection is stacked. It may be re-used after
its redirection was pulled from the stack.
@param flag Bitfield for control purposes
bit0= redirect result channel
bit1= redirect info channel
If bit0 and bit1 are 0, both channels get redirected.
@return 1 on success, <=0 if failure
*/
int Xorriso_push_outlists(struct XorrisO *xorriso, int *stack_handle,
int flag);
/** Disable the redirection given by stack_handle. If it was the current
receiver of messages then switch output to the next older redirection
resp. to the normal channels if no redirections are stacked any more.
The messages collected by the disabled redirection are handed out as
two lists. Both lists have to be disposed via Xorriso_lst_destroy_all()
when they are no longer needed.
The message lists are either NULL or represented by their first
Xorriso_lsT item.
@param xorriso The environment handle
@param stack_handle The id number returned by Xorriso_push_outlists()
@param result_list Result and mark messages (usually directed to stdout)
@param info_list Info and mark messages (usually directed to stderr)
@param flag unused yet, submit 0
@return 1 on success, <=0 if failure
*/
int Xorriso_pull_outlists(struct XorrisO *xorriso, int stack_handle,
struct Xorriso_lsT **result_list,
struct Xorriso_lsT **info_list, int flag);
/** Obtain the text message from the current list item.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the text content of the list item.
This pointer does not have to be freed.
*/
char *Xorriso_lst_get_text(struct Xorriso_lsT *entry, int flag);
/** Obtain the address of the next item in the chain of messages.
An iteration over the output of Xorriso_pull_outlists() starts at the
returned result_list resp. info_list and ends when this function returns
NULL.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the next list item or NULL if end of list.
This pointer does not have to be freed.
*/
struct Xorriso_lsT *Xorriso_lst_get_next(struct Xorriso_lsT *entry, int flag);
/** Obtain the address of the previous item in the chain of messages.
@param entry The current list item
@param flag unused yet, submit 0
@return Pointer to the previous list item or NULL if start of list.
This pointer does not have to be freed.
*/
struct Xorriso_lsT *Xorriso_lst_get_prev(struct Xorriso_lsT *entry, int flag);
/** Destroy all list items which are directly or indirectly connected to
the given link item.
Apply this to each of the two list handles obtained by
Xorriso_pull_outlists() when the lists are no longer needed.
@param lstring *lstring will be freed and set to NULL.
It is not dangerous to submit a pointer to a NULL-pointer.
@param flag unused yet, submit 0
@return -1= lstring was NULL (i.e. wrong use of this call),
0= *lstring was already NULL,
1= item actually disposed
*/
int Xorriso_lst_destroy_all(struct Xorriso_lsT **lstring, int flag);
/* ---------------------------- Options API ------------------------ */ /* ---------------------------- Options API ------------------------ */
/* See man 1 xorriso for explanation of the particular options */ /* See man 1 xorriso for explanation of the particular options */
/* /*
@ -282,25 +184,6 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso,
char *time_type, char *timestring, char *time_type, char *timestring,
int argc, char **argv, int *idx, int flag); int argc, char **argv, int *idx, int flag);
/* Option -application_id */
int Xorriso_option_application_id(struct XorrisO *xorriso, char *name,
int flag);
/* Option -as */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
*/
int Xorriso_option_as(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag);
/* Option -assert_volid */
int Xorriso_option_assert_volid(struct XorrisO *xorriso, char *pattern,
char *severity, int flag);
/* Option -backslash_codes */
int Xorriso_option_backslash_codes(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -ban_stdio_write */ /* Option -ban_stdio_write */
int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag); int Xorriso_option_ban_stdio_write(struct XorrisO *xorriso, int flag);
@ -320,20 +203,6 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag);
/* Option -cdx */ /* Option -cdx */
int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag); int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
/* Option -charset */
/* @param flag bit0= set in_charset
bit1= set out_charset
*/
int Xorriso_option_charset(struct XorrisO *xorriso, char *name, int flag);
/* Option -check_media */
int Xorriso_option_check_media(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -check_media_defaults */
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */ /* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
/* @param flag bit0=recursive (-chgrp_r) /* @param flag bit0=recursive (-chgrp_r)
*/ */
@ -439,10 +308,6 @@ int Xorriso_option_error_behavior(struct XorrisO *xorriso,
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path, int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag); char *iso_path, int flag);
/* Option -extract_cut */
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
char *start, char *count, char *disk_path, int flag);
/* Option -follow */ /* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);
@ -476,10 +341,6 @@ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,
/* Option -joliet "on"|"off" */ /* Option -joliet "on"|"off" */
int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_joliet(struct XorrisO *xorriso, char *mode, int flag);
/* Option -list_delimiter */
int Xorriso_option_list_delimiter(struct XorrisO *xorriso, char *text,
int flag);
/* Option -list_formats */ /* Option -list_formats */
int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag); int Xorriso_option_list_formats(struct XorrisO *xorriso, int flag);
@ -537,13 +398,6 @@ int Xorriso_option_mark(struct XorrisO *xorriso, char *mark, int flag);
int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_mkdiri(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
/* Option -mount */
/* @param bit0= print mount command to result channel rather than performing it
*/
int Xorriso_option_mount(struct XorrisO *xorriso, char *dev, char *adr_mode,
char *adr, char *cmd, int flag);
/* Option -mv alias -mvi */ /* Option -mv alias -mvi */
int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
@ -554,15 +408,14 @@ int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
/* Option -not_leaf */ /* Option -not_leaf */
int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag); int Xorriso_option_not_leaf(struct XorrisO *xorriso, char *pattern, int flag);
/* Option -not_list , -quoted_not_list */ /* Option -not_list */
/* @param flag bit0= -quoted_not_list */
int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag); int Xorriso_option_not_list(struct XorrisO *xorriso, char *adr, int flag);
/* Option -not_paths */ /* Option -not_paths */
int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_not_paths(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag); int *idx, int flag);
/* Option -options_from_file */ /* Option -options_from_file*/
/* @return <=0 error , 1 = success , 3 = request to end program run */ /* @return <=0 error , 1 = success , 3 = request to end program run */
int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr, int Xorriso_option_options_from_file(struct XorrisO *xorriso, char *adr,
int flag); int flag);
@ -586,8 +439,7 @@ int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag);
int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path, int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
char *disk_path, char *start, char *count, int flag); char *disk_path, char *start, char *count, int flag);
/* Option -path_list , -quoted_path_list */ /* Option -path-list */
/* @param flag bit0= -quoted_path_list */
int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag); int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag);
/* Option -pathspecs */ /* Option -pathspecs */
@ -622,10 +474,6 @@ int Xorriso_option_pwdx(struct XorrisO *xorriso, int flag);
/* Option -reassure "on"|"tree"|"off" */ /* Option -reassure "on"|"tree"|"off" */
int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_reassure(struct XorrisO *xorriso, char *mode, int flag);
/* Option -relax_compliance */
int Xorriso_option_relax_compliance(struct XorrisO *xorriso, char *mode,
int flag);
/* Option -report_about */ /* Option -report_about */
int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity, int Xorriso_option_report_about(struct XorrisO *xorriso, char *severity,
int flag); int flag);

View File

@ -2,7 +2,7 @@
<HEAD> <HEAD>
<META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions"> <META NAME="description" CONTENT="xorriso, creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions">
<META NAME="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, Linux, 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="keywords" CONTENT="xorriso, libburn, libburnia, burn, CD, DVD, ISO, ISO 9660, RockRidge, Rock Ridge, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R DL, BD-RE, scdbackup">
<META NAME="robots" CONTENT="follow"> <META NAME="robots" CONTENT="follow">
<TITLE>xorriso homepage english</TITLE> <TITLE>xorriso homepage english</TITLE>
</HEAD> </HEAD>
@ -14,12 +14,12 @@
<P><H2> Homepage of </H2> <P><H2> Homepage of </H2>
<H1> xorriso </H1> <H1> xorriso </H1>
<H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux and FreeBSD</H2> <H2>ISO 9660 Rock Ridge Filesystem Manipulator for Linux</H2>
</CENTER> </CENTER>
<P> <P>
<H2>Purpose:</H2> <H2>Purpose:</H2>
xorriso copies file objects from POSIX compliant filesystems xorriso maps file objects from POSIX compliant filesystems
into Rock Ridge enhanced ISO 9660 filesystems and allows into Rock Ridge enhanced ISO 9660 filesystems and allows
session-wise manipulation of such filesystems. It can load the management session-wise manipulation of such filesystems. It can load the management
information of existing ISO images and it writes the session results to information of existing ISO images and it writes the session results to
@ -48,8 +48,6 @@ and to MMC-5 for DVD or BD).
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT> <DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD> <DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD> <DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
<DT>or FreeBSD (with libc, of course) :</DT>
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
<DT>libpthread</DT> <DT>libpthread</DT>
<DD>is supposed to be a standard system component.</DD> <DD>is supposed to be a standard system component.</DD>
<DT>libreadline and libreadline-dev</DT> <DT>libreadline and libreadline-dev</DT>
@ -62,15 +60,15 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR> GPL software included:<BR>
</H2> </H2>
<DL> <DL>
<DT>libburn-0.6.1</DT> <DT>libburn-0.5.1</DT>
<DD>reads and writes data from and to CD, DVD, BD.</DD> <DD>reads and writes data from and to CD, DVD, BD-RE.</DD>
<DD>(founded by Derek Foreman and Ben Jansens, <DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by furthered since August 2006 by
Thomas Schmitt from team of libburnia-project.org)</DD> Thomas Schmitt from team of libburnia-project.org)</DD>
<DT>libisofs-0.6.12</DT> <DT>libisofs-0.6.6</DT>
<DD>operates on ISO 9660 filesystem images.</DD> <DD>operates on ISO 9660 filesystem images.</DD>
<DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD> <DD>(By Vreixo Formoso and Mario Danic from team of libburnia-project.org)</DD>
<DT>libisoburn-0.3.2</DT> <DT>libisoburn-0.2.2</DT>
<DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD> <DD>coordinates libburn and libisofs, emulates multi-session where needed.</DD>
<DD>(By Vreixo Formoso and Thomas Schmitt <DD>(By Vreixo Formoso and Thomas Schmitt
from team of libburnia-project.org)</DD> from team of libburnia-project.org)</DD>
@ -81,8 +79,7 @@ cdrecord and mkisofs.</A>
</P> </P>
<P> <P>
This program has been tested on Intel/AMD Linux This program system has been tested on Intel/AMD Linux systems only.<BR>
and on FreeBSD systems.<BR>
For ports to other usable systems <A HREF="#contact">contact us</A>. For ports to other usable systems <A HREF="#contact">contact us</A>.
</P> </P>
@ -101,7 +98,10 @@ Operates on an existing ISO image or creates a new one.
Copies files from filesystem into the ISO image. Copies files from filesystem into the ISO image.
</LI> </LI>
<LI> <LI>
Changes file properties, renames or deletes file objects in the ISO image. Renames or deletes file objects in the ISO image.
</LI>
<LI>
Changes file properties in the ISO image.
</LI> </LI>
<LI> <LI>
Updates ISO subtrees incrementally to match given disk subtrees. Updates ISO subtrees incrementally to match given disk subtrees.
@ -111,21 +111,12 @@ Writes result as completely new image or as add-on session
to optical media or filesystem objects. to optical media or filesystem objects.
</LI> </LI>
<LI> <LI>
Can activate ISOLINUX boot images by El Torito boot record and by MBR.
</LI>
<LI>
Can perform multi-session tasks as emulation of mkisofs and cdrecord. Can perform multi-session tasks as emulation of mkisofs and cdrecord.
</LI> </LI>
<LI> <LI>
Can restore single files and whole trees from ISO image to disk filesystem. Can restore single files and whole trees from ISO image to disk filesystem.
</LI> </LI>
<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. Scans for optical drives, blanks re-useable optical media, formats media.
</LI> </LI>
<LI> <LI>
@ -138,6 +129,9 @@ Reads its instructions from command line arguments, dialog, and batch files.
<LI> <LI>
Provides navigation commands for interactive ISO image manipulation. Provides navigation commands for interactive ISO image manipulation.
</LI> </LI>
<LI>
Adjustable thresholds for abort, exit value, and problem reporting.
</LI>
</UL> </UL>
</P> </P>
@ -145,14 +139,8 @@ Provides navigation commands for interactive ISO image manipulation.
<P> <P>
<H2>Command Examples:</H2> <H2>Command Examples:</H2>
<DL> <DL>
<DT>Get an overview of drives and their addresses</DT> <DT>Get an overview of drives and their addresses</DT>
<DD>#<KBD>&nbsp;xorriso -devices</KBD></DD> <DD>#<KBD>&nbsp;xorriso -devices</KBD></DD>
<DD><KBD>...</KBD></DD>
<DD><KBD>0 -dev '/dev/sr0' rwrw-- : 'TSSTcorp' 'CDDVDW SH-S203B'</KBD></DD>
<DD><KBD>1 -dev '/dev/scd1' rwrw-- : 'PHILIPS ' 'SPD3300L'</KBD></DD>
<DD><KBD>2 -dev '/dev/hda' rwrw-- : 'HL-DT-ST' 'DVD-ROM GDR8162B'</KBD></DD>
<DD><KBD>...</KBD></DD>
<DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX . <DT>Being superuser avoids permission problems with /dev/srN resp. /dev/hdX .
</DT> </DT>
<DT>Ordinary users should then get granted rw access to the /dev files <DT>Ordinary users should then get granted rw access to the /dev files
@ -181,7 +169,7 @@ eventually prepare yet unused BD-RE:</DT>
<DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures <DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 -add /home/me/sounds /home/me/pictures
</KBD></DD> </KBD></DD>
<DT>Have a look at the result:</DT> <DT>Check the result:</DT>
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD> <DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 -du / -- -toc 2>&amp;1 | less</KBD></DD>
<DT> <DT>
@ -264,19 +252,18 @@ already been done by a previous -commit.</DT>
<HR> <HR>
</DT> </DT>
<DT>The following command performs incremental backup. <DT>The following command can be run on blank media to create a
It can be run on blank media to create a copy of the mentioned disk copy of the mentioned disk directory trees, and it can be run on appendable
directory trees, and it can be run on appendable media to perform a media to perform a minimal set of change operations which update the
minimal set of change operations which update the old ISO copies old ISO copies to match the new disk trees.
to match the new disk trees. Older states can be retrieved by help of mount option "session=" from CD-R[W],
Older states can be retrieved by help of mount options like "sbsector=" by help of "sbsector=" from other media.
or by help of xorriso option -mount. So this constitutes true incremental backup.
<BR> <BR>
Only blank media or media with volume id "PROJECTS_MAIL_..." will be accepted. The copies will be complete, except all file names ending
Files with names ending by ".o" or ".swp" are excluded by options -not_leaf. with ".o" or ".swp" which are excluded by options -not_leaf.
</DT> </DT>
<DD>$<KBD>&nbsp;xorriso -assert_volid 'PROJECTS_MAIL_*' FATAL \ \</KBD></DD> <DD>$<KBD>&nbsp;xorriso -dev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -dev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -volid PROJECTS_MAIL_"$(date '+%Y_%m_%d_%H%M%S')" \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -not_leaf '*.o' -not_leaf '*.swp' \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -update_r /home/thomas/open_source_projects /open_source_projects \</KBD></DD>
@ -287,62 +274,6 @@ Files with names ending by ".o" or ".swp" are excluded by options -not_leaf.
<HR> <HR>
</DT> </DT>
<DT>
Operating systems usually mount the most recent session on media.
xorriso can issue the appropriate mount commands for older sessions.
First get an overview of the sessions on disk:
</DT>
<DD>$<KBD>&nbsp;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>&nbsp;xorriso -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>&nbsp;xorriso -outdev /dev/sr0 -blank as_needed \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -map /home/me/ISOLINUX_prepared_tree / \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -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>&nbsp;xorriso -dev /tmp/regular_file ...other.options...</DD>
<DT>
A default setting for safety reasons requires that files below /dev/
need prefix &quot;stdio:&quot; 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>&nbsp;xorriso -dev stdio:/dev/sdb ...other.options...</DD>
<DT>Other file types are suitable only for writing but not for reading:</DT>
<DD>$<KBD>&nbsp;xorriso -outdev /tmp/named_pipe ...other.options...</DD>
<DT>In batch mode it is possible to operate xorriso in a pipeline <DT>In batch mode it is possible to operate xorriso in a pipeline
with an external consumer of the generated ISO image. Any message with an external consumer of the generated ISO image. Any message
output will be redirected to stderr in this case.</DT> output will be redirected to stderr in this case.</DT>
@ -370,17 +301,14 @@ One may switch from mkisofs emulation to xorriso's own command mode:
<HR> <HR>
</DT> </DT>
<DT>If for any reason the reading operating system mishandles the ISO image <DT>Enable reverse operation of xorriso and copy some files and a tree to disk:
or some files in it, one may enable reverse operation of xorriso and copy
files or trees to disk:
<DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD> <DD>$<KBD>&nbsp;xorriso -indev /dev/sr0 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -osirrox on \</KBD></DD>
<DD><KBD>&nbsp;&nbsp; -cpx '/pictures/private/horses*/*buttercup*' \</KBD></DD> <DD><KBD>&nbsp;&nbsp; -cpx /pictures/private/horses*/*buttercup* \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD> <DD><KBD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/her/buttercup_dir -- \</KBD>
<DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD> <DD><KBD>&nbsp;&nbsp; -extract /sounds /home/her/sounds_from_me</KBD></DD>
</DD> </DD>
<DT>Consider to enter dialog mode and use commands like
<KBD>-cd , -du , -lsl , -find<KBD>.
<DT> <DT>
<HR> <HR>
</DT> </DT>
@ -393,6 +321,10 @@ files or trees to disk:
<DD>$<KBD>&nbsp;<A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD> <DD>$<KBD>&nbsp;<A HREF="man_1_xorriso.html">man xorriso</A></KBD></DD>
</DL> </DL>
Testers wanted who are willing to risk some double layer DVD media or
are interested in using BD-R media.
</P> </P>
<HR> <HR>
@ -400,8 +332,8 @@ files or trees to disk:
<P> <P>
<DL> <DL>
<DT><H3>Download as source code (see README):</H3></DT> <DT><H3>Download as source code (see README):</H3></DT>
<DD><A HREF="xorriso-0.3.2.pl00.tar.gz">xorriso-0.3.2.pl00.tar.gz</A> <DD><A HREF="xorriso-0.2.2.pl00.tar.gz">xorriso-0.2.2.pl00.tar.gz</A>
(1100 KB). (1020 KB).
</DD> </DD>
</DL> </DL>
</DD> </DD>
@ -425,27 +357,31 @@ an <A HREF="http://www.opensource.org/">Open Source</A> approved license</DD>
</P> </P>
<HR> <HR>
<P> <P>
Bug fixes towards xorriso-0.3.0.pl00: Bug fixes towards xorriso-0.2.0.pl00:
<UL> <UL>
<LI>Options -extract and -extract_single were not disabled with -osirrox off
<!-- <LI>libburn could not access drives /dev/scdN without existing /dev/srN</LI>
<LI>- none -</LI>
-->
</UL> </UL>
</P> </P>
<P> <P>
Enhancements towards previous stable version xorriso-0.3.0.pl00: Enhancements towards previous stable version xorriso-0.2.0.pl00:
<UL> <UL>
<LI>New options -mount, -mount_cmd, -session_string</LI>
<LI>By using libburn-0.6.1: support for BD-R media</LI> <LI>New option -grow_blindly</LI>
<LI>New -format modes by_size_ and fast_by_size_</LI> <LI>Options -C and -M with -as mkisofs emulation</LI>
<LI>New option -assert_volid</LI> <LI>Options with -as cdrecord emulation:<BR>
<LI>New option -drive_class for safety management of pseudo-drive access</LI> -multi , -msinfo , --grow_overwriteable_iso , write_start_address= ,
-isosize , tsize=
</LI>
<LI>make install creates xorriso aliases as symbolic links:
osirrox, xorrisofs, xorrecord
</LI>
<LI>
Can serve growisofs if started as xorrisofs, genisofs, mkisofs, genisoimage
</LI>
</UL> </UL>
</P> </P>
@ -453,17 +389,15 @@ Enhancements towards previous stable version xorriso-0.3.0.pl00:
<P> <P>
<DL> <DL>
<DT><H3>Development snapshot, version 0.3.3 :</H3></DT> <DT><H3>Development snapshot, version 0.2.3 :</H3></DT>
<DD>Bug fixes towards xorriso-0.3.2.pl00: <DD>Bug fixes towards xorriso-0.2.2.pl00:
<UL> <UL>
</LI>
<LI>- none yet -</LI> <LI>- none yet -</LI>
<!-- <!--
--> -->
</UL> </UL>
</DD> </DD>
<DD>Enhancements towards stable version 0.3.2.pl00: <DD>Enhancements towards stable version 0.2.2.pl00:
<UL> <UL>
<LI>- none yet -</LI> <LI>- none yet -</LI>
<!-- <!--
@ -471,9 +405,9 @@ Enhancements towards previous stable version xorriso-0.3.0.pl00:
</UL> </UL>
</DD> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DD><A HREF="README_xorriso_devel">README 0.3.3</A> <DD><A HREF="README_xorriso_devel">README 0.2.3</A>
<DD><A HREF="xorriso_help_devel">xorriso_0.3.3 -help</A></DD> <DD><A HREF="xorriso_help_devel">xorriso_0.2.3 -help</A></DD>
<DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.3.3)</A></DD> <DD><A HREF="man_1_xorriso_devel.html">man xorriso (as of 0.2.3)</A></DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DT>If you want to distribute development versions of xorriso, then use <DT>If you want to distribute development versions of xorriso, then use
this tarball which produces static linking between xorriso and the this tarball which produces static linking between xorriso and the
@ -483,8 +417,8 @@ libburnia libraries.
installation see README) installation see README)
</DD> </DD>
<DD> <DD>
<A HREF="xorriso-0.3.3.tar.gz">xorriso-0.3.3.tar.gz</A> <A HREF="xorriso-0.2.3.tar.gz">xorriso-0.2.3.tar.gz</A>
(1100 KB). (1020 KB).
</DD> </DD>
<DT>A dynamically linked development version of xorriso can be obtained <DT>A dynamically linked development version of xorriso can be obtained
from repositories of from repositories of

View File

@ -16,21 +16,19 @@ xorriso_xorriso_CPPFLAGS = -I./libburn -I./libisofs -I./libisoburn -I./xorriso
# No readline in the vanilla version because the necessary headers # No readline in the vanilla version because the necessary headers
# are in a separate readline-development package. # are in a separate readline-development package.
xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN $(READLINE_DEF) xorriso_xorriso_CFLAGS = -DXorriso_standalonE -DXorriso_with_maiN -DXorriso_with_regeX $(READLINE_DEF)
xorriso_xorriso_LDADD = $(THREAD_LIBS) xorriso_xorriso_LDADD = $(THREAD_LIBS)
# This looks quite ugly with make install: xorriso.c is compiled twice again
#
# Trying to create a build timestamp file # Trying to create a build timestamp file
# #
# BUILT_SOURCES = xorriso/xorriso_buildstamp.h BUILT_SOURCES = xorriso/xorriso_buildstamp.h
# phony targets get rebuilt every time # phony targets get rebuilt every time
# .PHONY: xorriso/xorriso_buildstamp.h .PHONY: xorriso/xorriso_buildstamp.h
# xorriso/xorriso_buildstamp.h: xorriso/xorriso_buildstamp.h:
# date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >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 cat xorriso/xorriso_buildstamp.h
xorriso_xorriso_SOURCES = \ xorriso_xorriso_SOURCES = \
@ -96,9 +94,6 @@ xorriso_xorriso_SOURCES = \
libisofs/filter.h \ libisofs/filter.h \
libisofs/filter.c \ libisofs/filter.c \
libisofs/filters/xor_encrypt.c \ libisofs/filters/xor_encrypt.c \
libisofs/system_area.h \
libisofs/system_area.c \
libisofs/make_isohybrid_mbr.c \
\ \
libburn/async.c \ libburn/async.c \
libburn/async.h \ libburn/async.h \
@ -170,17 +165,18 @@ test_compare_file_SOURCES = test/compare_file.c
# Install symbolic links to the xorriso binary # Install symbolic links to the xorriso binary
# #
install-exec-hook: install-exec-hook:
if test -e "$(DESTDIR)$(bindir)"/xorrisofs ; then rm "$(DESTDIR)$(bindir)"/xorrisofs ; else echo ; fi if test -e $(bindir)/xorrisofs ; then rm $(bindir)/xorrisofs ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrisofs ln -s xorriso $(bindir)/xorrisofs
if test -e "$(DESTDIR)$(bindir)"/osirrox ; then rm "$(DESTDIR)$(bindir)"/osirrox ; else echo ; fi if test -e $(bindir)/osirrox ; then rm $(bindir)/osirrox ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/osirrox ln -s xorriso $(bindir)/osirrox
if test -e "$(DESTDIR)$(bindir)"/xorrecord ; then rm "$(DESTDIR)$(bindir)"/xorrecord ; else echo ; fi if test -e $(bindir)/xorrecord ; then rm $(bindir)/xorrecord ; else echo ; fi
ln -s xorriso "$(DESTDIR)$(bindir)"/xorrecord ln -s xorriso $(bindir)/xorrecord
# Alternative to the disabled .PHONY above. # <<< seems to be outperformed by the .PHONY above
# Trying to create a build timestamp file semi-manually: make buildstamped
# Trying to create a build timestamp file
# #
buildstamp: buildstamp:
date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >xorriso/xorriso_buildstamp.h
@ -189,7 +185,17 @@ buildstamp:
# For now make buildstamped has to be performed manually. # For now make buildstamped has to be performed manually.
buildstamped: buildstamp buildstamped: buildstamp
make make
#
# Processing of the "all:" rule happens too late.
# How to create a dependency of xorriso.c on buildstamp ?
# Not working:
# Add xorriso_buildstamp.h to xorriso_xorriso_SOURCES and make it depend
# on buildstamp. It runs. But at quite random occasions.
# xorriso/xorriso_buildstamp.h: buildstamp
#
# all: buildstamp
# <<< seems to be outperformed by the .PHONY above
## ========================================================================= ## ## ========================================================================= ##

View File

@ -2,7 +2,7 @@
/* Command line oriented batch and dialog tool which creates, loads, /* Command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2. Provided under GPL version 2.
@ -18,7 +18,7 @@
#ifndef Xorriso_private_includeD #ifndef Xorriso_private_includeD
#define Xorriso_private_includeD yes #define Xorriso_private_includeD yes
#define Xorriso_program_versioN "0.3.2" #define Xorriso_program_versioN "0.2.2"
/** The source code release timestamp */ /** The source code release timestamp */
#include "xorriso_timestamp.h" #include "xorriso_timestamp.h"
@ -34,19 +34,23 @@
#define Xorriso_build_timestamP "-none-given-" #define Xorriso_build_timestamP "-none-given-"
#endif #endif
/* Because regex_t is mentioned in struct XorrisO */
#ifdef Xorriso_with_regeX
#include <regex.h> #include <regex.h>
#endif /* Xorriso_with_regeX */
#define Smem_malloC malloc #define Smem_malloC malloc
#define Smem_freE free #define Smem_freE free
#define SfileadrL 4096 #define SfileadrL 4096
/* <<< ??? */
typedef int (*Cleanup_app_handler_T)();
struct LinkiteM; /* Trace of hops during symbolic link resolution */ struct LinkiteM; /* Trace of hops during symbolic link resolution */
struct ExclusionS; /* List of -not_* conditions */ struct ExclusionS; /* List of -not_* conditions */
struct PermiteM; /* Stack of temporarily altered access permissions */ struct PermiteM; /* Stack of temporarily altered access permissions */
struct SpotlisT; /* List of intervals with different read qualities */
struct CheckmediajoB; /* Parameters for Xorriso_check_media() */
struct SectorbitmaP; /* Distiniction between valid and invalid sectors */
/* maximum number of history lines to be reported with -status:long_history */ /* maximum number of history lines to be reported with -status:long_history */
@ -61,13 +65,6 @@ struct SectorbitmaP; /* Distiniction between valid and invalid sectors */
#define Xorriso_rc_nuM 4 #define Xorriso_rc_nuM 4
/* Default setting for the size limit of single data files:
100 extents with 4 GB - 2 kB each = 400 GB - 200 kB
*/
#define Xorriso_default_file_size_limiT \
(((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 204800)
struct XorrisO { /* the global context of xorriso */ struct XorrisO { /* the global context of xorriso */
int libs_are_started; int libs_are_started;
@ -95,12 +92,9 @@ struct XorrisO { /* the global context of xorriso */
int add_plainly; int add_plainly;
off_t split_size; off_t split_size;
char list_delimiter[81];
/* >>> put libisofs aspects here <<< */ /* >>> put libisofs aspects here <<< */
int do_joliet; int do_joliet;
int relax_compliance; /* opaque bitfield to be set by xorrisoburn */
int do_follow_pattern; int do_follow_pattern;
int do_follow_param; int do_follow_param;
int do_follow_links; int do_follow_links;
@ -120,11 +114,8 @@ struct XorrisO { /* the global context of xorriso */
char volid[33]; char volid[33];
int volid_default; int volid_default;
char loaded_volid[33]; char loaded_volid[33];
char assert_volid[SfileadrL];
char assert_volid_sev[80];
char publisher[129]; char publisher[129];
char application_id[129];
char session_logfile[SfileadrL]; char session_logfile[SfileadrL];
int session_lba; int session_lba;
@ -132,14 +123,8 @@ struct XorrisO { /* the global context of xorriso */
/* >>> put libburn/isoburn aspects here */ /* >>> put libburn/isoburn aspects here */
struct Xorriso_lsT *drive_blacklist;
struct Xorriso_lsT *drive_greylist;
struct Xorriso_lsT *drive_whitelist;
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire() int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
scan -ROM profiles for ISO sessions scan -ROM profiles for ISO sessions
bit1= bit4 for isoburn_drive_aquire()
do not emulate TOC on overwriteable media
*/ */
int image_start_mode; /* From what address to load the ISO image int image_start_mode; /* From what address to load the ISO image
@ -162,18 +147,12 @@ struct XorrisO { /* the global context of xorriso */
char indev[SfileadrL]; char indev[SfileadrL];
void *in_drive_handle; /* interpreted only by xorrisoburn.c */ void *in_drive_handle; /* interpreted only by xorrisoburn.c */
void *in_volset_handle; /* interpreted only by xorrisoburn.c */ void *in_volset_handle; /* interpreted only by xorrisoburn.c */
char *in_charset; /* The charset to interpret the filename bytes */
int volset_change_pending; /* whether -commit would make sense */ int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */ int no_volset_present; /* set to 1 on first failure */
struct CheckmediajoB *check_media_default;
struct SectorbitmaP *in_sector_map; /* eventual sector validity bitmap */
char outdev[SfileadrL]; char outdev[SfileadrL];
void *out_drive_handle; /* interpreted only by xorrisoburn.c */ void *out_drive_handle; /* interpreted only by xorrisoburn.c */
char *out_charset; /* The charset to produce the filename bytes for */
int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is int dev_fd_1; /* The fd which substitutes for /dev/fd/1 and is
connected to externaly perveived stdout. connected to externaly perveived stdout.
*/ */
@ -189,28 +168,11 @@ struct XorrisO { /* the global context of xorriso */
int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */ int speed; /* in libburn units : 1000 bytes/second , 0 = Max, -1 = Min */
int fs; /* fifo size in 2048 byte chunks : at most 1 GB */ int fs; /* fifo size in 2048 byte chunks : at most 1 GB */
int padding; /* number of bytes to add after ISO 9660 image */ int padding; /* number of bytes to add after ISO 9660 image */
int alignment; /* if > 0 : image size alignment in 2048 byt blocks */
/* <<< not sure whether to keep this after libisofs will have
learned to pad up MBR images to full MB */
int do_stream_recording; int do_stream_recording;
int keep_boot_image; int keep_boot_image;
int patch_isolinux_image; int patch_isolinux_image;
char boot_image_bin_path[SfileadrL];
int boot_image_emul; /* 0=no emulation
(1=emulation as hard disk)
(2=emulation as floppy)
*/
char boot_image_cat_path[SfileadrL];
off_t boot_image_load_size;
int boot_image_isohybrid; /* 0=off , 1=auto , 2=on , 3=force */
/* LBA of boot image after image loading */
int loaded_boot_bin_lba;
/* Path of the catalog node after image loading */
char loaded_boot_cat_path[SfileadrL];
/* XORRISO options */ /* XORRISO options */
int allow_graft_points; int allow_graft_points;
@ -223,20 +185,8 @@ struct XorrisO { /* the global context of xorriso */
of self-owned directories during restore of self-owned directories during restore
*/ */
int dialog; /* 0=off , 1=single-line , 2=multi-line */ int dialog;
int bsl_interpretation;
/* whether to run input through Sfile_bsl_interpreter():
bit0-1= dialog and quoted file reading
0= no interpretation, leave unchanged
1= only inside double quotes
2= outside single quotes
3= everywhere
bit2-3= reserved as future expansion of bit0-1
bit4= interpretation within program start arguments
bit5= perform backslash encoding with results
bit6= perform backslash encoding with info texts
*/
/* Pattern matching facility. It still carries legacy from scdbackup/askme.c /* Pattern matching facility. It still carries legacy from scdbackup/askme.c
but is fully functional for xorriso. but is fully functional for xorriso.
@ -262,8 +212,6 @@ struct XorrisO { /* the global context of xorriso */
int temp_mem_limit; int temp_mem_limit;
off_t file_size_limit;
struct ExclusionS *disk_exclusions; struct ExclusionS *disk_exclusions;
int disk_excl_mode; /* bit0= on (else off) int disk_excl_mode; /* bit0= on (else off)
bit1= parameter too (else rekursion only) bit1= parameter too (else rekursion only)
@ -278,17 +226,7 @@ struct XorrisO { /* the global context of xorriso */
char mark_text[SfileadrL]; /* ( stdout+stderr, M: ) */ char mark_text[SfileadrL]; /* ( stdout+stderr, M: ) */
int packet_output; int packet_output;
char logfile[4][SfileadrL]; char logfile[4][SfileadrL];
FILE *logfile_fp[4];
FILE *pktlog_fp;
struct Xorriso_lsT *result_msglists[Xorriso_max_outlist_stacK];
struct Xorriso_lsT *info_msglists[Xorriso_max_outlist_stacK];
int msglist_flags[Xorriso_max_outlist_stacK]; /* bit0= result is redirected
bit1= info is redirected
*/
int msglist_stackfill;
int status_history_max; /* for -status long_history */ int status_history_max; /* for -status long_history */
char report_about_text[20]; char report_about_text[20];
int report_about_severity; int report_about_severity;
@ -303,7 +241,6 @@ struct XorrisO { /* the global context of xorriso */
FILE *errfile_fp; FILE *errfile_fp;
int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */ int img_read_error_mode; /* 0=best_effort , 1=failure , 2=fatal */
int extract_error_mode; /* 0=best_effort , 1=keep , 2=delete */
char return_with_text[20]; char return_with_text[20];
int return_with_severity; int return_with_severity;
@ -312,8 +249,10 @@ struct XorrisO { /* the global context of xorriso */
char eternal_problem_status_text[20]; char eternal_problem_status_text[20];
/* temporary search facilities */ /* temporary search facilities */
#ifdef Xorriso_with_regeX
regex_t *re; regex_t *re;
regmatch_t match[1]; regmatch_t match[1];
#endif /* Xorriso_with_regeX */
char **re_constants; char **re_constants;
int re_count; int re_count;
int re_fill; int re_fill;
@ -350,7 +289,7 @@ struct XorrisO { /* the global context of xorriso */
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */ struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
/* result (stdout, R: ) */ /* result (stdout, R: ) */
char result_line[10*SfileadrL]; char result_line[5*SfileadrL];
int result_line_counter; int result_line_counter;
int result_page_counter; int result_page_counter;
int result_open_line_len; int result_open_line_len;
@ -516,100 +455,6 @@ int Xorriso_auto_chmod(struct XorrisO *xorriso, char *disk_path, int flag);
int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag); int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag);
/* @param flag bit0= mark untested areas as valid
*/
int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
struct SpotlisT *spotlist,
int read_chunk,
struct SectorbitmaP **map,
int flag);
int Xorriso_toc_to_string(struct XorrisO *xorriso, char **toc_text, int flag);
/* @param flag bit0+1= what to aquire after giving up outdev
0=none, 1=indev, 2=outdev, 3=both
*/
int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag);
struct Xorriso_lsT {
char *text;
struct Xorriso_lsT *prev,*next;
};
/** Create a new list item with arbitrary byte content.
@param lstring The newly created object or NULL on failure
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
@return <=0 error, 1 ok
*/
int Xorriso_lst_new_binary(struct Xorriso_lsT **lstring, char *data,
int data_len, struct Xorriso_lsT *link, int flag);
/** Create a new list item with a 0-terminated text as content.
@param lstring The newly created object or NULL on failure
@param text A 0-terminated array of bytes
@param link Xorriso_lsT object to which the new object shall be linked
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
@return <=0 error, 1 ok
*/
int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
struct Xorriso_lsT *link, int flag);
/** Create a new list item at the end of a given list.
@param lstring Contains as input a pointer to a pointer to any existing
list item. As output this list item pointer will be
changed to the address of the new list item.
@param data An array of bytes to be copied into the new object
@param data_len Number of bytes to be copied
@param flag unused yet, submit 0
@return <=0 error, 1 ok
*/
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
char *data, int data_len, int flag);
/** Destroy a single list item and connect its eventual list neighbors.
@param lstring pointer to the pointer to be freed and set to NULL
@param flag unused yet, submit 0
@return 0= *lstring was alredy NULL, 1= ok
*/
int Xorriso_lst_destroy(struct Xorriso_lsT **lstring, int flag);
/* Opens the -check_media data copy in for reading and writing
*/
int Xorriso_open_job_data_to(struct XorrisO *xorriso,
struct CheckmediajoB *job, int flag);
int Xorriso_no_findjob(struct XorrisO *xorriso, char *cmd, int flag);
int Xorriso_make_mount_cmd(struct XorrisO *xorriso, char *cmd,
int lba, int track, int session, char *volid,
char *devadr, char result[SfileadrL], int flag);
/* @param flag bit0= use env_path to find the desired program
*/
int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
int *status, int flag);
int Xorriso_is_in_patternlist(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, char *path, int flag);
char *Xorriso_get_pattern(struct XorrisO *xorriso,
struct Xorriso_lsT *patternlist, int index, int flag);
int Sfile_str(char target[SfileadrL], char *source, int flag); int Sfile_str(char target[SfileadrL], char *source, int flag);
double Sfile_microtime(int flag); double Sfile_microtime(int flag);
@ -659,9 +504,6 @@ char *Ftypetxt(mode_t st_mode, int flag);
*/ */
char *Ftimetxt(time_t t, char timetext[40], int flag); char *Ftimetxt(time_t t, char timetext[40], int flag);
int System_uname(char **sysname, char **release, char **version,
char **machine, int flag);
struct DirseQ; struct DirseQ;
@ -677,12 +519,6 @@ int Linkitem_reset_stack(struct LinkiteM **o, struct LinkiteM *to, int flag);
struct FindjoB; struct FindjoB;
int Findjob_new(struct FindjoB **o, char *start_path, int flag);
int Findjob_destroy(struct FindjoB **job, int flag);
/* @return 0=no match , 1=match , <0 = error /* @return 0=no match , 1=match , <0 = error
*/ */
int Findjob_test(struct FindjoB *job, char *name, int Findjob_test(struct FindjoB *job, char *name,
@ -721,26 +557,8 @@ int Findjob_set_action_ad(struct FindjoB *o, int type, time_t date, int flag);
int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag); int Findjob_set_start_path(struct FindjoB *o, char *start_path, int flag);
int Findjob_set_action_found_path(struct FindjoB *o, int flag);
int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag); int Findjob_get_start_path(struct FindjoB *o, char **start_path, int flag);
int Findjob_set_lba_range(struct FindjoB *o, int start_lba, int count,
int flag);
int Findjob_get_lba_damage_filter(struct FindjoB *o, int *start_lba,
int *end_lba, int *damage_filter, int flag);
int Findjob_get_commit_filter(struct FindjoB *o, int *commit_filter, int flag);
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag);
int Findjob_get_wanted_node(struct FindjoB *o, void **wanted_node, int flag);
int Findjob_set_found_path(struct FindjoB *o, char *path, int flag);
int Findjob_get_found_path(struct FindjoB *o, char **path, int flag);
struct SplitparT; struct SplitparT;
@ -764,6 +582,33 @@ int Splitpart__compose(char *adr, int partno, int total_parts,
int Splitparts_sort(struct SplitparT *o, int count, int flag); int Splitparts_sort(struct SplitparT *o, int count, int flag);
struct LstrinG {
char *text;
struct LstrinG *prev,*next;
};
int Lstring_destroy(struct LstrinG **lstring, int flag);
int Lstring_destroy_all(struct LstrinG **lstring, int flag);
/*
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
bit1= do not copy data (e.g. because *data is invalid)
*/
int Lstring_new_binary(struct LstrinG **lstring, char *data, int data_len,
struct LstrinG *link, int flag);
/*
@param flag Bitfield for control purposes
bit0= insert before link rather than after it
*/
int Lstring_new(struct LstrinG **lstring, char *text, struct LstrinG *link,
int flag);
int Lstring_append_binary(struct LstrinG **entry, char *data, int data_len,
int flag);
int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf, int Permstack_push(struct PermiteM **o, char *disk_path, struct stat *stbuf,
int flag); int flag);
@ -772,69 +617,5 @@ int Permstack_pop(struct PermiteM **o, struct PermiteM *stopper,
struct XorrisO *xorriso, int flag); struct XorrisO *xorriso, int flag);
int Spotlist_new(struct SpotlisT **o, int flag);
int Spotlist_destroy(struct SpotlisT **o, int flag);
int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
int quality, int flag);
int Spotlist_count(struct SpotlisT *o, int flag);
int Spotlist_block_count(struct SpotlisT *o, int flag);
int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag);
int Spotlist_get_item(struct SpotlisT *o, int idx,
int *start_lba, int *blocks, int *quality, int flag);
char *Spotlist__quality_name(int quality, char name[80], int flag);
#define Xorriso_read_quality_gooD 0x7fffffff
#define Xorriso_read_quality_sloW 0x60000000
#define Xorriso_read_quality_partiaL 0x50000000
#define Xorriso_read_quality_valiD 0x40000000
#define Xorriso_read_quality_untesteD 0x3fffffff
#define Xorriso_read_quality_invaliD 0x3ffffffe
#define Xorriso_read_quality_tao_enD 0x28000000
#define Xorriso_read_quality_off_tracK 0x20000000
#define Xorriso_read_quality_unreadablE 0x00000000
int Checkmediajob_new(struct CheckmediajoB **o, int flag);
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);
int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
int flag);
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
int flag);
int Sectorbitmap_destroy(struct SectorbitmaP **o, int flag);
int Sectorbitmap_from_file(struct SectorbitmaP **o, char *path, char *msg,
int *os_errno, int flag);
int Sectorbitmap_to_file(struct SectorbitmaP *o, char *path, char *info,
char *msg, int *os_errno, int flag);
int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag);
int Sectorbitmap_set_range(struct SectorbitmaP *o,
int start_sector, int sectors, int flag);
int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag);
int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o,
off_t start_byte, off_t end_byte, int flag);
int Sectorbitmap_get_layout(struct SectorbitmaP *o,
int *sectors, int *sector_size, int flag);
int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to,
int flag);
/* bit0= append (text!=NULL) */
int Sregex_string(char **handle, char *text, int flag);
/* @param flag bit0= only test expression whether compilable
*/
int Sregex_match(char *pattern, char *text, int flag);
#endif /* Xorriso_private_includeD */ #endif /* Xorriso_private_includeD */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.01.05.123001" #define Xorriso_timestamP "2008.07.18.120001"

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
a command line oriented batch and dialog tool which creates, loads, a command line oriented batch and dialog tool which creates, loads,
manipulates and burns ISO 9660 filesystem images. manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2009 Thomas Schmitt, <scdbackup@gmx.net> Copyright 2007-2008 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2. Provided under GPL version 2.
@ -14,11 +14,13 @@
#ifndef Xorrisoburn_includeD #ifndef Xorrisoburn_includeD
#define Xorrisoburn_includeD yes #define Xorrisoburn_includeD yes
struct XorrisO;
struct FindjoB;
/* The minimum version of libisoburn to be used with this version of xorriso /* The minimum version of libisoburn to be used with this version of xorriso
*/ */
#define xorriso_libisoburn_req_major 0 #define xorriso_libisoburn_req_major 0
#define xorriso_libisoburn_req_minor 3 #define xorriso_libisoburn_req_minor 2
#define xorriso_libisoburn_req_micro 2 #define xorriso_libisoburn_req_micro 2
int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag); int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag);
@ -52,16 +54,9 @@ int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
/* @param flag bit0=report about output drive /* @param flag bit0=report about output drive
bit1=short report form bit1=short report form
bit2=do not try to read ISO heads
bit3=report to info channel (else to result channel)
*/ */
int Xorriso_toc(struct XorrisO *xorriso, int flag); int Xorriso_toc(struct XorrisO *xorriso, int flag);
/* @param flag bit0= no output if no boot record was found
bit3= report to info channel (else to result channel)
*/
int Xorriso_show_boot_info(struct XorrisO *xorriso, int flag);
int Xorriso_show_devices(struct XorrisO *xorriso, int flag); int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
int Xorriso_tell_media_space(struct XorrisO *xorriso, int Xorriso_tell_media_space(struct XorrisO *xorriso,
@ -74,14 +69,10 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso,
int Xorriso_blank_media(struct XorrisO *xorriso, int flag); int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
/* @param flag bit0= try to achieve faster formatting /* @param flag bit0= try to achieve faster formatting
bit1= use parameter size (else use default size)
bit2= do not re-aquire drive
bit7= by_index mode:
bit8 to bit15 contain the index of the format to use.
@return 0=failure, did not touch media , -1=failure, altered media @return 0=failure, did not touch media , -1=failure, altered media
1=success, altered media , 2=success, did not touch media 1=success, altered media , 2=success, did not touch media
*/ */
int Xorriso_format_media(struct XorrisO *xorriso, off_t size, int flag); int Xorriso_format_media(struct XorrisO *xorriso, int flag);
/* @return <=0 error, 1 success /* @return <=0 error, 1 success
*/ */
@ -211,15 +202,9 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address,
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number, int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
char profile_name[80], int flag); char profile_name[80], int flag);
#ifdef NIX
/* @param flag bit0= do not mark image as changed */ /* @param flag bit0= do not mark image as changed */
int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag); int Xorriso_set_publisher(struct XorrisO *xorriso, char *name, int flag);
/* @param flag bit0= do not mark image as changed */
int Xorriso_set_application_id(struct XorrisO *xorriso, char *name, int flag);
#endif /* NIX */
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname /* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
*/ */
@ -294,99 +279,6 @@ int Xorriso_libburn_adr(struct XorrisO *xorriso, char *address_string,
*/ */
int Xorriso_msinfo(struct XorrisO *xorriso, int *msc1, int *msc2, int flag); 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);
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);
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
For now take the highest possible value.
*/
#define Xorriso_IFBOOT S_IFMT
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */