Browse Source

opt: avoid using err.h.

Seems it's not available on Solaris.
Rusty Russell 13 years ago
parent
commit
42cdf910d2
2 changed files with 27 additions and 22 deletions
  1. 16 11
      ccan/opt/opt.c
  2. 11 11
      ccan/opt/test/run-checkopt.c

+ 16 - 11
ccan/opt/opt.c

@@ -4,7 +4,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <err.h>
 #include <assert.h>
 #include <stdarg.h>
 #include <stdint.h>
@@ -102,6 +101,12 @@ const char *next_sopt(const char *p, unsigned *i)
 	return p;
 }
 
+/* Avoids dependency on err.h or ccan/err */
+#ifndef failmsg
+#define failmsg(fmt, ...) \
+	do { fprintf(stderr, fmt, __VA_ARGS__); exit(1); } while(0)
+#endif
+
 static void check_opt(const struct opt_table *entry)
 {
 	const char *p;
@@ -110,26 +115,26 @@ static void check_opt(const struct opt_table *entry)
 	if (entry->type != OPT_HASARG && entry->type != OPT_NOARG
 	    && entry->type != (OPT_EARLY|OPT_HASARG)
 	    && entry->type != (OPT_EARLY|OPT_NOARG))
-		errx(1, "Option %s: unknown entry type %u",
-		     entry->names, entry->type);
+		failmsg("Option %s: unknown entry type %u",
+			entry->names, entry->type);
 
 	if (!entry->desc)
-		errx(1, "Option %s: description cannot be NULL", entry->names);
+		failmsg("Option %s: description cannot be NULL", entry->names);
 
 
 	if (entry->names[0] != '-')
-		errx(1, "Option %s: does not begin with '-'", entry->names);
+		failmsg("Option %s: does not begin with '-'", entry->names);
 
 	for (p = first_name(entry->names, &len); p; p = next_name(p, &len)) {
 		if (*p == '-') {
 			if (len == 1)
-				errx(1, "Option %s: invalid long option '--'",
-				     entry->names);
+				failmsg("Option %s: invalid long option '--'",
+					entry->names);
 			opt_num_long++;
 		} else {
 			if (len != 1)
-				errx(1, "Option %s: invalid short option"
-				     " '%.*s'", entry->names, len+1, p-1);
+				failmsg("Option %s: invalid short option"
+					" '%.*s'", entry->names, len+1, p-1);
 			opt_num_short++;
 			if (entry->type == OPT_HASARG)
 				opt_num_short_arg++;
@@ -137,8 +142,8 @@ static void check_opt(const struct opt_table *entry)
 		/* Don't document args unless there are some. */
 		if (entry->type == OPT_NOARG) {
 			if (p[len] == ' ' || p[len] == '=')
-				errx(1, "Option %s: does not take arguments"
-				     " '%s'", entry->names, p+len+1);
+				failmsg("Option %s: does not take arguments"
+					" '%s'", entry->names, p+len+1);
 		}
 	}
 }

+ 11 - 11
ccan/opt/test/run-checkopt.c

@@ -9,9 +9,9 @@
 
 /* We don't actually want it to exit... */
 static jmp_buf exited;
-#define errx save_and_jump
+#define failmsg save_and_jump
 
-static void save_and_jump(int ecode, const char *fmt, ...);
+static void save_and_jump(const char *fmt, ...);
 
 #include <ccan/opt/helpers.c>
 #include <ccan/opt/opt.c>
@@ -34,14 +34,14 @@ static int saved_vprintf(const char *fmt, va_list ap)
 	return ret;
 }
 
-static void save_and_jump(int ecode, const char *fmt, ...)
+static void save_and_jump(const char *fmt, ...)
 {
 	va_list ap;
 
 	va_start(ap, fmt);
 	saved_vprintf(fmt, ap);
 	va_end(ap);
-	longjmp(exited, ecode + 1);
+	longjmp(exited, 1);
 }
 
 static void reset(void)
@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
 			      NULL, NULL, "1.2.3", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output, "Option -a: unknown entry type"));
 	}
 	reset();
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("-a", test_noarg, "", NULL);
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output, "Option -a: description cannot be NULL"));
 	}
 	reset();
@@ -88,7 +88,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("a", test_noarg, "", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output, "Option a: does not begin with '-'"));
 	}
 
@@ -100,7 +100,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("--", test_noarg, "", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output, "Option --: invalid long option '--'"));
 	}
 
@@ -112,7 +112,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("--a|-aaa", test_noarg, "", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output,
 			   "Option --a|-aaa: invalid short option '-aaa'"));
 	}
@@ -124,7 +124,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("--a foo", test_noarg, "", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output,
 			   "Option --a foo: does not take arguments 'foo'"));
 	}
@@ -136,7 +136,7 @@ int main(int argc, char *argv[])
 		opt_register_noarg("--a=foo", test_noarg, "", "");
 		fail("_opt_register returned?");
 	} else {
-		ok1(exitval - 1 == 1);
+		ok1(exitval == 1);
 		ok1(strstr(output,
 			   "Option --a=foo: does not take arguments 'foo'"));
 	}