From 868fce7c4ae92d533ec6936c8077cd4845aebd19 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 16 Dec 2012 18:28:00 +0100 Subject: daemon: Gracefully handle Nix errors. * nix/nix-daemon/guix-daemon.cc (main): Run Nix code in an exception handler; gracefully print error messages, and exit with EXIT_FAILURE. --- nix/nix-daemon/guix-daemon.cc | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'nix') diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc index 459c794f5d..6ffc8f04ad 100644 --- a/nix/nix-daemon/guix-daemon.cc +++ b/nix/nix-daemon/guix-daemon.cc @@ -27,6 +27,7 @@ #include #include #include +#include /* Variables used by `nix-daemon.cc'. */ volatile ::sig_atomic_t blockInt; @@ -170,18 +171,29 @@ main (int argc, char *argv[]) settings.useChroot = false; #endif - settings.processEnvironment (); + argvSaved = argv; + + try + { + settings.processEnvironment (); - /* FIXME: Disable substitutes until we have something that works. */ - settings.useSubstitutes = false; - settings.substituters.clear (); + /* FIXME: Disable substitutes until we have something that works. */ + settings.useSubstitutes = false; + settings.substituters.clear (); - argp_parse (&argp, argc, argv, 0, 0, 0); + argp_parse (&argp, argc, argv, 0, 0, 0); - if (geteuid () == 0 && settings.buildUsersGroup.empty ()) - fprintf (stderr, "warning: running as root is highly recommended, " - "unless `--build-users-group' is used\n"); + if (geteuid () == 0 && settings.buildUsersGroup.empty ()) + fprintf (stderr, "warning: running as root is highly recommended, " + "unless `--build-users-group' is used\n"); - argvSaved = argv; - run (nothing); + run (nothing); + } + catch (std::exception &e) + { + fprintf (stderr, "error: %s\n", e.what ()); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; /* never reached */ } -- cgit 1.4.1