diff options
Diffstat (limited to 'src/docker.c')
-rw-r--r-- | src/docker.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/docker.c b/src/docker.c index 32c7b60..955428b 100644 --- a/src/docker.c +++ b/src/docker.c @@ -68,10 +68,30 @@ int docker_build(const char *dirpath, const char *args, int engine) { return docker_exec(cmd, 0); } -int docker_save(const char *image, const char *destdir) { +int docker_save(const char *image, const char *destdir, const char *compression_program) { char cmd[PATH_MAX]; + memset(cmd, 0, sizeof(cmd)); - sprintf(cmd, "save %s -o \"%s/%s.tar\"", image, destdir, image); + + if (compression_program && strlen(compression_program)) { + char ext[255]; + memset(ext, 0, sizeof(ext)); + if (startswith(compression_program, "zstd")) { + strcpy(ext, "zst"); + } else if (startswith(compression_program, "xz")) { + strcpy(ext, "xz"); + } else if (startswith(compression_program, "gzip")) { + strcpy(ext, "gz"); + } else if (startswith(compression_program, "bzip2")) { + strcpy(ext, "bz2"); + } else { + strncpy(ext, compression_program, sizeof(ext) - 1); + } + sprintf(cmd, "save \"%s\" | %s > \"%s/%s.tar.%s\"", image, compression_program, destdir, image, ext); + } else { + sprintf(cmd, "save \"%s\" -o \"%s/%s.tar\"", image, destdir, image); + + } return docker_exec(cmd, 0); } |