* coffread.c (coff_objfile_data_key): New global.
[deliverable/binutils-gdb.git] / gdb / python / py-cmd.c
CommitLineData
d8906c6f
TJB
1/* gdb commands implemented in Python
2
0b302171 3 Copyright (C) 2008-2012 Free Software Foundation, Inc.
d8906c6f
TJB
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20
21#include "defs.h"
d452c4bc 22#include "arch-utils.h"
d8906c6f
TJB
23#include "value.h"
24#include "exceptions.h"
25#include "python-internal.h"
26#include "charset.h"
27#include "gdbcmd.h"
28#include "cli/cli-decode.h"
29#include "completer.h"
d452c4bc 30#include "language.h"
d8906c6f
TJB
31
32/* Struct representing built-in completion types. */
33struct cmdpy_completer
34{
35 /* Python symbol name. */
36 char *name;
37 /* Completion function. */
625e8578 38 completer_ftype *completer;
d8906c6f
TJB
39};
40
41static struct cmdpy_completer completers[] =
42{
43 { "COMPLETE_NONE", noop_completer },
44 { "COMPLETE_FILENAME", filename_completer },
45 { "COMPLETE_LOCATION", location_completer },
46 { "COMPLETE_COMMAND", command_completer },
47 { "COMPLETE_SYMBOL", make_symbol_completion_list_fn },
48};
49
50#define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
51
52/* A gdb command. For the time being only ordinary commands (not
53 set/show commands) are allowed. */
54struct cmdpy_object
55{
56 PyObject_HEAD
57
58 /* The corresponding gdb command object, or NULL if the command is
59 no longer installed. */
60 struct cmd_list_element *command;
61
62 /* A prefix command requires storage for a list of its sub-commands.
63 A pointer to this is passed to add_prefix_command, and to add_cmd
64 for sub-commands of that prefix. If this Command is not a prefix
65 command, then this field is unused. */
66 struct cmd_list_element *sub_list;
67};
68
69typedef struct cmdpy_object cmdpy_object;
70
71static PyTypeObject cmdpy_object_type;
72
d8906c6f
TJB
73/* Constants used by this module. */
74static PyObject *invoke_cst;
75static PyObject *complete_cst;
76
77\f
78
79/* Python function which wraps dont_repeat. */
80static PyObject *
81cmdpy_dont_repeat (PyObject *self, PyObject *args)
82{
83 dont_repeat ();
84 Py_RETURN_NONE;
85}
86
87\f
88
89/* Called if the gdb cmd_list_element is destroyed. */
07ca107c 90
d8906c6f
TJB
91static void
92cmdpy_destroyer (struct cmd_list_element *self, void *context)
93{
94 cmdpy_object *cmd;
d452c4bc 95 struct cleanup *cleanup;
d8906c6f 96
d452c4bc 97 cleanup = ensure_python_env (get_current_arch (), current_language);
d8906c6f
TJB
98
99 /* Release our hold on the command object. */
100 cmd = (cmdpy_object *) context;
101 cmd->command = NULL;
102 Py_DECREF (cmd);
103
104 /* We allocated the name, doc string, and perhaps the prefix
105 name. */
106 xfree (self->name);
107 xfree (self->doc);
108 xfree (self->prefixname);
109
d452c4bc 110 do_cleanups (cleanup);
d8906c6f
TJB
111}
112
113/* Called by gdb to invoke the command. */
07ca107c 114
d8906c6f
TJB
115static void
116cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
117{
118 cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
119 PyObject *argobj, *ttyobj, *result;
120 struct cleanup *cleanup;
d8906c6f 121
d452c4bc 122 cleanup = ensure_python_env (get_current_arch (), current_language);
d8906c6f
TJB
123
124 if (! obj)
125 error (_("Invalid invocation of Python command object."));
126 if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
127 {
128 if (obj->command->prefixname)
129 {
130 /* A prefix command does not need an invoke method. */
131 do_cleanups (cleanup);
132 return;
133 }
134 error (_("Python command object missing 'invoke' method."));
135 }
136
137 if (! args)
138 args = "";
139 argobj = PyUnicode_Decode (args, strlen (args), host_charset (), NULL);
140 if (! argobj)
8dc78533
JK
141 {
142 gdbpy_print_stack ();
143 error (_("Could not convert arguments to Python string."));
144 }
d8906c6f
TJB
145
146 ttyobj = from_tty ? Py_True : Py_False;
147 Py_INCREF (ttyobj);
148 result = PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, argobj,
149 ttyobj, NULL);
150 Py_DECREF (argobj);
151 Py_DECREF (ttyobj);
07ca107c 152
d8906c6f
TJB
153 if (! result)
154 {
155 PyObject *ptype, *pvalue, *ptraceback;
07ca107c 156 char *msg;
d8906c6f
TJB
157
158 PyErr_Fetch (&ptype, &pvalue, &ptraceback);
159
07ca107c
DE
160 /* Try to fetch an error message contained within ptype, pvalue.
161 When fetching the error message we need to make our own copy,
162 we no longer own ptype, pvalue after the call to PyErr_Restore. */
d8906c6f 163
07ca107c
DE
164 msg = gdbpy_exception_to_string (ptype, pvalue);
165 make_cleanup (xfree, msg);
166
167 if (msg == NULL)
168 {
169 /* An error occurred computing the string representation of the
170 error message. This is rare, but we should inform the user. */
171 printf_filtered (_("An error occurred in a Python command\n"
9a2b4c1b
MS
172 "and then another occurred computing the "
173 "error message.\n"));
d8906c6f 174 gdbpy_print_stack ();
d8906c6f 175 }
07ca107c
DE
176
177 /* Don't print the stack for gdb.GdbError exceptions.
178 It is generally used to flag user errors.
179
180 We also don't want to print "Error occurred in Python command"
181 for user errors. However, a missing message for gdb.GdbError
182 exceptions is arguably a bug, so we flag it as such. */
183
184 if (! PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
185 || msg == NULL || *msg == '\0')
d8906c6f
TJB
186 {
187 PyErr_Restore (ptype, pvalue, ptraceback);
188 gdbpy_print_stack ();
07ca107c
DE
189 if (msg != NULL && *msg != '\0')
190 error (_("Error occurred in Python command: %s"), msg);
191 else
192 error (_("Error occurred in Python command."));
d8906c6f 193 }
07ca107c 194 else
cca56ac7
TT
195 {
196 Py_XDECREF (ptype);
197 Py_XDECREF (pvalue);
198 Py_XDECREF (ptraceback);
199 error ("%s", msg);
200 }
d8906c6f 201 }
07ca107c 202
d8906c6f
TJB
203 Py_DECREF (result);
204 do_cleanups (cleanup);
205}
206
207/* Called by gdb for command completion. */
63d97a20 208
49c4e619 209static VEC (char_ptr) *
d8906c6f
TJB
210cmdpy_completer (struct cmd_list_element *command, char *text, char *word)
211{
212 cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
213 PyObject *textobj, *wordobj, *resultobj = NULL;
49c4e619 214 VEC (char_ptr) *result = NULL;
d8906c6f 215 struct cleanup *cleanup;
d8906c6f 216
d452c4bc 217 cleanup = ensure_python_env (get_current_arch (), current_language);
d8906c6f
TJB
218
219 if (! obj)
220 error (_("Invalid invocation of Python command object."));
221 if (! PyObject_HasAttr ((PyObject *) obj, complete_cst))
222 {
223 /* If there is no complete method, don't error -- instead, just
224 say that there are no completions. */
225 goto done;
226 }
227
228 textobj = PyUnicode_Decode (text, strlen (text), host_charset (), NULL);
229 if (! textobj)
230 error (_("Could not convert argument to Python string."));
231 wordobj = PyUnicode_Decode (word, strlen (word), host_charset (), NULL);
232 if (! wordobj)
233 error (_("Could not convert argument to Python string."));
234
235 resultobj = PyObject_CallMethodObjArgs ((PyObject *) obj, complete_cst,
236 textobj, wordobj, NULL);
237 Py_DECREF (textobj);
238 Py_DECREF (wordobj);
239 if (! resultobj)
240 {
241 /* Just swallow errors here. */
242 PyErr_Clear ();
243 goto done;
244 }
245 make_cleanup_py_decref (resultobj);
246
247 result = NULL;
248 if (PySequence_Check (resultobj))
249 {
250 Py_ssize_t i, len = PySequence_Size (resultobj);
251 Py_ssize_t out;
d59b6f6c 252
d8906c6f
TJB
253 if (len < 0)
254 goto done;
255
d8906c6f
TJB
256 for (i = out = 0; i < len; ++i)
257 {
d8906c6f 258 PyObject *elt = PySequence_GetItem (resultobj, i);
49c4e619 259 char *item;
d59b6f6c 260
d8906c6f
TJB
261 if (elt == NULL || ! gdbpy_is_string (elt))
262 {
263 /* Skip problem elements. */
264 PyErr_Clear ();
265 continue;
266 }
49c4e619
TT
267 item = python_string_to_host_string (elt);
268 if (item == NULL)
8dc78533
JK
269 {
270 /* Skip problem elements. */
271 PyErr_Clear ();
272 continue;
273 }
49c4e619 274 VEC_safe_push (char_ptr, result, item);
d8906c6f 275 }
d8906c6f
TJB
276 }
277 else if (PyInt_Check (resultobj))
278 {
279 /* User code may also return one of the completion constants,
280 thus requesting that sort of completion. */
74aedc46 281 long value;
d59b6f6c 282
74aedc46
TT
283 if (! gdb_py_int_as_long (resultobj, &value))
284 {
285 /* Ignore. */
286 PyErr_Clear ();
287 }
288 else if (value >= 0 && value < (long) N_COMPLETERS)
d8906c6f
TJB
289 result = completers[value].completer (command, text, word);
290 }
291
292 done:
293
294 do_cleanups (cleanup);
295
296 return result;
297}
298
299/* Helper for cmdpy_init which locates the command list to use and
300 pulls out the command name.
301
63d97a20 302 NAME is the command name list. The final word in the list is the
d8906c6f
TJB
303 name of the new command. All earlier words must be existing prefix
304 commands.
305
306 *BASE_LIST is set to the final prefix command's list of
307 *sub-commands.
308
d7b32ed3
PM
309 START_LIST is the list in which the search starts.
310
d8906c6f
TJB
311 This function returns the xmalloc()d name of the new command. On
312 error sets the Python error and returns NULL. */
63d97a20 313
d7b32ed3 314char *
63d97a20 315gdbpy_parse_command_name (const char *name,
d7b32ed3
PM
316 struct cmd_list_element ***base_list,
317 struct cmd_list_element **start_list)
d8906c6f
TJB
318{
319 struct cmd_list_element *elt;
63d97a20 320 int len = strlen (name);
d8906c6f 321 int i, lastchar;
63d97a20 322 char *prefix_text, *prefix_text2;
d8906c6f
TJB
323 char *result;
324
325 /* Skip trailing whitespace. */
63d97a20 326 for (i = len - 1; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
d8906c6f
TJB
327 ;
328 if (i < 0)
329 {
044c0f87 330 PyErr_SetString (PyExc_RuntimeError, _("No command name found."));
d8906c6f
TJB
331 return NULL;
332 }
333 lastchar = i;
334
335 /* Find first character of the final word. */
63d97a20
DE
336 for (; i > 0 && (isalnum (name[i - 1])
337 || name[i - 1] == '-'
338 || name[i - 1] == '_');
d8906c6f
TJB
339 --i)
340 ;
341 result = xmalloc (lastchar - i + 2);
63d97a20 342 memcpy (result, &name[i], lastchar - i + 1);
d8906c6f
TJB
343 result[lastchar - i + 1] = '\0';
344
345 /* Skip whitespace again. */
63d97a20 346 for (--i; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
d8906c6f
TJB
347 ;
348 if (i < 0)
349 {
d7b32ed3 350 *base_list = start_list;
d8906c6f
TJB
351 return result;
352 }
353
354 prefix_text = xmalloc (i + 2);
63d97a20 355 memcpy (prefix_text, name, i + 1);
d8906c6f
TJB
356 prefix_text[i + 1] = '\0';
357
63d97a20
DE
358 prefix_text2 = prefix_text;
359 elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1);
d8906c6f
TJB
360 if (!elt || elt == (struct cmd_list_element *) -1)
361 {
044c0f87 362 PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."),
d8906c6f
TJB
363 prefix_text);
364 xfree (prefix_text);
365 xfree (result);
366 return NULL;
367 }
368
369 if (elt->prefixlist)
370 {
371 xfree (prefix_text);
372 *base_list = elt->prefixlist;
373 return result;
374 }
375
044c0f87 376 PyErr_Format (PyExc_RuntimeError, _("'%s' is not a prefix command."),
d8906c6f
TJB
377 prefix_text);
378 xfree (prefix_text);
379 xfree (result);
380 return NULL;
381}
382
383/* Object initializer; sets up gdb-side structures for command.
384
cc924cad 385 Use: __init__(NAME, COMMAND_CLASS [, COMPLETER_CLASS][, PREFIX]]).
d8906c6f
TJB
386
387 NAME is the name of the command. It may consist of multiple words,
388 in which case the final word is the name of the new command, and
389 earlier words must be prefix commands.
390
cc924cad 391 COMMAND_CLASS is the kind of command. It should be one of the COMMAND_*
d8906c6f
TJB
392 constants defined in the gdb module.
393
cc924cad 394 COMPLETER_CLASS is the kind of completer. If not given, the
d8906c6f
TJB
395 "complete" method will be used. Otherwise, it should be one of the
396 COMPLETE_* constants defined in the gdb module.
397
398 If PREFIX is True, then this command is a prefix command.
399
400 The documentation for the command is taken from the doc string for
63d97a20
DE
401 the python class. */
402
d8906c6f 403static int
cc924cad 404cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
d8906c6f
TJB
405{
406 cmdpy_object *obj = (cmdpy_object *) self;
ddd49eee 407 const char *name;
d8906c6f
TJB
408 int cmdtype;
409 int completetype = -1;
410 char *docstring = NULL;
411 volatile struct gdb_exception except;
412 struct cmd_list_element **cmd_list;
413 char *cmd_name, *pfx_name;
cc924cad
TJB
414 static char *keywords[] = { "name", "command_class", "completer_class",
415 "prefix", NULL };
d8906c6f
TJB
416 PyObject *is_prefix = NULL;
417 int cmp;
418
419 if (obj->command)
420 {
421 /* Note: this is apparently not documented in Python. We return
422 0 for success, -1 for failure. */
423 PyErr_Format (PyExc_RuntimeError,
044c0f87 424 _("Command object already initialized."));
d8906c6f
TJB
425 return -1;
426 }
427
9a2b4c1b
MS
428 if (! PyArg_ParseTupleAndKeywords (args, kw, "si|iO",
429 keywords, &name, &cmdtype,
d8906c6f
TJB
430 &completetype, &is_prefix))
431 return -1;
432
433 if (cmdtype != no_class && cmdtype != class_run
434 && cmdtype != class_vars && cmdtype != class_stack
435 && cmdtype != class_files && cmdtype != class_support
436 && cmdtype != class_info && cmdtype != class_breakpoint
437 && cmdtype != class_trace && cmdtype != class_obscure
7d74f244 438 && cmdtype != class_maintenance && cmdtype != class_user)
d8906c6f 439 {
044c0f87 440 PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
d8906c6f
TJB
441 return -1;
442 }
443
444 if (completetype < -1 || completetype >= (int) N_COMPLETERS)
445 {
9a2b4c1b
MS
446 PyErr_Format (PyExc_RuntimeError,
447 _("Invalid completion type argument."));
d8906c6f
TJB
448 return -1;
449 }
450
63d97a20 451 cmd_name = gdbpy_parse_command_name (name, &cmd_list, &cmdlist);
d8906c6f
TJB
452 if (! cmd_name)
453 return -1;
454
455 pfx_name = NULL;
456 if (is_prefix != NULL)
457 {
458 cmp = PyObject_IsTrue (is_prefix);
459 if (cmp == 1)
460 {
461 int i, out;
462
463 /* Make a normalized form of the command name. */
464 pfx_name = xmalloc (strlen (name) + 2);
465
466 i = 0;
467 out = 0;
468 while (name[i])
469 {
470 /* Skip whitespace. */
471 while (name[i] == ' ' || name[i] == '\t')
472 ++i;
473 /* Copy non-whitespace characters. */
474 while (name[i] && name[i] != ' ' && name[i] != '\t')
475 pfx_name[out++] = name[i++];
476 /* Add a single space after each word -- including the final
477 word. */
478 pfx_name[out++] = ' ';
479 }
480 pfx_name[out] = '\0';
481 }
482 else if (cmp < 0)
e463f587
MS
483 {
484 xfree (cmd_name);
d8906c6f 485 return -1;
e463f587 486 }
d8906c6f
TJB
487 }
488 if (PyObject_HasAttr (self, gdbpy_doc_cst))
489 {
490 PyObject *ds_obj = PyObject_GetAttr (self, gdbpy_doc_cst);
d59b6f6c 491
d8906c6f 492 if (ds_obj && gdbpy_is_string (ds_obj))
8dc78533
JK
493 {
494 docstring = python_string_to_host_string (ds_obj);
495 if (docstring == NULL)
496 {
497 xfree (cmd_name);
498 xfree (pfx_name);
499 return -1;
500 }
501 }
d8906c6f
TJB
502 }
503 if (! docstring)
504 docstring = xstrdup (_("This command is not documented."));
505
506 Py_INCREF (self);
507
508 TRY_CATCH (except, RETURN_MASK_ALL)
509 {
510 struct cmd_list_element *cmd;
511
512 if (pfx_name)
513 {
514 int allow_unknown;
515
516 /* If we have our own "invoke" method, then allow unknown
517 sub-commands. */
518 allow_unknown = PyObject_HasAttr (self, invoke_cst);
519 cmd = add_prefix_cmd (cmd_name, (enum command_class) cmdtype,
520 NULL, docstring, &obj->sub_list,
521 pfx_name, allow_unknown, cmd_list);
522 }
523 else
524 cmd = add_cmd (cmd_name, (enum command_class) cmdtype, NULL,
525 docstring, cmd_list);
526
527 /* There appears to be no API to set this. */
528 cmd->func = cmdpy_function;
529 cmd->destroyer = cmdpy_destroyer;
530
531 obj->command = cmd;
532 set_cmd_context (cmd, self);
533 set_cmd_completer (cmd, ((completetype == -1) ? cmdpy_completer
534 : completers[completetype].completer));
535 }
536 if (except.reason < 0)
537 {
538 xfree (cmd_name);
539 xfree (docstring);
540 xfree (pfx_name);
541 Py_DECREF (self);
542 PyErr_Format (except.reason == RETURN_QUIT
543 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
544 "%s", except.message);
545 return -1;
546 }
547 return 0;
548}
549
550\f
551
552/* Initialize the 'commands' code. */
63d97a20 553
d8906c6f
TJB
554void
555gdbpy_initialize_commands (void)
556{
557 int i;
558
6a1b1664 559 cmdpy_object_type.tp_new = PyType_GenericNew;
d8906c6f
TJB
560 if (PyType_Ready (&cmdpy_object_type) < 0)
561 return;
562
563 /* Note: alias and user are special; pseudo appears to be unused,
564 and there is no reason to expose tui or xdb, I think. */
565 if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0
566 || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0
567 || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0
568 || PyModule_AddIntConstant (gdb_module, "COMMAND_STACK", class_stack) < 0
569 || PyModule_AddIntConstant (gdb_module, "COMMAND_FILES", class_files) < 0
570 || PyModule_AddIntConstant (gdb_module, "COMMAND_SUPPORT",
571 class_support) < 0
572 || PyModule_AddIntConstant (gdb_module, "COMMAND_STATUS", class_info) < 0
573 || PyModule_AddIntConstant (gdb_module, "COMMAND_BREAKPOINTS",
574 class_breakpoint) < 0
575 || PyModule_AddIntConstant (gdb_module, "COMMAND_TRACEPOINTS",
576 class_trace) < 0
577 || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
578 class_obscure) < 0
579 || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
7d74f244
DE
580 class_maintenance) < 0
581 || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0)
d8906c6f
TJB
582 return;
583
584 for (i = 0; i < N_COMPLETERS; ++i)
585 {
586 if (PyModule_AddIntConstant (gdb_module, completers[i].name, i) < 0)
587 return;
588 }
589
590 Py_INCREF (&cmdpy_object_type);
591 PyModule_AddObject (gdb_module, "Command",
592 (PyObject *) &cmdpy_object_type);
593
594 invoke_cst = PyString_FromString ("invoke");
595 complete_cst = PyString_FromString ("complete");
596}
597
598\f
599
600static PyMethodDef cmdpy_object_methods[] =
601{
602 { "dont_repeat", cmdpy_dont_repeat, METH_NOARGS,
603 "Prevent command repetition when user enters empty line." },
604
605 { 0 }
606};
607
608static PyTypeObject cmdpy_object_type =
609{
610 PyObject_HEAD_INIT (NULL)
611 0, /*ob_size*/
612 "gdb.Command", /*tp_name*/
613 sizeof (cmdpy_object), /*tp_basicsize*/
614 0, /*tp_itemsize*/
615 0, /*tp_dealloc*/
616 0, /*tp_print*/
617 0, /*tp_getattr*/
618 0, /*tp_setattr*/
619 0, /*tp_compare*/
620 0, /*tp_repr*/
621 0, /*tp_as_number*/
622 0, /*tp_as_sequence*/
623 0, /*tp_as_mapping*/
624 0, /*tp_hash */
625 0, /*tp_call*/
626 0, /*tp_str*/
627 0, /*tp_getattro*/
628 0, /*tp_setattro*/
629 0, /*tp_as_buffer*/
630 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
631 "GDB command object", /* tp_doc */
632 0, /* tp_traverse */
633 0, /* tp_clear */
634 0, /* tp_richcompare */
635 0, /* tp_weaklistoffset */
636 0, /* tp_iter */
637 0, /* tp_iternext */
638 cmdpy_object_methods, /* tp_methods */
639 0, /* tp_members */
640 0, /* tp_getset */
641 0, /* tp_base */
642 0, /* tp_dict */
643 0, /* tp_descr_get */
644 0, /* tp_descr_set */
645 0, /* tp_dictoffset */
646 cmdpy_init, /* tp_init */
647 0, /* tp_alloc */
d8906c6f 648};
07ca107c
DE
649
650\f
651
652/* Utility to build a buildargv-like result from ARGS.
653 This intentionally parses arguments the way libiberty/argv.c:buildargv
654 does. It splits up arguments in a reasonable way, and we want a standard
655 way of parsing arguments. Several gdb commands use buildargv to parse their
656 arguments. Plus we want to be able to write compatible python
657 implementations of gdb commands. */
658
659PyObject *
660gdbpy_string_to_argv (PyObject *self, PyObject *args)
661{
662 PyObject *py_argv;
ddd49eee 663 const char *input;
07ca107c
DE
664
665 if (!PyArg_ParseTuple (args, "s", &input))
666 return NULL;
667
668 py_argv = PyList_New (0);
669
670 /* buildargv uses NULL to represent an empty argument list, but we can't use
671 that in Python. Instead, if ARGS is "" then return an empty list.
672 This undoes the NULL -> "" conversion that cmdpy_function does. */
673
674 if (*input != '\0')
675 {
676 char **c_argv = gdb_buildargv (input);
677 int i;
678
679 for (i = 0; c_argv[i] != NULL; ++i)
680 {
681 PyObject *argp = PyString_FromString (c_argv[i]);
682
683 if (argp == NULL
684 || PyList_Append (py_argv, argp) < 0)
685 {
5af65ec0 686 Py_XDECREF (argp);
07ca107c
DE
687 Py_DECREF (py_argv);
688 freeargv (c_argv);
689 return NULL;
690 }
5af65ec0 691 Py_DECREF (argp);
07ca107c
DE
692 }
693
694 freeargv (c_argv);
695 }
696
697 return py_argv;
698}
This page took 0.471773 seconds and 4 git commands to generate.