nfs.conf tidy ups
Subsystems (2)
PATCH 1/3 nfs.conf tidy ups
Part of a sequence of attempts to tidy up the nfs.conf code and prepare it for use as part of a configuration API.
Remove static vars that prevented memory cleanup and potentially lead to parsing errors if conf_init was called again.
Signed-off-by Justin Mitchell <[email protected]>
--- support/nfs/conffile.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-)
support/nfs/conffile.c +21 -18
@@ -212,13 +212,11 @@ conf_set_now(char *section, char *arg, char *tag,* headers and feed tag-value pairs into our configuration database. */ static void -conf_parse_line (int trans,char *line,size_t sz) +conf_parse_line (int trans,char *line,size_t sz,char **section,char **subsection) {char *val, *ptr;size_t i;size_t j; -static char *section =0 ; -static char *arg =0 ;static int ln =0 ;/* Lines starting with '#' or ';' are comments. */
@@ -245,12 +243,12 @@ conf_parse_line(int trans, char *line, size_t sz)break ; } } -if (section) -free (section); +if (*section) +free (*section);if (i == sz) {xlog_warn ("config file error: line %d: " "non-matched ']', ignoring until next section" , ln); - section =0 ; + *section =NULL ;return ; }/* Strip off any blanks before ']' */
@@ -260,18 +258,19 @@ conf_parse_line(int trans, char *line, size_t sz) val++, j++;if (*val) i = j; - section =malloc (i+1 ); -if (!section) { + *section =malloc (i+1 ); +if (!*section) {xlog_warn ("conf_parse_line: %d: malloc (%lu) failed" , ln, (unsigned long )i);return ; } -strncpy (section, line, i); - section[i] ='\0' ; +strncpy (*section, line, i); + (*section)[i] ='\0' ; -if (arg) -free (arg); - arg =0 ; +if (*subsection) { +free (*subsection); + *subsection =NULL ; + } ptr =strchr (val,'"' );if (ptr ==NULL )
@@ -284,8 +283,8 @@ conf_parse_line(int trans, char *line, size_t sz) "non-matched '\"', ignoring until next section", ln); }else { *ptr ='\0' ; - arg =strdup (line); -if (!arg) + *subsection =strdup (line); +if (!*subsection)xlog_warn ("conf_parse_line: %d: malloc arg failed" , ln); }return ;
@@ -295,7 +294,7 @@ conf_parse_line(int trans, char *line, size_t sz)for (i =0 ; i < sz; i++) {if (line[i] =='=' ) {/* If no section, we are ignoring the lines. */ -if (!section) { +if (!*section) {xlog_warn ("config file error: line %d: " "ignoring line due to no section" , ln);return ;
@@ -327,7 +326,7 @@ conf_parse_line(int trans, char *line, size_t sz)conf_load (trans, val); else/* XXX Perhaps should we not ignore errors? */ - conf_set(trans, section, arg, line, val, 0, 0); + conf_set(trans, *section, *subsection, line, val, 0, 0);return ; } }
@@ -346,6 +345,8 @@ conf_parse(int trans, char *buf, size_t sz)char *cp = buf;char *bufend = buf + sz;char *line; +char *section =NULL ; +char *subsection =NULL ; line = cp;while (cp < bufend) {
@@ -355,7 +356,7 @@ conf_parse(int trans, char *buf, size_t sz) *(cp -1 ) = *cp =' ' ; else { *cp ='\0' ; -conf_parse_line (trans, line, cp - line); +conf_parse_line (trans, line, cp - line, §ion, &subsection); line = cp +1 ; } }
@@ -363,6 +364,8 @@ conf_parse(int trans, char *buf, size_t sz) }if (cp != line)xlog_warn ("conf_parse: last line non-terminated, ignored." ); +if (section)free (section); +if (subsection)free (subsection); } static void
Signature · 1 line
1.8.3.1
Quoted 7 lines · Justin Mitchell
Part of a sequence of attempts to tidy up the nfs.conf code and prepare it for use as part of a configuration API.
Remove static vars that prevented memory cleanup and potentially lead to parsing errors if
conf_initwas called again.Signed-off-by Justin Mitchell <[email protected]>
Committed...
steved.
Quoted 124 lines
--- support/nfs/conffile.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-)support/nfs/conffile.c +21
-18@@ -212,13 +212,11 @@ conf_set_now(char *section, char *arg, char *tag,* headers and feed tag-value pairs into our configuration database. */ static void -conf_parse_line (int trans,char *line,size_t sz) +conf_parse_line (int trans,char *line,size_t sz,char **section,char **subsection) {char *val, *ptr;size_t i;size_t j; -static char *section =0 ; -static char *arg =0 ;static int ln =0 ;/* Lines starting with '#' or ';' are comments. */ @@ -245,12 +243,12 @@ conf_parse_line(int trans, char *line, size_t sz)break ; } } -if (section) -free (section); +if (*section) +free (*section);if (i == sz) {xlog_warn ("config file error: line %d: " "non-matched ']', ignoring until next section" , ln); - section =0 ; + *section =NULL ;return ; }/* Strip off any blanks before ']' */ @@ -260,18 +258,19 @@ conf_parse_line(int trans, char *line, size_t sz) val++, j++;if (*val) i = j; - section =malloc (i+1 ); -if (!section) { + *section =malloc (i+1 ); +if (!*section) {xlog_warn ("conf_parse_line: %d: malloc (%lu) failed" , ln, (unsigned long )i);return ; } -strncpy (section, line, i); - section[i] ='\0' ; +strncpy (*section, line, i); + (*section)[i] ='\0' ; -if (arg) -free (arg); - arg =0 ; +if (*subsection) { +free (*subsection); + *subsection =NULL ; + } ptr =strchr (val,'"' );if (ptr ==NULL )@@ -284,8 +283,8 @@ conf_parse_line(int trans, char *line, size_t sz) "non-matched '\"', ignoring until next section", ln); }else { *ptr ='\0' ; - arg =strdup (line); -if (!arg) + *subsection =strdup (line); +if (!*subsection)xlog_warn ("conf_parse_line: %d: malloc arg failed" , ln); }return ;@@ -295,7 +294,7 @@ conf_parse_line(int trans, char *line, size_t sz)for (i =0 ; i < sz; i++) {if (line[i] =='=' ) {/* If no section, we are ignoring the lines. */ -if (!section) { +if (!*section) {xlog_warn ("config file error: line %d: " "ignoring line due to no section" , ln);return ;@@ -327,7 +326,7 @@ conf_parse_line(int trans, char *line, size_t sz)conf_load (trans, val); else/* XXX Perhaps should we not ignore errors? */ - conf_set(trans, section, arg, line, val, 0, 0); + conf_set(trans, *section, *subsection, line, val, 0, 0);return ; } }@@ -346,6 +345,8 @@ conf_parse(int trans, char *buf, size_t sz)char *cp = buf;char *bufend = buf + sz;char *line; +char *section =NULL ; +char *subsection =NULL ; line = cp;while (cp < bufend) {@@ -355,7 +356,7 @@ conf_parse(int trans, char *buf, size_t sz) *(cp -1 ) = *cp =' ' ; else { *cp ='\0' ; -conf_parse_line (trans, line, cp - line); +conf_parse_line (trans, line, cp - line, §ion, &subsection); line = cp +1 ; } }@@ -363,6 +364,8 @@ conf_parse(int trans, char *buf, size_t sz) }if (cp != line)xlog_warn ("conf_parse: last line non-terminated, ignored." ); +if (section)free (section); +if (subsection)free (subsection); } static void