Changed struct isoburn_read_opts to opaque handle
This commit is contained in:
parent
0c40b2f513
commit
7bb454bb64
@ -408,12 +408,137 @@ int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc,
|
|||||||
|
|
||||||
void isoburn_version(int *major, int *minor, int *micro)
|
void isoburn_version(int *major, int *minor, int *micro)
|
||||||
{
|
{
|
||||||
*major = ISOBURN_MAJOR_VERSION;
|
*major = ISOBURN_MAJOR_VERSION;
|
||||||
*minor = ISOBURN_MINOR_VERSION;
|
*minor = ISOBURN_MINOR_VERSION;
|
||||||
*micro = ISOBURN_MICRO_VERSION;
|
*micro = ISOBURN_MICRO_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_is_compatible(int major, int minor, int micro, int flag)
|
||||||
|
{
|
||||||
|
int own_major, own_minor, own_micro;
|
||||||
|
|
||||||
|
isoburn_version(&own_major, &own_minor, &own_micro);
|
||||||
|
return(own_major > major ||
|
||||||
|
(own_major == major && (own_minor > minor ||
|
||||||
|
(own_minor == minor && own_micro >= micro))));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
Options for image reading.
|
||||||
|
*/
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_new(struct isoburn_read_opts **new_o, int flag)
|
||||||
|
{
|
||||||
|
struct isoburn_read_opts *o;
|
||||||
|
|
||||||
|
o= (*new_o)= calloc(1, sizeof(struct isoburn_read_opts));
|
||||||
|
if(o==NULL)
|
||||||
|
return(-1);
|
||||||
|
o->norock= 0;
|
||||||
|
o->nojoliet= 0;
|
||||||
|
o->noiso1999= 1;
|
||||||
|
o->preferjoliet= 0;
|
||||||
|
o->uid= geteuid();
|
||||||
|
o->gid= getegid();
|
||||||
|
o->mode= 0444; /* >>> would need 0555 for directories */
|
||||||
|
o->input_charset= NULL;
|
||||||
|
o->hasRR= 0;
|
||||||
|
o->hasJoliet= 0;
|
||||||
|
o->hasIso1999= 0;
|
||||||
|
o->hasElTorito= 0;
|
||||||
|
o->size= 0;
|
||||||
|
o->pretend_blank= 1;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag)
|
||||||
|
{
|
||||||
|
if(*o==NULL)
|
||||||
|
return(0);
|
||||||
|
free(*o);
|
||||||
|
*o= NULL;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext)
|
||||||
|
{
|
||||||
|
o->norock= !!(ext&1);
|
||||||
|
o->nojoliet= !!(ext&2);
|
||||||
|
o->noiso1999= !!(ext&4);
|
||||||
|
o->preferjoliet= !!(ext&8);
|
||||||
|
o->pretend_blank= !!(ext&16);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext)
|
||||||
|
{
|
||||||
|
*ext= (!!o->norock) | ((!!o->nojoliet)<<1) | ((!!o->noiso1999)<<2) |
|
||||||
|
((!!o->preferjoliet)<<3) | ((!!o->pretend_blank)<<4);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_set_default_perms(struct isoburn_read_opts *o,
|
||||||
|
uid_t uid, gid_t gid, mode_t mode)
|
||||||
|
{
|
||||||
|
o->uid= uid;
|
||||||
|
o->gid= gid;
|
||||||
|
o->mode= mode;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_get_default_perms(struct isoburn_read_opts *o,
|
||||||
|
uid_t *uid, gid_t *gid, mode_t *mode)
|
||||||
|
{
|
||||||
|
*uid= o->uid;
|
||||||
|
*gid= o->gid;
|
||||||
|
*mode= o->mode;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
||||||
|
char *input_charset)
|
||||||
|
{
|
||||||
|
o->input_charset= input_charset;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_igopt_get_in_charset(struct isoburn_read_opts *o,
|
||||||
|
char **input_charset)
|
||||||
|
{
|
||||||
|
*input_charset= o->input_charset;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||||
|
uint32_t *size, int *has_what)
|
||||||
|
{
|
||||||
|
*size= o->size;
|
||||||
|
*has_what= (!!o->hasRR) | ((!!o->hasJoliet)<<1) |
|
||||||
|
((!!o->hasIso1999)<<2) | ((!!o->hasElTorito)<<3);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
Options for image generation by libisofs and image transport to libburn.
|
||||||
|
*/
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
int isoburn_igopt_new(struct isoburn_imgen_opts **new_o, int flag)
|
||||||
{
|
{
|
||||||
struct isoburn_imgen_opts *o;
|
struct isoburn_imgen_opts *o;
|
||||||
|
@ -144,8 +144,54 @@ IsoDataSource *
|
|||||||
isoburn_data_source_new(struct burn_drive *d);
|
isoburn_data_source_new(struct burn_drive *d);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for image reading.
|
||||||
|
(Comments here may be outdated. API getter/setter function descriptions
|
||||||
|
may override the descriptions here. Any difference is supposed to be a
|
||||||
|
minor correction only.)
|
||||||
|
*/
|
||||||
|
struct isoburn_read_opts {
|
||||||
|
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
|
||||||
|
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
|
||||||
|
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
|
||||||
|
unsigned int preferjoliet:1;
|
||||||
|
/*< When both Joliet and RR extensions are present, the RR
|
||||||
|
* tree is used. If you prefer using Joliet, set this to 1. */
|
||||||
|
uid_t uid; /**< Default uid when no RR */
|
||||||
|
gid_t gid; /**< Default uid when no RR */
|
||||||
|
mode_t mode; /**< Default mode when no RR (only permissions) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input charset for RR file names. NULL to use default locale charset.
|
||||||
|
*/
|
||||||
|
char *input_charset;
|
||||||
|
|
||||||
|
/* modified by the function isoburn_read_image */
|
||||||
|
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
|
||||||
|
to 0 if not. */
|
||||||
|
unsigned int hasJoliet:1; /*< It will be set to 1 if Joliet extensions are
|
||||||
|
present, to 0 if not. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It will be set to 1 if the image is an ISO 9660:1999, i.e. it has
|
||||||
|
* a version 2 Enhanced Volume Descriptor.
|
||||||
|
*/
|
||||||
|
unsigned int hasIso1999:1;
|
||||||
|
|
||||||
|
/** It will be set to 1 if El-Torito boot record is present, to 0 if not.*/
|
||||||
|
unsigned int hasElTorito:1;
|
||||||
|
|
||||||
|
uint32_t size; /**< Will be filled with the size (in 2048 byte block) of
|
||||||
|
* the image, as reported in the PVM. */
|
||||||
|
unsigned int pretend_blank:1; /* always create empty image */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options for image generation by libisofs and image transport to libburn.
|
* Options for image generation by libisofs and image transport to libburn.
|
||||||
|
(Comments here may be outdated. API getter/setter function descriptions
|
||||||
|
may override the descriptions here. Any difference is supposed to be a
|
||||||
|
minor correction only.)
|
||||||
*/
|
*/
|
||||||
struct isoburn_imgen_opts {
|
struct isoburn_imgen_opts {
|
||||||
|
|
||||||
|
@ -23,13 +23,13 @@ The priciple of this frontend is that you may use any call of libisofs or
|
|||||||
libburn unless it has a isoburn_*() wrapper listed in the following function
|
libburn unless it has a isoburn_*() wrapper listed in the following function
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
E.g. call isoburn_initialize() rather than iso_init(); burn_initialize()
|
E.g. call isoburn_initialize() rather than iso_init(); burn_initialize();
|
||||||
and call isoburn_drive_scan_and_grab() rather than burn_drive_scan_and_grab().
|
and call isoburn_drive_scan_and_grab() rather than burn_drive_scan_and_grab().
|
||||||
But you may call burn_disc_get_profile() directly if you want to display
|
But you may call burn_disc_get_profile() directly if you want to display
|
||||||
the media type.
|
the media type.
|
||||||
|
|
||||||
The wrappers will transparently provide the necessary emulations which
|
The wrappers will transparently provide the necessary emulations which
|
||||||
are appropriate for particular target "drives" and media states.
|
are appropriate for particular target drives and media states.
|
||||||
To learn about them you have to read both API descriptions: the one of
|
To learn about them you have to read both API descriptions: the one of
|
||||||
the wrapper and the one of the underlying libburn or libisofs call.
|
the wrapper and the one of the underlying libburn or libisofs call.
|
||||||
|
|
||||||
@ -45,26 +45,24 @@ Both drive roles can be fulfilled by the same drive.
|
|||||||
Input can be a random access readable libburn drive:
|
Input can be a random access readable libburn drive:
|
||||||
optical media, regular files, block devices.
|
optical media, regular files, block devices.
|
||||||
Output can be any writeable libburn drive:
|
Output can be any writeable libburn drive:
|
||||||
writeable optical media in burner, writeable file objects (no directories).\
|
writeable optical media in burner, writeable file objects (no directories).
|
||||||
|
|
||||||
libburn needs rw-permissions to drive device file resp. file object.
|
libburn demands rw-permissions to drive device file resp. file object.
|
||||||
|
|
||||||
If the input drive provides a suitable ISO RockRidge image, then its tree
|
If the input drive provides a suitable ISO RockRidge image, then its tree
|
||||||
may be loaded into memory and can then be manipulated by libisofs API calls.
|
may be loaded into memory and can then be manipulated by libisofs API calls.
|
||||||
The loading is done by isoburn_read_image() under control of
|
The loading is done by isoburn_read_image() under control of
|
||||||
struct isoburn_read_opts
|
struct isoburn_read_opts which the application obtains from libisoburn.
|
||||||
|
It may be manipulated by the family of isoburn_ropt_set_*() functions.
|
||||||
>>> which the application obtains from libisoburn.
|
|
||||||
|
|
||||||
|
|
||||||
Writing of result images is controlled by libisofs related parameters
|
Writing of result images is controlled by libisofs related parameters
|
||||||
in struct isoburn_imgen_opts
|
in a struct isoburn_imgen_opts which the application obtains from libisoburn.
|
||||||
|
It may be manipulated by the family of isoburn_igopt_set_*() functions.
|
||||||
>>> which the application obtains from libisoburn.
|
|
||||||
|
|
||||||
All multi-session aspects are handled by libisoburn according to these
|
All multi-session aspects are handled by libisoburn according to these
|
||||||
settings. The application does not have to analyze media state and write
|
settings. The application does not have to analyze media state and write
|
||||||
job parameters.
|
job parameters. It rather states its desires which libisoburn tries to
|
||||||
|
fulfill, or else will refuse to start the write run.
|
||||||
|
|
||||||
Setup for Growing or Modifying
|
Setup for Growing or Modifying
|
||||||
|
|
||||||
@ -174,57 +172,112 @@ int isoburn_disc_erasable(struct burn_drive *d);
|
|||||||
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
void isoburn_disc_erase(struct burn_drive *drive, int fast);
|
||||||
|
|
||||||
|
|
||||||
/* >>> this goes to isoburn.h */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
|
||||||
/* >>> Opaque definition of isoburn_read_opts */
|
Options for image reading.
|
||||||
/* >>> Constructor, destructor, getters, setters. */
|
|
||||||
|
|
||||||
/**
|
An application shall create an option set object by isoburn_ropt_new(),
|
||||||
* Options for image reading.
|
program it by isoburn_ropt_set_*(), use it with isoburn_read_image(),
|
||||||
*/
|
and finally delete it by isoburn_ropt_destroy().
|
||||||
struct isoburn_read_opts {
|
|
||||||
unsigned int norock:1; /*< Do not read Rock Ridge extensions */
|
|
||||||
unsigned int nojoliet:1; /*< Do not read Joliet extensions */
|
|
||||||
unsigned int noiso1999:1; /*< Do not read ISO 9660:1999 enhanced tree */
|
|
||||||
unsigned int preferjoliet:1;
|
|
||||||
/*< When both Joliet and RR extensions are present, the RR
|
|
||||||
* tree is used. If you prefer using Joliet, set this to 1. */
|
|
||||||
uid_t uid; /**< Default uid when no RR */
|
|
||||||
gid_t gid; /**< Default uid when no RR */
|
|
||||||
mode_t mode; /**< Default mode when no RR (only permissions) */
|
|
||||||
|
|
||||||
/**
|
*/
|
||||||
* Input charset for RR file names. NULL to use default locale charset.
|
/* ----------------------------------------------------------------------- */
|
||||||
*/
|
|
||||||
char *input_charset;
|
|
||||||
|
|
||||||
/* modified by the function isoburn_read_image */
|
struct isoburn_read_opts;
|
||||||
unsigned int hasRR:1; /*< It will be set to 1 if RR extensions are present,
|
|
||||||
to 0 if not. */
|
|
||||||
unsigned int hasJoliet:1; /*< It will be set to 1 if Joliet extensions are
|
|
||||||
present, to 0 if not. */
|
|
||||||
|
|
||||||
/**
|
/** Produces a set of image read options, initialized with default values.
|
||||||
* It will be set to 1 if the image is an ISO 9660:1999, i.e. it has
|
@param o the newly created option set object
|
||||||
* a version 2 Enhanced Volume Descriptor.
|
@return 1=ok , <0 = failure
|
||||||
*/
|
*/
|
||||||
unsigned int hasIso1999:1;
|
int isoburn_ropt_new(struct isoburn_read_opts **o, int flag);
|
||||||
|
|
||||||
/** It will be set to 1 if El-Torito boot record is present, to 0 if not.*/
|
|
||||||
unsigned int hasElTorito:1;
|
|
||||||
|
|
||||||
uint32_t size; /**< Will be filled with the size (in 2048 byte block) of
|
/** Deletes an option set which was created by isoburn_ropt_new().
|
||||||
* the image, as reported in the PVM. */
|
@return 1= **o destroyed , 0= *o was already NULL (harmless)
|
||||||
unsigned int pretend_blank:1; /* always create empty image */
|
*/
|
||||||
};
|
int isoburn_ropt_destroy(struct isoburn_read_opts **o, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Which existing ISO 9660 extensions in the image to read or not to read.
|
||||||
|
Whether to read the content of an existing image at all.
|
||||||
|
The bits can be combined by | resp. inquired by &.
|
||||||
|
@param ext Bitfield:
|
||||||
|
bit0= norock
|
||||||
|
Do not read Rock Ridge extensions
|
||||||
|
bit1= nojoliet
|
||||||
|
Do not read Joliet extensions
|
||||||
|
bit2= noiso1999
|
||||||
|
Do not read ISO 9660:1999 enhanced tree
|
||||||
|
bit3= preferjoliet
|
||||||
|
When both Joliet and RR extensions are present, the RR
|
||||||
|
tree is used. If you prefer using Joliet, set this to 1.
|
||||||
|
bit4= pretend_blank
|
||||||
|
Always create empty image.Ignore any image on input drive.
|
||||||
|
*/
|
||||||
|
#define isoburn_ropt_norock 1
|
||||||
|
#define isoburn_ropt_nojoliet 2
|
||||||
|
#define isoburn_ropt_noiso1999 4
|
||||||
|
#define isoburn_ropt_preferjoliet 8
|
||||||
|
#define isoburn_ropt_pretend_blank 16
|
||||||
|
int isoburn_ropt_set_extensions(struct isoburn_read_opts *o, int ext);
|
||||||
|
int isoburn_ropt_get_extensions(struct isoburn_read_opts *o, int *ext);
|
||||||
|
|
||||||
|
|
||||||
|
/** Default attributes to use if no RockRidge extension gets loaded.
|
||||||
|
@param uid user id number (see /etc/passwd)
|
||||||
|
@param gid group id number (see /etc/group)
|
||||||
|
@param mode permissions (not file type) as of man 2 stat.
|
||||||
|
*/
|
||||||
|
int isoburn_ropt_set_default_perms(struct isoburn_read_opts *o,
|
||||||
|
uid_t uid, gid_t gid, mode_t mode);
|
||||||
|
int isoburn_ropt_get_default_perms(struct isoburn_read_opts *o,
|
||||||
|
uid_t *uid, gid_t *gid, mode_t *mode);
|
||||||
|
|
||||||
|
|
||||||
|
/** Input charset for RR file names. NULL to use default locale charset.
|
||||||
|
>>> what if not NULL ?
|
||||||
|
*/
|
||||||
|
int isoburn_ropt_set_input_charset(struct isoburn_read_opts *o,
|
||||||
|
char *input_charset);
|
||||||
|
int isoburn_ropt_get_input_charset(struct isoburn_read_opts *o,
|
||||||
|
char **input_charset);
|
||||||
|
|
||||||
|
|
||||||
|
/** After calling function isoburn_read_image() there are informations
|
||||||
|
available in the option set.
|
||||||
|
This info can be obtained as bits in parameter has_what. Like:
|
||||||
|
joliet_available = (has_what & isoburn_ropt_has_joliet);
|
||||||
|
@param size Number of image data blocks, 2048 bytes each.
|
||||||
|
@param has_what Bitfield:
|
||||||
|
bit0= has_rockridge
|
||||||
|
RockRidge extension info is available (POSIX filesystem)
|
||||||
|
bit1= has_joliet
|
||||||
|
Joliet extension info is available (suitable for MS-Windows)
|
||||||
|
bit2= has_iso1999
|
||||||
|
ISO version 2 Enhanced Volume Descriptor is available
|
||||||
|
>>> what is ISO 1999 good for ?
|
||||||
|
bit3= has_el_torito
|
||||||
|
El-Torito boot record is present
|
||||||
|
*/
|
||||||
|
#define isoburn_ropt_has_rockridge 1
|
||||||
|
#define isoburn_ropt_has_joliet 2
|
||||||
|
#define isoburn_ropt_has_iso1999 4
|
||||||
|
#define isoburn_ropt_has_el_torito 8
|
||||||
|
int isoburn_ropt_get_size_what(struct isoburn_read_opts *o,
|
||||||
|
uint32_t *size, int *has_what);
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/* End of Options for image reading */
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Options for image generation by libisofs and image transport to libburn.
|
Options for image generation by libisofs and image transport to libburn.
|
||||||
|
|
||||||
An application shall create an option set object by isoburn_igopt_new(),
|
An application shall create an option set by isoburn_igopt_new(),
|
||||||
program it by isoburn_igopt_set_*(), use it with either
|
program it by isoburn_igopt_set_*(), use it with either
|
||||||
isoburn_prepare_new_image() or isoburn_prepare_disc(), and finally delete
|
isoburn_prepare_new_image() or isoburn_prepare_disc(), and finally delete
|
||||||
it by isoburn_igopt_destroy().
|
it by isoburn_igopt_destroy().
|
||||||
@ -243,7 +296,7 @@ int isoburn_igopt_new(struct isoburn_imgen_opts **o, int flag);
|
|||||||
|
|
||||||
|
|
||||||
/** Deletes an option set which was created by isoburn_igopt_new().
|
/** Deletes an option set which was created by isoburn_igopt_new().
|
||||||
It is harmless to submit *o == NULL.
|
@return 1= **o destroyed , 0= *o was already NULL (harmless)
|
||||||
*/
|
*/
|
||||||
int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag);
|
int isoburn_igopt_destroy(struct isoburn_imgen_opts **o, int flag);
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.01.28.235717"
|
#define Xorriso_timestamP "2008.01.29.125956"
|
||||||
|
@ -211,7 +211,7 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
IsoImage *volset;
|
IsoImage *volset;
|
||||||
struct isoburn_read_opts ropts;
|
struct isoburn_read_opts *ropts;
|
||||||
struct burn_drive_info *dinfo= NULL;
|
struct burn_drive_info *dinfo= NULL;
|
||||||
struct burn_drive *drive= NULL;
|
struct burn_drive *drive= NULL;
|
||||||
|
|
||||||
@ -227,11 +227,16 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
|
|||||||
xorriso->loaded_volid[0]= 0;
|
xorriso->loaded_volid[0]= 0;
|
||||||
xorriso->volset_change_pending= 0;
|
xorriso->volset_change_pending= 0;
|
||||||
}
|
}
|
||||||
memset(&ropts, sizeof(ropts), 0);
|
|
||||||
ropts.pretend_blank= 1;
|
ret= isoburn_ropt_new(&ropts, 0);
|
||||||
ropts.input_charset= NULL;
|
if(ret<=0)
|
||||||
ret= isoburn_read_image(drive, &ropts, &volset);
|
return(ret);
|
||||||
|
/* Note: no return before isoburn_ropt_destroy() */
|
||||||
|
isoburn_ropt_set_extensions(ropts, isoburn_ropt_pretend_blank);
|
||||||
|
isoburn_ropt_set_input_charset(ropts, NULL);
|
||||||
|
ret= isoburn_read_image(drive, ropts, &volset);
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
isoburn_ropt_destroy(&ropts, 0);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
sprintf(xorriso->info_text, "Failed to create new empty ISO image object");
|
sprintf(xorriso->info_text, "Failed to create new empty ISO image object");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||||
@ -257,7 +262,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
struct burn_drive *drive, *out_drive, *in_drive;
|
struct burn_drive *drive, *out_drive, *in_drive;
|
||||||
enum burn_disc_status state;
|
enum burn_disc_status state;
|
||||||
IsoImage *volset = NULL;
|
IsoImage *volset = NULL;
|
||||||
struct isoburn_read_opts ropts;
|
struct isoburn_read_opts *ropts= NULL;
|
||||||
char adr_data[SfileadrL], *libburn_adr;
|
char adr_data[SfileadrL], *libburn_adr;
|
||||||
|
|
||||||
if((flag&3)==0) {
|
if((flag&3)==0) {
|
||||||
@ -367,6 +372,14 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
/* fill read opts */
|
/* fill read opts */
|
||||||
|
ret= isoburn_ropt_new(&ropts, 0);
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
isoburn_ropt_set_extensions(ropts, isoburn_ropt_noiso1999);
|
||||||
|
isoburn_ropt_set_default_perms(ropts, (uid_t) 0, (gid_t) 0, (mode_t) 0555);
|
||||||
|
isoburn_ropt_set_input_charset(ropts, NULL);
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
memset(&ropts, sizeof(ropts), 0);
|
memset(&ropts, sizeof(ropts), 0);
|
||||||
ropts.norock= 0;
|
ropts.norock= 0;
|
||||||
ropts.nojoliet= 0;
|
ropts.nojoliet= 0;
|
||||||
@ -377,9 +390,10 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
ropts.mode= 0555;
|
ropts.mode= 0555;
|
||||||
ropts.input_charset= NULL;
|
ropts.input_charset= NULL;
|
||||||
ropts.pretend_blank= 0;
|
ropts.pretend_blank= 0;
|
||||||
|
#endif /* NIX */
|
||||||
|
|
||||||
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
|
Xorriso_set_image_severities(xorriso, 1); /* No DEBUG messages */
|
||||||
if(isoburn_read_image(drive, &ropts, &volset) <= 0) {
|
if(isoburn_read_image(drive, ropts, &volset) <= 0) {
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
Xorriso_set_image_severities(xorriso, 0);
|
Xorriso_set_image_severities(xorriso, 0);
|
||||||
sprintf(xorriso->info_text,"Cannot read ISO image volset");
|
sprintf(xorriso->info_text,"Cannot read ISO image volset");
|
||||||
@ -411,12 +425,13 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
}
|
}
|
||||||
ret= 1+not_writeable;
|
ret= 1+not_writeable;
|
||||||
ex:
|
ex:
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
hret= Xorriso_give_up_drive(xorriso, flag&3);
|
hret= Xorriso_give_up_drive(xorriso, flag&3);
|
||||||
if(hret<ret)
|
if(hret<ret)
|
||||||
ret= hret;
|
ret= hret;
|
||||||
}
|
}
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
isoburn_ropt_destroy(&ropts, 0);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user