diff options
author | Chris Johns <chrisj@rtems.org> | 2009-11-18 00:09:21 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2009-11-18 00:09:21 +0000 |
commit | 05404983e2eedd4801abc7433de57db59a51ad85 (patch) | |
tree | 2500c9f71eaaf7bbb83469604de22190e60e95d9 /cpukit/libmisc/shell/main_setenv.c | |
parent | ba9556096c6ed8e342ff12cef4abb485796bd3ff (diff) |
2009-11-18 Chris Johns <chrisj@rtems.org>
* libmisc/shell/main_getenv.c, libmisc/shell/main_setenv.c,
libmisc/shell/main_unsetenv.c: New. The shell can now play with
environment variables.
* libmisc/Makefile.am, libmisc/shell/shellconfig.h: Add setenv,
getenv, and unsetenv to the shell.
Diffstat (limited to 'cpukit/libmisc/shell/main_setenv.c')
-rw-r--r-- | cpukit/libmisc/shell/main_setenv.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/cpukit/libmisc/shell/main_setenv.c b/cpukit/libmisc/shell/main_setenv.c new file mode 100644 index 0000000000..7164c27f9a --- /dev/null +++ b/cpukit/libmisc/shell/main_setenv.c @@ -0,0 +1,75 @@ +/* + * Set an environment vairable. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> + +#include <rtems.h> +#include <rtems/shell.h> +#include "internal.h" + +int rtems_shell_main_setenv(int argc, char *argv[]) +{ + char* env = NULL; + char* string = NULL; + int len = 0; + int arg; + char* p; + + if (argc <= 2) + { + printf ("error: no variable or string\n"); + return 1; + } + + env = argv[1]; + + for (arg = 2; arg < argc; arg++) + len += strlen (argv[arg]); + + len += argc - 2 - 1; + + string = malloc (len + 1); + + if (!string) + { + printf ("error: no memory\n"); + return 1; + } + + for (arg = 2, p = string; arg < argc; arg++) + { + strcpy (p, argv[arg]); + p += strlen (argv[arg]); + if (arg < (argc - 1)) + { + *p = ' '; + p++; + } + } + + if (setenv (env, string, 1) < 0) + { + printf ("error: %s\n", strerror (errno)); + return 1; + } + + return 0; +} + +rtems_shell_cmd_t rtems_shell_SETENV_Command = { + "setenv", /* name */ + "setenv [var] [string]", /* usage */ + "misc", /* topic */ + rtems_shell_main_setenv, /* command */ + NULL, /* alias */ + NULL /* next */ +}; |