Whamcloud - gitweb
e2fsck: Only ask to relocate a block group's inode table once
[tools/e2fsprogs.git] / e2fsck / profile.c
index 4aac636..5e9dc53 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * profile.c -- A simple configuration file parsing "library in a file"
- * 
+ *
  * The profile library was originally written by Theodore Ts'o in 1995
  * for use in the MIT Kerberos v5 library.  It has been
  * modified/enhanced/bug-fixed over time by other members of the MIT
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Copyright (C) 1985-2005 by the Massachusetts Institute of Technology.
- * 
+ *
  * All rights reserved.
- * 
+ *
  * Export of this software from the United States of America may require
  * a specific license from the United States Government.  It is the
  * responsibility of any person or organization contemplating export to
  * obtain such a license before exporting.
- * 
+ *
  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
  * distribute this software and its documentation for any purpose and
  * without fee is hereby granted, provided that the above copyright
  * M.I.T. makes no representations about the suitability of this software
  * for any purpose.  It is provided "as is" without express or implied
  * warranty.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- * 
+ *
  */
 
 #ifdef HAVE_UNISTD_H
@@ -218,12 +218,12 @@ static errcode_t profile_get_value(profile_t profile, const char *name,
  *     object.
  */
 
-static int compstr(const void *m1, const void *m2) 
+static int compstr(const void *m1, const void *m2)
 {
        const char *s1 = *((const char * const *) m1);
        const char *s2 = *((const char * const *) m2);
 
-       return strcmp(s1, s2); 
+       return strcmp(s1, s2);
 }
 
 static void free_list(char **list)
@@ -232,7 +232,7 @@ static void free_list(char **list)
 
     if (list == 0)
            return;
-    
+
     for (cp = list; *cp; cp++)
        free(*cp);
     free(list);
@@ -295,7 +295,7 @@ errout:
        return retval;
 }
 
-errcode_t 
+errcode_t
 profile_init(const char **files, profile_t *ret_profile)
 {
        const char **fs;
@@ -327,7 +327,7 @@ profile_init(const char **files, profile_t *ret_profile)
                                *last = new_file;
                                last = &new_file->next;
                        }
-               } else if ((retval != ENOTDIR) && 
+               } else if ((retval != ENOTDIR) &&
                           strcmp(*fs, default_filename))
                        goto errout;
 
@@ -359,7 +359,7 @@ errout:
        return retval;
 }
 
