lxc-copy: do not use mkostemp and dprintf

Fixes android builds: DSBINDIR=\"/data/lxc/lxc/sbin\" -I/build/libcap/libcap/include/ -Wall -Werror -MT lxc_copy.o -MD -MP -MF $depbase.Tpo -c -o lxc_copy.o lxc_copy.c &&\ mv -f $depbase.Tpo $depbase.Po lxc_copy.c: In function 'mount_tmpfs': lxc_copy.c:834:2: error: implicit declaration of function 'mkostemp' [-Werror=implicit-function-declaration] fd = mkostemp(premount, O_CLOEXEC); ^ lxc_copy.c:841:2: error: implicit declaration of function 'dprintf' [-Werror=implicit-function-declaration] ret = dprintf(fd, "#! /bin/sh\n" ^ Signed-off-by: 's avatarChristian Brauner <cbrauner@suse.de>
parent 897dcac4
...@@ -805,6 +805,7 @@ static char *mount_tmpfs(const char *oldname, const char *newname, ...@@ -805,6 +805,7 @@ static char *mount_tmpfs(const char *oldname, const char *newname,
int ret, fd; int ret, fd;
size_t len; size_t len;
char *premount = NULL; char *premount = NULL;
FILE *fp;
if (arg->tmpfs && arg->keepdata) { if (arg->tmpfs && arg->keepdata) {
fprintf(stderr, "%s\n", "A container can only be placed on a " fprintf(stderr, "%s\n", "A container can only be placed on a "
...@@ -831,21 +832,31 @@ static char *mount_tmpfs(const char *oldname, const char *newname, ...@@ -831,21 +832,31 @@ static char *mount_tmpfs(const char *oldname, const char *newname,
if (ret < 0 || (size_t)ret >= len) if (ret < 0 || (size_t)ret >= len)
goto err_free; goto err_free;
fd = mkostemp(premount, O_CLOEXEC); fd = mkstemp(premount);
if (fd < 0) if (fd < 0)
goto err_free; goto err_free;
if (fcntl(fd, F_SETFD, FD_CLOEXEC)) {
SYSERROR("Failed to set close-on-exec on file descriptor.");
goto err_close;
}
if (chmod(premount, 0755) < 0) if (chmod(premount, 0755) < 0)
goto err_close; goto err_close;
ret = dprintf(fd, "#! /bin/sh\n" fp = fdopen(fd, "r+");
if (!fp)
goto err_close;
fd = -1;
ret = fprintf(fp, "#! /bin/sh\n"
"mount -n -t tmpfs -o mode=0755 none %s/%s\n", "mount -n -t tmpfs -o mode=0755 none %s/%s\n",
path, newname); path, newname);
if (ret < 0) if (ret < 0)
goto err_close; goto err_close;
if (!arg->keepname) { if (!arg->keepname) {
ret = dprintf(fd, "mkdir -p %s/%s/delta0/etc\n" ret = fprintf(fp, "mkdir -p %s/%s/delta0/etc\n"
"echo %s > %s/%s/delta0/etc/hostname\n", "echo %s > %s/%s/delta0/etc/hostname\n",
path, newname, newname, path, newname); path, newname, newname, path, newname);
if (ret < 0) if (ret < 0)
...@@ -856,7 +867,10 @@ static char *mount_tmpfs(const char *oldname, const char *newname, ...@@ -856,7 +867,10 @@ static char *mount_tmpfs(const char *oldname, const char *newname,
return premount; return premount;
err_close: err_close:
close(fd); if (fd > 0)
close(fd);
else
fclose(fp);
err_free: err_free:
free(premount); free(premount);
return NULL; return NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment