Forráskód Böngészése

2008-05-13 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Replaced "" with static const variable A2STR::NIL.
	Replaced string comparison against "" with std::string::empty().
	Added PROTO_* to Request class and use them as a protocol string
	constant.
	Made "started", "stopped", "completed" static const variable in
	AnnounceList class.
Tatsuhiro Tsujikawa 17 éve
szülő
commit
386d19693b
59 módosított fájl, 308 hozzáadás és 122 törlés
  1. 9 0
      ChangeLog
  2. 41 0
      src/A2STR.cc
  3. 51 0
      src/A2STR.h
  4. 13 6
      src/AnnounceList.cc
  5. 6 0
      src/AnnounceList.h
  6. 2 1
      src/AsyncNameResolver.cc
  7. 3 2
      src/AuthConfigFactory.cc
  8. 2 1
      src/ByteArrayDiskWriter.cc
  9. 2 1
      src/ChunkChecksum.h
  10. 2 1
      src/Cookie.cc
  11. 3 2
      src/CookieParser.cc
  12. 2 1
      src/DHTAbstractMessage.h
  13. 2 1
      src/DHTAnnouncePeerMessage.h
  14. 1 1
      src/DHTFindNodeMessage.h
  15. 2 1
      src/DHTGetPeersMessage.h
  16. 2 1
      src/DHTMessage.h
  17. 5 4
      src/DHTMessageFactory.h
  18. 5 4
      src/DHTMessageFactoryImpl.h
  19. 2 1
      src/DHTPingMessage.h
  20. 3 2
      src/DHTQueryMessage.h
  21. 2 1
      src/DHTResponseMessage.h
  22. 2 1
      src/DNSCache.h
  23. 2 1
      src/DefaultBtAnnounce.cc
  24. 4 3
      src/DefaultBtContext.cc
  25. 2 1
      src/DefaultBtContext.h
  26. 2 1
      src/ExtendedMessagingAware.h
  27. 4 3
      src/FeatureConfig.cc
  28. 3 2
      src/File.cc
  29. 2 1
      src/HelpItem.h
  30. 5 4
      src/HttpHeader.cc
  31. 2 1
      src/HttpHeaderProcessor.cc
  32. 2 2
      src/HttpRequest.cc
  33. 1 1
      src/HttpRequestCommand.cc
  34. 2 1
      src/HttpResponse.cc
  35. 3 3
      src/InitiateConnectionCommandFactory.cc
  36. 2 1
      src/Makefile.am
  37. 13 12
      src/Makefile.in
  38. 3 2
      src/Metalink2RequestGroup.cc
  39. 6 5
      src/MetalinkParserController.cc
  40. 8 0
      src/MetalinkResource.cc
  41. 9 0
      src/MetalinkResource.h
  42. 1 1
      src/Netrc.cc
  43. 2 1
      src/Netrc.h
  44. 2 1
      src/NullProgressInfoFile.h
  45. 5 4
      src/Option.cc
  46. 1 1
      src/ParameterizedStringParser.cc
  47. 2 1
      src/PeerSessionResource.cc
  48. 16 9
      src/Request.cc
  49. 6 0
      src/Request.h
  50. 3 2
      src/RequestGroup.cc
  51. 2 2
      src/SingleFileDownloadContext.cc
  52. 3 2
      src/SingleFileDownloadContext.h
  53. 2 1
      src/TaggedItem.cc
  54. 3 2
      src/TrackerWatcherCommand.cc
  55. 1 1
      src/UriListParser.cc
  56. 14 13
      src/Util.cc
  57. 2 1
      src/a2functional.h
  58. 3 2
      src/main.cc
  59. 3 2
      src/option_processing.cc

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+2008-05-13  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Replaced "" with static const variable A2STR::NIL.
+	Replaced string comparison against "" with std::string::empty().
+	Added PROTO_* to Request class and use them as a protocol string
+	constant.
+	Made "started", "stopped", "completed" static const variable in
+	AnnounceList class.
+	
 2008-05-13  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Updated translations. Great thanks to translators.

+ 41 - 0
src/A2STR.cc

@@ -0,0 +1,41 @@
+/* <!-- 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 --> */
+#include "A2STR.h"
+
+namespace aria2 {
+
+const std::string A2STR::NIL("");
+
+} // namespace aria2

+ 51 - 0
src/A2STR.h

