int repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags) { DIR *dir; struct dirent *entry; FILE *fp; char *fullpath; struct parsedata pd; if (!dirpath) dirpath = "/etc"; if (flags & REPO_USE_ROOTDIR) dirpath = pool_prepend_rootdir(repo->pool, dirpath); dir = opendir(dirpath); if (!dir) { if (flags & REPO_USE_ROOTDIR) solv_free((char *)dirpath); return 0; } memset(&pd, 0, sizeof(pd)); pd.repo = repo; while ((entry = readdir(dir))) { int len = strlen(entry->d_name); if (len > 8 && !strcmp(entry->d_name + len - 8, "-release")) { /* skip /etc/lsb-release, thats not a product per-se */ if (strcmp(entry->d_name, "lsb-release") == 0) continue; fullpath = join2(&pd.jd, dirpath, "/", entry->d_name); if ((fp = fopen(fullpath, "r")) == 0) { pool_error(repo->pool, 0, "%s: %s", fullpath, strerror(errno)); continue; } add_releasefile_product(&pd, fp); fclose(fp); } } closedir(dir); join_freemem(&pd.jd); if (flags & REPO_USE_ROOTDIR) solv_free((char *)dirpath); if (!(flags & REPO_NO_INTERNALIZE) && (flags & REPO_REUSE_REPODATA) != 0) repodata_internalize(repo_last_repodata(repo)); return 0; }
int repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags) { DIR *dir; struct dirent *entry; FILE *fp; char *fullpath; dir = opendir(dirpath); if (!dir) return 0; while ((entry = readdir(dir))) { int len = strlen(entry->d_name); if (len > 8 && !strcmp(entry->d_name + len - 8, "-release")) { /* skip /etc/lsb-release, thats not a product per-se */ if (strcmp(entry->d_name, "lsb-release") == 0) continue; fullpath = join2(dirpath, "/", entry->d_name); if ((fp = fopen(fullpath, "r")) == 0) { perror(fullpath); continue; } add_releasefile_product(repo, fp); fclose(fp); } } closedir(dir); join_freemem(); if (!(flags & REPO_NO_INTERNALIZE) && (flags & REPO_REUSE_REPODATA) != 0) repodata_internalize(repo_last_repodata(repo)); return 0; }