]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-copy: do not use mkostemp and dprintf 1094/head
authorChristian Brauner <cbrauner@suse.de>
Fri, 22 Jul 2016 19:59:24 +0000 (21:59 +0200)
committerChristian Brauner <cbrauner@suse.de>
Fri, 22 Jul 2016 19:59:24 +0000 (21:59 +0200)
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: Christian Brauner <cbrauner@suse.de>
src/lxc/lxc_copy.c

index cb73471df39ff60e63ba4c065eeeadd018c84041..69de7d5150d2b9b96a93656a59e1156f9927a61c 100644 (file)
@@ -805,6 +805,7 @@ static char *mount_tmpfs(const char *oldname, const char *newname,
        int ret, fd;
        size_t len;
        char *premount = NULL;
+       FILE *fp;
 
        if (arg->tmpfs && arg->keepdata) {
                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,
        if (ret < 0 || (size_t)ret >= len)
                goto err_free;
 
-       fd = mkostemp(premount, O_CLOEXEC);
+       fd = mkstemp(premount);
        if (fd < 0)
                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)
                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",
                      path, newname);
        if (ret < 0)
                goto err_close;
 
        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",
                              path, newname, newname, path, newname);
                if (ret < 0)
@@ -856,7 +867,10 @@ static char *mount_tmpfs(const char *oldname, const char *newname,
        return premount;
 
 err_close:
-       close(fd);
+       if (fd > 0)
+               close(fd);
+       else
+               fclose(fp);
 err_free:
        free(premount);
        return NULL;