pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

sway: patches to fix swaybg crash



Module Name:	pkgsrc-wip
Committed By:	kikadf <kikadf.01%gmail.com@localhost>
Pushed By:	kikadf
Date:		Sat Feb 7 11:22:03 2026 +0100
Changeset:	ba419dd64dac3ff5109dafa4bbf2d4f525ba987a

Modified Files:
	sway/Makefile
	sway/TODO
	sway/distinfo
	sway/files/startsway.sh
Added Files:
	sway/patches/patch-common_stringop.c
	sway/patches/patch-common_util.c
	sway/patches/patch-sway_commands.c
	sway/patches/patch-sway_commands_move.c
	sway/patches/patch-sway_commands_rename.c
	sway/patches/patch-sway_commands_workspace.c
	sway/patches/patch-sway_input_input-manager.c
	sway/patches/patch-sway_ipc-json.c
	sway/patches/patch-sway_tree_output.c
	sway/patches/patch-sway_tree_workspace.c
	sway/patches/patch-swaybar_i3bar.c
	sway/patches/patch-swaybar_tray_icon.c

Log Message:
sway: patches to fix swaybg crash

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=ba419dd64dac3ff5109dafa4bbf2d4f525ba987a

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 sway/Makefile                                 | 38 ++-------------------
 sway/TODO                                     |  6 ++--
 sway/distinfo                                 | 12 +++++++
 sway/files/startsway.sh                       |  4 ++-
 sway/patches/patch-common_stringop.c          | 15 +++++++++
 sway/patches/patch-common_util.c              | 15 +++++++++
 sway/patches/patch-sway_commands.c            | 30 +++++++++++++++++
 sway/patches/patch-sway_commands_move.c       | 15 +++++++++
 sway/patches/patch-sway_commands_rename.c     | 15 +++++++++
 sway/patches/patch-sway_commands_workspace.c  | 15 +++++++++
 sway/patches/patch-sway_input_input-manager.c | 15 +++++++++
 sway/patches/patch-sway_ipc-json.c            | 15 +++++++++
 sway/patches/patch-sway_tree_output.c         | 23 +++++++++++++
 sway/patches/patch-sway_tree_workspace.c      | 30 +++++++++++++++++
 sway/patches/patch-swaybar_i3bar.c            | 33 ++++++++++++++++++
 sway/patches/patch-swaybar_tray_icon.c        | 48 +++++++++++++++++++++++++++
 16 files changed, 291 insertions(+), 38 deletions(-)

diffs:
diff --git a/sway/Makefile b/sway/Makefile
index bc5d339e58..ebc5df0e2a 100644
--- a/sway/Makefile
+++ b/sway/Makefile
@@ -10,48 +10,15 @@ COMMENT=	Tilling, i3-compatible Wayland compositor
 LICENSE=	mit
 
 USE_TOOLS+=	pkg-config
-TOOL_DEPENDS+=	scdoc-[0-9]*:../../textproc/scdoc
-DEPENDS+=	swaybg-[0-9]*:../../wip/swaybg
 
 EGDIR=		${PREFIX}/share/examples/sway
 OWN_DIRS+=	${PKG_SYSCONFDIR}/sway
 CONF_FILES=	${EGDIR}/config ${PKG_SYSCONFDIR}/sway/config
 
-INSTALLATION_DIRS+=	${PKGMANDIR}/man1
-INSTALLATION_DIRS+=	${PKGMANDIR}/man5
-INSTALLATION_DIRS+=	${PKGMANDIR}/man7
+#CFLAGS+=		-O0 -g
+#INSTALL_UNSTRIPPED=	yes
 
 post-install:
-	scdoc < ${WRKSRC}/sway/sway.1.scd > ${WRKSRC}/sway/sway.1
-	scdoc < ${WRKSRC}/sway/sway.5.scd > ${WRKSRC}/sway/sway.5
-	scdoc < ${WRKSRC}/sway/sway-bar.5.scd > ${WRKSRC}/sway/sway-bar.5
-	scdoc < ${WRKSRC}/sway/sway-input.5.scd > ${WRKSRC}/sway/sway-input.5
-	scdoc < ${WRKSRC}/sway/sway-ipc.7.scd > ${WRKSRC}/sway/sway-ipc.7
-	scdoc < ${WRKSRC}/sway/sway-output.5.scd > ${WRKSRC}/sway/sway-output.5
-	scdoc < ${WRKSRC}/swaynag/swaynag.1.scd > ${WRKSRC}/swaynag/swaynag.1
-	scdoc < ${WRKSRC}/swaynag/swaynag.5.scd > ${WRKSRC}/swaynag/swaynag.5
-	scdoc < ${WRKSRC}/swaybar/swaybar-protocol.7.scd > ${WRKSRC}/swaybar/swaybar-protocol.7
-	scdoc < ${WRKSRC}/swaymsg/swaymsg.1.scd > ${WRKSRC}/swaymsg/swaymsg.1
-	${INSTALL_MAN} ${WRKSRC}/sway/sway.1 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man1/sway.1
-	${INSTALL_MAN} ${WRKSRC}/sway/sway.5 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/sway.5
-	${INSTALL_MAN} ${WRKSRC}/sway/sway-bar.5 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/sway-bar.5
-	${INSTALL_MAN} ${WRKSRC}/sway/sway-input.5 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/sway-input.5
-	${INSTALL_MAN} ${WRKSRC}/sway/sway-ipc.7 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man7/sway-ipc.7
-	${INSTALL_MAN} ${WRKSRC}/sway/sway-output.5 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/sway-output.5
-	${INSTALL_MAN} ${WRKSRC}/swaynag/swaynag.1 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man1/swaynag.1
-	${INSTALL_MAN} ${WRKSRC}/swaynag/swaynag.5 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man5/swaynag.5
-	${INSTALL_MAN} ${WRKSRC}/swaybar/swaybar-protocol.7 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man7/swaybar-protocol.7
-	${INSTALL_MAN} ${WRKSRC}/swaymsg/swaymsg.1 \
-		${DESTDIR}${PREFIX}/${PKGMANDIR}/man1/swaymsg.1
 	${INSTALL_SCRIPT} ${FILESDIR}/startsway.sh \
 		${DESTDIR}${PREFIX}/bin/startsway
 
@@ -62,6 +29,7 @@ post-install:
 .include "../../wip/seatd/buildlink3.mk"
 
 .include "../../devel/meson/build.mk"
+.include "../../textproc/scdoc/tool.mk"
 .include "../../devel/pango/buildlink3.mk"
 .include "../../devel/pcre/buildlink3.mk"
 .include "../../devel/wayland/buildlink3.mk"
diff --git a/sway/TODO b/sway/TODO
index 485b0a03bb..555dfd2d49 100644
--- a/sway/TODO
+++ b/sway/TODO
@@ -1,2 +1,4 @@
-Fix security/capabilities
-Add support for pkgsrc CONF_FILES
+Minimal requirements to testing sway:
+- NetBSD >= 11
+- sway
+- wip/foot
diff --git a/sway/distinfo b/sway/distinfo
index 22314942fd..dd85a687c8 100644
--- a/sway/distinfo
+++ b/sway/distinfo
@@ -3,4 +3,16 @@ $NetBSD$
 BLAKE2s (sway-1.11.tar.gz) = 08578ebdaaafd31f89219294389dcad8e918b80181444b47f927a09e1132c737
 SHA512 (sway-1.11.tar.gz) = 7366b494308b8773e6051a67286e7abe422bb390f58def8df143d6334b949ef4c5df7e8086332053ff57ec65518f5b04f11a2c31bb57a31dd234eda82457aed5
 Size (sway-1.11.tar.gz) = 5583731 bytes
+SHA1 (patch-common_stringop.c) = 1d89d81d0e665dec83b312e4d47645923dedbea3
+SHA1 (patch-common_util.c) = 6092b87d425096740409e00b0d9dac3bc5dae8f7
 SHA1 (patch-meson.build) = 40b74709af65b55b4f3e93a5fa45b783f88b6463
