#include #include #include #include #include #include #include #include #include #include "util/versie.h" #include "util/error.h" #include "util/debug.h" #include "util/map.h" static void usage(FILE *f) { fprintf(f, "Gebruik: aardig [-n AARDIGHEID] COMMANDO...\n" "\n" "Voer COMMANDO uit met een bepaald niveau van aardigheid.\n" "\n" " -n AARDIGHEID Niveau van aardigheid (standaard 10)\n" " -h Toon deze hulptekst\n" " -V Toon versienummer\n"); } // Returns pointer to argument array containing the command arguments static char** parse_options(int argc, char **argv, int *niceness) { int opt; while ((opt = getopt(argc, argv, "n:hV")) != -1) { switch (opt) { case 'n': *niceness = atoi(optarg); break; case 'h': usage(stdout); exit(0); case 'V': drukkedoos_print_versie(stdout, "aardig"); exit(0); case '?': fprintf(stderr, "aardig: Ongeldige optie: -%c\n", optopt); usage(stderr); exit(1); } } return argv + optind; } int entry_aardig(int argc, char **argv) { int niceness = 10; char **args = parse_options(argc, argv, &niceness); if (*args == NULL) { fprintf(stderr, "aardig: geen commando opgegeven\n"); return 1; } errno = 0; if (nice(niceness) == -1 && errno) { fprintf(stderr, "aardig: kon niet aardig worden.\n"); return 1; } execvp(args[0], args); fprintf(stderr, "aardig: kon proces niet starten: %s\n", strerror(errno)); return 1; }