Selaa lähdekoodia

2010-02-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Fixed the bug that aria2 doesn't handle return value if error
	occurred before download begins.
	* src/MultiUrlRequestInfo.cc
	* src/main.cc
Tatsuhiro Tsujikawa 15 vuotta sitten
vanhempi
commit
2097b5e29a
3 muutettua tiedostoa jossa 82 lisäystä ja 72 poistoa
  1. 7 0
      ChangeLog
  2. 3 0
      src/MultiUrlRequestInfo.cc
  3. 72 72
      src/main.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2010-02-12  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Fixed the bug that aria2 doesn't handle return value if error
+	occurred before download begins.
+	* src/MultiUrlRequestInfo.cc
+	* src/main.cc
+
 2010-02-11  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Removed SegmentManFactory class.

+ 3 - 0
src/MultiUrlRequestInfo.cc

@@ -190,6 +190,9 @@ downloadresultcode::RESULT MultiUrlRequestInfo::execute()
       }
     }
   } catch(RecoverableException& e) {
+    if(returnValue == downloadresultcode::FINISHED) {
+      returnValue = downloadresultcode::UNKNOWN_ERROR;
+    }
     _logger->error(EX_EXCEPTION_CAUGHT, e);
   }
 #ifdef SIGHUP

+ 72 - 72
src/main.cc

@@ -195,105 +195,105 @@ downloadresultcode::RESULT main(int argc, char* argv[])
       SocketCore::useSelect();
     }
   downloadresultcode::RESULT exitStatus = downloadresultcode::FINISHED;
-  try {
-    Logger* logger = LogFactory::getInstance();
-    logger->info("<<--- --- --- ---");
-    logger->info("  --- --- --- ---");
-    logger->info("  --- --- --- --->>");
-    logger->info("%s %s %s", PACKAGE, PACKAGE_VERSION, TARGET);
-    logger->info(MSG_LOGGING_STARTED);
+
+  Logger* logger = LogFactory::getInstance();
+  logger->info("<<--- --- --- ---");
+  logger->info("  --- --- --- ---");
+  logger->info("  --- --- --- --->>");
+  logger->info("%s %s %s", PACKAGE, PACKAGE_VERSION, TARGET);
+  logger->info(MSG_LOGGING_STARTED);
 
 #ifdef ENABLE_MESSAGE_DIGEST
-    MessageDigestHelper::staticSHA1DigestInit();
+  MessageDigestHelper::staticSHA1DigestInit();
 #endif // ENABLE_MESSAGE_DIGEST
 
-    if(op->getAsBool(PREF_DISABLE_IPV6)) {
-      SocketCore::setProtocolFamily(AF_INET);
-      // Get rid of AI_ADDRCONFIG. It causes name resolution error
-      // when none of network interface has IPv4 address.
-      setDefaultAIFlags(0);
-    }
-    // Bind interface
-    if(!op->get(PREF_INTERFACE).empty()) {
-      std::string iface = op->get(PREF_INTERFACE);
-      SocketCore::bindAddress(iface);
-    }
+  if(op->getAsBool(PREF_DISABLE_IPV6)) {
+    SocketCore::setProtocolFamily(AF_INET);
+    // Get rid of AI_ADDRCONFIG. It causes name resolution error
+    // when none of network interface has IPv4 address.
+    setDefaultAIFlags(0);
+  }
+  // Bind interface
+  if(!op->get(PREF_INTERFACE).empty()) {
+    std::string iface = op->get(PREF_INTERFACE);
+    SocketCore::bindAddress(iface);
+  }
 
 #ifdef SIGPIPE
-    util::setGlobalSignalHandler(SIGPIPE, SIG_IGN, 0);
+  util::setGlobalSignalHandler(SIGPIPE, SIG_IGN, 0);
 #endif
 #ifdef SIGCHLD
-    // Avoid to create zombie process when forked child processes are
-    // died.
-    util::setGlobalSignalHandler(SIGCHLD, SIG_IGN, 0);
+  // Avoid to create zombie process when forked child processes are
+  // died.
+  util::setGlobalSignalHandler(SIGCHLD, SIG_IGN, 0);
 #endif // SIGCHILD
-    std::deque<SharedHandle<RequestGroup> > requestGroups;
+  std::deque<SharedHandle<RequestGroup> > requestGroups;
 #ifdef ENABLE_BITTORRENT
-    if(!op->blank(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);
+    }
+  }
+  else
+#endif // ENABLE_BITTORRENT
+#ifdef ENABLE_METALINK
+    if(!op->blank(PREF_METALINK_FILE)) {
       if(op->get(PREF_SHOW_FILES) == V_TRUE) {
-        showTorrentFile(op->get(PREF_TORRENT_FILE));
+        showMetalinkFile(op->get(PREF_METALINK_FILE), op);
         return exitStatus;
       } else {
-        createRequestGroupForBitTorrent(requestGroups, op, args);
+        createRequestGroupForMetalink(requestGroups, op);
       }
     }
     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);
