[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 1/3] shell: set -d



! libc: setenv() beruecksichtigt den overwrite-Parameter jetzt
+ shell: set -d setzt einen Defaultwert fuer eine Umgebungsvariable.
  Wenn die Variable bereits gesetzt ist, bleibt sie unveraendert.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/c/shell/commmands.c |   21 +++++++++++++++++++--
 src/modules/lib/envvars.c       |    2 +-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/modules/c/shell/commmands.c b/src/modules/c/shell/commmands.c
index 897c937..6c33478 100644
--- a/src/modules/c/shell/commmands.c
+++ b/src/modules/c/shell/commmands.c
@@ -287,6 +287,21 @@ void set_list_vars(void);
 
 int shell_command_set(int argc, char* argv[], const char* args)
 {
+    int overwrite = 1;
+
+    while (argc > 1) {
+        if (!strcmp(argv[1], "-d")) {
+            overwrite = 0;
+        } else if (!strcmp(argv[1], "-h")) {
+            set_display_usage();
+            return EXIT_SUCCESS;
+        } else {
+            break;
+        }
+        argc--;
+        argv++;
+    }
+
     switch (argc) {
         case 1:
             set_list_vars();
@@ -297,7 +312,7 @@ int shell_command_set(int argc, char* argv[], const char* args)
             break;
 
         case 3:
-            setenv(argv[1], argv[2], 1);
+            setenv(argv[1], argv[2], overwrite);
             break;
 
         default:
@@ -320,6 +335,8 @@ void set_list_vars()
 
 void set_display_usage()
 {
-    puts("\nAufruf: set [<Variable> [<Wert>]]\n");
+    puts("\nAufruf: set [-d] [<Variable> [<Wert>]]");
+    puts("  -d: Defaultwert setzen. Wenn die Variable schon gesetzt ist, wird "
+        "ihr Wert\n      nicht geändert.\n");
 }
 
diff --git a/src/modules/lib/envvars.c b/src/modules/lib/envvars.c
index 12ba4f6..323cd86 100644
--- a/src/modules/lib/envvars.c
+++ b/src/modules/lib/envvars.c
@@ -261,7 +261,7 @@ int setenv(const char* name, const char* value, int overwrite)
 
         //In die Liste einfuegen
         envvar_list = list_push(envvar_list, envvar);
-    } else {
+    } else if (overwrite) {
         char* new_value = malloc(strlen(value) + 1);
         memcpy(new_value, value, strlen(value) + 1);
         
-- 
1.6.0.2