|
|
|
@ -185,12 +185,13 @@ int ecma119_writer_compute_data_blocks(IsoImageWriter *writer)
|
|
|
|
|
target = writer->target; |
|
|
|
|
|
|
|
|
|
/* compute position of directories */ |
|
|
|
|
iso_msg_debug(target->image, "Computing position of dir structure"); |
|
|
|
|
iso_msg_debug(target->image->messenger,
|
|
|
|
|
"Computing position of dir structure"); |
|
|
|
|
target->ndirs = 0; |
|
|
|
|
calc_dir_pos(target, target->root); |
|
|
|
|
|
|
|
|
|
/* compute length of pathlist */ |
|
|
|
|
iso_msg_debug(target->image, "Computing length of pathlist"); |
|
|
|
|
iso_msg_debug(target->image->messenger, "Computing length of pathlist"); |
|
|
|
|
path_table_size = calc_path_table_size(target->root); |
|
|
|
|
|
|
|
|
|
/* compute location for path tables */ |
|
|
|
@ -295,7 +296,7 @@ int ecma119_writer_write_vol_desc(IsoImageWriter *writer)
|
|
|
|
|
t = writer->target; |
|
|
|
|
image = t->image; |
|
|
|
|
|
|
|
|
|
iso_msg_debug(image, "Write Primary Volume Descriptor"); |
|
|
|
|
iso_msg_debug(image->messenger, "Write Primary Volume Descriptor"); |
|
|
|
|
|
|
|
|
|
memset(&vol, 0, sizeof(struct ecma119_pri_vol_desc)); |
|
|
|
|
|
|
|
|
@ -546,7 +547,7 @@ int write_path_tables(Ecma119Image *t)
|
|
|
|
|
size_t i, j, cur; |
|
|
|
|
Ecma119Node **pathlist; |
|
|
|
|
|
|
|
|
|
iso_msg_debug(t->image, "Writing ISO Path tables"); |
|
|
|
|
iso_msg_debug(t->image->messenger, "Writing ISO Path tables"); |
|
|
|
|
|
|
|
|
|
/* allocate temporal pathlist */ |
|
|
|
|
pathlist = malloc(sizeof(void*) * t->ndirs); |
|
|
|
@ -634,7 +635,8 @@ int ecma119_writer_create(Ecma119Image *target)
|
|
|
|
|
/* add this writer to image */ |
|
|
|
|
target->writers[target->nwriters++] = writer; |
|
|
|
|
|
|
|
|
|
iso_msg_debug(target->image, "Creating low level ECMA-119 tree..."); |
|
|
|
|
iso_msg_debug(target->image->messenger,
|
|
|
|
|
"Creating low level ECMA-119 tree..."); |
|
|
|
|
ret = ecma119_tree_create(target); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
return ret; |
|
|
|
@ -654,7 +656,7 @@ void *write_function(void *arg)
|
|
|
|
|
IsoImageWriter *writer; |
|
|
|
|
|
|
|
|
|
Ecma119Image *target = (Ecma119Image*)arg; |
|
|
|
|
iso_msg_debug(target->image, "Starting image writing..."); |
|
|
|
|
iso_msg_debug(target->image->messenger, "Starting image writing..."); |
|
|
|
|
|
|
|
|
|
target->bytes_written = (off_t) 0; |
|
|
|
|
target->percent_written = 0; |
|
|
|
@ -669,7 +671,7 @@ void *write_function(void *arg)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* write volume descriptors, one per writer */ |
|
|
|
|
iso_msg_debug(target->image, "Write volume descriptors"); |
|
|
|
|
iso_msg_debug(target->image->messenger, "Write volume descriptors"); |
|
|
|
|
for (i = 0; i < target->nwriters; ++i) { |
|
|
|
|
writer = target->writers[i]; |
|
|
|
|
res = writer->write_vol_desc(writer); |
|
|
|
@ -706,7 +708,7 @@ void *write_function(void *arg)
|
|
|
|
|
pthread_exit(NULL); |
|
|
|
|
|
|
|
|
|
write_error: ; |
|
|
|
|
iso_msg_fatal(target->image, LIBISO_WRITE_ERROR, |
|
|
|
|
iso_msg_fatal(target->image->messenger, LIBISO_WRITE_ERROR, |
|
|
|
|
"Image write error, code %d", res); |
|
|
|
|
iso_ring_buffer_writer_close(target->buffer); |
|
|
|
|
pthread_exit(NULL); |
|
|
|
@ -843,7 +845,7 @@ int ecma119_image_new(IsoImage *src, Ecma119WriteOpts *opts, Ecma119Image **img)
|
|
|
|
|
ret = pthread_create(&(target->wthread), &(target->th_attr), |
|
|
|
|
write_function, (void *) target); |
|
|
|
|
if (ret != 0) { |
|
|
|
|
iso_msg_fatal(target->image, LIBISO_THREAD_ERROR, |
|
|
|
|
iso_msg_fatal(target->image->messenger, LIBISO_THREAD_ERROR, |
|
|
|
|
"Cannot create writer thread"); |
|
|
|
|
ret = ISO_THREAD_ERROR; |
|
|
|
|
goto target_cleanup; |
|
|
|
@ -874,7 +876,8 @@ static int bs_read(struct burn_source *bs, unsigned char *buf, int size)
|
|
|
|
|
return size; |
|
|
|
|
} else if (ret < 0) { |
|
|
|
|
/* error */ |
|
|
|
|
iso_msg_fatal(t->image, LIBISO_READ_ERROR, "Error reading pipe"); |
|
|
|
|
iso_msg_fatal(t->image->messenger, LIBISO_READ_ERROR,
|
|
|
|
|
"Error reading buffer"); |
|
|
|
|
return -1; |
|
|
|
|
} else { |
|
|
|
|
/* EOF */ |
|
|
|
@ -898,9 +901,10 @@ static void bs_free_data(struct burn_source *bs)
|
|
|
|
|
/* wait until writer thread finishes */ |
|
|
|
|
pthread_join(target->wthread, NULL); |
|
|
|
|
|
|
|
|
|
iso_msg_debug(target->image, "Writer thread joined"); |
|
|
|
|
iso_msg_debug(target->image, "Ring buffer was %d times full and %d times " |
|
|
|
|
"empty", iso_ring_buffer_get_times_full(target->buffer), |
|
|
|
|
iso_msg_debug(target->image->messenger, "Writer thread joined"); |
|
|
|
|
iso_msg_debug(target->image->messenger,
|
|
|
|
|
"Ring buffer was %d times full and %d times empty",
|
|
|
|
|
iso_ring_buffer_get_times_full(target->buffer), |
|
|
|
|
iso_ring_buffer_get_times_empty(target->buffer)); |
|
|
|
|
|
|
|
|
|
/* now we can safety free target */ |
|
|
|
@ -975,8 +979,8 @@ int iso_write(Ecma119Image *target, void *buf, size_t count)
|
|
|
|
|
|
|
|
|
|
/* only report in 5% chunks */ |
|
|
|
|
if (percent >= target->percent_written + 5) { |
|
|
|
|
iso_msg_debug(target->image, "Processed %u of %u KB (%d %%)", |
|
|
|
|
kbw, kbt, percent); |
|
|
|
|
iso_msg_debug(target->image->messenger,
|
|
|
|
|
"Processed %u of %u KB (%d %%)", kbw, kbt, percent); |
|
|
|
|
target->percent_written = percent; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|