Compare commits
2 Commits
be039ff191
...
31e8f5cf0e
Author | SHA1 | Date | |
---|---|---|---|
31e8f5cf0e | |||
2a977cfc4b |
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2021.01.30.153517"
|
#define Cdrskin_timestamP "2021.02.28.121943"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2020 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -375,8 +375,8 @@ static int burn_drive__is_rdwr(char *fname, int *stat_ret,
|
|||||||
else if (is_rdwr)
|
else if (is_rdwr)
|
||||||
ret = burn_os_stdio_capacity(fname, 0, &read_size);
|
ret = burn_os_stdio_capacity(fname, 0, &read_size);
|
||||||
if (ret <= 0 ||
|
if (ret <= 0 ||
|
||||||
read_size / (off_t) 2048 >= (off_t) 0x7ffffff0)
|
read_size >= BURN_DRIVE_MAX_BYTES)
|
||||||
read_size = (off_t) 0x7ffffff0 * (off_t) 2048;
|
read_size = BURN_DRIVE_MAX_BYTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_rdwr && fd >= 0) {
|
if (is_rdwr && fd >= 0) {
|
||||||
@ -451,10 +451,10 @@ int burn_drive_grab_stdio(struct burn_drive *d, int flag)
|
|||||||
if (stat_ret != -1 && S_ISREG(stbuf.st_mode) &&
|
if (stat_ret != -1 && S_ISREG(stbuf.st_mode) &&
|
||||||
stbuf.st_size > 0) {
|
stbuf.st_size > 0) {
|
||||||
d->status = BURN_DISC_APPENDABLE;
|
d->status = BURN_DISC_APPENDABLE;
|
||||||
if (stbuf.st_size / (off_t) 2048
|
if (stbuf.st_size >= BURN_DRIVE_MAX_BYTES) {
|
||||||
>= 0x7ffffff0) {
|
|
||||||
d->status = BURN_DISC_FULL;
|
d->status = BURN_DISC_FULL;
|
||||||
d->role_5_nwa = 0x7ffffff0;
|
d->role_5_nwa = (off_t) BURN_DRIVE_MAX_BYTES /
|
||||||
|
(off_t) 2048;
|
||||||
} else
|
} else
|
||||||
d->role_5_nwa = stbuf.st_size / 2048 +
|
d->role_5_nwa = stbuf.st_size / 2048 +
|
||||||
!!(stbuf.st_size % 2048);
|
!!(stbuf.st_size % 2048);
|
||||||
@ -1782,8 +1782,7 @@ int burn_drive_grab_dummy(struct burn_drive_info *drive_infos[], char *fname)
|
|||||||
{
|
{
|
||||||
int ret = -1, role = 0, fd;
|
int ret = -1, role = 0, fd;
|
||||||
int is_rdwr = 0, stat_ret = -1;
|
int is_rdwr = 0, stat_ret = -1;
|
||||||
/* divided by 512 it needs to fit into a signed long integer */
|
off_t size = BURN_DRIVE_MAX_BYTES;
|
||||||
off_t size = ((off_t) (512 * 1024 * 1024 - 1) * (off_t) 2048);
|
|
||||||
off_t read_size = -1;
|
off_t read_size = -1;
|
||||||
struct burn_drive *d= NULL, *regd_d;
|
struct burn_drive *d= NULL, *regd_d;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
@ -1859,10 +1858,11 @@ int burn_drive_grab_dummy(struct burn_drive_info *drive_infos[], char *fname)
|
|||||||
(burn_drive_role_4_allowed & 8)) {
|
(burn_drive_role_4_allowed & 8)) {
|
||||||
d->status = BURN_DISC_APPENDABLE;
|
d->status = BURN_DISC_APPENDABLE;
|
||||||
d->block_types[BURN_WRITE_SAO] = 0;
|
d->block_types[BURN_WRITE_SAO] = 0;
|
||||||
if (stbuf.st_size / (off_t) 2048
|
if (stbuf.st_size > BURN_DRIVE_MAX_BYTES) {
|
||||||
>= 0x7ffffff0) {
|
|
||||||
d->status = BURN_DISC_FULL;
|
d->status = BURN_DISC_FULL;
|
||||||
d->role_5_nwa = 0x7ffffff0;
|
d->role_5_nwa =
|
||||||
|
(off_t) BURN_DRIVE_MAX_BYTES /
|
||||||
|
(off_t) 2048; ;
|
||||||
} else
|
} else
|
||||||
d->role_5_nwa = stbuf.st_size / 2048 +
|
d->role_5_nwa = stbuf.st_size / 2048 +
|
||||||
!!(stbuf.st_size % 2048);
|
!!(stbuf.st_size % 2048);
|
||||||
@ -2727,7 +2727,7 @@ off_t burn_disc_available_space(struct burn_drive *d,
|
|||||||
if (ret != 1)
|
if (ret != 1)
|
||||||
bytes = d->media_capacity_remaining;
|
bytes = d->media_capacity_remaining;
|
||||||
if (bytes <= 0)
|
if (bytes <= 0)
|
||||||
bytes = (off_t) (512 * 1024 * 1024 - 1) * (off_t) 2048;
|
bytes = BURN_DRIVE_MAX_BYTES;
|
||||||
if (bytes != d->media_capacity_remaining)
|
if (bytes != d->media_capacity_remaining)
|
||||||
burn_drive_set_media_capacity_remaining(d, bytes);
|
burn_drive_set_media_capacity_remaining(d, bytes);
|
||||||
} else {
|
} else {
|
||||||
@ -3410,8 +3410,8 @@ int burn_drive_find_by_thread_pid(struct burn_drive **d, pid_t pid,
|
|||||||
*/
|
*/
|
||||||
int burn_drive_set_media_capacity_remaining(struct burn_drive *d, off_t value)
|
int burn_drive_set_media_capacity_remaining(struct burn_drive *d, off_t value)
|
||||||
{
|
{
|
||||||
if (value / (off_t) 2048 > (off_t) 0x7ffffff0)
|
if (value > BURN_DRIVE_MAX_BYTES)
|
||||||
value = ((off_t) 0x7ffffff0) * (off_t) 2048;
|
value = BURN_DRIVE_MAX_BYTES;
|
||||||
d->media_capacity_remaining = value;
|
d->media_capacity_remaining = value;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -170,4 +170,11 @@ int burn_drive_has_feature(struct burn_drive *d, int feature_code,
|
|||||||
|
|
||||||
int burn_drive_grab_stdio(struct burn_drive *d, int flag);
|
int burn_drive_grab_stdio(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
|
/* ts C10213 */
|
||||||
|
/* The size of limitless or oversized devices as pseudo drives */
|
||||||
|
/* Do not change this value because of its meaning to
|
||||||
|
burn_drive.media_read_capacity in libburn/transport.h
|
||||||
|
*/
|
||||||
|
#define BURN_DRIVE_MAX_BYTES ((off_t) (0x7ffffff0) * (off_t) 2048)
|
||||||
|
|
||||||
#endif /* __DRIVE */
|
#endif /* __DRIVE */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* libdax_msgs
|
/* libdax_msgs
|
||||||
Message handling facility of libburn and libisofs.
|
Message handling facility of libburn and libisofs.
|
||||||
Copyright (C) 2006-2016 Thomas Schmitt <scdbackup@gmx.net>,
|
Copyright (C) 2006-2021 Thomas Schmitt <scdbackup@gmx.net>,
|
||||||
provided under GPL version 2 or later.
|
provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -616,6 +616,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x000201ab (WARN,HIGH) = Leaving burn_source_fifo object undisposed
|
0x000201ab (WARN,HIGH) = Leaving burn_source_fifo object undisposed
|
||||||
0x000201ac (NOTE,HIGH) = Drive currently does not offer Stream Recording
|
0x000201ac (NOTE,HIGH) = Drive currently does not offer Stream Recording
|
||||||
0x000201ad (NOTE,HIGH) = WRITE commands have been repeated
|
0x000201ad (NOTE,HIGH) = WRITE commands have been repeated
|
||||||
|
0x000201ae (FAILURE,HIGH) = Track size exceeds 4 TiB - 32 KiB
|
||||||
|
|
||||||
|
|
||||||
libdax_audioxtr:
|
libdax_audioxtr:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2016 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -194,6 +194,8 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
|
|||||||
|
|
||||||
inp_block_size = burn_sector_length(track->mode);
|
inp_block_size = burn_sector_length(track->mode);
|
||||||
track_blocks = burn_track_get_sectors_2(track, 1);
|
track_blocks = burn_track_get_sectors_2(track, 1);
|
||||||
|
if (track_blocks < 0)
|
||||||
|
track_blocks = 0;
|
||||||
missing = track_blocks * inp_block_size - track->sourcecount;
|
missing = track_blocks * inp_block_size - track->sourcecount;
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"Premature end of input encountered. Missing: %.f bytes",
|
"Premature end of input encountered. Missing: %.f bytes",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -533,6 +533,12 @@ int burn_track_get_sectors_2(struct burn_track *t, int flag)
|
|||||||
if (t->entry->extensions_valid & 1)
|
if (t->entry->extensions_valid & 1)
|
||||||
size = ((off_t) t->entry->track_blocks) * (off_t) 2048;
|
size = ((off_t) t->entry->track_blocks) * (off_t) 2048;
|
||||||
}
|
}
|
||||||
|
if (size > ((off_t) 0x7ffffff0) * (off_t) 2048) {
|
||||||
|
libdax_msgs_submit(libdax_messenger, -1, 0x000201ae,
|
||||||
|
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Track size exceeds 4 TiB - 32 KiB", 0, 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
sectors = size / seclen;
|
sectors = size / seclen;
|
||||||
if (size % seclen)
|
if (size % seclen)
|
||||||
sectors++;
|
sectors++;
|
||||||
@ -589,13 +595,22 @@ int burn_track_set_fillup(struct burn_track *t, int fill_up_media)
|
|||||||
*/
|
*/
|
||||||
int burn_track_apply_fillup(struct burn_track *t, off_t max_size, int flag)
|
int burn_track_apply_fillup(struct burn_track *t, off_t max_size, int flag)
|
||||||
{
|
{
|
||||||
int max_sectors, ret = 2;
|
int max_sectors, ret = 2, track_sectors;
|
||||||
char msg[80];
|
char msg[80];
|
||||||
|
|
||||||
if (t->fill_up_media <= 0)
|
if (t->fill_up_media <= 0)
|
||||||
return 2;
|
return 2;
|
||||||
|
if (max_size > (off_t) 0x7ffffff0 * (off_t) 2048) {
|
||||||
|
libdax_msgs_submit(libdax_messenger, -1, 0x000201ae,
|
||||||
|
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
"Track size exceeds 4 TiB - 32 KiB", 0, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
max_sectors = max_size / 2048;
|
max_sectors = max_size / 2048;
|
||||||
if (burn_track_get_sectors(t) < max_sectors || (flag & 1)) {
|
track_sectors = burn_track_get_sectors(t);
|
||||||
|
if (track_sectors < 0)
|
||||||
|
return 0;
|
||||||
|
if (track_sectors < max_sectors || (flag & 1)) {
|
||||||
sprintf(msg, "Setting total track size to %ds (payload %ds)\n",
|
sprintf(msg, "Setting total track size to %ds (payload %ds)\n",
|
||||||
max_sectors & 0x7fffffff,
|
max_sectors & 0x7fffffff,
|
||||||
(int) ((t->source->get_size(t->source) / 2048)
|
(int) ((t->source->get_size(t->source) / 2048)
|
||||||
@ -665,10 +680,14 @@ int burn_track_get_shortage(struct burn_track *t)
|
|||||||
|
|
||||||
int burn_session_get_sectors(struct burn_session *s)
|
int burn_session_get_sectors(struct burn_session *s)
|
||||||
{
|
{
|
||||||
int sectors = 0, i;
|
int sectors = 0, i, track_sectors;
|
||||||
|
|
||||||
for (i = 0; i < s->tracks; i++)
|
for (i = 0; i < s->tracks; i++) {
|
||||||
sectors += burn_track_get_sectors(s->track[i]);
|
track_sectors = burn_track_get_sectors(s->track[i]);
|
||||||
|
if (track_sectors < 0)
|
||||||
|
track_sectors = 0;
|
||||||
|
sectors += track_sectors;
|
||||||
|
}
|
||||||
return sectors;
|
return sectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,7 +373,9 @@ struct burn_drive
|
|||||||
|
|
||||||
/* ts A81210 : Upper limit of readable data size,
|
/* ts A81210 : Upper limit of readable data size,
|
||||||
0x7fffffff = unknown
|
0x7fffffff = unknown
|
||||||
0x7ffffff0 = 32 bit overflow, or unknown stdio size
|
0x7ffffff0 = BURN_DRIVE_MAX_BYTES / 2048
|
||||||
|
possibly truncated to prevent 32 bit
|
||||||
|
overflow, or unknown stdio size
|
||||||
*/
|
*/
|
||||||
int media_read_capacity;
|
int media_read_capacity;
|
||||||
/* ts B60305 : Whether READ CAPACITY of CD is credible:
|
/* ts B60305 : Whether READ CAPACITY of CD is credible:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2017 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -630,6 +630,8 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o,
|
|||||||
track length.
|
track length.
|
||||||
*/
|
*/
|
||||||
track_length = burn_track_get_sectors_2(tar[i], 1);
|
track_length = burn_track_get_sectors_2(tar[i], 1);
|
||||||
|
if (track_length < 0)
|
||||||
|
goto failed;
|
||||||
if (track_length < 300 && !burn_track_is_open_ended(tar[i])) {
|
if (track_length < 300 && !burn_track_is_open_ended(tar[i])) {
|
||||||
track_length = 300;
|
track_length = 300;
|
||||||
if (!tar[i]->pad)
|
if (!tar[i]->pad)
|
||||||
@ -1203,6 +1205,8 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
/* user data */
|
/* user data */
|
||||||
|
|
||||||
sectors = burn_track_get_sectors_2(t, 1);
|
sectors = burn_track_get_sectors_2(t, 1);
|
||||||
|
if (sectors < 0)
|
||||||
|
{ ret = 0; goto ex; }
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
burn_disc_init_track_status(o, s, t, tnum, sectors);
|
burn_disc_init_track_status(o, s, t, tnum, sectors);
|
||||||
@ -1591,6 +1595,8 @@ int burn_disc_open_track_dvd_minus_r(struct burn_write_opts *o,
|
|||||||
if (o->write_type == BURN_WRITE_SAO) { /* DAO */
|
if (o->write_type == BURN_WRITE_SAO) { /* DAO */
|
||||||
size = ((off_t) burn_track_get_sectors_2(s->track[tnum], 1))
|
size = ((off_t) burn_track_get_sectors_2(s->track[tnum], 1))
|
||||||
* (off_t) 2048;
|
* (off_t) 2048;
|
||||||
|
if (size < 0)
|
||||||
|
{ret = 0; goto ex;}
|
||||||
|
|
||||||
/* Eventually round track size up to write chunk */
|
/* Eventually round track size up to write chunk */
|
||||||
if (o->obs_pad && (size % o->obs))
|
if (o->obs_pad && (size % o->obs))
|
||||||
@ -1640,6 +1646,8 @@ int burn_disc_open_track_dvd_plus_r(struct burn_write_opts *o,
|
|||||||
/* Reserve track */
|
/* Reserve track */
|
||||||
size = ((off_t) burn_track_get_sectors_2(s->track[tnum], 1))
|
size = ((off_t) burn_track_get_sectors_2(s->track[tnum], 1))
|
||||||
* (off_t) 2048;
|
* (off_t) 2048;
|
||||||
|
if (size < 0)
|
||||||
|
{ret = 0; goto ex;}
|
||||||
if (o->obs_pad) {
|
if (o->obs_pad) {
|
||||||
/* Round track size up to write chunk size */
|
/* Round track size up to write chunk size */
|
||||||
/* o->obs should be 32k or 64k already. But 32k
|
/* o->obs should be 32k or 64k already. But 32k
|
||||||
@ -1932,6 +1940,8 @@ int burn_dvd_write_track(struct burn_write_opts *o,
|
|||||||
track_open = 1;
|
track_open = 1;
|
||||||
|
|
||||||
sectors = burn_track_get_sectors_2(t, 1);
|
sectors = burn_track_get_sectors_2(t, 1);
|
||||||
|
if (sectors < 0)
|
||||||
|
{ret = 0; goto ex;}
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
/* (offset padding is done within sector_data()) */
|
/* (offset padding is done within sector_data()) */
|
||||||
@ -2835,6 +2845,8 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
BURN_ALLOC_MEM(buf, char, bufsize);
|
BURN_ALLOC_MEM(buf, char, bufsize);
|
||||||
|
|
||||||
sectors = burn_track_get_sectors_2(t, 1);
|
sectors = burn_track_get_sectors_2(t, 1);
|
||||||
|
if (sectors < 0)
|
||||||
|
{ret = 0; goto ex;}
|
||||||
burn_disc_init_track_status(o, s, t, tnum, sectors);
|
burn_disc_init_track_status(o, s, t, tnum, sectors);
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user