summaryrefslogtreecommitdiff
path: root/src/option_processing.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-04-11 21:44:30 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-04-11 23:13:21 +0900
commit4070113ef0fef840a0fdd5104c38fb23cd0008eb (patch)
tree458242805ef6d01dd42f1dce07a2633311277808 /src/option_processing.cc
parent07d38e31adb7a01a002b0a844a47f5f8ee4fe875 (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.cc40
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());