+SHA1 (patch-sway_commands.c) = 792b1746fcfccafa1ac2bb7386012a31e327d63a
+SHA1 (patch-sway_commands_move.c) = 8b5682f523ccc626e376c4dcceac53a2c2a739f3
+SHA1 (patch-sway_commands_rename.c) = 831cd230384eecba4bd86696163eb4fa385f4cf4
+SHA1 (patch-sway_commands_workspace.c) = ae2389a3d5d9ff453de3d55e5be5ff6fa447c1d3
+SHA1 (patch-sway_input_input-manager.c) = 911f6a14325ba87130cef81e5bc3ad4772e07613
+SHA1 (patch-sway_ipc-json.c) = 8baeb0f81994ec456161d164a28b3dc6a33953c7
+SHA1 (patch-sway_tree_output.c) = 5e8aa608a2a77013d7d0ceef7b74bf1c8a334bf3
+SHA1 (patch-sway_tree_workspace.c) = c62b76e90b3ae1cbaf958fb4cf42a5d8fee4705a
+SHA1 (patch-swaybar_i3bar.c) = b71e4c995ab4b64f76d6604f1010e83d459e4c29
+SHA1 (patch-swaybar_tray_icon.c) = 4cb661059fb46e207e0da1f3a716c1f8a63d8604
diff --git a/sway/files/startsway.sh b/sway/files/startsway.sh
index 0add0eee1d..11c9d9189f 100644
--- a/sway/files/startsway.sh
+++ b/sway/files/startsway.sh
@@ -9,4 +9,6 @@ export XDG_CURRENT_DESKTOP XDG_RUNTIME_DIR QT_QPA_PLATFORM
 
 [ -d "${XDG_RUNTIME_DIR}" ] || mkdir -p -m 700 "${XDG_RUNTIME_DIR}"
 
