From 9bbacc70ab3af6bd652a4c6ff5bea1f7ea307eee Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Wed, 3 Apr 2024 22:05:49 +0200 Subject: [PATCH] Simplify code using range-based for loops These are often more readable as they avoid a lot of the boilerplate of iterating over fixed arrays or STL containers. Note that this change is very conservative to avoid noise in "git blame". Only loops where this is a clear improvement have been converted. --- common/rfb/CMsgWriter.cxx | 5 ++-- common/rfb/DecodeManager.cxx | 33 +++++++++++--------------- common/rfb/EncodeManager.cxx | 6 ++--- common/rfb/H264Decoder.cxx | 10 ++++---- common/rfb/SMsgWriter.cxx | 5 ++-- common/rfb/Security.cxx | 23 ++++++++---------- unix/x0vncserver/x0vncserver.cxx | 27 +++++++-------------- unix/xserver/hw/vnc/XserverDesktop.cc | 7 ++---- vncviewer/MonitorIndicesParameter.cxx | 12 ++++------ vncviewer/OptionsDialog.cxx | 10 ++++---- vncviewer/parameters.cxx | 34 +++++++++++++-------------- vncviewer/vncviewer.cxx | 18 ++++++-------- win/rfb_win32/SecurityPage.cxx | 10 ++++---- 13 files changed, 82 insertions(+), 118 deletions(-) diff --git a/common/rfb/CMsgWriter.cxx b/common/rfb/CMsgWriter.cxx index 8e3f1c27..7d757968 100644 --- a/common/rfb/CMsgWriter.cxx +++ b/common/rfb/CMsgWriter.cxx @@ -65,12 +65,11 @@ void CMsgWriter::writeSetPixelFormat(const PixelFormat& pf) void CMsgWriter::writeSetEncodings(const std::list encodings) { - std::list::const_iterator iter; startMsg(msgTypeSetEncodings); os->pad(1); os->writeU16(encodings.size()); - for (iter = encodings.begin(); iter != encodings.end(); ++iter) - os->writeU32(*iter); + for (uint32_t encoding : encodings) + os->writeU32(encoding); endMsg(); } diff --git a/common/rfb/DecodeManager.cxx b/common/rfb/DecodeManager.cxx index 1e71b8b9..63ab987d 100644 --- a/common/rfb/DecodeManager.cxx +++ b/common/rfb/DecodeManager.cxx @@ -97,8 +97,8 @@ DecodeManager::~DecodeManager() delete producerCond; delete queueMutex; - for (size_t i = 0; i < sizeof(decoders)/sizeof(decoders[0]); i++) - delete decoders[i]; + for (Decoder* decoder : decoders) + delete decoder; } bool DecodeManager::decodeRect(const Rect& r, int encoding, @@ -347,7 +347,6 @@ void DecodeManager::DecodeThread::worker() DecodeManager::QueueEntry* DecodeManager::DecodeThread::findEntry() { - std::list::iterator iter; Region lockedRegion; if (manager->workQueue.empty()) @@ -356,15 +355,7 @@ DecodeManager::QueueEntry* DecodeManager::DecodeThread::findEntry() if (!manager->workQueue.front()->active) return manager->workQueue.front(); - for (iter = manager->workQueue.begin(); - iter != manager->workQueue.end(); - ++iter) { - DecodeManager::QueueEntry* entry; - - std::list::iterator iter2; - - entry = *iter; - + for (DecodeManager::QueueEntry* entry : manager->workQueue) { // Another thread working on this? if (entry->active) goto next; @@ -372,8 +363,10 @@ DecodeManager::QueueEntry* DecodeManager::DecodeThread::findEntry() // If this is an ordered decoder then make sure this is the first // rectangle in the queue for that decoder if (entry->decoder->flags & DecoderOrdered) { - for (iter2 = manager->workQueue.begin(); iter2 != iter; ++iter2) { - if (entry->encoding == (*iter2)->encoding) + for (DecodeManager::QueueEntry* entry2 : manager->workQueue) { + if (entry2 == entry) + break; + if (entry->encoding == entry2->encoding) goto next; } } @@ -381,15 +374,17 @@ DecodeManager::QueueEntry* DecodeManager::DecodeThread::findEntry() // For a partially ordered decoder we must ask the decoder for each // pair of rectangles. if (entry->decoder->flags & DecoderPartiallyOrdered) { - for (iter2 = manager->workQueue.begin(); iter2 != iter; ++iter2) { - if (entry->encoding != (*iter2)->encoding) + for (DecodeManager::QueueEntry* entry2 : manager->workQueue) { + if (entry2 == entry) + break; + if (entry->encoding != entry2->encoding) continue; if (entry->decoder->doRectsConflict(entry->rect, entry->bufferStream->data(), entry->bufferStream->length(), - (*iter2)->rect, - (*iter2)->bufferStream->data(), - (*iter2)->bufferStream->length(), + entry2->rect, + entry2->bufferStream->data(), + entry2->bufferStream->length(), *entry->server)) goto next; } diff --git a/common/rfb/EncodeManager.cxx b/common/rfb/EncodeManager.cxx index 7a15e0c2..5c1429d2 100644 --- a/common/rfb/EncodeManager.cxx +++ b/common/rfb/EncodeManager.cxx @@ -161,12 +161,10 @@ EncodeManager::EncodeManager(SConnection* conn_) EncodeManager::~EncodeManager() { - std::vector::iterator iter; - logStats(); - for (iter = encoders.begin();iter != encoders.end();iter++) - delete *iter; + for (Encoder* encoder : encoders) + delete encoder; } void EncodeManager::logStats() diff --git a/common/rfb/H264Decoder.cxx b/common/rfb/H264Decoder.cxx index 1f79c4ff..26bb9348 100644 --- a/common/rfb/H264Decoder.cxx +++ b/common/rfb/H264Decoder.cxx @@ -51,17 +51,17 @@ H264Decoder::~H264Decoder() void H264Decoder::resetContexts() { os::AutoMutex lock(&mutex); - for (std::deque::iterator it = contexts.begin(); it != contexts.end(); it++) - delete *it; + for (H264DecoderContext* context : contexts) + delete context; contexts.clear(); } H264DecoderContext* H264Decoder::findContext(const Rect& r) { os::AutoMutex m(&mutex); - for (std::deque::iterator it = contexts.begin(); it != contexts.end(); it++) - if ((*it)->isEqualRect(r)) - return *it; + for (H264DecoderContext* context : contexts) + if (context->isEqualRect(r)) + return context; return nullptr; } diff --git a/common/rfb/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx index 43d97853..0c03b51d 100644 --- a/common/rfb/SMsgWriter.cxx +++ b/common/rfb/SMsgWriter.cxx @@ -508,10 +508,9 @@ void SMsgWriter::writeNoDataRects() { if (!extendedDesktopSizeMsgs.empty()) { if (client->supportsEncoding(pseudoEncodingExtendedDesktopSize)) { - std::list::const_iterator ri; - for (ri = extendedDesktopSizeMsgs.begin();ri != extendedDesktopSizeMsgs.end();++ri) { + for (ExtendedDesktopSizeMsg msg : extendedDesktopSizeMsgs) { // FIXME: We can probably skip multiple reasonServer entries - writeExtendedDesktopSizeRect(ri->reason, ri->result, + writeExtendedDesktopSizeRect(msg.reason, msg.result, client->width(), client->height(), client->screenLayout()); } diff --git a/common/rfb/Security.cxx b/common/rfb/Security.cxx index 55f766a1..01191c65 100644 --- a/common/rfb/Security.cxx +++ b/common/rfb/Security.cxx @@ -52,23 +52,22 @@ Security::Security(StringParameter &secTypes) const std::list Security::GetEnabledSecTypes(void) { list result; - list::iterator i; /* Partial workaround for Vino's stupid behaviour. It doesn't allow * the basic authentication types as part of the VeNCrypt handshake, * making it impossible for a client to do opportunistic encryption. * At least make it possible to connect when encryption is explicitly * disabled. */ - for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++) { - if (*i >= 0x100) { + for (uint32_t type : enabledSecTypes) { + if (type >= 0x100) { result.push_back(secTypeVeNCrypt); break; } } - for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++) - if (*i < 0x100) - result.push_back(*i); + for (uint32_t type : enabledSecTypes) + if (type < 0x100) + result.push_back(type); return result; } @@ -76,11 +75,10 @@ const std::list Security::GetEnabledSecTypes(void) const std::list Security::GetEnabledExtSecTypes(void) { list result; - list::iterator i; - for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++) - if (*i != secTypeVeNCrypt) /* Do not include VeNCrypt type to avoid loops */ - result.push_back(*i); + for (uint32_t type : enabledSecTypes) + if (type != secTypeVeNCrypt) /* Do not include VeNCrypt type to avoid loops */ + result.push_back(type); return result; } @@ -107,15 +105,14 @@ bool Security::IsSupported(uint32_t secType) char *Security::ToString(void) { - list::iterator i; static char out[128]; /* Should be enough */ bool firstpass = true; const char *name; memset(out, 0, sizeof(out)); - for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++) { - name = secTypeName(*i); + for (uint32_t type : enabledSecTypes) { + name = secTypeName(type); if (name[0] == '[') /* Unknown security type */ continue; diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx index aa205d41..49c95137 100644 --- a/unix/x0vncserver/x0vncserver.cxx +++ b/unix/x0vncserver/x0vncserver.cxx @@ -368,10 +368,8 @@ int main(int argc, char** argv) FileTcpFilter fileTcpFilter(hostsFile); if (strlen(hostsFile) != 0) - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) - (*i)->setFilter(&fileTcpFilter); + for (SocketListener* listener : listeners) + listener->setFilter(&fileTcpFilter); } if (listeners.empty()) { @@ -395,10 +393,8 @@ int main(int argc, char** argv) FD_ZERO(&wfds); FD_SET(ConnectionNumber(dpy), &rfds); - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) - FD_SET((*i)->getFd(), &rfds); + for (SocketListener* listener : listeners) + FD_SET(listener->getFd(), &rfds); server.getSockets(&sockets); int clients_connected = 0; @@ -450,11 +446,9 @@ int main(int argc, char** argv) } // Accept new VNC connections - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) { - if (FD_ISSET((*i)->getFd(), &rfds)) { - Socket* sock = (*i)->accept(); + for (SocketListener* listener : listeners) { + if (FD_ISSET(listener->getFd(), &rfds)) { + Socket* sock = listener->accept(); if (sock) { server.addSocket(sock); } else { @@ -494,11 +488,8 @@ int main(int argc, char** argv) TXWindow::handleXEvents(dpy); // Run listener destructors; remove UNIX sockets etc - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) { - delete *i; - } + for (SocketListener* listener : listeners) + delete listener; vlog.info("Terminated"); return 0; diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc index a38087b4..0c2b5bf9 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.cc +++ b/unix/xserver/hw/vnc/XserverDesktop.cc @@ -88,11 +88,8 @@ XserverDesktop::XserverDesktop(int screenIndex_, server = new VNCServerST(name, this); setFramebuffer(width, height, fbptr, stride_); - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) { - vncSetNotifyFd((*i)->getFd(), screenIndex, true, false); - } + for (SocketListener* listener : listeners) + vncSetNotifyFd(listener->getFd(), screenIndex, true, false); } XserverDesktop::~XserverDesktop() diff --git a/vncviewer/MonitorIndicesParameter.cxx b/vncviewer/MonitorIndicesParameter.cxx index d215d4c2..fe9a54a6 100644 --- a/vncviewer/MonitorIndicesParameter.cxx +++ b/vncviewer/MonitorIndicesParameter.cxx @@ -73,7 +73,6 @@ std::set MonitorIndicesParameter::getParam() bool MonitorIndicesParameter::setParam(const char* value) { - int index; std::set indices; if (!parseIndices(value, &indices, true)) { @@ -81,9 +80,8 @@ bool MonitorIndicesParameter::setParam(const char* value) return false; } - for (std::set::iterator it = indices.begin(); it != indices.end(); it++) { - index = *it + 1; - + for (int index : indices) { + index += 1; if (index <= 0 || index > Fl::screen_count()) vlog.error(_("Monitor index %d does not exist"), index); } @@ -111,16 +109,14 @@ bool MonitorIndicesParameter::setParam(std::set indices) int bytesWritten = 0; char const * separator = ""; - for (std::set::iterator index = configIndices.begin(); - index != configIndices.end(); - index++) + for (int configIndex : configIndices) { bytesWritten += snprintf( buf+bytesWritten, BUF_MAX_LEN-bytesWritten, "%s%u", separator, - (*index)+1 + configIndex+1 ); separator = ","; diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx index 56bce3d9..ec274e74 100644 --- a/vncviewer/OptionsDialog.cxx +++ b/vncviewer/OptionsDialog.cxx @@ -218,10 +218,8 @@ void OptionsDialog::loadOptions(void) Security security(SecurityClient::secTypes); list secTypes; - list::iterator iter; list secTypesExt; - list::iterator iterExt; encNoneCheckbox->value(false); #ifdef HAVE_GNUTLS @@ -237,8 +235,8 @@ void OptionsDialog::loadOptions(void) authPlainCheckbox->value(false); secTypes = security.GetEnabledSecTypes(); - for (iter = secTypes.begin(); iter != secTypes.end(); ++iter) { - switch (*iter) { + for (uint8_t type : secTypes) { + switch (type) { case secTypeNone: encNoneCheckbox->value(true); authNoneCheckbox->value(true); @@ -251,8 +249,8 @@ void OptionsDialog::loadOptions(void) } secTypesExt = security.GetEnabledExtSecTypes(); - for (iterExt = secTypesExt.begin(); iterExt != secTypesExt.end(); ++iterExt) { - switch (*iterExt) { + for (uint32_t type : secTypesExt) { + switch (type) { case secTypePlain: encNoneCheckbox->value(true); authPlainCheckbox->value(true); diff --git a/vncviewer/parameters.cxx b/vncviewer/parameters.cxx index 518d3a25..a03623db 100644 --- a/vncviewer/parameters.cxx +++ b/vncviewer/parameters.cxx @@ -214,7 +214,7 @@ static VoidParameter* readOnlyParameterArray[] = { }; // Encoding Table -static struct { +static const struct EscapeMap { const char first; const char second; } replaceMap[] = { { '\n', 'n' }, @@ -230,15 +230,15 @@ static bool encodeValue(const char* val, char* dest, size_t destSize) { // Check for sequences which will need encoding normalCharacter = true; - for (size_t j = 0; j < sizeof(replaceMap)/sizeof(replaceMap[0]); j++) { + for (EscapeMap esc : replaceMap) { - if (val[i] == replaceMap[j].first) { + if (val[i] == esc.first) { dest[pos] = '\\'; pos++; if (pos >= destSize) return false; - dest[pos] = replaceMap[j].second; + dest[pos] = esc.second; normalCharacter = false; break; } @@ -269,9 +269,9 @@ static bool decodeValue(const char* val, char* dest, size_t destSize) { bool escapedCharacter; escapedCharacter = false; - for (size_t j = 0; j < sizeof(replaceMap)/sizeof(replaceMap[0]); j++) { - if (val[i+1] == replaceMap[j].second) { - dest[pos] = replaceMap[j].first; + for (EscapeMap esc : replaceMap) { + if (val[i+1] == esc.second) { + dest[pos] = esc.first; escapedCharacter = true; i++; break; @@ -654,24 +654,24 @@ void saveViewerParameters(const char *filename, const char *servername) { } fprintf(f, "ServerName=%s\n", encodingBuffer); - for (size_t i = 0; i < sizeof(parameterArray)/sizeof(VoidParameter*); i++) { - if (dynamic_cast(parameterArray[i]) != nullptr) { - if (!encodeValue(*(StringParameter*)parameterArray[i], + for (VoidParameter* param : parameterArray) { + if (dynamic_cast(param) != nullptr) { + if (!encodeValue(*(StringParameter*)param, encodingBuffer, buffersize)) { fclose(f); throw Exception(_("Failed to save \"%s\": %s"), - parameterArray[i]->getName(), + param->getName(), _("Could not encode parameter")); } - fprintf(f, "%s=%s\n", ((StringParameter*)parameterArray[i])->getName(), encodingBuffer); - } else if (dynamic_cast(parameterArray[i]) != nullptr) { - fprintf(f, "%s=%d\n", ((IntParameter*)parameterArray[i])->getName(), (int)*(IntParameter*)parameterArray[i]); - } else if (dynamic_cast(parameterArray[i]) != nullptr) { - fprintf(f, "%s=%d\n", ((BoolParameter*)parameterArray[i])->getName(), (int)*(BoolParameter*)parameterArray[i]); + fprintf(f, "%s=%s\n", ((StringParameter*)param)->getName(), encodingBuffer); + } else if (dynamic_cast(param) != nullptr) { + fprintf(f, "%s=%d\n", ((IntParameter*)param)->getName(), (int)*(IntParameter*)param); + } else if (dynamic_cast(param) != nullptr) { + fprintf(f, "%s=%d\n", ((BoolParameter*)param)->getName(), (int)*(BoolParameter*)param); } else { fclose(f); throw Exception(_("Failed to save \"%s\": %s"), - parameterArray[i]->getName(), + param->getName(), _("Unknown parameter type")); } } diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx index 6a0093f7..16396659 100644 --- a/vncviewer/vncviewer.cxx +++ b/vncviewer/vncviewer.cxx @@ -352,12 +352,12 @@ static void init_fltk() count = 0; // FIXME: Follow icon theme specification - for (size_t i = 0;i < sizeof(icon_sizes)/sizeof(icon_sizes[0]);i++) { + for (int icon_size : icon_sizes) { char icon_path[PATH_MAX]; bool exists; sprintf(icon_path, "%s/icons/hicolor/%dx%d/apps/tigervnc.png", - CMAKE_INSTALL_FULL_DATADIR, icon_sizes[i], icon_sizes[i]); + CMAKE_INSTALL_FULL_DATADIR, icon_size, icon_size); struct stat st; if (stat(icon_path, &st) != 0) @@ -777,10 +777,8 @@ int main(int argc, char** argv) while (sock == nullptr) { fd_set rfds; FD_ZERO(&rfds); - for (std::list::iterator i = listeners.begin(); - i != listeners.end(); - i++) - FD_SET((*i)->getFd(), &rfds); + for (SocketListener* listener : listeners) + FD_SET(listener->getFd(), &rfds); int n = select(FD_SETSIZE, &rfds, nullptr, nullptr, nullptr); if (n < 0) { @@ -792,11 +790,9 @@ int main(int argc, char** argv) } } - for (std::list::iterator i = listeners.begin (); - i != listeners.end(); - i++) - if (FD_ISSET((*i)->getFd(), &rfds)) { - sock = (*i)->accept(); + for (SocketListener* listener : listeners) + if (FD_ISSET(listener->getFd(), &rfds)) { + sock = listener->accept(); if (sock) /* Got a connection */ break; diff --git a/win/rfb_win32/SecurityPage.cxx b/win/rfb_win32/SecurityPage.cxx index 2571a4d6..a6f026cf 100644 --- a/win/rfb_win32/SecurityPage.cxx +++ b/win/rfb_win32/SecurityPage.cxx @@ -48,7 +48,6 @@ void SecurityPage::initDialog() { list secTypes; - list::iterator i; if (isItemChecked(IDC_ENC_X509)) enableX509Dialogs(); @@ -58,8 +57,8 @@ SecurityPage::initDialog() secTypes = security->GetEnabledSecTypes(); /* Process non-VeNCrypt sectypes */ - for (i = secTypes.begin(); i != secTypes.end(); i++) { - switch (*i) { + for (uint8_t type : secTypes) { + switch (type) { case secTypeNone: enableAuthMethod(IDC_ENC_NONE, IDC_AUTH_NONE); break; @@ -70,13 +69,12 @@ SecurityPage::initDialog() } list secTypesExt; - list::iterator iext; secTypesExt = security->GetEnabledExtSecTypes(); /* Process VeNCrypt subtypes */ - for (iext = secTypesExt.begin(); iext != secTypesExt.end(); iext++) { - switch (*iext) { + for (uint32_t type : secTypesExt) { + switch (type) { case secTypePlain: enableAuthMethod(IDC_ENC_NONE, IDC_AUTH_PLAIN); break; -- 2.39.5