libiberty/ChangeLog:

2003-05-14  Jim Blandy  <jimb@redhat.com>

	* hex.c (_hex_value): Make this unsigned.
	(hex_value): Update documentation for new return type.  hex_value
	now expands to an unsigned int expression, to avoid unexpected
	sign extension when we store it in a bfd_vma, which is larger than
	int on some platforms.
	* functions.texi: Regenerated.

include/ChangeLog:
2003-05-14  Jim Blandy  <jimb@redhat.com>

	* libiberty.h (hex_value): Make the value an unsigned int, to
	avoid unexpected sign-extension when cast to unsigned types larger
	than int --- like bfd_vma, on some platforms.
	(_hex_value): Update declaration.
This commit is contained in:
Jim Blandy 2003-05-15 19:08:25 +00:00
parent cc8c88f3a7
commit e4f7904629
5 changed files with 34 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2003-05-15 Jim Blandy <jimb@redhat.com>
* libiberty.h (hex_value): Make the value an unsigned int, to
avoid unexpected sign-extension when cast to unsigned types larger
than int --- like bfd_vma, on some platforms.
(_hex_value): Update declaration.
2003-05-09 Alan Modra <amodra@bigpond.net.au> 2003-05-09 Alan Modra <amodra@bigpond.net.au>
* xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on * xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on

View file

@ -254,12 +254,12 @@ extern double physmem_available PARAMS ((void));
#define _hex_array_size 256 #define _hex_array_size 256
#define _hex_bad 99 #define _hex_bad 99
extern const char _hex_value[_hex_array_size]; extern const unsigned char _hex_value[_hex_array_size];
extern void hex_init PARAMS ((void)); extern void hex_init PARAMS ((void));
#define hex_p(c) (hex_value (c) != _hex_bad) #define hex_p(c) (hex_value (c) != _hex_bad)
/* If you change this, note well: Some code relies on side effects in /* If you change this, note well: Some code relies on side effects in
the argument being performed exactly once. */ the argument being performed exactly once. */
#define hex_value(c) (_hex_value[(unsigned char) (c)]) #define hex_value(c) ((unsigned int) _hex_value[(unsigned char) (c)])
/* Definitions used by the pexecute routine. */ /* Definitions used by the pexecute routine. */

View file

@ -1,3 +1,12 @@
2003-05-15 Jim Blandy <jimb@redhat.com>
* hex.c (_hex_value): Make this unsigned.
(hex_value): Update documentation for new return type. hex_value
now expands to an unsigned int expression, to avoid unexpected
sign extension when we store it in a bfd_vma, which is larger than
int on some platforms.
* functions.texi: Regenerated.
2003-05-07 Josef Zlomek <zlomekj@suse.cz> 2003-05-07 Josef Zlomek <zlomekj@suse.cz>
* splay-tree.c (splay_tree_predecessor): Fix comment. * splay-tree.c (splay_tree_predecessor): Fix comment.

View file

@ -337,13 +337,19 @@ or zero if it is not. Note that the value you pass will be cast to
@end deftypefn @end deftypefn
@c hex.c:42 @c hex.c:42
@deftypefn Extension int hex_value (int @var{c}) @deftypefn Extension unsigned int hex_value (int @var{c})
Returns the numeric equivalent of the given character when interpreted Returns the numeric equivalent of the given character when interpreted
as a hexidecimal digit. The result is undefined if you pass an as a hexidecimal digit. The result is undefined if you pass an
invalid hex digit. Note that the value you pass will be cast to invalid hex digit. Note that the value you pass will be cast to
@code{unsigned char} within the macro. @code{unsigned char} within the macro.
The @code{hex_value} macro returns @code{unsigned int}, rather than
signed @code{int}, to make it easier to use in parsing addresses from
hex dump files: a signed @code{int} would be sign-extended when
converted to a wider unsigned type --- like @code{bfd_vma}, on some
systems.
@end deftypefn @end deftypefn
@c index.c:5 @c index.c:5

View file

@ -39,13 +39,19 @@ or zero if it is not. Note that the value you pass will be cast to
@end deftypefn @end deftypefn
@deftypefn Extension int hex_value (int @var{c}) @deftypefn Extension unsigned int hex_value (int @var{c})
Returns the numeric equivalent of the given character when interpreted Returns the numeric equivalent of the given character when interpreted
as a hexidecimal digit. The result is undefined if you pass an as a hexidecimal digit. The result is undefined if you pass an
invalid hex digit. Note that the value you pass will be cast to invalid hex digit. Note that the value you pass will be cast to
@code{unsigned char} within the macro. @code{unsigned char} within the macro.
The @code{hex_value} macro returns @code{unsigned int}, rather than
signed @code{int}, to make it easier to use in parsing addresses from
hex dump files: a signed @code{int} would be sign-extended when
converted to a wider unsigned type --- like @code{bfd_vma}, on some
systems.
@end deftypefn @end deftypefn
@undocumented _hex_array_size @undocumented _hex_array_size
@ -60,7 +66,7 @@ invalid hex digit. Note that the value you pass will be cast to
&& 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \
&& EOF == -1 && EOF == -1
const char _hex_value[_hex_array_size] = const unsigned char _hex_value[_hex_array_size] =
{ {
_hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */
_hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */
@ -139,7 +145,7 @@ const char _hex_value[_hex_array_size] =
#else #else
char _hex_value[_hex_array_size]; unsigned char _hex_value[_hex_array_size];
#endif /* not ASCII */ #endif /* not ASCII */