]> git.sesse.net Git - freerainbowtables/blobdiff - Client Applications/rcracki_mt/Public.cpp
Fix O(n^2) behavior in ReadLinesFromFile().
[freerainbowtables] / Client Applications / rcracki_mt / Public.cpp
index 946c79d8931c7b5681735991533a73e194e45136..5e041cf02bad8aad2249f2d9fdb19573f4709732 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>\r
  * Copyright Martin Westergaard Jørgensen <martinwj2005@gmail.com>\r
  * Copyright 2009, 2010 Daniël Niggebrugge <niggebrugge@fox-it.com>\r
- * Copyright 2009, 2010 James Nobis <frt@quelrod.net>\r
+ * Copyright 2009, 2010, 2011 James Nobis <frt@quelrod.net>\r
  *\r
  * This file is part of rcracki_mt.\r
  *\r
@@ -23,7 +23,7 @@
  */\r
 \r
 #if defined(_WIN32) && !defined(__GNUC__)\r
-       #pragma warning(disable : 4786 4267 4018)\r
+       #pragma warning(disable : 4786)\r
 #endif\r
 \r
 #include "Public.h"\r
@@ -44,8 +44,8 @@
  \r
        struct timezone\r
        {\r
-               int  tz_minuteswest; /* minutes W of Greenwich */\r
-               int  tz_dsttime;     /* type of dst correction */\r
+               int tz_minuteswest; /* minutes W of Greenwich */\r
+               int tz_dsttime;     /* type of dst correction */\r
        };\r
  \r
        int gettimeofday(struct timeval *tv, struct timezone *tz)\r
@@ -153,8 +153,9 @@ string TrimString(string s)
 \r
        while (s.size() > 0)\r
        {\r
-               if (s[s.size() - 1] == ' ' || s[s.size() - 1] == '\t')\r
-                       s = s.substr(0, s.size() - 1);\r
+               if (s[s.size() - 1] == ' ' || s[s.size() - 1] == '\t' ||\r
+                   s[s.size() - 1] == '\r' || s[s.size() - 1] == '\n')\r
+                       s.resize(s.size() - 1);\r
                else\r
                        break;\r
        }\r
@@ -202,7 +203,7 @@ bool boinc_ReadLinesFromFile(string sPathName, vector<string>& vLine)
 \r
        if (file != NULL)\r
        {\r
-               unsigned int len = GetFileLen(file);\r
+               long len = GetFileLen(file);\r
                char* data = new char[len + 1];\r
                fread(data, 1, len, file);\r
                data[len] = '\0';\r
@@ -242,7 +243,7 @@ bool ReadLinesFromFile(string sPathName, vector<string>& vLine)
        FILE* file = fopen(sPathName.c_str(), "rb");\r
        if (file != NULL)\r
        {\r
-               unsigned int len = GetFileLen(file);\r
+               long len = GetFileLen(file);\r
                char* data = new char[len + 1];\r
                fread(data, 1, len, file);\r
                data[len] = '\0';\r
@@ -250,21 +251,20 @@ bool ReadLinesFromFile(string sPathName, vector<string>& vLine)
                content += "\n";\r
                delete [] data;\r
 \r
-               unsigned int i;\r
-               for (i = 0; i < content.size(); i++)\r
-               {\r
-                       if (content[i] == '\r')\r
-                               content[i] = '\n';\r
-               }\r
+               string::iterator n = content.begin();\r
+               string::iterator line_end;\r
+               for ( ;; ) {\r
+                       line_end = find(n, content.end(), '\n');\r
 \r
-               string::size_type n;\r
-               while ((n = content.find("\n", 0)) != string::npos)\r
-               {\r
-                       string line = content.substr(0, n);\r
+                       string line(n, line_end);\r
                        line = TrimString(line);\r
                        if (line != "")\r
                                vLine.push_back(line);\r
-                       content = content.substr(n + 1);\r
+\r
+                       if (line_end == content.end()) {\r
+                               break;\r
+                       }\r
+                       n = line_end + 1;\r
                }\r
 \r
                fclose(file);\r
@@ -356,7 +356,7 @@ string HexToStr(const unsigned char* pData, int nLen)
 \r
 unsigned long GetAvailPhysMemorySize()\r
 {\r
-#if defined(_WIN32)\r
+#ifdef _WIN32\r
        MEMORYSTATUS ms;\r
        GlobalMemoryStatus(&ms);\r
        return ms.dwAvailPhys;\r