-          return exitStatus;
-        } else {
-          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);
-          return exitStatus;
+      } else if(op->get(PREF_SHOW_FILES) == V_TRUE) {
+        showFiles(args, op);
+        return exitStatus;
 #endif // ENABLE_METALINK || ENABLE_METALINK
-        } else {
-          createRequestGroupForUri(requestGroups, op, args);
-        }
+      } else {
+        createRequestGroupForUri(requestGroups, op, args);
+      }
 
-    // Remove option values which is only valid for URIs specified in
-    // command-line. If they are left, because op is used as a
-    // template for new RequestGroup(such as created in XML-RPC
-    // command), they causes unintentional effect.
-    op->remove(PREF_OUT);
-    op->remove(PREF_FORCE_SEQUENTIAL);
-    op->remove(PREF_INPUT_FILE);
-    op->remove(PREF_INDEX_OUT);
-    op->remove(PREF_SELECT_FILE);
-    if(
+  // Remove option values which is only valid for URIs specified in
+  // command-line. If they are left, because op is used as a
+  // template for new RequestGroup(such as created in XML-RPC
+  // command), they causes unintentional effect.
+  op->remove(PREF_OUT);
+  op->remove(PREF_FORCE_SEQUENTIAL);
+  op->remove(PREF_INPUT_FILE);
+  op->remove(PREF_INDEX_OUT);
+  op->remove(PREF_SELECT_FILE);
+  if(
 #ifdef ENABLE_XML_RPC
-       !op->getAsBool(PREF_ENABLE_XML_RPC) &&
+     !op->getAsBool(PREF_ENABLE_XML_RPC) &&
 #endif // ENABLE_XML_RPC
-       requestGroups.empty()) {
-      std::cout << MSG_NO_FILES_TO_DOWNLOAD << std::endl;
-    } else {
-      exitStatus = MultiUrlRequestInfo(requestGroups, op, getStatCalc(op),
-                                       getSummaryOut(op)).execute();
-    }
-  } catch(Exception& ex) {
-    std::cerr << EX_EXCEPTION_CAUGHT << "\n" << ex.stackTrace() << std::endl;
-    exitStatus = downloadresultcode::UNKNOWN_ERROR;
+     requestGroups.empty()) {
+    std::cout << MSG_NO_FILES_TO_DOWNLOAD << std::endl;
+  } else {
+    exitStatus = MultiUrlRequestInfo(requestGroups, op, getStatCalc(op),
+                                     getSummaryOut(op)).execute();
   }
-  LogFactory::release();
   return exitStatus;
 }
 
 } // namespace aria2
 
-int main(int argc, char* argv[]) {
-  aria2::Platform platform;
-
-  aria2::downloadresultcode::RESULT r = aria2::main(argc, argv);
-
+int main(int argc, char* argv[])
+{
+  aria2::downloadresultcode::RESULT r;
+  try {
+    aria2::Platform platform;
+    r = aria2::main(argc, argv);
+  } catch(aria2::Exception& ex) {
+    std::cerr << EX_EXCEPTION_CAUGHT << "\n" << ex.stackTrace() << std::endl;
+    r = aria2::downloadresultcode::UNKNOWN_ERROR;
+  }
   return r;
 }