Equipped all non-system-dependent open(2) calls with O_BINARY

This commit is contained in:
Thomas Schmitt 2014-11-26 16:42:56 +00:00
parent ad688b85eb
commit 0b110821f6
12 changed files with 85 additions and 29 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2014.11.23.190942" #define Cdrskin_timestamP "2014.11.26.164119"

View File

@ -50,7 +50,9 @@ static int ddlpa_debug_mode = 1;
#ifndef O_LARGEFILE #ifndef O_LARGEFILE
#define O_LARGEFILE 0 #define O_LARGEFILE 0
#endif #endif
#ifndef O_BINARY
#define O_BINARY 0
#endif
/* ----------------------- private -------------------- */ /* ----------------------- private -------------------- */
@ -173,7 +175,7 @@ static int ddlpa_occupy(struct ddlpa_lock *o, char *path, int *fd,
int ret, o_flags, o_rw, l_type; int ret, o_flags, o_rw, l_type;
char *o_rwtext; char *o_rwtext;
o_flags = o->o_flags | O_NDELAY; o_flags = o->o_flags | O_NDELAY | O_BINARY;
if(!no_o_excl) if(!no_o_excl)
o_flags |= O_EXCL; o_flags |= O_EXCL;
o_rw = (o_flags) & (O_RDONLY | O_WRONLY | O_RDWR); o_rw = (o_flags) & (O_RDONLY | O_WRONLY | O_RDWR);
@ -216,7 +218,7 @@ static int ddlpa_occupy(struct ddlpa_lock *o, char *path, int *fd,
static int ddlpa_obtain_scsi_adr(struct ddlpa_lock *o, char *path, static int ddlpa_obtain_scsi_adr(struct ddlpa_lock *o, char *path,
int *bus, int *host, int *channel, int *id, int *lun) int *bus, int *host, int *channel, int *id, int *lun)
{ {
int fd, ret, open_mode = O_RDONLY | O_NDELAY; int fd, ret, open_mode = O_RDONLY | O_NDELAY | O_BINARY;
struct my_scsi_idlun { struct my_scsi_idlun {
int x; int x;
int host_unique_id; int host_unique_id;
@ -550,7 +552,8 @@ usage:;
} else { } else {
/* /*
This substitutes for: This substitutes for:
fd = open(my_path, O_RDWR | O_EXCL | O_LARGEFILE); fd = open(my_path,
O_RDWR | O_EXCL | O_LARGEFILE | O_BINARY);
*/ */

View File

@ -26,6 +26,12 @@
#include <pthread.h> #include <pthread.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "libburn.h" #include "libburn.h"
#include "init.h" #include "init.h"
#include "drive.h" #include "drive.h"
@ -1638,17 +1644,17 @@ static int burn_role_by_access(char *fname, int flag)
#endif #endif
int fd; int fd;
fd = open(fname, O_RDWR | O_LARGEFILE); fd = open(fname, O_RDWR | O_LARGEFILE | O_BINARY);
if (fd != -1) { if (fd != -1) {
close(fd); close(fd);
return 2; return 2;
} }
fd = open(fname, O_RDONLY | O_LARGEFILE); fd = open(fname, O_RDONLY | O_LARGEFILE | O_BINARY);
if (fd != -1) { if (fd != -1) {
close(fd); close(fd);
return 4; return 4;
} }
fd = open(fname, O_WRONLY | O_LARGEFILE); fd = open(fname, O_WRONLY | O_LARGEFILE | O_BINARY);
if (fd != -1) { if (fd != -1) {
close(fd); close(fd);
return 5; return 5;

View File

@ -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 - 2010 Thomas Schmitt <scdbackup@gmx.net> Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
*/ */
@ -22,6 +22,11 @@
#include <time.h> #include <time.h>
#include <pthread.h> #include <pthread.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "source.h" #include "source.h"
#include "libburn.h" #include "libburn.h"
#include "file.h" #include "file.h"
@ -121,11 +126,11 @@ struct burn_source *burn_file_source_new(const char *path, const char *subpath)
if (!path) if (!path)
return NULL; return NULL;
fd1 = open(path, O_RDONLY); fd1 = open(path, O_RDONLY | O_BINARY);
if (fd1 == -1) if (fd1 == -1)
return NULL; return NULL;
if (subpath != NULL) { if (subpath != NULL) {
fd2 = open(subpath, O_RDONLY); fd2 = open(subpath, O_RDONLY | O_BINARY);
if (fd2 == -1) { if (fd2 == -1) {
close(fd1); close(fd1);
return NULL; return NULL;
@ -945,7 +950,7 @@ int burn_drive_extract_audio(struct burn_drive *drive,
BURN_ALLOC_MEM(msg, char, 4096); BURN_ALLOC_MEM(msg, char, 4096);
BURN_ALLOC_MEM(buf, char, 24 * 2352); BURN_ALLOC_MEM(buf, char, 24 * 2352);
fd = open(target_path, O_WRONLY | O_CREAT, fd = open(target_path, O_WRONLY | O_CREAT | O_BINARY,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd == -1) { if (fd == -1) {
sprintf(msg, "Cannot open disk file for writing: %.4000s", sprintf(msg, "Cannot open disk file for writing: %.4000s",

View File

@ -17,6 +17,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "libdax_msgs.h" #include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger; extern struct libdax_msgs *libdax_messenger;
@ -90,7 +94,7 @@ static int libdax_audioxtr_open(struct libdax_audioxtr *o, int flag)
if(strcmp(o->path,"-")==0) if(strcmp(o->path,"-")==0)
o->fd= 0; o->fd= 0;
else else
o->fd= open(o->path, O_RDONLY); o->fd= open(o->path, O_RDONLY | O_BINARY);
if(o->fd<0) { if(o->fd<0) {
sprintf(msg,"Cannot open audio source file : %s",o->path); sprintf(msg,"Cannot open audio source file : %s",o->path);
libdax_msgs_submit(libdax_messenger,-1,0x00020200, libdax_msgs_submit(libdax_messenger,-1,0x00020200,

View File

@ -21,6 +21,11 @@
#include <pthread.h> #include <pthread.h>
#include <ctype.h> #include <ctype.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "error.h" #include "error.h"
#include "sector.h" #include "sector.h"
#include "libburn.h" #include "libburn.h"
@ -942,7 +947,8 @@ fprintf(stderr, "libburn_DEBUG: buffer sectors= %d bytes= %d\n",
static int tee_fd= -1; static int tee_fd= -1;
if(tee_fd==-1) if(tee_fd==-1)
tee_fd= open("/tmp/libburn_sg_written", tee_fd= open("/tmp/libburn_sg_written",
O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
S_IRUSR | S_IWUSR);
#endif /* Libburn_log_in_and_out_streaM */ #endif /* Libburn_log_in_and_out_streaM */
mmc_start_if_needed(d, 0); mmc_start_if_needed(d, 0);

View File

@ -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 - 2012 Thomas Schmitt <scdbackup@gmx.net> Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
*/ */
@ -22,6 +22,11 @@
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "sector.h" #include "sector.h"
#include "libburn.h" #include "libburn.h"
#include "drive.h" #include "drive.h"
@ -521,7 +526,8 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
fd = d->stdio_fd; fd = d->stdio_fd;
if (fd < 0) if (fd < 0)
d->stdio_fd = fd = d->stdio_fd = fd =
open(d->devname, O_RDONLY | O_LARGEFILE); open(d->devname,
O_RDONLY | O_LARGEFILE | O_BINARY);
if (fd == -1) { if (fd == -1) {
if (errno == EACCES && (flag & 2)) { if (errno == EACCES && (flag & 2)) {
if (!(flag & 8)) if (!(flag & 8))

View File

@ -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 - 2011 Thomas Schmitt <scdbackup@gmx.net> Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
*/ */
@ -40,6 +40,10 @@ extern struct libdax_msgs *libdax_messenger;
#include <fcntl.h> #include <fcntl.h>
#endif /* Libburn_log_in_and_out_streaM */ #endif /* Libburn_log_in_and_out_streaM */
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
/*static unsigned char isrc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";*/ /*static unsigned char isrc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";*/
@ -109,7 +113,8 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
static int tee_fd= -1; static int tee_fd= -1;
if(tee_fd==-1) if(tee_fd==-1)
tee_fd= open("/tmp/libburn_sg_readin", tee_fd= open("/tmp/libburn_sg_readin",
O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
S_IRUSR | S_IWUSR);
#endif /* Libburn_log_in_and_out_streaM */ #endif /* Libburn_log_in_and_out_streaM */

View File

@ -35,6 +35,11 @@ Present implementation: default dummy which enables libburn only to work
#include <sys/statvfs.h> #include <sys/statvfs.h>
#endif /* Libburn_os_has_stavtfS */ #endif /* Libburn_os_has_stavtfS */
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "transport.h" #include "transport.h"
#include "drive.h" #include "drive.h"
#include "sg.h" #include "sg.h"
@ -277,7 +282,7 @@ int burn_os_stdio_capacity(char *path, off_t write_start, off_t *bytes)
long blocks; long blocks;
blocks = *bytes / 512; blocks = *bytes / 512;
fd = open(path, open_mode); fd = open(path, open_mode | O_BINARY);
if (fd == -1) if (fd == -1)
{ret = -2; goto ex;} {ret = -2; goto ex;}
ret = ioctl(fd, BLKGETSIZE, &blocks); ret = ioctl(fd, BLKGETSIZE, &blocks);
@ -330,7 +335,7 @@ int burn_os_open_track_src(char *path, int open_flags, int flag)
{ {
int fd; int fd;
fd = open(path, open_flags); fd = open(path, open_flags | O_BINARY);
return fd; return fd;
} }

View File

@ -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) 2009 - 2013 Thomas Schmitt <scdbackup@gmx.net> Copyright (c) 2009 - 2014 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
*/ */
@ -149,6 +149,11 @@ Send feedback to libburn-hackers@pykix.org .
#include <cdio/logging.h> #include <cdio/logging.h>
#include <cdio/mmc.h> #include <cdio/mmc.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
/* The waiting time before eventually retrying a failed SCSI command. /* The waiting time before eventually retrying a failed SCSI command.
Before each retry wait Libburn_sg_linux_retry_incR longer than with Before each retry wait Libburn_sg_linux_retry_incR longer than with
@ -895,7 +900,7 @@ int burn_os_stdio_capacity(char *path, off_t write_start, off_t *bytes)
/* GNU/Linux specific determination of block device size */ /* GNU/Linux specific determination of block device size */
} else if(S_ISBLK(stbuf.st_mode)) { } else if(S_ISBLK(stbuf.st_mode)) {
int open_mode = O_RDONLY, fd; int open_mode = O_RDONLY | O_BINARY, fd;
long blocks; long blocks;
blocks = *bytes / 512; blocks = *bytes / 512;
@ -915,7 +920,7 @@ int burn_os_stdio_capacity(char *path, off_t write_start, off_t *bytes)
} else if(S_ISCHR(stbuf.st_mode)) { } else if(S_ISCHR(stbuf.st_mode)) {
int fd; int fd;
fd = open(path, O_RDONLY); fd = open(path, O_RDONLY | O_BINARY);
if (fd == -1) if (fd == -1)
{ret = -2; goto ex;} {ret = -2; goto ex;}
ret = ioctl(fd, DIOCGMEDIASIZE, &add_size); ret = ioctl(fd, DIOCGMEDIASIZE, &add_size);
@ -929,7 +934,7 @@ int burn_os_stdio_capacity(char *path, off_t write_start, off_t *bytes)
#ifdef Libburn_is_on_solariS #ifdef Libburn_is_on_solariS
} else if(S_ISBLK(stbuf.st_mode)) { } else if(S_ISBLK(stbuf.st_mode)) {
int open_mode = O_RDONLY, fd; int open_mode = O_RDONLY | O_BINARY, fd;
fd = open(path, open_mode); fd = open(path, open_mode);
if (fd == -1) if (fd == -1)
@ -985,7 +990,7 @@ int burn_os_open_track_src(char *path, int open_flags, int flag)
{ {
int fd; int fd;
fd = open(path, open_flags); fd = open(path, open_flags | O_BINARY);
return fd; return fd;
} }

View File

@ -1,6 +1,6 @@
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net> Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2 or later. Provided under GPL version 2 or later.
*/ */
@ -21,6 +21,11 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "libburn.h" #include "libburn.h"
#include "structure.h" #include "structure.h"
#include "write.h" #include "write.h"
@ -1483,7 +1488,7 @@ static int cue_create_file_source(char *path, struct burn_cue_file_cursor *crs,
if (ret <= 0) if (ret <= 0)
goto ex; goto ex;
} else { } else {
fd = open(path, O_RDONLY); fd = open(path, O_RDONLY | O_BINARY);
if (fd == -1) { if (fd == -1) {
sprintf(msg, sprintf(msg,
"In cue sheet: Cannot open FILE '%.4000s'", "In cue sheet: Cannot open FILE '%.4000s'",

View File

@ -38,6 +38,11 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
/* ts B41126 : O_BINARY is needed for Cygwin but undefined elsewhere */
#ifndef O_BINARY
#define O_BINARY 0
#endif
#include "error.h" #include "error.h"
#include "sector.h" #include "sector.h"
#include "libburn.h" #include "libburn.h"
@ -1795,7 +1800,8 @@ static int transact_dvd_chunk(struct burn_write_opts *opts,
static int tee_fd= -1; static int tee_fd= -1;
if(tee_fd==-1) if(tee_fd==-1)
tee_fd= open("/tmp/libburn_sg_readin", tee_fd= open("/tmp/libburn_sg_readin",
O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
S_IRUSR | S_IWUSR);
#endif /* Libburn_log_in_and_out_streaM */ #endif /* Libburn_log_in_and_out_streaM */
@ -2524,7 +2530,7 @@ int burn_stdio_open_write(struct burn_drive *d, off_t start_byte,
if (fd >= 0) if (fd >= 0)
fd = dup(fd); /* check validity and make closeable */ fd = dup(fd); /* check validity and make closeable */
else else
fd = open(d->devname, mode, fd = open(d->devname, mode | O_BINARY,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd == -1) { if (fd == -1) {
libdax_msgs_submit(libdax_messenger, d->global_index, libdax_msgs_submit(libdax_messenger, d->global_index,