> The reason for "Success" is that the code calls > > fatal("getpwnam(%s)", user); > > and not > > fatalx("getpwnam(%s)", user); > > While this fact is not widely documented, the only difference between > the (badly named) procedures fatal() and fatalx() is that fatal() > prints an error message based on errno, whereas fatalx() does not. So > one should only call fatal() in the case of an error condition that > has actually set errno.
Thanks for this explanation. I also saw your patch on commits. While this patch will surely help in this particular instance, I would rather see a more general solution to this. I really think that the fatal() function should never, ever print ': Success'. It aborts execution prematurely and as such, 'Success' is probably the opposite of what is going on. To fix this for all programs using a call to fatal() to bail out, I propose the following addition to the fatal() function (no diff yet, as I'm not behind my development machine now): void fatal(const char *fmt, ...) { va_list va; va_start(va, fmt); - vfatal(fmt, va, 1); + vfatal(fmt, va, (errno > 0) ? 1 : 0); va_end(va); exit(EXIT_FAILURE); } Besides this, we should really try to be more verbose in the error messages. The error message is not very informative to non-programmers: getpwnam(nut): Success since it doesn't really help in locating the problem. I think something in the line of error: can't get uid for user 'nut' would have a better chance of directing the OP to finding the cause of the driver not being able to start (non existant nut user). Arjen _______________________________________________ Nut-upsuser mailing list Nut-upsuser@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/nut-upsuser