diff --git a/configure.ac b/configure.ac index bf0a1a35..481f7b5f 100644 --- a/configure.ac +++ b/configure.ac @@ -663,10 +663,10 @@ AC_CONFIG_FILES([ test/data/Makefile \ test/driver/Makefile \ test/driver/bincue.c \ + test/driver/nrg.c \ test/testgetdevices.c \ test/testisocd2.c \ test/testpregap.c \ - test/testnrg.c \ test/check_common_fn \ test/Makefile \ ]) diff --git a/example/paranoia.c b/example/paranoia.c index d20b3a02..c2ab4a7c 100644 --- a/example/paranoia.c +++ b/example/paranoia.c @@ -65,19 +65,20 @@ put_num(long int num, int f, int bytes) /* Write a the header for a WAV file. */ static void write_WAV_header(int fd, int32_t i_bytecount){ + ssize_t bytes_ret; /* quick and dirty */ - writestr(fd, "RIFF"); /* 0-3 */ - put_num(i_bytecount+44-8, fd, 4); /* 4-7 */ - writestr(fd, "WAVEfmt "); /* 8-15 */ - put_num(16, fd, 4); /* 16-19 */ - put_num(1, fd, 2); /* 20-21 */ - put_num(2, fd, 2); /* 22-23 */ - put_num(44100, fd, 4); /* 24-27 */ - put_num(44100*2*2, fd, 4); /* 28-31 */ - put_num(4, fd, 2); /* 32-33 */ - put_num(16, fd, 2); /* 34-35 */ - writestr(fd, "data"); /* 36-39 */ - put_num(i_bytecount, fd, 4); /* 40-43 */ + bytes_ret = writestr(fd, "RIFF"); /* 0-3 */ + put_num(i_bytecount+44-8, fd, 4); /* 4-7 */ + bytes_ret = writestr(fd, "WAVEfmt "); /* 8-15 */ + put_num(16, fd, 4); /* 16-19 */ + put_num(1, fd, 2); /* 20-21 */ + put_num(2, fd, 2); /* 22-23 */ + put_num(44100, fd, 4); /* 24-27 */ + put_num(44100*2*2, fd, 4); /* 28-31 */ + put_num(4, fd, 2); /* 32-33 */ + put_num(16, fd, 2); /* 34-35 */ + bytes_ret = writestr(fd, "data"); /* 36-39 */ + put_num(i_bytecount, fd, 4); /* 40-43 */ } int @@ -124,6 +125,7 @@ main(int argc, const char *argv[]) printf("Trouble getting starting LSN\n"); } else { lsn_t i_cursor; + ssize_t bytes_ret; track_t i_track = cdda_sector_gettrack(d, i_first_lsn); lsn_t i_last_lsn = cdda_track_lastsector(d, i_track); int fd = creat("track1s.wav", 0644); @@ -157,7 +159,7 @@ main(int argc, const char *argv[]) printf("paranoia read error. Stopping.\n"); break; } - write(fd, p_readbuf, CDIO_CD_FRAMESIZE_RAW); + bytes_ret = write(fd, p_readbuf, CDIO_CD_FRAMESIZE_RAW); } close(fd); } diff --git a/lib/cdda_interface/utils.c b/lib/cdda_interface/utils.c index da07ddb2..b5a6c117 100644 --- a/lib/cdda_interface/utils.c +++ b/lib/cdda_interface/utils.c @@ -1,7 +1,7 @@ /* $Id: utils.c,v 1.4 2008/04/16 17:00:41 karl Exp $ - Copyright (C) 2004, 2008 Rocky Bernstein + Copyright (C) 2004, 2008, 2010 Rocky Bernstein Copyright (C) 1998 Monty xiphmont@mit.edu This program is free software: you can redistribute it and/or modify @@ -18,15 +18,22 @@ along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include "common_interface.h" #include "utils.h" void cderror(cdrom_drive_t *d,const char *s) { + ssize_t bytes_ret; if(s && d){ switch(d->errordest){ case CDDA_MESSAGE_PRINTIT: - write(STDERR_FILENO,s,strlen(s)); + bytes_ret = write(STDERR_FILENO, s, strlen(s)); + if (strlen(s) != bytes_ret) + break; case CDDA_MESSAGE_LOGIT: d->errorbuf=catstring(d->errorbuf,s); @@ -40,10 +47,11 @@ cderror(cdrom_drive_t *d,const char *s) void cdmessage(cdrom_drive_t *d, const char *s) { + ssize_t bytes_ret; if(s && d){ switch(d->messagedest){ case CDDA_MESSAGE_PRINTIT: - write(STDERR_FILENO,s,strlen(s)); + bytes_ret = write(STDERR_FILENO, s, strlen(s)); break; case CDDA_MESSAGE_LOGIT: d->messagebuf=catstring(d->messagebuf,s); @@ -73,13 +81,14 @@ idperror(int messagedest,char **messages,const char *f, } if(buffer){ + ssize_t bytes_ret; switch(messagedest){ case CDDA_MESSAGE_PRINTIT: - write(STDERR_FILENO,buffer,strlen(buffer)); + bytes_ret = write(STDERR_FILENO,buffer,strlen(buffer)); if(errno){ - write(STDERR_FILENO,": ",2); - write(STDERR_FILENO,strerror(errno),strlen(strerror(errno))); - write(STDERR_FILENO,"\n",1); + bytes_ret = write(STDERR_FILENO,": ",2); + bytes_ret = write(STDERR_FILENO,strerror(errno),strlen(strerror(errno))); + bytes_ret = write(STDERR_FILENO,"\n",1); } break; case CDDA_MESSAGE_LOGIT: @@ -118,11 +127,13 @@ idmessage(int messagedest,char **messages,const char *f, malloced=1; } - if(buffer){ + if(buffer) { + ssize_t bytes_ret; switch(messagedest){ case CDDA_MESSAGE_PRINTIT: - write(STDERR_FILENO,buffer,strlen(buffer)); - if(!malloced)write(STDERR_FILENO,"\n",1); + bytes_ret = write(STDERR_FILENO,buffer,strlen(buffer)); + if(!malloced) + bytes_ret = write(STDERR_FILENO,"\n",1); break; case CDDA_MESSAGE_LOGIT: if(messages){ diff --git a/src/cd-read.c b/src/cd-read.c index 32028332..470c7c77 100644 --- a/src/cd-read.c +++ b/src/cd-read.c @@ -586,9 +586,10 @@ main(int argc, char *argv[]) if (opts.hexdump) hexdump(output_stream, buffer, blocklen, opts.just_hex); - else if (opts.output_file) - write(output_fd, buffer, blocklen); - else { + else if (opts.output_file) { + ssize_t bytes_ret; + bytes_ret = write(output_fd, buffer, blocklen); + } else { unsigned int i; for (i=0; i + Copyright (C) 2008, 2010 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,15 +16,16 @@ */ /* - Regression test for cdio_nrgfile(). + Regression test for Nero image driver: lib/driver/image/nrg.c. */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif #include #include #include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #ifdef HAVE_STDIO_H #include #endif @@ -85,6 +84,41 @@ main(int argc, const char *argv[]) } } } + + { + const char *psz_response = cdio_get_arg(p_cdio, "mmc-supported?"); + if ( psz_response == NULL || + ((0 != strncmp("false", psz_response, sizeof("false")))) ) { + fprintf(stderr, + "cdio_get_arg(\"mmc-supported?\") should return \"false\"; got: \"%s\".\n", + psz_response); + exit(3); + } + } + + { + const char *psz_access_mode = cdio_get_arg(p_cdio, "access-mode"); + if ( psz_access_mode == NULL || + ((0 != strncmp("image", psz_access_mode, sizeof("image")))) ) { + fprintf(stderr, + "cdio_get_arg(\"access-mode?\") should return \"image\"; got: \"%s\".\n", + psz_access_mode); + exit(4); + } + } + + + { + const char *psz_source = cdio_get_arg(p_cdio, "source"); + if ( psz_source == NULL || + (0 != strcmp(psz_nrgfile, psz_source)) ) { + fprintf(stderr, + "cdio_get_arg(\"source\") should return \"%s\"; got: \"%s\".\n", + psz_source, psz_nrgfile); + exit(4); + } + } + cdio_destroy(p_cdio); return 0;