From: Christophe CURIS <christophe.cu...@free.fr> Try to provide better messages to understand what went wrong, including more information, and made them translatable;
Changed the call to 'dup' into 'dup2' which has a safer behaviour because we can specify the target descriptor we want; Removed a few check for the 'close()' because in these cases we do not really care if they fail (we can't do anything about it and it just adds noise in the logs). Signed-off-by: Christophe CURIS <christophe.cu...@free.fr> --- src/misc.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/misc.c b/src/misc.c index 5d54561..b4c7102 100644 --- a/src/misc.c +++ b/src/misc.c @@ -33,6 +33,7 @@ #include <pwd.h> #include <math.h> #include <time.h> +#include <errno.h> #include <X11/XKBlib.h> @@ -929,48 +930,51 @@ Bool start_bg_helper(WScreen *scr) int filedes[2]; if (pipe(filedes) < 0) { - werror("pipe() failed:can't set workspace specific background image"); + werror(_("%s failed, can't set workspace specific background image (%s)"), + "pipe()", strerror(errno)); return False; } pid = fork(); if (pid < 0) { - werror("fork() failed:can't set workspace specific background image"); - if (close(filedes[0]) < 0) - werror("could not close pipe"); - if (close(filedes[1]) < 0) - werror("could not close pipe"); + werror(_("%s failed, can't set workspace specific background image (%s)"), + "fork()", strerror(errno)); + close(filedes[0]); + close(filedes[1]); return False; } else if (pid == 0) { - char *dither; + const char *dither; /* We don't need this side of the pipe in the child process */ close(filedes[1]); SetupEnvironment(scr); - if (close(0) < 0) - werror("could not close pipe"); - if (dup(filedes[0]) < 0) { - werror("dup() failed:can't set workspace specific background image"); + close(STDIN_FILENO); + if (dup2(filedes[0], STDIN_FILENO) < 0) { + werror(_("%s failed, can't set workspace specific background image (%s)"), + "dup2()", strerror(errno)); + exit(1); } close(filedes[0]); + dither = wPreferences.no_dithering ? "-m" : "-d"; if (wPreferences.smooth_workspace_back) execlp("wmsetbg", "wmsetbg", "-helper", "-S", dither, NULL); else execlp("wmsetbg", "wmsetbg", "-helper", dither, NULL); - werror("could not execute wmsetbg"); + + werror(_("could not execute \"%s\": %s"), "wmsetbg", strerror(errno)); exit(1); } else { /* We don't need this side of the pipe in the parent process */ close(filedes[0]); - if (fcntl(filedes[1], F_SETFD, FD_CLOEXEC) < 0) { - werror("error setting close-on-exec flag"); - } + if (fcntl(filedes[1], F_SETFD, FD_CLOEXEC) < 0) + wwarning(_("could not set close-on-exec flag for bg_helper's communication file handle (%s)"), + strerror(errno)); scr->helper_fd = filedes[1]; scr->helper_pid = pid; -- 2.1.1 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.