From 53e376d836133a660223198c7bb8308fb912375e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 20 Oct 2003 09:20:11 +0000 Subject: * Refactored the source tree. --- src/libmain/shared.cc | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/libmain/shared.hh | 15 ++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/libmain/shared.cc create mode 100644 src/libmain/shared.hh (limited to 'src/libmain') diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc new file mode 100644 index 000000000000..80463308a3f0 --- /dev/null +++ b/src/libmain/shared.cc @@ -0,0 +1,79 @@ +#include +#include + +extern "C" { +#include +} + +#include "globals.hh" +#include "shared.hh" + +#include "config.h" + + +/* Initialize and reorder arguments, then call the actual argument + processor. */ +static void initAndRun(int argc, char * * argv) +{ + /* Setup Nix paths. */ + nixStore = NIX_STORE_DIR; + nixDataDir = NIX_DATA_DIR; + nixLogDir = NIX_LOG_DIR; + nixDBPath = (string) NIX_STATE_DIR + "/db"; + + /* Put the arguments in a vector. */ + Strings args; + while (argc--) args.push_back(*argv++); + args.erase(args.begin()); + + /* Expand compound dash options (i.e., `-qlf' -> `-q -l -f'). */ + for (Strings::iterator it = args.begin(); + it != args.end(); ) + { + string arg = *it; + if (arg.length() > 2 && arg[0] == '-' && arg[1] != '-') { + for (unsigned int i = 1; i < arg.length(); i++) + if (isalpha(arg[i])) + args.insert(it, (string) "-" + arg[i]); + else { + args.insert(it, string(arg, i)); + break; + } + it = args.erase(it); + } else it++; + } + + run(args); +} + + +static char buf[1024]; + +int main(int argc, char * * argv) +{ + /* ATerm setup. */ + ATerm bottomOfStack; + ATinit(argc, argv, &bottomOfStack); + + /* Turn on buffering for cerr. */ + cerr.rdbuf()->pubsetbuf(buf, sizeof(buf)); + + try { + initAndRun(argc, argv); + } catch (UsageError & e) { + msg(lvlError, + format( + "error: %1%\n" + "Try `%2% --help' for more information.") + % e.what() % programId); + return 1; + } catch (Error & e) { + msg(lvlError, format("error: %1%") % e.msg()); + return 1; + } catch (exception & e) { + msg(lvlError, format("error: %1%") % e.what()); + return 1; + } + + return 0; +} diff --git a/src/libmain/shared.hh b/src/libmain/shared.hh new file mode 100644 index 000000000000..8ea637fd21ac --- /dev/null +++ b/src/libmain/shared.hh @@ -0,0 +1,15 @@ +#ifndef __SHARED_H +#define __SHARED_H + +#include + +#include "util.hh" + + +void run(Strings args); + + +extern string programId; + + +#endif /* !__SHARED_H */ -- cgit 1.4.1