cgfsng: copy_parent_file()

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Christian Brauner 2018-02-17 19:04:05 +01:00
parent 59ac3b88d8
commit b095a8ebbb
No known key found for this signature in database
GPG Key ID: 8EB056D53EECB12D

View File

@ -648,13 +648,14 @@ on_error:
/* Copy contents of parent(@path)/@file to @path/@file */ /* Copy contents of parent(@path)/@file to @path/@file */
static bool copy_parent_file(char *path, char *file) static bool copy_parent_file(char *path, char *file)
{ {
char *lastslash, *value = NULL, *fpath, oldv;
int len = 0;
int ret; int ret;
char *fpath, *lastslash, oldv;
int len = 0;
char *value = NULL;
lastslash = strrchr(path, '/'); lastslash = strrchr(path, '/');
if (!lastslash) { /* bug... this shouldn't be possible */ if (!lastslash) {
ERROR("cgfsng:copy_parent_file: bad path %s", path); ERROR("Failed to detect \"/\" in \"%s\"", path);
return false; return false;
} }
oldv = *lastslash; oldv = *lastslash;
@ -662,22 +663,25 @@ static bool copy_parent_file(char *path, char *file)
fpath = must_make_path(path, file, NULL); fpath = must_make_path(path, file, NULL);
len = lxc_read_from_file(fpath, NULL, 0); len = lxc_read_from_file(fpath, NULL, 0);
if (len <= 0) if (len <= 0)
goto bad; goto on_error;
value = must_alloc(len + 1); value = must_alloc(len + 1);
if (lxc_read_from_file(fpath, value, len) != len) ret = lxc_read_from_file(fpath, value, len);
goto bad; if (ret != len)
goto on_error;
free(fpath); free(fpath);
*lastslash = oldv; *lastslash = oldv;
fpath = must_make_path(path, file, NULL); fpath = must_make_path(path, file, NULL);
ret = lxc_write_to_file(fpath, value, len, false); ret = lxc_write_to_file(fpath, value, len, false);
if (ret < 0) if (ret < 0)
SYSERROR("Unable to write %s to %s", value, fpath); SYSERROR("Failed to write \"%s\" to file \"%s\"", value, fpath);
free(fpath); free(fpath);
free(value); free(value);
return ret >= 0; return ret >= 0;
bad: on_error:
SYSERROR("Error reading '%s'", fpath); SYSERROR("Failed to read file \"%s\"", fpath);
free(fpath); free(fpath);
free(value); free(value);
return false; return false;