]> git.stg.codes - stg.git/commitdiff
В класс CONFIGFILE добавлена поддержка записи с переименованием
authorMaxim Mamontov <faust@gts.dp.ua>
Fri, 10 Dec 2010 15:34:24 +0000 (17:34 +0200)
committerMaxim Mamontov <faust@gts.dp.ua>
Fri, 10 Dec 2010 15:34:24 +0000 (17:34 +0200)
stglibs/conffiles.lib/conffiles.cpp
stglibs/conffiles.lib/conffiles.h

index b247d041d675da7a37e5d4973de8cbd1b44503c7..cf7dffee4371c0ee39a88822a46e4628da9fcd6b 100644 (file)
  */
 
 //---------------------------------------------------------------------------
  */
 
 //---------------------------------------------------------------------------
-#include <cerrno>
+
+// getpid
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <cerrno> // E*
 #include <cstring>
 #include <cstdlib>
 
 #include <cstring>
 #include <cstdlib>
 
@@ -98,27 +103,6 @@ int e = error;
 error = 0;
 return e;
 }
 error = 0;
 return e;
 }
-//---------------------------------------------------------------------------
-int CONFIGFILE::Flush() const
-{
-ofstream f(fileName.c_str());
-if (!f.is_open())
-    {
-    error = EIO;
-    return EIO;
-    }
-
-map<string, string>::const_iterator it = param_val.begin();
-while (it != param_val.end())
-    {
-    f << it->first << "=" << it->second << "\n";
-    ++it;
-    }
-
-f.close();
-
-return 0;
-}
 /*//---------------------------------------------------------------------------
 int CONFIGFILE::ReadString(const string & param, char * str, int * maxLen, const char * defaultVal) const
 {
 /*//---------------------------------------------------------------------------
 int CONFIGFILE::ReadString(const string & param, char * str, int * maxLen, const char * defaultVal) const
 {
@@ -391,3 +375,37 @@ snprintf(s, 30, "%f", val);
 param_val[param] = s;
 }
 //---------------------------------------------------------------------------
 param_val[param] = s;
 }
 //---------------------------------------------------------------------------
+int CONFIGFILE::Flush(const std::string & path) const
+{
+ofstream f(path.c_str());
+if (!f.is_open())
+    {
+    error = EIO;
+    return EIO;
+    }
+
+map<string, string>::const_iterator it = param_val.begin();
+while (it != param_val.end())
+    {
+    f << it->first << "=" << it->second << "\n";
+    ++it;
+    }
+
+f.close();
+return 0;
+}
+//---------------------------------------------------------------------------
+int CONFIGFILE::Flush() const
+{
+std::string pid;
+x2str(getpid(), pid);
+
+if (Flush(fileName + "." + pid))
+    return -1;
+
+if (rename((fileName + "." + pid).c_str(), fileName.c_str()))
+    return -1;
+
+return 0;
+}
+//---------------------------------------------------------------------------
index 07f716cdfc4aa6f24c75b95ed8a593a43c2bec39..77a696d02d8d66e9f47f9317ddc5f1e1ad271132 100644 (file)
@@ -76,6 +76,8 @@ private:
     map<string, string, StringCaseCmp_t> param_val;
     string fileName;
     mutable int error;
     map<string, string, StringCaseCmp_t> param_val;
     string fileName;
     mutable int error;
+
+    int Flush(const std::string & path) const;
 };
 //---------------------------------------------------------------------------
 #endif
 };
 //---------------------------------------------------------------------------
 #endif