-
-
Save jwilk/561ae35894756aae1e31503d0c52db7e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/beep.c b/beep.c | |
index 7da2e70..4323d31 100644 | |
--- a/beep.c | |
+++ b/beep.c | |
@@ -109,6 +109,7 @@ void do_beep(int freq) { | |
/* BEEP_TYPE_EVDEV */ | |
struct input_event e; | |
+ memset(&e, 0, sizeof(e)); | |
e.type = EV_SND; | |
e.code = SND_TONE; | |
e.value = freq; | |
@@ -124,10 +125,6 @@ void do_beep(int freq) { | |
/* If we get interrupted, it would be nice to not leave the speaker beeping in | |
perpetuity. */ | |
void handle_signal(int signum) { | |
- | |
- if(console_device) | |
- free(console_device); | |
- | |
switch(signum) { | |
case SIGINT: | |
case SIGTERM: | |
@@ -257,7 +254,7 @@ void parse_command_line(int argc, char **argv, beep_parms_t *result) { | |
result->verbose = 1; | |
break; | |
case 'e' : /* also --device */ | |
- console_device = strdup(optarg); | |
+ console_device = optarg; | |
break; | |
case 'h' : /* notice that this is also --help */ | |
default : | |
@@ -276,26 +273,6 @@ void play_beep(beep_parms_t parms) { | |
"%d delay after) @ %.2f Hz\n", | |
parms.reps, parms.length, parms.delay, parms.end_delay, parms.freq); | |
- /* try to snag the console */ | |
- if(console_device) | |
- console_fd = open(console_device, O_WRONLY); | |
- else | |
- if((console_fd = open("/dev/tty0", O_WRONLY)) == -1) | |
- console_fd = open("/dev/vc/0", O_WRONLY); | |
- | |
- if(console_fd == -1) { | |
- fprintf(stderr, "Could not open %s for writing\n", | |
- console_device != NULL ? console_device : "/dev/tty0 or /dev/vc/0"); | |
- printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */ | |
- perror("open"); | |
- exit(1); | |
- } | |
- | |
- if (ioctl(console_fd, EVIOCGSND(0)) != -1) | |
- console_type = BEEP_TYPE_EVDEV; | |
- else | |
- console_type = BEEP_TYPE_CONSOLE; | |
- | |
/* Beep */ | |
for (i = 0; i < parms.reps; i++) { /* start beep */ | |
do_beep(parms.freq); | |
@@ -305,8 +282,6 @@ void play_beep(beep_parms_t parms) { | |
if(parms.end_delay || (i+1 < parms.reps)) | |
usleep(1000*parms.delay); /* wait... */ | |
} /* repeat. */ | |
- | |
- close(console_fd); | |
} | |
@@ -328,6 +303,26 @@ int main(int argc, char **argv) { | |
signal(SIGTERM, handle_signal); | |
parse_command_line(argc, argv, parms); | |
+ /* try to snag the console */ | |
+ if(console_device) | |
+ console_fd = open(console_device, O_WRONLY); | |
+ else | |
+ if((console_fd = open("/dev/tty0", O_WRONLY)) == -1) | |
+ console_fd = open("/dev/vc/0", O_WRONLY); | |
+ | |
+ if(console_fd == -1) { | |
+ fprintf(stderr, "Could not open %s for writing\n", | |
+ console_device != NULL ? console_device : "/dev/tty0 or /dev/vc/0"); | |
+ printf("\a"); /* Output the only beep we can, in an effort to fall back on usefulness */ | |
+ perror("open"); | |
+ exit(1); | |
+ } | |
+ | |
+ if (ioctl(console_fd, EVIOCGSND(0)) != -1) | |
+ console_type = BEEP_TYPE_EVDEV; | |
+ else | |
+ console_type = BEEP_TYPE_CONSOLE; | |
+ | |
/* this outermost while loop handles the possibility that -n/--new has been | |
used, i.e. that we have multiple beeps specified. Each iteration will | |
play, then free() one parms instance. */ | |
@@ -365,8 +360,8 @@ int main(int argc, char **argv) { | |
parms = next; | |
} | |
- if(console_device) | |
- free(console_device); | |
+ close(console_fd); | |
+ console_fd = -1; | |
return EXIT_SUCCESS; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment