#ifdef DEBIAN #include #include #include #include #include "pool.h" #include "repo.h" #include "repoinfo.h" #include "repoinfo_config_debian.h" struct repoinfo * read_repoinfos_debian(Pool *pool, int *nrepoinfosp) { FILE *fp; char buf[4096]; char buf2[4096]; int l; char *kp, *url, *distro; struct repoinfo *repoinfos = 0, *cinfo; int nrepoinfos = 0; DIR *dir = 0; struct dirent *ent; fp = fopen("/etc/apt/sources.list", "r"); while (1) { if (!fp) { if (!dir) { dir = opendir("/etc/apt/sources.list.d"); if (!dir) break; } if ((ent = readdir(dir)) == 0) { closedir(dir); break; } if (ent->d_name[0] == '.') continue; l = strlen(ent->d_name); if (l < 5 || strcmp(ent->d_name + l - 5, ".list") != 0) continue; snprintf(buf, sizeof(buf), "%s/%s", "/etc/apt/sources.list.d", ent->d_name); if (!(fp = fopen(buf, "r"))) continue; } while(fgets(buf2, sizeof(buf2), fp)) { l = strlen(buf2); if (l == 0) continue; while (l && (buf2[l - 1] == '\n' || buf2[l - 1] == ' ' || buf2[l - 1] == '\t')) buf2[--l] = 0; kp = buf2; while (*kp == ' ' || *kp == '\t') kp++; if (!*kp || *kp == '#') continue; if (strncmp(kp, "deb", 3) != 0) continue; kp += 3; if (*kp != ' ' && *kp != '\t') continue; while (*kp == ' ' || *kp == '\t') kp++; if (!*kp) continue; url = kp; while (*kp && *kp != ' ' && *kp != '\t') kp++; if (*kp) *kp++ = 0; while (*kp == ' ' || *kp == '\t') kp++; if (!*kp) continue; distro = kp; while (*kp && *kp != ' ' && *kp != '\t') kp++; if (*kp) *kp++ = 0; while (*kp == ' ' || *kp == '\t') kp++; if (!*kp) continue; repoinfos = solv_extend(repoinfos, nrepoinfos, 1, sizeof(*repoinfos), 15); cinfo = repoinfos + nrepoinfos++; memset(cinfo, 0, sizeof(*cinfo)); cinfo->baseurl = strdup(url); cinfo->alias = solv_dupjoin(url, "/", distro); cinfo->name = strdup(distro); cinfo->type = TYPE_DEBIAN; cinfo->enabled = 1; cinfo->autorefresh = 1; cinfo->repo_gpgcheck = 1; cinfo->metadata_expire = METADATA_EXPIRE; while (*kp) { char *compo; while (*kp == ' ' || *kp == '\t') kp++; if (!*kp) break; compo = kp; while (*kp && *kp != ' ' && *kp != '\t') kp++; if (*kp) *kp++ = 0; cinfo->components = solv_extend(cinfo->components, cinfo->ncomponents, 1, sizeof(*cinfo->components), 15); cinfo->components[cinfo->ncomponents++] = strdup(compo); } } fclose(fp); fp = 0; } *nrepoinfosp = nrepoinfos; return repoinfos; } #endif