Add KeyValues.ExportToString (#706)

This commit is contained in:
Michael Flaherty
2017-10-28 12:47:00 +01:00
committed by Asher Baker
parent 90ddc16a4b
commit 404e96ad45
3 changed files with 70 additions and 1 deletions
+57
View File
@@ -1113,6 +1113,61 @@ static cell_t KeyValues_Import(IPluginContext *pContext, const cell_t *params)
return smn_CopySubkeys(pContext, new_params);
}
static cell_t smn_KeyValuesToString(IPluginContext *pContext, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
HandleError herr;
HandleSecurity sec;
KeyValueStack *pStk;
sec.pOwner = NULL;
sec.pIdentity = g_pCoreIdent;
if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk))
!= HandleError_None)
{
return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr);
}
KeyValues *kv;
CUtlBuffer buffer;
kv = pStk->pCurRoot.front();
kv->RecursiveSaveToFile(buffer, 0);
char* outStr;
pContext->LocalToString(params[2], &outStr);
size_t maxlen = static_cast<size_t>(params[3]);
buffer.GetString(outStr, maxlen);
return buffer.TellPut();
}
static cell_t smn_KeyValuesExportLength(IPluginContext *pContext, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
HandleError herr;
HandleSecurity sec;
KeyValueStack *pStk;
sec.pOwner = NULL;
sec.pIdentity = g_pCoreIdent;
if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk))
!= HandleError_None)
{
return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr);
}
KeyValues *kv;
CUtlBuffer buffer;
kv = pStk->pCurRoot.front();
kv->RecursiveSaveToFile(buffer, 0);
return (cell_t)buffer.TellPut();
}
static KeyValueNatives s_KeyValueNatives;
REGISTER_NATIVES(keyvaluenatives)
@@ -1187,6 +1242,8 @@ REGISTER_NATIVES(keyvaluenatives)
{"KeyValues.ImportFromFile", smn_FileToKeyValues},
{"KeyValues.ImportFromString", smn_StringToKeyValues},
{"KeyValues.ExportToFile", smn_KeyValuesToFile},
{"KeyValues.ExportToString", smn_KeyValuesToString},
{"KeyValues.ExportLength.get", smn_KeyValuesExportLength},
{NULL, NULL}
};
+1 -1
View File
@@ -46,6 +46,6 @@ struct KeyValueStack
bool m_bDeleteOnDestroy = true;
};
extern HandleType_t g_KeyValueType;;
extern HandleType_t g_KeyValueType;
#endif // _INCLUDE_SOURCEMOD_KVWRAPPER_H_