diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-04-11 21:44:30 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-04-11 23:13:21 +0900 |
| commit | 4070113ef0fef840a0fdd5104c38fb23cd0008eb (patch) | |
| tree | 458242805ef6d01dd42f1dce07a2633311277808 /src/option_processing.cc | |
| parent | 07d38e31adb7a01a002b0a844a47f5f8ee4fe875 (diff) | |
Save options directly specified for download in --save-session
This change makes --save-session save only options specified for
download, more specifically, options in command-line, -i file and via
RPC. The other options from conf file and default values are not
saved. This will drastically decrease the size of session file.
Diffstat (limited to 'src/option_processing.cc')
| -rw-r--r-- | src/option_processing.cc | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/option_processing.cc b/src/option_processing.cc index fac8dd0c..98ea844f 100644 --- a/src/option_processing.cc +++ b/src/option_processing.cc @@ -175,6 +175,20 @@ void showCandidates } // namespace +#ifdef __MINGW32__ +namespace { +void optionNativeToUtf8(Option& op) +{ + for(size_t i = 1, len = option::countOption(); i < len; ++i) { + const Pref* pref = option::i2p(i); + if(op.definedLocal(pref) && !util::isUtf8(op.get(pref))) { + op.put(pref, nativeToUtf8(op.get(pref))); + } + } +} +} // namespace +#endif // __MINGW32__ + void option_processing(Option& op, std::vector<std::string>& uris, int argc, char* argv[]) { @@ -213,9 +227,8 @@ void option_processing(Option& op, std::vector<std::string>& uris, exit(error_code::FINISHED); } } - - oparser->parseDefaultValues(op); - + SharedHandle<Option> confOption(new Option()); + oparser->parseDefaultValues(*confOption); if(!noConf) { std::string cfname = ucfname.empty() ? @@ -230,7 +243,7 @@ void option_processing(Option& op, std::vector<std::string>& uris, } } try { - oparser->parse(op, ss); + oparser->parse(*confOption, ss); } catch(OptionHandlerException& e) { global::cerr()->printf(_("Parse error in %s"), cfname.c_str()); global::cerr()->printf("\n%s", e.stackTrace().c_str()); @@ -254,24 +267,21 @@ void option_processing(Option& op, std::vector<std::string>& uris, } } // Override configuration with environment variables. - overrideWithEnv(op, oparser, PREF_HTTP_PROXY, "http_proxy"); - overrideWithEnv(op, oparser, PREF_HTTPS_PROXY, "https_proxy"); - overrideWithEnv(op, oparser, PREF_FTP_PROXY, "ftp_proxy"); - overrideWithEnv(op, oparser, PREF_ALL_PROXY, "all_proxy"); - overrideWithEnv(op, oparser, PREF_NO_PROXY, "no_proxy"); + overrideWithEnv(*confOption, oparser, PREF_HTTP_PROXY, "http_proxy"); + overrideWithEnv(*confOption, oparser, PREF_HTTPS_PROXY, "https_proxy"); + overrideWithEnv(*confOption, oparser, PREF_FTP_PROXY, "ftp_proxy"); + overrideWithEnv(*confOption, oparser, PREF_ALL_PROXY, "all_proxy"); + overrideWithEnv(*confOption, oparser, PREF_NO_PROXY, "no_proxy"); // we must clear eof bit and seek to the beginning of the buffer. cmdstream.clear(); cmdstream.seekg(0, std::ios::beg); // finaly let's parse and store command-iine options. + op.setParent(confOption); oparser->parse(op, cmdstream); #ifdef __MINGW32__ - for(size_t i = 1, len = option::countOption(); i < len; ++i) { - const Pref* pref = option::i2p(i); - if(op.defined(pref) && !util::isUtf8(op.get(pref))) { - op.put(pref, nativeToUtf8(op.get(pref))); - } - } + optionNativeToUtf8(op); + optionNativeToUtf8(*confOption); #endif // __MINGW32__ } catch(OptionHandlerException& e) { global::cerr()->printf("%s", e.stackTrace().c_str()); |
