Browse Source

Introduce PrefPtr typedef

Nils Maier 12 years ago
parent
commit
a76eeb2b81

+ 6 - 6
src/AbstractCommand.cc

@@ -564,9 +564,9 @@ namespace {
 // Constructs proxy URI, merging username and password if they are
 // defined.
 std::string makeProxyUri
-(const Pref* proxyPref,
- const Pref* proxyUser,
- const Pref* proxyPasswd,
+(PrefPtr proxyPref,
+ PrefPtr proxyUser,
+ PrefPtr proxyPasswd,
  const Option* option)
 {
   uri::UriStruct us;
@@ -588,9 +588,9 @@ std::string makeProxyUri
 namespace {
 // Returns proxy option value for the given protocol.
 std::string getProxyOptionFor
-(const Pref* proxyPref,
- const Pref* proxyUser,
- const Pref* proxyPasswd,
+(PrefPtr proxyPref,
+ PrefPtr proxyUser,
+ PrefPtr proxyPasswd,
  const Option* option)
 {
   std::string uri = makeProxyUri(proxyPref, proxyUser, proxyPasswd, option);

+ 1 - 1
src/AbstractOptionHandler.cc

@@ -45,7 +45,7 @@
 namespace aria2 {
 
 AbstractOptionHandler::AbstractOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  ARG_TYPE argType,

+ 3 - 3
src/AbstractOptionHandler.h

@@ -44,7 +44,7 @@ struct Pref;
 
 class AbstractOptionHandler : public OptionHandler {
 protected:
-  const Pref* pref_;
+  PrefPtr pref_;
 
   const char* description_;
 
@@ -56,7 +56,7 @@ protected:
 
   virtual void parseArg(Option& option, const std::string& arg) const = 0;
 public:
-  AbstractOptionHandler(const Pref* pref,
+  AbstractOptionHandler(PrefPtr pref,
                          const char* description = NO_DESCRIPTION,
                          const std::string& defaultValue = NO_DEFAULT_VALUE,
                          ARG_TYPE argType = REQ_ARG,
@@ -85,7 +85,7 @@ public:
     return defaultValue_;
   }
 
-  virtual const Pref* getPref() const CXX11_OVERRIDE
+  virtual PrefPtr getPref() const CXX11_OVERRIDE
   {
     return pref_;
   }

+ 2 - 2
src/DHTSetup.cc

@@ -179,11 +179,11 @@ std::vector<std::unique_ptr<Command>> DHTSetup::setup
     factory->setTokenTracker(tokenTracker.get());
     factory->setLocalNode(localNode);
 
-    const Pref* prefEntryPointHost =
+    PrefPtr prefEntryPointHost =
       family == AF_INET?PREF_DHT_ENTRY_POINT_HOST:PREF_DHT_ENTRY_POINT_HOST6;
     if(!e->getOption()->get(prefEntryPointHost).empty()) {
       {
-        const Pref* prefEntryPointPort =
+        PrefPtr prefEntryPointPort =
           family == AF_INET?PREF_DHT_ENTRY_POINT_PORT:
           PREF_DHT_ENTRY_POINT_PORT6;
         std::pair<std::string, uint16_t> addr

+ 12 - 12
src/Option.cc

@@ -68,36 +68,36 @@ Option& Option::operator=(const Option& option)
 namespace {
 
 template<typename V>
-void setBit(V& b, const Pref* pref)
+void setBit(V& b, PrefPtr pref)
 {
   b[pref->i/8] |= 128 >> (pref->i%8);
 }
 
 template<typename V>
-void unsetBit(V& b, const Pref* pref)
+void unsetBit(V& b, PrefPtr pref)
 {
   b[pref->i/8] &= ~(128 >> (pref->i%8));
 }
 
 } // namespace
 
-void Option::put(const Pref* pref, const std::string& value) {
+void Option::put(PrefPtr pref, const std::string& value) {
   setBit(use_, pref);
   table_[pref->i] = value;
 }
 
-bool Option::defined(const Pref* pref) const
+bool Option::defined(PrefPtr pref) const
 {
   return bitfield::test(use_, use_.size()*8, pref->i) ||
     (parent_ && parent_->defined(pref));
 }
 
-bool Option::definedLocal(const Pref* pref) const
+bool Option::definedLocal(PrefPtr pref) const
 {
   return bitfield::test(use_, use_.size()*8, pref->i);
 }
 
-bool Option::blank(const Pref* pref) const
+bool Option::blank(PrefPtr pref) const
 {
   if(bitfield::test(use_, use_.size()*8, pref->i)) {
     return table_[pref->i].empty();
@@ -106,7 +106,7 @@ bool Option::blank(const Pref* pref) const
   }
 }
 
-const std::string& Option::get(const Pref* pref) const
+const std::string& Option::get(PrefPtr pref) const
 {
   if(bitfield::test(use_, use_.size()*8, pref->i)) {
     return table_[pref->i];
@@ -117,7 +117,7 @@ const std::string& Option::get(const Pref* pref) const
   }
 }
 
-int32_t Option::getAsInt(const Pref* pref) const {
+int32_t Option::getAsInt(PrefPtr pref) const {
   const std::string& value = get(pref);
   if(value.empty()) {
     return 0;
@@ -126,7 +126,7 @@ int32_t Option::getAsInt(const Pref* pref) const {
   }
 }
 
-int64_t Option::getAsLLInt(const Pref* pref) const {
+int64_t Option::getAsLLInt(PrefPtr pref) const {
   const std::string& value = get(pref);
   if(value.empty()) {
     return 0;
@@ -135,11 +135,11 @@ int64_t Option::getAsLLInt(const Pref* pref) const {
   }
 }
 
-bool Option::getAsBool(const Pref* pref) const {
+bool Option::getAsBool(PrefPtr pref) const {
   return get(pref) == A2_V_TRUE;
 }
 
-double Option::getAsDouble(const Pref* pref) const {
+double Option::getAsDouble(PrefPtr pref) const {
   const std::string& value = get(pref);
   if(value.empty()) {
     return 0.0;
@@ -148,7 +148,7 @@ double Option::getAsDouble(const Pref* pref) const {
   }
 }
 
-void Option::remove(const Pref* pref)
+void Option::remove(PrefPtr pref)
 {
   unsetBit(use_, pref);
   table_[pref->i].clear();

+ 11 - 10
src/Option.h

@@ -44,6 +44,7 @@
 namespace aria2 {
 
 struct Pref;
+typedef const Pref* PrefPtr;
 
 class Option {
 private:
@@ -56,27 +57,27 @@ public:
   Option(const Option& option);
   Option& operator=(const Option& option);
 
-  void put(const Pref* pref, const std::string& value);
+  void put(PrefPtr pref, const std::string& value);
   // Returns true if name is defined. Otherwise returns false.  Note
   // that even if the value is a empty string, this method returns
   // true.  If option is not defined in this object and parent_ is not
   // NULL, lookup parent_ to check |pref| is defined.
-  bool defined(const Pref* pref) const;
+  bool defined(PrefPtr pref) const;
   // Just like defined(), but this function does not lookup parent_.
-  bool definedLocal(const Pref* pref) const;
+  bool definedLocal(PrefPtr pref) const;
   // Returns true if name is not defined or the value is a empty string.
   // Otherwise returns false.
-  bool blank(const Pref* pref) const;
+  bool blank(PrefPtr pref) const;
   // Returns option value for |pref|. If the |pref| is not defined in
   // this object, parent_ is looked up.
-  const std::string& get(const Pref* pref) const;
-  int32_t getAsInt(const Pref* pref) const;
-  int64_t getAsLLInt(const Pref* pref) const;
-  bool getAsBool(const Pref* pref) const;
-  double getAsDouble(const Pref* pref) const;
+  const std::string& get(PrefPtr pref) const;
+  int32_t getAsInt(PrefPtr pref) const;
+  int64_t getAsLLInt(PrefPtr pref) const;
+  bool getAsBool(PrefPtr pref) const;
+  double getAsDouble(PrefPtr pref) const;
   // Removes |pref| from this object. This function does not modify
   // parent_.
-  void remove(const Pref* pref);
+  void remove(PrefPtr pref);
   // Removes all option values from this object. This function does
   // not modify parent_.
   void clear();

+ 2 - 1
src/OptionHandler.h

@@ -57,6 +57,7 @@ extern const std::string PATH_TO_COMMAND;
 
 class Option;
 struct Pref;
+typedef const Pref* PrefPtr;
 
 class OptionHandler {
 public:
@@ -82,7 +83,7 @@ public:
 
   virtual void hide() = 0;
 
-  virtual const Pref* getPref() const = 0;
+  virtual PrefPtr getPref() const = 0;
 
   enum ARG_TYPE {
     REQ_ARG,

+ 2 - 2
src/OptionHandlerException.cc

@@ -45,7 +45,7 @@ const char* MESSAGE =
 
 OptionHandlerException::OptionHandlerException
 (const char* file, int line,
- const Pref* pref)
+ PrefPtr pref)
   : RecoverableException
     (file, line, fmt(MESSAGE, pref->k), error_code::OPTION_ERROR),
     pref_(pref)
@@ -53,7 +53,7 @@ OptionHandlerException::OptionHandlerException
 
 OptionHandlerException::OptionHandlerException
 (const char* file, int line,
- const Pref* pref,
+ PrefPtr pref,
  const Exception& cause)
   : RecoverableException
     (file, line, fmt(MESSAGE, pref->k), error_code::OPTION_ERROR,

+ 5 - 4
src/OptionHandlerException.h

@@ -39,23 +39,24 @@
 namespace aria2 {
 
 struct Pref;
+typedef const Pref* PrefPtr;
 
 class OptionHandlerException:public RecoverableException {
 private:
-  const Pref* pref_;
+  PrefPtr pref_;
 protected:
   virtual std::shared_ptr<Exception> copy() const CXX11_OVERRIDE;
 public:
   OptionHandlerException(const char* file, int line,
-                         const Pref* pref);
+                         PrefPtr pref);
 
   OptionHandlerException(const char* file, int line,
-                         const Pref* pref,
+                         PrefPtr pref,
                          const Exception& cause);
 
   virtual ~OptionHandlerException() throw();
 
-  const Pref* getPref() const
+  PrefPtr getPref() const
   {
     return pref_;
   }

+ 17 - 17
src/OptionHandlerImpl.cc

@@ -68,7 +68,7 @@
 namespace aria2 {
 
 BooleanOptionHandler::BooleanOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  OptionHandler::ARG_TYPE argType,
@@ -103,7 +103,7 @@ std::string BooleanOptionHandler::createPossibleValuesString() const
 }
 
 IntegerRangeOptionHandler::IntegerRangeOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  int32_t min, int32_t max,
@@ -140,7 +140,7 @@ std::string IntegerRangeOptionHandler::createPossibleValuesString() const
 }
 
 NumberOptionHandler::NumberOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  int64_t min,
@@ -205,7 +205,7 @@ std::string NumberOptionHandler::createPossibleValuesString() const
 }
 
 UnitNumberOptionHandler::UnitNumberOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  int64_t min,
@@ -225,7 +225,7 @@ void UnitNumberOptionHandler::parseArg
 }
 
 FloatNumberOptionHandler::FloatNumberOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  double min,
@@ -279,7 +279,7 @@ std::string FloatNumberOptionHandler::createPossibleValuesString() const
 }
 
 DefaultOptionHandler::DefaultOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  const std::string& possibleValuesString,
@@ -304,7 +304,7 @@ std::string DefaultOptionHandler::createPossibleValuesString() const
 }
 
 CumulativeOptionHandler::CumulativeOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  const std::string& delim,
@@ -334,7 +334,7 @@ std::string CumulativeOptionHandler::createPossibleValuesString() const
 }
 
 IndexOutOptionHandler::IndexOutOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  char shortName)
   : AbstractOptionHandler(pref, description, NO_DEFAULT_VALUE,
@@ -361,7 +361,7 @@ std::string IndexOutOptionHandler::createPossibleValuesString() const
 
 #ifdef ENABLE_MESSAGE_DIGEST
 ChecksumOptionHandler::ChecksumOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  char shortName)
   : AbstractOptionHandler(pref, description, NO_DEFAULT_VALUE,
@@ -391,7 +391,7 @@ std::string ChecksumOptionHandler::createPossibleValuesString() const
 #endif // ENABLE_MESSAGE_DIGEST
 
 ParameterOptionHandler::ParameterOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  std::vector<std::string> validParamValues,
@@ -436,11 +436,11 @@ std::string ParameterOptionHandler::createPossibleValuesString() const
 }
 
 HostPortOptionHandler::HostPortOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
- const Pref* hostOptionName,
- const Pref* portOptionName,
+ PrefPtr hostOptionName,
+ PrefPtr portOptionName,
  char shortName)
   : AbstractOptionHandler(pref, description, defaultValue,
                           OptionHandler::REQ_ARG, shortName),
@@ -476,7 +476,7 @@ std::string HostPortOptionHandler::createPossibleValuesString() const
 }
 
 HttpProxyOptionHandler::HttpProxyOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  char shortName)
@@ -518,7 +518,7 @@ std::string HttpProxyOptionHandler::createPossibleValuesString() const
 }
 
 LocalFilePathOptionHandler::LocalFilePathOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  bool acceptStdin,
@@ -552,7 +552,7 @@ std::string LocalFilePathOptionHandler::createPossibleValuesString() const
 }
 
 PrioritizePieceOptionHandler::PrioritizePieceOptionHandler
-(const Pref* pref,
+(PrefPtr pref,
  const char* description,
  const std::string& defaultValue,
  char shortName)
@@ -649,7 +649,7 @@ void DeprecatedOptionHandler::hide()
   depOptHandler_->hide();
 }
 
-const Pref* DeprecatedOptionHandler::getPref() const
+PrefPtr DeprecatedOptionHandler::getPref() const
 {
   return depOptHandler_->getPref();
 }

+ 21 - 21
src/OptionHandlerImpl.h

@@ -49,7 +49,7 @@ struct Pref;
 
 class BooleanOptionHandler : public AbstractOptionHandler {
 public:
-  BooleanOptionHandler(const Pref* pref,
+  BooleanOptionHandler(PrefPtr pref,
                        const char* description = NO_DESCRIPTION,
                        const std::string& defaultValue = NO_DEFAULT_VALUE,
                        OptionHandler::ARG_TYPE argType = OptionHandler::REQ_ARG,
@@ -65,7 +65,7 @@ private:
   int32_t min_;
   int32_t max_;
 public:
-  IntegerRangeOptionHandler(const Pref* pref,
+  IntegerRangeOptionHandler(PrefPtr pref,
                             const char* description,
                             const std::string& defaultValue,
                             int32_t min, int32_t max,
@@ -81,7 +81,7 @@ private:
   int64_t min_;
   int64_t max_;
 public:
-  NumberOptionHandler(const Pref* pref,
+  NumberOptionHandler(PrefPtr pref,
                       const char* description = NO_DESCRIPTION,
                       const std::string& defaultValue = NO_DEFAULT_VALUE,
                       int64_t min = -1,
@@ -97,7 +97,7 @@ public:
 
 class UnitNumberOptionHandler : public NumberOptionHandler {
 public:
-  UnitNumberOptionHandler(const Pref* pref,
+  UnitNumberOptionHandler(PrefPtr pref,
                           const char* description = NO_DESCRIPTION,
                           const std::string& defaultValue = NO_DEFAULT_VALUE,
                           int64_t min = -1,
@@ -113,7 +113,7 @@ private:
   double min_;
   double max_;
 public:
-  FloatNumberOptionHandler(const Pref* pref,
+  FloatNumberOptionHandler(PrefPtr pref,
                            const char* description = NO_DESCRIPTION,
                            const std::string& defaultValue = NO_DEFAULT_VALUE,
                            double min = -1, double max = -1,
@@ -128,7 +128,7 @@ class DefaultOptionHandler : public AbstractOptionHandler {
 private:
   std::string possibleValuesString_;
 public:
-  DefaultOptionHandler(const Pref* pref,
+  DefaultOptionHandler(PrefPtr pref,
                        const char* description = NO_DESCRIPTION,
                        const std::string& defaultValue = NO_DEFAULT_VALUE,
                        const std::string& possibleValuesString = A2STR::NIL,
@@ -145,7 +145,7 @@ private:
   std::string delim_;
   std::string possibleValuesString_;
 public:
-  CumulativeOptionHandler(const Pref* pref,
+  CumulativeOptionHandler(PrefPtr pref,
                           const char* description,
                           const std::string& defaultValue,
                           const std::string& delim,
@@ -161,7 +161,7 @@ public:
 
 class IndexOutOptionHandler : public AbstractOptionHandler {
 public:
-  IndexOutOptionHandler(const Pref* pref,
+  IndexOutOptionHandler(PrefPtr pref,
                         const char* description,
                         char shortName = 0);
   virtual ~IndexOutOptionHandler();
@@ -173,7 +173,7 @@ public:
 #ifdef ENABLE_MESSAGE_DIGEST
 class ChecksumOptionHandler : public AbstractOptionHandler {
 public:
-  ChecksumOptionHandler(const Pref* pref,
+  ChecksumOptionHandler(PrefPtr pref,
                         const char* description,
                         char shortName = 0);
   virtual ~ChecksumOptionHandler();
@@ -187,7 +187,7 @@ class ParameterOptionHandler : public AbstractOptionHandler {
 private:
   std::vector<std::string> validParamValues_;
 public:
-  ParameterOptionHandler(const Pref* pref,
+  ParameterOptionHandler(PrefPtr pref,
                          const char* description,
                          const std::string& defaultValue,
                          std::vector<std::string> validParamValues,
@@ -200,14 +200,14 @@ public:
 
 class HostPortOptionHandler : public AbstractOptionHandler {
 private:
-  const Pref* hostOptionName_;
-  const Pref* portOptionName_;
+  PrefPtr hostOptionName_;
+  PrefPtr portOptionName_;
 public:
-  HostPortOptionHandler(const Pref* pref,
+  HostPortOptionHandler(PrefPtr pref,
                         const char* description,
                         const std::string& defaultValue,
-                        const Pref* hostOptionName,
-                        const Pref* portOptionName,
+                        PrefPtr hostOptionName,
+                        PrefPtr portOptionName,
                         char shortName = 0);
   virtual ~HostPortOptionHandler();
   virtual void parseArg(Option& option, const std::string& optarg) const
@@ -219,10 +219,10 @@ public:
 
 class HttpProxyOptionHandler : public AbstractOptionHandler {
 private:
-  const Pref* proxyUserPref_;
-  const Pref* proxyPasswdPref_;
+  PrefPtr proxyUserPref_;
+  PrefPtr proxyPasswdPref_;
 public:
-  HttpProxyOptionHandler(const Pref* pref,
+  HttpProxyOptionHandler(PrefPtr pref,
                          const char* description,
                          const std::string& defaultValue,
                          char shortName = 0);
@@ -237,7 +237,7 @@ private:
   bool acceptStdin_;
 public:
   LocalFilePathOptionHandler
-  (const Pref* pref,
+  (PrefPtr pref,
    const char* description = NO_DESCRIPTION,
    const std::string& defaultValue = NO_DEFAULT_VALUE,
    bool acceptStdin = false,
@@ -250,7 +250,7 @@ public:
 class PrioritizePieceOptionHandler:public AbstractOptionHandler {
 public:
   PrioritizePieceOptionHandler
-  (const Pref* pref,
+  (PrefPtr pref,
    const char* description = NO_DESCRIPTION,
    const std::string& defaultValue = NO_DEFAULT_VALUE,
    char shortName = 0);
@@ -284,7 +284,7 @@ public:
   virtual const std::string& getDefaultValue() const CXX11_OVERRIDE;
   virtual bool isHidden() const CXX11_OVERRIDE;
   virtual void hide() CXX11_OVERRIDE;
-  virtual const Pref* getPref() const CXX11_OVERRIDE;
+  virtual PrefPtr getPref() const CXX11_OVERRIDE;
   virtual ARG_TYPE getArgType() const CXX11_OVERRIDE;
   virtual char getShortName() const CXX11_OVERRIDE;
   virtual bool getEraseAfterParse() const CXX11_OVERRIDE;

+ 4 - 4
src/OptionParser.cc

@@ -186,7 +186,7 @@ void OptionParser::parseArg
       // option is ambiguous.
       int ambiguous = 0;
       for(int i = 1, len = option::countOption(); i < len; ++i) {
-        const Pref* pref = option::i2p(i);
+        PrefPtr pref = option::i2p(i);
         const OptionHandler* h = find(pref);
         if(h && !h->isHidden()) {
           if(strcmp(pref->k, optstr) == 0) {
@@ -234,7 +234,7 @@ void OptionParser::parse(Option& option, std::istream& is) const
     if(nv.first.first == nv.first.second) {
       continue;
     }
-    const Pref* pref =
+    PrefPtr pref =
       option::k2p(std::string(nv.first.first, nv.first.second));
     const OptionHandler* handler = find(pref);
     if(handler) {
@@ -249,7 +249,7 @@ void OptionParser::parse(Option& option, const KeyVals& options) const
 {
   for(KeyVals::const_iterator i = options.begin(), eoi = options.end();
       i != eoi; ++i) {
-    const Pref* pref = option::k2p((*i).first);
+    PrefPtr pref = option::k2p((*i).first);
     const OptionHandler* handler = find(pref);
     if(handler) {
       handler->parse(option, (*i).second);
@@ -325,7 +325,7 @@ std::vector<const OptionHandler*> OptionParser::findAll() const
   return result;
 }
 
-const OptionHandler* OptionParser::find(const Pref* pref) const
+const OptionHandler* OptionParser::find(PrefPtr pref) const
 {
   return findById(pref->i);
 }

+ 2 - 1
src/OptionParser.h

@@ -49,6 +49,7 @@ namespace aria2 {
 class Option;
 class OptionHandler;
 struct Pref;
+typedef const Pref* PrefPtr;
 
 class OptionParser {
 private:
@@ -88,7 +89,7 @@ public:
   std::vector<const OptionHandler*> findAll() const;
 
   // Hidden options are not returned.
-  const OptionHandler* find(const Pref* pref) const;
+  const OptionHandler* find(PrefPtr pref) const;
 
   // Hidden options are not returned.
   const OptionHandler* findById(size_t id) const;

+ 1 - 1
src/RpcMethod.cc

@@ -89,7 +89,7 @@ void gatherOption
 {
   for(; first != last; ++first) {
     const std::string& optionName = (*first).first;
-    const Pref* pref = option::k2p(optionName);
+    PrefPtr pref = option::k2p(optionName);
     const OptionHandler* handler = optionParser->find(pref);
     if(!handler || !pred(handler)) {
       // Just ignore the unacceptable options in this context.

+ 2 - 2
src/RpcMethodImpl.cc

@@ -1133,7 +1133,7 @@ void pushRequestOption
  const std::shared_ptr<OptionParser>& oparser)
 {
   for(size_t i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     const OptionHandler* h = oparser->find(pref);
     if(h && h->getInitialOption() && option->defined(pref)) {
       dict->put(pref->k, option->get(pref));
@@ -1168,7 +1168,7 @@ std::unique_ptr<ValueBase> GetGlobalOptionRpcMethod::process
 {
   auto result = Dict::g();
   for(size_t i = 0, len = e->getOption()->getTable().size(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     if(!e->getOption()->defined(pref)) {
       continue;
     }

+ 2 - 2
src/SessionSerializer.cc

@@ -95,7 +95,7 @@ bool SessionSerializer::save(const std::string& filename) const
 namespace {
 // Write 1 line of option name/value pair. This function returns true
 // if it succeeds, or false.
-bool writeOptionLine(IOFile& fp, const Pref* pref,
+bool writeOptionLine(IOFile& fp, PrefPtr pref,
                      const std::string& val)
 {
   size_t prefLen = strlen(pref->k);
@@ -112,7 +112,7 @@ bool writeOption(IOFile& fp, const std::shared_ptr<Option>& op)
 {
   const std::shared_ptr<OptionParser>& oparser = OptionParser::getInstance();
   for(size_t i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     const OptionHandler* h = oparser->find(pref);
     if(h && h->getInitialOption() && op->definedLocal(pref)) {
       if(h->getCumulative()) {

+ 5 - 5
src/aria2api.cc

@@ -197,7 +197,7 @@ void apiGatherOption
 {
   for(; first != last; ++first) {
     const std::string& optionName = (*first).first;
-    const Pref* pref = option::k2p(optionName);
+    PrefPtr pref = option::k2p(optionName);
     const OptionHandler* handler = optionParser->find(pref);
     if(!handler || !pred(handler)) {
       // Just ignore the unacceptable options in this context.
@@ -465,7 +465,7 @@ int changeOption(Session* session, A2Gid gid, const KeyVals& options)
 const std::string& getGlobalOption(Session* session, const std::string& name)
 {
   auto& e = session->context->reqinfo->getDownloadEngine();
-  const Pref* pref = option::k2p(name);
+  PrefPtr pref = option::k2p(name);
   if(OptionParser::getInstance()->find(pref)) {
     return e->getOption()->get(pref);
   } else {
@@ -480,7 +480,7 @@ KeyVals getGlobalOptions(Session* session)
   const Option* option = e->getOption();
   KeyVals options;
   for(size_t i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     if(option->defined(pref) && optionParser->find(pref)) {
       options.push_back(KeyVals::value_type(pref->k, option->get(pref)));
     }
@@ -632,7 +632,7 @@ void pushRequestOption
  const std::shared_ptr<OptionParser>& oparser)
 {
   for(size_t i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     const OptionHandler* h = oparser->find(pref);
     if(h && h->getInitialOption() && option->defined(pref)) {
       out++ = KeyVals::value_type(pref->k, option->get(pref));
@@ -645,7 +645,7 @@ namespace {
 const std::string& getRequestOption(const std::shared_ptr<Option>& option,
                                     const std::string& name)
 {
-  const Pref* pref = option::k2p(name);
+  PrefPtr pref = option::k2p(name);
   if(OptionParser::getInstance()->find(pref)) {
     return option->get(pref);
   } else {

+ 4 - 4
src/option_processing.cc

@@ -75,7 +75,7 @@ namespace {
 void overrideWithEnv
 (Option& op,
  const std::shared_ptr<OptionParser>& optionParser,
- const Pref* pref,
+ PrefPtr pref,
  const std::string& envName)
 {
   char* value = getenv(envName.c_str());
@@ -139,9 +139,9 @@ void showCandidates
     return;
   }
   int optstrlen = strlen(optstr);
-  std::vector<std::pair<int, const Pref*> > cands;
+  std::vector<std::pair<int, PrefPtr> > cands;
   for(int i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     const OptionHandler* h = parser->find(pref);
     if(!h || h->isHidden()) {
       continue;
@@ -181,7 +181,7 @@ namespace {
 void optionNativeToUtf8(Option& op)
 {
   for(size_t i = 1, len = option::countOption(); i < len; ++i) {
-    const Pref* pref = option::i2p(i);
+    PrefPtr pref = option::i2p(i);
     if(op.definedLocal(pref) && !util::isUtf8(op.get(pref))) {
       op.put(pref, nativeToUtf8(op.get(pref)));
     }

+ 200 - 199
src/prefs.cc

@@ -74,28 +74,29 @@ public:
   {
     return count_;
   }
-  const Pref* i2p(size_t id) const
+  PrefPtr i2p(size_t id) const
   {
     assert(id < count_);
     return i2p_[id];
   }
-  const Pref* k2p(const std::string& k) const
+  PrefPtr k2p(const std::string& k) const
   {
     auto i = k2p_.find(k);
     if(i == k2p_.end()) {
       return i2p_[0];
-    } else {
-      return (*i).second;
     }
+    return (*i).second;
   }
+
 private:
   size_t count_;
-  std::vector<const Pref*> i2p_;
-  std::map<std::string, const Pref*> k2p_;
+  std::vector<PrefPtr> i2p_;
+  std::map<std::string, PrefPtr> k2p_;
 };
 
 PrefFactory* getPrefFactory()
 {
+  // singleton.
   static auto pf = new PrefFactory();
   return pf;
 }
@@ -114,12 +115,12 @@ size_t countOption()
   return getPrefFactory()->getCount();
 }
 
-const Pref* i2p(size_t id)
+PrefPtr i2p(size_t id)
 {
   return getPrefFactory()->i2p(id);
 }
 
-const Pref* k2p(const std::string& key)
+PrefPtr k2p(const std::string& key)
 {
   return getPrefFactory()->k2p(key);
 }
@@ -169,389 +170,389 @@ const std::string V_HTTP("http");
 const std::string V_HTTPS("https");
 const std::string V_FTP("ftp");
 
-const Pref* PREF_VERSION = makePref("version");
-const Pref* PREF_HELP = makePref("help");
+PrefPtr PREF_VERSION = makePref("version");
+PrefPtr PREF_HELP = makePref("help");
 
 /**
  * General preferences
  */
 // values: 1*digit
-const Pref* PREF_TIMEOUT = makePref("timeout");
+PrefPtr PREF_TIMEOUT = makePref("timeout");
 // values: 1*digit
-const Pref* PREF_DNS_TIMEOUT = makePref("dns-timeout");
+PrefPtr PREF_DNS_TIMEOUT = makePref("dns-timeout");
 // values: 1*digit
-const Pref* PREF_CONNECT_TIMEOUT = makePref("connect-timeout");
+PrefPtr PREF_CONNECT_TIMEOUT = makePref("connect-timeout");
 // values: 1*digit
-const Pref* PREF_MAX_TRIES = makePref("max-tries");
+PrefPtr PREF_MAX_TRIES = makePref("max-tries");
 // values: 1*digit
-const Pref* PREF_AUTO_SAVE_INTERVAL = makePref("auto-save-interval");
+PrefPtr PREF_AUTO_SAVE_INTERVAL = makePref("auto-save-interval");
 // values: a string that your file system recognizes as a file name.
-const Pref* PREF_LOG = makePref("log");
+PrefPtr PREF_LOG = makePref("log");
 // values: a string that your file system recognizes as a directory.
-const Pref* PREF_DIR = makePref("dir");
+PrefPtr PREF_DIR = makePref("dir");
 // values: a string that your file system recognizes as a file name.
-const Pref* PREF_OUT = makePref("out");
+PrefPtr PREF_OUT = makePref("out");
 // values: 1*digit
-const Pref* PREF_SPLIT = makePref("split");
+PrefPtr PREF_SPLIT = makePref("split");
 // value: true | false
-const Pref* PREF_DAEMON = makePref("daemon");
+PrefPtr PREF_DAEMON = makePref("daemon");
 // value: a string
-const Pref* PREF_REFERER = makePref("referer");
+PrefPtr PREF_REFERER = makePref("referer");
 // value: 1*digit
-const Pref* PREF_LOWEST_SPEED_LIMIT = makePref("lowest-speed-limit");
+PrefPtr PREF_LOWEST_SPEED_LIMIT = makePref("lowest-speed-limit");
 // value: 1*digit
-const Pref* PREF_PIECE_LENGTH = makePref("piece-length");
+PrefPtr PREF_PIECE_LENGTH = makePref("piece-length");
 // value: 1*digit
-const Pref* PREF_MAX_OVERALL_DOWNLOAD_LIMIT = makePref("max-overall-download-limit");
+PrefPtr PREF_MAX_OVERALL_DOWNLOAD_LIMIT = makePref("max-overall-download-limit");
 // value: 1*digit
-const Pref* PREF_MAX_DOWNLOAD_LIMIT = makePref("max-download-limit");
+PrefPtr PREF_MAX_DOWNLOAD_LIMIT = makePref("max-download-limit");
 // value: 1*digit
-const Pref* PREF_STARTUP_IDLE_TIME = makePref("startup-idle-time");
+PrefPtr PREF_STARTUP_IDLE_TIME = makePref("startup-idle-time");
 // value: prealloc | fallc | none
-const Pref* PREF_FILE_ALLOCATION = makePref("file-allocation");
+PrefPtr PREF_FILE_ALLOCATION = makePref("file-allocation");
 // value: 1*digit
-const Pref* PREF_NO_FILE_ALLOCATION_LIMIT = makePref("no-file-allocation-limit");
+PrefPtr PREF_NO_FILE_ALLOCATION_LIMIT = makePref("no-file-allocation-limit");
 // value: true | false
-const Pref* PREF_ALLOW_OVERWRITE = makePref("allow-overwrite");
+PrefPtr PREF_ALLOW_OVERWRITE = makePref("allow-overwrite");
 // value: true | false
-const Pref* PREF_REALTIME_CHUNK_CHECKSUM = makePref("realtime-chunk-checksum");
+PrefPtr PREF_REALTIME_CHUNK_CHECKSUM = makePref("realtime-chunk-checksum");
 // value: true | false
-const Pref* PREF_CHECK_INTEGRITY = makePref("check-integrity");
+PrefPtr PREF_CHECK_INTEGRITY = makePref("check-integrity");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_NETRC_PATH = makePref("netrc-path");
+PrefPtr PREF_NETRC_PATH = makePref("netrc-path");
 // value:
-const Pref* PREF_CONTINUE = makePref("continue");
+PrefPtr PREF_CONTINUE = makePref("continue");
 // value:
-const Pref* PREF_NO_NETRC = makePref("no-netrc");
+PrefPtr PREF_NO_NETRC = makePref("no-netrc");
 // value: 1*digit
-const Pref* PREF_MAX_DOWNLOADS = makePref("max-downloads");
+PrefPtr PREF_MAX_DOWNLOADS = makePref("max-downloads");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_INPUT_FILE = makePref("input-file");
+PrefPtr PREF_INPUT_FILE = makePref("input-file");
 // value: true | false
-const Pref* PREF_DEFERRED_INPUT = makePref("deferred-input");
+PrefPtr PREF_DEFERRED_INPUT = makePref("deferred-input");
 // value: 1*digit
-const Pref* PREF_MAX_CONCURRENT_DOWNLOADS = makePref("max-concurrent-downloads");
+PrefPtr PREF_MAX_CONCURRENT_DOWNLOADS = makePref("max-concurrent-downloads");
 // value: true | false
-const Pref* PREF_FORCE_SEQUENTIAL = makePref("force-sequential");
+PrefPtr PREF_FORCE_SEQUENTIAL = makePref("force-sequential");
 // value: true | false
-const Pref* PREF_AUTO_FILE_RENAMING = makePref("auto-file-renaming");
+PrefPtr PREF_AUTO_FILE_RENAMING = makePref("auto-file-renaming");
 // value: true | false
-const Pref* PREF_PARAMETERIZED_URI = makePref("parameterized-uri");
+PrefPtr PREF_PARAMETERIZED_URI = makePref("parameterized-uri");
 // value: true | false
-const Pref* PREF_ALLOW_PIECE_LENGTH_CHANGE = makePref("allow-piece-length-change");
+PrefPtr PREF_ALLOW_PIECE_LENGTH_CHANGE = makePref("allow-piece-length-change");
 // value: true | false
-const Pref* PREF_NO_CONF = makePref("no-conf");
+PrefPtr PREF_NO_CONF = makePref("no-conf");
 // value: string
-const Pref* PREF_CONF_PATH = makePref("conf-path");
+PrefPtr PREF_CONF_PATH = makePref("conf-path");
 // value: 1*digit
-const Pref* PREF_STOP = makePref("stop");
+PrefPtr PREF_STOP = makePref("stop");
 // value: true | false
-const Pref* PREF_QUIET = makePref("quiet");
+PrefPtr PREF_QUIET = makePref("quiet");
 // value: true | false
-const Pref* PREF_ASYNC_DNS = makePref("async-dns");
+PrefPtr PREF_ASYNC_DNS = makePref("async-dns");
 // value: 1*digit
-const Pref* PREF_SUMMARY_INTERVAL = makePref("summary-interval");
+PrefPtr PREF_SUMMARY_INTERVAL = makePref("summary-interval");
 // value: debug, info, notice, warn, error
-const Pref* PREF_LOG_LEVEL = makePref("log-level");
+PrefPtr PREF_LOG_LEVEL = makePref("log-level");
 // value: debug, info, notice, warn, error
-const Pref* PREF_CONSOLE_LOG_LEVEL = makePref("console-log-level");
+PrefPtr PREF_CONSOLE_LOG_LEVEL = makePref("console-log-level");
 // value: inorder | feedback | adaptive
-const Pref* PREF_URI_SELECTOR = makePref("uri-selector");
+PrefPtr PREF_URI_SELECTOR = makePref("uri-selector");
 // value: 1*digit
-const Pref* PREF_SERVER_STAT_TIMEOUT = makePref("server-stat-timeout");
+PrefPtr PREF_SERVER_STAT_TIMEOUT = makePref("server-stat-timeout");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_SERVER_STAT_IF = makePref("server-stat-if");
+PrefPtr PREF_SERVER_STAT_IF = makePref("server-stat-if");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_SERVER_STAT_OF = makePref("server-stat-of");
+PrefPtr PREF_SERVER_STAT_OF = makePref("server-stat-of");
 // value: true | false
-const Pref* PREF_REMOTE_TIME = makePref("remote-time");
+PrefPtr PREF_REMOTE_TIME = makePref("remote-time");
 // value: 1*digit
-const Pref* PREF_MAX_FILE_NOT_FOUND = makePref("max-file-not-found");
+PrefPtr PREF_MAX_FILE_NOT_FOUND = makePref("max-file-not-found");
 // value: epoll | select
-const Pref* PREF_EVENT_POLL = makePref("event-poll");
+PrefPtr PREF_EVENT_POLL = makePref("event-poll");
 // value: true | false
-const Pref* PREF_ENABLE_RPC = makePref("enable-rpc");
+PrefPtr PREF_ENABLE_RPC = makePref("enable-rpc");
 // value: 1*digit
-const Pref* PREF_RPC_LISTEN_PORT = makePref("rpc-listen-port");
+PrefPtr PREF_RPC_LISTEN_PORT = makePref("rpc-listen-port");
 // value: string
-const Pref* PREF_RPC_USER = makePref("rpc-user");
+PrefPtr PREF_RPC_USER = makePref("rpc-user");
 // value: string
-const Pref* PREF_RPC_PASSWD = makePref("rpc-passwd");
+PrefPtr PREF_RPC_PASSWD = makePref("rpc-passwd");
 // value: 1*digit
-const Pref* PREF_RPC_MAX_REQUEST_SIZE = makePref("rpc-max-request-size");
+PrefPtr PREF_RPC_MAX_REQUEST_SIZE = makePref("rpc-max-request-size");
 // value: true | false
-const Pref* PREF_RPC_LISTEN_ALL = makePref("rpc-listen-all");
+PrefPtr PREF_RPC_LISTEN_ALL = makePref("rpc-listen-all");
 // value: true | false
-const Pref* PREF_RPC_ALLOW_ORIGIN_ALL = makePref("rpc-allow-origin-all");
+PrefPtr PREF_RPC_ALLOW_ORIGIN_ALL = makePref("rpc-allow-origin-all");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_RPC_CERTIFICATE = makePref("rpc-certificate");
+PrefPtr PREF_RPC_CERTIFICATE = makePref("rpc-certificate");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_RPC_PRIVATE_KEY = makePref("rpc-private-key");
+PrefPtr PREF_RPC_PRIVATE_KEY = makePref("rpc-private-key");
 // value: true | false
-const Pref* PREF_RPC_SECURE = makePref("rpc-secure");
+PrefPtr PREF_RPC_SECURE = makePref("rpc-secure");
 // value: true | false
-const Pref* PREF_RPC_SAVE_UPLOAD_METADATA = makePref("rpc-save-upload-metadata");
+PrefPtr PREF_RPC_SAVE_UPLOAD_METADATA = makePref("rpc-save-upload-metadata");
 // value: true | false
-const Pref* PREF_DRY_RUN = makePref("dry-run");
+PrefPtr PREF_DRY_RUN = makePref("dry-run");
 // value: true | false
-const Pref* PREF_REUSE_URI = makePref("reuse-uri");
+PrefPtr PREF_REUSE_URI = makePref("reuse-uri");
 // value: string
-const Pref* PREF_ON_DOWNLOAD_START = makePref("on-download-start");
-const Pref* PREF_ON_DOWNLOAD_PAUSE = makePref("on-download-pause");
-const Pref* PREF_ON_DOWNLOAD_STOP = makePref("on-download-stop");
-const Pref* PREF_ON_DOWNLOAD_COMPLETE = makePref("on-download-complete");
-const Pref* PREF_ON_DOWNLOAD_ERROR = makePref("on-download-error");
+PrefPtr PREF_ON_DOWNLOAD_START = makePref("on-download-start");
+PrefPtr PREF_ON_DOWNLOAD_PAUSE = makePref("on-download-pause");
+PrefPtr PREF_ON_DOWNLOAD_STOP = makePref("on-download-stop");
+PrefPtr PREF_ON_DOWNLOAD_COMPLETE = makePref("on-download-complete");
+PrefPtr PREF_ON_DOWNLOAD_ERROR = makePref("on-download-error");
 // value: string
-const Pref* PREF_INTERFACE = makePref("interface");
+PrefPtr PREF_INTERFACE = makePref("interface");
 // value: true | false
-const Pref* PREF_DISABLE_IPV6 = makePref("disable-ipv6");
+PrefPtr PREF_DISABLE_IPV6 = makePref("disable-ipv6");
 // value: true | false
-const Pref* PREF_HUMAN_READABLE = makePref("human-readable");
+PrefPtr PREF_HUMAN_READABLE = makePref("human-readable");
 // value: true | false
-const Pref* PREF_REMOVE_CONTROL_FILE = makePref("remove-control-file");
+PrefPtr PREF_REMOVE_CONTROL_FILE = makePref("remove-control-file");
 // value: true | false
-const Pref* PREF_ALWAYS_RESUME = makePref("always-resume");
+PrefPtr PREF_ALWAYS_RESUME = makePref("always-resume");
 // value: 1*digit
-const Pref* PREF_MAX_RESUME_FAILURE_TRIES = makePref("max-resume-failure-tries");
+PrefPtr PREF_MAX_RESUME_FAILURE_TRIES = makePref("max-resume-failure-tries");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_SAVE_SESSION = makePref("save-session");
+PrefPtr PREF_SAVE_SESSION = makePref("save-session");
 // value: 1*digit
-const Pref* PREF_MAX_CONNECTION_PER_SERVER = makePref("max-connection-per-server");
+PrefPtr PREF_MAX_CONNECTION_PER_SERVER = makePref("max-connection-per-server");
 // value: 1*digit
-const Pref* PREF_MIN_SPLIT_SIZE = makePref("min-split-size");
+PrefPtr PREF_MIN_SPLIT_SIZE = makePref("min-split-size");
 // value: true | false
-const Pref* PREF_CONDITIONAL_GET = makePref("conditional-get");
+PrefPtr PREF_CONDITIONAL_GET = makePref("conditional-get");
 // value: true | false
-const Pref* PREF_SELECT_LEAST_USED_HOST = makePref("select-least-used-host");
+PrefPtr PREF_SELECT_LEAST_USED_HOST = makePref("select-least-used-host");
 // value: true | false
-const Pref* PREF_ENABLE_ASYNC_DNS6 = makePref("enable-async-dns6");
+PrefPtr PREF_ENABLE_ASYNC_DNS6 = makePref("enable-async-dns6");
 // value: 1*digit
-const Pref* PREF_MAX_DOWNLOAD_RESULT = makePref("max-download-result");
+PrefPtr PREF_MAX_DOWNLOAD_RESULT = makePref("max-download-result");
 // value: 1*digit
-const Pref* PREF_RETRY_WAIT = makePref("retry-wait");
+PrefPtr PREF_RETRY_WAIT = makePref("retry-wait");
 // value: string
-const Pref* PREF_ASYNC_DNS_SERVER = makePref("async-dns-server");
+PrefPtr PREF_ASYNC_DNS_SERVER = makePref("async-dns-server");
 // value: true | false
-const Pref* PREF_SHOW_CONSOLE_READOUT = makePref("show-console-readout");
+PrefPtr PREF_SHOW_CONSOLE_READOUT = makePref("show-console-readout");
 // value: default | inorder
-const Pref* PREF_STREAM_PIECE_SELECTOR = makePref("stream-piece-selector");
+PrefPtr PREF_STREAM_PIECE_SELECTOR = makePref("stream-piece-selector");
 // value: true | false
-const Pref* PREF_TRUNCATE_CONSOLE_READOUT = makePref("truncate-console-readout");
+PrefPtr PREF_TRUNCATE_CONSOLE_READOUT = makePref("truncate-console-readout");
 // value: true | false
-const Pref* PREF_PAUSE = makePref("pause");
+PrefPtr PREF_PAUSE = makePref("pause");
 // value: default | full
-const Pref* PREF_DOWNLOAD_RESULT = makePref("download-result");
+PrefPtr PREF_DOWNLOAD_RESULT = makePref("download-result");
 // value: true | false
-const Pref* PREF_HASH_CHECK_ONLY = makePref("hash-check-only");
+PrefPtr PREF_HASH_CHECK_ONLY = makePref("hash-check-only");
 // values: hashType=digest
-const Pref* PREF_CHECKSUM = makePref("checksum");
+PrefPtr PREF_CHECKSUM = makePref("checksum");
 // value: pid
-const Pref* PREF_STOP_WITH_PROCESS = makePref("stop-with-process");
+PrefPtr PREF_STOP_WITH_PROCESS = makePref("stop-with-process");
 // value: true | false
-const Pref* PREF_ENABLE_MMAP = makePref("enable-mmap");
+PrefPtr PREF_ENABLE_MMAP = makePref("enable-mmap");
 // value: true | false
-const Pref* PREF_FORCE_SAVE = makePref("force-save");
+PrefPtr PREF_FORCE_SAVE = makePref("force-save");
 // value: 1*digit
-const Pref* PREF_DISK_CACHE = makePref("disk-cache");
+PrefPtr PREF_DISK_CACHE = makePref("disk-cache");
 // value: string
-const Pref* PREF_GID = makePref("gid");
+PrefPtr PREF_GID = makePref("gid");
 // values: 1*digit
-const Pref* PREF_SAVE_SESSION_INTERVAL = makePref("save-session-interval");
+PrefPtr PREF_SAVE_SESSION_INTERVAL = makePref("save-session-interval");
 
 /**
  * FTP related preferences
  */
-const Pref* PREF_FTP_USER = makePref("ftp-user");
-const Pref* PREF_FTP_PASSWD = makePref("ftp-passwd");
+PrefPtr PREF_FTP_USER = makePref("ftp-user");
+PrefPtr PREF_FTP_PASSWD = makePref("ftp-passwd");
 // values: binary | ascii
-const Pref* PREF_FTP_TYPE = makePref("ftp-type");
+PrefPtr PREF_FTP_TYPE = makePref("ftp-type");
 // values: true | false
-const Pref* PREF_FTP_PASV = makePref("ftp-pasv");
+PrefPtr PREF_FTP_PASV = makePref("ftp-pasv");
 // values: true | false
-const Pref* PREF_FTP_REUSE_CONNECTION = makePref("ftp-reuse-connection");
+PrefPtr PREF_FTP_REUSE_CONNECTION = makePref("ftp-reuse-connection");
 
 /**
  * HTTP related preferences
  */
-const Pref* PREF_HTTP_USER = makePref("http-user");
-const Pref* PREF_HTTP_PASSWD = makePref("http-passwd");
+PrefPtr PREF_HTTP_USER = makePref("http-user");
+PrefPtr PREF_HTTP_PASSWD = makePref("http-passwd");
 // values: string
-const Pref* PREF_USER_AGENT = makePref("user-agent");
+PrefPtr PREF_USER_AGENT = makePref("user-agent");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_LOAD_COOKIES = makePref("load-cookies");
+PrefPtr PREF_LOAD_COOKIES = makePref("load-cookies");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_SAVE_COOKIES = makePref("save-cookies");
+PrefPtr PREF_SAVE_COOKIES = makePref("save-cookies");
 // values: true | false
-const Pref* PREF_ENABLE_HTTP_KEEP_ALIVE = makePref("enable-http-keep-alive");
+PrefPtr PREF_ENABLE_HTTP_KEEP_ALIVE = makePref("enable-http-keep-alive");
 // values: true | false
-const Pref* PREF_ENABLE_HTTP_PIPELINING = makePref("enable-http-pipelining");
+PrefPtr PREF_ENABLE_HTTP_PIPELINING = makePref("enable-http-pipelining");
 // value: 1*digit
-const Pref* PREF_MAX_HTTP_PIPELINING = makePref("max-http-pipelining");
+PrefPtr PREF_MAX_HTTP_PIPELINING = makePref("max-http-pipelining");
 // value: string
-const Pref* PREF_HEADER = makePref("header");
+PrefPtr PREF_HEADER = makePref("header");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_CERTIFICATE = makePref("certificate");
+PrefPtr PREF_CERTIFICATE = makePref("certificate");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_PRIVATE_KEY = makePref("private-key");
+PrefPtr PREF_PRIVATE_KEY = makePref("private-key");
 // value: string that your file system recognizes as a file name.
-const Pref* PREF_CA_CERTIFICATE = makePref("ca-certificate");
+PrefPtr PREF_CA_CERTIFICATE = makePref("ca-certificate");
 // value: true | false
-const Pref* PREF_CHECK_CERTIFICATE = makePref("check-certificate");
+PrefPtr PREF_CHECK_CERTIFICATE = makePref("check-certificate");
 // value: true | false
-const Pref* PREF_USE_HEAD = makePref("use-head");
+PrefPtr PREF_USE_HEAD = makePref("use-head");
 // value: true | false
-const Pref* PREF_HTTP_AUTH_CHALLENGE = makePref("http-auth-challenge");
+PrefPtr PREF_HTTP_AUTH_CHALLENGE = makePref("http-auth-challenge");
 // value: true | false
-const Pref* PREF_HTTP_NO_CACHE = makePref("http-no-cache");
+PrefPtr PREF_HTTP_NO_CACHE = makePref("http-no-cache");
 // value: true | false
-const Pref* PREF_HTTP_ACCEPT_GZIP = makePref("http-accept-gzip");
+PrefPtr PREF_HTTP_ACCEPT_GZIP = makePref("http-accept-gzip");
 
 /**
  * Proxy related preferences
  */
-const Pref* PREF_HTTP_PROXY = makePref("http-proxy");
-const Pref* PREF_HTTPS_PROXY = makePref("https-proxy");
-const Pref* PREF_FTP_PROXY = makePref("ftp-proxy");
-const Pref* PREF_ALL_PROXY = makePref("all-proxy");
+PrefPtr PREF_HTTP_PROXY = makePref("http-proxy");
+PrefPtr PREF_HTTPS_PROXY = makePref("https-proxy");
+PrefPtr PREF_FTP_PROXY = makePref("ftp-proxy");
+PrefPtr PREF_ALL_PROXY = makePref("all-proxy");
 // values: comma separeted hostname or domain
-const Pref* PREF_NO_PROXY = makePref("no-proxy");
+PrefPtr PREF_NO_PROXY = makePref("no-proxy");
 // values: get | tunnel
-const Pref* PREF_PROXY_METHOD = makePref("proxy-method");
-const Pref* PREF_HTTP_PROXY_USER = makePref("http-proxy-user");
-const Pref* PREF_HTTP_PROXY_PASSWD = makePref("http-proxy-passwd");
-const Pref* PREF_HTTPS_PROXY_USER = makePref("https-proxy-user");
-const Pref* PREF_HTTPS_PROXY_PASSWD = makePref("https-proxy-passwd");
-const Pref* PREF_FTP_PROXY_USER = makePref("ftp-proxy-user");
-const Pref* PREF_FTP_PROXY_PASSWD = makePref("ftp-proxy-passwd");
-const Pref* PREF_ALL_PROXY_USER = makePref("all-proxy-user");
-const Pref* PREF_ALL_PROXY_PASSWD = makePref("all-proxy-passwd");
+PrefPtr PREF_PROXY_METHOD = makePref("proxy-method");
+PrefPtr PREF_HTTP_PROXY_USER = makePref("http-proxy-user");
+PrefPtr PREF_HTTP_PROXY_PASSWD = makePref("http-proxy-passwd");
+PrefPtr PREF_HTTPS_PROXY_USER = makePref("https-proxy-user");
+PrefPtr PREF_HTTPS_PROXY_PASSWD = makePref("https-proxy-passwd");
+PrefPtr PREF_FTP_PROXY_USER = makePref("ftp-proxy-user");
+PrefPtr PREF_FTP_PROXY_PASSWD = makePref("ftp-proxy-passwd");
+PrefPtr PREF_ALL_PROXY_USER = makePref("all-proxy-user");
+PrefPtr PREF_ALL_PROXY_PASSWD = makePref("all-proxy-passwd");
 
 /**
  * BitTorrent related preferences
  */
 // values: 1*digit
-const Pref* PREF_PEER_CONNECTION_TIMEOUT = makePref("peer-connection-timeout");
+PrefPtr PREF_PEER_CONNECTION_TIMEOUT = makePref("peer-connection-timeout");
 // values: 1*digit
-const Pref* PREF_BT_TIMEOUT = makePref("bt-timeout");
+PrefPtr PREF_BT_TIMEOUT = makePref("bt-timeout");
 // values: 1*digit
-const Pref* PREF_BT_REQUEST_TIMEOUT = makePref("bt-request-timeout");
+PrefPtr PREF_BT_REQUEST_TIMEOUT = makePref("bt-request-timeout");
 // values: true | false
-const Pref* PREF_SHOW_FILES = makePref("show-files");
+PrefPtr PREF_SHOW_FILES = makePref("show-files");
 // values: 1*digit
-const Pref* PREF_MAX_OVERALL_UPLOAD_LIMIT = makePref("max-overall-upload-limit");
+PrefPtr PREF_MAX_OVERALL_UPLOAD_LIMIT = makePref("max-overall-upload-limit");
 // values: 1*digit
-const Pref* PREF_MAX_UPLOAD_LIMIT = makePref("max-upload-limit");
+PrefPtr PREF_MAX_UPLOAD_LIMIT = makePref("max-upload-limit");
 // values: a string that your file system recognizes as a file name.
-const Pref* PREF_TORRENT_FILE = makePref("torrent-file");
+PrefPtr PREF_TORRENT_FILE = makePref("torrent-file");
 // values: 1*digit
-const Pref* PREF_LISTEN_PORT = makePref("listen-port");
+PrefPtr PREF_LISTEN_PORT = makePref("listen-port");
 // values: true | false | mem
-const Pref* PREF_FOLLOW_TORRENT = makePref("follow-torrent");
+PrefPtr PREF_FOLLOW_TORRENT = makePref("follow-torrent");
 // values: 1*digit * = makePref(  = makePref(,|-) 1*digit);
-const Pref* PREF_SELECT_FILE = makePref("select-file");
+PrefPtr PREF_SELECT_FILE = makePref("select-file");
 // values: 1*digit
-const Pref* PREF_SEED_TIME = makePref("seed-time");
+PrefPtr PREF_SEED_TIME = makePref("seed-time");
 // values: 1*digit ['.' [ 1*digit ] ]
-const Pref* PREF_SEED_RATIO = makePref("seed-ratio");
+PrefPtr PREF_SEED_RATIO = makePref("seed-ratio");
 // values: 1*digit
-const Pref* PREF_BT_KEEP_ALIVE_INTERVAL = makePref("bt-keep-alive-interval");
+PrefPtr PREF_BT_KEEP_ALIVE_INTERVAL = makePref("bt-keep-alive-interval");
 // values: a string, less than or equals to 20 bytes length
-const Pref* PREF_PEER_ID_PREFIX = makePref("peer-id-prefix");
+PrefPtr PREF_PEER_ID_PREFIX = makePref("peer-id-prefix");
 // values: true | false
-const Pref* PREF_ENABLE_PEER_EXCHANGE = makePref("enable-peer-exchange");
+PrefPtr PREF_ENABLE_PEER_EXCHANGE = makePref("enable-peer-exchange");
 // values: true | false
-const Pref* PREF_ENABLE_DHT = makePref("enable-dht");
+PrefPtr PREF_ENABLE_DHT = makePref("enable-dht");
 // values: a string
-const Pref* PREF_DHT_LISTEN_ADDR = makePref("dht-listen-addr");
+PrefPtr PREF_DHT_LISTEN_ADDR = makePref("dht-listen-addr");
 // values: 1*digit
-const Pref* PREF_DHT_LISTEN_PORT = makePref("dht-listen-port");
+PrefPtr PREF_DHT_LISTEN_PORT = makePref("dht-listen-port");
 // values: a string
-const Pref* PREF_DHT_ENTRY_POINT_HOST = makePref("dht-entry-point-host");
+PrefPtr PREF_DHT_ENTRY_POINT_HOST = makePref("dht-entry-point-host");
 // values: 1*digit
-const Pref* PREF_DHT_ENTRY_POINT_PORT = makePref("dht-entry-point-port");
+PrefPtr PREF_DHT_ENTRY_POINT_PORT = makePref("dht-entry-point-port");
 // values: a string  = makePref(hostname:port);
-const Pref* PREF_DHT_ENTRY_POINT = makePref("dht-entry-point");
+PrefPtr PREF_DHT_ENTRY_POINT = makePref("dht-entry-point");
 // values: a string
-const Pref* PREF_DHT_FILE_PATH = makePref("dht-file-path");
+PrefPtr PREF_DHT_FILE_PATH = makePref("dht-file-path");
 // values: true | false
-const Pref* PREF_ENABLE_DHT6 = makePref("enable-dht6");
+PrefPtr PREF_ENABLE_DHT6 = makePref("enable-dht6");
 // values: a string
-const Pref* PREF_DHT_LISTEN_ADDR6 = makePref("dht-listen-addr6");
+PrefPtr PREF_DHT_LISTEN_ADDR6 = makePref("dht-listen-addr6");
 // values: a string
-const Pref* PREF_DHT_ENTRY_POINT_HOST6 = makePref("dht-entry-point-host6");
+PrefPtr PREF_DHT_ENTRY_POINT_HOST6 = makePref("dht-entry-point-host6");
 // values: 1*digit
-const Pref* PREF_DHT_ENTRY_POINT_PORT6 = makePref("dht-entry-point-port6");
+PrefPtr PREF_DHT_ENTRY_POINT_PORT6 = makePref("dht-entry-point-port6");
 // values: a string  = makePref(hostname:port)
-const Pref* PREF_DHT_ENTRY_POINT6 = makePref("dht-entry-point6");
+PrefPtr PREF_DHT_ENTRY_POINT6 = makePref("dht-entry-point6");
 // values: a string
-const Pref* PREF_DHT_FILE_PATH6 = makePref("dht-file-path6");
+PrefPtr PREF_DHT_FILE_PATH6 = makePref("dht-file-path6");
 // values: plain | arc4
-const Pref* PREF_BT_MIN_CRYPTO_LEVEL = makePref("bt-min-crypto-level");
+PrefPtr PREF_BT_MIN_CRYPTO_LEVEL = makePref("bt-min-crypto-level");
 // values:: true | false
-const Pref* PREF_BT_REQUIRE_CRYPTO = makePref("bt-require-crypto");
+PrefPtr PREF_BT_REQUIRE_CRYPTO = makePref("bt-require-crypto");
 // values: 1*digit
-const Pref* PREF_BT_REQUEST_PEER_SPEED_LIMIT = makePref("bt-request-peer-speed-limit");
+PrefPtr PREF_BT_REQUEST_PEER_SPEED_LIMIT = makePref("bt-request-peer-speed-limit");
 // values: 1*digit
-const Pref* PREF_BT_MAX_OPEN_FILES = makePref("bt-max-open-files");
+PrefPtr PREF_BT_MAX_OPEN_FILES = makePref("bt-max-open-files");
 // values: true | false
-const Pref* PREF_BT_SEED_UNVERIFIED = makePref("bt-seed-unverified");
+PrefPtr PREF_BT_SEED_UNVERIFIED = makePref("bt-seed-unverified");
 // values: true | false
-const Pref* PREF_BT_HASH_CHECK_SEED = makePref("bt-hash-check-seed");
+PrefPtr PREF_BT_HASH_CHECK_SEED = makePref("bt-hash-check-seed");
 // values: 1*digit
-const Pref* PREF_BT_MAX_PEERS = makePref("bt-max-peers");
+PrefPtr PREF_BT_MAX_PEERS = makePref("bt-max-peers");
 // values: a string  = makePref(IP address)
-const Pref* PREF_BT_EXTERNAL_IP = makePref("bt-external-ip");
+PrefPtr PREF_BT_EXTERNAL_IP = makePref("bt-external-ip");
 // values: 1*digit '=' a string that your file system recognizes as a file name.
-const Pref* PREF_INDEX_OUT = makePref("index-out");
+PrefPtr PREF_INDEX_OUT = makePref("index-out");
 // values: 1*digit
-const Pref* PREF_BT_TRACKER_INTERVAL = makePref("bt-tracker-interval");
+PrefPtr PREF_BT_TRACKER_INTERVAL = makePref("bt-tracker-interval");
 // values: 1*digit
-const Pref* PREF_BT_STOP_TIMEOUT = makePref("bt-stop-timeout");
+PrefPtr PREF_BT_STOP_TIMEOUT = makePref("bt-stop-timeout");
 // values: head[=SIZE]|tail[=SIZE], ...
-const Pref* PREF_BT_PRIORITIZE_PIECE = makePref("bt-prioritize-piece");
+PrefPtr PREF_BT_PRIORITIZE_PIECE = makePref("bt-prioritize-piece");
 // values: true | false
-const Pref* PREF_BT_SAVE_METADATA = makePref("bt-save-metadata");
+PrefPtr PREF_BT_SAVE_METADATA = makePref("bt-save-metadata");
 // values: true | false
-const Pref* PREF_BT_METADATA_ONLY = makePref("bt-metadata-only");
+PrefPtr PREF_BT_METADATA_ONLY = makePref("bt-metadata-only");
 // values: true | false
-const Pref* PREF_BT_ENABLE_LPD = makePref("bt-enable-lpd");
+PrefPtr PREF_BT_ENABLE_LPD = makePref("bt-enable-lpd");
 // values: string
-const Pref* PREF_BT_LPD_INTERFACE = makePref("bt-lpd-interface");
+PrefPtr PREF_BT_LPD_INTERFACE = makePref("bt-lpd-interface");
 // values: 1*digit
-const Pref* PREF_BT_TRACKER_TIMEOUT = makePref("bt-tracker-timeout");
+PrefPtr PREF_BT_TRACKER_TIMEOUT = makePref("bt-tracker-timeout");
 // values: 1*digit
-const Pref* PREF_BT_TRACKER_CONNECT_TIMEOUT = makePref("bt-tracker-connect-timeout");
+PrefPtr PREF_BT_TRACKER_CONNECT_TIMEOUT = makePref("bt-tracker-connect-timeout");
 // values: 1*digit
-const Pref* PREF_DHT_MESSAGE_TIMEOUT = makePref("dht-message-timeout");
+PrefPtr PREF_DHT_MESSAGE_TIMEOUT = makePref("dht-message-timeout");
 // values: string
-const Pref* PREF_ON_BT_DOWNLOAD_COMPLETE = makePref("on-bt-download-complete");
+PrefPtr PREF_ON_BT_DOWNLOAD_COMPLETE = makePref("on-bt-download-complete");
 // values: string
-const Pref* PREF_BT_TRACKER = makePref("bt-tracker");
+PrefPtr PREF_BT_TRACKER = makePref("bt-tracker");
 // values: string
-const Pref* PREF_BT_EXCLUDE_TRACKER = makePref("bt-exclude-tracker");
+PrefPtr PREF_BT_EXCLUDE_TRACKER = makePref("bt-exclude-tracker");
 // values: true | false
-const Pref* PREF_BT_REMOVE_UNSELECTED_FILE =
+PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE =
   makePref("bt-remove-unselected-file");
 
 /**
  * Metalink related preferences
  */
 // values: a string that your file system recognizes as a file name.
-const Pref* PREF_METALINK_FILE = makePref("metalink-file");
+PrefPtr PREF_METALINK_FILE = makePref("metalink-file");
 // values: a string
-const Pref* PREF_METALINK_VERSION = makePref("metalink-version");
+PrefPtr PREF_METALINK_VERSION = makePref("metalink-version");
 // values: a string
-const Pref* PREF_METALINK_LANGUAGE = makePref("metalink-language");
+PrefPtr PREF_METALINK_LANGUAGE = makePref("metalink-language");
 // values: a string
-const Pref* PREF_METALINK_OS = makePref("metalink-os");
+PrefPtr PREF_METALINK_OS = makePref("metalink-os");
 // values: a string
-const Pref* PREF_METALINK_LOCATION = makePref("metalink-location");
+PrefPtr PREF_METALINK_LOCATION = makePref("metalink-location");
 // values: true | false | mem
-const Pref* PREF_FOLLOW_METALINK = makePref("follow-metalink");
+PrefPtr PREF_FOLLOW_METALINK = makePref("follow-metalink");
 // values: http | https | ftp | none
-const Pref* PREF_METALINK_PREFERRED_PROTOCOL = makePref("metalink-preferred-protocol");
+PrefPtr PREF_METALINK_PREFERRED_PROTOCOL = makePref("metalink-preferred-protocol");
 // values: true | false
-const Pref* PREF_METALINK_ENABLE_UNIQUE_PROTOCOL = makePref("metalink-enable-unique-protocol");
-const Pref* PREF_METALINK_BASE_URI = makePref("metalink-base-uri");
+PrefPtr PREF_METALINK_ENABLE_UNIQUE_PROTOCOL = makePref("metalink-enable-unique-protocol");
+PrefPtr PREF_METALINK_BASE_URI = makePref("metalink-base-uri");
 
 } // namespace aria2

+ 195 - 193
src/prefs.h

@@ -48,17 +48,19 @@ struct Pref {
   size_t i;
 };
 
+typedef const Pref* PrefPtr;
+
 namespace option {
 
 // Returns the number of options.
 size_t countOption();
 
 // Returns Pref whose ID is id. id must be less than countOption().
-const Pref* i2p(size_t id);
+PrefPtr i2p(size_t id);
 
 // Returns Pref whose keyword is k. If no such Pref is found, returns
 // special null Pref whose ID is 0.
-const Pref* k2p(const std::string& k);
+PrefPtr k2p(const std::string& k);
 
 // Deletes resources allocated for preferences. Call this function at
 // the end of the program only once.
@@ -104,390 +106,390 @@ extern const std::string V_HTTP;
 extern const std::string V_HTTPS;
 extern const std::string V_FTP;
 
-extern const Pref* PREF_VERSION;
-extern const Pref* PREF_HELP;
+extern PrefPtr PREF_VERSION;
+extern PrefPtr PREF_HELP;
 
 /**
  * General preferences
  */
 // values: 1*digit
-extern const Pref* PREF_TIMEOUT;
+extern PrefPtr PREF_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_DNS_TIMEOUT;
+extern PrefPtr PREF_DNS_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_CONNECT_TIMEOUT;
+extern PrefPtr PREF_CONNECT_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_MAX_TRIES;
+extern PrefPtr PREF_MAX_TRIES;
 // values: 1*digit
-extern const Pref* PREF_AUTO_SAVE_INTERVAL;
+extern PrefPtr PREF_AUTO_SAVE_INTERVAL;
 // values: a string that your file system recognizes as a file name.
-extern const Pref* PREF_LOG;
+extern PrefPtr PREF_LOG;
 // values: a string that your file system recognizes as a directory.
-extern const Pref* PREF_DIR;
+extern PrefPtr PREF_DIR;
 // values: a string that your file system recognizes as a file name.
-extern const Pref* PREF_OUT;
+extern PrefPtr PREF_OUT;
 // values: 1*digit
-extern const Pref* PREF_SPLIT;
+extern PrefPtr PREF_SPLIT;
 // value: true | false
-extern const Pref* PREF_DAEMON;
+extern PrefPtr PREF_DAEMON;
 // value: a string
-extern const Pref* PREF_REFERER;
+extern PrefPtr PREF_REFERER;
 // value: 1*digit
-extern const Pref* PREF_LOWEST_SPEED_LIMIT;
+extern PrefPtr PREF_LOWEST_SPEED_LIMIT;
 // value: 1*digit
-extern const Pref* PREF_PIECE_LENGTH;
+extern PrefPtr PREF_PIECE_LENGTH;
 // value: 1*digit
-extern const Pref* PREF_MAX_DOWNLOAD_LIMIT;
+extern PrefPtr PREF_MAX_DOWNLOAD_LIMIT;
 // value: 1*digit
-extern const Pref* PREF_STARTUP_IDLE_TIME;
+extern PrefPtr PREF_STARTUP_IDLE_TIME;
 // value: prealloc | falloc | none
-extern const Pref* PREF_FILE_ALLOCATION;
+extern PrefPtr PREF_FILE_ALLOCATION;
 // value: 1*digit
-extern const Pref* PREF_NO_FILE_ALLOCATION_LIMIT;
+extern PrefPtr PREF_NO_FILE_ALLOCATION_LIMIT;
 // value: true | false
-extern const Pref* PREF_ALLOW_OVERWRITE;
+extern PrefPtr PREF_ALLOW_OVERWRITE;
 // value: true | false
-extern const Pref* PREF_REALTIME_CHUNK_CHECKSUM;
+extern PrefPtr PREF_REALTIME_CHUNK_CHECKSUM;
 // value: true | false
-extern const Pref* PREF_CHECK_INTEGRITY;
+extern PrefPtr PREF_CHECK_INTEGRITY;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_NETRC_PATH;
+extern PrefPtr PREF_NETRC_PATH;
 // value:
-extern const Pref* PREF_CONTINUE;
+extern PrefPtr PREF_CONTINUE;
 // value:
-extern const Pref* PREF_NO_NETRC;
+extern PrefPtr PREF_NO_NETRC;
 // value: 1*digit
-extern const Pref* PREF_MAX_OVERALL_DOWNLOAD_LIMIT;
+extern PrefPtr PREF_MAX_OVERALL_DOWNLOAD_LIMIT;
 // value: 1*digit
-extern const Pref* PREF_MAX_DOWNLOADS;
+extern PrefPtr PREF_MAX_DOWNLOADS;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_INPUT_FILE;
+extern PrefPtr PREF_INPUT_FILE;
 // value: true | false
-extern const Pref* PREF_DEFERRED_INPUT;
+extern PrefPtr PREF_DEFERRED_INPUT;
 // value: 1*digit
-extern const Pref* PREF_MAX_CONCURRENT_DOWNLOADS;
+extern PrefPtr PREF_MAX_CONCURRENT_DOWNLOADS;
 // value: true | false
-extern const Pref* PREF_FORCE_SEQUENTIAL;
+extern PrefPtr PREF_FORCE_SEQUENTIAL;
 // value: true | false
-extern const Pref* PREF_AUTO_FILE_RENAMING;
+extern PrefPtr PREF_AUTO_FILE_RENAMING;
 // value: true | false
-extern const Pref* PREF_PARAMETERIZED_URI;
+extern PrefPtr PREF_PARAMETERIZED_URI;
 // value: true | false
-extern const Pref* PREF_ALLOW_PIECE_LENGTH_CHANGE;
+extern PrefPtr PREF_ALLOW_PIECE_LENGTH_CHANGE;
 // value: true | false
-extern const Pref* PREF_NO_CONF;
+extern PrefPtr PREF_NO_CONF;
 // value: string
-extern const Pref* PREF_CONF_PATH;
+extern PrefPtr PREF_CONF_PATH;
 // value: 1*digit
-extern const Pref* PREF_STOP;
+extern PrefPtr PREF_STOP;
 // value: true | false
-extern const Pref* PREF_QUIET;
+extern PrefPtr PREF_QUIET;
 // value: true | false
-extern const Pref* PREF_ASYNC_DNS;
+extern PrefPtr PREF_ASYNC_DNS;
 // value: 1*digit
-extern const Pref* PREF_SUMMARY_INTERVAL;
+extern PrefPtr PREF_SUMMARY_INTERVAL;
 // value: debug, info, notice, warn, error
-extern const Pref* PREF_LOG_LEVEL;
+extern PrefPtr PREF_LOG_LEVEL;
 // value: debug, info, notice, warn, error
-extern const Pref* PREF_CONSOLE_LOG_LEVEL;
+extern PrefPtr PREF_CONSOLE_LOG_LEVEL;
 // value: inorder | feedback | adaptive
-extern const Pref* PREF_URI_SELECTOR;
+extern PrefPtr PREF_URI_SELECTOR;
 // value: 1*digit
-extern const Pref* PREF_SERVER_STAT_TIMEOUT;
+extern PrefPtr PREF_SERVER_STAT_TIMEOUT;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_SERVER_STAT_IF;
+extern PrefPtr PREF_SERVER_STAT_IF;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_SERVER_STAT_OF;
+extern PrefPtr PREF_SERVER_STAT_OF;
 // value: true | false
-extern const Pref* PREF_REMOTE_TIME;
+extern PrefPtr PREF_REMOTE_TIME;
 // value: 1*digit
-extern const Pref* PREF_MAX_FILE_NOT_FOUND;
+extern PrefPtr PREF_MAX_FILE_NOT_FOUND;
 // value: epoll | select
-extern const Pref* PREF_EVENT_POLL;
+extern PrefPtr PREF_EVENT_POLL;
 // value: true | false
-extern const Pref* PREF_ENABLE_RPC;
+extern PrefPtr PREF_ENABLE_RPC;
 // value: 1*digit
-extern const Pref* PREF_RPC_LISTEN_PORT;
+extern PrefPtr PREF_RPC_LISTEN_PORT;
 // value: string
-extern const Pref* PREF_RPC_USER;
+extern PrefPtr PREF_RPC_USER;
 // value: string
-extern const Pref* PREF_RPC_PASSWD;
+extern PrefPtr PREF_RPC_PASSWD;
 // value: 1*digit
-extern const Pref* PREF_RPC_MAX_REQUEST_SIZE;
+extern PrefPtr PREF_RPC_MAX_REQUEST_SIZE;
 // value: true | false
-extern const Pref* PREF_RPC_LISTEN_ALL;
+extern PrefPtr PREF_RPC_LISTEN_ALL;
 // value: true | false
-extern const Pref* PREF_RPC_ALLOW_ORIGIN_ALL;
+extern PrefPtr PREF_RPC_ALLOW_ORIGIN_ALL;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_RPC_CERTIFICATE;
+extern PrefPtr PREF_RPC_CERTIFICATE;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_RPC_PRIVATE_KEY;
+extern PrefPtr PREF_RPC_PRIVATE_KEY;
 // value: true | false
-extern const Pref* PREF_RPC_SECURE;
+extern PrefPtr PREF_RPC_SECURE;
 // value: true | false
-extern const Pref* PREF_RPC_SAVE_UPLOAD_METADATA;
+extern PrefPtr PREF_RPC_SAVE_UPLOAD_METADATA;
 // value: true | false
-extern const Pref* PREF_DRY_RUN;
+extern PrefPtr PREF_DRY_RUN;
 // value: true | false
-extern const Pref* PREF_REUSE_URI;
+extern PrefPtr PREF_REUSE_URI;
 // value: string
-extern const Pref* PREF_ON_DOWNLOAD_START;
-extern const Pref* PREF_ON_DOWNLOAD_PAUSE;
-extern const Pref* PREF_ON_DOWNLOAD_STOP;
-extern const Pref* PREF_ON_DOWNLOAD_COMPLETE;
-extern const Pref* PREF_ON_DOWNLOAD_ERROR;
+extern PrefPtr PREF_ON_DOWNLOAD_START;
+extern PrefPtr PREF_ON_DOWNLOAD_PAUSE;
+extern PrefPtr PREF_ON_DOWNLOAD_STOP;
+extern PrefPtr PREF_ON_DOWNLOAD_COMPLETE;
+extern PrefPtr PREF_ON_DOWNLOAD_ERROR;
 // value: string
-extern const Pref* PREF_INTERFACE;
+extern PrefPtr PREF_INTERFACE;
 // value: true | false
-extern const Pref* PREF_DISABLE_IPV6;
+extern PrefPtr PREF_DISABLE_IPV6;
 // value: true | false
-extern const Pref* PREF_HUMAN_READABLE;
+extern PrefPtr PREF_HUMAN_READABLE;
 // value: true | false
-extern const Pref* PREF_REMOVE_CONTROL_FILE;
+extern PrefPtr PREF_REMOVE_CONTROL_FILE;
 // value: true | false
-extern const Pref* PREF_ALWAYS_RESUME;
+extern PrefPtr PREF_ALWAYS_RESUME;
 // value: 1*digit
-extern const Pref* PREF_MAX_RESUME_FAILURE_TRIES;
+extern PrefPtr PREF_MAX_RESUME_FAILURE_TRIES;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_SAVE_SESSION;
+extern PrefPtr PREF_SAVE_SESSION;
 // value: 1*digit
-extern const Pref* PREF_MAX_CONNECTION_PER_SERVER;
+extern PrefPtr PREF_MAX_CONNECTION_PER_SERVER;
 // value: 1*digit
-extern const Pref* PREF_MIN_SPLIT_SIZE;
+extern PrefPtr PREF_MIN_SPLIT_SIZE;
 // value: true | false
-extern const Pref* PREF_CONDITIONAL_GET;
+extern PrefPtr PREF_CONDITIONAL_GET;
 // value: true | false
-extern const Pref* PREF_SELECT_LEAST_USED_HOST;
+extern PrefPtr PREF_SELECT_LEAST_USED_HOST;
 // value: true | false
-extern const Pref* PREF_ENABLE_ASYNC_DNS6;
+extern PrefPtr PREF_ENABLE_ASYNC_DNS6;
 // value: 1*digit
-extern const Pref* PREF_MAX_DOWNLOAD_RESULT;
+extern PrefPtr PREF_MAX_DOWNLOAD_RESULT;
 // value: 1*digit
-extern const Pref* PREF_RETRY_WAIT;
+extern PrefPtr PREF_RETRY_WAIT;
 // value: string
-extern const Pref* PREF_ASYNC_DNS_SERVER;
+extern PrefPtr PREF_ASYNC_DNS_SERVER;
 // value: true | false
-extern const Pref* PREF_SHOW_CONSOLE_READOUT;
+extern PrefPtr PREF_SHOW_CONSOLE_READOUT;
 // value: default | inorder | geom
-extern const Pref* PREF_STREAM_PIECE_SELECTOR;
+extern PrefPtr PREF_STREAM_PIECE_SELECTOR;
 // value: true | false
-extern const Pref* PREF_TRUNCATE_CONSOLE_READOUT;
+extern PrefPtr PREF_TRUNCATE_CONSOLE_READOUT;
 // value: true | false
-extern const Pref* PREF_PAUSE;
+extern PrefPtr PREF_PAUSE;
 // value: default | full
-extern const Pref* PREF_DOWNLOAD_RESULT;
+extern PrefPtr PREF_DOWNLOAD_RESULT;
 // value: true | false
-extern const Pref* PREF_HASH_CHECK_ONLY;
+extern PrefPtr PREF_HASH_CHECK_ONLY;
 // values: hashType=digest
-extern const Pref* PREF_CHECKSUM;
+extern PrefPtr PREF_CHECKSUM;
 // value: pid
-extern const Pref* PREF_STOP_WITH_PROCESS;
+extern PrefPtr PREF_STOP_WITH_PROCESS;
 // value: true | false
-extern const Pref* PREF_ENABLE_MMAP;
+extern PrefPtr PREF_ENABLE_MMAP;
 // value: true | false
-extern const Pref* PREF_FORCE_SAVE;
+extern PrefPtr PREF_FORCE_SAVE;
 // value: 1*digit
-extern const Pref* PREF_DISK_CACHE;
+extern PrefPtr PREF_DISK_CACHE;
 // value: string
-extern const Pref* PREF_GID;
+extern PrefPtr PREF_GID;
 // values: 1*digit
-extern const Pref* PREF_SAVE_SESSION_INTERVAL;
+extern PrefPtr PREF_SAVE_SESSION_INTERVAL;
 
 /**
  * FTP related preferences
  */
-extern const Pref* PREF_FTP_USER;
-extern const Pref* PREF_FTP_PASSWD;
+extern PrefPtr PREF_FTP_USER;
+extern PrefPtr PREF_FTP_PASSWD;
 // values: binary | ascii
-extern const Pref* PREF_FTP_TYPE;
+extern PrefPtr PREF_FTP_TYPE;
 // values: true | false
-extern const Pref* PREF_FTP_PASV;
+extern PrefPtr PREF_FTP_PASV;
 // values: true | false
-extern const Pref* PREF_FTP_REUSE_CONNECTION;
+extern PrefPtr PREF_FTP_REUSE_CONNECTION;
 
 /**
  * HTTP related preferences
  */
-extern const Pref* PREF_HTTP_USER;
-extern const Pref* PREF_HTTP_PASSWD;
+extern PrefPtr PREF_HTTP_USER;
+extern PrefPtr PREF_HTTP_PASSWD;
 // values: string
-extern const Pref* PREF_USER_AGENT;
+extern PrefPtr PREF_USER_AGENT;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_LOAD_COOKIES;
+extern PrefPtr PREF_LOAD_COOKIES;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_SAVE_COOKIES;
+extern PrefPtr PREF_SAVE_COOKIES;
 // values: true | false
-extern const Pref* PREF_ENABLE_HTTP_KEEP_ALIVE;
+extern PrefPtr PREF_ENABLE_HTTP_KEEP_ALIVE;
 // values: true | false
-extern const Pref* PREF_ENABLE_HTTP_PIPELINING;
+extern PrefPtr PREF_ENABLE_HTTP_PIPELINING;
 // value: 1*digit
-extern const Pref* PREF_MAX_HTTP_PIPELINING;
+extern PrefPtr PREF_MAX_HTTP_PIPELINING;
 // value: string
-extern const Pref* PREF_HEADER;
+extern PrefPtr PREF_HEADER;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_CERTIFICATE;
+extern PrefPtr PREF_CERTIFICATE;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_PRIVATE_KEY;
+extern PrefPtr PREF_PRIVATE_KEY;
 // value: string that your file system recognizes as a file name.
-extern const Pref* PREF_CA_CERTIFICATE;
+extern PrefPtr PREF_CA_CERTIFICATE;
 // value: true | false
-extern const Pref* PREF_CHECK_CERTIFICATE;
+extern PrefPtr PREF_CHECK_CERTIFICATE;
 // value: true | false
-extern const Pref* PREF_USE_HEAD;
+extern PrefPtr PREF_USE_HEAD;
 // value: true | false
-extern const Pref* PREF_HTTP_AUTH_CHALLENGE;
+extern PrefPtr PREF_HTTP_AUTH_CHALLENGE;
 // value: true | false
-extern const Pref* PREF_HTTP_NO_CACHE;
+extern PrefPtr PREF_HTTP_NO_CACHE;
 // value: true | false
-extern const Pref* PREF_HTTP_ACCEPT_GZIP;
+extern PrefPtr PREF_HTTP_ACCEPT_GZIP;
 
 /**;
  * Proxy related preferences
  */
-extern const Pref* PREF_HTTP_PROXY;
-extern const Pref* PREF_HTTPS_PROXY;
-extern const Pref* PREF_FTP_PROXY;
-extern const Pref* PREF_ALL_PROXY;
+extern PrefPtr PREF_HTTP_PROXY;
+extern PrefPtr PREF_HTTPS_PROXY;
+extern PrefPtr PREF_FTP_PROXY;
+extern PrefPtr PREF_ALL_PROXY;
 // values: comma separeted hostname or domain
-extern const Pref* PREF_NO_PROXY;
+extern PrefPtr PREF_NO_PROXY;
 // values: get | tunnel
-extern const Pref* PREF_PROXY_METHOD;
-extern const Pref* PREF_HTTP_PROXY_USER;
-extern const Pref* PREF_HTTP_PROXY_PASSWD;
-extern const Pref* PREF_HTTPS_PROXY_USER;
-extern const Pref* PREF_HTTPS_PROXY_PASSWD;
-extern const Pref* PREF_FTP_PROXY_USER;
-extern const Pref* PREF_FTP_PROXY_PASSWD;
-extern const Pref* PREF_ALL_PROXY_USER;
-extern const Pref* PREF_ALL_PROXY_PASSWD;
+extern PrefPtr PREF_PROXY_METHOD;
+extern PrefPtr PREF_HTTP_PROXY_USER;
+extern PrefPtr PREF_HTTP_PROXY_PASSWD;
+extern PrefPtr PREF_HTTPS_PROXY_USER;
+extern PrefPtr PREF_HTTPS_PROXY_PASSWD;
+extern PrefPtr PREF_FTP_PROXY_USER;
+extern PrefPtr PREF_FTP_PROXY_PASSWD;
+extern PrefPtr PREF_ALL_PROXY_USER;
+extern PrefPtr PREF_ALL_PROXY_PASSWD;
 
 /**
  * BitTorrent related preferences
  */
 // values: 1*digit
-extern const Pref* PREF_PEER_CONNECTION_TIMEOUT;
+extern PrefPtr PREF_PEER_CONNECTION_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_BT_TIMEOUT;
+extern PrefPtr PREF_BT_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_BT_REQUEST_TIMEOUT;
+extern PrefPtr PREF_BT_REQUEST_TIMEOUT;
 // values: true | false
-extern const Pref* PREF_SHOW_FILES;
+extern PrefPtr PREF_SHOW_FILES;
 // values: 1*digit
-extern const Pref* PREF_MAX_OVERALL_UPLOAD_LIMIT;
+extern PrefPtr PREF_MAX_OVERALL_UPLOAD_LIMIT;
 // values: 1*digit
-extern const Pref* PREF_MAX_UPLOAD_LIMIT;
+extern PrefPtr PREF_MAX_UPLOAD_LIMIT;
 // values: a string that your file system recognizes as a file name.
-extern const Pref* PREF_TORRENT_FILE;
+extern PrefPtr PREF_TORRENT_FILE;
 // values: 1*digit
-extern const Pref* PREF_LISTEN_PORT;
+extern PrefPtr PREF_LISTEN_PORT;
 // values: true | false | mem
-extern const Pref* PREF_FOLLOW_TORRENT;
+extern PrefPtr PREF_FOLLOW_TORRENT;
 // values: 1*digit *( (,|-) 1*digit)
-extern const Pref* PREF_SELECT_FILE;
+extern PrefPtr PREF_SELECT_FILE;
 // values: 1*digit
-extern const Pref* PREF_SEED_TIME;
+extern PrefPtr PREF_SEED_TIME;
 // values: 1*digit ['.' [ 1*digit ] ]
-extern const Pref* PREF_SEED_RATIO;
+extern PrefPtr PREF_SEED_RATIO;
 // values: 1*digit
-extern const Pref* PREF_BT_KEEP_ALIVE_INTERVAL;
+extern PrefPtr PREF_BT_KEEP_ALIVE_INTERVAL;
 // values: a string, less than or equals to 20 bytes length
-extern const Pref* PREF_PEER_ID_PREFIX;
+extern PrefPtr PREF_PEER_ID_PREFIX;
 // values: true | false
-extern const Pref* PREF_ENABLE_PEER_EXCHANGE;
+extern PrefPtr PREF_ENABLE_PEER_EXCHANGE;
 // values: true | false
-extern const Pref* PREF_ENABLE_DHT;
+extern PrefPtr PREF_ENABLE_DHT;
 // values: a string
-extern const Pref* PREF_DHT_LISTEN_ADDR;
+extern PrefPtr PREF_DHT_LISTEN_ADDR;
 // values: 1*digit
-extern const Pref* PREF_DHT_LISTEN_PORT;
+extern PrefPtr PREF_DHT_LISTEN_PORT;
 // values: a string
-extern const Pref* PREF_DHT_ENTRY_POINT_HOST;
+extern PrefPtr PREF_DHT_ENTRY_POINT_HOST;
 // values: 1*digit
-extern const Pref* PREF_DHT_ENTRY_POINT_PORT;
+extern PrefPtr PREF_DHT_ENTRY_POINT_PORT;
 // values: a string (hostname:port)
-extern const Pref* PREF_DHT_ENTRY_POINT;
+extern PrefPtr PREF_DHT_ENTRY_POINT;
 // values: a string
-extern const Pref* PREF_DHT_FILE_PATH;
+extern PrefPtr PREF_DHT_FILE_PATH;
 // values: true | false
-extern const Pref* PREF_ENABLE_DHT6;
+extern PrefPtr PREF_ENABLE_DHT6;
 // values: a string
-extern const Pref* PREF_DHT_LISTEN_ADDR6;
+extern PrefPtr PREF_DHT_LISTEN_ADDR6;
 // values: a string
-extern const Pref* PREF_DHT_ENTRY_POINT_HOST6;
+extern PrefPtr PREF_DHT_ENTRY_POINT_HOST6;
 // values: 1*digit
-extern const Pref* PREF_DHT_ENTRY_POINT_PORT6;
+extern PrefPtr PREF_DHT_ENTRY_POINT_PORT6;
 // values: a string (hostname:port)
-extern const Pref* PREF_DHT_ENTRY_POINT6;
+extern PrefPtr PREF_DHT_ENTRY_POINT6;
 // values: a string
-extern const Pref* PREF_DHT_FILE_PATH6;
+extern PrefPtr PREF_DHT_FILE_PATH6;
 // values: plain | arc4
-extern const Pref* PREF_BT_MIN_CRYPTO_LEVEL;
+extern PrefPtr PREF_BT_MIN_CRYPTO_LEVEL;
 // values:: true | false
-extern const Pref* PREF_BT_REQUIRE_CRYPTO;
+extern PrefPtr PREF_BT_REQUIRE_CRYPTO;
 // values: 1*digit
-extern const Pref* PREF_BT_REQUEST_PEER_SPEED_LIMIT;
+extern PrefPtr PREF_BT_REQUEST_PEER_SPEED_LIMIT;
 // values: 1*digit
-extern const Pref* PREF_BT_MAX_OPEN_FILES;
+extern PrefPtr PREF_BT_MAX_OPEN_FILES;
 // values: true | false
-extern const Pref* PREF_BT_SEED_UNVERIFIED;
+extern PrefPtr PREF_BT_SEED_UNVERIFIED;
 // values: true | false
-extern const Pref* PREF_BT_HASH_CHECK_SEED;
+extern PrefPtr PREF_BT_HASH_CHECK_SEED;
 // values: 1*digit
-extern const Pref* PREF_BT_MAX_PEERS;
+extern PrefPtr PREF_BT_MAX_PEERS;
 // values: a string (IP address)
-extern const Pref* PREF_BT_EXTERNAL_IP;
+extern PrefPtr PREF_BT_EXTERNAL_IP;
 // values: 1*digit '=' a string that your file system recognizes as a file name.
-extern const Pref* PREF_INDEX_OUT;
+extern PrefPtr PREF_INDEX_OUT;
 // values: 1*digit
-extern const Pref* PREF_BT_TRACKER_INTERVAL;
+extern PrefPtr PREF_BT_TRACKER_INTERVAL;
 // values: 1*digit
-extern const Pref* PREF_BT_STOP_TIMEOUT;
+extern PrefPtr PREF_BT_STOP_TIMEOUT;
 // values: head[=SIZE]|tail[=SIZE], ...
-extern const Pref* PREF_BT_PRIORITIZE_PIECE;
+extern PrefPtr PREF_BT_PRIORITIZE_PIECE;
 // values: true | false
-extern const Pref* PREF_BT_SAVE_METADATA;
+extern PrefPtr PREF_BT_SAVE_METADATA;
 // values: true | false
-extern const Pref* PREF_BT_METADATA_ONLY;
+extern PrefPtr PREF_BT_METADATA_ONLY;
 // values: true | false
-extern const Pref* PREF_BT_ENABLE_LPD;
+extern PrefPtr PREF_BT_ENABLE_LPD;
 // values: string
-extern const Pref* PREF_BT_LPD_INTERFACE;
+extern PrefPtr PREF_BT_LPD_INTERFACE;
 // values: 1*digit
-extern const Pref* PREF_BT_TRACKER_TIMEOUT;
+extern PrefPtr PREF_BT_TRACKER_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_BT_TRACKER_CONNECT_TIMEOUT;
+extern PrefPtr PREF_BT_TRACKER_CONNECT_TIMEOUT;
 // values: 1*digit
-extern const Pref* PREF_DHT_MESSAGE_TIMEOUT;
+extern PrefPtr PREF_DHT_MESSAGE_TIMEOUT;
 // values: string
-extern const Pref* PREF_ON_BT_DOWNLOAD_COMPLETE;
+extern PrefPtr PREF_ON_BT_DOWNLOAD_COMPLETE;
 // values: string
-extern const Pref* PREF_BT_TRACKER;
+extern PrefPtr PREF_BT_TRACKER;
 // values: string
-extern const Pref* PREF_BT_EXCLUDE_TRACKER;
+extern PrefPtr PREF_BT_EXCLUDE_TRACKER;
 // values: true | false
-extern const Pref* PREF_BT_REMOVE_UNSELECTED_FILE;
+extern PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE;
 
 /**
  * Metalink related preferences
  */
 // values: a string that your file system recognizes as a file name.
-extern const Pref* PREF_METALINK_FILE;
+extern PrefPtr PREF_METALINK_FILE;
 // values: a string
-extern const Pref* PREF_METALINK_VERSION;
+extern PrefPtr PREF_METALINK_VERSION;
 // values: a string
-extern const Pref* PREF_METALINK_LANGUAGE;
+extern PrefPtr PREF_METALINK_LANGUAGE;
 // values: a string
-extern const Pref* PREF_METALINK_OS;
+extern PrefPtr PREF_METALINK_OS;
 // values: a string
-extern const Pref* PREF_METALINK_LOCATION;
+extern PrefPtr PREF_METALINK_LOCATION;
 // values: true | false | mem
-extern const Pref* PREF_FOLLOW_METALINK;
+extern PrefPtr PREF_FOLLOW_METALINK;
 // values: http | https | ftp | none
-extern const Pref* PREF_METALINK_PREFERRED_PROTOCOL;
+extern PrefPtr PREF_METALINK_PREFERRED_PROTOCOL;
 // values: true | false
-extern const Pref* PREF_METALINK_ENABLE_UNIQUE_PROTOCOL;
+extern PrefPtr PREF_METALINK_ENABLE_UNIQUE_PROTOCOL;
 // values: a string
-extern const Pref* PREF_METALINK_BASE_URI;
+extern PrefPtr PREF_METALINK_BASE_URI;
 
 } // namespace aria2
 

+ 2 - 2
src/util.cc

@@ -1896,13 +1896,13 @@ void executeHook
 
 void executeHookByOptName
 (const std::shared_ptr<RequestGroup>& group, const Option* option,
- const Pref* pref)
+ PrefPtr pref)
 {
   executeHookByOptName(group.get(), option, pref);
 }
 
 void executeHookByOptName
-(const RequestGroup* group, const Option* option, const Pref* pref)
+(const RequestGroup* group, const Option* option, PrefPtr pref)
 {
   const std::string& cmd = option->get(pref);
   if(!cmd.empty()) {

+ 3 - 2
src/util.h

@@ -76,6 +76,7 @@ class FileEntry;
 class RequestGroup;
 class Option;
 struct Pref;
+typedef const Pref* PrefPtr;
 
 #define STRTOLL(X) strtoll(X, reinterpret_cast<char**>(0), 10)
 #define STRTOULL(X) strtoull(X, reinterpret_cast<char**>(0), 10)
@@ -781,11 +782,11 @@ bool inSameCidrBlock
 // No throw
 void executeHookByOptName
 (const std::shared_ptr<RequestGroup>& group, const Option* option,
- const Pref* pref);
+ PrefPtr pref);
 
 // No throw
 void executeHookByOptName
-(const RequestGroup* group, const Option* option, const Pref* pref);
+(const RequestGroup* group, const Option* option, PrefPtr pref);
 
 std::string createSafePath(const std::string& dir, const std::string& filename);