Got rid of a cumbersome open-close cycle with burn_read_data() on stdio:

This commit is contained in:
Thomas Schmitt 2008-03-03 20:30:10 +00:00
parent 83931e0442
commit bcd939aefd
4 changed files with 11 additions and 3 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.02.28.132325" #define Cdrskin_timestamP "2008.03.03.202930"

View File

@ -439,6 +439,9 @@ int burn_drive_mark_unready(struct burn_drive *d)
burn_disc_free(d->disc); burn_disc_free(d->disc);
d->disc = NULL; d->disc = NULL;
} }
if (d->stdio_fd >= 0)
close (d->stdio_fd);
d->stdio_fd = -1;
return 1; return 1;
} }

View File

@ -642,7 +642,7 @@ struct burn_speed_descriptor {
This must be called before using any other functions in the library. It This must be called before using any other functions in the library. It
may be called more than once with no effect. may be called more than once with no effect.
It is possible to 'restart' the library by shutting it down and It is possible to 'restart' the library by shutting it down and
re-initializing it. This is necessary if you follow the older and re-initializing it. Once this was necessary if you follow the older and
more general way of accessing a drive via burn_drive_scan() and more general way of accessing a drive via burn_drive_scan() and
burn_drive_grab(). See burn_drive_scan_and_grab() with its strong burn_drive_grab(). See burn_drive_scan_and_grab() with its strong
urges and its explanations. urges and its explanations.

View File

@ -388,7 +388,10 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
#define O_LARGEFILE 0 #define O_LARGEFILE 0
#endif #endif
fd = open(d->devname, O_RDONLY | O_LARGEFILE); fd = d->stdio_fd;
if (fd < 0)
d->stdio_fd = fd =
open(d->devname, O_RDONLY | O_LARGEFILE);
if (fd == -1) { if (fd == -1) {
if (errno != ENOENT || !(flag & 2)) if (errno != ENOENT || !(flag & 2))
libdax_msgs_submit(libdax_messenger, libdax_msgs_submit(libdax_messenger,
@ -478,8 +481,10 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
ret = 1; ret = 1;
ex:; ex:;
/* <<< let it open until drive is given up or writing shall happen
if (fd != -1) if (fd != -1)
close(fd); close(fd);
*/
d->buffer = NULL; d->buffer = NULL;
d->busy = BURN_DRIVE_IDLE; d->busy = BURN_DRIVE_IDLE;
return ret; return ret;