[X2Go-Commits] [x2goclient] 01/02: src/x2goutils.{cpp, h}: add new function add_to_path () to add multiple entries to a PATH-like string if they do not exist in there yet.

git-admin at x2go.org git-admin at x2go.org
Sat Apr 9 08:39:32 CEST 2016


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goclient.

commit 864a0938551d993397adc1d0f27c4a8ca421a771
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Sat Apr 9 08:36:40 2016 +0200

    src/x2goutils.{cpp,h}: add new function add_to_path () to add multiple entries to a PATH-like string if they do not exist in there yet.
---
 debian/changelog  |    2 ++
 src/x2goutils.cpp |   88 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/x2goutils.h   |   12 ++++++++
 3 files changed, 102 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index c058a99..6b16560 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,8 @@ x2goclient (4.0.5.2-0x2go1) UNRELEASED; urgency=medium
       /opt/X11/bin to x2goclient's environment and child environments before
       starting xmodmap. Fixes: #1019. Requires a re-release of X2Go Client for
       OS X.
+    - src/x2goutils.{cpp,h}: add new function add_to_path () to add multiple
+      entries to a PATH-like string if they do not exist in there yet.
 
   [ Mike DePaulo ]
   * New upstream release (4.0.5.2):
diff --git a/src/x2goutils.cpp b/src/x2goutils.cpp
index 4a45102..31ac3ac 100644
--- a/src/x2goutils.cpp
+++ b/src/x2goutils.cpp
@@ -194,4 +194,92 @@ void show_XQuartz_generic_error (const QString &main_error, const QString &addit
                                             "or\n"
                                             "<center><b>/Applications/Utilities/XQuartz.app</b></center>"));
 }
+
+QString add_to_path (const QString &orig_path, const QStringList &add, const bool back) {
+  QString ret = orig_path;
+  std::vector<bool> found;
+
+  QStringList orig_path_list = orig_path.split (":");
+
+  /*
+   * Clean up add list. We want to make sure no entry ends in a slash
+   * and skip empty entries.
+   */
+  QStringList tmp_clean_add;
+  for (int i = 0; i < add.size (); ++i) {
+    if (!(add[i].isEmpty ())) {
+      if (add[i].right (1) == "/") {
+        QString tmp_elem = add[i].right (1);
+
+        if (!(tmp_elem.isEmpty ())) {
+          tmp_clean_add.append (tmp_elem);
+        }
+      }
+      else {
+        tmp_clean_add.append (add[i]);
+      }
+    }
+  }
+
+  /* Nothing to add, really... */
+  if (tmp_clean_add.isEmpty ()) {
+    return (ret);
+  }
+
+  /* Create unique array. */
+  QStringList clean_add;
+  {
+    QStringList::const_iterator begin = tmp_clean_add.constBegin (),
+                                end = tmp_clean_add.constEnd ();
+    for (QStringList::const_iterator cit = begin; cit != end; ++cit) {
+      bool tmp_found = false;
+
+      for (QStringList::const_iterator cit2 = cit + 1; cit2 != end; ++cit2) {
+        if (*cit == *cit) {
+          tmp_found = true;
+          break;
+        }
+      }
+
+      if (!tmp_found) {
+        clean_add.append (*cit);
+      }
+    }
+  }
+
+  /* Nothing to add. */
+  if (clean_add.isEmpty ()) {
+    return (ret);
+  }
+
+  found.resize (clean_add.size (), false);
+
+  for (int i = 0; i < orig_path_list.length (); ++i) {
+    for (int y = 0; y < clean_add.size (); ++y) {
+      if (!found[y]) {
+        if ((orig_path_list[i] == QString (clean_add[y])) || (orig_path_list[i] == QString (clean_add[y] + '/'))) {
+          found[y] = true;
+          break;
+        }
+      }
+    }
+  }
+
+  if (back) {
+    for (int i = 0; i < clean_add.size (); ++i) {
+      if (!found[i]) {
+        ret.append (QString (":" + clean_add[i]));
+      }
+    }
+  }
+  else {
+    for (int i = (clean_add.size () - 1); i > 0; --i) {
+      if (!found[i]) {
+        ret.prepend (QString (clean_add[i] + ":"));
+      }
+    }
+  }
+
+  return (ret);
+}
 #endif /* defined (Q_OS_DARWIN) */
diff --git a/src/x2goutils.h b/src/x2goutils.h
index af65663..e36203e 100644
--- a/src/x2goutils.h
+++ b/src/x2goutils.h
@@ -45,6 +45,18 @@ bool font_is_monospaced (const QFont &font);
 void show_XQuartz_not_found_error ();
 void show_XQuartz_start_error ();
 void show_XQuartz_generic_error (const QString &main_error, const QString &additional_info);
+
+/*
+ * Add a list of strings to a PATH value.
+ *
+ * If back is true (the default), each entry is (potentially) appended to the original
+ * PATH value, if not already existing within the original PATH value.
+ * Ex.: <orig_path>:<add_entry1>:<add_entry2>:...
+ *
+ * Otherwise, each entry is prepended to the original PATH value, if not already existing.
+ * Ex.: <add_entry1>:<add_entry2>:...:<orig_path>
+ */
+QString add_to_path (const QString &orig_path, const QStringList &add, const bool back = true);
 #endif /* defined (Q_OS_DARWIN) */
 
 #endif /* !defined (X2GOUTILS_H) */

--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list