2
0
mirror of git://github.com/lxc/lxc synced 2025-08-30 14:52:05 +00:00

confile: preserve newlines

Users were confused when the config file created during cloning or copying a
container suddenly missed all newlines. Let's keep them.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Christian Brauner 2017-09-10 09:38:57 +02:00
parent 5fe9c0a0e6
commit 3b13691dca
No known key found for this signature in database
GPG Key ID: 7B3C391EFEA93624

View File

@ -1920,42 +1920,51 @@ struct parse_line_conf {
static int parse_line(char *buffer, void *data)
{
struct lxc_config_t *config;
char *dot, *key, *line, *linep, *value;
struct parse_line_conf *plc = data;
bool empty_line;
struct lxc_config_t *config;
int ret = 0;
char *dup = buffer;
struct parse_line_conf *plc = data;
if (lxc_is_line_empty(buffer))
return 0;
/* If there are newlines in the config file we should keep them. */
empty_line = lxc_is_line_empty(dup);
if (empty_line)
dup = "\n";
/* We have to dup the buffer otherwise, at the re-exec for reboot we
* modified the original string on the stack by replacing '=' by '\0'
* below.
*/
linep = line = strdup(buffer);
linep = line = strdup(dup);
if (!line)
return -1;
if (!plc->from_include)
if ((ret = append_unexp_config_line(line, plc->conf)))
goto out;
if (!plc->from_include) {
ret = append_unexp_config_line(line, plc->conf);
if (ret < 0)
goto on_error;
}
if (empty_line)
return 0;
line += lxc_char_left_gc(line, strlen(line));
/* ignore comments */
if (line[0] == '#')
goto out;
goto on_error;
/* martian option - don't add it to the config itself */
if (strncmp(line, "lxc.", 4))
goto out;
goto on_error;
ret = -1;
dot = strstr(line, "=");
dot = strchr(line, '=');
if (!dot) {
ERROR("invalid configuration line: %s", line);
goto out;
ERROR("Invalid configuration line: %s", line);
goto on_error;
}
*dot = '\0';
@ -1980,7 +1989,7 @@ static int parse_line(char *buffer, void *data)
config = lxc_get_config(key);
if (!config) {
ERROR("Unknown configuration key \"%s\"", key);
goto out;
goto on_error;
}
/* [START]: REMOVE IN LXC 3.0 */
@ -1998,7 +2007,7 @@ static int parse_line(char *buffer, void *data)
ret = config->set(key, value, plc->conf, NULL);
out:
on_error:
free(linep);
return ret;
}