@@ -0,0 +1,51 @@
+/* <!-- 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_A2_STR_H_
+#define _D_A2_STR_H_
+
+#include <string>
+
+namespace aria2 {
+
+class A2STR {
+private:
+  A2STR();
+public:
+  static const std::string NIL;
+
+};
+} // namespace aria2
+
+#endif // _D_A2_STR_H_

+ 13 - 6
src/AnnounceList.cc

@@ -35,10 +35,17 @@
 #include "AnnounceList.h"
 #include "List.h"
 #include "Data.h"
+#include "A2STR.h"
 #include <algorithm>
 
 namespace aria2 {
 
+const std::string AnnounceList::STARTED("started");
+
+const std::string AnnounceList::STOPPED("stopped");
+
+const std::string AnnounceList::COMPLETED("completed");
+
 AnnounceList::AnnounceList(const MetaEntry* announceListEntry):
   currentTrackerInitialized(false) {
   reconfigure(announceListEntry);
@@ -96,7 +103,7 @@ std::string AnnounceList::getAnnounce() const {
   if(currentTrackerInitialized) {
     return *currentTracker;
   } else {
-    return "";
+    return A2STR::NIL;
   }
 }
 
@@ -146,16 +153,16 @@ std::string AnnounceList::getEventString() const {
     switch((*currentTier)->event) {
     case AnnounceTier::STARTED:
     case AnnounceTier::STARTED_AFTER_COMPLETION:
-      return "started";
+      return STARTED;
     case AnnounceTier::STOPPED:
-      return "stopped";
+      return STOPPED;
     case AnnounceTier::COMPLETED:
-      return "completed";
+      return COMPLETED;
     default:
-      return "";
+      return A2STR::NIL;
     }
   } else {
-    return "";
+    return A2STR::NIL;
   }
 }
 

+ 6 - 0
src/AnnounceList.h

@@ -127,6 +127,12 @@ public:
   bool currentTierAcceptsStoppedEvent() const;
 
   bool currentTierAcceptsCompletedEvent() const;
+
+  static const std::string STARTED;
+
+  static const std::string STOPPED;
+
+  static const std::string COMPLETED;
 };
 
 } // namespace aria2

+ 2 - 1
src/AsyncNameResolver.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "AsyncNameResolver.h"
 #include "Util.h"
+#include "A2STR.h"
 #include <cstring>
 
 namespace aria2 {
@@ -121,7 +122,7 @@ bool AsyncNameResolver::operator==(const AsyncNameResolver& resolver) const
 
 void AsyncNameResolver::reset()
 {
-  _hostname = "";
+  _hostname = A2STR::NIL;
   _resolvedAddresses.clear();
   status = STATUS_READY;
   ares_destroy(channel);

+ 3 - 2
src/AuthConfigFactory.cc

@@ -51,9 +51,10 @@ AuthConfigFactory::~AuthConfigFactory() {}
 AuthConfigHandle
 AuthConfigFactory::createAuthConfig(const RequestHandle& request) const
 {
-  if(request->getProtocol() == "http" || request->getProtocol() == "https") {
+  if(request->getProtocol() == Request::PROTO_HTTP ||
+     request->getProtocol() == Request::PROTO_HTTPS) {
     return createHttpAuthResolver()->resolveAuthConfig(request->getHost());
-  } else if(request->getProtocol() == "ftp") {
+  } else if(request->getProtocol() == Request::PROTO_FTP) {
     if(!request->getUsername().empty()) {
       return createAuthConfig(request->getUsername(), request->getPassword());
     } else {

+ 2 - 1
src/ByteArrayDiskWriter.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "ByteArrayDiskWriter.h"
 #include "Util.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -43,7 +44,7 @@ ByteArrayDiskWriter::~ByteArrayDiskWriter() {}
 
 void ByteArrayDiskWriter::clear()
 {
-  buf.str("");
+  buf.str(A2STR::NIL);
 }
 
 void ByteArrayDiskWriter::initAndOpenFile(const std::string& filename,

+ 2 - 1
src/ChunkChecksum.h

@@ -37,6 +37,7 @@
 
 #include "common.h"
 #include "SharedHandle.h"
+#include "A2STR.h"
 #include <string>
 #include <deque>
 
@@ -82,7 +83,7 @@ public:
     if(index < _checksums.size()) {
       return _checksums[index];
     } else {
-      return "";
+      return A2STR::NIL;
     }
   }
   

+ 2 - 1
src/Cookie.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "Cookie.h"
 #include "Util.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -74,7 +75,7 @@ std::string Cookie::toString() const
 
 void Cookie::clear()
 {
-  name = value = path = domain = "";
+  name = value = path = domain = A2STR::NIL;
   expires = 0;
   secure = false;
 }

+ 3 - 2
src/CookieParser.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "CookieParser.h"
 #include "Util.h"
+#include "A2STR.h"
 #include <strings.h>
 #include <utility>
 #include <istream>
@@ -60,7 +61,7 @@ void CookieParser::setField(Cookie& cookie, const std::string& name, const std::
 
 Cookie CookieParser::parse(const std::string& cookieStr) const
 {
-  return parse(cookieStr, "", "");
+  return parse(cookieStr, A2STR::NIL, A2STR::NIL);
 }
 
 Cookie CookieParser::parse(const std::string& cookieStr, const std::string& defaultDomain, const std::string& defaultPath) const
@@ -84,7 +85,7 @@ Cookies CookieParser::parse(std::istream& s) const
   Cookies cookies;
   std::string line;
   while(getline(s, line)) {
-    if(Util::trim(line) == "" || Util::startsWith(line, "#")) {
+    if(Util::trim(line).empty() || Util::startsWith(line, "#")) {
       continue;
     }
     Cookie cookie = parse(line);

+ 2 - 1
src/DHTAbstractMessage.h

@@ -36,6 +36,7 @@
 #define _D_DHT_ABSTRACT_MESSAGE_H_
 
 #include "DHTMessage.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -57,7 +58,7 @@ protected:
 public:
   DHTAbstractMessage(const SharedHandle<DHTNode>& localNode,
 		     const SharedHandle<DHTNode>& remoteNode,
-		     const std::string& transactionID = "");
+		     const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTAbstractMessage();
 

+ 2 - 1
src/DHTAnnouncePeerMessage.h

@@ -37,6 +37,7 @@
 
 #include "DHTQueryMessage.h"
 #include "DHTConstants.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -62,7 +63,7 @@ public:
 			 const unsigned char* infoHash,
 			 uint16_t tcpPort,
 			 const std::string& token,
-			 const std::string& transactionID = "");
+			 const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTAnnouncePeerMessage();
 

+ 1 - 1
src/DHTFindNodeMessage.h

@@ -49,7 +49,7 @@ public:
   DHTFindNodeMessage(const SharedHandle<DHTNode>& localNode,
 		     const SharedHandle<DHTNode>& remoteNode,
 		     const unsigned char* targetNodeID,
-		     const std::string& transactionID = "");
+		     const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTFindNodeMessage();
 

+ 2 - 1
src/DHTGetPeersMessage.h

@@ -37,6 +37,7 @@
 
 #include "DHTQueryMessage.h"
 #include "DHTConstants.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -56,7 +57,7 @@ public:
   DHTGetPeersMessage(const SharedHandle<DHTNode>& localNode,
 		     const SharedHandle<DHTNode>& remoteNode,
 		     const unsigned char* infoHash,
-		     const std::string& transactionID = "");
+		     const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTGetPeersMessage();
 

+ 2 - 1
src/DHTMessage.h

@@ -37,6 +37,7 @@
 
 #include "common.h"
 #include "SharedHandle.h"
+#include "A2STR.h"
 #include <string>
 
 namespace aria2 {
@@ -55,7 +56,7 @@ protected:
 public:
   DHTMessage(const SharedHandle<DHTNode>& localNode,
 	     const SharedHandle<DHTNode>& remoteNode,
-	     const std::string& transactionID = "");
+	     const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTMessage();
 

+ 5 - 4
src/DHTMessageFactory.h

@@ -37,6 +37,7 @@
 
 #include "common.h"
 #include "SharedHandle.h"
+#include "A2STR.h"
 #include <string>
 #include <deque>
 
@@ -62,7 +63,7 @@ public:
 
   virtual SharedHandle<DHTMessage>
   createPingMessage(const SharedHandle<DHTNode>& remoteNode,
-		    const std::string& transactionID = "") = 0;
+		    const std::string& transactionID = A2STR::NIL) = 0;
 
   virtual SharedHandle<DHTMessage>
   createPingReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -72,7 +73,7 @@ public:
   virtual SharedHandle<DHTMessage>
   createFindNodeMessage(const SharedHandle<DHTNode>& remoteNode,
 			const unsigned char* targetNodeID,
-			const std::string& transactionID = "") = 0;
+			const std::string& transactionID = A2STR::NIL) = 0;
 
   virtual SharedHandle<DHTMessage>
   createFindNodeReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -82,7 +83,7 @@ public:
   virtual SharedHandle<DHTMessage>
   createGetPeersMessage(const SharedHandle<DHTNode>& remoteNode,
 			const unsigned char* infoHash,
-			const std::string& transactionID = "") = 0;
+			const std::string& transactionID = A2STR::NIL) = 0;
 
   virtual SharedHandle<DHTMessage>
   createGetPeersReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -101,7 +102,7 @@ public:
 			    const unsigned char* infoHash,
 			    uint16_t tcpPort,
 			    const std::string& token,
-			    const std::string& transactionID = "") = 0;
+			    const std::string& transactionID = A2STR::NIL) = 0;
 
   virtual SharedHandle<DHTMessage>
   createAnnouncePeerReplyMessage(const SharedHandle<DHTNode>& remoteNode,

+ 5 - 4
src/DHTMessageFactoryImpl.h

@@ -36,6 +36,7 @@
 #define _D_DHT_MESSAGE_FACTORY_IMPL_H_
 
 #include "DHTMessageFactory.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -94,7 +95,7 @@ public:
 
   virtual SharedHandle<DHTMessage>
   createPingMessage(const SharedHandle<DHTNode>& remoteNode,
-		    const std::string& transactionID = "");
+		    const std::string& transactionID = A2STR::NIL);
 
   virtual SharedHandle<DHTMessage>
   createPingReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -104,7 +105,7 @@ public:
   virtual SharedHandle<DHTMessage>
   createFindNodeMessage(const SharedHandle<DHTNode>& remoteNode,
 			const unsigned char* targetNodeID,
-			const std::string& transactionID = "");
+			const std::string& transactionID = A2STR::NIL);
 
   SharedHandle<DHTMessage>
   createFindNodeReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -120,7 +121,7 @@ public:
   virtual SharedHandle<DHTMessage>
   createGetPeersMessage(const SharedHandle<DHTNode>& remoteNode,
 			const unsigned char* infoHash,
-			const std::string& transactionID = "");
+			const std::string& transactionID = A2STR::NIL);
 
   virtual SharedHandle<DHTMessage>
   createGetPeersReplyMessage(const SharedHandle<DHTNode>& remoteNode,
@@ -149,7 +150,7 @@ public:
 			    const unsigned char* infoHash,
 			    uint16_t tcpPort,
 			    const std::string& token,
-			    const std::string& transactionID = "");
+			    const std::string& transactionID = A2STR::NIL);
 
   virtual SharedHandle<DHTMessage>
   createAnnouncePeerReplyMessage(const SharedHandle<DHTNode>& remoteNode,

+ 2 - 1
src/DHTPingMessage.h

@@ -36,6 +36,7 @@
 #define _D_DHT_PING_MESSAGE_H_
 
 #include "DHTQueryMessage.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -43,7 +44,7 @@ class DHTPingMessage:public DHTQueryMessage {
 public:
   DHTPingMessage(const SharedHandle<DHTNode>& localNode,
 		 const SharedHandle<DHTNode>& remoteNode,
-		 const std::string& transactionID = "");
+		 const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTPingMessage();
 

+ 3 - 2
src/DHTQueryMessage.h

@@ -36,16 +36,17 @@
 #define _D_DHT_QUERY_MESSAGE_H_
 
 #include "DHTAbstractMessage.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
 class DHTQueryMessage:public DHTAbstractMessage {
 protected:
-  virtual std::string toStringOptional() const { return ""; }
+  virtual std::string toStringOptional() const { return A2STR::NIL; }
 public:
   DHTQueryMessage(const SharedHandle<DHTNode>& localNode,
 		  const SharedHandle<DHTNode>& remoteNode,
-		  const std::string& transactionID = "");
+		  const std::string& transactionID = A2STR::NIL);
 
   virtual ~DHTQueryMessage();
 

+ 2 - 1
src/DHTResponseMessage.h

@@ -36,12 +36,13 @@
 #define _D_DHT_RESPONSE_MESSAGE_H_
 
 #include "DHTAbstractMessage.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
 class DHTResponseMessage:public DHTAbstractMessage {
 protected:
-  virtual std::string toStringOptional() const { return ""; }
+  virtual std::string toStringOptional() const { return A2STR::NIL; }
 public:
   DHTResponseMessage(const SharedHandle<DHTNode>& localNode,
 		     const SharedHandle<DHTNode>& remoteNode,

+ 2 - 1
src/DNSCache.h

@@ -38,6 +38,7 @@
 #include "common.h"
 #include "SharedHandle.h"
 #include "SingletonHolder.h"
+#include "A2STR.h"
 #include <string>
 #include <map>
 
@@ -79,7 +80,7 @@ class NullDNSCache : public DNSCache {
 public:
   virtual ~NullDNSCache() {}
 
-  virtual std::string find(const std::string& hostname) { return ""; }
+  virtual std::string find(const std::string& hostname) { return A2STR::NIL; }
 
   virtual void put(const std::string& hostname, const std::string& ipaddr) {}
 };

+ 2 - 1
src/DefaultBtAnnounce.cc

@@ -53,6 +53,7 @@
 #include "Peer.h"
 #include "Option.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -128,7 +129,7 @@ std::string DefaultBtAnnounce::getAnnounceUrl() {
       announceList.setEvent(AnnounceTier::STARTED_AFTER_COMPLETION);
     }
   } else {
-    return "";
+    return A2STR::NIL;
   }
   unsigned int numWant = 50;
   if(!btRuntime->lessThanEqMinPeer() || btRuntime->isHalt()) {

+ 4 - 3
src/DefaultBtContext.cc

@@ -50,6 +50,7 @@
 #include "message.h"
 #include "PeerMessageUtil.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #include <cstring>
 #include <ostream>
 #include <functional>
@@ -87,14 +88,14 @@ std::string DefaultBtContext::getInfoHashAsString() const {
 
 void DefaultBtContext::clear() {
   memset(infoHash, 0, INFO_HASH_LENGTH);
-  infoHashString = "";
+  infoHashString = A2STR::NIL;
   pieceHashes.clear();
   fileEntries.clear();
   totalLength = 0;
   pieceLength = 0;
   fileMode = BtContext::SINGLE;
   numPieces = 0;
-  name = "";
+  name = A2STR::NIL;
   announceTiers.clear();
   _private = false;
 }
@@ -359,7 +360,7 @@ std::string DefaultBtContext::getPieceHash(size_t index) const {
   if(index < numPieces) {
     return pieceHashes[index];
   } else {
-    return "";
+    return A2STR::NIL;
   }
 }
 

+ 2 - 1
src/DefaultBtContext.h

@@ -36,6 +36,7 @@
 #define _D_DEFAULT_BT_CONTEXT_H_
 
 #include "BtContext.h"
+#include "A2STR.h"
 #include <iosfwd>
 
 namespace aria2 {
@@ -137,7 +138,7 @@ private:
   virtual std::string getActualBasePath() const;
 
   virtual const unsigned char* getPeerId() {
-    if(peerId == "") {
+    if(peerId.empty()) {
       peerId = generatePeerId();
     }
     return reinterpret_cast<const unsigned char*>(peerId.c_str());

+ 2 - 1
src/ExtendedMessagingAware.h

@@ -37,6 +37,7 @@
 
 #include "common.h"
 #include "BtConstants.h"
+#include "A2STR.h"
 #include <string>
 
 namespace aria2 {
@@ -76,7 +77,7 @@ public:
 	return p.first;
       }
     }
-    return "";
+    return A2STR::NIL;
   }
 
   void removeExtension(const std::string& name)

+ 4 - 3
src/FeatureConfig.cc

@@ -35,6 +35,7 @@
 #include "FeatureConfig.h"
 #include "array_fun.h"
 #include "Util.h"
+#include "Request.h"
 #include <numeric>
 
 namespace aria2 {
@@ -78,9 +79,9 @@ const std::string FeatureConfig::FEATURE_ASYNC_DNS("Async DNS");
 #endif // ENABLE_ASYNC_DNS
 
 FeatureConfig::FeatureConfig() {
-  _defaultPorts.insert(PortMap::value_type("http", 80));
-  _defaultPorts.insert(PortMap::value_type("https", 443));
-  _defaultPorts.insert(PortMap::value_type("ftp", 21));
+  _defaultPorts.insert(PortMap::value_type(Request::PROTO_HTTP, 80));
+  _defaultPorts.insert(PortMap::value_type(Request::PROTO_HTTPS, 443));
+  _defaultPorts.insert(PortMap::value_type(Request::PROTO_FTP, 21));
 
   FeatureMap::value_type featureArray[] = {
     FeatureMap::value_type(FEATURE_HTTPS, HTTPS_ENABLED),

+ 3 - 2
src/File.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "File.h"
 #include "Util.h"
+#include "A2STR.h"
 #include <cstring>
 #include <stdlib.h>
 #include <deque>
@@ -142,8 +143,8 @@ std::string File::getDirname() const
 {
   std::string::size_type lastSlashIndex = name.find_last_of("/");
   if(lastSlashIndex == std::string::npos) {
-    if(name == "") {
-      return "";
+    if(name.empty()) {
+      return A2STR::NIL;
     } else {
       return ".";
     }

+ 2 - 1
src/HelpItem.h

@@ -36,6 +36,7 @@
 #define _D_HELP_ITEM_H_
 
 #include "TaggedItem.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -48,7 +49,7 @@ private:
   std::string _defaultValue;
 
 public:
-  HelpItem(const std::string& name, const std::string& usageText, const std::string& defaultValue = ""):
+  HelpItem(const std::string& name, const std::string& usageText, const std::string& defaultValue = A2STR::NIL):
     TaggedItem(name),
     _usageText(usageText),
     _defaultValue(defaultValue) {}

+ 5 - 4
src/HttpHeader.cc

@@ -35,6 +35,7 @@
 #include "HttpHeader.h"
 #include "Range.h"
 #include "Util.h"
+#include "A2STR.h"
 #include <istream>
 
 namespace aria2 {
@@ -51,7 +52,7 @@ bool HttpHeader::defined(const std::string& name) const {
 std::string HttpHeader::getFirst(const std::string& name) const {
   std::multimap<std::string, std::string>::const_iterator itr = table.find(Util::toLower(name));
   if(itr == table.end()) {
-    return "";
+    return A2STR::NIL;
   } else {
     return (*itr).second;
   }
@@ -73,7 +74,7 @@ unsigned int HttpHeader::getFirstAsUInt(const std::string& name) const {
 
 uint64_t HttpHeader::getFirstAsULLInt(const std::string& name) const {
   std::string value = getFirst(name);
-  if(value == "") {
+  if(value.empty()) {
     return 0;
   } else {
     return Util::parseULLInt(value);
@@ -83,9 +84,9 @@ uint64_t HttpHeader::getFirstAsULLInt(const std::string& name) const {
 RangeHandle HttpHeader::getRange() const
 {
   std::string rangeStr = getFirst("Content-Range");
-  if(rangeStr == "") {
+  if(rangeStr.empty()) {
     std::string contentLengthStr = getFirst("Content-Length");
-    if(contentLengthStr == "") {
+    if(contentLengthStr.empty()) {
       return SharedHandle<Range>(new Range());
     } else {
       uint64_t contentLength = Util::parseULLInt(contentLengthStr);

+ 2 - 1
src/HttpHeaderProcessor.cc

@@ -38,6 +38,7 @@
 #include "Util.h"
 #include "DlRetryEx.h"
 #include "DlAbortEx.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -90,7 +91,7 @@ size_t HttpHeaderProcessor::getPutBackDataLength() const
 
 void HttpHeaderProcessor::clear()
 {
-  strm.str("");
+  strm.str(A2STR::NIL);
 }
 
 SharedHandle<HttpHeader> HttpHeaderProcessor::getHttpResponseHeader()

+ 2 - 2
src/HttpRequest.cc

@@ -134,7 +134,7 @@ std::string HttpRequest::getHostText(const std::string& host, uint16_t port) con
 std::string HttpRequest::createRequest() const
 {
   std::string requestLine = "GET ";
-  if(getProtocol() == "ftp" || proxyEnabled) {
+  if(getProtocol() == Request::PROTO_FTP || proxyEnabled) {
     requestLine += getCurrentURI();
   } else {
     if(getDir() == "/") {
@@ -193,7 +193,7 @@ std::string HttpRequest::createRequest() const
   Cookies cookies = request->cookieBox->criteriaFind(getHost(),
 						     getDir(),
 						     time(0),
-						     getProtocol() == "https" ?
+						     getProtocol() == Request::PROTO_HTTPS ?
 						     true : false);
   for(Cookies::const_iterator itr = cookies.begin(); itr != cookies.end(); itr++) {
     cookiesValue += (*itr).toString()+";";

+ 1 - 1
src/HttpRequestCommand.cc

@@ -95,7 +95,7 @@ createHttpRequest(const SharedHandle<Request>& req,
 
 bool HttpRequestCommand::executeInternal() {
   socket->setBlockingMode();
-  if(req->getProtocol() == "https") {
+  if(req->getProtocol() == Request::PROTO_HTTPS) {
     socket->initiateSecureConnection();
   }
 

+ 2 - 1
src/HttpResponse.cc

@@ -46,6 +46,7 @@
 #include "message.h"
 #include "DlAbortEx.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #include <deque>
 
 namespace aria2 {
@@ -168,7 +169,7 @@ uint64_t HttpResponse::getEntityLength() const
 std::string HttpResponse::getContentType() const
 {
   if(httpHeader.isNull()) {
-    return "";
+    return A2STR::NIL;
   } else {
     return httpHeader->getFirst("Content-Type");
   }

+ 3 - 3
src/InitiateConnectionCommandFactory.cc

@@ -47,10 +47,10 @@ namespace aria2 {
 
 Command*
 InitiateConnectionCommandFactory::createInitiateConnectionCommand(int32_t cuid, const RequestHandle& req, RequestGroup* requestGroup, DownloadEngine* e) {
-  if(req->getProtocol() == "http"
+  if(req->getProtocol() == Request::PROTO_HTTP
 #ifdef ENABLE_SSL
      // for SSL
-     || req->getProtocol() == "https"
+     || req->getProtocol() == Request::PROTO_HTTPS
 #endif // ENABLE_SSL
      ) {
     
@@ -62,7 +62,7 @@ InitiateConnectionCommandFactory::createInitiateConnectionCommand(int32_t cuid,
     }
 
     return new HttpInitiateConnectionCommand(cuid, req, requestGroup, e);
-  } else if(req->getProtocol() == "ftp") {
+  } else if(req->getProtocol() == Request::PROTO_FTP) {
     return new FtpInitiateConnectionCommand(cuid, req, requestGroup, e);
   } else {
     // these protocols are not supported yet

+ 2 - 1
src/Makefile.am

@@ -186,7 +186,8 @@ SRCS =  Socket.h\
 	StringFormat.cc StringFormat.h\
 	HttpSkipResponseCommand.cc HttpSkipResponseCommand.h\
 	InitiateConnectionCommand.cc InitiateConnectionCommand.h\
-	FtpFinishDownloadCommand.cc FtpFinishDownloadCommand.h
+	FtpFinishDownloadCommand.cc FtpFinishDownloadCommand.h\
+	A2STR.cc A2STR.h
 
 if ENABLE_ASYNC_DNS
 SRCS += AsyncNameResolver.cc AsyncNameResolver.h

+ 13 - 12
src/Makefile.in

@@ -409,7 +409,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 	HttpSkipResponseCommand.cc HttpSkipResponseCommand.h \
 	InitiateConnectionCommand.cc InitiateConnectionCommand.h \
 	FtpFinishDownloadCommand.cc FtpFinishDownloadCommand.h \
-	AsyncNameResolver.cc AsyncNameResolver.h \
+	A2STR.cc A2STR.h AsyncNameResolver.cc AsyncNameResolver.h \
 	IteratableChunkChecksumValidator.cc \
 	IteratableChunkChecksumValidator.h \
 	IteratableChecksumValidator.cc IteratableChecksumValidator.h \
@@ -789,12 +789,12 @@ am__objects_15 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
 	TimedHaltCommand.$(OBJEXT) ProtocolDetector.$(OBJEXT) \
 	StringFormat.$(OBJEXT) HttpSkipResponseCommand.$(OBJEXT) \
 	InitiateConnectionCommand.$(OBJEXT) \
-	FtpFinishDownloadCommand.$(OBJEXT) $(am__objects_1) \
-	$(am__objects_2) $(am__objects_3) $(am__objects_4) \
-	$(am__objects_5) $(am__objects_6) $(am__objects_7) \
-	$(am__objects_8) $(am__objects_9) $(am__objects_10) \
-	$(am__objects_11) $(am__objects_12) $(am__objects_13) \
-	$(am__objects_14)
+	FtpFinishDownloadCommand.$(OBJEXT) A2STR.$(OBJEXT) \
+	$(am__objects_1) $(am__objects_2) $(am__objects_3) \
+	$(am__objects_4) $(am__objects_5) $(am__objects_6) \
+	$(am__objects_7) $(am__objects_8) $(am__objects_9) \
+	$(am__objects_10) $(am__objects_11) $(am__objects_12) \
+	$(am__objects_13) $(am__objects_14)
 am_libaria2c_a_OBJECTS = $(am__objects_15)
 libaria2c_a_OBJECTS = $(am_libaria2c_a_OBJECTS)
 am__installdirs = "$(DESTDIR)$(bindir)"
@@ -1133,11 +1133,11 @@ SRCS = Socket.h SocketCore.cc SocketCore.h BinaryStream.h Command.cc \
 	HttpSkipResponseCommand.cc HttpSkipResponseCommand.h \
 	InitiateConnectionCommand.cc InitiateConnectionCommand.h \
 	FtpFinishDownloadCommand.cc FtpFinishDownloadCommand.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)
+	A2STR.cc A2STR.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)
 noinst_LIBRARIES = libaria2c.a
 libaria2c_a_SOURCES = $(SRCS)
 aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
@@ -1225,6 +1225,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/A2STR.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractAuthResolver.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractBtMessage.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractCommand.Po@am__quote@

+ 3 - 2
src/Metalink2RequestGroup.cc

@@ -48,6 +48,7 @@
 #include "MetalinkEntry.h"
 #include "MetalinkResource.h"
 #include "FileEntry.h"
+#include "A2STR.h"
 #ifdef ENABLE_BITTORRENT
 # include "BtDependency.h"
 #endif // ENABLE_BITTORRENT
@@ -167,7 +168,7 @@ Metalink2RequestGroup::createRequestGroup
       SharedHandle<SingleFileDownloadContext> dctx
 	(new SingleFileDownloadContext(_option->getAsInt(PREF_SEGMENT_SIZE),
 				       0,
-				       ""));
+				       A2STR::NIL));
       //dctx->setDir(_option->get(PREF_DIR));
       torrentRg->setDownloadContext(dctx);
       torrentRg->clearPreDowloadHandler();
@@ -205,7 +206,7 @@ Metalink2RequestGroup::createRequestGroup
     SharedHandle<SingleFileDownloadContext> dctx
       (new SingleFileDownloadContext(pieceLength,
 				     entry->getLength(),
-				     "",
+				     A2STR::NIL,
 				     entry->file->getPath()));
     dctx->setDir(_option->get(PREF_DIR));
 #ifdef ENABLE_MESSAGE_DIGEST

+ 6 - 5
src/MetalinkParserController.cc

@@ -38,6 +38,7 @@
 #include "MetalinkResource.h"
 #include "FileEntry.h"
 #include "a2functional.h"
+#include "A2STR.h"
 #ifdef ENABLE_MESSAGE_DIGEST
 # include "Checksum.h"
 # include "ChunkChecksum.h"
@@ -86,7 +87,7 @@ void MetalinkParserController::setFileLengthOfEntry(uint64_t length)
     return;
   }
   if(_tEntry->file.isNull()) {
-    _tEntry->file.reset(new FileEntry("", length, 0));
+    _tEntry->file.reset(new FileEntry(A2STR::NIL, length, 0));
   } else {
     _tEntry->file->setLength(length);
   }
@@ -165,13 +166,13 @@ void MetalinkParserController::setTypeOfResource(const std::string& type)
   if(_tResource.isNull()) {
     return;
   }
-  if(type == "ftp") {
+  if(type == MetalinkResource::FTP) {
     _tResource->type = MetalinkResource::TYPE_FTP;
-  } else if(type == "http") {
+  } else if(type == MetalinkResource::HTTP) {
     _tResource->type = MetalinkResource::TYPE_HTTP;
-  } else if(type == "https") {
+  } else if(type == MetalinkResource::HTTPS) {
     _tResource->type = MetalinkResource::TYPE_HTTPS;
-  } else if(type == "bittorrent") {
+  } else if(type == MetalinkResource::BITTORRENT) {
     _tResource->type = MetalinkResource::TYPE_BITTORRENT;
   } else {
     _tResource->type = MetalinkResource::TYPE_NOT_SUPPORTED;

+ 8 - 0
src/MetalinkResource.cc

@@ -40,6 +40,14 @@ std::string MetalinkResource::type2String[] = {
   "ftp", "http", "https", "bittorrent", "not_supported"
 };
 
+const std::string MetalinkResource::HTTP("http");
+
+const std::string MetalinkResource::HTTPS("https");
+
+const std::string MetalinkResource::FTP("ftp");
+
+const std::string MetalinkResource::BITTORRENT("bittorrent");
+
 MetalinkResource::MetalinkResource():
   maxConnections(-1)
 {}

+ 9 - 0
src/MetalinkResource.h

@@ -51,6 +51,15 @@ public:
   };
 
   static std::string type2String[];
+
+  static const std::string HTTP;
+
+  static const std::string HTTPS;
+
+  static const std::string FTP;
+
+  static const std::string BITTORRENT;
+
 public:
   std::string url;
   TYPE type;

+ 1 - 1
src/Netrc.cc

@@ -56,7 +56,7 @@ void Netrc::skipMacdef(std::ifstream& f) const
   std::string line;
   getline(f, line);
   while(getline(f, line)) {
-    if(line == "\r" || line == "") {
+    if(line == "\r" || line.empty()) {
       break;
     }
   }

+ 2 - 1
src/Netrc.h

@@ -37,6 +37,7 @@
 
 #include "common.h"
 #include "SharedHandle.h"
+#include "A2STR.h"
 #include <string>
 #include <deque>
 #include <iosfwd>
@@ -116,7 +117,7 @@ public:
   DefaultAuthenticator(const std::string& login,
 		       const std::string& password,
 		       const std::string& account)
-    :Authenticator("", login, password, account) {}
+    :Authenticator(A2STR::NIL, login, password, account) {}
 
   virtual ~DefaultAuthenticator() {}
 

+ 2 - 1
src/NullProgressInfoFile.h

@@ -36,6 +36,7 @@
 #define _D_NULL_PROGRESS_INFO_FILE_H_
 
 #include "BtProgressInfoFile.h"
+#include "A2STR.h"
 
 namespace aria2 {
 
@@ -45,7 +46,7 @@ public:
 
   virtual std::string getFilename()
   {
-    return "";
+    return A2STR::NIL;
   }
 
   virtual bool exists() { return false; }

+ 5 - 4
src/Option.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "Option.h"
 #include "prefs.h"
+#include "A2STR.h"
 #include <cstdlib>
 
 namespace aria2 {
@@ -53,7 +54,7 @@ bool Option::defined(const std::string& name) const {
 std::string Option::get(const std::string& name) const {
   std::map<std::string, std::string>::const_iterator itr = table.find(name);
   if(itr == table.end()) {
-    return "";
+    return A2STR::NIL;
   } else {
     return (*itr).second;
   }
@@ -61,7 +62,7 @@ std::string Option::get(const std::string& name) const {
 
 int32_t Option::getAsInt(const std::string& name) const {
   std::string value = get(name);
-  if(value == "") {
+  if(value.empty()) {
     return 0;
   } else {
     return strtol(value.c_str(), NULL, 10);
@@ -70,7 +71,7 @@ int32_t Option::getAsInt(const std::string& name) const {
 
 int64_t Option::getAsLLInt(const std::string& name) const {
   std::string value = get(name);
-  if(value == "") {
+  if(value.empty()) {
     return 0;
   } else {
     return strtoll(value.c_str(), NULL, 10);
@@ -88,7 +89,7 @@ bool Option::getAsBool(const std::string& name) const {
 
 double Option::getAsDouble(const std::string& name) const {
   std::string value = get(name);
-  if(value == "") {
+  if(value.empty()) {
     return 0.0;
   } else {
     return strtod(value.c_str(), 0);

+ 1 - 1
src/ParameterizedStringParser.cc

@@ -121,7 +121,7 @@ PStringDatumHandle ParameterizedStringParser::createLoop(const std::string& src,
     loopStr.erase(colonIndex);
   }
   std::pair<std::string, std::string> range = Util::split(loopStr, "-");
-  if(range.first == "" || range.second == "") {
+  if(range.first.empty() || range.second.empty()) {
     throw FatalException("Loop range missing.");
   }
   NumberDecoratorHandle nd;

+ 2 - 1
src/PeerSessionResource.cc

@@ -35,6 +35,7 @@
 #include "PeerSessionResource.h"
 #include "BitfieldManFactory.h"
 #include "BitfieldMan.h"
+#include "A2STR.h"
 #include <algorithm>
 
 namespace aria2 {
@@ -267,7 +268,7 @@ std::string PeerSessionResource::getExtensionName(uint8_t id) const
       return p.first;
     }
   }
-  return "";
+  return A2STR::NIL;
 }
 
 void PeerSessionResource::addExtension(const std::string& name, uint8_t id)

+ 16 - 9
src/Request.cc

@@ -39,6 +39,7 @@
 #include "CookieBox.h"
 #include "RecoverableException.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #include <utility>
 
 namespace aria2 {
@@ -47,6 +48,12 @@ const std::string Request::METHOD_GET = "GET";
 
 const std::string Request::METHOD_HEAD = "HEAD";
 
+const std::string Request::PROTO_HTTP("http");
+
+const std::string Request::PROTO_HTTPS("https");
+
+const std::string Request::PROTO_FTP("ftp");
+
 Request::Request():
   port(0), tryCount(0),
   _supportsPersistentConnection(true),
@@ -69,7 +76,7 @@ bool Request::resetUrl() {
 }
 
 bool Request::redirectUrl(const std::string& url) {
-  previousUrl = "";
+  previousUrl = A2STR::NIL;
   _supportsPersistentConnection = true;
   return parseUrl(url);
 }
@@ -84,13 +91,13 @@ bool Request::parseUrl(const std::string& url) {
   }
   currentUrl = tempUrl;
   std::string query;
-  host = "";
+  host = A2STR::NIL;
   port = 0;
-  dir = "";
-  file = "";
-  _query = "";
-  _username = "";
-  _password = "";
+  dir = A2STR::NIL;
+  file = A2STR::NIL;
+  _query = A2STR::NIL;
+  _username = A2STR::NIL;
+  _password = A2STR::NIL;
   // find query part
   std::string queryTemp;
   std::string::size_type startQueryIndex = tempUrl.find("?");
@@ -126,7 +133,7 @@ bool Request::parseUrl(const std::string& url) {
   std::pair<std::string, std::string> hostAndPort;
   Util::split(hostAndPort, hostPart, ':');
   host = hostAndPort.first;
-  if(hostAndPort.second != "") {
+  if(hostAndPort.second != A2STR::NIL) {
     try {
       port = Util::parseInt(hostAndPort.second);
     } catch(RecoverableException& e) {
@@ -168,7 +175,7 @@ bool Request::isHexNumber(const char c) const
 std::string Request::urlencode(const std::string& src) const
 {
   if(src.empty()) {
-    return "";
+    return A2STR::NIL;
   }
   size_t lastIndex = src.size()-1;
   std::string result = src+"  ";

+ 6 - 0
src/Request.h

@@ -174,6 +174,12 @@ public:
   static const std::string METHOD_GET;
   static const std::string METHOD_HEAD;
 
+  static const std::string PROTO_HTTP;
+
+  static const std::string PROTO_HTTPS;
+
+  static const std::string PROTO_FTP;
+
 };
 
 typedef SharedHandle<Request> RequestHandle;

+ 3 - 2
src/RequestGroup.cc

@@ -71,6 +71,7 @@
 #include "Request.h"
 #include "FileAllocationIterator.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #ifdef ENABLE_MESSAGE_DIGEST
 # include "CheckIntegrityCommand.h"
 #endif // ENABLE_MESSAGE_DIGEST
@@ -517,7 +518,7 @@ std::string RequestGroup::getFilePath() const
 {
   assert(!_downloadContext.isNull());
   if(_downloadContext.isNull()) {
-    return "";
+    return A2STR::NIL;
   } else {
     return _downloadContext->getActualBasePath();
   }
@@ -858,7 +859,7 @@ DownloadResultHandle RequestGroup::createDownloadResult() const
     SharedHandle<DownloadResult>(new DownloadResult(_gid,
 						    getFilePath(),
 						    getTotalLength(),
-						    uris.empty() ? "":uris.front(),
+						    uris.empty() ? A2STR::NIL:uris.front(),
 						    uris.size(),
 						    downloadFinished()?
 						    DownloadResult::FINISHED :

+ 2 - 2
src/SingleFileDownloadContext.cc

@@ -51,9 +51,9 @@ SingleFileDownloadContext::SingleFileDownloadContext(size_t pieceLength,
 
 void SingleFileDownloadContext::updateFileEntry()
 {
-  if(_ufilename != "") {
+  if(!_ufilename.empty()) {
     _fileEntry->setPath(_ufilename);
-  } else if(_filename != "") {
+  } else if(!_filename.empty()) {
     _fileEntry->setPath(_filename);
   } else {
     _fileEntry->setPath("index.html");

+ 3 - 2
src/SingleFileDownloadContext.h

@@ -36,6 +36,7 @@
 #define _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_
 
 #include "DownloadContext.h"
+#include "A2STR.h"
 #include <string>
 #include <deque>
 
@@ -70,7 +71,7 @@ public:
   SingleFileDownloadContext(size_t pieceLength,
 			    uint64_t totalLength,
 			    const std::string& filename,
-			    const std::string& ufilename = "");
+			    const std::string& ufilename = A2STR::NIL);
 
   virtual ~SingleFileDownloadContext() {}
 
@@ -79,7 +80,7 @@ public:
     if(index < _pieceHashes.size()) {
       return _pieceHashes[index];
     } else {
-      return "";
+      return A2STR::NIL;
     }
   }
   

+ 2 - 1
src/TaggedItem.cc

@@ -34,6 +34,7 @@
 /* copyright --> */
 #include "TaggedItem.h"
 #include "a2functional.h"
