#include "../../include/package.h" #include "../../include/error.h" #include "../../include/util.h" #include #include #include 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); }