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.
This commit is contained in:
Jan Kratochvil
2015-06-15 17:04:56 +02:00
parent d1168cc1a9
commit 03aef70fec
10 changed files with 206 additions and 175 deletions

View File

@ -2987,105 +2987,6 @@ dummy_obstack_deallocate (void *object, void *data)
return;
}
/* 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;
}
/* Simple, portable version of dirname that does not modify its
argument. */