+#include "A2STR.h"
 #include <algorithm>
 
 namespace aria2 {
@@ -48,7 +49,7 @@ std::string TaggedItem::toTagString() const
     }
     return s;
   } else {
-    return "";
+    return A2STR::NIL;
   }
 }
 

+ 3 - 2
src/TrackerWatcherCommand.cc

@@ -53,6 +53,7 @@
 #include "Option.h"
 #include "DlAbortEx.h"
 #include "Logger.h"
+#include "A2STR.h"
 #include <sstream>
 
 namespace aria2 {
@@ -176,9 +177,9 @@ TrackerWatcherCommand::createRequestGroup(const std::string& uri)
   SingleFileDownloadContextHandle dctx
     (new SingleFileDownloadContext(e->option->getAsInt(PREF_SEGMENT_SIZE),
 				   0,
-				   "",
+				   A2STR::NIL,
 				   "[tracker.announce]"));
-  dctx->setDir("");
+  dctx->setDir(A2STR::NIL);
   rg->setDownloadContext(dctx);
   SharedHandle<DiskWriterFactory> dwf(new ByteArrayDiskWriterFactory());
   rg->setDiskWriterFactory(dwf);

+ 1 - 1
src/UriListParser.cc

@@ -47,7 +47,7 @@ std::deque<std::string> UriListParser::parseNext(std::istream& in)
   std::deque<std::string> uris;
   std::string line;
   while(getline(in, line)) {
-    if(Util::trim(line) != "") {
+    if(!Util::trim(line).empty()) {
       Util::slice(uris, line, '\t', true);
       return uris;
     }

+ 14 - 13
src/Util.cc

@@ -43,6 +43,7 @@
 #include "FatalException.h"
 #include "FileEntry.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #include <signal.h>
 #include <cerrno>
 #include <cassert>
@@ -64,7 +65,7 @@ std::string Util::trim(const std::string& src, const std::string& trimCharset)
   std::string::size_type sp = src.find_first_not_of(trimCharset);
   std::string::size_type ep = src.find_last_not_of(trimCharset);
   if(sp == std::string::npos || ep == std::string::npos) {
-    return "";
+    return A2STR::NIL;
   } else {
     return src.substr(sp, ep-sp+1);
   }
@@ -72,12 +73,12 @@ std::string Util::trim(const std::string& src, const std::string& trimCharset)
 
 void Util::split(std::pair<std::string, std::string>& hp, const std::string& src, char delim)
 {
-  hp.first = "";
-  hp.second = "";
+  hp.first = A2STR::NIL;
+  hp.second = A2STR::NIL;
   std::string::size_type p = src.find(delim);
   if(p == std::string::npos) {
     hp.first = src;
-    hp.second = "";
+    hp.second = A2STR::NIL;
   } else {
     hp.first = trim(src.substr(0, p));
     hp.second = trim(src.substr(p+1));
@@ -87,12 +88,12 @@ void Util::split(std::pair<std::string, std::string>& hp, const std::string& src
 std::pair<std::string, std::string> Util::split(const std::string& src, const std::string& delims)
 {
   std::pair<std::string, std::string> hp;
-  hp.first = "";
-  hp.second = "";
+  hp.first = A2STR::NIL;
+  hp.second = A2STR::NIL;
   std::string::size_type p = src.find_first_of(delims);
   if(p == std::string::npos) {
     hp.first = src;
-    hp.second = "";
+    hp.second = A2STR::NIL;
   } else {
     hp.first = trim(src.substr(0, p));
     hp.second = trim(src.substr(p+1));
@@ -145,7 +146,7 @@ bool Util::startsWith(const std::string& target, const std::string& part) {
   if(target.size() < part.size()) {
     return false;
   }
-  if(part == "") {
+  if(part.empty()) {
     return true;
   }
   if(target.find(part) == 0) {
@@ -159,7 +160,7 @@ bool Util::endsWith(const std::string& target, const std::string& part) {
   if(target.size() < part.size()) {
     return false;
   }
-  if(part == "") {
+  if(part.empty()) {
     return true;
   }
   if(target.rfind(part) == target.size()-part.size()) {
@@ -170,7 +171,7 @@ bool Util::endsWith(const std::string& target, const std::string& part) {
 }
 
 std::string Util::replace(const std::string& target, const std::string& oldstr, const std::string& newstr) {
-  if(target == "" || oldstr == "" ) {
+  if(target.empty() || oldstr.empty()) {
     return target;
   }
   std::string result;
@@ -515,12 +516,12 @@ std::string Util::getContentDispositionFilename(const std::string& header) {
   std::string keyName = "filename=";
   std::string::size_type attributesp = header.find(keyName);
   if(attributesp == std::string::npos) {
-    return "";
+    return A2STR::NIL;
   }
   std::string::size_type filenamesp = attributesp+strlen(keyName.c_str());
   std::string::size_type filenameep;
   if(filenamesp == header.size()) {
-    return "";
+    return A2STR::NIL;
   }
   
   if(header[filenamesp] == '\'' || header[filenamesp] == '"') {
@@ -622,7 +623,7 @@ std::string Util::getHomeDir()
   if(p) {
     return p;
   } else {
-    return "";
+    return A2STR::NIL;
   }
 }
 

+ 2 - 1
src/a2functional.h

@@ -37,6 +37,7 @@
 
 #include <functional>
 #include "SharedHandle.h"
+#include "A2STR.h"
 #include <string>
 
 namespace aria2 {
@@ -143,7 +144,7 @@ class Concat {
 private:
   std::string _delim;
 public:
-  Concat(const std::string& delim = ""):_delim(delim) {}
+  Concat(const std::string& delim = A2STR::NIL):_delim(delim) {}
 
   std::string operator()(const std::string& s1, const std::string& s2) const
   {

+ 3 - 2
src/main.cc

@@ -65,6 +65,7 @@
 #include "ConsoleStatCalc.h"
 #include "NullStatCalc.h"
 #include "StringFormat.h"
+#include "A2STR.h"
 #ifdef ENABLE_METALINK
 # include "MetalinkHelper.h"
 # include "Metalink2RequestGroup.h"
@@ -112,13 +113,13 @@ std::deque<std::string> unfoldURI(const std::deque<std::string>& args)
 }
 
 RequestGroupHandle createRequestGroup(const Option* op, const std::deque<std::string>& uris,
-				      const std::string& ufilename = "")
+				      const std::string& ufilename = A2STR::NIL)
 {
   RequestGroupHandle rg(new RequestGroup(op, uris));
   SingleFileDownloadContextHandle dctx
     (new SingleFileDownloadContext(op->getAsInt(PREF_SEGMENT_SIZE),
 				  0,
-				  "",
+				  A2STR::NIL,
 				  ufilename));
   dctx->setDir(op->get(PREF_DIR));
   rg->setDownloadContext(dctx);

+ 3 - 2
src/option_processing.cc

@@ -46,6 +46,7 @@
 #include "File.h"
 #include "StringFormat.h"
 #include <cstdlib>
+#include <cstring>
 #include <fstream>
 #include <sstream>
 #include <iostream>
@@ -62,7 +63,7 @@ extern void showUsage(const std::string& category, const Option* option);
 static std::string toBoolArg(const char* optarg)
 {
   std::string arg;
-  if(!optarg || std::string(optarg) == "") {
+  if(!optarg || strlen(optarg) == 0) {
     arg = V_TRUE;
   } else {
     arg = optarg;
@@ -508,7 +509,7 @@ Option* option_processing(int argc, char* const argv[])
     case 'h':
       {
 	std::string category;
-	if(optarg == 0 || std::string(optarg) == "") {
+	if(optarg == 0 || strlen(optarg) == 0) {
 	  category = TAG_BASIC;
 	} else {
 	  category = optarg;