From: Pierre Ossman Date: Sun, 15 Jan 2023 13:01:28 +0000 (+0100) Subject: Use std::vector for temporary char arrays X-Git-Tag: v1.13.90~87^2~11 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e6c5b29f12780303299506fe04f089bc98b80c91;p=tigervnc.git Use std::vector for temporary char arrays It's more standard and familiar than our custom CharArray type, and it still gives us automatic freeing of the buffer. We could probably have used std::unique_ptr instead, but we are currently targeting older compilers where C++11 isn't standard yet. --- diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx index da036821..8e545b2f 100644 --- a/common/rfb/CConnection.cxx +++ b/common/rfb/CConnection.cxx @@ -360,12 +360,12 @@ bool CConnection::processSecurityReasonMsg() return false; is->clearRestorePoint(); - CharArray reason(len + 1); - is->readBytes(reason.buf, len); - reason.buf[len] = '\0'; + std::vector reason(len + 1); + is->readBytes(reason.data(), len); + reason[len] = '\0'; state_ = RFBSTATE_INVALID; - throw AuthFailureException(reason.buf); + throw AuthFailureException(reason.data()); } bool CConnection::processInitMsg() diff --git a/common/rfb/CMsgReader.cxx b/common/rfb/CMsgReader.cxx index 42647119..0052d35e 100644 --- a/common/rfb/CMsgReader.cxx +++ b/common/rfb/CMsgReader.cxx @@ -33,7 +33,6 @@ #include #include #include -#include #include #include @@ -73,10 +72,10 @@ bool CMsgReader::readServerInit() if (!is->hasDataOrRestore(len)) return false; is->clearRestorePoint(); - CharArray name(len + 1); - is->readBytes(name.buf, len); - name.buf[len] = '\0'; - handler->serverInit(width, height, pf, name.buf); + std::vector name(len + 1); + is->readBytes(name.data(), len); + name[len] = '\0'; + handler->serverInit(width, height, pf, name.data()); return true; } @@ -275,9 +274,9 @@ bool CMsgReader::readServerCutText() vlog.error("cut text too long (%d bytes) - ignoring",len); return true; } - CharArray ca(len); - is->readBytes(ca.buf, len); - std::string filtered(convertLF(ca.buf, len)); + std::vector ca(len); + is->readBytes(ca.data(), len); + std::string filtered(convertLF(ca.data(), len)); handler->serverCutText(filtered.c_str()); return true; @@ -762,14 +761,14 @@ bool CMsgReader::readSetDesktopName(int x, int y, int w, int h) return false; is->clearRestorePoint(); - CharArray name(len + 1); - is->readBytes(name.buf, len); - name.buf[len] = '\0'; + std::vector name(len + 1); + is->readBytes(name.data(), len); + name[len] = '\0'; if (x || y || w || h) { vlog.error("Ignoring DesktopName rect with non-zero position/size"); } else { - handler->setName(name.buf); + handler->setName(name.data()); } return true; diff --git a/common/rfb/SMsgReader.cxx b/common/rfb/SMsgReader.cxx index 3fddf302..28841704 100644 --- a/common/rfb/SMsgReader.cxx +++ b/common/rfb/SMsgReader.cxx @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -314,9 +313,9 @@ bool SMsgReader::readClientCutText() return true; } - CharArray ca(len); - is->readBytes(ca.buf, len); - std::string filtered(convertLF(ca.buf, len)); + std::vector ca(len); + is->readBytes(ca.data(), len); + std::string filtered(convertLF(ca.data(), len)); handler->clientCutText(filtered.c_str()); return true; diff --git a/win/rfb_win32/Registry.cxx b/win/rfb_win32/Registry.cxx index aa497a29..b1e8b07d 100644 --- a/win/rfb_win32/Registry.cxx +++ b/win/rfb_win32/Registry.cxx @@ -214,40 +214,40 @@ std::string RegKey::getRepresentation(const char* valname) const { LONG result = RegQueryValueEx(key, valname, 0, &type, 0, &length); if (result != ERROR_SUCCESS) throw rdr::SystemException("get registry value length", result); - CharArray data(length); - result = RegQueryValueEx(key, valname, 0, &type, (BYTE*)data.buf, &length); + std::vector data(length); + result = RegQueryValueEx(key, valname, 0, &type, (BYTE*)data.data(), &length); if (result != ERROR_SUCCESS) throw rdr::SystemException("get registry value", result); switch (type) { case REG_BINARY: { - return binToHex((const uint8_t*)data.buf, length); + return binToHex(data.data(), length); } case REG_SZ: if (length) { - return std::string(data.buf, length); + return std::string((char*)data.data(), length); } else { return ""; } case REG_DWORD: { char tmp[16]; - sprintf(tmp, "%lu", *((DWORD*)data.buf)); + sprintf(tmp, "%lu", *((DWORD*)data.data())); return tmp; } case REG_EXPAND_SZ: { if (length) { - std::string str(data.buf, length); + std::string str((char*)data.data(), length); DWORD required = ExpandEnvironmentStrings(str.c_str(), 0, 0); if (required==0) throw rdr::SystemException("ExpandEnvironmentStrings", GetLastError()); - CharArray result(required); - length = ExpandEnvironmentStrings(str.c_str(), result.buf, required); + std::vector result(required); + length = ExpandEnvironmentStrings(str.c_str(), result.data(), required); if (required pattern(SendMessage(listBox, LB_GETTEXTLEN, item, 0)+1); + SendMessage(listBox, LB_GETTEXT, item, (LPARAM)pattern.data()); - if (hostDialog.showDialog(pattern.buf)) { + if (hostDialog.showDialog(pattern.data())) { const char* newPat = hostDialog.getPattern(); if (newPat) { - item = SendMessage(listBox, LB_FINDSTRINGEXACT, item, (LPARAM)pattern.buf); + item = SendMessage(listBox, LB_FINDSTRINGEXACT, item, (LPARAM)pattern.data()); if (item != LB_ERR) { SendMessage(listBox, LB_DELETESTRING, item, 0); SendMessage(listBox, LB_INSERTSTRING, item, (LPARAM)newPat); @@ -189,10 +189,10 @@ namespace rfb { { HWND listBox = GetDlgItem(handle, IDC_HOSTS); int item = SendMessage(listBox, LB_GETCURSEL, 0, 0); - CharArray pattern(SendMessage(listBox, LB_GETTEXTLEN, item, 0)+1); - SendMessage(listBox, LB_GETTEXT, item, (LPARAM)pattern.buf); + std::vector pattern(SendMessage(listBox, LB_GETTEXTLEN, item, 0)+1); + SendMessage(listBox, LB_GETTEXT, item, (LPARAM)pattern.data()); SendMessage(listBox, LB_DELETESTRING, item, 0); - SendMessage(listBox, LB_INSERTSTRING, item-1, (LPARAM)pattern.buf); + SendMessage(listBox, LB_INSERTSTRING, item-1, (LPARAM)pattern.data()); SendMessage(listBox, LB_SETCURSEL, item-1, 0); onCommand(IDC_HOSTS, EN_CHANGE); } @@ -202,10 +202,10 @@ namespace rfb { { HWND listBox = GetDlgItem(handle, IDC_HOSTS); int item = SendMessage(listBox, LB_GETCURSEL, 0, 0); - CharArray pattern(SendMessage(listBox, LB_GETTEXTLEN, item, 0)+1); - SendMessage(listBox, LB_GETTEXT, item, (LPARAM)pattern.buf); + std::vector pattern(SendMessage(listBox, LB_GETTEXTLEN, item, 0)+1); + SendMessage(listBox, LB_GETTEXT, item, (LPARAM)pattern.data()); SendMessage(listBox, LB_DELETESTRING, item, 0); - SendMessage(listBox, LB_INSERTSTRING, item+1, (LPARAM)pattern.buf); + SendMessage(listBox, LB_INSERTSTRING, item+1, (LPARAM)pattern.data()); SendMessage(listBox, LB_SETCURSEL, item+1, 0); onCommand(IDC_HOSTS, EN_CHANGE); }