Implement StringToKeyValues.

This commit is contained in:
Ryan Stecker 2014-07-04 11:58:08 -05:00
parent cde927112a
commit 878a82a6e5
2 changed files with 40 additions and 1 deletions

View File

@ -797,6 +797,32 @@ static cell_t smn_FileToKeyValues(IPluginContext *pCtx, const cell_t *params)
return g_HL2.KVLoadFromFile(kv, basefilesystem, path);
}
static cell_t smn_StringToKeyValues(IPluginContext *pCtx, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
HandleError herr;
HandleSecurity sec;
KeyValueStack *pStk;
KeyValues *kv;
sec.pOwner = NULL;
sec.pIdentity = g_pCoreIdent;
if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk))
!= HandleError_None)
{
return pCtx->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr);
}
char *buffer;
char *resourceName;
pCtx->LocalToString(params[2], &buffer);
pCtx->LocalToString(params[3], &resourceName);
kv = pStk->pCurRoot.front();
return kv->LoadFromBuffer(resourceName, buffer);
}
static cell_t smn_KvSetEscapeSequences(IPluginContext *pCtx, const cell_t *params)
{
Handle_t hndl = static_cast<Handle_t>(params[1]);
@ -1101,6 +1127,7 @@ REGISTER_NATIVES(keyvaluenatives)
{"KvGetDataType", smn_KvGetDataType},
{"KeyValuesToFile", smn_KeyValuesToFile},
{"FileToKeyValues", smn_FileToKeyValues},
{"StringToKeyValues", smn_StringToKeyValues},
{"KvSetEscapeSequences", smn_KvSetEscapeSequences},
{"KvDeleteThis", smn_KvDeleteThis},
{"KvDeleteKey", smn_KvDeleteKey},
@ -1113,4 +1140,4 @@ REGISTER_NATIVES(keyvaluenatives)
{"KvGetVector", smn_KvGetVector},
{"KvSetVector", smn_KvSetVector},
{NULL, NULL}
};
};

View File

@ -360,6 +360,18 @@ native bool:KeyValuesToFile(Handle:kv, const String:file[]);
*/
native bool:FileToKeyValues(Handle:kv, const String:file[]);
/**
* Converts a given string to a KeyValues tree. The string is read into
* the current postion of the tree.
*
* @param kv KeyValues Handle.
* @param buffer String buffer to load into the KeyValues.
* @param resourceName The resource name of the KeyValues, used for error tracking purposes.
* @return True on success, false otherwise.
* @error Invalid Handle.
*/
native bool:StringToKeyValues(Handle:kv, const String:buffer[], const String:resourceName[]="StringToKeyValues");
/**
* Sets whether or not the KeyValues parser will read escape sequences.
* For example, \n would be read as a literal newline. This defaults