-exec /usr/pkg/bin/seatd-launch /usr/pkg/bin/sway "$@"
+exec /usr/pkg/bin/seatd-launch \
+     /usr/pkg/bin/dbus-run-session \
+     /usr/pkg/bin/sway "$@"
diff --git a/sway/patches/patch-common_stringop.c b/sway/patches/patch-common_stringop.c
new file mode 100644
index 0000000000..e5f134bf0e
--- /dev/null
+++ b/sway/patches/patch-common_stringop.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- common/stringop.c.orig	2026-02-06 15:04:53.573026504 +0000
++++ common/stringop.c
+@@ -18,7 +18,7 @@ void strip_whitespace(char *str) {
+ 	memmove(str, &str[start], len + 1 - start);
+ 
+ 	if (*str) {
+-		for (len -= start + 1; isspace(str[len]); --len) {}
++		for (len -= start + 1; isspace((unsigned char)str[len]); --len) {}
+ 		str[len + 1] = '\0';
+ 	}
+ }
diff --git a/sway/patches/patch-common_util.c b/sway/patches/patch-common_util.c
new file mode 100644
index 0000000000..58f7eec57e
--- /dev/null
+++ b/sway/patches/patch-common_util.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- common/util.c.orig	2026-02-06 14:12:13.396723268 +0000
++++ common/util.c
+@@ -18,7 +18,7 @@ bool parse_color(const char *color, uint
+ 		++color;
+ 	}
+ 	int len = strlen(color);
+-	if ((len != 6 && len != 8) || !isxdigit(color[0]) || !isxdigit(color[1])) {
++	if ((len != 6 && len != 8) || !isxdigit((unsigned char)color[0]) || !isxdigit((unsigned char)color[1])) {
+ 		return false;
+ 	}
+ 	char *ptr;
diff --git a/sway/patches/patch-sway_commands.c b/sway/patches/patch-sway_commands.c
new file mode 100644
index 0000000000..16a830a1bb
--- /dev/null
+++ b/sway/patches/patch-sway_commands.c
@@ -0,0 +1,30 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/commands.c.orig	2026-02-06 14:32:11.294383795 +0000
++++ sway/commands.c
+@@ -228,7 +228,7 @@ list_t *execute_command(char *_exec, str
+ 	config->handler_context.seat = seat;
+ 
+ 	do {
+-		for (; isspace(*head); ++head) {}
++		for (; isspace((unsigned char)*head); ++head) {}
+ 		// Extract criteria (valid for this command list only).
+ 		if (matched_delim == ';') {
+ 			using_criteria = false;
+@@ -247,12 +247,12 @@ list_t *execute_command(char *_exec, str
+ 				criteria_destroy(criteria);
+ 				using_criteria = true;
+ 				// Skip leading whitespace
+-				for (; isspace(*head); ++head) {}
++				for (; isspace((unsigned char)*head); ++head) {}
+ 			}
+ 		}
+ 		// Split command list
+ 		cmd = argsep(&head, ";,", &matched_delim);
+-		for (; isspace(*cmd); ++cmd) {}
++		for (; isspace((unsigned char)*cmd); ++cmd) {}
+ 
+ 		if (strcmp(cmd, "") == 0) {
+ 			sway_log(SWAY_INFO, "Ignoring empty command.");
diff --git a/sway/patches/patch-sway_commands_move.c b/sway/patches/patch-sway_commands_move.c
new file mode 100644
index 0000000000..167c3ae03e
--- /dev/null
+++ b/sway/patches/patch-sway_commands_move.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/commands/move.c.orig	2026-02-06 14:59:39.044165905 +0000
++++ sway/commands/move.c
+@@ -472,7 +472,7 @@ static struct cmd_results *cmd_move_cont
+ 				if (argc < 3) {
+ 					return cmd_results_new(CMD_INVALID, "%s", expected_syntax);
+ 				}
+-				if (!isdigit(argv[2][0])) {
++				if (!isdigit((unsigned char)argv[2][0])) {
+ 					return cmd_results_new(CMD_INVALID,
+ 							"Invalid workspace number '%s'", argv[2]);
+ 				}
diff --git a/sway/patches/patch-sway_commands_rename.c b/sway/patches/patch-sway_commands_rename.c
new file mode 100644
index 0000000000..caaf92aa1b
--- /dev/null
+++ b/sway/patches/patch-sway_commands_rename.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/commands/rename.c.orig	2026-02-06 15:17:20.504788687 +0000
++++ sway/commands/rename.c
+@@ -37,7 +37,7 @@ struct cmd_results *cmd_rename(int argc,
+ 		workspace = config->handler_context.workspace;
+ 	} else if (strcasecmp(argv[1], "number") == 0) {
+ 		// 'rename workspace number x to new_name'
+-		if (!isdigit(argv[2][0])) {
++		if (!isdigit((unsigned char)argv[2][0])) {
+ 			return cmd_results_new(CMD_INVALID,
+ 					"Invalid workspace number '%s'", argv[2]);
+ 		}
diff --git a/sway/patches/patch-sway_commands_workspace.c b/sway/patches/patch-sway_commands_workspace.c
new file mode 100644
index 0000000000..8222cb8b67
--- /dev/null
+++ b/sway/patches/patch-sway_commands_workspace.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/commands/workspace.c.orig	2026-02-06 14:28:42.650855570 +0000
++++ sway/commands/workspace.c
+@@ -194,7 +194,7 @@ struct cmd_results *cmd_workspace(int ar
+ 				return cmd_results_new(CMD_INVALID,
+ 						"Expected workspace number");
+ 			}
+-			if (!isdigit(argv[1][0])) {
++			if (!isdigit((unsigned char)argv[1][0])) {
+ 				return cmd_results_new(CMD_INVALID,
+ 						"Invalid workspace number '%s'", argv[1]);
+ 			}
diff --git a/sway/patches/patch-sway_input_input-manager.c b/sway/patches/patch-sway_input_input-manager.c
new file mode 100644
index 0000000000..839e196049
--- /dev/null
+++ b/sway/patches/patch-sway_input_input-manager.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/input/input-manager.c.orig	2026-02-06 14:46:35.813870635 +0000
++++ sway/input/input-manager.c
+@@ -81,7 +81,7 @@ char *input_device_get_identifier(struct
+ 	char *p = name;
+ 	for (; *p; ++p) {
+ 		// There are in fact input devices with unprintable characters in its name
+-		if (*p == ' ' || !isprint(*p)) {
++		if (*p == ' ' || !isprint((unsigned char)*p)) {
+ 			*p = '_';
+ 		}
+ 	}
diff --git a/sway/patches/patch-sway_ipc-json.c b/sway/patches/patch-sway_ipc-json.c
new file mode 100644
index 0000000000..f412a1e89a
--- /dev/null
+++ b/sway/patches/patch-sway_ipc-json.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/ipc-json.c.orig	2026-02-06 14:36:33.994077551 +0000
++++ sway/ipc-json.c
+@@ -494,7 +494,7 @@ static json_object *ipc_json_describe_sc
+ static void ipc_json_describe_workspace(struct sway_workspace *workspace,
+ 		json_object *object) {
+ 	int num;
+-	if (isdigit(workspace->name[0])) {
++	if (isdigit((unsigned char)workspace->name[0])) {
+ 		errno = 0;
+ 		char *endptr = NULL;
+ 		long long parsed_num = strtoll(workspace->name, &endptr, 10);
diff --git a/sway/patches/patch-sway_tree_output.c b/sway/patches/patch-sway_tree_output.c
new file mode 100644
index 0000000000..67de1db58f
--- /dev/null
+++ b/sway/patches/patch-sway_tree_output.c
@@ -0,0 +1,23 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/tree/output.c.orig	2026-02-06 15:15:06.294449317 +0000
++++ sway/tree/output.c
+@@ -381,13 +381,13 @@ static int sort_workspace_cmp_qsort(cons
+ 	struct sway_workspace *a = *(void **)_a;
+ 	struct sway_workspace *b = *(void **)_b;
+ 
+-	if (isdigit(a->name[0]) && isdigit(b->name[0])) {
++	if (isdigit((unsigned char)a->name[0]) && isdigit((unsigned char)b->name[0])) {
+ 		int a_num = strtol(a->name, NULL, 10);
+ 		int b_num = strtol(b->name, NULL, 10);
+ 		return (a_num < b_num) ? -1 : (a_num > b_num);
+-	} else if (isdigit(a->name[0])) {
++	} else if (isdigit((unsigned char)a->name[0])) {
+ 		return -1;
+-	} else if (isdigit(b->name[0])) {
++	} else if (isdigit((unsigned char)b->name[0])) {
+ 		return 1;
+ 	}
+ 	return 0;
diff --git a/sway/patches/patch-sway_tree_workspace.c b/sway/patches/patch-sway_tree_workspace.c
new file mode 100644
index 0000000000..3f19cfd327
--- /dev/null
+++ b/sway/patches/patch-sway_tree_workspace.c
@@ -0,0 +1,30 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- sway/tree/workspace.c.orig	2026-02-06 15:19:36.101349296 +0000
++++ sway/tree/workspace.c
+@@ -256,7 +256,7 @@ static void workspace_name_from_binding(
+ 			sway_log(SWAY_DEBUG, "Isolated name from workspace number: '%s'", _target);
+ 
+ 			// Make sure the workspace number doesn't already exist
+-			if (isdigit(_target[0]) && workspace_by_number(_target)) {
++			if (isdigit((unsigned char)_target[0]) && workspace_by_number(_target)) {
+ 				free(_target);
+ 				free(dup);
+ 				return;
+@@ -346,12 +346,12 @@ char *workspace_next_name(const char *ou
+ static bool _workspace_by_number(struct sway_workspace *ws, void *data) {
+ 	char *name = data;
+ 	char *ws_name = ws->name;
+-	while (isdigit(*name)) {
++	while (isdigit((unsigned char)*name)) {
+ 		if (*name++ != *ws_name++) {
+ 			return false;
+ 		}
+ 	}
+-	return !isdigit(*ws_name);
++	return !isdigit((unsigned char)*ws_name);
+ }
+ 
+ struct sway_workspace *workspace_by_number(const char* name) {
diff --git a/sway/patches/patch-swaybar_i3bar.c b/sway/patches/patch-swaybar_i3bar.c
new file mode 100644
index 0000000000..e01b23c137
--- /dev/null
+++ b/sway/patches/patch-swaybar_i3bar.c
@@ -0,0 +1,33 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- swaybar/i3bar.c.orig	2026-02-06 15:09:17.576197045 +0000
++++ swaybar/i3bar.c
+@@ -126,7 +126,7 @@ bool i3bar_handle_readable(struct status
+ 				status->buffer_index -= ++c;
+ 				memmove(status->buffer, &status->buffer[c], status->buffer_index);
+ 				break;
+-			} else if (!isspace(status->buffer[c])) {
++			} else if (!isspace((unsigned char)status->buffer[c])) {
+ 				sway_log(SWAY_DEBUG, "Invalid i3bar json: expected '[' but encountered '%c'",
+ 						status->buffer[c]);
+ 				status_error(status, "[invalid i3bar json]");
+@@ -166,7 +166,7 @@ bool i3bar_handle_readable(struct status
+ 					status->expecting_comma = false;
+ 					++buffer_pos;
+ 					break;
+-				} else if (!isspace(status->buffer[buffer_pos])) {
++				} else if (!isspace((unsigned char)status->buffer[buffer_pos])) {
+ 					sway_log(SWAY_DEBUG, "Invalid i3bar json: expected ',' but encountered '%c'",
+ 							status->buffer[buffer_pos]);
+ 					status_error(status, "[invalid i3bar json]");
+@@ -197,7 +197,7 @@ bool i3bar_handle_readable(struct status
+ 				char *last_char_pos =
+ 					&status->buffer[buffer_pos + status->tokener->char_offset - 1];
+ 				char last_char = *last_char_pos;
+-				while (isspace(last_char)) {
++				while (isspace((unsigned char)last_char)) {
+ 					last_char = *--last_char_pos;
+ 				}
+ 				*last_char_pos = '\0';
diff --git a/sway/patches/patch-swaybar_tray_icon.c b/sway/patches/patch-swaybar_tray_icon.c
new file mode 100644
index 0000000000..b941dc2e8d
--- /dev/null
+++ b/sway/patches/patch-swaybar_tray_icon.c
@@ -0,0 +1,48 @@
+$NetBSD$
+
+* Fix ctype usage
+
+--- swaybar/tray/icon.c.orig	2026-02-06 14:22:15.740453549 +0000
++++ swaybar/tray/icon.c
+@@ -228,17 +228,17 @@ static struct icon_theme *read_theme_fil
+ 		++line_no;
+ 
+ 		char *line = full_line - 1;
+-		while (isspace(*++line)) {} // remove leading whitespace
++		while (isspace((unsigned char)*++line)) {} // remove leading whitespace
+ 		if (!*line || line[0] == '#') continue; // ignore blank lines & comments
+ 
+ 		int len = nread - (line - full_line);
+-		while (isspace(line[--len])) {}
++		while (isspace((unsigned char)line[--len])) {}
+ 		line[++len] = '\0'; // remove trailing whitespace
+ 
+ 		if (line[0] == '[') { // group header
+ 			// check well-formed
+ 			int i = 1;
+-			for (; !iscntrl(line[i]) && line[i] != '[' && line[i] != ']'; ++i) {}
++			for (; !iscntrl((unsigned char)line[i]) && line[i] != '[' && line[i] != ']'; ++i) {}
+ 			if (i != --len || line[i] != ']') {
+ 				error = "malformed group header";
+ 				break;
+@@ -268,9 +268,9 @@ static struct icon_theme *read_theme_fil
+ 
+ 			// check well-formed
+ 			int eok = 0;
+-			for (; isalnum(line[eok]) || line[eok] == '-'; ++eok) {} // TODO locale?
++			for (; isalnum((unsigned char)line[eok]) || line[eok] == '-'; ++eok) {} // TODO locale?
+ 			int i = eok - 1;
+-			while (isspace(line[++i])) {}
++			while (isspace((unsigned char)line[++i])) {}
+ 			if (line[i] != '=') {
+ 				error = "malformed key-value pair";
+ 				break;
+@@ -278,7 +278,7 @@ static struct icon_theme *read_theme_fil
+ 
+ 			line[eok] = '\0'; // split into key-value pair
+ 			char *value = &line[i];
+-			while (isspace(*++value)) {}
++			while (isspace((unsigned char)*++value)) {}
+ 			// TODO unescape value
+ 
+ 			error = entry_handler(groups->items[groups->length - 1], line,


Home | Main Index | Thread Index | Old Index