Factor out common cpp helper to cpphelp
authorAndre Heinecke <aheinecke@intevation.de>
Fri, 16 Feb 2018 07:09:03 +0000 (08:09 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Fri, 16 Feb 2018 07:09:03 +0000 (08:09 +0100)
* src/cryptcontroller.cpp (release_carray, vector_to_charArray)
(rtrim): Move into cpphelp.
* src/cpphelp.cpp, src/cpphelp.h: New.
* src/Makefile.am: Add it.

src/Makefile.am
src/cpphelp.cpp [new file with mode: 0644]
src/cpphelp.h [new file with mode: 0644]
src/cryptcontroller.cpp

index 90091cb..d605c20 100644 (file)
@@ -85,7 +85,8 @@ gpgol_SOURCES = \
        parsecontroller.cpp parsecontroller.h \
        mimedataprovider.cpp mimedataprovider.h \
        explorer-events.cpp explorers-events.cpp \
-       cryptcontroller.cpp cryptcontroller.h
+       cryptcontroller.cpp cryptcontroller.h \
+       cpphelp.cpp cpphelp.h
 
 
 #treeview_SOURCES = treeview.c
diff --git a/src/cpphelp.cpp b/src/cpphelp.cpp
new file mode 100644 (file)
index 0000000..20b91d3
--- /dev/null
@@ -0,0 +1,57 @@
+/* @file cpphelp.h
+ * @brief Common cpp helper stuff
+ *
+ * Copyright (C) 2018 Intevation GmbH
+ *
+ * This file is part of GpgOL.
+ *
+ * GpgOL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GpgOL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <algorithm>
+#include "cpphelp.h"
+
+#include "common.h"
+
+void
+release_cArray (char **carray)
+{
+  if (carray)
+    {
+      for (int idx = 0; carray[idx]; idx++)
+        xfree (carray[idx]);
+      xfree (carray);
+    }
+}
+
+void
+rtrim(std::string &s) {
+    s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) {
+        return !std::isspace(ch);
+    }).base(), s.end());
+}
+
+char **
+vector_to_cArray(const std::vector<std::string> &vec)
+{
+  char ** ret = (char**) xmalloc (sizeof (char*) * (vec.size() + 1));
+  for (size_t i = 0; i < vec.size(); i++)
+    {
+      ret[i] = strdup (vec[i].c_str());
+    }
+  ret[vec.size()] = NULL;
+  return ret;
+}
diff --git a/src/cpphelp.h b/src/cpphelp.h
new file mode 100644 (file)
index 0000000..0b60170
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef CPPHELP_H
+#define CPPHELP_H
+/* @file cpphelp.h
+ * @brief Common cpp helper stuff
+ *
+ * Copyright (C) 2018 Intevation GmbH
+ *
+ * This file is part of GpgOL.
+ *
+ * GpgOL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GpgOL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string>
+#include <vector>
+
+/* Stuff that should be in common but is c++ so it does not fit in there. */
+
+
+/* Release a null terminated char* array */
+void release_cArray (char **carray);
+
+/* Trim whitespace from a string. */
+void rtrim(std::string &s);
+
+/* Convert a string vector to a null terminated char array */
+char **vector_to_cArray (const std::vector<std::string> &vec);
+
+#endif // CPPHELP_H
index 2920544..2f74294 100644 (file)
@@ -21,6 +21,7 @@
 #include "config.h"
 
 #include "common.h"
+#include "cpphelp.h"
 #include "cryptcontroller.h"
 #include "mail.h"
 #include "mapihelp.h"
@@ -161,38 +162,6 @@ CryptController::collect_data ()
   return 0;
 }
 
-static void
-release_carray (char **recipients)
-{
-  int idx;
-
-  if (recipients)
-    {
-      for (idx=0; recipients[idx]; idx++)
-        xfree (recipients[idx]);
-      xfree (recipients);
-    }
-}
-
-static inline void
-rtrim(std::string &s) {
-    s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) {
-        return !std::isspace(ch);
-    }).base(), s.end());
-}
-
-char **
-vector_to_charArray(const std::vector<std::string> &vec)
-{
-  char ** ret = (char**) xmalloc (sizeof (char*) * (vec.size() + 1));
-  for (size_t i = 0; i < vec.size(); i++)
-    {
-      ret[i] = strdup (vec[i].c_str());
-    }
-  ret[vec.size()] = NULL;
-  return ret;
-}
-
 int
 CryptController::lookup_fingerprints (const std::string &sigFpr,
                                       const std::vector<std::string> recpFprs)
@@ -232,7 +201,7 @@ CryptController::lookup_fingerprints (const std::string &sigFpr,
   }
 
   // Convert recipient fingerprints
-  char **cRecps = vector_to_charArray (recpFprs);
+  char **cRecps = vector_to_cArray (recpFprs);
 
   err = ctx->startKeyListing (const_cast<const char **> (cRecps));
 
@@ -248,7 +217,7 @@ CryptController::lookup_fingerprints (const std::string &sigFpr,
 
   m_recipients.pop_back();
 
-  release_carray (cRecps);
+  release_cArray (cRecps);
 
   return 0;
 }
@@ -402,13 +371,13 @@ CryptController::resolve_keys ()
           args.push_back (GpgME::UserID::addrSpecFromString (recipients[i]));
         }
 
-      release_carray (recipients);
+      release_cArray (recipients);
     }
 
   // Convert our collected vector to c strings
   // It's a bit overhead but should be quick for such small
   // data.
-  char **cargs = vector_to_charArray (args);
+  char **cargs = vector_to_cArray (args);
 
   // Args are prepared. Spawn the resolver.
   auto ctx = GpgME::Context::createForEngine (GpgME::SpawnEngine);
@@ -416,7 +385,7 @@ CryptController::resolve_keys ()
   if (!ctx)
     {
       // can't happen
-      release_carray (cargs);
+      release_cArray (cargs);
       TRACEPOINT;
       return -1;
     }
@@ -448,7 +417,7 @@ CryptController::resolve_keys ()
   log_debug ("Resolver stderr:\n'%s'", mystderr.toString ().c_str ());
 #endif
 
-  release_carray (cargs);
+  release_cArray (cargs);
 
   if (err)
     {
@@ -986,14 +955,14 @@ CryptController::start_crypto_overlay ()
     {
       args.push_back (std::string (_("Signing...")));
     }
-  char **cargs = vector_to_charArray (args);
+  char **cargs = vector_to_cArray (args);
 
   m_overlayCtx = GpgME::Context::createForEngine (GpgME::SpawnEngine);
 
   if (!m_overlayCtx)
     {
       // can't happen
-      release_carray (cargs);
+      release_cArray (cargs);
       TRACEPOINT;
       return;
     }
@@ -1013,5 +982,5 @@ CryptController::start_crypto_overlay ()
       log_debug ("%i: '%s'", i, cargs[i]);
     }
 #endif
-  release_carray (cargs);
+  release_cArray (cargs);
 }