Use gdb_argv in Python
authorTom Tromey <tom@tromey.com>
Mon, 1 May 2017 05:03:58 +0000 (23:03 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 3 Aug 2017 13:59:09 +0000 (07:59 -0600)
This changes one spot in the Python code to use gdb_argv.  This
removes the last cleanup from the Python layer.

ChangeLog
2017-08-03  Tom Tromey  <tom@tromey.com>

* python/py-param.c (compute_enum_values): Use gdb_argv.

gdb/ChangeLog
gdb/python/py-param.c

index 392f58a67d26ea4c838cf94ce34e27e91e183689..074491c7824f06b56bd3575f5a203e615cdda7c7 100644 (file)
@@ -1,3 +1,7 @@
+2017-08-03  Tom Tromey  <tom@tromey.com>
+
+       * python/py-param.c (compute_enum_values): Use gdb_argv.
+
 2017-08-03  Tom Tromey  <tom@tromey.com>
 
        * utils.h (struct gdb_argv_deleter): New.
index f0d3423e3bf93a871bf334d0995062f96415e7c2..455c99e51641dcce738dd398803332e58aba7799 100644 (file)
@@ -555,7 +555,6 @@ static int
 compute_enum_values (parmpy_object *self, PyObject *enum_values)
 {
   Py_ssize_t size, i;
-  struct cleanup *back_to;
 
   if (! enum_values)
     {
@@ -581,36 +580,27 @@ compute_enum_values (parmpy_object *self, PyObject *enum_values)
       return 0;
     }
 
-  self->enumeration = XCNEWVEC (const char *, size + 1);
-  back_to = make_cleanup (free_current_contents, &self->enumeration);
+  gdb_argv holder (XCNEWVEC (char *, size + 1));
+  char **enumeration = holder.get ();
 
   for (i = 0; i < size; ++i)
     {
       gdbpy_ref<> item (PySequence_GetItem (enum_values, i));
 
       if (item == NULL)
-       {
-         do_cleanups (back_to);
-         return 0;
-       }
+       return 0;
       if (! gdbpy_is_string (item.get ()))
        {
-         do_cleanups (back_to);
          PyErr_SetString (PyExc_RuntimeError,
                           _("The enumeration item not a string."));
          return 0;
        }
-      self->enumeration[i]
-       = python_string_to_host_string (item.get ()).release ();
-      if (self->enumeration[i] == NULL)
-       {
-         do_cleanups (back_to);
-         return 0;
-       }
-      make_cleanup (xfree, (char *) self->enumeration[i]);
+      enumeration[i] = python_string_to_host_string (item.get ()).release ();
+      if (enumeration[i] == NULL)
+       return 0;
     }
 
-  discard_cleanups (back_to);
+  self->enumeration = const_cast<const char**> (holder.release ());
   return 1;
 }