Added a bit of error checking and such

This commit is contained in:
Veit Heller
2015-01-25 12:29:43 +01:00
parent 383e922d22
commit a98a5c9a23
5 changed files with 32 additions and 23 deletions

View File

@@ -1,11 +1,12 @@
override CFLAGS+=-Werror -Wall -g -fPIC -O2 -DNDEBUG -std=c99 -ftrapv -Wfloat-equal -Wundef -Wwrite-strings -Wconversion -Wuninitialized STD=c11
override CFLAGS+=-Werror -Wall -g -fPIC -O2 -DNDEBUG -std=$(STD) -ftrapv -Wfloat-equal -Wundef -Wwrite-strings -Wconversion -Wuninitialized
PREFIX=/usr/bin/cd_check/ PREFIX=/usr/bin/cd_check/
BUILDDIR=bin/ BUILDDIR=bin/
SRCDIR=src/ SRCDIR=src/
#Makes everything #Makes everything
all: all:
mkdir $(BUILDDIR) 2> /dev/null || true mkdir -p $(BUILDDIR) 2> /dev/null || true
cc $(CFLAGS) $(SRCDIR)cd_check_eject.c -o $(BUILDDIR)cd_check_eject cc $(CFLAGS) $(SRCDIR)cd_check_eject.c -o $(BUILDDIR)cd_check_eject
cc $(CFLAGS) $(SRCDIR)cd_check_capabilities.c -o $(BUILDDIR)cd_check_capabilities cc $(CFLAGS) $(SRCDIR)cd_check_capabilities.c -o $(BUILDDIR)cd_check_capabilities
cc $(CFLAGS) $(SRCDIR)cd_check_read_toc.c -o $(BUILDDIR)cd_check_read_toc cc $(CFLAGS) $(SRCDIR)cd_check_read_toc.c -o $(BUILDDIR)cd_check_read_toc
@@ -13,7 +14,7 @@ all:
#Uses picky extensions and makes everything(Extensions may break compiling) #Uses picky extensions and makes everything(Extensions may break compiling)
dev: dev:
make all CFLAGS+=-Wshadow -Wunreachable-code -Wswitch-enum -Wswitch-default -Wcast-align -Winit-self -Wpointer-arith -Weffc++ make all CFLAGS+="-Wshadow -Wunreachable-code -Wswitch-enum -Wswitch-default -Wcast-align -Winit-self -Wpointer-arith -Weffc++"
#Cleans directory(no uninstall!) #Cleans directory(no uninstall!)
clean: clean:
@@ -27,7 +28,6 @@ install:
install $(BUILDDIR)cd_check_read_toc $(PREFIX)cd_check_read_toc install $(BUILDDIR)cd_check_read_toc $(PREFIX)cd_check_read_toc
install $(BUILDDIR)cd_check_read $(PREFIX)cd_check_read install $(BUILDDIR)cd_check_read $(PREFIX)cd_check_read
#Uninstalls from specified(or default)directory #Uninstalls from specified(or default)directory
uninstall: uninstall:
rm -rf $(PREFIX) rm -rf $(PREFIX)

View File

@@ -7,7 +7,8 @@
const char* program_name; const char* program_name;
static inline void die(int code, const char* message){ static inline void die(int code, const char* message, int fd){
if(fd != -1) close(fd);
fprintf(stderr, "%s: %s\n", program_name, message); fprintf(stderr, "%s: %s\n", program_name, message);
exit(code); exit(code);
} }
@@ -15,13 +16,16 @@ static inline void die(int code, const char* message){
int main(int argc, char** argv){ int main(int argc, char** argv){
register int fd, caps; register int fd, caps;
if(!argv) die(127, "How did you do that? No argv?", -1);
program_name = argv[0]; program_name = argv[0];
if((fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK)) == -1) if((fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK)) == -1)
die(127, "Cannot open /dev/cdrom"); die(127, "Cannot open /dev/cdrom", fd);
if((caps = ioctl(fd, CDROM_GET_CAPABILITY)) == -1) if((caps = ioctl(fd, CDROM_GET_CAPABILITY)) == -1)
die(127, "ioctl failed"); die(127, "ioctl failed", fd);
close(fd);
printf("This drive is capable of playing CD-R: %s\n\t\t\t" printf("This drive is capable of playing CD-R: %s\n\t\t\t"
"CD-RW: %s\n\t\t\tDVD: %s\n\t\t\tDVD-R: %s\n", "CD-RW: %s\n\t\t\tDVD: %s\n\t\t\tDVD-R: %s\n",
@@ -39,6 +43,5 @@ int main(int argc, char** argv){
(caps & CDC_PLAY_AUDIO) ? "yes" : "no", (caps & CDC_PLAY_AUDIO) ? "yes" : "no",
(caps & CDC_SELECT_DISC) ? "yes" : "no"); (caps & CDC_SELECT_DISC) ? "yes" : "no");
close(fd);
return 0; return 0;
} }

View File

