2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com>
gdb/
* defs.h: Add guard against inclusion in gdbserver.
(struct ptid, ptid_t): Move to common/ptid.h.
(xfree, xzalloc, xasprintf, xvasprintf, xstrprintf, xstrvprintf,
xsnprintf, internal_error): Move to common/common-utils.h.
(nomem): Delete.
* gdb_assert.h: Move into common/ sub-directory.
* gdb_locale.h: Ditto.
* gdb_dirent.h: Ditto.
* inferior.h (minus_one_ptid, null_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid):
Move into common/ptid.h.
* xml-support.c (xml_escape_text): Move into common/xml-utils.c.
(gdb_xml_create_parser_and_cleanup_1, xml_fetch_context_from_file):
Change nomem to malloc_failure.
* xml-support.h (xml_escape_text): Move into common/xml-utils.h.
* utils.c (nomem): Rename to malloc_failure.
(xmalloc, xzalloc, xrealloc, xcalloc, xfree, xstrprintf, xasprintf,
xvasprintf, xstrvprintf, xsnprintf): Move to common/common-utils.c.
(gdb_buildargv): Change nomem to malloc_failure.
* infrun.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal,
ptid_is_pid): Move into common/ptid.c.
(initialize_infrun): Delete initialization of null_ptid and
minus_one_ptid.
* linux-nat.c (linux_nat_xfer_osdata): Defer to
linux_common_xfer_osdata.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/ptid.c and common/buffer.c.
(HFILES_NO_SRCDIR): Add common/common-utils.h, common/xml-utils.h,
common/ptid.h, common/buffer.h and common/linux-osdata.h.
(COMMON_OBS): Add xml-utils.o, common-utils.o, buffer.o and ptid.o.
(common-utils.o, xml-utils.o, ptid.o, buffer.o, linux-osdata.o): New
rules.
* common/gdb_assert.h: New.
* common/gdb_dirent.h: New.
* common/gdb_locale.h: New.
* common/buffer.c: New.
* common/buffer.h: New.
* common/ptid.c: New.
* common/ptid.h: New.
* common/xml-utils.c: New.
* common/xml-utils.h: New.
* common/common-utils.c: New.
* common/common-utils.h: New.
* common/linux-osdata.c: New.
* common/linux-osdata.h: New.
* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-osdata.o.
* config/arm/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux64.mh (NATDEPFILES): Ditto.
* config/ia64/linux.mh (NATDEPFILES): Ditto.
* config/m32r/linux.mh (NATDEPFILES): Ditto.
* config/m68k/linux.mh (NATDEPFILES): Ditto.
* config/mips/linux.mh (NATDEPFILES): Ditto.
* config/pa/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Ditto.
* config/s390/s390.mh (NATDEPFILES): Ditto.
* config/sparc/linux.mh (NATDEPFILES): Ditto.
* config/sparc/linux64.mh (NATDEPFILES): Ditto.
* config/xtensa/linux.mh (NATDEPFILES): Ditto.
gdbserver/
* linux-low.c (compare_ints, unique, list_threads, show_process,
linux_core_of_thread): Delete.
(linux_target_ops): Change linux_core_of_thread to
linux_common_core_of_thread.
(linux_qxfer_osdata): Defer to linux_common_xfer_osdata.
* utils.c (malloc_failure): Change type of argument.
(xmalloc, xrealloc, xcalloc, xsnprintf): Delete.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/linux-osdata.c, common/ptid.c and common/buffer.c.
(OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o.
(IPA_OBJS): Add common-utils-ipa.o.
(ptid_h, linux_osdata_h): New macros.
(server_h): Add common/common-utils.h, common/xml-utils.h,
common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and
common/ptid.h.
(common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o,
ptid.o, buffer.o): New rules.
(linux-low.o): Add common/linux-osdata.h as a dependency.
* configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets.
* configure.ac: Add AC_HEADER_DIRENT check.
* config.in: Regenerate.
* configure: Regenerate.
* remote-utils.c (xml_escape_text): Delete.
(buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf): Move to common/buffer.c.
* server.c (main): Remove call to initialize_inferiors.
* server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid,
ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid,
ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text,
internal_error, gdb_assert, gdb_assert_fail): Delete.
(struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to
common/buffer.h.
* inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid,
initialize_inferiors): Delete.
2011-07-21 23:46:12 +00:00
|
|
|
/* Shared general utility routines for GDB, the GNU debugger.
|
|
|
|
|
2016-01-01 04:33:14 +00:00
|
|
|
Copyright (C) 1986-2016 Free Software Foundation, Inc.
|
2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com>
gdb/
* defs.h: Add guard against inclusion in gdbserver.
(struct ptid, ptid_t): Move to common/ptid.h.
(xfree, xzalloc, xasprintf, xvasprintf, xstrprintf, xstrvprintf,
xsnprintf, internal_error): Move to common/common-utils.h.
(nomem): Delete.
* gdb_assert.h: Move into common/ sub-directory.
* gdb_locale.h: Ditto.
* gdb_dirent.h: Ditto.
* inferior.h (minus_one_ptid, null_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid):
Move into common/ptid.h.
* xml-support.c (xml_escape_text): Move into common/xml-utils.c.
(gdb_xml_create_parser_and_cleanup_1, xml_fetch_context_from_file):
Change nomem to malloc_failure.
* xml-support.h (xml_escape_text): Move into common/xml-utils.h.
* utils.c (nomem): Rename to malloc_failure.
(xmalloc, xzalloc, xrealloc, xcalloc, xfree, xstrprintf, xasprintf,
xvasprintf, xstrvprintf, xsnprintf): Move to common/common-utils.c.
(gdb_buildargv): Change nomem to malloc_failure.
* infrun.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal,
ptid_is_pid): Move into common/ptid.c.
(initialize_infrun): Delete initialization of null_ptid and
minus_one_ptid.
* linux-nat.c (linux_nat_xfer_osdata): Defer to
linux_common_xfer_osdata.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/ptid.c and common/buffer.c.
(HFILES_NO_SRCDIR): Add common/common-utils.h, common/xml-utils.h,
common/ptid.h, common/buffer.h and common/linux-osdata.h.
(COMMON_OBS): Add xml-utils.o, common-utils.o, buffer.o and ptid.o.
(common-utils.o, xml-utils.o, ptid.o, buffer.o, linux-osdata.o): New
rules.
* common/gdb_assert.h: New.
* common/gdb_dirent.h: New.
* common/gdb_locale.h: New.
* common/buffer.c: New.
* common/buffer.h: New.
* common/ptid.c: New.
* common/ptid.h: New.
* common/xml-utils.c: New.
* common/xml-utils.h: New.
* common/common-utils.c: New.
* common/common-utils.h: New.
* common/linux-osdata.c: New.
* common/linux-osdata.h: New.
* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-osdata.o.
* config/arm/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux64.mh (NATDEPFILES): Ditto.
* config/ia64/linux.mh (NATDEPFILES): Ditto.
* config/m32r/linux.mh (NATDEPFILES): Ditto.
* config/m68k/linux.mh (NATDEPFILES): Ditto.
* config/mips/linux.mh (NATDEPFILES): Ditto.
* config/pa/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Ditto.
* config/s390/s390.mh (NATDEPFILES): Ditto.
* config/sparc/linux.mh (NATDEPFILES): Ditto.
* config/sparc/linux64.mh (NATDEPFILES): Ditto.
* config/xtensa/linux.mh (NATDEPFILES): Ditto.
gdbserver/
* linux-low.c (compare_ints, unique, list_threads, show_process,
linux_core_of_thread): Delete.
(linux_target_ops): Change linux_core_of_thread to
linux_common_core_of_thread.
(linux_qxfer_osdata): Defer to linux_common_xfer_osdata.
* utils.c (malloc_failure): Change type of argument.
(xmalloc, xrealloc, xcalloc, xsnprintf): Delete.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/linux-osdata.c, common/ptid.c and common/buffer.c.
(OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o.
(IPA_OBJS): Add common-utils-ipa.o.
(ptid_h, linux_osdata_h): New macros.
(server_h): Add common/common-utils.h, common/xml-utils.h,
common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and
common/ptid.h.
(common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o,
ptid.o, buffer.o): New rules.
(linux-low.o): Add common/linux-osdata.h as a dependency.
* configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets.
* configure.ac: Add AC_HEADER_DIRENT check.
* config.in: Regenerate.
* configure: Regenerate.
* remote-utils.c (xml_escape_text): Delete.
(buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf): Move to common/buffer.c.
* server.c (main): Remove call to initialize_inferiors.
* server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid,
ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid,
ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text,
internal_error, gdb_assert, gdb_assert_fail): Delete.
(struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to
common/buffer.h.
* inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid,
initialize_inferiors): Delete.
2011-07-21 23:46:12 +00:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program 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 General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
|
2014-09-12 09:11:42 +00:00
|
|
|
#include "common-defs.h"
|
Move utility functions to common/
gdb/ChangeLog
2015-06-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>
Move utility functions to common/.
* cli/cli-utils.c (skip_spaces, skip_spaces_const, skip_to_space_const):
Move defs to common/common-utils.c.
* cli/cli-utils.h (skip_spaces, skip_spaces_const, skip_to_space)
(skip_to_space_const): Move decls to common/common-utils.h.
* common/common-defs.h: Move include of common-types.h before
common-utils.h.
* common/common-utils.c: Include host-defs.h and ctype.h.
(HIGH_BYTE_POSN, is_digit_in_base, digit_to_int, strtoulst): Move
from utils.c.
(skip_spaces, skip_spaces_const, skip_to_space_const): Move from
cli/cli-utils.c.
* common/common-utils.h (strtoulst): Move decl from utils.h.
(skip_spaces, skip_spaces_const, skip_to_space, skip_to_space_const):
Move from cli/cli-utils.h.
* common/host-defs.h: Include limits.h.
(TARGET_CHAR_BIT, HOST_CHAR_BIT): Moved from defs.h.
(skip_spaces, skip_spaces_const): Move decls from cli/cli-utils.h.
* defs.h (TARGET_CHAR_BIT, HOST_CHAR_BIT): Move to
common/common-utils.h.
* utils.c (HIGH_BYTE_POSN, is_digit_in_base, digit_to_int)
(strtoulst): Move to common/common-utils.c.
* utils.h (strtoulst): Moved decl to common/common-utils.h.
2015-06-15 15:04:56 +00:00
|
|
|
#include "host-defs.h"
|
|
|
|
#include <ctype.h>
|
2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com>
gdb/
* defs.h: Add guard against inclusion in gdbserver.
(struct ptid, ptid_t): Move to common/ptid.h.
(xfree, xzalloc, xasprintf, xvasprintf, xstrprintf, xstrvprintf,
xsnprintf, internal_error): Move to common/common-utils.h.
(nomem): Delete.
* gdb_assert.h: Move into common/ sub-directory.
* gdb_locale.h: Ditto.
* gdb_dirent.h: Ditto.
* inferior.h (minus_one_ptid, null_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid):
Move into common/ptid.h.
* xml-support.c (xml_escape_text): Move into common/xml-utils.c.
(gdb_xml_create_parser_and_cleanup_1, xml_fetch_context_from_file):
Change nomem to malloc_failure.
* xml-support.h (xml_escape_text): Move into common/xml-utils.h.
* utils.c (nomem): Rename to malloc_failure.
(xmalloc, xzalloc, xrealloc, xcalloc, xfree, xstrprintf, xasprintf,
xvasprintf, xstrvprintf, xsnprintf): Move to common/common-utils.c.
(gdb_buildargv): Change nomem to malloc_failure.
* infrun.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal,
ptid_is_pid): Move into common/ptid.c.
(initialize_infrun): Delete initialization of null_ptid and
minus_one_ptid.
* linux-nat.c (linux_nat_xfer_osdata): Defer to
linux_common_xfer_osdata.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/ptid.c and common/buffer.c.
(HFILES_NO_SRCDIR): Add common/common-utils.h, common/xml-utils.h,
common/ptid.h, common/buffer.h and common/linux-osdata.h.
(COMMON_OBS): Add xml-utils.o, common-utils.o, buffer.o and ptid.o.
(common-utils.o, xml-utils.o, ptid.o, buffer.o, linux-osdata.o): New
rules.
* common/gdb_assert.h: New.
* common/gdb_dirent.h: New.
* common/gdb_locale.h: New.
* common/buffer.c: New.
* common/buffer.h: New.
* common/ptid.c: New.
* common/ptid.h: New.
* common/xml-utils.c: New.
* common/xml-utils.h: New.
* common/common-utils.c: New.
* common/common-utils.h: New.
* common/linux-osdata.c: New.
* common/linux-osdata.h: New.
* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-osdata.o.
* config/arm/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux.mh (NATDEPFILES): Ditto.
* config/i386/linux64.mh (NATDEPFILES): Ditto.
* config/ia64/linux.mh (NATDEPFILES): Ditto.
* config/m32r/linux.mh (NATDEPFILES): Ditto.
* config/m68k/linux.mh (NATDEPFILES): Ditto.
* config/mips/linux.mh (NATDEPFILES): Ditto.
* config/pa/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/linux.mh (NATDEPFILES): Ditto.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Ditto.
* config/s390/s390.mh (NATDEPFILES): Ditto.
* config/sparc/linux.mh (NATDEPFILES): Ditto.
* config/sparc/linux64.mh (NATDEPFILES): Ditto.
* config/xtensa/linux.mh (NATDEPFILES): Ditto.
gdbserver/
* linux-low.c (compare_ints, unique, list_threads, show_process,
linux_core_of_thread): Delete.
(linux_target_ops): Change linux_core_of_thread to
linux_common_core_of_thread.
(linux_qxfer_osdata): Defer to linux_common_xfer_osdata.
* utils.c (malloc_failure): Change type of argument.
(xmalloc, xrealloc, xcalloc, xsnprintf): Delete.
* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
common/linux-osdata.c, common/ptid.c and common/buffer.c.
(OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o.
(IPA_OBJS): Add common-utils-ipa.o.
(ptid_h, linux_osdata_h): New macros.
(server_h): Add common/common-utils.h, common/xml-utils.h,
common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and
common/ptid.h.
(common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o,
ptid.o, buffer.o): New rules.
(linux-low.o): Add common/linux-osdata.h as a dependency.
* configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets.
* configure.ac: Add AC_HEADER_DIRENT check.
* config.in: Regenerate.
* configure: Regenerate.
* remote-utils.c (xml_escape_text): Delete.
(buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf): Move to common/buffer.c.
* server.c (main): Remove call to initialize_inferiors.
* server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid,
ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid,
ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text,
internal_error, gdb_assert, gdb_assert_fail): Delete.
(struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish,
buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to
common/buffer.h.
* inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid,
initialize_inferiors): Delete.
2011-07-21 23:46:12 +00:00
|
|
|
|
|
|
|
/* The xmalloc() (libiberty.h) family of memory management routines.
|
|
|
|
|
|
|
|
These are like the ISO-C malloc() family except that they implement
|
|
|
|
consistent semantics and guard against typical memory management
|
|
|
|
problems. */
|
|
|
|
|
|
|
|
/* NOTE: These are declared using PTR to ensure consistency with
|
|
|
|
"libiberty.h". xfree() is GDB local. */
|
|
|
|
|
|
|
|
PTR /* ARI: PTR */
|
|
|
|
xmalloc (size_t size)
|
|
|
|
{
|
|
|
|
void *val;
|
|
|
|
|
|
|
|
/* See libiberty/xmalloc.c. This function need's to match that's
|
|
|
|
semantics. It never returns NULL. */
|
|
|
|
if (size == 0)
|
|
|
|
size = 1;
|
|
|
|
|
|
|
|
val = malloc (size); /* ARI: malloc */
|
|
|
|
if (val == NULL)
|
|
|
|
malloc_failure (size);
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
|
|
|
PTR /* ARI: PTR */
|
|
|
|
xrealloc (PTR ptr, size_t size) /* ARI: PTR */
|
|
|
|
{
|
|
|
|
void *val;
|
|
|
|
|
|
|
|
/* See libiberty/xmalloc.c. This function need's to match that's
|
|
|
|
semantics. It never returns NULL. */
|
|
|
|
if (size == 0)
|
|
|
|
size = 1;
|
|
|
|
|
|
|
|
if (ptr != NULL)
|
|
|
|
val = realloc (ptr, size); /* ARI: realloc */
|
|
|
|
else
|
|
|
|
val = malloc (size); /* ARI: malloc */
|
|
|
|
if (val == NULL)
|
|
|
|
malloc_failure (size);
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
|
|
|
PTR /* ARI: PTR */
|
|
|
|
xcalloc (size_t number, size_t size)
|
|
|
|
{
|
|
|
|
void *mem;
|
|
|
|
|
|
|
|
/* See libiberty/xmalloc.c. This function need's to match that's
|
|
|
|
semantics. It never returns NULL. */
|
|
|
|
if (number == 0 || size == 0)
|
|
|
|
{
|
|
|
|
number = 1;
|
|
|
|
size = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
mem = calloc (number, size); /* ARI: xcalloc */
|
|
|
|
if (mem == NULL)
|
|
|
|
malloc_failure (number * size);
|
|
|
|
|
|
|
|
return mem;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *
|
|
|
|
xzalloc (size_t size)
|
|
|
|
{
|
|
|
|
return xcalloc (1, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
xfree (void *ptr)
|
|
|
|
{
|
|
|
|
if (ptr != NULL)
|
|
|
|
free (ptr); /* ARI: free */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Like asprintf/vasprintf but get an internal_error if the call
|
|
|
|
fails. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
xstrprintf (const char *format, ...)
|
|
|
|
{
|
|
|
|
char *ret;
|
|
|
|
va_list args;
|
|
|
|
|
|
|
|
va_start (args, format);
|
|
|
|
ret = xstrvprintf (format, args);
|
|
|
|
va_end (args);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
|
|
|
xstrvprintf (const char *format, va_list ap)
|
|
|
|
{
|
|
|
|
char *ret = NULL;
|
|
|
|
int status = vasprintf (&ret, format, ap);
|
|
|
|
|
|
|
|
/* NULL is returned when there was a memory allocation problem, or
|
|
|
|
any other error (for instance, a bad format string). A negative
|
|
|
|
status (the printed length) with a non-NULL buffer should never
|
|
|
|
happen, but just to be sure. */
|
|
|
|
if (ret == NULL || status < 0)
|
|
|
|
internal_error (__FILE__, __LINE__, _("vasprintf call failed"));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
xsnprintf (char *str, size_t size, const char *format, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
va_start (args, format);
|
|
|
|
ret = vsnprintf (str, size, format, args);
|
|
|
|
gdb_assert (ret < size);
|
|
|
|
va_end (args);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
2013-02-14 17:11:41 +00:00
|
|
|
|
|
|
|
char *
|
|
|
|
savestring (const char *ptr, size_t len)
|
|
|
|
{
|
|
|
|
char *p = (char *) xmalloc (len + 1);
|
|
|
|
|
|
|
|
memcpy (p, ptr, len);
|
|
|
|
p[len] = 0;
|
|
|
|
return p;
|
|
|
|
}
|
Move utility functions to common/
gdb/ChangeLog
2015-06-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>
Move utility functions to common/.
* cli/cli-utils.c (skip_spaces, skip_spaces_const, skip_to_space_const):
Move defs to common/common-utils.c.
* cli/cli-utils.h (skip_spaces, skip_spaces_const, skip_to_space)
(skip_to_space_const): Move decls to common/common-utils.h.
* common/common-defs.h: Move include of common-types.h before
common-utils.h.
* common/common-utils.c: Include host-defs.h and ctype.h.
(HIGH_BYTE_POSN, is_digit_in_base, digit_to_int, strtoulst): Move
from utils.c.
(skip_spaces, skip_spaces_const, skip_to_space_const): Move from
cli/cli-utils.c.
* common/common-utils.h (strtoulst): Move decl from utils.h.
(skip_spaces, skip_spaces_const, skip_to_space, skip_to_space_const):
Move from cli/cli-utils.h.
* common/host-defs.h: Include limits.h.
(TARGET_CHAR_BIT, HOST_CHAR_BIT): Moved from defs.h.
(skip_spaces, skip_spaces_const): Move decls from cli/cli-utils.h.
* defs.h (TARGET_CHAR_BIT, HOST_CHAR_BIT): Move to
common/common-utils.h.
* utils.c (HIGH_BYTE_POSN, is_digit_in_base, digit_to_int)
(strtoulst): Move to common/common-utils.c.
* utils.h (strtoulst): Moved decl to common/common-utils.h.
2015-06-15 15:04:56 +00:00
|
|
|
|
|
|
|
/* The bit offset of the highest byte in a ULONGEST, for overflow
|
|
|
|
checking. */
|
|
|
|
|
|
|
|
#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
|
|
|
|
|
|
|
|
/* True (non-zero) iff DIGIT is a valid digit in radix BASE,
|
|
|
|
where 2 <= BASE <= 36. */
|
|
|
|
|
|
|
|
static int
|
|
|
|
is_digit_in_base (unsigned char digit, int base)
|
|
|
|
{
|
|
|
|
if (!isalnum (digit))
|
|
|
|
return 0;
|
|
|
|
if (base <= 10)
|
|
|
|
return (isdigit (digit) && digit < base + '0');
|
|
|
|
else
|
|
|
|
return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
digit_to_int (unsigned char c)
|
|
|
|
{
|
|
|
|
if (isdigit (c))
|
|
|
|
return c - '0';
|
|
|
|
else
|
|
|
|
return tolower (c) - 'a' + 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* As for strtoul, but for ULONGEST results. */
|
|
|
|
|
|
|
|
ULONGEST
|
|
|
|
strtoulst (const char *num, const char **trailer, int base)
|
|
|
|
{
|
|
|
|
unsigned int high_part;
|
|
|
|
ULONGEST result;
|
|
|
|
int minus = 0;
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
/* Skip leading whitespace. */
|
|
|
|
while (isspace (num[i]))
|
|
|
|
i++;
|
|
|
|
|
|
|
|
/* Handle prefixes. */
|
|
|
|
if (num[i] == '+')
|
|
|
|
i++;
|
|
|
|
else if (num[i] == '-')
|
|
|
|
{
|
|
|
|
minus = 1;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (base == 0 || base == 16)
|
|
|
|
{
|
|
|
|
if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
|
|
|
|
{
|
|
|
|
i += 2;
|
|
|
|
if (base == 0)
|
|
|
|
base = 16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (base == 0 && num[i] == '0')
|
|
|
|
base = 8;
|
|
|
|
|
|
|
|
if (base == 0)
|
|
|
|
base = 10;
|
|
|
|
|
|
|
|
if (base < 2 || base > 36)
|
|
|
|
{
|
|
|
|
errno = EINVAL;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
result = high_part = 0;
|
|
|
|
for (; is_digit_in_base (num[i], base); i += 1)
|
|
|
|
{
|
|
|
|
result = result * base + digit_to_int (num[i]);
|
|
|
|
high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
|
|
|
|
result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
|
|
|
|
if (high_part > 0xff)
|
|
|
|
{
|
|
|
|
errno = ERANGE;
|
|
|
|
result = ~ (ULONGEST) 0;
|
|
|
|
high_part = 0;
|
|
|
|
minus = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (trailer != NULL)
|
|
|
|
*trailer = &num[i];
|
|
|
|
|
|
|
|
result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
|
|
|
|
if (minus)
|
|
|
|
return -result;
|
|
|
|
else
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* See documentation in cli-utils.h. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
skip_spaces (char *chp)
|
|
|
|
{
|
|
|
|
if (chp == NULL)
|
|
|
|
return NULL;
|
|
|
|
while (*chp && isspace (*chp))
|
|
|
|
chp++;
|
|
|
|
return chp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* A const-correct version of the above. */
|
|
|
|
|
|
|
|
const char *
|
|
|
|
skip_spaces_const (const char *chp)
|
|
|
|
{
|
|
|
|
if (chp == NULL)
|
|
|
|
return NULL;
|
|
|
|
while (*chp && isspace (*chp))
|
|
|
|
chp++;
|
|
|
|
return chp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* See documentation in cli-utils.h. */
|
|
|
|
|
|
|
|
const char *
|
|
|
|
skip_to_space_const (const char *chp)
|
|
|
|
{
|
|
|
|
if (chp == NULL)
|
|
|
|
return NULL;
|
|
|
|
while (*chp && !isspace (*chp))
|
|
|
|
chp++;
|
|
|
|
return chp;
|
|
|
|
}
|