summaryrefslogtreecommitdiff
path: root/src/main.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-07 11:00:34 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-07 11:00:34 +0000
commit2881dbe025d2002fc5260969cd0c402404713ebc (patch)
tree4d30de40e909a9c9e9f3d2bdb0ad2748afc35922 /src/main.cc
parentbbb3589293139db527cf72f0a30e989fc2889a53 (diff)
2009-02-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added OptionParser::parseArg() which internally uses getopt_long to parse command-line options. All command-line options are now configured by OptionHandler. No manual editing of struct option* is required any more. * src/NameMatchOptionHandler.h * src/OptionHandler.h * src/OptionHandlerFactory.cc * src/OptionHandlerImpl.h * src/OptionParser.cc * src/OptionParser.h * src/array_fun.h * src/main.cc * src/option_processing.cc * test/OptionHandlerTest.cc * test/OptionParserTest.cc
Diffstat (limited to 'src/main.cc')
-rw-r--r--src/main.cc53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/main.cc b/src/main.cc
index 2ca2479d..aea7bcc2 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -157,32 +157,34 @@ static void showFiles(const std::deque<std::string>& uris, const Option* op)
}
#endif // ENABLE_BITTORRENT || ENABLE_METALINK
-extern Option* option_processing(int argc, char* const argv[]);
+extern void option_processing(Option& option, std::deque<std::string>& uris,
+ int argc, char* const argv[]);
DownloadResult::RESULT main(int argc, char* argv[])
{
- Option* op = option_processing(argc, argv);
- std::deque<std::string> args(argv+optind, argv+argc);
+ std::deque<std::string> args;
+ Option op;
+ option_processing(op, args, argc, argv);
SimpleRandomizer::init();
BitfieldManFactory::setDefaultRandomizer(SimpleRandomizer::getInstance());
- if(op->get(PREF_LOG) == "-") {
+ if(op.get(PREF_LOG) == "-") {
LogFactory::setLogFile(DEV_STDOUT);
- } else if(!op->get(PREF_LOG).empty()) {
- LogFactory::setLogFile(op->get(PREF_LOG));
+ } else if(!op.get(PREF_LOG).empty()) {
+ LogFactory::setLogFile(op.get(PREF_LOG));
} else {
LogFactory::setLogFile(DEV_NULL);
}
- LogFactory::setLogLevel(op->get(PREF_LOG_LEVEL));
- if(op->getAsBool(PREF_QUIET)) {
+ LogFactory::setLogLevel(op.get(PREF_LOG_LEVEL));
+ if(op.getAsBool(PREF_QUIET)) {
LogFactory::setConsoleOutput(false);
}
#ifdef HAVE_EPOLL
- if(op->get(PREF_EVENT_POLL) == V_EPOLL) {
+ if(op.get(PREF_EVENT_POLL) == V_EPOLL) {
SocketCore::useEpoll();
} else
#endif // HAVE_EPOLL
- if(op->get(PREF_EVENT_POLL) == V_SELECT) {
+ if(op.get(PREF_EVENT_POLL) == V_SELECT) {
SocketCore::useSelect();
}
DownloadResult::RESULT exitStatus = DownloadResult::FINISHED;
@@ -203,48 +205,47 @@ DownloadResult::RESULT main(int argc, char* argv[])
#endif
std::deque<SharedHandle<RequestGroup> > requestGroups;
#ifdef ENABLE_BITTORRENT
- if(!op->blank(PREF_TORRENT_FILE)) {
- if(op->get(PREF_SHOW_FILES) == V_TRUE) {
- showTorrentFile(op->get(PREF_TORRENT_FILE));
+ if(!op.blank(PREF_TORRENT_FILE)) {
+ if(op.get(PREF_SHOW_FILES) == V_TRUE) {
+ showTorrentFile(op.get(PREF_TORRENT_FILE));
return exitStatus;
} else {
- createRequestGroupForBitTorrent(requestGroups, op, args);
+ createRequestGroupForBitTorrent(requestGroups, &op, args);
}
}
else
#endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK
- if(!op->blank(PREF_METALINK_FILE)) {
- if(op->get(PREF_SHOW_FILES) == V_TRUE) {
- showMetalinkFile(op->get(PREF_METALINK_FILE), op);
+ if(!op.blank(PREF_METALINK_FILE)) {
+ if(op.get(PREF_SHOW_FILES) == V_TRUE) {
+ showMetalinkFile(op.get(PREF_METALINK_FILE), &op);
return exitStatus;
} else {
- createRequestGroupForMetalink(requestGroups, op);
+ createRequestGroupForMetalink(requestGroups, &op);
}
}
else
#endif // ENABLE_METALINK
- if(!op->blank(PREF_INPUT_FILE)) {
- createRequestGroupForUriList(requestGroups, op);
+ if(!op.blank(PREF_INPUT_FILE)) {
+ createRequestGroupForUriList(requestGroups, &op);
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
- } else if(op->get(PREF_SHOW_FILES) == V_TRUE) {
- showFiles(args, op);
+ } else if(op.get(PREF_SHOW_FILES) == V_TRUE) {
+ showFiles(args, &op);
#endif // ENABLE_METALINK || ENABLE_METALINK
} else {
- createRequestGroupForUri(requestGroups, op, args);
+ createRequestGroupForUri(requestGroups, &op, args);
}
if(requestGroups.empty()) {
std::cout << MSG_NO_FILES_TO_DOWNLOAD << std::endl;
} else {
- exitStatus = MultiUrlRequestInfo(requestGroups, op, getStatCalc(op),
- getSummaryOut(op)).execute();
+ exitStatus = MultiUrlRequestInfo(requestGroups, &op, getStatCalc(&op),
+ getSummaryOut(&op)).execute();
}
} catch(Exception& ex) {
std::cerr << EX_EXCEPTION_CAUGHT << "\n" << ex.stackTrace() << std::endl;
exitStatus = DownloadResult::UNKNOWN_ERROR;
}
- delete op;
LogFactory::release();
return exitStatus;
}