From: Justin Mitchell <jumitche@redhat.com>
To: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: [PATCH 1/3] nfs.conf tidy ups
Date: Mon, 22 May 2017 16:48:42 +0100 [thread overview]
Message-ID: <1495468122.4169.8.camel@redhat.com> (raw)
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 <jumitche@rehat.com>
---
support/nfs/conffile.c | 39 +++++++++++++++++++++------------------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
index 1bc8c01..a76c7e3 100644
--- a/support/nfs/conffile.c
+++ b/support/nfs/conffile.c
@@ -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
--
1.8.3.1
next reply other threads:[~2017-05-22 15:48 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-22 15:48 Justin Mitchell [this message]
2017-06-06 14:36 ` [PATCH 1/3] nfs.conf tidy ups Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1495468122.4169.8.camel@redhat.com \
--to=jumitche@redhat.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.