From d219fe2c09652fcdc6b457bb5fd72ad18a3a33c5 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Thu, 25 Jul 2013 16:21:11 +0200 Subject: [PATCH] Warn when incorrect use of add or set causes variables to be removed. --- src/tincctl.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/tincctl.c b/src/tincctl.c index f6e60fe6..d02bda52 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -1414,6 +1414,7 @@ static int cmd_config(int argc, char *argv[]) { /* Some simple checks. */ bool found = false; + bool warnonremove = false; for(int i = 0; variables[i].name; i++) { if(strcasecmp(variables[i].name, variable)) @@ -1452,6 +1453,16 @@ static int cmd_config(int argc, char *argv[]) { return 1; } + /* Change "add" into "set" for variables that do not allow multiple occurences. + Turn on warnings when it seems variables might be removed unintentionally. */ + + if(action == 1 && !(variables[i].type & VAR_MULTIPLE)) { + warnonremove = true; + action = 0; + } else if(action == 0 && (variables[i].type & VAR_MULTIPLE)) { + warnonremove = true; + } + break; } @@ -1534,9 +1545,14 @@ static int cmd_config(int argc, char *argv[]) { } // Set } else if(action == 0) { + // Warn if "set" was used for variables that can occur multiple times + if(warnonremove && strcasecmp(bvalue, value)) + fprintf(stderr, "Warning: removing %s = %s\n", variable, bvalue); + // Already set? Delete the rest... if(set) continue; + // Otherwise, replace. if(fprintf(tf, "%s = %s\n", variable, value) < 0) { fprintf(stderr, "Error writing to temporary file %s: %s\n", tmpfile, strerror(errno)); -- 2.39.5