head 1.1; access; symbols pkgsrc-2026Q2:1.1.0.78 pkgsrc-2026Q2-base:1.1 pkgsrc-2026Q1:1.1.0.76 pkgsrc-2026Q1-base:1.1 pkgsrc-2025Q4:1.1.0.74 pkgsrc-2025Q4-base:1.1 pkgsrc-2025Q3:1.1.0.72 pkgsrc-2025Q3-base:1.1 pkgsrc-2025Q2:1.1.0.70 pkgsrc-2025Q2-base:1.1 pkgsrc-2025Q1:1.1.0.68 pkgsrc-2025Q1-base:1.1 pkgsrc-2024Q4:1.1.0.66 pkgsrc-2024Q4-base:1.1 pkgsrc-2024Q3:1.1.0.64 pkgsrc-2024Q3-base:1.1 pkgsrc-2024Q2:1.1.0.62 pkgsrc-2024Q2-base:1.1 pkgsrc-2024Q1:1.1.0.60 pkgsrc-2024Q1-base:1.1 pkgsrc-2023Q4:1.1.0.58 pkgsrc-2023Q4-base:1.1 pkgsrc-2023Q3:1.1.0.56 pkgsrc-2023Q3-base:1.1 pkgsrc-2023Q2:1.1.0.54 pkgsrc-2023Q2-base:1.1 pkgsrc-2023Q1:1.1.0.52 pkgsrc-2023Q1-base:1.1 pkgsrc-2022Q4:1.1.0.50 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.48 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.46 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.44 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.42 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.40 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.38 pkgsrc-2021Q2-base:1.1 pkgsrc-2021Q1:1.1.0.36 pkgsrc-2021Q1-base:1.1 pkgsrc-2020Q4:1.1.0.34 pkgsrc-2020Q4-base:1.1 pkgsrc-2020Q3:1.1.0.32 pkgsrc-2020Q3-base:1.1 pkgsrc-2020Q2:1.1.0.28 pkgsrc-2020Q2-base:1.1 pkgsrc-2020Q1:1.1.0.8 pkgsrc-2020Q1-base:1.1 pkgsrc-2019Q4:1.1.0.30 pkgsrc-2019Q4-base:1.1 pkgsrc-2019Q3:1.1.0.26 pkgsrc-2019Q3-base:1.1 pkgsrc-2019Q2:1.1.0.24 pkgsrc-2019Q2-base:1.1 pkgsrc-2019Q1:1.1.0.22 pkgsrc-2019Q1-base:1.1 pkgsrc-2018Q4:1.1.0.20 pkgsrc-2018Q4-base:1.1 pkgsrc-2018Q3:1.1.0.18 pkgsrc-2018Q3-base:1.1 pkgsrc-2018Q2:1.1.0.16 pkgsrc-2018Q2-base:1.1 pkgsrc-2018Q1:1.1.0.14 pkgsrc-2018Q1-base:1.1 pkgsrc-2017Q4:1.1.0.12 pkgsrc-2017Q4-base:1.1 pkgsrc-2017Q3:1.1.0.10 pkgsrc-2017Q3-base:1.1 pkgsrc-2017Q2:1.1.0.6 pkgsrc-2017Q2-base:1.1 pkgsrc-2017Q1:1.1.0.4 pkgsrc-2017Q1-base:1.1 pkgsrc-2016Q4:1.1.0.2 pkgsrc-2016Q4-base:1.1; locks; strict; comment @// @; 1.1 date 2016.12.16.00.00.25; author joerg; state Exp; branches; next ; commitid Edr1JuSsr4kLH8yz; desc @@ 1.1 log @Avoid UB for variadic functions. Avoid unnecessary string copies. @ text @$NetBSD$ Passing non-POD types to variadic functions is UB, so use C++11 rvalues and proper typing. --- src/configcontainer.cpp.orig 2016-12-15 14:37:26.527419424 +0000 +++ src/configcontainer.cpp @@@@ -15,20 +15,8 @@@@ namespace newsbeuter { -configdata::configdata(std::string v, ...) : value(v), default_value(v), type(ENUM) { - va_list ap; - va_start(ap, v); - - const char * arg; - - do { - arg = va_arg(ap, const char *); - if (arg) { - enum_values.insert(arg); - } - } while (arg != NULL); - - va_end(ap); +configdata::configdata(const std::string &v, std::set &&enumv) : value(v), default_value(v), type(ENUM) { + enum_values = std::move(enumv); } configcontainer::configcontainer() { @@@@ -51,8 +39,8 @@@@ configcontainer::configcontainer() { config_data["cache-file"] = configdata("", configdata::PATH); config_data["proxy"] = configdata("", configdata::STR); config_data["proxy-auth"] = configdata("", configdata::STR); - config_data["proxy-auth-method"] = configdata("any", "any", "basic", "digest", "digest_ie", "gssnegotiate", "ntlm", "anysafe", NULL); - config_data["http-auth-method"] = configdata("any", "any", "basic", "digest", "digest_ie", "gssnegotiate", "ntlm", "anysafe", NULL); + config_data["proxy-auth-method"] = configdata("any", std::set({"any", "basic", "digest", "digest_ie", "gssnegotiate", "ntlm", "anysafe"})); + config_data["http-auth-method"] = configdata("any", std::set({"any", "basic", "digest", "digest_ie", "gssnegotiate", "ntlm", "anysafe"})); config_data["confirm-exit"] = configdata("no", configdata::BOOL); config_data["error-log"] = configdata("", configdata::PATH); config_data["notify-screen"] = configdata("no", configdata::BOOL); @@@@ -62,7 +50,7 @@@@ configcontainer::configcontainer() { config_data["notify-program"] = configdata("", configdata::PATH); config_data["notify-format"] = configdata(_("newsbeuter: finished reload, %f unread feeds (%n unread articles total)"), configdata::STR); config_data["datetime-format"] = configdata("%b %d", configdata::STR); - config_data["urls-source"] = configdata("local", "local", "opml", "oldreader", "ttrss", "newsblur", "feedhq", NULL); // enum + config_data["urls-source"] = configdata("local", std::set({"local", "opml", "oldreader", "ttrss", "newsblur", "feedhq"})); // enum config_data["bookmark-cmd"] = configdata("", configdata::STR); config_data["opml-url"] = configdata("", configdata::STR, true); config_data["html-renderer"] = configdata("internal", configdata::PATH); @@@@ -90,7 +78,7 @@@@ configcontainer::configcontainer() { config_data["history-limit"] = configdata("100", configdata::INT); config_data["prepopulate-query-feeds"] = configdata("false", configdata::BOOL); config_data["goto-first-unread"] = configdata("true", configdata::BOOL); - config_data["proxy-type"] = configdata("http", "http", "socks4", "socks4a", "socks5", NULL); // enum + config_data["proxy-type"] = configdata("http", std::set({"http", "socks4", "socks4a", "socks5"})); // enum config_data["oldreader-login"] = configdata("", configdata::STR); config_data["oldreader-password"] = configdata("", configdata::STR); config_data["oldreader-passwordfile"] = configdata("", configdata::PATH); @@@@ -106,7 +94,7 @@@@ configcontainer::configcontainer() { config_data["feedhq-show-special-feeds"] = configdata("true", configdata::BOOL); config_data["feedhq-min-items"] = configdata("20", configdata::INT); config_data["feedhq-url"] = configdata("https://feedhq.org/", configdata::STR); - config_data["ignore-mode"] = configdata("download", "download", "display", NULL); // enum + config_data["ignore-mode"] = configdata("download", std::set({"download", "display"})); // enum config_data["max-download-speed"] = configdata("0", configdata::INT); config_data["cookie-cache"] = configdata("", configdata::PATH); config_data["download-full-page"] = configdata("false", configdata::BOOL); @@@@ -115,7 +103,7 @@@@ configcontainer::configcontainer() { config_data["ttrss-password"] = configdata("", configdata::STR); config_data["ttrss-passwordfile"] = configdata("", configdata::PATH); config_data["ttrss-url"] = configdata("", configdata::STR); - config_data["ttrss-mode"] = configdata("multi", "single", "multi", NULL); // enum + config_data["ttrss-mode"] = configdata("multi", std::set({"single", "multi"})); // enum config_data["ttrss-flag-star"] = configdata("", configdata::STR); config_data["ttrss-flag-publish"] = configdata("", configdata::STR); config_data["newsblur-login"] = configdata("", configdata::STR); @