]> source.dussan.org Git - tigervnc.git/commitdiff
Use std::string for string memory management
authorPierre Ossman <ossman@cendio.se>
Tue, 17 Jan 2023 15:38:59 +0000 (16:38 +0100)
committerPierre Ossman <ossman@cendio.se>
Sat, 4 Feb 2023 13:03:13 +0000 (14:03 +0100)
Avoids a bit of complexity by delegating that handling to a string
object.

17 files changed:
common/rfb/Blacklist.cxx
common/rfb/Blacklist.h
common/rfb/CConnection.cxx
common/rfb/CConnection.h
common/rfb/ClientParams.cxx
common/rfb/ClientParams.h
common/rfb/Configuration.cxx
common/rfb/Configuration.h
common/rfb/KeyRemapper.cxx
common/rfb/SConnection.cxx
common/rfb/SConnection.h
common/rfb/ServerParams.cxx
common/rfb/ServerParams.h
vncviewer/MonitorIndicesParameter.cxx
vncviewer/ServerDialog.cxx
vncviewer/ServerDialog.h
win/winvnc/ListConnInfo.h

index f052eafb6469dbd6aaa59d5fdcf1395b937f4ae4..12a54c451c8edd95dc9bf8e23564794aa243f443 100644 (file)
@@ -45,11 +45,6 @@ Blacklist::Blacklist() {
 }
 
 Blacklist::~Blacklist() {
-  // Free the map keys
-  BlacklistMap::iterator i;
-  for (i=blm.begin(); i!=blm.end(); i++) {
-    strFree((char*)(*i).first);
-  }
 }
 
 bool Blacklist::isBlackmarked(const char* name) {
@@ -65,7 +60,7 @@ bool Blacklist::isBlackmarked(const char* name) {
     bi.marks = 1;
     bi.blockUntil = 0;
     bi.blockTimeout = initialTimeout;
-    blm[strDup(name)] = bi;
+    blm[name] = bi;
     i = blm.find(name);
   }
 
@@ -92,9 +87,5 @@ bool Blacklist::isBlackmarked(const char* name) {
 }
 
 void Blacklist::clearBlackmark(const char* name) {
-  BlacklistMap::iterator i = blm.find(name);
-  if (i != blm.end()) {
-    strFree((char*)(*i).first);
-    blm.erase(i);
-  }
+  blm.erase(name);
 }
index 45e36a0ee0074442dd872039a183064f8ae0e90f..c1699f2924b007c7a0cc85128270938f36b52095 100644 (file)
@@ -30,9 +30,9 @@
 #include <string.h>
 #include <time.h>
 #include <map>
+#include <string>
 
 #include <rfb/Configuration.h>
-#include <rfb/util.h>
 
 namespace rfb {
 
@@ -68,17 +68,12 @@ namespace rfb {
     void clearBlackmark(const char* name);
 
   protected:
-    struct ltStr {
-      bool operator()(const char* s1, const char* s2) const {
-        return strcmp(s1, s2) < 0;
-      };
-    };
     struct BlacklistInfo {
       int marks;
       time_t blockUntil;
       unsigned int blockTimeout;
     };
-    typedef std::map<const char*,BlacklistInfo,ltStr> BlacklistMap;
+    typedef std::map<std::string,BlacklistInfo> BlacklistMap;
     BlacklistMap blm;
   };
 
index 79adec5cd2072c910118d1bccfd9af5a1743508a..56429c98dc7d2e9b771ff74c3ba114fdaef00d94 100644 (file)
@@ -59,7 +59,7 @@ CConnection::CConnection()
     firstUpdate(true), pendingUpdate(false), continuousUpdates(false),
     forceNonincremental(true),
     framebuffer(NULL), decoder(this),
-    serverClipboard(NULL), hasLocalClipboard(false)
+    hasRemoteClipboard(false), hasLocalClipboard(false)
 {
 }
 
@@ -405,8 +405,6 @@ void CConnection::close()
   reader_ = NULL;
   delete writer_;
   writer_ = NULL;
-  strFree(serverClipboard);
-  serverClipboard = NULL;
 }
 
 void CConnection::setDesktopSize(int w, int h)
@@ -545,10 +543,8 @@ void CConnection::serverCutText(const char* str)
 {
   hasLocalClipboard = false;
 
-  strFree(serverClipboard);
-  serverClipboard = NULL;
-
-  serverClipboard = strDup(latin1ToUTF8(str).c_str());
+  serverClipboard = latin1ToUTF8(str);
+  hasRemoteClipboard = true;
 
   handleClipboardAnnounce(true);
 }
@@ -589,8 +585,7 @@ void CConnection::handleClipboardPeek()
 
 void CConnection::handleClipboardNotify(uint32_t flags)
 {
-  strFree(serverClipboard);
-  serverClipboard = NULL;
+  hasRemoteClipboard = false;
 
   if (flags & rfb::clipboardUTF8) {
     hasLocalClipboard = false;
@@ -609,14 +604,11 @@ void CConnection::handleClipboardProvide(uint32_t flags,
     return;
   }
 
-  strFree(serverClipboard);
-  serverClipboard = NULL;
-
-  std::string filtered(convertLF((const char*)data[0], lengths[0]));
-  serverClipboard = strDup(filtered.c_str());
+  serverClipboard = convertLF((const char*)data[0], lengths[0]);
+  hasRemoteClipboard = true;
 
   // FIXME: Should probably verify that this data was actually requested
-  handleClipboardData(serverClipboard);
+  handleClipboardData(serverClipboard.c_str());
 }
 
 void CConnection::authSuccess()
@@ -646,8 +638,8 @@ void CConnection::handleClipboardData(const char* /*data*/)
 
 void CConnection::requestClipboard()
 {
-  if (serverClipboard != NULL) {
-    handleClipboardData(serverClipboard);
+  if (hasRemoteClipboard) {
+    handleClipboardData(serverClipboard.c_str());
     return;
   }
 
index 0cf47962c5a9ce48b2dfeb8b88d6e2c68a511b66..71da175eed41e37a6733f0bc3491f4aa3bba8b8f 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef __RFB_CCONNECTION_H__
 #define __RFB_CCONNECTION_H__
 
+#include <string>
+
 #include <rfb/CMsgHandler.h>
 #include <rfb/DecodeManager.h>
 #include <rfb/SecurityClient.h>
@@ -292,7 +294,8 @@ namespace rfb {
     ModifiablePixelBuffer* framebuffer;
     DecodeManager decoder;
 
-    char* serverClipboard;
+    std::string serverClipboard;
+    bool hasRemoteClipboard;
     bool hasLocalClipboard;
     bool unsolicitedClipboardAttempt;
   };
index 572e2d82abc049b5a33258ef0a5d71587be6acd3..ade990181c509f3260d11f8d7e0829d71fd879d6 100644 (file)
@@ -34,7 +34,7 @@ ClientParams::ClientParams()
   : majorVersion(0), minorVersion(0),
     compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
     subsampling(subsampleUndefined),
-    width_(0), height_(0), name_(0),
+    width_(0), height_(0),
     cursorPos_(0, 0), ledState_(ledUnknown)
 {
   setName("");
@@ -49,7 +49,6 @@ ClientParams::ClientParams()
 
 ClientParams::~ClientParams()
 {
-  delete [] name_;
   delete cursor_;
 }
 
@@ -80,8 +79,7 @@ void ClientParams::setPF(const PixelFormat& pf)
 
 void ClientParams::setName(const char* name)
 {
-  delete [] name_;
-  name_ = strDup(name);
+  name_ = name;
 }
 
 void ClientParams::setCursor(const Cursor& other)
index 0f4171cc15c89ff9e0a3abf6cdecc29f46153fd8..ea86ea785d0bd449556726a4fb700919ac0b2e4d 100644 (file)
@@ -24,6 +24,7 @@
 #define __RFB_CLIENTPARAMS_H__
 
 #include <set>
+#include <string>
 
 #include <stdint.h>
 
@@ -72,7 +73,7 @@ namespace rfb {
     const PixelFormat& pf() const { return pf_; }
     void setPF(const PixelFormat& pf);
 
-    const char* name() const { return name_; }
+    const char* name() const { return name_.c_str(); }
     void setName(const char* name);
 
     const Cursor& cursor() const { return *cursor_; }
@@ -113,7 +114,7 @@ namespace rfb {
     ScreenSet screenLayout_;
 
     PixelFormat pf_;
-    char* name_;
+    std::string name_;
     Cursor* cursor_;
     Point cursorPos_;
     std::set<int32_t> encodings_;
index 0fc2bde603ccf516a4849b7f8f67c0f7f697f7bf..1c215c7f14f4e551818491fb90c871c9d7a80c8c 100644 (file)
@@ -372,7 +372,7 @@ IntParameter::operator int() const {
 
 StringParameter::StringParameter(const char* name_, const char* desc_,
                                  const char* v, ConfigurationObject co)
-  : VoidParameter(name_, desc_, co), value(strDup(v)), def_value(strDup(v))
+  : VoidParameter(name_, desc_, co), value(v), def_value(v)
 {
   if (!v) {
     vlog.error("Default value <null> for %s not allowed",name_);
@@ -381,8 +381,6 @@ StringParameter::StringParameter(const char* name_, const char* desc_,
 }
 
 StringParameter::~StringParameter() {
-  strFree(value);
-  strFree(def_value);
 }
 
 bool StringParameter::setParam(const char* v) {
@@ -391,9 +389,8 @@ bool StringParameter::setParam(const char* v) {
   if (!v)
     throw rfb::Exception("setParam(<null>) not allowed");
   vlog.debug("set %s(String) to %s", getName(), v);
-  CharArray oldValue(value);
-  value = strDup(v);
-  return value != 0;
+  value = v;
+  return true;
 }
 
 std::string StringParameter::getDefaultStr() const {
@@ -402,11 +399,11 @@ std::string StringParameter::getDefaultStr() const {
 
 std::string StringParameter::getValueStr() const {
   LOCK_CONFIG;
-  return std::string(value);
+  return value;
 }
 
 StringParameter::operator const char *() const {
-  return value;
+  return value.c_str();
 }
 
 // -=- BinaryParameter
index eef89d93110177813c90eb8a379bcd4e8c6a5c5a..d73d8005277d18ae16273f2ee1b4f04cb8d2752a 100644 (file)
@@ -250,8 +250,8 @@ namespace rfb {
     virtual std::string getValueStr() const;
     operator const char*() const;
   protected:
-    char* value;
-    char* def_value;
+    std::string value;
+    std::string def_value;
   };
 
   class BinaryParameter : public VoidParameter {
index 731eb256fefae00a24010c09387e2bb2401f898a..762eb413c04b8fc1b207ce6db9b38de600886096 100644 (file)
@@ -87,7 +87,7 @@ class KeyMapParameter : public StringParameter {
 public:
   KeyMapParameter()
     : StringParameter("RemapKeys", "Comma-separated list of incoming keysyms to remap.  Mappings are expressed as two hex values, prefixed by 0x, and separated by ->", "") {
-    setParam(value);
+    KeyRemapper::defInstance.setMapping("");
   }
   bool setParam(const char* v) {
     KeyRemapper::defInstance.setMapping(v);
index 244fb324fadc0464f63904aa2cd13a86685f08c2..a1755cb4db9f8d70d50810ec596f814554d42752 100644 (file)
@@ -60,7 +60,8 @@ SConnection::SConnection()
     is(0), os(0), reader_(0), writer_(0), ssecurity(0),
     authFailureTimer(this, &SConnection::handleAuthFailureTimeout),
     state_(RFBSTATE_UNINITIALISED), preferredEncoding(encodingRaw),
-    accessRights(0x0000), clientClipboard(NULL), hasLocalClipboard(false),
+    accessRights(0x0000), hasRemoteClipboard(false),
+    hasLocalClipboard(false),
     unsolicitedClipboardAttempt(false)
 {
   defaultMajorVersion = 3;
@@ -380,10 +381,8 @@ void SConnection::clientCutText(const char* str)
 {
   hasLocalClipboard = false;
 
-  strFree(clientClipboard);
-  clientClipboard = NULL;
-
-  clientClipboard = strDup(latin1ToUTF8(str).c_str());
+  clientClipboard = latin1ToUTF8(str);
+  hasRemoteClipboard = true;
 
   handleClipboardAnnounce(true);
 }
@@ -409,8 +408,7 @@ void SConnection::handleClipboardPeek()
 
 void SConnection::handleClipboardNotify(uint32_t flags)
 {
-  strFree(clientClipboard);
-  clientClipboard = NULL;
+  hasRemoteClipboard = false;
 
   if (flags & rfb::clipboardUTF8) {
     hasLocalClipboard = false;
@@ -429,14 +427,11 @@ void SConnection::handleClipboardProvide(uint32_t flags,
     return;
   }
 
-  strFree(clientClipboard);
-  clientClipboard = NULL;
-
-  std::string filtered(convertLF((const char*)data[0], lengths[0]));
-  clientClipboard = strDup(filtered.c_str());
+  clientClipboard = convertLF((const char*)data[0], lengths[0]);
+  hasRemoteClipboard = true;
 
   // FIXME: Should probably verify that this data was actually requested
-  handleClipboardData(clientClipboard);
+  handleClipboardData(clientClipboard.c_str());
 }
 
 void SConnection::supportsQEMUKeyEvent()
@@ -554,8 +549,8 @@ void SConnection::handleClipboardData(const char* /*data*/)
 
 void SConnection::requestClipboard()
 {
-  if (clientClipboard != NULL) {
-    handleClipboardData(clientClipboard);
+  if (hasRemoteClipboard) {
+    handleClipboardData(clientClipboard.c_str());
     return;
   }
 
@@ -624,8 +619,6 @@ void SConnection::cleanup()
   reader_ = NULL;
   delete writer_;
   writer_ = NULL;
-  strFree(clientClipboard);
-  clientClipboard = NULL;
 }
 
 void SConnection::writeFakeColourMap(void)
index 54acdd9c34f235a05c48480f06034ee479c7ecad..08574069c3487a689a5b9289ce920bc6ac8ed699 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef __RFB_SCONNECTION_H__
 #define __RFB_SCONNECTION_H__
 
+#include <string>
+
 #include <rdr/InStream.h>
 #include <rdr/OutStream.h>
 
@@ -263,7 +265,8 @@ namespace rfb {
     int32_t preferredEncoding;
     AccessRights accessRights;
 
-    char* clientClipboard;
+    std::string clientClipboard;
+    bool hasRemoteClipboard;
     bool hasLocalClipboard;
     bool unsolicitedClipboardAttempt;
   };
index 62fbde913f44c1d5d0873f8bd141ae199e3cc2d2..6af446c2124b5387fd3a1b2b178e52263a2af1d4 100644 (file)
@@ -33,7 +33,7 @@ ServerParams::ServerParams()
     supportsQEMUKeyEvent(false),
     supportsSetDesktopSize(false), supportsFence(false),
     supportsContinuousUpdates(false),
-    width_(0), height_(0), name_(0),
+    width_(0), height_(0),
     ledState_(ledUnknown)
 {
   setName("");
@@ -46,7 +46,6 @@ ServerParams::ServerParams()
 
 ServerParams::~ServerParams()
 {
-  delete [] name_;
   delete cursor_;
 }
 
@@ -77,8 +76,7 @@ void ServerParams::setPF(const PixelFormat& pf)
 
 void ServerParams::setName(const char* name)
 {
-  delete [] name_;
-  name_ = strDup(name);
+  name_ = name;
 }
 
 void ServerParams::setCursor(const Cursor& other)
index 4feacf181477512a60f58af0c5aa7cfcd6477b89..791e3e7f33a93c0fd46a6330d7a9fe9a59524a34 100644 (file)
@@ -23,6 +23,8 @@
 #ifndef __RFB_SERVERPARAMS_H__
 #define __RFB_SERVERPARAMS_H__
 
+#include <string>
+
 #include <rfb/Cursor.h>
 #include <rfb/PixelFormat.h>
 #include <rfb/ScreenSet.h>
@@ -60,7 +62,7 @@ namespace rfb {
     const PixelFormat& pf() const { return pf_; }
     void setPF(const PixelFormat& pf);
 
-    const char* name() const { return name_; }
+    const char* name() const { return name_.c_str(); }
     void setName(const char* name);
 
     const Cursor& cursor() const { return *cursor_; }
@@ -85,7 +87,7 @@ namespace rfb {
     ScreenSet screenLayout_;
 
     PixelFormat pf_;
-    char* name_;
+    std::string name_;
     Cursor* cursor_;
     unsigned int ledState_;
     uint32_t clipFlags;
index 691a8470c3a900f72333507949c7729b5539145d..dcc762a34e496347d4a1c4c16c0ba38a4c7bce7a 100644 (file)
@@ -53,7 +53,7 @@ std::set<int> MonitorIndicesParameter::getParam()
         return indices;
     }
 
-    valid = parseIndices(value, &configIndices);
+    valid = parseIndices(value.c_str(), &configIndices);
     if (!valid) {
         return indices;
     }
index ec1e40e479d8b71b157d6d3c889660776e759c8e..144f31a7fe0144633b16340a2cc3905e36f79088 100644 (file)
@@ -38,7 +38,6 @@
 #include <os/os.h>
 #include <rfb/Exception.h>
 #include <rfb/LogWriter.h>
-#include <rfb/util.h>
 
 #include "fltk/layout.h"
 #include "ServerDialog.h"
@@ -62,8 +61,6 @@ ServerDialog::ServerDialog()
   Fl_Button *button;
   Fl_Box *divider;
 
-  usedDir = NULL;
-
   x = OUTER_MARGIN;
   y = OUTER_MARGIN;
 
@@ -120,8 +117,6 @@ ServerDialog::ServerDialog()
 
 ServerDialog::~ServerDialog()
 {
-  if (usedDir) 
-    free(usedDir);
 }
 
 
@@ -168,10 +163,11 @@ void ServerDialog::handleLoad(Fl_Widget* /*widget*/, void* data)
 {
   ServerDialog *dialog = (ServerDialog*)data;
 
-  if (!dialog->usedDir)
-    dialog->usedDir = strDup(os::getuserhomedir());
+  if (dialog->usedDir.empty())
+    dialog->usedDir = os::getuserhomedir();
 
-  Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir, _("TigerVNC configuration (*.tigervnc)"), 
+  Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir.c_str(),
+                                                      _("TigerVNC configuration (*.tigervnc)"),
                                                       0, _("Select a TigerVNC configuration file"));
   file_chooser->preview(0);
   file_chooser->previewButton->hide();
@@ -207,10 +203,11 @@ void ServerDialog::handleSaveAs(Fl_Widget* /*widget*/, void* data)
   ServerDialog *dialog = (ServerDialog*)data;
   const char* servername = dialog->serverName->value();
   const char* filename;
-  if (!dialog->usedDir)
-    dialog->usedDir = strDup(os::getuserhomedir());
+  if (dialog->usedDir.empty())
+    dialog->usedDir = os::getuserhomedir();
   
-  Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir, _("TigerVNC configuration (*.tigervnc)"), 
+  Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir.c_str(),
+                                                      _("TigerVNC configuration (*.tigervnc)"),
                                                       2, _("Save the TigerVNC configuration to file"));
   
   file_chooser->preview(0);
@@ -405,6 +402,6 @@ void ServerDialog::saveServerHistory()
 void ServerDialog::updateUsedDir(const char* filename)
 {
   char * name = strdup(filename);
-  usedDir = strdup(dirname(name));
+  usedDir = dirname(name);
   free(name);
 }
index f9c3d136603eb6a2800951c66e060a8a6067d2f4..a76a58cf07793e9e5c049b8eb587a211a620d92e 100644 (file)
@@ -50,7 +50,7 @@ private:
 protected:
   Fl_Input_Choice *serverName;
   std::vector<std::string> serverHistory;
-  char *usedDir;
+  std::string usedDir;
 };
 
 #endif
index f779cf5d161eb7a06f835ed5d33086fc089c5b9f..1926b8a7e64cfbd872e0d1100a0ccd60728ec945 100644 (file)
@@ -21,8 +21,7 @@
 #define __RFB_LISTCONNINFO_INCLUDED__
 
 #include <list>
-
-#include <rfb/util.h>
+#include <string>
 
 namespace winvnc {
 
@@ -53,12 +52,12 @@ namespace winvnc {
 
     void addInfo(void* Conn, const char* IP, int Status) {
       conn.push_back(Conn);
-      IP_address.push_back(rfb::strDup(IP));
+      IP_address.push_back(IP);
       status.push_back(Status);
     }
 
     void iGetCharInfo(const char* buf[2]) {
-      buf[0] = *Ii;
+      buf[0] = Ii->c_str();
       switch (*si) {
       case 0:
         buf[1] = "Full control";
@@ -107,10 +106,10 @@ namespace winvnc {
 
   private:
     std::list<void*> conn;
-    std::list<char*> IP_address;
+    std::list<std::string> IP_address;
     std::list<int> status;
     std::list<void*>::iterator ci;
-    std::list<char*>::iterator Ii;
+    std::list<std::string>::iterator Ii;
     std::list<int>::iterator si;
     bool disableClients;
   };