#include "repo.h" #include "config.h" #include "log.h" #include "dirent.h" #include "limits.h" #include "malloc.h" #include "package.h" #include "stdio.h" #include int pow_repo_get_package(pow_config *cfg, pow_package *pkg, const char *query) { if (!cfg->repos) { pow_log_error("no repos defined in your config, please define them"); return 1; } DIR *dp; struct dirent *ep; for (size_t i = 0; i < cfg->repos_count; i++) { char *package_path = malloc(PATH_MAX); if (!package_path) { pow_log_error("failed to allocate package_path, sizeof %d", PATH_MAX); return 1; } int written = snprintf(package_path, PATH_MAX, "%s/%s", cfg->repos[i]->path, query); if (written >= PATH_MAX) { pow_log_error("something went seriously wrong. the path for the package %s is " "too long?", query); free(package_path); return 1; } dp = opendir(package_path); if (!dp) { free(package_path); continue; } pow_log_info("found package %s in repo %s", query, cfg->repos[i]->path); char *full_path = malloc(PATH_MAX); if (!full_path) { free(package_path); pow_log_error("failed to malloc full path for build script"); return 1; } written = snprintf(full_path, PATH_MAX, "%s/%s", package_path, "build.lua"); if (written >= PATH_MAX) { pow_log_error("something went seriously wrong. the path for the package build " "script %s is " "too long?", query); free(package_path); free(full_path); return 1; } free(package_path); pow_package_open(pkg, cfg, full_path); free(full_path); closedir(dp); return 0; } return 1; } int pow_repo_check_package(pow_config *cfg, const char *query) { int err; pow_package *pkg = malloc(sizeof(pow_package)); if (!pkg) { pow_log_error("failed to malloc pow_package"); return 1; } err = pow_repo_get_package(cfg, pkg, query); if (err) { return 1; } printf("Name: %s\n" "Version: %s\n", pkg->name, pkg->version); pow_package_close(pkg); return 0; }