mirror of
https://github.com/Alukym/VMProtect-Source.git
synced 2025-06-27 10:27:56 -05:00
Initial commit
This commit is contained in:
130
core/inifile.h
Normal file
130
core/inifile.h
Normal file
@ -0,0 +1,130 @@
|
||||
#ifndef INIFILE_H
|
||||
#define INIFILE_H
|
||||
|
||||
long StrToIntDef(const char *str, long default_value);
|
||||
uint64_t StrToInt64Def(const char *str, uint64_t default_value);
|
||||
|
||||
class IIniFile : public IObject
|
||||
{
|
||||
public:
|
||||
virtual std::string ReadString(const char *section, const char *name, const char *default_value = NULL) const = 0;
|
||||
virtual void WriteString(const char *section, const char *name, const char *value) = 0;
|
||||
virtual int ReadInt(const char *section, const char *name, int default_value = 0) const = 0;
|
||||
virtual uint64_t ReadInt64(const char *section, const char *name, uint64_t default_value = 0) const = 0;
|
||||
virtual void WriteInt(const char *section, const char *name, int value) = 0;
|
||||
virtual bool ReadBool(const char *section, const char *name, bool default_value = false) const = 0;
|
||||
virtual void WriteBool(const char *section, const char *name, bool value) = 0;
|
||||
virtual bool DeleteKey(const char *section, const char *name) = 0;
|
||||
};
|
||||
|
||||
class BaseIniFile : public IIniFile
|
||||
{
|
||||
public:
|
||||
virtual int ReadInt(const char *section, const char *name, int default_value = 0) const;
|
||||
virtual uint64_t ReadInt64(const char *section, const char *name, uint64_t default_value = 0) const;
|
||||
virtual void WriteInt(const char *section, const char *name, int value);
|
||||
virtual bool ReadBool(const char *section, const char *name, bool default_value = false) const;
|
||||
virtual void WriteBool(const char *section, const char *name, bool value);
|
||||
};
|
||||
|
||||
class IniFile : public BaseIniFile
|
||||
{
|
||||
public:
|
||||
IniFile(const char *file_name);
|
||||
virtual std::string ReadString(const char *section, const char *name, const char *default_value = NULL) const;
|
||||
virtual void WriteString(const char *section, const char *name, const char *value);
|
||||
virtual bool DeleteKey(const char *section, const char *name);
|
||||
std::vector<std::string> ReadSection(const char *section, const char *name_mask = "") const;
|
||||
void EraseSection(const char *section);
|
||||
std::string file_name() const { return file_name_; }
|
||||
private:
|
||||
std::string file_name_;
|
||||
};
|
||||
|
||||
class LanguageManager;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#ifdef VMP_GNU
|
||||
#define MUTEX_FILE "/tmp/VMProtect.dat.mutex"
|
||||
#endif
|
||||
|
||||
struct GlobalLocker
|
||||
{
|
||||
#ifdef VMP_GNU
|
||||
int mutex_;
|
||||
static int depth;
|
||||
#else
|
||||
HANDLE mutex_;
|
||||
#endif
|
||||
|
||||
GlobalLocker()
|
||||
{
|
||||
#ifdef VMP_GNU
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
++depth;
|
||||
if (depth == 1)
|
||||
{
|
||||
mutex_ = open(MUTEX_FILE, O_CREAT | O_EXLOCK, 0666);
|
||||
}
|
||||
#else
|
||||
static HANDLE mutex = CreateMutexA(NULL, FALSE, "Global\\VMProtect.dat");
|
||||
mutex_ = mutex;
|
||||
WaitForSingleObject(mutex_, 10000);
|
||||
#endif
|
||||
}
|
||||
|
||||
~GlobalLocker()
|
||||
{
|
||||
#ifdef VMP_GNU
|
||||
if (depth == 1)
|
||||
{
|
||||
if(mutex_ >= 0)
|
||||
close(mutex_);
|
||||
unlink(MUTEX_FILE);
|
||||
}
|
||||
--depth;
|
||||
#else
|
||||
ReleaseMutex(mutex_);
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
class SettingsFile : IObject
|
||||
{
|
||||
public:
|
||||
explicit SettingsFile();
|
||||
~SettingsFile();
|
||||
std::vector<std::string> project_list() const;
|
||||
void set_project_list(const std::vector<std::string> &project_list);
|
||||
std::string language() const { return language_; }
|
||||
void set_language(const std::string &language);
|
||||
TiXmlElement *watermarks_node() const { return watermarks_node_; }
|
||||
TiXmlElement *root_node() const { return settings_node_; }
|
||||
size_t inc_watermark_id();
|
||||
TiXmlElement *watermark_node(size_t id, bool can_create = false);
|
||||
LanguageManager *language_manager() const { return language_manager_; }
|
||||
void Save();
|
||||
bool watermarks_node_created() const { return watermarks_node_created_; }
|
||||
bool auto_save_project() const { return auto_save_project_; };
|
||||
void set_auto_save_project(bool auto_save_project);
|
||||
private:
|
||||
void Open();
|
||||
std::string file_name_;
|
||||
TiXmlDocument *document_;
|
||||
TiXmlElement *root_node_;
|
||||
TiXmlElement *watermarks_node_;
|
||||
TiXmlElement *settings_node_;
|
||||
uint64_t last_write_time_;
|
||||
std::string language_;
|
||||
LanguageManager *language_manager_;
|
||||
bool watermarks_node_created_;
|
||||
bool auto_save_project_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
SettingsFile(const SettingsFile &);
|
||||
SettingsFile &operator =(const SettingsFile &);
|
||||
};
|
||||
|
||||
SettingsFile &settings_file();
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user