commit 7007d28f6ae3bf45e590899a14dee23dbec22ac4
parent e1b59a3b00b1be504f5e08a88b4cfb9cbe89427c
Author: Louis Burda <quent.burda@gmail.com>
Date: Sun, 7 Apr 2024 23:39:16 +0200
Small touchups
Diffstat:
M | main.c | | | 35 | ++++++++++++++++------------------- |
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/main.c b/main.c
@@ -20,7 +20,10 @@
static pid_t child_pid = -1;
static int child_fd = -1;
-static FILE *child_file = NULL;
+static FILE *child_io = NULL;
+
+static const char *play_arg = "-p";
+static bool ptty = false;
static void
die(const char *fmt, ...)
@@ -46,7 +49,6 @@ child_exit(int sig)
{
int status, rc;
- printf("%i\n", sig);
do {
rc = waitpid(child_pid, &status, 0);
if (rc < 0 && errno == ECHILD) exit(123);
@@ -61,7 +63,7 @@ child_exit(int sig)
int
main(int argc, char **argv)
{
- char **arg, *play_arg;
+ char **arg;
struct termios childterm;
struct winsize ws;
int child_pipe[2];
@@ -70,10 +72,7 @@ main(int argc, char **argv)
Window win;
XEvent e;
KeySym key;
- bool ptty;
- ptty = false;
- play_arg = "p";
for (arg = argv + 1; *arg && strcmp(*arg, "--"); arg++) {
if (!strcmp(*arg, "-h") || !strcmp(*arg, "--help")) {
*arg = NULL;
@@ -87,15 +86,16 @@ main(int argc, char **argv)
}
}
if (!*arg) {
- fprintf(stderr, "Usage: xf86ctrl [-p] CMD [ARGS..]\n");
+ fprintf(stderr, "Usage: xf86ctrl [-p PLAY] [-t] CMD [ARGS..]\n");
return 1;
}
+ signal(SIGCHLD, child_exit);
+
if (ptty) {
cfmakeraw(&childterm);
ws.ws_col = 80;
ws.ws_row = 40;
- signal(SIGCHLD, child_exit);
child_pid = forkpty(&child_fd, NULL, &childterm, &ws);
if (child_pid < 0) die("forkpty:");
if (!child_pid) {
@@ -105,12 +105,12 @@ main(int argc, char **argv)
}
} else {
pipe(child_pipe);
- signal(SIGCHLD, child_exit);
child_pid = fork();
if (child_pid < 0) die("fork:");
if (!child_pid) {
signal(SIGCHLD, SIG_DFL);
- close(0);
+ close(1);
+ close(2);
dup2(child_pipe[0], 0);
close(child_pipe[1]);
close(child_pipe[0]);
@@ -121,13 +121,15 @@ main(int argc, char **argv)
close(child_pipe[0]);
}
- child_file = fdopen(child_fd, "w");
- if (!child_file) die("fdopen:");
+ child_io = fdopen(child_fd, "w");
+ if (!child_io) die("fdopen:");
d = XOpenDisplay(NULL);
if (!d) die("XOpenDisplay(NULL)");
win = DefaultRootWindow(d);
+ if (!win) die("XDefaultRootWindow no result");
+
XGrabKey(d, XKeysymToKeycode(d, XF86XK_AudioNext), 0,
win, False, GrabModeAsync, GrabModeAsync);
XGrabKey(d, XKeysymToKeycode(d, XF86XK_AudioPlay), 0,
@@ -143,19 +145,14 @@ main(int argc, char **argv)
case XF86XK_AudioNext:
goto exit;
case XF86XK_AudioPlay:
- nwrite = fputs(play_arg, child_file);
+ nwrite = fputs(play_arg, child_io);
if (nwrite != strlen(play_arg)) goto exit;
- fflush(child_file);
+ fflush(child_io);
break;
}
}
}
exit:
- signal(SIGCHLD, SIG_DFL);
-
XCloseDisplay(d);
-
- kill(child_pid, SIGTERM);
- child_exit(0);
}