Merge/shared string_printf and string_vprintf unit tests
[deliverable/binutils-gdb.git] / gdb / common / common-utils.c
index e112b62846033c9d5d6532e925419a88d9285569..d8c546a3d939a14ee6fc3555c39273eaf707d2d8 100644 (file)
@@ -1,6 +1,6 @@
 /* Shared general utility routines for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2016 Free Software Foundation, Inc.
+   Copyright (C) 1986-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,6 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "common-defs.h"
+#include "common-utils.h"
 #include "host-defs.h"
 #include <ctype.h>
 
@@ -173,6 +174,27 @@ string_printf (const char* fmt, ...)
   return str;
 }
 
+/* See documentation in common-utils.h.  */
+
+std::string
+string_vprintf (const char* fmt, va_list args)
+{
+  va_list vp;
+  size_t size;
+
+  va_copy (vp, args);
+  size = vsnprintf (NULL, 0, fmt, vp);
+  va_end (vp);
+
+  std::string str (size, '\0');
+
+  /* C++11 and later guarantee std::string uses contiguous memory and
+     always includes the terminating '\0'.  */
+  vsprintf (&str[0], fmt, args);
+
+  return str;
+}
+
 char *
 savestring (const char *ptr, size_t len)
 {
@@ -297,7 +319,7 @@ skip_spaces (char *chp)
 /* A const-correct version of the above.  */
 
 const char *
-skip_spaces_const (const char *chp)
+skip_spaces (const char *chp)
 {
   if (chp == NULL)
     return NULL;
@@ -309,7 +331,7 @@ skip_spaces_const (const char *chp)
 /* See documentation in common-utils.h.  */
 
 const char *
-skip_to_space_const (const char *chp)
+skip_to_space (const char *chp)
 {
   if (chp == NULL)
     return NULL;
@@ -317,3 +339,45 @@ skip_to_space_const (const char *chp)
     chp++;
   return chp;
 }
+
+/* See documentation in common-utils.h.  */
+
+char *
+skip_to_space (char *chp)
+{
+  return (char *) skip_to_space ((const char *) chp);
+}
+
+/* See common/common-utils.h.  */
+
+void
+free_vector_argv (std::vector<char *> &v)
+{
+  for (char *el : v)
+    xfree (el);
+
+  v.clear ();
+}
+
+/* See common/common-utils.h.  */
+
+std::string
+stringify_argv (const std::vector<char *> &args)
+{
+  std::string ret;
+
+  if (!args.empty () && args[0] != NULL)
+    {
+      for (auto s : args)
+       if (s != NULL)
+         {
+           ret += s;
+           ret += ' ';
+         }
+
+      /* Erase the last whitespace.  */
+      ret.erase (ret.end () - 1);
+    }
+
+  return ret;
+}
This page took 0.026382 seconds and 4 git commands to generate.