From 65d793b5df37b8562b7109d685f2dc30023082fd Mon Sep 17 00:00:00 2001 From: Antonio Huete Jimenez Date: Fri, 1 Mar 2013 00:29:59 +0100 Subject: [PATCH] varsym(1) - Fix return codes. * varsym was always returning 0 (success) which was incorrect. * Return codes are now as indicated in the man page. Dragonfly-bug: Reported-by: Dmitry Razumovsky --- bin/varsym/varsym.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/bin/varsym/varsym.c b/bin/varsym/varsym.c index 802e67cf38..a308aa2750 100644 --- a/bin/varsym/varsym.c +++ b/bin/varsym/varsym.c @@ -47,6 +47,7 @@ main(int ac, char **av) int verboseOpt = 1; int allOpt = 0; int execok = 0; + int ret = 0; while ((i = getopt(ac, av, "adhpqsux")) != -1) { switch (i) { @@ -96,8 +97,10 @@ main(int ac, char **av) if (marker < 0) /* no more vars */ break; } - if (bytes < 0) + if (bytes < 0) { fprintf(stderr, "varsym_list(): %s\n", strerror(errno)); + return 1; + } } for ( ; optind < ac; optind++) { @@ -116,26 +119,34 @@ main(int ac, char **av) } if (data) { error = varsym_set(level, name, data); + if (error) + ret = 2; } else { error = doexec(av + optind); } } else if (deleteOpt) { error = varsym_set(level, name, NULL); + if (error) + ret = 2; } else if (data) { error = varsym_set(level, name, data); + if (error) + ret = 2; } else { error = varsym_get(mask, name, buf, sizeof(buf)); if (error >= 0 && error <= (int)sizeof(buf)) { if (verboseOpt) printf("%s=", name); printf("%s\n", buf); + } else { + ret = 1; } } if (error < 0 && verboseOpt) fprintf(stderr, "%s: %s\n", name, strerror(errno)); } - return(0); + return ret; } static void -- 2.41.0