Quellcode durchsuchen

[libc] Add set command for env in musl

BernardXiong vor 4 Jahren
Ursprung
Commit
901bea01dd
1 geänderte Dateien mit 47 neuen und 9 gelöschten Zeilen
  1. 47 9
      components/libc/compilers/musl/libc.c

+ 47 - 9
components/libc/compilers/musl/libc.c

@@ -15,15 +15,14 @@
 
 #include "libc.h"
 
-#ifdef RT_USING_PTHREADS
-#include <pthread.h>
-#endif
-
 int _EXFUN(putenv,(char *__string));
+extern char **__environ;
 
 int libc_system_init(void)
 {
-#if defined(RT_USING_DFS) & defined(RT_USING_DFS_DEVFS) & defined(RT_USING_CONSOLE)
+#if defined(RT_USING_DFS) & defined(RT_USING_DFS_DEVFS)
+
+#if defined(RT_USING_CONSOLE)
     rt_device_t dev_console;
 
     dev_console = rt_console_get_device();
@@ -35,16 +34,55 @@ int libc_system_init(void)
         libc_stdio_set_console(dev_console->parent.name, O_WRONLY);
     #endif
     }
+#endif
 
     /* set PATH and HOME */
     putenv("PATH=/bin");
     putenv("HOME=/home");
 #endif
 
-#if defined RT_USING_PTHREADS && !defined RT_USING_COMPONENTS_INIT
-    pthread_system_init();
-#endif
-
     return 0;
 }
 INIT_COMPONENT_EXPORT(libc_system_init);
+
+int env_set(int argc, char** argv)
+{
+    switch (argc)
+    {
+    case 1:
+        {
+            int index;
+
+            /* show all of environment variables */
+            for(index = 0; __environ[index]!=NULL; index++)
+            {
+                printf("%2d.%s\n", index, __environ[index]);
+            }
+        }
+        break;
+    case 2:
+        {
+            char *c = strchr(argv[1], '=');
+            if (c)
+            {
+                /* use setenv to add/update environment variable */
+                *c = '\0';
+                setenv(argv[1], c + 1, 1);
+            }
+            else
+            {
+                const char *value = getenv(argv[1]);
+                if (value)
+                {
+                    printf("%s=%s\n", argv[1], value);
+                }
+            }
+        }
+        break;
+    default:
+        break;
+    }
+
+    return 0;
+}
+MSH_CMD_EXPORT_ALIAS(env_set, set, set or show environment variable);