tools: env: bug: config structs must be defined in tools library
[platform/kernel/u-boot.git] / tools / env / fw_env.c
index bd195b4..1420ac5 100644 (file)
@@ -15,6 +15,7 @@
 #include <env_flags.h>
 #include <fcntl.h>
 #include <linux/stringify.h>
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
 
 #include "fw_env.h"
 
-#define DIV_ROUND_UP(n, d)     (((n) + (d) - 1) / (d))
+struct common_args common_args;
+struct printenv_args printenv_args;
+struct setenv_args setenv_args;
 
-#define WHITESPACE(c) ((c == '\t') || (c == ' '))
+#define DIV_ROUND_UP(n, d)     (((n) + (d) - 1) / (d))
 
 #define min(x, y) ({                           \
        typeof(x) _min1 = (x);                  \
@@ -134,20 +137,22 @@ static inline ulong getenvsize (void)
        return rc;
 }
 
-static char *fw_string_blank(char *s, int noblank)
+static char *skip_chars(char *s)
 {
-       int i;
-       int len = strlen(s);
-
-       for (i = 0; i < len; i++, s++) {
-               if ((noblank && !WHITESPACE(*s)) ||
-                       (!noblank && WHITESPACE(*s)))
-                       break;
+       for (; *s != '\0'; s++) {
+               if (isblank(*s))
+                       return s;
        }
-       if (i == len)
-               return NULL;
+       return NULL;
+}
 
-       return s;
+static char *skip_blanks(char *s)
+{
+       for (; *s != '\0'; s++) {
+               if (!isblank(*s))
+                       return s;
+       }
+       return NULL;
 }
 
 /*
@@ -239,22 +244,10 @@ int fw_printenv (int argc, char *argv[])
        char *env, *nxt;
        int i, rc = 0;
 
-#ifdef CONFIG_FILE
-       if (argc >= 2 && strcmp(argv[1], "-c") == 0) {
-               argv += 2;
-               argc -= 2;
-       }
-#endif
-
-       if (argc >= 2 && strcmp(argv[1], "-a") == 0) {
-               argv += 2;
-               argc -= 2;
-       }
-
        if (fw_env_open())
                return -1;
 
-       if (argc == 1) {                /* Print all env variables  */
+       if (argc == 0) {                /* Print all env variables  */
                for (env = environment.data; *env; env = nxt + 1) {
                        for (nxt = env; *nxt; ++nxt) {
                                if (nxt >= &environment.data[ENV_SIZE]) {
@@ -269,17 +262,13 @@ int fw_printenv (int argc, char *argv[])
                return 0;
        }
 
-       if (strcmp (argv[1], "-n") == 0) {
-               ++argv;
-               --argc;
-               if (argc != 2) {
-                       fprintf (stderr, "## Error: "
-                               "`-n' option requires exactly one argument\n");
-                       return -1;
-               }
+       if (printenv_args.name_suppress && argc != 1) {
+               fprintf(stderr,
+                       "## Error: `-n' option requires exactly one argument\n");
+               return -1;
        }
 
-       for (i = 1; i < argc; ++i) {    /* print single env variables   */
+       for (i = 0; i < argc; ++i) {    /* print single env variables   */
                char *name = argv[i];
                char *val = NULL;
 
@@ -476,24 +465,8 @@ int fw_setenv(int argc, char *argv[])
        char *value = NULL;
        int valc;
 
-#ifdef CONFIG_FILE
-       if (argc >= 2 && strcmp(argv[1], "-c") == 0) {
-               argv += 2;
-               argc -= 2;
-       }
-#endif
-
-       if (argc < 2) {
-               errno = EINVAL;
-               return -1;
-       }
-
-       if (strcmp(argv[1], "-a") == 0) {
-               argv += 2;
-               argc -= 2;
-       }
-
-       if (argc < 2) {
+       if (argc < 1) {
+               fprintf(stderr, "## Error: variable name missing\n");
                errno = EINVAL;
                return -1;
        }
@@ -503,9 +476,9 @@ int fw_setenv(int argc, char *argv[])
                return -1;
        }
 
-       name = argv[1];
-       valv = argv + 2;
-       valc = argc - 2;
+       name = argv[0];
+       valv = argv + 1;
+       valc = argc - 1;
 
        if (env_flags_validate_env_set_params(name, valv, valc) < 0)
                return 1;
@@ -597,31 +570,29 @@ int fw_parse_script(char *fname)
                }
 
                /* Drop ending line feed / carriage return */
-               while (len > 0 && (dump[len - 1] == '\n' ||
-                               dump[len - 1] == '\r')) {
-                       dump[len - 1] = '\0';
-                       len--;
-               }
+               dump[--len] = '\0';
+               if (len && dump[len - 1] == '\r')
+                       dump[--len] = '\0';
 
                /* Skip comment or empty lines */
-               if ((len == 0) || dump[0] == '#')
+               if (len == 0 || dump[0] == '#')
                        continue;
 
                /*
                 * Search for variable's name,
                 * remove leading whitespaces
                 */
-               name = fw_string_blank(dump, 1);
+               name = skip_blanks(dump);
                if (!name)
                        continue;
 
                /* The first white space is the end of variable name */
-               val = fw_string_blank(name, 0);
+               val = skip_chars(name);
                len = strlen(name);
                if (val) {
                        *val++ = '\0';
                        if ((val - name) < len)
-                               val = fw_string_blank(val, 1);
+                               val = skip_blanks(val);
                        else
                                val = NULL;
                }