Bläddra i källkod

2008-09-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	When error occurs while aria2 is parsing an command-line option, 
print
	the usage of the option.
	* src/Makefile.am
	* src/NameMatchOptionHandler.h
	* src/OptionHandlerException.h
	* src/option_processing.cc
Tatsuhiro Tsujikawa 17 år sedan
förälder
incheckning
54bb630077
6 ändrade filer med 104 tillägg och 16 borttagningar
  1. 9 0
      ChangeLog
  2. 2 1
      src/Makefile.am
  3. 11 10
      src/Makefile.in
  4. 6 5
      src/NameMatchOptionHandler.h
  5. 69 0
      src/OptionHandlerException.h
  6. 7 0
      src/option_processing.cc

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+2008-09-27  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	When error occurs while aria2 is parsing an command-line option, print
+	the usage of the option.
+	* src/Makefile.am
+	* src/NameMatchOptionHandler.h
+	* src/OptionHandlerException.h
+	* src/option_processing.cc
+
 2008-09-26  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Reverted previous change.

+ 2 - 1
src/Makefile.am

@@ -191,7 +191,8 @@ SRCS =  Socket.h\
 	ServerStatURISelector.cc ServerStatURISelector.h\
 	NsCookieParser.cc NsCookieParser.h\
 	CookieStorage.cc CookieStorage.h\
-	SocketBuffer.cc SocketBuffer.h
+	SocketBuffer.cc SocketBuffer.h\
+	OptionHandlerException.h
 
 if HAVE_LIBZ
 SRCS += GZipDecoder.cc GZipDecoder.h

+ 11 - 10
src/Makefile.in

@@ -413,10 +413,10 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 	InOrderURISelector.h ServerStatURISelector.cc \
 	ServerStatURISelector.h NsCookieParser.cc NsCookieParser.h \
 	CookieStorage.cc CookieStorage.h SocketBuffer.cc \
-	SocketBuffer.h GZipDecoder.cc GZipDecoder.h \
-	Sqlite3MozCookieParser.cc Sqlite3MozCookieParser.h \
-	AsyncNameResolver.cc AsyncNameResolver.h \
-	IteratableChunkChecksumValidator.cc \
+	SocketBuffer.h OptionHandlerException.h GZipDecoder.cc \
+	GZipDecoder.h Sqlite3MozCookieParser.cc \
+	Sqlite3MozCookieParser.h AsyncNameResolver.cc \
+	AsyncNameResolver.h IteratableChunkChecksumValidator.cc \
 	IteratableChunkChecksumValidator.h \
 	IteratableChecksumValidator.cc IteratableChecksumValidator.h \
 	CheckIntegrityCommand.cc CheckIntegrityCommand.h \
@@ -1135,12 +1135,13 @@ SRCS = Socket.h SocketCore.cc SocketCore.h BinaryStream.h Command.cc \
 	InOrderURISelector.h ServerStatURISelector.cc \
 	ServerStatURISelector.h NsCookieParser.cc NsCookieParser.h \
 	CookieStorage.cc CookieStorage.h SocketBuffer.cc \
-	SocketBuffer.h $(am__append_1) $(am__append_2) $(am__append_3) \
-	$(am__append_4) $(am__append_5) $(am__append_6) \
-	$(am__append_7) $(am__append_8) $(am__append_9) \
-	$(am__append_10) $(am__append_11) $(am__append_12) \
-	$(am__append_13) $(am__append_14) $(am__append_15) \
-	$(am__append_16) $(am__append_17)
+	SocketBuffer.h OptionHandlerException.h $(am__append_1) \
+	$(am__append_2) $(am__append_3) $(am__append_4) \
+	$(am__append_5) $(am__append_6) $(am__append_7) \
+	$(am__append_8) $(am__append_9) $(am__append_10) \
+	$(am__append_11) $(am__append_12) $(am__append_13) \
+	$(am__append_14) $(am__append_15) $(am__append_16) \
+	$(am__append_17)
 noinst_LIBRARIES = libaria2c.a
 libaria2c_a_SOURCES = $(SRCS)
 aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\

+ 6 - 5
src/NameMatchOptionHandler.h

@@ -36,10 +36,10 @@
 #define _D_NAME_MATCH_OPTION_HANDLER_H_
 
 #include "OptionHandler.h"
-#include "DlAbortEx.h"
 #include "StringFormat.h"
 #include "A2STR.h"
 #include "Util.h"
+#include "OptionHandlerException.h"
 #include <strings.h>
 #include <algorithm>
 #include <sstream>
@@ -87,10 +87,11 @@ public:
     try {
       parseArg(option, arg);
     } catch(Exception& e) {
-      throw DlAbortEx
-	(StringFormat("Exception occurred while processing option %s",
-		      _optName.c_str()).str(), e);
-    }
+      throw OptionHandlerException
+	(StringFormat("Exception occurred while processing option %s:",
+		      _optName.c_str()).str(),
+	 _optName, e);
+   }
   }
 
   virtual bool hasTag(const std::string& tag) const

+ 69 - 0
src/OptionHandlerException.h

@@ -0,0 +1,69 @@
+/* <!-- copyright */
+/*
+ * aria2 - The high speed download utility
+ *
+ * Copyright (C) 2006 Tatsuhiro Tsujikawa
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the
+ * OpenSSL library under certain conditions as described in each
+ * individual source file, and distribute linked combinations
+ * including the two.
+ * You must obey the GNU General Public License in all respects
+ * for all of the code used other than OpenSSL.  If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so.  If you
+ * do not wish to do so, delete this exception statement from your
+ * version.  If you delete this exception statement from all source
+ * files in the program, then also delete it here.
+ */
+/* copyright --> */
+#ifndef _D_OPTION_HANDLER_EXCEPTION_H_
+#define _D_OPTION_HANDLER_EXCEPTION_H_
+#include "FatalException.h"
+
+namespace aria2 {
+
+class OptionHandlerException:public FatalException {
+private:
+  std::string _optName;
+protected:
+  virtual SharedHandle<Exception> copy() const
+  {
+    SharedHandle<Exception> e(new OptionHandlerException(*this));
+    return e;
+  }
+public:
+  OptionHandlerException(const std::string& msg, const std::string& optName):
+    FatalException(msg), _optName(optName) {}
+
+  OptionHandlerException(const std::string& msg, const std::string& optName,
+			 const Exception& cause):
+    FatalException(msg, cause), _optName(optName) {}
+
+  OptionHandlerException(const OptionHandlerException& e):
+    FatalException(e),
+    _optName(e._optName) {}
+
+  virtual ~OptionHandlerException() throw() {}
+
+  const std::string& getOptionName() const throw() { return _optName; }
+};
+
+} // namespace aria2
+
+#endif // _D_OPTION_HANDLER_EXCEPTION_EX_H_

+ 7 - 0
src/option_processing.cc

@@ -45,6 +45,7 @@
 #include "help_tags.h"
 #include "File.h"
 #include "StringFormat.h"
+#include "OptionHandlerException.h"
 #include <cstdlib>
 #include <cstring>
 #include <fstream>
@@ -518,6 +519,12 @@ Option* option_processing(int argc, char* const argv[])
     }
     try {
       oparser.parse(op, cmdstream);
+    } catch(OptionHandlerException& e) {
+      std::cerr << e.stackTrace() << "\n"
+		<< "Usage:\n"
+		<< oparser.findByName(e.getOptionName())->getDescription()
+		<< std::endl;
+      exit(EXIT_FAILURE);
     } catch(Exception& e) {
       std::cerr << e.stackTrace() << std::endl;
       showUsage(TAG_HELP, oparser);