void CRegEntry::SetMulti(LPCTSTR lpszValue, size_t nLen, bool bInternal) { size_t nCur = 0, nPrev = 0, nShortLen = nLen; /* When this is internal, there is no need to repopulate the vector. */ if (bInternal) goto SkipNoInternal; iType = REG_MULTI_SZ; vMultiString.clear(); if (nLen <= 2) goto SkipNoInternal; // The string is empty : /0/0 if (*(lpszValue + nShortLen-1) == '/0') nShortLen--; /* Populate a vector with each string part for easy and quick access */ while ((nCur = (int)(_tcschr(lpszValue+nPrev, '/0')-lpszValue)) < nShortLen) { vMultiString.push_back(lpszValue+nPrev); nPrev = nCur+1; } SkipNoInternal: if (REGENTRY_NOTLOADING && REGENTRY_KEYVALID ( KEY_SET_VALUE ) ) RegSetValueEx(__cregOwner->hKey, lpszName, NULL, REG_MULTI_SZ, (LPBYTE)lpszValue, nLen*sizeof(TCHAR)); REGENTRY_TRYCLOSE; __bStored = true; }
CRegEntry& CRegEntry::operator=(LPDWORD lpdwValue) { iType = REG_DWORD; memcpy(&dwDWORD, lpdwValue, sizeof( DWORD )); REGENTRY_ALLOWCONV(true) if (REGENTRY_NOTLOADING && REGENTRY_KEYVALID( KEY_SET_VALUE )) RegSetValueEx(__cregOwner->hKey, lpszName, NULL, REG_DWORD, (LPBYTE)&dwDWORD, sizeof( DWORD )); REGENTRY_TRYCLOSE; __bStored = true; return *this; }
CRegEntry& CRegEntry::operator=(LPCTSTR lpszValue) { size_t nValueLen = (_tcslen(lpszValue) + 1)*sizeof(TCHAR); assert(nValueLen <= _MAX_REG_VALUE); ForceStr(); iType = REG_SZ; _tcsncpy(lpszStr, lpszValue, nValueLen > _MAX_REG_VALUE ? _MAX_REG_VALUE : nValueLen); REGENTRY_ALLOWCONV(true) if (REGENTRY_NOTLOADING && REGENTRY_KEYVALID( KEY_SET_VALUE )) RegSetValueEx(__cregOwner->hKey, lpszName, NULL, REG_SZ, (LPBYTE)lpszValue, nValueLen); REGENTRY_TRYCLOSE; __bStored = true; return *this; }
void CRegEntry::SetBinary(LPBYTE lpbValue, size_t nLen) { if (!nLen) { assert(nLen); return; } iType = REG_BINARY; if (REGENTRY_NOTLOADING && REGENTRY_KEYVALID ( KEY_SET_VALUE ) ) RegSetValueEx(__cregOwner->hKey, lpszName, NULL, REG_BINARY, lpbValue, nLen); REGENTRY_TRYCLOSE; __bStored = true; if (vBytes.size() < nLen) vBytes.reserve(nLen); vBytes.clear(); do { vBytes.push_back(lpbValue[vBytes.size()]); } while (vBytes.size() < nLen); }