Browse Source

Clean up string spin-washing in the Vault API

Adam Johnson 10 years ago
parent
commit
ee0848ce30
  1. 6
      Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommandsNet.cpp
  2. 17
      Sources/Plasma/FeatureLib/pfPython/pyAgeVault.cpp
  3. 4
      Sources/Plasma/FeatureLib/pfPython/pyAgeVault.h
  4. 9
      Sources/Plasma/FeatureLib/pfPython/pyVault.cpp
  5. 2
      Sources/Plasma/FeatureLib/pfPython/pyVault.h
  6. 10
      Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp
  7. 57
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp
  8. 8
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.h
  9. 52
      Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp
  10. 14
      Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h

6
Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommandsNet.cpp

@ -789,11 +789,7 @@ PF_CONSOLE_CMD( Net_Vault,
"string stationName, string mtSpawnPt", "string stationName, string mtSpawnPt",
"Register an MT Station with your Nexus" ) "Register an MT Station with your Nexus" )
{ {
wchar_t wName[MAX_PATH]; VaultRegisterMTStationAndWait((char*)params[0], (char*)params[1]);
wchar_t wObj[MAX_PATH];
StrToUnicode(wName, params[0], arrsize(wName));
StrToUnicode(wObj, params[1], arrsize(wObj));
VaultRegisterMTStationAndWait ( wName, wObj );
PrintString("Registered MT Station."); PrintString("Registered MT Station.");
} }

17
Sources/Plasma/FeatureLib/pfPython/pyAgeVault.cpp

@ -173,27 +173,18 @@ plUUID pyAgeVault::GetAgeGuid( void )
/////////////// ///////////////
// Chronicle // Chronicle
PyObject* pyAgeVault::FindChronicleEntry( const char * entryName ) PyObject* pyAgeVault::FindChronicleEntry( const plString& entryName )
{ {
wchar_t wEntryName[kMaxVaultNodeStringLength]; if (hsRef<RelVaultNode> rvn = VaultFindAgeChronicleEntry(entryName))
StrToUnicode(wEntryName, entryName, arrsize(wEntryName));
if (hsRef<RelVaultNode> rvn = VaultFindAgeChronicleEntry(wEntryName))
return pyVaultChronicleNode::New(rvn); return pyVaultChronicleNode::New(rvn);
// just return a None object // just return a None object
PYTHON_RETURN_NONE; PYTHON_RETURN_NONE;
} }
void pyAgeVault::AddChronicleEntry( const char * name, uint32_t type, const char * value ) void pyAgeVault::AddChronicleEntry( const plString& name, uint32_t type, const plString& value )
{ {
wchar_t * wEntryName = StrDupToUnicode(name); VaultAddAgeChronicleEntry(name, type, value);
wchar_t * wEntryValue = StrDupToUnicode(value);
VaultAddAgeChronicleEntry(wEntryName, type, wEntryValue);
free(wEntryName);
free(wEntryValue);
} }
// AGE DEVICES. AKA IMAGERS, WHATEVER. // AGE DEVICES. AKA IMAGERS, WHATEVER.

4
Sources/Plasma/FeatureLib/pfPython/pyAgeVault.h

@ -92,8 +92,8 @@ public:
PyObject* GetSubAgesFolder( void ); // returns pyVaultFolderNode PyObject* GetSubAgesFolder( void ); // returns pyVaultFolderNode
PyObject* GetChronicleFolder( void ); // returns pyVaultFolderNode PyObject* GetChronicleFolder( void ); // returns pyVaultFolderNode
// Age chronicle (not the player chronicle!) // Age chronicle (not the player chronicle!)
PyObject* FindChronicleEntry( const char * entryName ); // returns pyVaultChronicleNode PyObject* FindChronicleEntry( const plString& entryName ); // returns pyVaultChronicleNode
void AddChronicleEntry( const char * name, uint32_t type, const char * value ); void AddChronicleEntry( const plString& name, uint32_t type, const plString& value );
// Players who have published to devices in this age // Players who have published to devices in this age
PyObject* GetPeopleIKnowAboutFolder( void ); // returns pyVaultPlayerInfoListNode PyObject* GetPeopleIKnowAboutFolder( void ); // returns pyVaultPlayerInfoListNode
// PERSONAL AGE SPECIFIC // PERSONAL AGE SPECIFIC

