From e3b53d6519cc81501d146cb2a158ee049ac4ccd4 Mon Sep 17 00:00:00 2001 From: "John Ankarstr\\xf6m" Date: Tue, 1 Jun 2021 12:10:35 +0200 Subject: Implement -a (append) option --- repl.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/repl.c b/repl.c index 9991338..3794a17 100644 --- a/repl.c +++ b/repl.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -13,16 +14,26 @@ void handle_int() { /* handle ctrl-c */ rl_redisplay(); /* thanks James Taylor on Stack Overflow */ } +void usage(char **argv) { + fprintf(stderr, "usage: %s [-a] command\n", argv[0]); + exit(1); +} + int main(int argc, char *argv[]) { - if (argc != 2) { - fprintf(stderr, "usage: %s command\n", argv[0]); - return 1; + bool append = false; + + if (argc < 2 || argc > 3) + usage(argv); + if (argc > 1 && argv[1][0] == '-') { + if (argv[1][1] != 'a' || argc < 3) + usage(argv); + append = true; } - int size = strlen(argv[1]) + 3 + 1; + int size = strlen(argv[argc-1]) + 3 + 1; char *prompt = malloc(size); if (prompt == NULL) err(1, NULL); - snprintf(prompt, size, "%s > ", argv[1]); + snprintf(prompt, size, "%s > ", argv[argc-1]); struct sigaction act = {0}; act.sa_handler = handle_int; @@ -40,10 +51,13 @@ int main(int argc, char *argv[]) { if (input[0] != '\0') add_history(input); - int size = strlen(argv[1]) + 1 + strlen(input) + 1; + int size = strlen(argv[argc-1]) + 1 + strlen(input) + 1; char *command = malloc(size); if (command == NULL) err(1, NULL); - snprintf(command, size, "%s %s", argv[1], input); + if (append) + snprintf(command, size, "%s %s", input, argv[argc-1]); + else + snprintf(command, size, "%s %s", argv[argc-1], input); system(command); -- cgit v1.2.3