Some fixes in burn_source implementation
This commit is contained in:
parent
6546f1a197
commit
0224ad402d
@ -479,6 +479,7 @@ ecma119_target_new(struct iso_volset *volset,
|
|||||||
/* prepare for writing */
|
/* prepare for writing */
|
||||||
t->curblock = 0;
|
t->curblock = 0;
|
||||||
t->state = ECMA119_WRITE_SYSTEM_AREA;
|
t->state = ECMA119_WRITE_SYSTEM_AREA;
|
||||||
|
t->bytes_read = 2048;
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@ -863,30 +864,57 @@ write_data_chunk(struct ecma119_write_target *t, uint8_t *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bs_read(struct burn_source *bs, unsigned char *buf, int size)
|
bs_read_block(struct burn_source *bs)
|
||||||
{
|
{
|
||||||
struct ecma119_write_target *t = (struct ecma119_write_target*)bs->data;
|
struct ecma119_write_target *t = (struct ecma119_write_target*)bs->data;
|
||||||
|
|
||||||
if (size != t->block_size) {
|
|
||||||
printf("[ERROR] You can only read in %d chunks\n", t->block_size);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (t->curblock >= t->vol_space_size) {
|
if (t->curblock >= t->vol_space_size) {
|
||||||
/* total_size could be setted by libburn */
|
/* total_size could be setted by libburn */
|
||||||
if ( t->curblock >= (t->total_size / (off_t) t->block_size) ) {
|
if ( t->curblock < (t->total_size / (off_t) t->block_size) ) {
|
||||||
/* we pad the image */
|
/* we pad the image */
|
||||||
memset(buf, 0, size);
|
memset(t->buffer, 0, t->block_size);
|
||||||
return size;
|
t->curblock++;
|
||||||
|
return t->block_size;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (t->state_data_valid)
|
if (t->state_data_valid)
|
||||||
write_data_chunk(t, buf);
|
write_data_chunk(t, t->buffer);
|
||||||
else
|
else
|
||||||
writers[t->state](t, buf);
|
writers[t->state](t, t->buffer);
|
||||||
t->curblock++;
|
t->curblock++;
|
||||||
return size;
|
return t->block_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bs_read(struct burn_source *bs, unsigned char *buf, int size)
|
||||||
|
{
|
||||||
|
int ret = 0,summed_ret = 0;
|
||||||
|
struct ecma119_write_target *t = (struct ecma119_write_target*)bs->data;
|
||||||
|
|
||||||
|
/* make safe against partial buffer returns */
|
||||||
|
while (1) {
|
||||||
|
if (t->bytes_read == 2048) {
|
||||||
|
/* we need to read next block */
|
||||||
|
t->bytes_read = 0;
|
||||||
|
ret = bs_read_block(bs);
|
||||||
|
if (ret < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bytes_to_read = 2048 - t->bytes_read;
|
||||||
|
if (summed_ret + bytes_to_read > size) {
|
||||||
|
bytes_to_read = size - summed_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buf + summed_ret, t->buffer, bytes_to_read);
|
||||||
|
|
||||||
|
t->bytes_read += bytes_to_read;
|
||||||
|
summed_ret += bytes_to_read;
|
||||||
|
if (summed_ret >= size)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return summed_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static off_t
|
static off_t
|
||||||
|
@ -174,17 +174,14 @@ struct ecma119_write_target
|
|||||||
|
|
||||||
/* for writing out files */
|
/* for writing out files */
|
||||||
struct state_files {
|
struct state_files {
|
||||||
// off_t pos; /* The number of bytes we have written
|
|
||||||
// * so far in the current file.
|
|
||||||
// */
|
|
||||||
// off_t data_len;/* The number of bytes in the currently
|
|
||||||
// * open file.
|
|
||||||
// */
|
|
||||||
// FILE *fd; /* The currently open file. */
|
|
||||||
struct iso_file_src *src; /* source for reading from the file */
|
struct iso_file_src *src; /* source for reading from the file */
|
||||||
int file; /* The index in filelist that we are
|
int file; /* The index in filelist that we are
|
||||||
* currently writing (or about to write). */
|
* currently writing (or about to write). */
|
||||||
} state_files;
|
} state_files;
|
||||||
|
|
||||||
|
/* temp buffer for read functions */
|
||||||
|
uint8_t buffer[2048];
|
||||||
|
int bytes_read;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BP(a,b) [(b) - (a) + 1]
|
#define BP(a,b) [(b) - (a) + 1]
|
||||||
|
Loading…
Reference in New Issue
Block a user