@@ -7,7 +7,8 @@
const char* program_name; const char* program_name;
static inline void die(int code, const char* message){ static inline void die(int code, const char* message, int fd){
if(fd != -1) close(fd);
fprintf(stderr, "%s: %s\n", program_name, message); fprintf(stderr, "%s: %s\n", program_name, message);
exit(code); exit(code);
} }
@@ -15,13 +16,14 @@ static inline void die(int code, const char* message){
int main(int argc, char** argv){ int main(int argc, char** argv){
register int fd; register int fd;
if(!argv) die(127, "How did you do that? No argv?", -1);
program_name = argv[0]; program_name = argv[0];
if((fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK)) == -1) if((fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK)) == -1)
die(127, "Cannot open /dev/cdrom"); die(127, "Cannot open /dev/cdrom", fd);
if(ioctl(fd, CDROMEJECT) == -1) if(ioctl(fd, CDROMEJECT) == -1)
die(127, "ioctl() failed"); die(127, "ioctl() failed", fd);
close(fd); close(fd);

View File

@@ -8,7 +8,8 @@
const char* program_name; const char* program_name;
static inline void die(int code, const char* message){ static inline void die(int code, const char* message, int fd){
if(fd != -1) close(fd);
fprintf(stderr, "%s: %s\n", program_name, message); fprintf(stderr, "%s: %s\n", program_name, message);
exit(code); exit(code);
} }
@@ -18,20 +19,21 @@ int main(int argc, char** argv){
struct cdrom_tocentry toc_entry; struct cdrom_tocentry toc_entry;
struct cdrom_msf start_stop; struct cdrom_msf start_stop;
if(!argv) die(127, "How did you do that? No argv?", -1);
program_name = argv[0]; program_name = argv[0];
if((fd = open("/dev/cdrom", O_RDONLY)) == -1){ if((fd = open("/dev/cdrom", O_RDONLY)) == -1){
if(errno == ENOMEDIUM) if(errno == ENOMEDIUM)
die(127, "No CD in drive"); die(127, "No CD in drive", fd);
else else
die(127, "Cannot open /dev/cdrom"); die(127, "Cannot open /dev/cdrom", fd);
} }
toc_entry.cdte_track = 1; toc_entry.cdte_track = 1;
toc_entry.cdte_format = CDROM_MSF; toc_entry.cdte_format = CDROM_MSF;
if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1) if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1)
die(127, "ioctl() failed"); die(127, "ioctl() failed", fd);
start_stop.cdmsf_min0 = toc_entry.cdte_addr.msf.minute; start_stop.cdmsf_min0 = toc_entry.cdte_addr.msf.minute;
start_stop.cdmsf_sec0 = toc_entry.cdte_addr.msf.second; start_stop.cdmsf_sec0 = toc_entry.cdte_addr.msf.second;
@@ -41,20 +43,20 @@ int main(int argc, char** argv){
toc_entry.cdte_format = CDROM_MSF; toc_entry.cdte_format = CDROM_MSF;
if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1) if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1)
die(127, "ioctl() failed"); die(127, "ioctl() failed", fd);
start_stop.cdmsf_min1 = toc_entry.cdte_addr.msf.minute; start_stop.cdmsf_min1 = toc_entry.cdte_addr.msf.minute;
start_stop.cdmsf_sec1 = toc_entry.cdte_addr.msf.second; start_stop.cdmsf_sec1 = toc_entry.cdte_addr.msf.second;
start_stop.cdmsf_frame1 = toc_entry.cdte_addr.msf.frame; start_stop.cdmsf_frame1 = toc_entry.cdte_addr.msf.frame;
if(ioctl(fd, CDROMPLAYMSF, &start_stop) == -1) if(ioctl(fd, CDROMPLAYMSF, &start_stop) == -1)
die(127, "ioctl() failed"); die(127, "ioctl() failed", fd);
printf("Press anything to stop playing.\n"); printf("Press anything to stop playing.\n");
getchar(); getchar();
if(ioctl(fd, CDROMSTOP) == -1) if(ioctl(fd, CDROMSTOP) == -1)
die(127, "ioctl() failed"); die(127, "ioctl() failed", fd);
close(fd); close(fd);
return 0; return 0;

View File

@@ -8,7 +8,8 @@
const char* program_name; const char* program_name;
static inline void die(int code, const char* message){ static inline void die(int code, const char* message, int fd){
if(fd != -1) close(fd);
fprintf(stderr, "%s: %s\n", program_name, message); fprintf(stderr, "%s: %s\n", program_name, message);
exit(code); exit(code);
} }
@@ -19,17 +20,18 @@ int main(int argc, char** argv){
struct cdrom_tochdr toc_hdr; struct cdrom_tochdr toc_hdr;
struct cdrom_tocentry toc_entry; struct cdrom_tocentry toc_entry;
if(!argv) die(127, "How did you do that? No argv?", -1);
program_name = argv[0]; program_name = argv[0];
if((fd = open("/dev/cdrom", O_RDONLY)) == -1){ if((fd = open("/dev/cdrom", O_RDONLY)) == -1){
if(errno == ENOMEDIUM) if(errno == ENOMEDIUM)
die(127, "No CD in drive"); die(127, "No CD in drive", fd);
else else
die(127, "Cannot open /dev/cdrom"); die(127, "Cannot open /dev/cdrom", fd);
} }
if(ioctl(fd, CDROMREADTOCHDR, &toc_hdr) == -1) if(ioctl(fd, CDROMREADTOCHDR, &toc_hdr) == -1)
die(127, "Cannot get header"); die(127, "Cannot get header", fd);
printf("First track: %d\nLast track: %d\n\n trackno) length\n", printf("First track: %d\nLast track: %d\n\n trackno) length\n",
toc_hdr.cdth_trk0, toc_hdr.cdth_trk1); toc_hdr.cdth_trk0, toc_hdr.cdth_trk1);
@@ -39,7 +41,7 @@ int main(int argc, char** argv){
toc_entry.cdte_format = CDROM_MSF; toc_entry.cdte_format = CDROM_MSF;
if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1) if(ioctl(fd, CDROMREADTOCENTRY, &toc_entry) == -1)
die(127, "Cannot get table of contents"); die(127, "Cannot get table of contents", fd);
printf(" %2d)\t%02d:%02d.%02d\n", i, toc_entry.cdte_addr.msf.minute, printf(" %2d)\t%02d:%02d.%02d\n", i, toc_entry.cdte_addr.msf.minute,
toc_entry.cdte_addr.msf.second, toc_entry.cdte_addr.msf.second,