12 #include "../config.h"
32 #ifdef Xorriso_standalonE
34 #ifdef Xorriso_with_libjtE
35 #include "../libjte/libjte.h"
40 #ifdef Libisofs_with_libjtE
48 #define PATH_MAX Libisofs_default_path_maX
79 if (img == NULL || file == NULL || src == NULL) {
130 if (ret == 0 && (*src)->checksum_index > 0 &&
196 if (img == NULL ||
new == NULL || src == NULL) {
241 size_t i, size, is_external;
244 int (*inc_item)(
void *);
245 size_t omitted_count;
247 int (*include_item)(
void *),
250 if (writer == NULL) {
274 if (omitted_count > 0) {
276 "Cannot arrange content of data files in surely reproducible way");
279 t->
files, inc_item, &size);
281 if (filelist == NULL) {
291 for (i = 0; i < size; ++i) {
300 is_external = (file->
no_write == 0 &&
304 for (extent = 0; extent < file->
nsections - 1; ++extent) {
314 if (section_size <= 0) {
341 writer->
data = filelist;
354 if (writer == NULL) {
367 while ((file = filelist[i++]) != NULL) {
373 for (extent = 0; extent < file->
nsections; ++extent) {
431 char *name,
char *
buffer,
int flag)
433 int res, ret, was_error;
434 char *name_data = NULL;
435 char *buffer_data = NULL;
440 char md5[16], pre_md5[16];
441 int pre_md5_valid = 0;
444 #ifdef Libisofs_with_libjtE
468 for (stream = file->
stream; ; stream = inp) {
482 "File \"%s\" can't be opened. Filling with 0s.", name);
488 for (b = 0; b < nblocks; ++b) {
498 }
else if (res > 1) {
502 "Size of file \"%s\" has changed. It will be %s", name,
503 (res == 2 ?
"truncated" :
"padded with 0's"));
510 #ifdef LIBISOFS_VERBOSE_DEBUG
518 #ifdef Libisofs_with_libjtE
519 if (t->
opts->libjte_handle != NULL) {
542 for (b = 0; b < nblocks; ++b) {
577 "Read error in file %s.", name);
581 "Premature end of file %s.", name);
593 while (b++ < nblocks) {
625 "Content of file '%s' changed while it was written into the image.",
642 #ifdef Libisofs_with_libjtE
647 if (res <= 0 && ret >= 0)
668 if (writer == NULL) {
675 filelist = writer->
data;
690 while ((file = filelist[i++]) != NULL) {
694 "filesrc_writer: Skipping no_write-src [%.f , %.f]",
726 if (writer == NULL) {
IsoFileSrc ** iso_ecma119_to_filesrc_array(Ecma119Image *t, int(*include_item)(void *), size_t *size)
int iso_write(Ecma119Image *target, void *buf, size_t count)
#define MAX_ISO_FILE_SECTION_SIZE
static off_t file_size(struct burn_source *source)
static int filesrc_writer_free_data(IsoImageWriter *writer)
int iso_file_src_cmp(const void *n1, const void *n2)
static int shall_be_written_if_not_taken(void *arg)
int iso_file_src_create(Ecma119Image *img, IsoFile *file, IsoFileSrc **src)
int iso_file_src_writer_create(Ecma119Image *target)
static int filesrc_close(IsoFileSrc *file)
static int filesrc_make_md5(Ecma119Image *t, IsoFileSrc *file, char md5[16], int flag)
void iso_file_src_free(void *node)
static int filesrc_read(IsoFileSrc *file, char *buf, size_t count)
static int cmp_by_weight(const void *f1, const void *f2)
static int shall_be_written(void *arg)
static int filesrc_writer_compute_data_blocks(IsoImageWriter *writer)
off_t iso_file_src_get_size(IsoFileSrc *file)
int iso_filesrc_write_data(Ecma119Image *t, IsoFileSrc *file, char *name, char *buffer, int flag)
static int filesrc_writer_write_vol_desc(IsoImageWriter *writer)
int iso_file_src_add(Ecma119Image *img, IsoFileSrc *new, IsoFileSrc **src)
int filesrc_writer_pre_compute(IsoImageWriter *writer)
static int filesrc_open(IsoFileSrc *file)
static int filesrc_writer_write_data(IsoImageWriter *writer)
int iso_file_get_old_image_sections(IsoFile *file, int *section_count, struct iso_file_section **sections, int flag)
int checksum_cx_xinfo_func(void *data, int flag)
int checksum_md5_xinfo_func(void *data, int flag)
size_t iso_rbtree_count_array(IsoRBTree *tree, size_t initial_count, int(*include_item)(void *))
#define LIBISO_FREE_MEM(pt)
#define LIBISO_ALLOC_MEM(pt, typ, count)
int iso_rbtree_insert(IsoRBTree *tree, void *data, void **item)
void ** iso_rbtree_to_array(IsoRBTree *tree, int(*include_item)(void *), size_t *size)
#define ISO_FILE_CANT_WRITE
int iso_md5_end(void **md5_context, char result[16])
#define ISO_MD5_STREAM_CHANGE
IsoStream * iso_stream_get_input_stream(IsoStream *stream, int flag)
int iso_stream_open(IsoStream *stream)
int iso_node_get_xinfo(IsoNode *node, iso_node_xinfo_func proc, void **data)
off_t iso_stream_get_size(IsoStream *stream)
#define ISO_NOT_REPRODUCIBLE
#define ISO_LIBJTE_END_FAILED
int iso_md5_match(char first_md5[16], char second_md5[16])
void iso_stream_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id, ino_t *ino_id)
int iso_stream_cmp_ino(IsoStream *s1, IsoStream *s2, int flag)
void iso_stream_unref(IsoStream *stream)
#define ISO_LIBJTE_FILE_FAILED
int iso_md5_start(void **md5_context)
int iso_stream_close(IsoStream *stream)
int iso_md5_compute(void *md5_context, char *data, int datalen)
void iso_stream_ref(IsoStream *stream)
#define ISO_ASSERT_FAILURE
int libjte_end_data_file(struct libjte_env *o)
int libjte_begin_data_file(struct libjte_env *o, char *filename, int sector_size, off_t size)
int iso_report_errfile(char *path, int error_code, int os_errno, int flag)
int iso_libjte_forward_msgs(void *libjte_handle, int imgid, int errcode, int flag)
int iso_msg_submit(int imgid, int errcode, int causedby, const char *fmt,...)
void iso_msg_debug(int imgid, const char *fmt,...)
int iso_file_set_isofscx(IsoFile *file, unsigned int checksum_index, int flag)
int iso_stream_read_buffer(IsoStream *stream, char *buf, size_t count, size_t *got)
void iso_stream_get_file_name(IsoStream *stream, char *name)
int iso_stream_make_md5(IsoStream *stream, char md5[16], int flag)
struct iso_file_section * sections
unsigned int checksum_index
unsigned int from_old_session
int(* write_data)(IsoImageWriter *writer)
int(* compute_data_blocks)(IsoImageWriter *writer)
int(* write_vol_desc)(IsoImageWriter *writer)
int(* free_data)(IsoImageWriter *writer)
uint32_t empty_file_block
IsoImageWriter ** writers
unsigned int checksum_idx_counter
unsigned int md5_file_checksums