X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_conf.c;h=bf7a56313ad4ada36611a4207fe1a50e8f2bd48f;hp=9c1ed34f2aea26e3a432470bde84d3483ccac5ae;hb=e62fc971a19b43df377d8beee9e691ab179ca075;hpb=a12def2ef9f33f024b5cda7f48fc794f48315a5d diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c index 9c1ed34..bf7a563 100644 --- a/libopkg/opkg_conf.c +++ b/libopkg/opkg_conf.c @@ -62,7 +62,9 @@ opkg_option_t options[] = { { "noaction", OPKG_OPT_TYPE_BOOL, &_conf.noaction }, { "download_only", OPKG_OPT_TYPE_BOOL, &_conf.download_only }, { "nodeps", OPKG_OPT_TYPE_BOOL, &_conf.nodeps }, + { "nocase", OPKG_OPT_TYPE_BOOL, &_conf.nocase }, { "offline_root", OPKG_OPT_TYPE_STRING, &_conf.offline_root }, + { "overlay_root", OPKG_OPT_TYPE_STRING, &_conf.overlay_root }, { "proxy_passwd", OPKG_OPT_TYPE_STRING, &_conf.proxy_passwd }, { "proxy_user", OPKG_OPT_TYPE_STRING, &_conf.proxy_user }, { "query-all", OPKG_OPT_TYPE_BOOL, &_conf.query_all }, @@ -184,13 +186,14 @@ opkg_conf_set_option(const char *name, const char *value) static int opkg_conf_parse_file(const char *filename, - pkg_src_list_t *pkg_src_list) + pkg_src_list_t *pkg_src_list, + pkg_src_list_t *dist_src_list) { int line_num = 0; int err = 0; FILE *file; regex_t valid_line_re, comment_re; -#define regmatch_size 12 +#define regmatch_size 14 regmatch_t regmatch[regmatch_size]; file = fopen(filename, "r"); @@ -212,7 +215,7 @@ opkg_conf_parse_file(const char *filename, "^[[:space:]]*(\"([^\"]*)\"|([^[:space:]]*))" "[[:space:]]*(\"([^\"]*)\"|([^[:space:]]*))" "[[:space:]]*(\"([^\"]*)\"|([^[:space:]]*))" - "([[:space:]]+([^[:space:]]+))?[[:space:]]*$", + "([[:space:]]+([^[:space:]]+))?([[:space:]]+(.*))?[[:space:]]*$", REG_EXTENDED); if (err) goto err2; @@ -263,10 +266,19 @@ opkg_conf_parse_file(const char *filename, extra = NULL; if (regmatch[11].rm_so > 0) { + if (regmatch[13].rm_so > 0 && regmatch[13].rm_so!=regmatch[13].rm_eo ) + extra = xstrndup (line + regmatch[11].rm_so, + regmatch[13].rm_eo - regmatch[11].rm_so); + else extra = xstrndup (line + regmatch[11].rm_so, regmatch[11].rm_eo - regmatch[11].rm_so); } + if (regmatch[13].rm_so!=regmatch[13].rm_eo && strncmp(type, "dist", 4)!=0) { + opkg_msg(ERROR, "%s:%d: Ignoring config line with trailing garbage: `%s'\n", + filename, line_num, line); + } else { + /* We use the conf->tmp_dest_list below instead of conf->pkg_dest_list because we might encounter an offline_root option later and that would invalidate the @@ -275,6 +287,20 @@ opkg_conf_parse_file(const char *filename, tmp_src_nv_pair_list for sake of symmetry.) */ if (strcmp(type, "option") == 0) { opkg_conf_set_option(name, value); + } else if (strcmp(type, "dist") == 0) { + if (!nv_pair_list_find((nv_pair_list_t*) dist_src_list, name)) { + pkg_src_list_append (dist_src_list, name, value, extra, 0); + } else { + opkg_msg(ERROR, "Duplicate dist declaration (%s %s). " + "Skipping.\n", name, value); + } + } else if (strcmp(type, "dist/gz") == 0) { + if (!nv_pair_list_find((nv_pair_list_t*) dist_src_list, name)) { + pkg_src_list_append (dist_src_list, name, value, extra, 1); + } else { + opkg_msg(ERROR, "Duplicate dist declaration (%s %s). " + "Skipping.\n", name, value); + } } else if (strcmp(type, "src") == 0) { if (!nv_pair_list_find((nv_pair_list_t*) pkg_src_list, name)) { pkg_src_list_append (pkg_src_list, name, value, extra, 0); @@ -306,6 +332,8 @@ opkg_conf_parse_file(const char *filename, filename, line_num, line); } + } + free(type); free(name); free(value); @@ -411,6 +439,7 @@ int opkg_conf_init(void) { pkg_src_list_init(&conf->pkg_src_list); + pkg_src_list_init(&conf->dist_src_list); pkg_dest_list_init(&conf->pkg_dest_list); pkg_dest_list_init(&conf->tmp_dest_list); nv_pair_list_init(&conf->arch_list); @@ -442,7 +471,7 @@ opkg_conf_load(void) goto err0; } if (opkg_conf_parse_file(conf->conf_file, - &conf->pkg_src_list)) + &conf->pkg_src_list, &conf->dist_src_list)) goto err1; } @@ -471,7 +500,7 @@ opkg_conf_load(void) !strcmp(conf->conf_file, globbuf.gl_pathv[i])) continue; if ( opkg_conf_parse_file(globbuf.gl_pathv[i], - &conf->pkg_src_list)<0) { + &conf->pkg_src_list, &conf->dist_src_list)<0) { globfree(&globbuf); goto err1; } @@ -484,11 +513,6 @@ opkg_conf_load(void) else sprintf_alloc (&lock_file, "%s", OPKGLOCKFILE); - if (lock_file == NULL) { - opkg_perror(ERROR, "Could not allocate memory for lock file name"); - goto err2; - } - lock_fd = creat(lock_file, S_IRUSR | S_IWUSR | S_IRGRP); if (lock_fd == -1) { opkg_perror(ERROR, "Could not create lock file %s", lock_file); @@ -580,6 +604,7 @@ err2: } err1: pkg_src_list_deinit(&conf->pkg_src_list); + pkg_src_list_deinit(&conf->dist_src_list); pkg_dest_list_deinit(&conf->pkg_dest_list); nv_pair_list_deinit(&conf->arch_list); @@ -621,6 +646,7 @@ opkg_conf_deinit(void) free(conf->conf_file); pkg_src_list_deinit(&conf->pkg_src_list); + pkg_src_list_deinit(&conf->dist_src_list); pkg_dest_list_deinit(&conf->pkg_dest_list); nv_pair_list_deinit(&conf->arch_list);