New API call isoburn_attach_volset(), changes with isoburn_read_volset()
This commit is contained in:
parent
58ac3ace5f
commit
556b40c264
@ -220,7 +220,7 @@ int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag)
|
||||
struct isoburn *o;
|
||||
|
||||
*pt= NULL;
|
||||
for(o= isoburn_list_start;o!=NULL;o= o->prev)
|
||||
for(o= isoburn_list_start;o!=NULL;o= o->next)
|
||||
if(o->drive==d) {
|
||||
*pt= o;
|
||||
return(1);
|
||||
|
@ -7,6 +7,7 @@
|
||||
libisofs related functions of libisoburn.
|
||||
|
||||
Copyright 2007 Vreixo Formoso Lopes <metalpain2002@yahoo.es>
|
||||
Thomas Schmitt <scdbackup@gmx.net>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -69,6 +70,7 @@ uint32_t iso_read_lsb(const uint8_t *buf, int bytes)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* API function. See libisoburn.h
|
||||
*/
|
||||
int isoburn_read_volset(struct burn_drive *d,
|
||||
@ -77,26 +79,29 @@ int isoburn_read_volset(struct burn_drive *d,
|
||||
{
|
||||
int ret;
|
||||
struct ecma119_read_opts ropts;
|
||||
enum burn_disc_status status;
|
||||
struct isoburn *o;
|
||||
enum burn_disc_status status= BURN_DISC_BLANK;
|
||||
struct isoburn *o= NULL;
|
||||
|
||||
if(d==NULL || read_opts==NULL || volset==NULL) {
|
||||
if(read_opts==NULL || volset==NULL) {
|
||||
|
||||
/* >>> program error */;
|
||||
|
||||
return(-1);
|
||||
}
|
||||
|
||||
if(d != NULL) {
|
||||
ret = isoburn_find_emulator(&o, d, 0);
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
|
||||
if (!o) {
|
||||
if (o == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
status = isoburn_disc_get_status(d);
|
||||
if (status == BURN_DISC_BLANK) {
|
||||
if(o->target_volset != NULL)
|
||||
iso_volset_free(o->target_volset);
|
||||
o->target_volset= NULL;
|
||||
}
|
||||
if (d == NULL || status == BURN_DISC_BLANK || read_opts->pretend_blank) {
|
||||
struct iso_volume *volume;
|
||||
struct iso_tree_node_dir *root;
|
||||
|
||||
@ -116,8 +121,10 @@ int isoburn_read_volset(struct burn_drive *d,
|
||||
if (!*volset)
|
||||
return -1;
|
||||
|
||||
if(o!=NULL) {
|
||||
o->target_volset = *volset;
|
||||
iso_volset_ref(o->target_volset); /*protects object from premature free*/
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -152,6 +159,27 @@ int isoburn_read_volset(struct burn_drive *d,
|
||||
}
|
||||
|
||||
|
||||
/* API function. See libisoburn.h
|
||||
*/
|
||||
int isoburn_attach_volset(struct burn_drive *d, struct iso_volset *volset)
|
||||
{
|
||||
int ret;
|
||||
struct isoburn *o;
|
||||
|
||||
if (volset == NULL)
|
||||
return -1;
|
||||
ret = isoburn_find_emulator(&o, d, 0);
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
if (o == NULL)
|
||||
return -1;
|
||||
if(o->target_volset != NULL)
|
||||
iso_volset_free(o->target_volset);
|
||||
o->target_volset = volset;
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* API function. See libisoburn.h
|
||||
*/
|
||||
int isoburn_activate_session(struct burn_drive *drive)
|
||||
@ -170,7 +198,7 @@ int isoburn_activate_session(struct burn_drive *drive)
|
||||
return 1;
|
||||
|
||||
ret = burn_random_access_write(drive, 0, (char*)o->target_iso_head,
|
||||
64*2048, 1);
|
||||
32*2048, 1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -104,6 +104,7 @@ struct isoburn_read_opts {
|
||||
present, to 0 if not. */
|
||||
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 */
|
||||
};
|
||||
|
||||
/**
|
||||
@ -189,21 +190,48 @@ struct isoburn_source_opts {
|
||||
/** Load the ISO filesystem directory tree from the media in the given drive.
|
||||
This will give libisoburn the base on which it can let libisofs perform
|
||||
image growing or image modification. The loaded volset gets attached
|
||||
to the drive object and is not publicly available.
|
||||
to the drive object and handed out to the application.
|
||||
Not a wrapper, but peculiar to libisoburn.
|
||||
@param d The drive which holds an existing ISO filesystem
|
||||
@param d The drive which holds an existing ISO filesystem or blank media.
|
||||
d is allowed to be NULL which produces an empty ISO image. In
|
||||
this case one has to call before writing isoburn_attach_volset()
|
||||
with the volset from this call and with the intended output
|
||||
drive.
|
||||
@param read_opts The read options which can be chosen by the application
|
||||
@param volset the volset that represents the image, if the disc is blacnk
|
||||
it will have no files
|
||||
@param volset the volset that represents the image, if the disc is blank
|
||||
it will have no files.
|
||||
This reference needs to be released via iso_volset_free() when
|
||||
it is not longer needed. The drive, if not NULL, will hold an
|
||||
own reference which it will release when it gets a new volset
|
||||
or when it gets released via isoburn_drive_release().
|
||||
@return <=0 error , 1 = success
|
||||
>>>>> error means damaged or unsupported image
|
||||
error code is stored in ecma119_read_opts in libisofs
|
||||
also error msgs are enqueued. Any need to pass them to usr? <<<<<<
|
||||
*/
|
||||
int isoburn_read_volset(struct burn_drive *d, struct isoburn_read_opts *read_opts,
|
||||
int isoburn_read_volset(struct burn_drive *d,
|
||||
struct isoburn_read_opts *read_opts,
|
||||
struct iso_volset **volset);
|
||||
|
||||
|
||||
/** Attach a ISO filesystem directory tree to a drive. This eventually releases
|
||||
the reference to the old volset attached to the drive.
|
||||
Caution: Use with care. It hardly makes sense to replace a volset that
|
||||
reflects a valid ISO image on media.
|
||||
This call is rather intended for writing a newly created and populated
|
||||
image to blank media. The use case in xorriso is to let a volset survive
|
||||
the change or demise of the outdev target drive.
|
||||
@param d The drive which shall be write target of the volset.
|
||||
@param volset The volset that represents the image to be written.
|
||||
This volset pointer MUST already be a valid reference suitable
|
||||
for iso_volset_free().
|
||||
It may have been obtained by appropriate libisofs calls or by
|
||||
isoburn_read_volset() with d==NULL.
|
||||
@return <=0 error , 1 = success
|
||||
*/
|
||||
int isoburn_attach_volset(struct burn_drive *d, struct iso_volset *volset);
|
||||
|
||||
|
||||
/** Obtain the start block number of the most recent session on media. In
|
||||
case of random access media this will always be 0. Succesfull return is
|
||||
not a guarantee that there is a ISO-9660 image at all. The call will fail,
|
||||
@ -348,19 +376,3 @@ void isoburn_finish(void);
|
||||
int isoburn_needs_emulation(struct burn_drive *drive);
|
||||
|
||||
|
||||
#ifdef Libburn_obsoleted_on_its_way_ouT
|
||||
|
||||
/** Caution: Use this with great care. It is not needed normally.
|
||||
|
||||
This call can set the nwa block number to an arbitrary value. If ever, do
|
||||
this before preparing the session by libisofs. The drive must be grabbed,
|
||||
though. This overrides the automated address computation. Call
|
||||
isoburn_disc_track_lba_nwa() afterwards to learn the effective new
|
||||
address which might be somewhat higher than set by parameter value.
|
||||
Wrapper for: burn_write_opts_set_start_byte (if ever)
|
||||
*/
|
||||
void isoburn_write_opts_set_start_byte(struct burn_write_opts *opts,
|
||||
off_t value);
|
||||
|
||||
#endif /* Libburn_obsoleted_on_its_way_ouT */
|
||||
|
||||
|
@ -202,12 +202,14 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* fill read opts */
|
||||
memset(&ropts, sizeof(ropts), 0);
|
||||
ropts.norock = 0;
|
||||
ropts.nojoliet = 0;
|
||||
ropts.preferjoliet = 0;
|
||||
ropts.uid = 0;
|
||||
ropts.gid = 0;
|
||||
ropts.mode = 0555;
|
||||
ropts.pretend_blank= 0;
|
||||
|
||||
if (isoburn_read_volset(drive, &ropts, &volset) <= 0) {
|
||||
fprintf(stderr, "Can't read volset\n");
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2007.11.11.154453"
|
||||
#define Xorriso_timestamP "2007.11.14.142904"
|
||||
|
Loading…
Reference in New Issue
Block a user