#include <cerrno> // E*
#include <cstring>
#include <cstdlib>
+#include <cstdio>
#include <fstream>
-#include "conffiles.h"
-#include "common.h"
+#include "stg/conffiles.h"
using namespace std;
CONFIGFILE::CONFIGFILE(const string & fn, bool nook)
: param_val(StringCaseCmp),
fileName(fn),
- error(0)
+ error(0),
+ changed(false)
{
ifstream f(fileName.c_str());
error = 0;
return e;
}
-/*//---------------------------------------------------------------------------
-int CONFIGFILE::ReadString(const string & param, char * str, int * maxLen, const char * defaultVal) const
-{
-it = param_val.find(param);
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
-
-if (it != param_val.end())
- {
- // þÔÏ-ÔÏ ÓÔÏÉÔ
- strncpy(str, param_val[param].c_str(), *maxLen);
- *maxLen = param_val[param].size();
- return 0;
- }
-
-strncpy(str, defaultVal, *maxLen);
-*maxLen = strlen(defaultVal);
-return -1;
-}*/
//---------------------------------------------------------------------------
int CONFIGFILE::ReadString(const string & param, string * val, const string & defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
*val = it->second;
return 0;
}
void CONFIGFILE::WriteString(const string & param, const string &val)
{
param_val[param] = val;
+changed = true;
}
//---------------------------------------------------------------------------
int CONFIGFILE::ReadTime(const string & param, time_t * val, time_t defaultVal) const
int CONFIGFILE::ReadInt(const string & param, int * val, int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtol(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadUInt(const string & param, unsigned int * val, unsigned int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtoul(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadLongInt(const string & param, long int * val, long int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtol(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadULongInt(const string & param, unsigned long int * val, unsigned long int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtoul(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadLongLongInt(const string & param, int64_t * val, int64_t defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtoll(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadULongLongInt(const string & param, uint64_t * val, uint64_t defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtoull(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadShortInt(const string & param, short int * val, short int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = (short)strtol(it->second.c_str(), &res, 10);
if (*res != 0)
int CONFIGFILE::ReadUShortInt(const string & param, unsigned short int * val, unsigned short int defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = (short)strtoul(it->second.c_str(), &res, 10);
if (*res != 0)
//---------------------------------------------------------------------------
void CONFIGFILE::WriteInt(const string & param, int64_t val)
{
-string s;
-x2str(val, s);
-param_val[param] = s;
+char buf[32];
+snprintf(buf, sizeof(buf), "%lld", static_cast<long long int>(val));
+param_val[param] = buf;
+changed = true;
}
//---------------------------------------------------------------------------
int CONFIGFILE::ReadDouble(const string & param, double * val, double defaultVal) const
{
const map<string, string>::const_iterator it(param_val.find(param));
-// îÁÛÌÉ ÎÕÖÎÕÀ ÐÅÒÅÍÅÎÎÕÀ
if (it != param_val.end())
{
- // þÔÏ-ÔÏ ÓÔÏÉÔ
char *res;
*val = strtod(it->second.c_str(), &res);
if (*res != 0)
char s[30];
snprintf(s, 30, "%f", val);
param_val[param] = s;
+changed = true;
}
//---------------------------------------------------------------------------
int CONFIGFILE::Flush(const std::string & path) const
//---------------------------------------------------------------------------
int CONFIGFILE::Flush() const
{
-std::string pid;
-x2str(getpid(), pid);
+if (!changed)
+ return 0;
+
+char pid[6];
+snprintf(pid, sizeof(pid), "%d", getpid());
if (Flush(fileName + "." + pid))
return -1;
if (rename((fileName + "." + pid).c_str(), fileName.c_str()))
return -1;
+changed = false;
+
return 0;
}
//---------------------------------------------------------------------------