]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add support for suffixes K, M, G (kilo, mega, gigabyte) and prefix 0x (hex)
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 2 Jan 2007 00:38:45 +0000 (00:38 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 2 Jan 2007 00:38:45 +0000 (00:38 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6209 e03df62e-2008-0410-955e-edbf42e46eb7

src/configreader.cpp

index c66b6730a35ba0056201d142021d551d4de889de..d30786438c6a41d015a998877c37e16181694bcb 100644 (file)
@@ -1348,6 +1348,42 @@ bool ServerConfig::ConfValueInteger(ConfigDataHash &target, const std::string &t
        stream.str(value);
        if(!(stream >> result))
                return false;
+       else
+       {
+               if (!value.empty())
+               {
+                       if (value.substr(0,2) == "0x")
+                       {
+                               char* endptr;
+
+                               value.erase(0,2);
+                               result = strtol(value.c_str(), &endptr, 16);
+
+                               /* No digits found */
+                               if (endptr == value.c_str())
+                                       return false;
+                       }
+                       else
+                       {
+                               char denominator = *(value.end() - 1);
+                               switch (toupper(denominator))
+                               {
+                                       case 'K':
+                                               /* Kilobytes -> bytes */
+                                               result = result * 1024;
+                                       break;
+                                       case 'M':
+                                               /* Megabytes -> bytes */
+                                               result = result * 1024 * 1024;
+                                       break;
+                                       case 'G':
+                                               /* Gigabytes -> bytes */
+                                               result = result * 1024 * 1024 * 1024;
+                                       break;
+                               }
+                       }
+               }
+       }
        return r;
 }