9
Sources/Plasma/FeatureLib/pfPython/pyVault.cpp

@ -489,15 +489,10 @@ bool pyVault::AmAgeCzar( const pyAgeInfoStruct * ageInfo )
return VaultAmCzarOfAge(ageInstId); return VaultAmCzarOfAge(ageInstId);
} }
void pyVault::RegisterMTStation( const char * stationName, const char * backLinkSpawnPtObjName ) void pyVault::RegisterMTStation( const plString& stationName, const plString& backLinkSpawnPtObjName )
{ {
wchar_t wStationName[256];
wchar_t wSpawnPt[256];
StrToUnicode(wStationName, stationName, arrsize(wStationName));
StrToUnicode(wSpawnPt, backLinkSpawnPtObjName, arrsize(wSpawnPt));
// Note: This doesn't actually block (~Hoikas) // Note: This doesn't actually block (~Hoikas)
VaultRegisterMTStationAndWait( wStationName, wSpawnPt); VaultRegisterMTStationAndWait(stationName, backLinkSpawnPtObjName);
} }
void pyVault::RegisterOwnedAge( const pyAgeLinkStruct & link ) void pyVault::RegisterOwnedAge( const pyAgeLinkStruct & link )

2
Sources/Plasma/FeatureLib/pfPython/pyVault.h

@ -160,7 +160,7 @@ public:
void RegisterVisitAge( const pyAgeLinkStruct & link ); void RegisterVisitAge( const pyAgeLinkStruct & link );
void UnRegisterVisitAge( const char * guid ); void UnRegisterVisitAge( const char * guid );
// Register a nexus station // Register a nexus station
void RegisterMTStation( const char * stationName, const char * mtSpawnPt ); void RegisterMTStation( const plString& stationName, const plString& mtSpawnPt );
/////////////// ///////////////
// Invite player to visit an age. // Invite player to visit an age.

10
Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp

