diff options
author | px4dev <px4@purgatory.org> | 2013-01-23 18:58:19 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-01-23 18:58:19 -0800 |
commit | dc88dd0abb440b070e87337a7da6fd7a4c39311c (patch) | |
tree | 00260c9b8b5d6f20983f1ffbe211c39c87bd2b85 /nuttx/tools/cmpconfig.c | |
parent | d8a013f8720e81afb637b8206fbe521ccb43ac8f (diff) | |
parent | 1ce1d4460b1c7884490118ea356bf61ffbd31163 (diff) | |
download | px4-firmware-dc88dd0abb440b070e87337a7da6fd7a4c39311c.tar.gz px4-firmware-dc88dd0abb440b070e87337a7da6fd7a4c39311c.tar.bz2 px4-firmware-dc88dd0abb440b070e87337a7da6fd7a4c39311c.zip |
Merge branch 'master' into px4io-i2c
Diffstat (limited to 'nuttx/tools/cmpconfig.c')
-rw-r--r-- | nuttx/tools/cmpconfig.c | 161 |
1 files changed, 6 insertions, 155 deletions
diff --git a/nuttx/tools/cmpconfig.c b/nuttx/tools/cmpconfig.c index 2958acdc7..a5a539401 100644 --- a/nuttx/tools/cmpconfig.c +++ b/nuttx/tools/cmpconfig.c @@ -43,6 +43,8 @@ #include <ctype.h> #include <errno.h> +#include "cfgparser.h" + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -51,14 +53,6 @@ * Private Types ****************************************************************************/ -struct variable_s -{ - struct variable_s *flink; - char *var; - char *val; - char storage[1]; -}; - /**************************************************************************** * Private Functions ****************************************************************************/ @@ -69,154 +63,11 @@ static void show_usage(const char *progname) exit(EXIT_FAILURE); } -static char *skip_space(char *ptr) -{ - while (*ptr && isspace((int)*ptr)) ptr++; - return ptr; -} - -static char *read_line(FILE *stream, char *line, int len) -{ - char *ptr; - - for (;;) - { - line[len-1] = '\0'; - if (!fgets(line, len, stream)) - { - return NULL; - } - else - { - ptr = skip_space(line); - if (*ptr && *ptr != '#' && *ptr != '\n') - { - return ptr; - } - } - } -} - -static char *find_name_end(char *ptr) -{ - while (*ptr && (isalnum((int)*ptr) || *ptr == '_')) ptr++; - return ptr; -} - -static char *find_value_end(char *ptr) -{ - while (*ptr && !isspace((int)*ptr)) - { - if (*ptr == '"') - { - do ptr++; while (*ptr && *ptr != '"'); - if (*ptr) ptr++; - } - else - { - do ptr++; while (*ptr && !isspace((int)*ptr) && *ptr != '"'); - } - } - return ptr; -} - -static void parse_line(char *ptr, char **varname, char **varval) -{ - *varname = ptr; - *varval = NULL; - - ptr = find_name_end(ptr); - if (*ptr && *ptr != '=') - { - *ptr = '\0'; - ptr = skip_space(ptr + 1); - } - - if (*ptr == '=') - { - *ptr = '\0'; - ptr = skip_space(ptr + 1); - if (*ptr) - { - *varval = ptr; - ptr = find_value_end(ptr); - *ptr = '\0'; - } - } -} - -static void parse_file(FILE *stream, struct variable_s **list) -{ - char line[10242]; - struct variable_s *curr; - struct variable_s *prev; - struct variable_s *next; - char *varname; - char *varval; - char *ptr; - - do - { - ptr = read_line(stream, line, 1024); - if (ptr) - { - parse_line(ptr, &varname, &varval); - if (!varval || strcmp(varval, "n") == 0) - { - continue; - } - - if (varname) - { - int varlen = strlen(varname) + 1; - int vallen = 0; - - if (varval) - { - vallen = strlen(varval) + 1; - } - - curr = (struct variable_s *)malloc(sizeof(struct variable_s) + varlen + vallen - 1); - if (curr) - { - curr->var = &curr->storage[0]; - strcpy(curr->var, varname); - - curr->val = NULL; - if (varval) - { - curr->val = &curr->storage[varlen]; - strcpy(curr->val, varval); - } - } - - prev = 0; - next = *list; - while (next && strcmp(next->var, curr->var) <= 0) - { - prev = next; - next = next->flink; - } - - if (prev) - { - prev->flink = curr; - } - else - { - *list = curr; - } - curr->flink = next; - } - } - } - while (ptr); -} - static void compare_variables(struct variable_s *list1, struct variable_s *list2) { char *varval1; char *varval2; + int result; while (list1 || list2) { @@ -252,7 +103,7 @@ static void compare_variables(struct variable_s *list1, struct variable_s *list2 } else { - int result = strcmp(list1->var, list2->var); + result = strcmp(list1->var, list2->var); if (result < 0) { printf("file1: %s=%s\n", list1->var, varval1); @@ -265,9 +116,9 @@ static void compare_variables(struct variable_s *list1, struct variable_s *list2 printf("file2: %s=%s\n\n", list2->var, varval2); list2 = list2->flink; } - else + else /* if (result == 0) */ { - int result = strcmp(varval1, varval2); + result = strcmp(varval1, varval2); if (result != 0) { printf("file1: %s=%s\n", list1->var, varval1); |