Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SoftEtherVPN/SoftEtherVPN_Stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordnobori <da.git@softether.co.jp>2014-10-03 19:09:23 +0400
committerdnobori <da.git@softether.co.jp>2014-10-03 19:09:23 +0400
commit10d4b2c43ddc9fcc2f318c76e3d66f11ef383fad (patch)
tree0f6a9b771241360febb89ab977d2c45ff9654d90 /src/Mayaqua/Cfg.c
parent16b713b98da8dba29f0f845d5a8c36d6f7c34824 (diff)
v4.10-9505-beta
Diffstat (limited to 'src/Mayaqua/Cfg.c')
-rw-r--r--src/Mayaqua/Cfg.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/Mayaqua/Cfg.c b/src/Mayaqua/Cfg.c
index 0e208f4a..2a3eb34e 100644
--- a/src/Mayaqua/Cfg.c
+++ b/src/Mayaqua/Cfg.c
@@ -259,8 +259,26 @@ CFG_RW *NewCfgRwEx(FOLDER **root, char *cfg_name, bool dont_backup)
}
CFG_RW *NewCfgRwExW(FOLDER **root, wchar_t *cfg_name, bool dont_backup)
{
+ return NewCfgRwEx2W(root, cfg_name, dont_backup, NULL);
+}
+CFG_RW *NewCfgRwEx2A(FOLDER **root, char *cfg_name_a, bool dont_backup, char *template_name_a)
+{
+ CFG_RW *ret;
+ wchar_t *cfg_name_w = CopyStrToUni(cfg_name_a);
+ wchar_t *template_name_w = CopyStrToUni(template_name_a);
+
+ ret = NewCfgRwEx2W(root, cfg_name_w, dont_backup, template_name_w);
+
+ Free(cfg_name_w);
+ Free(template_name_w);
+
+ return ret;
+}
+CFG_RW *NewCfgRwEx2W(FOLDER **root, wchar_t *cfg_name, bool dont_backup, wchar_t *template_name)
+{
CFG_RW *rw;
FOLDER *f;
+ bool loaded_from_template = false;
// Validate arguments
if (cfg_name == NULL || root == NULL)
{
@@ -270,6 +288,18 @@ CFG_RW *NewCfgRwExW(FOLDER **root, wchar_t *cfg_name, bool dont_backup)
f = CfgReadW(cfg_name);
if (f == NULL)
{
+ // Load from template
+ if (UniIsEmptyStr(template_name) == false)
+ {
+ f = CfgReadW(template_name);
+ if (f != NULL)
+ {
+ loaded_from_template = true;
+
+ goto LABEL_CONTIUNE;
+ }
+ }
+
rw = ZeroMalloc(sizeof(CFG_RW));
rw->lock = NewLock();
rw->FileNameW = CopyUniStr(cfg_name);
@@ -281,10 +311,18 @@ CFG_RW *NewCfgRwExW(FOLDER **root, wchar_t *cfg_name, bool dont_backup)
return rw;
}
+LABEL_CONTIUNE:
rw = ZeroMalloc(sizeof(CFG_RW));
rw->FileNameW = CopyUniStr(cfg_name);
rw->FileName = CopyUniToStr(cfg_name);
- rw->Io = FileOpenW(cfg_name, false);
+ if (loaded_from_template == false)
+ {
+ rw->Io = FileOpenW(cfg_name, false);
+ }
+ else
+ {
+ rw->Io = FileCreateW(cfg_name);
+ }
rw->lock = NewLock();
*root = f;