Unlike change Id0a5f711e33363082ba201afda6b26043998cb1c,
parse_subsystem and parse_line_subsystem hold points to memory
of the copied string which can't be freed.
To fix the issue, duplicate the strings to be hold.
Then we can parse the std::string data directly without
copying it.
Change-Id: I4dbf543de6880537b419e6c2344ee6a40ce378f1
parse_error(state, "out of memory\n");
return 0;
}
- s->name = args[1];
+ s->name = strdup(args[1]);
s->dirname = "/dev";
list_add_tail(&subsystem_list, &s->slist);
return s;
case K_dirname:
if (args[1][0] == '/')
- s->dirname = args[1];
+ s->dirname = strdup(args[1]);
else
parse_error(state, "dirname '%s' does not start with '/'\n",
args[1]);
}
}
-static void parse_config(const char *fn, const std::string& data)
+static void parse_config(const char *fn, std::string& data)
{
char *args[UEVENTD_PARSER_MAXARGS];
parse_state state;
state.filename = fn;
state.line = 1;
- state.ptr = strdup(data.c_str()); // TODO: fix this code!
+ state.ptr = &data[0];
state.nexttoken = 0;
state.parse_line = parse_line_no_op;
for (;;) {