changeset 969:d7501067de95

extern: add (set|get)progname polyfills
author David Demelier <markand@malikania.fr>
date Wed, 03 Feb 2021 12:37:46 +0100
parents 5ded2b4994af
children c745bb6721fd
files extern/libcompat/CMakeLists.txt extern/libcompat/src/compat.c extern/libcompat/src/compat.h.in extern/libcompat/src/getprogname.c extern/libcompat/src/setprogname.c irccd/main.c irccdctl/main.c
diffstat 7 files changed, 91 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/extern/libcompat/CMakeLists.txt	Wed Feb 03 11:19:31 2021 +0100
+++ b/extern/libcompat/CMakeLists.txt	Wed Feb 03 12:37:46 2021 +0100
@@ -37,9 +37,11 @@
 	err
 	errc
 	errx
+	getprogname
 	pledge
 	reallocarray
 	recallocarray
+	setprogname
 	strlcat
 	strlcpy
 	strsep
--- a/extern/libcompat/src/compat.c	Wed Feb 03 11:19:31 2021 +0100
+++ b/extern/libcompat/src/compat.c	Wed Feb 03 12:37:46 2021 +0100
@@ -1,5 +1,23 @@
+/*
+ * compat.c -- dummy file to avoid stupid empty library warnings
+ *
+ * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
 int
-libcompat_version()
+libcompat_presence(void)
 {
 	return 1;
 }
--- a/extern/libcompat/src/compat.h.in	Wed Feb 03 11:19:31 2021 +0100
+++ b/extern/libcompat/src/compat.h.in	Wed Feb 03 12:37:46 2021 +0100
@@ -7,9 +7,11 @@
 #cmakedefine COMPAT_HAVE_ERRC
 #cmakedefine COMPAT_HAVE_ERRX
 #cmakedefine COMPAT_HAVE_GETOPT
+#cmakedefine COMPAT_HAVE_GETPROGNAME
 #cmakedefine COMPAT_HAVE_PLEDGE
 #cmakedefine COMPAT_HAVE_REALLOCARRAY
 #cmakedefine COMPAT_HAVE_RECALLOCARRAY
+#cmakedefine COMPAT_HAVE_SETPROGNAME
 #cmakedefine COMPAT_HAVE_STRDUP
 #cmakedefine COMPAT_HAVE_STRLCAT
 #cmakedefine COMPAT_HAVE_STRLCPY
@@ -125,6 +127,11 @@
 getopt(int, char **, const char *);
 #endif
 
+#ifndef COMPAT_HAVE_GETPROGNAME
+const char *
+getprogname(void);
+#endif
+
 #ifndef COMPAT_HAVE_PLEDGE
 int
 pledge(const char *, const char *);
@@ -140,6 +147,11 @@
 recallocarray(void *, size_t, size_t, size_t);
 #endif
 
+#ifndef COMPAT_HAVE_SETPROGNAME
+void
+setprogname(const char *);
+#endif
+
 #ifndef COMPAT_HAVE_STRDUP
 char *
 strdup(const char *);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extern/libcompat/src/getprogname.c	Wed Feb 03 12:37:46 2021 +0100
@@ -0,0 +1,25 @@
+/*
+ * getprogname.c -- getprogname implementation
+ *
+ * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+extern const char *libcompat_progname;
+
+const char *
+getprogname(void)
+{
+	return libcompat_progname;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extern/libcompat/src/setprogname.c	Wed Feb 03 12:37:46 2021 +0100
@@ -0,0 +1,29 @@
+/*
+ * setprogname.c -- setprogname implementation
+ *
+ * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+
+static char libcompat_progname_buf[64] = "";
+
+const char *libcompat_progname = libcompat_progname_buf;
+
+void
+setprogname(const char *name)
+{
+	snprintf(libcompat_progname_buf, sizeof (libcompat_progname_buf), "%s", name);
+}
--- a/irccd/main.c	Wed Feb 03 11:19:31 2021 +0100
+++ b/irccd/main.c	Wed Feb 03 12:37:46 2021 +0100
@@ -197,7 +197,7 @@
 {
 	int ch;
 
-	setprogname(argv[0]);
+	setprogname("irccd");
 
 	while ((ch = getopt(argc, argv, "c:")) != -1) {
 		switch (ch) {
--- a/irccdctl/main.c	Wed Feb 03 11:19:31 2021 +0100
+++ b/irccdctl/main.c	Wed Feb 03 12:37:46 2021 +0100
@@ -523,14 +523,15 @@
 static noreturn void
 usage(void)
 {
-	/* TODO: getprogname() */
-	fprintf(stderr, "usage: irccdctl [-v] [-s sock] command [arguments...]\n");
+	fprintf(stderr, "usage: %s [-v] [-s sock] command [arguments...]\n", getprogname());
 	exit(1);
 }
 
 int
 main(int argc, char **argv)
 {
+	setprogname("irccdctl");
+
 	for (int ch; (ch = getopt(argc, argv, "s:v")) != -1; ) {
 		switch (ch) {
 		case 's':