binutils-gdb/gdb/python
Pedro Alves 2adadf5170 -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload
-Wwrite-strings flags code like:

   static char *keywords[] = {"command", "from_tty", "to_string", NULL };

as needing "(char *)" casts, because string literals are "const char []".

We can get rid of the casts by changing the array type like this:

 -  static char *keywords[] = {"command", "from_tty", "to_string", NULL };
 +  static const char *keywords[] = {"command", "from_tty", "to_string", NULL };

However, passing the such array to PyArg_ParseTupleAndKeywords no longer
works OOTB, because PyArg_ParseTupleAndKeywords expects a "char **":

  PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw,
                              const char *format,
			      char *keywords[], ...);

and "const char **" is not implicitly convertible to "char **".  C++
is more tolerant that C here WRT aliasing, and a const_cast<char **>
is fine.  However, to avoid having all callers do the cast themselves,
this commit defines a gdb_PyArg_ParseTupleAndKeywords function here
with a corresponding 'keywords' parameter type that does the cast in a
single place.

gdb/ChangeLog:
2017-04-05  Pedro Alves  <palves@redhat.com>

	* python/python-internal.h (gdb_PyArg_ParseTupleAndKeywords): New
	static inline function.
	* python/py-arch.c (archpy_disassemble): Constify 'keywords'
	array and use gdb_PyArg_ParseTupleAndKeywords.
	* python/py-cmd.c (cmdpy_init): Likewise.
	* python/py-finishbreakpoint.c (bpfinishpy_init): Likewise.
	* python/py-inferior.c (infpy_read_memory, infpy_write_memory)
	(infpy_search_memory): Likewise.
	* python/py-objfile.c (objfpy_add_separate_debug_file)
	(gdbpy_lookup_objfile): Likewise.
	* python/py-symbol.c (gdbpy_lookup_symbol)
	(gdbpy_lookup_global_symbol): Likewise.
	* python/py-type.c (gdbpy_lookup_type): Likewise.
	* python/py-value.c (valpy_lazy_string, valpy_string): Likewise.
	* python/python.c (execute_gdb_command, gdbpy_write, gdbpy_flush):
	Likewise.
2017-04-05 19:21:36 +01:00
..
lib/gdb Import sys in gdb/python/lib/gdb/printer/bound_registers.py 2017-03-22 11:22:07 +00:00
py-arch.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-auto-load.c
py-block.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-bpevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-breakpoint.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-cmd.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-continueevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-event.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-event.h
py-events.h PR python/13598 - add before_prompt event 2017-02-14 10:38:56 -07:00
py-evtregistry.c Use gdbpy_ref to simplify some logic 2017-02-10 12:24:32 -07:00
py-evts.c PR python/13598 - add before_prompt event 2017-02-14 10:38:56 -07:00
py-exitedevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-finishbreakpoint.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-frame.c Use gdbpy_ref to simplify some logic 2017-02-10 12:24:32 -07:00
py-framefilter.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-function.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-gdb-readline.c Fix python-interactive with Python 3.6 2017-01-20 20:39:08 -05:00
py-inferior.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-infevents.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-infthread.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-lazy-string.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-linetable.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-newobjfileevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-objfile.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-param.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-prettyprint.c Change one more spot to use gdbpy_ref 2017-02-10 12:24:33 -07:00
py-progspace.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-record-btrace.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-record-btrace.h python: Implement btrace Python bindings for record history. 2017-02-14 10:57:56 +01:00
py-record-full.c python: Implement btrace Python bindings for record history. 2017-02-14 10:57:56 +01:00
py-record-full.h python: Implement btrace Python bindings for record history. 2017-02-14 10:57:56 +01:00
py-record.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-ref.h Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-signalevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-stopevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-stopevent.h
py-symbol.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-symtab.c -Wwrite-strings: Wrap PyGetSetDef for construction with string literals 2017-04-05 19:21:36 +01:00
py-threadevent.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-type.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-unwind.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-utils.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-value.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
py-varobj.c Turn gdbpy_ref into a template 2017-02-10 12:24:31 -07:00
py-xmethods.c Support rvalue references in the gdb python module (includes doc/) 2017-03-20 13:47:52 -07:00
python-config.py
python-internal.h -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
python.c -Wwrite-strings: Add a PyArg_ParseTupleAndKeywords "const char *" overload 2017-04-05 19:21:36 +01:00
python.h