changeset 53:319979427566

misc: refactor using util_getopt
author David Demelier <markand@malikania.fr>
date Wed, 17 Aug 2022 09:52:00 +0200
parents 95bc6b4ec753
children 85c59fbf1407
files libsci/util.c libsci/util.h scictl/scictl.c scid/main.c sciworkerd/main.c
diffstat 5 files changed, 44 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/libsci/util.c	Wed Aug 17 09:38:19 2022 +0200
+++ b/libsci/util.c	Wed Aug 17 09:52:00 2022 +0200
@@ -36,7 +36,7 @@
 	void *ret;
 
 	if (!(ret = malloc(size)))
-		util_die("malloc: %s\n", strerror(errno));
+		util_die("abort: malloc: %s\n", strerror(errno));
 
 	return ret;
 }
@@ -47,7 +47,7 @@
 	void *ret;
 
 	if (!(ret = calloc(n, size)))
-		util_die("calloc: %s\n", strerror(errno));
+		util_die("abort: calloc: %s\n", strerror(errno));
 
 	return ret;
 }
@@ -58,7 +58,7 @@
 	void *ret;
 
 	if (!(ret = realloc(ptr, size)) && size)
-		util_die("realloc: %s\n", strerror(errno));
+		util_die("abort: realloc: %s\n", strerror(errno));
 
 	return ret;
 }
@@ -69,7 +69,7 @@
 	char *ret;
 
 	if (!(ret = strdup(src)))
-		util_die("strdup: %s\n", strerror(errno));
+		util_die("abort: strdup: %s\n", strerror(errno));
 
 	return ret;
 }
@@ -82,7 +82,7 @@
 	char *ret;
 
 	if (!(ret = strndup(src, n)))
-		util_die("strndup: %s\n", strerror(errno));
+		util_die("abort: strndup: %s\n", strerror(errno));
 
 	return ret;
 }
@@ -120,7 +120,7 @@
 	FILE *fp;
 
 	if (!(fp = open_memstream(out, outsz)))
-		util_die("open_memstream: %s\n", strerror(errno));
+		util_die("abort: open_memstream: %s\n", strerror(errno));
 
 	return fp;
 }
@@ -174,7 +174,7 @@
 	va_end(ap);
 
 	if (!doc)
-		util_die("json_vpack_ex: %s\n", err.text);
+		util_die("abort: json_vpack_ex: %s\n", err.text);
 
 	return doc;
 }
@@ -187,7 +187,28 @@
 	char *ret;
 
 	if (!(ret = json_dumps(json, JSON_COMPACT)))
-		util_die("json_dump: %s\n", strerror(ENOMEM));
+		util_die("abort: json_dump: %s\n", strerror(ENOMEM));
 
 	return ret;
 }
+
+int
+util_getopt(int argc, char * const *argv, const char *optstring)
+{
+	int ch;
+
+	opterr = 0;
+
+	switch ((ch = getopt(argc, argv, optstring))) {
+	case '?':
+		util_die("abort: invalid option: %c\n", ch);
+		break;
+	case ':':
+		util_die("abort: missing value for option %c\n", ch);
+		break;
+	default:
+		break;
+	}
+
+	return ch;
+}
--- a/libsci/util.h	Wed Aug 17 09:38:19 2022 +0200
+++ b/libsci/util.h	Wed Aug 17 09:52:00 2022 +0200
@@ -194,4 +194,16 @@
 long long
 util_strtonum(const char *str, long long min, long long max, const char **errstr);
 
+/**
+ * Wrap getopt(3) but handle invalid option or missing value with a predefined
+ * message.
+ *
+ * \param argc number of arguments
+ * \param argv arguments
+ * \param optstring the string format
+ * \return option or -1 when complete
+ */
+int
+util_getopt(int argc, char * const *argv, const char *optstring);
+
 #endif /* !SCI_UTIL_H */
--- a/scictl/scictl.c	Wed Aug 17 09:38:19 2022 +0200
+++ b/scictl/scictl.c	Wed Aug 17 09:52:00 2022 +0200
@@ -333,7 +333,7 @@
 	if ((env = getenv("SCI_API_KEY")))
 		util_strlcpy(apiconf.key, env, sizeof (apiconf.key));
 
-	while ((ch = getopt(argc, argv, "k:u:")) != -1) {
+	while ((ch = util_getopt(argc, argv, "k:u:")) != -1) {
 		switch (ch) {
 		case 'k':
 			util_strlcpy(apiconf.key, optarg, sizeof (apiconf.key));
@@ -341,12 +341,6 @@
 		case 'u':
 			util_strlcpy(apiconf.baseurl, optarg, sizeof (apiconf.baseurl));
 			break;
-		case '?':
-			util_die("abort: invalid option: %c\n", ch);
-			break;
-		case ':':
-			util_die("abort: missing value for option %c\n", ch);
-			break;
 		default:
 			break;
 		}
--- a/scid/main.c	Wed Aug 17 09:38:19 2022 +0200
+++ b/scid/main.c	Wed Aug 17 09:52:00 2022 +0200
@@ -37,7 +37,7 @@
 	int ch;
 	void (*run)(void) = &(http_cgi_run);
 
-	while ((ch = getopt(argc, argv, "d:ft:")) != -1) {
+	while ((ch = util_getopt(argc, argv, "d:ft:")) != -1) {
 		switch (ch) {
 		case 'd':
 			util_strlcpy(scid.dbpath, optarg, sizeof (scid.dbpath));
--- a/sciworkerd/main.c	Wed Aug 17 09:38:19 2022 +0200
+++ b/sciworkerd/main.c	Wed Aug 17 09:52:00 2022 +0200
@@ -45,7 +45,7 @@
 	env();
 	opterr = 0;
 
-	while ((ch = getopt(argc, argv, "k:j:t:u:w:")) != -1) {
+	while ((ch = util_getopt(argc, argv, "k:j:t:u:w:")) != -1) {
 		switch (ch) {
 		case 'j':
 			if ((val = atoi(optarg)) > 0)