commit bbaeb57
wf
·
2026-04-01 07:19:41 +0000 UTC
parent dd0bc95
Fix a number of crashes and improve code quality
5 files changed,
+30,
-30
M
Makefile
+2,
-2
1@@ -1,5 +1,5 @@
2 CC ?= cc
3-CFLAGS := -std=c99 -Wall -Wimplicit-function-declaration -O0 -g -pedantic
4+CFLAGS := -std=c99 -Wall -Wimplicit-function-declaration -Oz -pedantic
5 LDFLAGS := `pkg-config --cflags --libs swc` -Iinclude
6 LDLIBS := `pkg-config --libs swc`
7 PREFIX ?= /usr/local
8@@ -8,7 +8,7 @@ howl := howl
9 howl_src := ipc.c log.c howl.c
10
11 howlc := howlc
12-howlc_src := ipc.c client.c
13+howlc_src := client.c
14
15 .PHONY: all install uninstall clean
16
M
client.c
+12,
-13
1@@ -34,14 +34,6 @@ static const struct command commands[] = {
2 { "border_width", cmd_border_width, 1, true },
3 };
4
5-static char *
6-int_str(int i) {
7- const size_t len = 4 * sizeof(int);
8- char t[len];
9- snprintf(t, len, "%d", i);
10- return t;
11-}
12-
13 static void
14 ipc_msg(const struct command *cmd, int argc, char **argv) {
15 struct sockaddr_un addr;
16@@ -64,14 +56,21 @@ ipc_msg(const struct command *cmd, int argc, char **argv) {
17 }
18
19 if (cmd->config) {
20- data[0] = int_str(cmd_config);
21- data[1] = int_str(cmd->id);
22+ static char b0[5], b1[5];
23+ snprintf(b0, sizeof b0, "%d", cmd_config);
24+ snprintf(b1, sizeof b1, "%d", cmd->id);
25+ data[0] = b0;
26+ data[1] = b1;
27 } else {
28- data[0] = int_str(cmd->id);
29+ static char b0[5];
30+ snprintf(b0, sizeof b0, "%d", cmd->id);
31+ data[0] = b0;
32 }
33
34+ int o = cmd->config ? 2 : 1;
35 for (int i = 0; i < argc - 2; i++)
36- data[i + (cmd->config ? 2 : 1)] = argv[i + 2];
37+ data[i + o] = argv[i + 2];
38+ data[o + (argc - 2)] = NULL;
39
40 msg[0] = '\0';
41 for (int i = 0; data[i] != NULL; i++) {
42@@ -99,7 +98,7 @@ main(int argc, char **argv) {
43 fprintf(stderr, "wrong number of arguments for %s (need %d)\n", commands[i].name, commands[i].argc);
44 return 1;
45 }
46- ipc_msg(&commands[i], argc, argv + 1);
47+ ipc_msg(&commands[i], argc, argv);
48 return 0;
49 }
50 }
+1,
-1
1@@ -13,10 +13,10 @@ enum cmd {
2 cmd_pid,
3 cmd_title,
4 cmd_app_id,
5- cmd_config,
6 cmd_focus_color,
7 cmd_unfocus_color,
8 cmd_border_width,
9+ cmd_config,
10 cmd_last
11 };
12
M
ipc.c
+9,
-11
1@@ -27,6 +27,8 @@ fn_hex(char *s) {
2 return strtoul(s, NULL, 16);
3 }
4
5+/*********/
6+
7 void
8 ipc_move(char **arg) {
9 if (arg[1] == NULL || arg[2] == NULL || !wm.cur)
10@@ -118,9 +120,7 @@ ipc_close(char **arg) {
11 swc_window_close(wm.cur->win);
12 }
13
14-/*
15- * window info
16- */
17+/*********/
18
19 void
20 ipc_get_geometry(char **arg) {
21@@ -159,24 +159,22 @@ ipc_get_app_id(char **arg) {
22 printf("%s\n", wm.cur->win->app_id);
23 }
24
25-/*
26- * configuration
27- */
28+/*********/
29
30 void
31 ipc_config(char **arg) {
32- if (arg[0] == NULL || arg[1] == NULL) return;
33+ if (arg[1] == NULL || arg[2] == NULL) return;
34
35- enum cmd cmd = atoi(arg[0]);
36+ enum cmd cmd = atoi(arg[1]);
37 switch (cmd) {
38 case cmd_focus_color:
39- config.focus_color = fn_hex(arg[1]);
40+ config.focus_color = fn_hex(arg[2]);
41 break;
42 case cmd_unfocus_color:
43- config.unfocus_color = fn_hex(arg[1]);
44+ config.unfocus_color = fn_hex(arg[2]);
45 break;
46 case cmd_border_width:
47- config.border_width = fn_int(arg[1]);
48+ config.border_width = fn_int(arg[2]);
49 break;
50 default:
51 break;
M
log.c
+6,
-3
1@@ -1,4 +1,5 @@
2 #include <stdio.h>
3+#include <stdlib.h>
4 #include <stdarg.h>
5
6 #include "howl.h"
7@@ -7,7 +8,7 @@ void
8 _inf(const char *msg, ...) {
9 va_list list;
10
11- fprintf(stdout, "%s \033[92mINFO\033[0m: ", __TIME__);
12+ fprintf(stdout, "\033[92mINFO\033[0m: ");
13
14 va_start(list, msg);
15 vfprintf(stdout, msg, list);
16@@ -21,7 +22,7 @@ void
17 _wrn(const char *msg, ...) {
18 va_list list;
19
20- fprintf(stderr, "%s \033[93mWARN\033[0m: ", __TIME__);
21+ fprintf(stderr, "\033[93mWARN\033[0m: ");
22
23 va_start(list, msg);
24 vfprintf(stderr, msg, list);
25@@ -35,7 +36,7 @@ void
26 _err(int ret, const char *msg, ...) {
27 va_list list;
28
29- fprintf(stderr, "%s \033[91mFATAL\033[0m: ", __TIME__);
30+ fprintf(stderr, "\033[91mFATAL\033[0m: ");
31
32 va_start(list, msg);
33 vfprintf(stderr, msg, list);
34@@ -43,4 +44,6 @@ _err(int ret, const char *msg, ...) {
35
36 fputc('\n', stderr);
37 fflush(stderr);
38+
39+ exit(ret);
40 }