static int mnt_parse_table_line(struct libmnt_fs *fs, const char *s)
{
int rc = 0;
- char *p;
+ char *p = NULL;
fs->passno = fs->freq = 0;
p = unmangle(s, &s);
if (!p || (rc = __mnt_fs_set_source_ptr(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [source]"));
+ free(p);
goto fail;
}
p = unmangle(s, &s);
if (!p || (rc = __mnt_fs_set_fstype_ptr(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [fstype]"));
+ free(p);
goto fail;
}
p = unmangle(s, &s);
if (p && (rc = mnt_fs_set_options(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [options]"));
+ free(p);
goto fail;
}
-
if (!p)
goto done;
+ free(p);
+
s = skip_separator(s);
if (!s || !*s)
goto done;
p = unmangle(s, &s);
if (!p || (rc = __mnt_fs_set_fstype_ptr(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [fstype]"));
+ free(p);
goto fail;
}
p = unmangle(s, &s);
if (!p || (rc = __mnt_fs_set_source_ptr(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [regular source]"));
+ free(p);
goto fail;
}
}
char *v = unmangle(p + 4, &end);
if (!v)
goto enomem;
- __mnt_fs_set_source_ptr(fs, v);
+ if (__mnt_fs_set_source_ptr(fs, v))
+ free(v);
} else if (!fs->target && !strncmp(p, "TARGET=", 7)) {
fs->target = unmangle(p + 7, &end);
}
if (!p || (rc = __mnt_fs_set_source_ptr(fs, p))) {
DBG(TAB, ul_debug("tab parse error: [source]"));
+ free(p);
goto fail;
}