diff irccdctl/irccdctl.c @ 1148:323d6d34ec1b

irccdctl: remove ketopt, closes #2530
author David Demelier <markand@malikania.fr>
date Fri, 04 Feb 2022 09:56:43 +0100
parents 206bf06a6bea
children b6a0d9515c82
line wrap: on
line diff
--- a/irccdctl/irccdctl.c	Thu Feb 03 13:16:56 2022 +0100
+++ b/irccdctl/irccdctl.c	Fri Feb 04 09:56:43 2022 +0100
@@ -30,8 +30,6 @@
 #include <string.h>
 #include <unistd.h>
 
-#include <ketopt.h>
-
 #include <irccd/limits.h>
 #include <irccd/util.h>
 
@@ -359,6 +357,9 @@
 	char *line, *p, name[16];
 	size_t num = 0;
 
+	--argc;
+	++argv;
+
 	if (argc == 3) {
 		req("%s %s %s %s", cmd, argv[0], argv[1], argv[2]);
 		ok();
@@ -410,7 +411,8 @@
 static void
 cmd_hook_add(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("HOOK-ADD %s %s", argv[0], argv[1]);
 	ok();
@@ -428,7 +430,8 @@
 static void
 cmd_hook_remove(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("HOOK-REMOVE %s", argv[0]);
 	ok();
@@ -452,7 +455,8 @@
 static void
 cmd_plugin_info(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	const char *response;
 
@@ -480,7 +484,8 @@
 static void
 cmd_plugin_load(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("PLUGIN-LOAD %s", argv[0]);
 	ok();
@@ -495,6 +500,9 @@
 static void
 cmd_plugin_reload(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	if (argc == 1)
 		req("PLUGIN-RELOAD %s", argv[0]);
 	else
@@ -512,6 +520,9 @@
 static void
 cmd_plugin_unload(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	if (argc == 1)
 		req("PLUGIN-UNLOAD %s", argv[0]);
 	else
@@ -523,19 +534,19 @@
 static void
 cmd_rule_add(int argc, char **argv)
 {
-	ketopt_t ko = KETOPT_INIT;
 	FILE *fp;
 	char out[IRC_BUF_LEN];
+	int ch;
 
 	if (!(fp = fmemopen(out, sizeof (out) - 1, "w")))
 		irc_util_die("abort: fmemopen: %s\n", strerror(errno));
 
 	/* TODO: invalid option. */
-	for (int ch; (ch = ketopt(&ko, argc, argv, 0, "c:e:i:o:p:s:", NULL)) != -1; )
-		fprintf(fp, "%c=%s ", ch, ko.arg);
+	while ((ch = getopt(argc, argv, "c:e:i:o:p:s:")) != -1)
+		fprintf(fp, "%c=%s ", ch, optarg);
 
-	argc -= ko.ind;
-	argv += ko.ind;
+	argc -= optind;
+	argv += optind;
 
 	if (argc < 1)
 		irc_util_die("abort: missing accept or drop rule action\n");
@@ -553,23 +564,23 @@
 static void
 cmd_rule_edit(int argc, char **argv)
 {
-	ketopt_t ko = KETOPT_INIT;
 	FILE *fp;
 	char out[IRC_BUF_LEN];
+	int ch;
 
 	if (!(fp = fmemopen(out, sizeof (out) - 1, "w")))
 		irc_util_die("abort: fmemopen: %s\n", strerror(errno));
 
 	/* TODO: invalid option. */
-	for (int ch; (ch = ketopt(&ko, argc, argv, 0, "a:C:c:E:e:O:o:P:p:S:s:", NULL)) != -1; ) {
+	while ((ch = getopt(argc, argv, "a:C:c:E:e:O:o:P:p:S:s:")) != -1) {
 		if (ch == 'a')
-			fprintf(fp, "a=%s ", ko.arg);
+			fprintf(fp, "a=%s ", optarg);
 		else
-			fprintf(fp, "%c%c%s ", tolower(ch), isupper(ch) ? '-' : '+', ko.arg);
+			fprintf(fp, "%c%c%s ", tolower(ch), isupper(ch) ? '-' : '+', optarg);
 	}
 
-	argc -= ko.ind;
-	argv += ko.ind;
+	argc -= optind;
+	argv += optind;
 
 	if (argc < 1)
 		irc_util_die("abort: missing rule index\n");
@@ -623,7 +634,8 @@
 static void
 cmd_rule_move(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	long long from, to;
 
@@ -639,7 +651,8 @@
 static void
 cmd_rule_remove(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("RULE-REMOVE %s", argv[0]);
 	ok();
@@ -648,37 +661,36 @@
 static void
 cmd_server_connect(int argc, char **argv)
 {
-	ketopt_t ko = KETOPT_INIT;
-	int ssl = 0;
+	int ssl = 0, ch;
 	const char *nickname = "irccd",
 	           *username = "irccd",
 	           *realname = "IRC Client Daemon",
 	           *port = "6667";
 
-	for (int ch; (ch = ketopt(&ko, argc, argv, 0, "sn:r:u:p:", NULL)) != -1; ) {
+	while ((ch = getopt(argc, argv, "sn:r:u:p:")) != -1) {
 		switch (ch) {
 		case 's':
 			ssl = 1;
 			break;
 		case 'n':
-			nickname = ko.arg;
+			nickname = optarg;
 			break;
 		case 'r':
-			realname = ko.arg;
+			realname = optarg;
 			break;
 		case 'u':
-			username = ko.arg;
+			username = optarg;
 			break;
 		case 'p':
-			port = ko.arg;
+			port = optarg;
 			break;
 		default:
 			break;
 		}
 	}
 
-	argc -= ko.ind;
-	argv += ko.ind;
+	argc -= optind;
+	argv += optind;
 
 	if (argc < 2)
 		irc_util_die("abort: missing id and/or host\n");
@@ -691,6 +703,9 @@
 static void
 cmd_server_disconnect(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	if (argc == 1)
 		req("SERVER-DISCONNECT %s", argv[0]);
 	else
@@ -710,7 +725,8 @@
 static void
 cmd_server_info(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	char *list;
 	const char *args[16] = {0};
@@ -743,6 +759,9 @@
 static void
 cmd_server_join(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	if (argc >= 3)
 		req("SERVER-JOIN %s %s %s", argv[0], argv[1], argv[2]);
 	else
@@ -763,7 +782,8 @@
 static void
 cmd_server_message(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("SERVER-MESSAGE %s %s %s", argv[0], argv[1], argv[2]);
 	ok();
@@ -772,7 +792,8 @@
 static void
 cmd_server_me(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("SERVER-ME %s %s %s", argv[0], argv[1], argv[2]);
 	ok();
@@ -781,6 +802,9 @@
 static void
 cmd_server_mode(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	req("SERVER-MODE %s %s %s%c%s", argv[0], argv[1], argv[2],
 	    argc >= 4 ? ' '     : '\0',
 	    argc >= 4 ? argv[3] : "");
@@ -790,7 +814,8 @@
 static void
 cmd_server_nick(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("SERVER-NICK %s %s", argv[0], argv[1]);
 	ok();
@@ -799,7 +824,8 @@
 static void
 cmd_server_notice(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("SERVER-NOTICE %s %s %s", argv[0], argv[1], argv[2]);
 	ok();
@@ -808,7 +834,8 @@
 static void
 cmd_server_part(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	/* Let's advertise irccd a bit. */
 	req("SERVER-PART %s %s %s", argv[0], argv[1],
@@ -819,6 +846,9 @@
 static void
 cmd_server_reconnect(int argc, char **argv)
 {
+	--argc;
+	++argv;
+
 	if (argc == 1)
 		req("SERVER-RECONNECT %s", argv[0]);
 	else
@@ -830,7 +860,8 @@
 static void
 cmd_server_topic(int argc, char **argv)
 {
-	(void)argc;
+	--argc;
+	++argv;
 
 	req("SERVER-TOPIC %s %s %s", argv[0], argv[1], argv[2]);
 	ok();
@@ -915,11 +946,7 @@
 
 	if (!(c = find_cmd(argv[0])))
 		irc_util_die("abort: command not found\n");
-
-	--argc;
-	++argv;
-
-	if ((c->minargs != -1 && argc < c->minargs) || (c->minargs != -1 && argc > c->maxargs))
+	if ((c->minargs != -1 && argc - 1 < c->minargs) || (c->minargs != -1 && argc - 1 > c->maxargs))
 		irc_util_die("abort: invalid number of arguments\n");
 
 	c->exec(argc, argv);
@@ -973,15 +1000,14 @@
 int
 main(int argc, char **argv)
 {
-	ketopt_t ko = KETOPT_INIT;
+	int ch;
 
-	--argc;
-	++argv;
+	putenv("POSIXLY_CORRECT=1");
 
-	for (int ch; (ch = ketopt(&ko, argc, argv, 0, "s:v", NULL)) != -1; ) {
+	while ((ch = getopt(argc, argv, "s:v")) != -1) {
 		switch (ch) {
 		case 's':
-			irc_util_strlcpy(sockaddr.sun_path, ko.arg, sizeof (sockaddr.sun_path));
+			irc_util_strlcpy(sockaddr.sun_path, optarg, sizeof (sockaddr.sun_path));
 			break;
 		case 'v':
 			verbose = 1;
@@ -992,8 +1018,11 @@
 		}
 	}
 
-	argc -= ko.ind;
-	argv += ko.ind;
+	argc -= optind;
+	argv += optind;
+
+	/* Reset options for subcommands. */
+	optind = 1;
 
 	if (argc < 1)
 		usage();