From 9b199177968778847d708b0ee9445bbf22bd8703 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 9 Dec 2023 14:10:16 +0100 Subject: [PATCH] Add special non-interactive mode for the embedded sqlite3 engine accessible via "-ni" Signed-off-by: DL6ER --- src/args.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/args.c b/src/args.c index fc49a68c..a2a76dbd 100644 --- a/src/args.c +++ b/src/args.c @@ -248,6 +248,21 @@ void parse_args(int argc, char* argv[]) argv2[5 + j] = argv[i + 2 + j]; exit(sqlite3_shell_main(argc2, argv2)); } + // Special non-interative mode + else if(i+1 < argc && strcmp(argv[i+1], "-ni") == 0) + { + int argc2 = argc - i + 4 - 2; + char **argv2 = calloc(argc2, sizeof(char*)); + argv2[0] = argv[0]; // Application name + argv2[1] = (char*)"-batch"; + argv2[2] = (char*)"-init"; + argv2[3] = (char*)"/dev/null"; + // i = "sqlite3" + // i+1 = "-h" + for(int j = 0; j < argc - i - 2; j++) + argv2[4 + j] = argv[i + 2 + j]; + exit(sqlite3_shell_main(argc2, argv2)); + } else exit(sqlite3_shell_main(argc - i, &argv[i])); } @@ -511,19 +526,30 @@ void parse_args(int argc, char* argv[]) printf(" the script.\n\n"); printf("%sEmbedded SQLite3 shell:%s\n", yellow, normal); - printf("\t%ssql %s[-h]%s, %ssqlite3 %s[-h]%s FTL's SQLite3 shell\n", green, purple, normal, green, purple, normal); - printf("\t%s-h%s starts a special %shuman-readable mode%s\n\n", purple, normal, bold, normal); + printf("\t%ssql%s, %ssqlite3%s FTL's SQLite3 shell\n", green, normal, green, normal); - printf(" Usage: %spihole-FTL sqlite3 %s[-h] %s[OPTIONS] [FILENAME] [SQL]%s\n\n", green, purple, cyan, normal); + printf(" Usage: %spihole-FTL sqlite3 %s[OPTIONS] [FILENAME] [SQL]%s\n\n", green, cyan, normal); printf(" Options:\n\n"); printf(" - %s[OPTIONS]%s is an optional set of options. All available\n", cyan, normal); - printf(" options can be found in %spihole-FTL sqlite3 --help%s\n", green, normal); + printf(" options can be found in %spihole-FTL sqlite3 --help%s.\n", green, normal); + printf(" The first option can be either %s-h%s or %s-ni%s, see below.\n", purple, normal, purple, normal); printf(" - %s[FILENAME]%s is the optional name of an SQLite database.\n", cyan, normal); printf(" A new database is created if the file does not previously\n"); printf(" exist. If this argument is omitted, SQLite3 will use a\n"); printf(" transient in-memory database instead.\n"); printf(" - %s[SQL]%s is an optional SQL statement to be executed. If\n", cyan, normal); printf(" omitted, an interactive shell is started instead.\n\n"); + printf(" There are two special %spihole-FTL sqlite3%s mode switches:\n", green, normal); + printf(" %s-h%s %shuman-readable%s mode:\n", purple, normal, bold, normal); + printf(" In this mode, the output of the shell is formatted in\n"); + printf(" a human-readable way. This is especially useful for\n"); + printf(" debugging purposes. %s-h%s is a shortcut for\n", purple, normal); + printf(" %spihole-FTL sqlite3 %s-column -header -nullvalue '(null)'%s\n\n", green, purple, normal); + printf(" %s-ni%s %snon-interative%s mode\n", purple, normal, bold, normal); + printf(" In this mode, batch mode is enforced and any possibly\n"); + printf(" existing .sqliterc file is ignored. %s-ni%s is a shortcut\n", purple, normal); + printf(" for %spihole-FTL sqlite3 %s-batch -init /dev/null%s\n\n", green, purple, normal); + printf(" Usage: %spihole-FTL sqlite3 %s-ni %s[OPTIONS] [FILENAME] [SQL]%s\n\n", green, purple, cyan, normal); printf("%sEmbedded dnsmasq options:%s\n", yellow, normal); printf("\t%sdnsmasq-test%s Test syntax of dnsmasq's config\n", green, normal);