summary refs log tree commit diff
path: root/nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix')
-rw-r--r--nix/nix-daemon/guix-daemon.cc32
1 files changed, 22 insertions, 10 deletions
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 <argp.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <exception>
 
 /* 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 */
 }