diff options
| -rw-r--r-- | src/aardig.c | 69 | 
1 files changed, 69 insertions, 0 deletions
diff --git a/src/aardig.c b/src/aardig.c new file mode 100644 index 0000000..a56f52d --- /dev/null +++ b/src/aardig.c @@ -0,0 +1,69 @@ +#include <assert.h> +#include <ctype.h> +#include <errno.h> +#include <getopt.h> +#include <pwd.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#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 bepaalde 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 '?': +        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; +  } + +  if (nice(niceness) == -1 && errno) { +    fprintf(stderr, "aardig: kon niet aardig worden.\n"); +    return 1; +  } + +  execvp(args[0], args); + +  return 0; +}  | 
