diff options
Diffstat (limited to 'archive.c')
-rw-r--r-- | archive.c | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/archive.c b/archive.c deleted file mode 100644 index 7ec9d04..0000000 --- a/archive.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "spm.h" - -/** - * Extract a single file from a tar archive into a directory - * - * @param archive path to tar archive - * @param filename known path inside the archive to extract - * @param destination where to extract file to (must exist) - * @return - */ -int tar_extract_file(const char *archive, const char* filename, const char *destination) { - Process *proc = NULL; - int status; - char cmd[PATH_MAX]; - - sprintf(cmd, "tar xf %s -C %s %s 2>&1", archive, destination, filename); - if (exists(archive) != 0) { - fprintf(stderr, "%s :: ", archive); - fprintf(SYSERROR); - return -1; - } - - shell(&proc, SHELL_OUTPUT, cmd); - if (!proc) { - fprintf(SYSERROR); - return -1; - } - - status = proc->returncode; - shell_free(proc); - - return status; -} - -int tar_extract_archive(const char *_archive, const char *_destination) { - Process *proc = NULL; - int status; - char cmd[PATH_MAX]; - - if (exists(_archive) != 0) { - fprintf(SYSERROR); - return -1; - } - - char *archive = strdup(_archive); - if (!archive) { - fprintf(SYSERROR); - return -1; - } - char *destination = strdup(_destination); - if (!destination) { - fprintf(SYSERROR); - return -1; - } - - // sanitize archive - strchrdel(archive, "&;|"); - // sanitize destination - strchrdel(destination, "&;|"); - - sprintf(cmd, "tar xf %s -C %s 2>&1", archive, destination); - shell(&proc, SHELL_OUTPUT, cmd); - if (!proc) { - fprintf(SYSERROR); - free(archive); - free(destination); - return -1; - } - - status = proc->returncode; - shell_free(proc); - free(archive); - free(destination); - return status; -} - |