@ -1069,14 +1069,10 @@ uint8_t plNetLinkingMgr::IPreProcessLink(void)
case plNetCommon::LinkingRules::kChildAgeBook: case plNetCommon::LinkingRules::kChildAgeBook:
{ {
plAgeLinkStruct childLink; plAgeLinkStruct childLink;
wchar_t parentAgeName[MAX_PATH];
if (link->HasParentAgeFilename())
StrToUnicode(parentAgeName, link->GetParentAgeFilename(), arrsize(parentAgeName));
switch(VaultAgeFindOrCreateChildAgeLink( switch(VaultAgeFindOrCreateChildAgeLink(
(link->HasParentAgeFilename() ? parentAgeName : nil), link->GetParentAgeFilename(),
info, info,
&childLink)) &childLink))
{ {
case static_cast<uint8_t>(hsFail): case static_cast<uint8_t>(hsFail):
success = kLinkFailed; success = kLinkFailed;

57
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp

@ -686,10 +686,10 @@ struct VaultInitAgeTrans : NetAuthTrans {
plUUID m_ageInstId; plUUID m_ageInstId;
plUUID m_parentAgeInstId; plUUID m_parentAgeInstId;
wchar_t * m_ageFilename; plString m_ageFilename;
wchar_t * m_ageInstName; plString m_ageInstName;
wchar_t * m_ageUserName; plString m_ageUserName;
wchar_t * m_ageDesc; plString m_ageDesc;
unsigned m_ageSequenceNumber; unsigned m_ageSequenceNumber;
unsigned m_ageLanguage; unsigned m_ageLanguage;
@ -701,10 +701,10 @@ struct VaultInitAgeTrans : NetAuthTrans {
void * param, // optional void * param, // optional
const plUUID& ageInstId, // optional. is used in match const plUUID& ageInstId, // optional. is used in match
const plUUID& parentAgeInstId, // optional. is used in match const plUUID& parentAgeInstId, // optional. is used in match
const wchar_t ageFilename[], // optional. is used in match const plString ageFilename, // optional. is used in match
const wchar_t ageInstName[], // optional. not used in match const plString ageInstName, // optional. not used in match
const wchar_t ageUserName[], // optional. not used in match const plString ageUserName, // optional. not used in match
const wchar_t ageDesc[], // optional. not used in match const plString ageDesc, // optional. not used in match
unsigned ageSequenceNumber, // optional. not used in match unsigned ageSequenceNumber, // optional. not used in match
unsigned ageLanguage // optional. not used in match unsigned ageLanguage // optional. not used in match
); );
@ -3815,10 +3815,10 @@ VaultInitAgeTrans::VaultInitAgeTrans (
void * param, // optional void * param, // optional
const plUUID& ageInstId, // optional. is used in match const plUUID& ageInstId, // optional. is used in match
const plUUID& parentAgeInstId, // optional. is used in match const plUUID& parentAgeInstId, // optional. is used in match
const wchar_t ageFilename[], // optional. is used in match const plString ageFilename, // optional. is used in match
const wchar_t ageInstName[], // optional. not used in match const plString ageInstName, // optional. not used in match
const wchar_t ageUserName[], // optional. not used in match const plString ageUserName, // optional. not used in match
const wchar_t ageDesc[], // optional. not used in match const plString ageDesc, // optional. not used in match
unsigned ageSequenceNumber, // optional. not used in match unsigned ageSequenceNumber, // optional. not used in match
unsigned ageLanguage // optional. not used in match unsigned ageLanguage // optional. not used in match
) : NetAuthTrans(kVaultInitAgeTrans) ) : NetAuthTrans(kVaultInitAgeTrans)
@ -3826,10 +3826,6 @@ VaultInitAgeTrans::VaultInitAgeTrans (
, m_param(param) , m_param(param)
, m_ageInstId(ageInstId) , m_ageInstId(ageInstId)
, m_parentAgeInstId(parentAgeInstId) , m_parentAgeInstId(parentAgeInstId)
, m_ageFilename(StrDup(ageFilename ? ageFilename : L""))
, m_ageInstName(StrDup(ageInstName ? ageInstName : L""))
, m_ageUserName(StrDup(ageUserName ? ageUserName : L""))
, m_ageDesc(StrDup(ageDesc ? ageDesc : L""))
, m_ageSequenceNumber(ageSequenceNumber) , m_ageSequenceNumber(ageSequenceNumber)
, m_ageLanguage(ageLanguage) , m_ageLanguage(ageLanguage)
, m_ageId(0) , m_ageId(0)
@ -3839,10 +3835,6 @@ VaultInitAgeTrans::VaultInitAgeTrans (
//============================================================================ //============================================================================
VaultInitAgeTrans::~VaultInitAgeTrans () { VaultInitAgeTrans::~VaultInitAgeTrans () {
free(m_ageFilename);
free(m_ageInstName);
free(m_ageUserName);
free(m_ageDesc);
} }
//============================================================================ //============================================================================
@ -3850,17 +3842,22 @@ bool VaultInitAgeTrans::Send () {
if (!AcquireConn()) if (!AcquireConn())
return false; return false;
plStringBuffer<uint16_t> ageFilename = m_ageFilename.ToUtf16();
plStringBuffer<uint16_t> ageInstName = m_ageInstName.ToUtf16();
plStringBuffer<uint16_t> ageUserName = m_ageUserName.ToUtf16();
plStringBuffer<uint16_t> ageDesc = m_ageDesc.ToUtf16();
const uintptr_t msg[] = { const uintptr_t msg[] = {
kCli2Auth_VaultInitAgeRequest, kCli2Auth_VaultInitAgeRequest,
m_transId, m_transId,
(uintptr_t) &m_ageInstId, (uintptr_t) &m_ageInstId,
(uintptr_t) &m_parentAgeInstId, (uintptr_t) &m_parentAgeInstId,
(uintptr_t) m_ageFilename, (uintptr_t) ageFilename.GetData(),
(uintptr_t) m_ageInstName, (uintptr_t) ageInstName.GetData(),
(uintptr_t) m_ageUserName, (uintptr_t) ageUserName.GetData(),
(uintptr_t) m_ageDesc, (uintptr_t) ageDesc.GetData(),
m_ageSequenceNumber, m_ageSequenceNumber,
m_ageLanguage, m_ageLanguage,
}; };
m_conn->Send(msg, arrsize(msg)); m_conn->Send(msg, arrsize(msg));
@ -5736,10 +5733,10 @@ void NetCliAuthVaultSendNode (
void NetCliAuthVaultInitAge ( void NetCliAuthVaultInitAge (
const plUUID& ageInstId, // optional. is used in match const plUUID& ageInstId, // optional. is used in match
const plUUID& parentAgeInstId, // optional. is used in match const plUUID& parentAgeInstId, // optional. is used in match
const wchar_t ageFilename[], // optional. is used in match const plString& ageFilename, // optional. is used in match
const wchar_t ageInstName[], // optional. not used in match const plString& ageInstName, // optional. not used in match
const wchar_t ageUserName[], // optional. not used in match const plString& ageUserName, // optional. not used in match
const wchar_t ageDesc[], // optional. not used in match const plString& ageDesc, // optional. not used in match
unsigned ageSequenceNumber, // optional. not used in match unsigned ageSequenceNumber, // optional. not used in match
unsigned ageLanguage, // optional. not used in match unsigned ageLanguage, // optional. not used in match
FNetCliAuthAgeInitCallback callback, // optional FNetCliAuthAgeInitCallback callback, // optional

8
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.h

@ -521,10 +521,10 @@ typedef void (*FNetCliAuthAgeInitCallback) (
void NetCliAuthVaultInitAge ( void NetCliAuthVaultInitAge (
const plUUID& ageInstId, // optional. is used in match const plUUID& ageInstId, // optional. is used in match
const plUUID& parentAgeInstId, // optional. is used in match const plUUID& parentAgeInstId, // optional. is used in match
const wchar_t ageFilename[], // optional. is used in match const plString& ageFilename, // optional. is used in match
const wchar_t ageInstName[], // optional. not used in match const plString& ageInstName, // optional. not used in match
const wchar_t ageUserName[], // optional. not used in match const plString& ageUserName, // optional. not used in match
const wchar_t ageDesc[], // optional. not used in match const plString& ageDesc, // optional. not used in match
unsigned ageSequenceNumber, // optional. not used in match unsigned ageSequenceNumber, // optional. not used in match
unsigned ageLanguage, // optional. not used in match unsigned ageLanguage, // optional. not used in match
FNetCliAuthAgeInitCallback callback, // optional FNetCliAuthAgeInitCallback callback, // optional

52
Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp

@ -2074,23 +2074,13 @@ void VaultInitAge (
) { ) {
VaultAgeInitTrans * trans = new VaultAgeInitTrans(callback, state, param); VaultAgeInitTrans * trans = new VaultAgeInitTrans(callback, state, param);
wchar_t ageFilename[MAX_PATH];
wchar_t ageInstName[MAX_PATH];
wchar_t ageUserName[MAX_PATH];
wchar_t ageDesc[1024];
StrToUnicode(ageFilename, info->GetAgeFilename(), arrsize(ageFilename));
StrToUnicode(ageInstName, info->GetAgeInstanceName(), arrsize(ageInstName));
StrToUnicode(ageUserName, info->GetAgeUserDefinedName(), arrsize(ageUserName));
StrToUnicode(ageDesc, info->GetAgeDescription(), arrsize(ageDesc));
NetCliAuthVaultInitAge( NetCliAuthVaultInitAge(
*info->GetAgeInstanceGuid(), *info->GetAgeInstanceGuid(),
parentAgeInstId, parentAgeInstId,
ageFilename, info->GetAgeFilename(),
ageInstName, info->GetAgeInstanceName(),
ageUserName, info->GetAgeUserDefinedName(),
ageDesc, info->GetAgeDescription(),
info->GetAgeSequenceNumber(), info->GetAgeSequenceNumber(),
info->GetAgeLanguage(), info->GetAgeLanguage(),
VaultAgeInitTrans::AgeInitCallback, VaultAgeInitTrans::AgeInitCallback,
@ -3440,17 +3430,14 @@ bool VaultAmCzarOfAge (const plUUID& ageInstId) {
//============================================================================ //============================================================================
bool VaultRegisterMTStationAndWait ( bool VaultRegisterMTStationAndWait (
const wchar_t stationName[], const plString& stationName,
const wchar_t linkBackSpawnPtObjName[] const plString& linkBackSpawnPtObjName
) { ) {
plAgeInfoStruct info; plAgeInfoStruct info;
info.SetAgeFilename(kCityAgeFilename); info.SetAgeFilename(kCityAgeFilename);
if (hsRef<RelVaultNode> rvn = VaultGetOwnedAgeLink(&info)) { if (hsRef<RelVaultNode> rvn = VaultGetOwnedAgeLink(&info)) {
char title[MAX_PATH], spawnPt[MAX_PATH];
StrToAnsi(title, stationName, arrsize(title));
StrToAnsi(spawnPt, linkBackSpawnPtObjName, arrsize(spawnPt));
VaultAgeLinkNode link(rvn); VaultAgeLinkNode link(rvn);
link.AddSpawnPoint(plSpawnPointInfo(title, spawnPt)); link.AddSpawnPoint({ stationName, linkBackSpawnPtObjName });
return true; return true;
} }
return false; return false;
@ -3669,16 +3656,16 @@ hsRef<RelVaultNode> VaultFindAgeSubAgeLink (const plAgeInfoStruct * info) {
} }
//============================================================================ //============================================================================
hsRef<RelVaultNode> VaultFindAgeChronicleEntry (const wchar_t entryName[], int entryType) { hsRef<RelVaultNode> VaultFindAgeChronicleEntry (const plString& entryName, int entryType) {
hsAssert(false, "eric, implement me"); hsAssert(false, "eric, implement me");
return nil; return nil;
} }
//============================================================================ //============================================================================
void VaultAddAgeChronicleEntry ( void VaultAddAgeChronicleEntry (
const wchar_t entryName[], const plString& entryName,
int entryType, int entryType,
const wchar_t entryValue[] const plString& entryValue
) { ) {
hsAssert(false, "eric, implement me"); hsAssert(false, "eric, implement me");
} }
@ -4258,7 +4245,7 @@ static void _AddChildNodeCallback (
//============================================================================ //============================================================================
bool VaultAgeFindOrCreateChildAgeLinkAndWait ( bool VaultAgeFindOrCreateChildAgeLinkAndWait (
const wchar_t parentAgeName[], const plString& parentAgeName,
const plAgeInfoStruct * info, const plAgeInfoStruct * info,
plAgeLinkStruct * link plAgeLinkStruct * link
) { ) {
@ -4270,15 +4257,12 @@ bool VaultAgeFindOrCreateChildAgeLinkAndWait (
{ // Get id of child ages folder { // Get id of child ages folder
hsRef<RelVaultNode> rvnAgeInfo; hsRef<RelVaultNode> rvnAgeInfo;
if (parentAgeName) { if (!parentAgeName.IsEmpty()) {
char ansi[MAX_PATH];
StrToAnsi(ansi, parentAgeName, arrsize(ansi));
plAgeInfoStruct pinfo; plAgeInfoStruct pinfo;
pinfo.SetAgeFilename(ansi); pinfo.SetAgeFilename(parentAgeName);
if (hsRef<RelVaultNode> rvnAgeLink = VaultGetOwnedAgeLink(&pinfo)) if (hsRef<RelVaultNode> rvnAgeLink = VaultGetOwnedAgeLink(&pinfo))
rvnAgeInfo = rvnAgeLink->GetChildNode(plVault::kNodeType_AgeInfo, 1); rvnAgeInfo = rvnAgeLink->GetChildNode(plVault::kNodeType_AgeInfo, 1);
} } else {
else {
rvnAgeInfo = VaultGetAgeInfoNode(); rvnAgeInfo = VaultGetAgeInfoNode();
} }
@ -4519,17 +4503,15 @@ namespace _VaultCreateChildAge {
}; // namespace _VaultCreateAge }; // namespace _VaultCreateAge
uint8_t VaultAgeFindOrCreateChildAgeLink( uint8_t VaultAgeFindOrCreateChildAgeLink(
const wchar_t parentAgeName[], const plString& parentAgeName,
const plAgeInfoStruct* info, const plAgeInfoStruct* info,
plAgeLinkStruct* link) plAgeLinkStruct* link)
{ {
using namespace _VaultCreateChildAge; using namespace _VaultCreateChildAge;
// First, try to find an already existing ChildAge // First, try to find an already existing ChildAge
char name[MAX_PATH];
StrToAnsi(name, parentAgeName, arrsize(name));
plAgeInfoStruct search; plAgeInfoStruct search;
search.SetAgeFilename(name); search.SetAgeFilename(parentAgeName);
hsRef<RelVaultNode> rvnParentInfo; hsRef<RelVaultNode> rvnParentInfo;
if (hsRef<RelVaultNode> rvnParentLink = VaultGetOwnedAgeLink(&search)) if (hsRef<RelVaultNode> rvnParentLink = VaultGetOwnedAgeLink(&search))

14
Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h

@ -375,8 +375,8 @@ bool VaultAmCzarOfCurrentAge ();
bool VaultAmOwnerOfAge (const plUUID& ageInstId); bool VaultAmOwnerOfAge (const plUUID& ageInstId);
bool VaultAmCzarOfAge (const plUUID& ageInstId); bool VaultAmCzarOfAge (const plUUID& ageInstId);
bool VaultRegisterMTStationAndWait ( bool VaultRegisterMTStationAndWait (
const wchar_t stationName[], const plString& stationName,
const wchar_t linkBackSpawnPtObjName[] const plString& linkBackSpawnPtObjName
); );
void VaultProcessPlayerInbox (); void VaultProcessPlayerInbox ();
@ -402,12 +402,12 @@ hsRef<RelVaultNode> VaultGetAgePublicAgesFolder();
hsRef<RelVaultNode> VaultAgeGetBookshelfFolder(); hsRef<RelVaultNode> VaultAgeGetBookshelfFolder();
hsRef<RelVaultNode> VaultFindAgeSubAgeLink(const plAgeInfoStruct * info); hsRef<RelVaultNode> VaultFindAgeSubAgeLink(const plAgeInfoStruct * info);
hsRef<RelVaultNode> VaultFindAgeChildAgeLink(const plAgeInfoStruct * info); hsRef<RelVaultNode> VaultFindAgeChildAgeLink(const plAgeInfoStruct * info);
hsRef<RelVaultNode> VaultFindAgeChronicleEntry(const wchar_t entryName[], int entryType = -1); hsRef<RelVaultNode> VaultFindAgeChronicleEntry(const plString& entryName, int entryType = -1);
// if entry of same name and type already exists, value is updated // if entry of same name and type already exists, value is updated
void VaultAddAgeChronicleEntry ( void VaultAddAgeChronicleEntry (
const wchar_t entryName[], const plString& entryName,
int entryType, int entryType,
const wchar_t entryValue[] const plString& entryValue
); );
hsRef<RelVaultNode> VaultAgeAddDeviceAndWait(const plString& deviceName); // blocks until completion hsRef<RelVaultNode> VaultAgeAddDeviceAndWait(const plString& deviceName); // blocks until completion
void VaultAgeRemoveDevice (const plString& deviceName); void VaultAgeRemoveDevice (const plString& deviceName);
@ -434,11 +434,11 @@ bool VaultAgeFindOrCreateSubAgeLinkAndWait (
); );
bool VaultAgeFindOrCreateSubAgeLink(const plAgeInfoStruct* info, plAgeLinkStruct* link, const plUUID& arentUuid); bool VaultAgeFindOrCreateSubAgeLink(const plAgeInfoStruct* info, plAgeLinkStruct* link, const plUUID& arentUuid);
bool VaultAgeFindOrCreateChildAgeLinkAndWait ( bool VaultAgeFindOrCreateChildAgeLinkAndWait (
const wchar_t parentAgeName[], // nil --> current age, non-nil --> owned age by given name const plString& parentAgeName, // nil --> current age, non-nil --> owned age by given name
const plAgeInfoStruct * info, const plAgeInfoStruct * info,
plAgeLinkStruct * link plAgeLinkStruct * link
); );
uint8_t VaultAgeFindOrCreateChildAgeLink(const wchar_t parentAgeName[], const plAgeInfoStruct* info, plAgeLinkStruct* link); uint8_t VaultAgeFindOrCreateChildAgeLink(const plString& parentAgeName, const plAgeInfoStruct* info, plAgeLinkStruct* link);

Loading…
Cancel
Save