diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-26 05:58:49 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-26 05:58:49 +0000 |
| commit | 90d5b5c0a268e145cd121a0bcf2bdc0b624f0ca3 (patch) | |
| tree | 913532d3875403d87d38037dcca0e15c3fed539c /src | |
| parent | 0f92203ffebb18f754cffecc06dcb2bea2189594 (diff) | |
2008-04-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added StringFormat class, which internally calls vasprintf.
operator<< is defined for this class, so it can be used with iostream
classes nicely. SimpleLogger and following functions are rewritten
using StringFormat class.
Besides, now Logger class's methods are non-const, many classes
that has a const Logger* as a member variable are modified to remove
const qualifier from the variable declaration.
* src/HelpItemFactory.cc
* src/Request.cc
* src/SimpleLogger.cc
* src/StringFormat.cc
* src/StringFormat.h
* src/Util.cc
* src/option_processing.cc
* src/version_usage.cc
* test/StringFormatTest.cc
* src/*.h: The classes that has const Logger* as a member variable.
Diffstat (limited to 'src')
53 files changed, 277 insertions, 140 deletions
diff --git a/src/AbstractBtMessage.h b/src/AbstractBtMessage.h index 16dfc3c2..67858565 100644 --- a/src/AbstractBtMessage.h +++ b/src/AbstractBtMessage.h @@ -76,7 +76,7 @@ protected: std::deque<SharedHandle<BtEventListener> > listeners; - const Logger* logger; + Logger* logger; public: AbstractBtMessage(); diff --git a/src/AbstractDiskWriter.h b/src/AbstractDiskWriter.h index 9f7704cc..5067bc62 100644 --- a/src/AbstractDiskWriter.h +++ b/src/AbstractDiskWriter.h @@ -46,7 +46,7 @@ class AbstractDiskWriter : public DiskWriter { protected: std::string filename; int fd; - const Logger* logger; + Logger* logger; void createFile(const std::string& filename, int addFlags = 0); diff --git a/src/BtDependency.h b/src/BtDependency.h index dcbfad51..7edc8c15 100644 --- a/src/BtDependency.h +++ b/src/BtDependency.h @@ -49,7 +49,7 @@ private: WeakHandle<RequestGroup> _dependant; SharedHandle<RequestGroup> _dependee; const Option* _option; - const Logger* _logger; + Logger* _logger; public: BtDependency(const WeakHandle<RequestGroup>& dependant, const SharedHandle<RequestGroup>& dependee, diff --git a/src/BtLeecherStateChoke.h b/src/BtLeecherStateChoke.h index d898775b..80070143 100644 --- a/src/BtLeecherStateChoke.h +++ b/src/BtLeecherStateChoke.h @@ -51,7 +51,7 @@ private: Time _lastRound; - const Logger* _logger; + Logger* _logger; void plannedOptimisticUnchoke(std::deque<Peer*>& peers); diff --git a/src/BtSeederStateChoke.h b/src/BtSeederStateChoke.h index 8255dcd8..79b06075 100644 --- a/src/BtSeederStateChoke.h +++ b/src/BtSeederStateChoke.h @@ -54,7 +54,7 @@ private: Time _lastRound; - const Logger* _logger; + Logger* _logger; void unchoke(std::deque<Peer*>& peers); public: diff --git a/src/BtSetup.h b/src/BtSetup.h index 3617e970..ed113438 100644 --- a/src/BtSetup.h +++ b/src/BtSetup.h @@ -48,7 +48,7 @@ class Command; class BtSetup { private: - const Logger* _logger; + Logger* _logger; public: BtSetup(); diff --git a/src/Command.h b/src/Command.h index f2f24282..0aa77504 100644 --- a/src/Command.h +++ b/src/Command.h @@ -60,7 +60,7 @@ private: STATUS status; protected: int32_t cuid; - const Logger* logger; + Logger* logger; public: Command(int32_t cuid); diff --git a/src/DHTAbstractTask.h b/src/DHTAbstractTask.h index c0016a8e..82500763 100644 --- a/src/DHTAbstractTask.h +++ b/src/DHTAbstractTask.h @@ -54,7 +54,7 @@ class DHTAbstractTask:public DHTTask { protected: bool _finished; - const Logger* _logger; + Logger* _logger; SharedHandle<DHTNode> _localNode; diff --git a/src/DHTBucket.h b/src/DHTBucket.h index adbcee8f..c1b2252c 100644 --- a/src/DHTBucket.h +++ b/src/DHTBucket.h @@ -67,7 +67,7 @@ private: Time _lastUpdated; - const Logger* _logger; + Logger* _logger; public: DHTBucket(const SharedHandle<DHTNode>& localNode); diff --git a/src/DHTConnectionImpl.h b/src/DHTConnectionImpl.h index 7e3f94a5..8806d6cd 100644 --- a/src/DHTConnectionImpl.h +++ b/src/DHTConnectionImpl.h @@ -48,7 +48,7 @@ class DHTConnectionImpl:public DHTConnection { private: SharedHandle<SocketCore> _socket; - const Logger* _logger; + Logger* _logger; public: DHTConnectionImpl(); diff --git a/src/DHTMessageDispatcherImpl.h b/src/DHTMessageDispatcherImpl.h index 9ef29398..d18d04a3 100644 --- a/src/DHTMessageDispatcherImpl.h +++ b/src/DHTMessageDispatcherImpl.h @@ -50,7 +50,7 @@ private: std::deque<SharedHandle<DHTMessageEntry> > _messageQueue; - const Logger* _logger; + Logger* _logger; void sendMessage(const SharedHandle<DHTMessageEntry>& msg); public: diff --git a/src/DHTMessageFactoryImpl.h b/src/DHTMessageFactoryImpl.h index dcffcdd1..5f0fc248 100644 --- a/src/DHTMessageFactoryImpl.h +++ b/src/DHTMessageFactoryImpl.h @@ -63,7 +63,7 @@ private: WeakHandle<DHTTokenTracker> _tokenTracker; - const Logger* _logger; + Logger* _logger; // search node in routingTable. If it is not found, create new one. SharedHandle<DHTNode> getRemoteNode(const unsigned char* id, const std::string& ipaddr, uint16_t port) const; diff --git a/src/DHTMessageReceiver.h b/src/DHTMessageReceiver.h index f77f3f09..20b2143e 100644 --- a/src/DHTMessageReceiver.h +++ b/src/DHTMessageReceiver.h @@ -58,7 +58,7 @@ private: SharedHandle<DHTRoutingTable> _routingTable; - const Logger* _logger; + Logger* _logger; SharedHandle<DHTMessage> handleUnknownMessage(const unsigned char* data, size_t length, diff --git a/src/DHTMessageTracker.h b/src/DHTMessageTracker.h index 9c92b78e..890bcd5c 100644 --- a/src/DHTMessageTracker.h +++ b/src/DHTMessageTracker.h @@ -59,7 +59,7 @@ private: SharedHandle<DHTMessageFactory> _factory; - const Logger* _logger; + Logger* _logger; public: DHTMessageTracker(); diff --git a/src/DHTPeerAnnounceStorage.h b/src/DHTPeerAnnounceStorage.h index 27e63eb4..1e085ca3 100644 --- a/src/DHTPeerAnnounceStorage.h +++ b/src/DHTPeerAnnounceStorage.h @@ -58,7 +58,7 @@ private: SharedHandle<DHTTaskFactory> _taskFactory; - const Logger* _logger; + Logger* _logger; public: DHTPeerAnnounceStorage(); diff --git a/src/DHTRoutingTable.h b/src/DHTRoutingTable.h index 89640ae6..21721f98 100644 --- a/src/DHTRoutingTable.h +++ b/src/DHTRoutingTable.h @@ -61,7 +61,7 @@ private: SharedHandle<DHTTaskFactory> _taskFactory; - const Logger* _logger; + Logger* _logger; bool addNode(const SharedHandle<DHTNode>& node, bool good); public: diff --git a/src/DHTSetup.h b/src/DHTSetup.h index be001877..27a5c6a2 100644 --- a/src/DHTSetup.h +++ b/src/DHTSetup.h @@ -48,7 +48,7 @@ class DHTSetup { private: static size_t _initialized; - const Logger* _logger; + Logger* _logger; public: DHTSetup(); diff --git a/src/DHTTaskFactoryImpl.h b/src/DHTTaskFactoryImpl.h index f8ab278e..d35e5323 100644 --- a/src/DHTTaskFactoryImpl.h +++ b/src/DHTTaskFactoryImpl.h @@ -59,7 +59,7 @@ private: WeakHandle<DHTTaskQueue> _taskQueue; - const Logger* _logger; + Logger* _logger; void setCommonProperty(const SharedHandle<DHTAbstractTask>& task); public: diff --git a/src/DefaultBtContext.h b/src/DefaultBtContext.h index 060e9f6d..b752b4d8 100644 --- a/src/DefaultBtContext.h +++ b/src/DefaultBtContext.h @@ -69,7 +69,7 @@ private: RequestGroup* _ownerRequestGroup; - const Logger* _logger; + Logger* _logger; void clear(); void extractPieceHash(const unsigned char* hashData, diff --git a/src/DefaultBtInteractive.h b/src/DefaultBtInteractive.h index 625fbaa2..0e8a1425 100644 --- a/src/DefaultBtInteractive.h +++ b/src/DefaultBtInteractive.h @@ -98,7 +98,7 @@ private: WeakHandle<DHTNode> _localNode; - const Logger* logger; + Logger* logger; size_t allowedFastSetSize; Time haveCheckPoint; Time keepAliveCheckPoint; diff --git a/src/DefaultBtMessageDispatcher.h b/src/DefaultBtMessageDispatcher.h index c4fc9bad..0d63e48c 100644 --- a/src/DefaultBtMessageDispatcher.h +++ b/src/DefaultBtMessageDispatcher.h @@ -61,7 +61,7 @@ private: SharedHandle<Peer> peer; unsigned int maxUploadSpeedLimit; time_t requestTimeout; - const Logger* logger; + Logger* logger; public: DefaultBtMessageDispatcher(); diff --git a/src/DefaultBtMessageReceiver.h b/src/DefaultBtMessageReceiver.h index 6bbcc4ee..8344eb10 100644 --- a/src/DefaultBtMessageReceiver.h +++ b/src/DefaultBtMessageReceiver.h @@ -55,7 +55,7 @@ private: WeakHandle<PeerConnection> peerConnection; WeakHandle<BtMessageDispatcher> dispatcher; WeakHandle<BtMessageFactory> messageFactory; - const Logger* logger; + Logger* logger; void sendHandshake(); public: diff --git a/src/DefaultBtProgressInfoFile.h b/src/DefaultBtProgressInfoFile.h index f52ff67e..be7566e3 100644 --- a/src/DefaultBtProgressInfoFile.h +++ b/src/DefaultBtProgressInfoFile.h @@ -49,7 +49,7 @@ private: SharedHandle<DownloadContext> _dctx; SharedHandle<PieceStorage> _pieceStorage; const Option* _option; - const Logger* _logger; + Logger* _logger; std::string _filename; bool isTorrentDownload(); diff --git a/src/DefaultExtensionMessageFactory.h b/src/DefaultExtensionMessageFactory.h index 4465bf46..6bbc45ef 100644 --- a/src/DefaultExtensionMessageFactory.h +++ b/src/DefaultExtensionMessageFactory.h @@ -49,7 +49,7 @@ private: SharedHandle<Peer> _peer; - const Logger* _logger; + Logger* _logger; public: DefaultExtensionMessageFactory(); diff --git a/src/DiskAdaptor.h b/src/DiskAdaptor.h index 7b5c036b..df4acf1e 100644 --- a/src/DiskAdaptor.h +++ b/src/DiskAdaptor.h @@ -49,7 +49,7 @@ class DiskAdaptor:public BinaryStream { protected: std::string storeDir; std::deque<SharedHandle<FileEntry> > fileEntries; - const Logger* logger; + Logger* logger; public: DiskAdaptor(); virtual ~DiskAdaptor(); diff --git a/src/DownloadEngine.h b/src/DownloadEngine.h index 039a1246..6aa519b2 100644 --- a/src/DownloadEngine.h +++ b/src/DownloadEngine.h @@ -99,7 +99,7 @@ private: fd_set wfdset; int fdmax; - const Logger* logger; + Logger* logger; SharedHandle<StatCalc> _statCalc; diff --git a/src/DownloadEngineFactory.h b/src/DownloadEngineFactory.h index 662830a6..a381e4e9 100644 --- a/src/DownloadEngineFactory.h +++ b/src/DownloadEngineFactory.h @@ -48,7 +48,7 @@ class DownloadEngine; class DownloadEngineFactory { private: - const Logger* _logger; + Logger* _logger; public: DownloadEngineFactory(); diff --git a/src/DownloadHandler.h b/src/DownloadHandler.h index c12a0a17..9c6681e3 100644 --- a/src/DownloadHandler.h +++ b/src/DownloadHandler.h @@ -51,7 +51,7 @@ class DownloadHandler protected: SharedHandle<RequestGroupCriteria> _criteria; - const Logger* _logger; + Logger* _logger; public: DownloadHandler(); diff --git a/src/FtpConnection.h b/src/FtpConnection.h index bc0b597b..2f1f7709 100644 --- a/src/FtpConnection.h +++ b/src/FtpConnection.h @@ -54,7 +54,7 @@ private: SharedHandle<SocketCore> socket; SharedHandle<Request> req; const Option* option; - const Logger* logger; + Logger* logger; std::string strbuf; diff --git a/src/HandshakeExtensionMessage.h b/src/HandshakeExtensionMessage.h index 201891a0..ca33fc9e 100644 --- a/src/HandshakeExtensionMessage.h +++ b/src/HandshakeExtensionMessage.h @@ -59,7 +59,7 @@ private: SharedHandle<Peer> _peer; - const Logger* _logger; + Logger* _logger; public: HandshakeExtensionMessage(); diff --git a/src/HelpItemFactory.cc b/src/HelpItemFactory.cc index bd5e9a11..5c9eccd2 100644 --- a/src/HelpItemFactory.cc +++ b/src/HelpItemFactory.cc @@ -40,6 +40,7 @@ #include "a2io.h" #include "help_tags.h" #include "Option.h" +#include "StringFormat.h" namespace aria2 { @@ -459,9 +460,8 @@ TagContainerHandle HelpItemFactory::createHelpItems(const Option* op) } { HelpItemHandle item(new HelpItem("help", TEXT_HELP, TAG_BASIC)); - char buf[64]; - snprintf(buf, sizeof(buf), "%s,%s,%s,%s,%s,%s,all", TAG_BASIC, TAG_ADVANCED, TAG_HTTP, TAG_FTP, TAG_METALINK, TAG_BITTORRENT); - item->setAvailableValues(buf); + item->setAvailableValues + (StringFormat("%s,%s,%s,%s,%s,%s,all", TAG_BASIC, TAG_ADVANCED, TAG_HTTP, TAG_FTP, TAG_METALINK, TAG_BITTORRENT).toString()); item->addTag(TAG_BASIC); tc->addItem(item); } diff --git a/src/HttpConnection.h b/src/HttpConnection.h index 21684fd2..3a6a21c3 100644 --- a/src/HttpConnection.h +++ b/src/HttpConnection.h @@ -72,7 +72,7 @@ private: int32_t cuid; SharedHandle<SocketCore> socket; const Option* option; - const Logger* logger; + Logger* logger; HttpRequestEntries outstandingHttpRequests; diff --git a/src/HttpResponse.h b/src/HttpResponse.h index 7ec54db9..04ea1153 100644 --- a/src/HttpResponse.h +++ b/src/HttpResponse.h @@ -51,7 +51,7 @@ private: int32_t cuid; SharedHandle<HttpRequest> httpRequest; SharedHandle<HttpHeader> httpHeader; - const Logger* logger; + Logger* logger; public: HttpResponse(); diff --git a/src/IteratableChecksumValidator.h b/src/IteratableChecksumValidator.h index 5150e6a0..2a8997a8 100644 --- a/src/IteratableChecksumValidator.h +++ b/src/IteratableChecksumValidator.h @@ -55,7 +55,7 @@ private: SharedHandle<MessageDigestContext> _ctx; - const Logger* _logger; + Logger* _logger; unsigned char* _buffer; diff --git a/src/IteratableChunkChecksumValidator.h b/src/IteratableChunkChecksumValidator.h index 6d5e3e75..8517c378 100644 --- a/src/IteratableChunkChecksumValidator.h +++ b/src/IteratableChunkChecksumValidator.h @@ -52,7 +52,7 @@ private: SharedHandle<PieceStorage> _pieceStorage; BitfieldMan* _bitfield; size_t _currentIndex; - const Logger* _logger; + Logger* _logger; SharedHandle<MessageDigestContext> _ctx; unsigned char* _buffer; diff --git a/src/Logger.h b/src/Logger.h index 319ad84f..64a0e978 100644 --- a/src/Logger.h +++ b/src/Logger.h @@ -44,16 +44,16 @@ class Exception; class Logger { public: virtual ~Logger() {} - virtual void debug(const char* msg, ...) const = 0; - virtual void debug(const char* msg, Exception* ex, ...) const = 0; - virtual void info(const char* msg, ...) const = 0; - virtual void info(const char* msg, Exception* ex, ...) const = 0; - virtual void notice(const char* msg, ...) const = 0; - virtual void notice(const char* msg, Exception* ex, ...) const = 0; - virtual void warn(const char* msg, ...) const = 0; - virtual void warn(const char* msg, Exception* ex, ...) const = 0; - virtual void error(const char* msg, ...) const = 0; - virtual void error(const char* msg, Exception* ex, ...) const = 0; + virtual void debug(const char* msg, ...) = 0; + virtual void debug(const char* msg, Exception* ex, ...) = 0; + virtual void info(const char* msg, ...) = 0; + virtual void info(const char* msg, Exception* ex, ...) = 0; + virtual void notice(const char* msg, ...) = 0; + virtual void notice(const char* msg, Exception* ex, ...) = 0; + virtual void warn(const char* msg, ...) = 0; + virtual void warn(const char* msg, Exception* ex, ...) = 0; + virtual void error(const char* msg, ...) = 0; + virtual void error(const char* msg, Exception* ex, ...) = 0; enum LEVEL { DEBUG = 1 << 0, diff --git a/src/MSEHandshake.h b/src/MSEHandshake.h index bb192a43..8dc43eff 100644 --- a/src/MSEHandshake.h +++ b/src/MSEHandshake.h @@ -78,7 +78,7 @@ private: int32_t _cuid; SharedHandle<SocketCore> _socket; const Option* _option; - const Logger* _logger; + Logger* _logger; unsigned char _rbuf[MAX_BUFFER_LENGTH]; size_t _rbufLength; diff --git a/src/Makefile.am b/src/Makefile.am index 708f4457..e0126f56 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -182,7 +182,8 @@ SRCS = Socket.h\ prefs.h\ usage_text.h\ ProtocolDetector.cc ProtocolDetector.h\ - NullStatCalc.h + NullStatCalc.h\ + StringFormat.cc StringFormat.h if ENABLE_MESSAGE_DIGEST SRCS += IteratableChunkChecksumValidator.cc IteratableChunkChecksumValidator.h\ diff --git a/src/Makefile.in b/src/Makefile.in index 1748ebe0..3dd96acc 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -404,7 +404,8 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ TrueRequestGroupCriteria.h a2algo.h a2functional.h a2io.h \ a2netcompat.h a2time.h array_fun.h help_tags.h prefs.h \ usage_text.h ProtocolDetector.cc ProtocolDetector.h \ - NullStatCalc.h IteratableChunkChecksumValidator.cc \ + NullStatCalc.h StringFormat.cc StringFormat.h \ + IteratableChunkChecksumValidator.cc \ IteratableChunkChecksumValidator.h \ IteratableChecksumValidator.cc IteratableChecksumValidator.h \ CheckIntegrityCommand.cc CheckIntegrityCommand.h \ @@ -780,11 +781,11 @@ am__objects_14 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \ HelpItem.$(OBJEXT) TaggedItem.$(OBJEXT) TagContainer.$(OBJEXT) \ HelpItemFactory.$(OBJEXT) SingleFileDownloadContext.$(OBJEXT) \ TimedHaltCommand.$(OBJEXT) ProtocolDetector.$(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) + StringFormat.$(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_libaria2c_a_OBJECTS = $(am__objects_14) libaria2c_a_OBJECTS = $(am_libaria2c_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" @@ -1119,11 +1120,11 @@ SRCS = Socket.h SocketCore.cc SocketCore.h BinaryStream.h Command.cc \ TrueRequestGroupCriteria.h a2algo.h a2functional.h a2io.h \ a2netcompat.h a2time.h array_fun.h help_tags.h prefs.h \ usage_text.h ProtocolDetector.cc ProtocolDetector.h \ - NullStatCalc.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) + NullStatCalc.h StringFormat.cc StringFormat.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) noinst_LIBRARIES = libaria2c.a libaria2c_a_SOURCES = $(SRCS) aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\ @@ -1459,6 +1460,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpeedCalc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamCheckIntegrityEntry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamFileAllocationEntry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringFormat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TagContainer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TaggedItem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimeA2.Po@am__quote@ diff --git a/src/Metalink2RequestGroup.h b/src/Metalink2RequestGroup.h index 8c1d0075..fd591678 100644 --- a/src/Metalink2RequestGroup.h +++ b/src/Metalink2RequestGroup.h @@ -52,7 +52,7 @@ class Metalink2RequestGroup { private: const Option* _option; - const Logger* _logger; + Logger* _logger; std::deque<SharedHandle<RequestGroup> > createRequestGroup(std::deque<SharedHandle<MetalinkEntry> > entries); diff --git a/src/MultiUrlRequestInfo.h b/src/MultiUrlRequestInfo.h index a66dc9bb..ccf37346 100644 --- a/src/MultiUrlRequestInfo.h +++ b/src/MultiUrlRequestInfo.h @@ -57,7 +57,7 @@ private: std::ostream& _summaryOut; - const Logger* _logger; + Logger* _logger; void printMessageForContinue(); diff --git a/src/PeerConnection.h b/src/PeerConnection.h index 57e97c9f..cccf13c5 100644 --- a/src/PeerConnection.h +++ b/src/PeerConnection.h @@ -56,7 +56,7 @@ private: int32_t cuid; SharedHandle<SocketCore> socket; const Option* option; - const Logger* logger; + Logger* logger; unsigned char resbuf[MAX_PAYLOAD_LEN]; size_t resbufLength; diff --git a/src/Request.cc b/src/Request.cc index 545dc600..e06f1981 100644 --- a/src/Request.cc +++ b/src/Request.cc @@ -38,6 +38,7 @@ #include "CookieBoxFactory.h" #include "CookieBox.h" #include "RecoverableException.h" +#include "StringFormat.h" #include <utility> namespace aria2 { @@ -180,10 +181,7 @@ std::string Request::urlencode(const std::string& src) const result.replace(index, 1, "%25"); } } else { - char temp[4]; - sprintf(temp, "%%%02x", c); - temp[3] = '\0'; - result.replace(index, 1, temp); + result.replace(index, 1, StringFormat("%%%02x", c).toString()); } } } diff --git a/src/RequestGroup.h b/src/RequestGroup.h index b6958ebd..657eb2c9 100644 --- a/src/RequestGroup.h +++ b/src/RequestGroup.h @@ -112,7 +112,7 @@ private: const Option* _option; - const Logger* _logger; + Logger* _logger; void validateFilename(const std::string& expectedFilename, const std::string& actualFilename) const; diff --git a/src/RequestGroupMan.h b/src/RequestGroupMan.h index b70d46fb..65f56705 100644 --- a/src/RequestGroupMan.h +++ b/src/RequestGroupMan.h @@ -55,7 +55,7 @@ private: std::deque<SharedHandle<RequestGroup> > _requestGroups; std::deque<SharedHandle<RequestGroup> > _reservedGroups; std::deque<SharedHandle<DownloadResult> > _downloadResults; - const Logger* _logger; + Logger* _logger; unsigned int _maxSimultaneousDownloads; int32_t _gidCounter; diff --git a/src/SegmentMan.h b/src/SegmentMan.h index 8807ee48..2519cf55 100644 --- a/src/SegmentMan.h +++ b/src/SegmentMan.h @@ -69,7 +69,7 @@ class SegmentMan { private: const Option* _option; - const Logger* logger; + Logger* logger; SharedHandle<DownloadContext> _downloadContext; diff --git a/src/SimpleLogger.cc b/src/SimpleLogger.cc index e6425e63..2dc5ab1d 100644 --- a/src/SimpleLogger.cc +++ b/src/SimpleLogger.cc @@ -38,8 +38,11 @@ #include "message.h" #include "a2io.h" #include "a2time.h" +#include "StringFormat.h" #include <cerrno> #include <cstring> +#include <iostream> +#include <cstdlib> namespace aria2 { @@ -63,22 +66,22 @@ va_start(ap, EX);\ writeFile(Logger::LEVEL, MSG, ap, EX);\ va_end(ap); -SimpleLogger::SimpleLogger(FILE* logfile):file(logfile), stdoutField(0) {} +SimpleLogger::SimpleLogger():stdoutField(0) {} SimpleLogger::~SimpleLogger() { closeFile(); } void SimpleLogger::openFile(const std::string& filename) { - file = fopen(filename.c_str(), "ab"); - if(file == NULL) { + file.open(filename.c_str(), std::ios::app|std::ios::binary); + if(!file) { throw new DlAbortEx(EX_FILE_OPEN, filename.c_str(), strerror(errno)); } } void SimpleLogger::closeFile() { - if(file != NULL) { - fclose(file); + if(file.is_open()) { + file.close(); } } @@ -90,13 +93,15 @@ void SimpleLogger::setStdout(Logger::LEVEL level, bool enabled) { } } -void SimpleLogger::writeHeader(FILE* file, - const std::string& date, const std::string& level) const +void SimpleLogger::writeHeader(std::ostream& o, const std::string& date, + const std::string& level) { - fprintf(file, "%s %s - ", date.c_str(), level.c_str()); + o << StringFormat("%s %s - ", date.c_str(), level.c_str()); } -void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va_list ap, Exception* e, bool printHeader) const +void SimpleLogger::writeLog(std::ostream& o, Logger::LEVEL level, + const char* msg, va_list ap, Exception* e, + bool printHeader) { va_list apCopy; va_copy(apCopy, ap); @@ -126,65 +131,74 @@ void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va // TODO a quick hack not to print header in console if(printHeader) { - writeHeader(file, datestr, levelStr); + writeHeader(o, datestr, levelStr); + } + { + char* res; + if(vasprintf(&res, std::string(Util::replace(msg, "\r", "")+"\n").c_str(), apCopy) == -1) { + o << "SimpleLogger error, cannot allocate memory.\n"; + } else { + o << res; + free(res); + } } - vfprintf(file, std::string(Util::replace(msg, "\r", "")+"\n").c_str(), apCopy); for(Exception* nestedEx = e; nestedEx; nestedEx = nestedEx->getCause()) { // TODO a quick hack not to print header in console if(printHeader) { - writeHeader(file, datestr, levelStr); + writeHeader(o, datestr, levelStr); } - fprintf(file, "exception: %s\n", Util::replace(nestedEx->getMsg(), "\r", "").c_str()); + o << StringFormat("exception: %s\n", Util::replace(nestedEx->getMsg(), "\r", "").c_str()); } - fflush(file); + o << std::flush; va_end(apCopy); } -void SimpleLogger::writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e) const { +void SimpleLogger::writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e) +{ writeLog(file, level, msg, ap, e); if(stdoutField&level) { - fprintf(stdout, "\n"); - writeLog(stdout, level, msg, ap, e); + std::cout << "\n"; + writeLog(std::cout, level, msg, ap, e); } } -void SimpleLogger::debug(const char* msg, ...) const { +void SimpleLogger::debug(const char* msg, ...) { WRITE_LOG(DEBUG, msg); } -void SimpleLogger::debug(const char* msg, Exception* e, ...) const { +void SimpleLogger::debug(const char* msg, Exception* e, ...) { WRITE_LOG_EX(DEBUG, msg, e); } -void SimpleLogger::info(const char* msg, ...) const { +void SimpleLogger::info(const char* msg, ...) { WRITE_LOG(INFO, msg); } -void SimpleLogger::info(const char* msg, Exception* e, ...) const { +void SimpleLogger::info(const char* msg, Exception* e, ...) { WRITE_LOG_EX(INFO, msg, e); } -void SimpleLogger::notice(const char* msg, ...) const { +void SimpleLogger::notice(const char* msg, ...) { WRITE_LOG(NOTICE, msg); } -void SimpleLogger::notice(const char* msg, Exception* e, ...) const { +void SimpleLogger::notice(const char* msg, Exception* e, ...) { WRITE_LOG_EX(INFO, msg, e); } -void SimpleLogger::warn(const char* msg, ...) const { +void SimpleLogger::warn(const char* msg, ...) { WRITE_LOG(WARN, msg); } -void SimpleLogger::warn(const char* msg, Exception* e, ...) const { +void SimpleLogger::warn(const char* msg, Exception* e, ...) { WRITE_LOG_EX(WARN, msg, e); } -void SimpleLogger::error(const char* msg, ...) const { +void SimpleLogger::error(const char* msg, ...) { WRITE_LOG(ERROR, msg); } -void SimpleLogger::error(const char* msg, Exception* e, ...) const { +void SimpleLogger::error(const char* msg, Exception* e, ...) { WRITE_LOG_EX(ERROR, msg, e); } diff --git a/src/SimpleLogger.h b/src/SimpleLogger.h index 616ee5e1..8d32c4e8 100644 --- a/src/SimpleLogger.h +++ b/src/SimpleLogger.h @@ -36,38 +36,39 @@ #define _D_SIMPLE_LOGGER_H_ #include "Logger.h" -#include <cstdio> #include <cstdarg> #include <string> +#include <fstream> namespace aria2 { class SimpleLogger:public Logger { private: - void writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e = 0) const; - void writeHeader(FILE* file, - const std::string& date, const std::string& level) const; - void writeLog(FILE* file, Logger::LEVEL level, + void writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e = 0); + void writeHeader(std::ostream& out, + const std::string& date, const std::string& level); + void writeLog(std::ostream& out, Logger::LEVEL level, const char* msg, va_list ap, - Exception* e = 0, bool printHeader = true) const; - FILE* file; + Exception* e = 0, bool printHeader = true); + + std::ofstream file; int stdoutField; public: - SimpleLogger(FILE* logfile = 0); + SimpleLogger(); ~SimpleLogger(); void openFile(const std::string& filename); void closeFile(); - virtual void debug(const char* msg, ...) const; - virtual void debug(const char* msg, Exception* ex, ...) const; - virtual void info(const char* msg, ...) const; - virtual void info(const char* msg, Exception* ex, ...) const; - virtual void notice(const char* msg, ...) const; - virtual void notice(const char* msg, Exception* ex, ...) const; - virtual void warn(const char* msg, ...) const; - virtual void warn(const char* msg, Exception* ex, ...) const; - virtual void error(const char* msg, ...) const; - virtual void error(const char* msg, Exception* ex, ...) const; + virtual void debug(const char* msg, ...); + virtual void debug(const char* msg, Exception* ex, ...); + virtual void info(const char* msg, ...); + virtual void info(const char* msg, Exception* ex, ...); + virtual void notice(const char* msg, ...); + virtual void notice(const char* msg, Exception* ex, ...); + virtual void warn(const char* msg, ...); + virtual void warn(const char* msg, Exception* ex, ...); + virtual void error(const char* msg, ...); + virtual void error(const char* msg, Exception* ex, ...); void setStdout(Logger::LEVEL level, bool enabled); }; diff --git a/src/StringFormat.cc b/src/StringFormat.cc new file mode 100644 index 00000000..2dadc0ac --- /dev/null +++ b/src/StringFormat.cc @@ -0,0 +1,67 @@ +/* <!-- 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 "StringFormat.h" +#include <ostream> +#include <cstring> +#include <cstdio> +#include <cstdarg> +#include <cstdlib> + +namespace aria2 { + +StringFormat::StringFormat(const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + char* strp; + if(vasprintf(&strp, fmt, ap) != -1) { + _msg.assign(&strp[0], &strp[strlen(strp)]); + free(strp); + } + va_end(ap); +} + +const std::string& StringFormat::toString() const +{ + return _msg; +} + +std::ostream& operator<<(std::ostream& o, const StringFormat& fmt) +{ + o << fmt.toString(); + return o; +} + +} // namespace aria2 diff --git a/src/StringFormat.h b/src/StringFormat.h new file mode 100644 index 00000000..f119863b --- /dev/null +++ b/src/StringFormat.h @@ -0,0 +1,57 @@ +/* <!-- 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_STRING_FORMAT_H_ +#define _D_STRING_FORMAT_H_ + +#include <string> +#include <iosfwd> +#include <cstdarg> + +namespace aria2 { + +class StringFormat { +private: + std::string _msg; +public: + StringFormat(const char* fmt, ...); + + const std::string& toString() const; +}; + +std::ostream& operator<<(std::ostream& o, const StringFormat& fmt); + +} // namespace aria2 + +#endif // _D_STRING_FORMAT_H_ diff --git a/src/Util.cc b/src/Util.cc index c137704a..25829b9e 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -42,6 +42,7 @@ #include "DefaultDiskWriter.h" #include "FatalException.h" #include "FileEntry.h" +#include "StringFormat.h" #include <signal.h> #include <cerrno> #include <cassert> @@ -205,10 +206,7 @@ std::string Util::urlencode(const unsigned char* target, size_t len) { std::string dest; for(size_t i = 0; i < len; i++) { if(shouldUrlencode(target[i])) { - char temp[4]; - sprintf(temp, "%%%02x", target[i]); - temp[sizeof(temp)-1] = '\0'; - dest.append(temp); + dest.append(StringFormat("%%%02x", target[i]).toString()); } else { dest += target[i]; } @@ -224,10 +222,7 @@ std::string Util::torrentUrlencode(const unsigned char* target, size_t len) { ('a' <= target[i] && target[i] <= 'z')) { dest += target[i]; } else { - char temp[4]; - sprintf(temp, "%%%02x", target[i]); - temp[sizeof(temp)-1] = '\0'; - dest.append(temp); + dest.append(StringFormat("%%%02x", target[i]).toString()); } } return dest; diff --git a/src/option_processing.cc b/src/option_processing.cc index 4a5b78a8..0f344bd6 100644 --- a/src/option_processing.cc +++ b/src/option_processing.cc @@ -44,6 +44,7 @@ #include "a2io.h" #include "help_tags.h" #include "File.h" +#include "StringFormat.h" #include <cstdlib> #include <fstream> #include <sstream> @@ -523,8 +524,8 @@ Option* option_processing(int argc, char* const argv[]) exit(EXIT_FAILURE); } } else if(ucfname.size()) { - printf("Configuration file %s is not found.", cfname.c_str()); - std::cout << "\n"; + std::cout << StringFormat("Configuration file %s is not found.", cfname.c_str()) + << "\n"; } } try { diff --git a/src/version_usage.cc b/src/version_usage.cc index 7add5a5c..65c645b3 100644 --- a/src/version_usage.cc +++ b/src/version_usage.cc @@ -44,6 +44,7 @@ #include "HelpItemFactory.h" #include "help_tags.h" #include "prefs.h" +#include "StringFormat.h" #include <iostream> #include <iterator> #include <algorithm> @@ -89,34 +90,34 @@ void showVersion() { #ifdef ENABLE_MESSAGE_DIGEST << "message digest algorithms: " << MessageDigestContext::getSupportedAlgoString() << "\n" #endif // ENABLE_MESSAGE_DIGEST - << "\n"; - printf(_("Report bugs to %s"), "<tujikawa at users dot sourceforge dot net>"); - std::cout << std::endl; + << "\n" + << StringFormat(_("Report bugs to %s"), "<tujikawa at users dot sourceforge dot net>") + << std::endl; } void showUsage(const std::string& category, const Option* option) { - printf(_("Usage: %s [options] URL ...\n"), PACKAGE_NAME); + std::cout << StringFormat(_("Usage: %s [options] URL ...\n"), PACKAGE_NAME) #ifdef ENABLE_BITTORRENT - printf(_(" %s [options] -T TORRENT_FILE URL ...\n"), PACKAGE_NAME); + << StringFormat(_(" %s [options] -T TORRENT_FILE URL ...\n"), PACKAGE_NAME) #endif // ENABLE_BITTORRENT #ifdef ENABLE_METALINK - printf(_(" %s [options] -M METALINK_FILE\n"), PACKAGE_NAME); + << StringFormat(_(" %s [options] -M METALINK_FILE\n"), PACKAGE_NAME) #endif // ENABLE_METALINK - std::cout << "\n"; + << "\n"; SharedHandle<TagContainer> tc = HelpItemFactory::createHelpItems(option); std::deque<SharedHandle<TaggedItem> > items = category == V_ALL ? tc->getAllItems() : tc->search(category); if(items.size() > 0) { if(category == V_ALL) { - printf(_("Printing all options.")); + std::cout << _("Printing all options."); } else { - printf(_("Printing options tagged with '%s'."), category.c_str()); + std::cout << StringFormat(_("Printing options tagged with '%s'."), category.c_str()); std::cout << "\n"; SharedHandle<HelpItem> helpItem (dynamic_pointer_cast<HelpItem>(tc->nameMatch("help"))); - printf(_("See -h option to know other command-line options(%s)."), - helpItem->getAvailableValues().c_str()); + std::cout << StringFormat(_("See -h option to know other command-line options(%s)."), + helpItem->getAvailableValues().c_str()); } std::cout << "\n" << _("Options:") << "\n"; @@ -126,13 +127,13 @@ void showUsage(const std::string& category, const Option* option) { } else { std::deque<SharedHandle<TaggedItem> > items = tc->nameMatchForward(category); if(items.size() > 0) { - printf(_("Printing options whose name starts with '%s'."), category.c_str()); - std::cout << "\n" + std::cout << StringFormat(_("Printing options whose name starts with '%s'."), category.c_str()) + << "\n" << _("Options:") << "\n"; std::copy(items.begin(), items.end(), std::ostream_iterator<SharedHandle<TaggedItem> >(std::cout, "\n")); } else { - printf(_("No help category or option name matching with '%s'."), category.c_str()); - std::cout << "\n" << tc->nameMatch("help") << "\n"; + std::cout << StringFormat(_("No help category or option name matching with '%s'."), category.c_str()) + << "\n" << tc->nameMatch("help") << "\n"; } } if(category == TAG_BASIC) { |
