71 lines
1.6 KiB
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);
|
|
}
|