-void 
+void
 profile_release(profile_t profile)
 {
        prf_file_t      p, next;
@@ -431,7 +431,7 @@ errcode_t profile_set_default(profile_t profile, const char *def_string)
                if (retval) {
                errout:
                        if (syntax_err_cb)
-                               (syntax_err_cb)(prf->filespec, retval, 
+                               (syntax_err_cb)(prf->filespec, retval,
                                                state.line_num);
                        free(line);
                        if (prf->root)
@@ -494,7 +494,7 @@ errcode_t profile_open_file(const char * filespec,
        }
        expanded_filename = malloc(len);
        if (expanded_filename == 0) {
-           profile_free_file(prf);     
+           profile_free_file(prf);
            return errno;
        }
        if (home_env) {
@@ -583,7 +583,7 @@ errcode_t profile_update_file(prf_file_t prf)
                retval = parse_line(buf, &state);
                if (retval) {
                        if (syntax_err_cb)
-                               (syntax_err_cb)(prf->filespec, retval, 
+                               (syntax_err_cb)(prf->filespec, retval,
                                                state.line_num);
                        fclose(f);
                        return retval;
@@ -603,8 +603,7 @@ void profile_free_file(prf_file_t prf)
 {
     if (prf->root)
        profile_free_node(prf->root);
-    if (prf->filespec)
-           free(prf->filespec);
+    free(prf->filespec);
     free(prf);
 }
 
@@ -686,7 +685,7 @@ static errcode_t parse_line(char *line, struct parse_state *state)
        struct profile_node     *node;
        int do_subsection = 0;
        void *iter = 0;
-       
+
        state->line_num++;
        if (state->state == STATE_GET_OBRACE) {
                cp = skip_over_blanks(line);
@@ -726,7 +725,7 @@ static errcode_t parse_line(char *line, struct parse_state *state)
                        if (*cp == 0)
                                return PROF_SECTION_SYNTAX;
                }
-               retval = profile_find_node(state->root_section, cp, 0, 1, 
+               retval = profile_find_node(state->root_section, cp, 0, 1,
                                           &iter, &state->current_section);
                if (retval == PROF_NO_SECTION) {
                        retval = profile_add_node(state->root_section,
@@ -746,7 +745,7 @@ static errcode_t parse_line(char *line, struct parse_state *state)
                        cp++;
                }
                /*
-                * Spaces or comments after ']' should not be fatal 
+                * Spaces or comments after ']' should not be fatal
                 */
                cp = skip_over_blanks(cp);
                if (!end_or_comment(*cp))
@@ -902,7 +901,7 @@ static void dump_profile(struct profile_node *root, int level,
        struct profile_node *p;
        void *iter;
        long retval;
-       
+
        iter = 0;
        do {
                retval = profile_find_node(root, 0, 0, 0, &iter, &p);
@@ -1024,16 +1023,16 @@ errcode_t profile_write_tree_to_buffer(struct profile_node *root,
 /*
  * prof_tree.c --- these routines maintain the parse tree of the
  *     config file.
- * 
+ *
  * All of the details of how the tree is stored is abstracted away in
  * this file; all of the other profile routines build, access, and
  * modify the tree via the accessor functions found in this file.
  *
  * Each node may represent either a relation or a section header.
- * 
+ *
  * A section header must have its value field set to 0, and may a one
  * or more child nodes, pointed to by first_child.
- * 
+ *
  * A relation has as its value a pointer to allocated memory
  * containing a string.  Its first_child pointer must be null.
  *
@@ -1048,18 +1047,16 @@ void profile_free_node(struct profile_node *node)
 
        if (node->magic != PROF_MAGIC_NODE)
                return;
-       
-       if (node->name)
-               free(node->name);
-       if (node->value)
-               free(node->value);
+
+       free(node->name);
+       free(node->value);
 
        for (child=node->first_child; child; child = next) {
                next = child->next;
                profile_free_node(child);
        }
        node->magic = 0;
-       
+
        free(node);
 }
 
@@ -1156,7 +1153,7 @@ errcode_t profile_add_node(struct profile_node *section, const char *name,
 
        /*
         * Find the place to insert the new node.  We look for the
-        * place *after* the last match of the node name, since 
+        * place *after* the last match of the node name, since
         * order matters.
         */
        for (p=section->first_child, last = 0; p; last = p, p = p->next) {
@@ -1191,7 +1188,7 @@ errcode_t profile_add_node(struct profile_node *section, const char *name,
  * section which matches the name; don't return relations.  If value
  * is non-NULL, then only return relations which match the requested
  * value.  (The value argument is ignored if section_flag is non-zero.)
- * 
+ *
  * The first time this routine is called, the state pointer must be
  * null.  When this profile_find_node_relation() returns, if the state
  * pointer is non-NULL, then this routine should be called again.
@@ -1210,7 +1207,7 @@ errcode_t profile_find_node(struct profile_node *section, const char *name,
                CHECK_MAGIC(p);
        } else
                p = section->first_child;
-       
+
        for (; p; p = p->next) {
                if (name && (strcmp(p->name, name)))
                        continue;
@@ -1260,7 +1257,7 @@ errcode_t profile_find_node(struct profile_node *section, const char *name,
 
 /*
  * This is a general-purpose iterator for returning all nodes that
- * match the specified name array.  
+ * match the specified name array.
  */
 struct profile_iterator {
        prf_magic_t             magic;
@@ -1275,7 +1272,7 @@ struct profile_iterator {
        int                     num;
 };
 
-errcode_t 
+errcode_t
 profile_iterator_create(profile_t profile, const char *const *names, int flags,
                        void **ret_iter)
 {
@@ -1346,7 +1343,7 @@ errcode_t profile_node_iterator(void **iter_p, struct profile_node **ret_node,
         * If the file has changed, then the node pointer is invalid,
         * so we'll have search the file again looking for it.
         */
-       if (iter->node && (iter->file && 
+       if (iter->node && (iter->file &&
                           iter->file->upd_serial != iter->file_serial)) {
                iter->flags &= ~PROFILE_ITER_FINAL_SEEN;
                skip_num = iter->num;
@@ -1483,13 +1480,13 @@ errcode_t profile_get_value(profile_t profile, const char *name,
                *ret_value = value;
        else
                retval = PROF_NO_RELATION;
-       
+
 cleanup:
        profile_iterator_free(&state);
        return retval;
 }
 
-errcode_t 
+errcode_t
 profile_get_string(profile_t profile, const char *name, const char *subname,
                   const char *subsubname, const char *def_val,
                   char **ret_string)
@@ -1498,7 +1495,7 @@ profile_get_string(profile_t profile, const char *name, const char *subname,
        errcode_t       retval;
 
        if (profile) {
-               retval = profile_get_value(profile, name, subname, 
+               retval = profile_get_value(profile, name, subname,
                                           subsubname, &value);
                if (retval == PROF_NO_SECTION || retval == PROF_NO_RELATION)
                        value = def_val;
@@ -1506,7 +1503,7 @@ profile_get_string(profile_t profile, const char *name, const char *subname,
                        return retval;
        } else
                value = def_val;
-    
+
        if (value) {
                *ret_string = malloc(strlen(value)+1);
                if (*ret_string == 0)
@@ -1517,7 +1514,7 @@ profile_get_string(profile_t profile, const char *name, const char *subname,
        return 0;
 }
 
-errcode_t 
+errcode_t
 profile_get_integer(profile_t profile, const char *name, const char *subname,
                    const char *subsubname, int def_val, int *ret_int)
 {
@@ -1552,15 +1549,15 @@ profile_get_integer(profile_t profile, const char *name, const char *subname,
        /* Garbage in string.  */
        if (end_value != value + strlen (value))
            return PROF_BAD_INTEGER;
-       
-   
+
+
        *ret_int = ret_long;
        return 0;
 }
 
-errcode_t 
+errcode_t
 profile_get_uint(profile_t profile, const char *name, const char *subname,
-                const char *subsubname, unsigned int def_val, 
+                const char *subsubname, unsigned int def_val,
                 unsigned int *ret_int)
 {
        const char      *value;
@@ -1594,7 +1591,7 @@ profile_get_uint(profile_t profile, const char *name, const char *subname,
        /* Garbage in string.  */
        if (end_value != value + strlen (value))
            return PROF_BAD_INTEGER;
-       
+
        *ret_int = ret_long;
        return 0;
 }
@@ -1613,7 +1610,7 @@ static errcode_t
 profile_parse_boolean(const char *s, int *ret_boolean)
 {
     const char *const *p;
-    
+
     if (ret_boolean == NULL)
        return PROF_EINVAL;
 
@@ -1630,11 +1627,11 @@ profile_parse_boolean(const char *s, int *ret_boolean)
                        return 0;
                }
     }
-       
+
        return PROF_BAD_BOOLEAN;
 }
 
-errcode_t 
+errcode_t
 profile_get_boolean(profile_t profile, const char *name, const char *subname,
                    const char *subsubname, int def_val, int *ret_boolean)
 {
@@ -1652,16 +1649,16 @@ profile_get_boolean(profile_t profile, const char *name, const char *subname,
                return 0;
        } else if (retval)
                return retval;
-   
+
        return profile_parse_boolean (value, ret_boolean);
 }
 
-errcode_t 
+errcode_t
 profile_iterator(void **iter_p, char **ret_name, char **ret_value)
 {
        char *name, *value;
        errcode_t       retval;
-       
+
        retval = profile_node_iterator(iter_p, 0, &name, &value);
        if (retval)
                return retval;
@@ -1734,19 +1731,19 @@ static void do_cmd(profile_t profile, char **argv)
                if (subname)
                        subsubname = names[2];
                if (subsubname && names[3]) {
-                       fprintf(stderr, 
+                       fprintf(stderr,
                                "Only 3 levels are allowed with query1\n");
                        retval = EINVAL;
                } else
-                       retval = profile_get_value(profile, name, subname, 
+                       retval = profile_get_value(profile, name, subname,
                                                   subsubname, &value);
                print_status = PRINT_VALUE;
        } else if (!strcmp(cmd, "list_sections")) {
-               retval = profile_get_subsection_names(profile, names, 
+               retval = profile_get_subsection_names(profile, names,
                                                      &values);
                print_status = PRINT_VALUES;
        } else if (!strcmp(cmd, "list_relations")) {
-               retval = profile_get_relation_names(profile, names, 
+               retval = profile_get_relation_names(profile, names,
                                                    &values);
                print_status = PRINT_VALUES;
        } else if (!strcmp(cmd, "dump")) {
@@ -1813,7 +1810,7 @@ static void do_batchmode(profile_t profile)
        }
        profile_release(profile);
        exit(0);
-       
+
 }
 
 void syntax_err_report(const char *filename, long err, int line_num)
@@ -1830,7 +1827,7 @@ int main(int argc, char **argv)
     profile_t  profile;
     long       retval;
     char       *cmd;
-    
+
     if (argc < 2) {
            fprintf(stderr, "Usage: %s filename [cmd argset]\n", program_name);
            exit(1);
@@ -1839,7 +1836,7 @@ int main(int argc, char **argv)
     initialize_prof_error_table();
 
     profile_set_syntax_err_cb(syntax_err_report);
-    
+
     retval = profile_init_path(argv[1], &profile);
     if (retval) {
        com_err(program_name, retval, "while initializing profile");