Files
libmp/src/package/extract.c

71 lines
1.6 KiB
C

#include "../../include/package.h"
#include "../../include/error.h"
#include "../../include/util.h"
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
bool __lm_package_extract_check(char *file){
if(!exists(file, NULL) || !is_file(file)){
lm_error_set(LM_ERR_PkgBadArchive);
return false;
}
return true;
}
lm_pkg_files_t *lm_package_extract(lm_pkg_t *pkg, char *target){
if(NULL == pkg || NULL == target){
lm_error_set(LM_ERR_ArgNULL);
return NULL;
}
if(lm_package_path_is_empty(pkg)){
lm_error_set(LM_ERR_PkgPathsEmpty);
return NULL;
}
if(!extract_archive(target, pkg->archive))
return NULL;
lm_pkg_files_t *files = malloc(sizeof(lm_pkg_files_t));
bool ret = false;
bzero(files, sizeof(lm_pkg_files_t));
files->data_file = join_alloc(target, "DATA");
files->hashes_file = join_alloc(target, "HASHES");
files->changes_file = join_alloc(target, "CHANGES");
files->install_file = join_alloc(target, "INSTALL");
files->files_archive = join_alloc(target, "files.tar.gz");
if(!__lm_package_extract_check(files->data_file) ||
!__lm_package_extract_check(files->hashes_file) ||
!__lm_package_extract_check(files->changes_file) ||
!__lm_package_extract_check(files->files_archive)){
goto end;
}
ret = true;
end:
if(!ret){
lm_package_extract_free(files);
files = NULL;
}
return files;
}
void lm_package_extract_free(lm_pkg_files_t *files){
if(NULL == files)
return;
free(files->data_file);
free(files->hashes_file);
free(files->changes_file);
free(files->install_file);
free(files->files_archive);
bzero(files, sizeof(lm_pkg_files_t));
free(files);
}