diff options
Diffstat (limited to 'src')
| -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);  } | 
