Module Name: src Committed By: pooka Date: Wed Dec 18 20:48:31 UTC 2013
Modified Files: src/usr.bin/rump_allserver: rump_allserver.c Log Message: Use rumperr to print correct error strings on !NetBSD. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/usr.bin/rump_allserver/rump_allserver.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/rump_allserver/rump_allserver.c diff -u src/usr.bin/rump_allserver/rump_allserver.c:1.29 src/usr.bin/rump_allserver/rump_allserver.c:1.30 --- src/usr.bin/rump_allserver/rump_allserver.c:1.29 Mon Dec 16 23:27:33 2013 +++ src/usr.bin/rump_allserver/rump_allserver.c Wed Dec 18 20:48:31 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: rump_allserver.c,v 1.29 2013/12/16 23:27:33 bad Exp $ */ +/* $NetBSD: rump_allserver.c,v 1.30 2013/12/18 20:48:31 pooka Exp $ */ /*- * Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved. @@ -28,7 +28,7 @@ #include <rump/rumpuser_port.h> #ifndef lint -__RCSID("$NetBSD: rump_allserver.c,v 1.29 2013/12/16 23:27:33 bad Exp $"); +__RCSID("$NetBSD: rump_allserver.c,v 1.30 2013/12/18 20:48:31 pooka Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -48,6 +48,7 @@ __RCSID("$NetBSD: rump_allserver.c,v 1.2 #include <rump/rump.h> #include <rump/rump_syscalls.h> #include <rump/rumpdefs.h> +#include <rump/rumperr.h> __dead static void usage(void) @@ -62,19 +63,34 @@ usage(void) } __dead static void -die(int sflag, int error, const char *reason) +diedie(int sflag, const char *reason, int error, const char *errstr) { if (reason != NULL) fputs(reason, stderr); - if (error > 0) - fprintf(stderr, ": %s", strerror(error)); + if (errstr) { + fprintf(stderr, ": %s", errstr); + } fputc('\n', stderr); if (!sflag) rump_daemonize_done(error); exit(1); } +__dead static void +die(int sflag, int error, const char *reason) +{ + + diedie(sflag, reason, error, error == 0 ? NULL : strerror(error)); +} + +__dead static void +die_rumperr(int sflag, int error, const char *reason) +{ + + diedie(sflag, reason, error, error == 0 ? NULL : rump_strerror(error)); +} + static sem_t sigsem; static void sigreboot(int sig) @@ -293,6 +309,7 @@ main(int argc, char *argv[]) break; } case 'l': + setenv("LD_DYNAMIC_WEAK", "1", 1); if (dlopen(optarg, RTLD_LAZY|RTLD_GLOBAL) == NULL) { char pb[MAXPATHLEN]; /* try to mimic linker -l syntax */ @@ -341,12 +358,12 @@ main(int argc, char *argv[]) if (!sflag) { error = rump_daemonize_begin(); if (error) - die(1, error, "rump daemonize"); + die_rumperr(1, error, "rump daemonize"); } error = rump_init(); if (error) - die(sflag, error, "rump init failed"); + die_rumperr(sflag, error, "rump init failed"); /* load modules */ for (i = 0; i < curmod; i++) { @@ -355,9 +372,14 @@ main(int argc, char *argv[]) #define ETFSKEY "/module.mod" if ((error = rump_pub_etfs_register(ETFSKEY, modarray[0], RUMP_ETFS_REG)) != 0) - die(sflag, error, "module etfs register failed"); + die_rumperr(sflag, + error, "module etfs register failed"); memset(&ml, 0, sizeof(ml)); ml.ml_filename = ETFSKEY; + /* + * XXX: since this is a syscall, error namespace depends + * on loaded emulations. revisit and fix. + */ if (rump_sys_modctl(RUMP_MODCTL_LOAD, &ml) == -1) die(sflag, errno, "module load failed"); rump_pub_etfs_remove(ETFSKEY); @@ -400,12 +422,12 @@ main(int argc, char *argv[]) if ((error = rump_pub_etfs_register_withsize(etfs[i].key, etfs[i].hostpath, etfs[i].type, foffset, flen)) != 0) - die(sflag, error, "etfs register"); + die_rumperr(sflag, error, "etfs register"); } error = rump_init_server(serverurl); if (error) - die(sflag, error, "rump server init failed"); + die_rumperr(sflag, error, "rump server init failed"); if (!sflag) rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS);