aboutsummaryrefslogtreecommitdiff
path: root/bfd/bfd.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-11-15 22:16:08 +1030
committerAlan Modra <amodra@gmail.com>2017-11-15 22:30:27 +1030
commita5065160868895e91cac8515263d9783f8120818 (patch)
treec315093de2c20c98c6b2f5e8bb60893600feca3e /bfd/bfd.c
parentdda8d76d0dd2b07df769f6cae20aff483468b342 (diff)
downloadgdb-a5065160868895e91cac8515263d9783f8120818.zip
gdb-a5065160868895e91cac8515263d9783f8120818.tar.gz
gdb-a5065160868895e91cac8515263d9783f8120818.tar.bz2
Handle ' and I format flags
Also a little tidying and error checking. * bfd.c (union _bfd_doprnt_args): Add "Bad". (_bfd_doprnt): Handle more flags. (_bfd_doprnt_scan): Likewise. Tidy setting of args array. (error_handler_internal): Init args type to Bad.
Diffstat (limited to 'bfd/bfd.c')
-rw-r--r--bfd/bfd.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 35f748c..40a195b 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -638,6 +638,7 @@ union _bfd_doprnt_args
void *p;
enum
{
+ Bad,
Int,
Long,
LongLong,
@@ -707,7 +708,7 @@ _bfd_doprnt (FILE *stream, const char *format, union _bfd_doprnt_args *args)
}
/* Move past flags. */
- while (strchr ("-+ #0", *ptr))
+ while (strchr ("-+ #0'I", *ptr))
*sptr++ = *ptr++;
if (*ptr == '*')
@@ -948,6 +949,7 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
{
int wide_width = 0, short_width = 0;
unsigned int arg_no;
+ int arg_type;
ptr++;
@@ -960,7 +962,7 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
}
/* Move past flags. */
- while (strchr ("-+ #0", *ptr))
+ while (strchr ("-+ #0'I", *ptr))
ptr++;
if (*ptr == '*')
@@ -1032,8 +1034,7 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
if ((int) arg_no < 0)
arg_no = arg_count;
- if (arg_no >= 9)
- abort ();
+ arg_type = Bad;
switch (ptr[-1])
{
case 'd':
@@ -1045,7 +1046,7 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
case 'c':
{
if (short_width)
- args[arg_no].type = Int;
+ arg_type = Int;
else
{
if (ptr[-2] == 'L')
@@ -1057,17 +1058,17 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
switch (wide_width)
{
case 0:
- args[arg_no].type = Int;
+ arg_type = Int;
break;
case 1:
- args[arg_no].type = Long;
+ arg_type = Long;
break;
case 2:
default:
#if defined (__GNUC__) || defined (HAVE_LONG_LONG)
- args[arg_no].type = LongLong;
+ arg_type = LongLong;
#else
- args[arg_no].type = Long;
+ arg_type = Long;
#endif
break;
}
@@ -1081,13 +1082,13 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
case 'G':
{
if (wide_width == 0)
- args[arg_no].type = Double;
+ arg_type = Double;
else
{
#if defined (__GNUC__) || defined (HAVE_LONG_DOUBLE)
- args[arg_no].type = LongDouble;
+ arg_type = LongDouble;
#else
- args[arg_no].type = Double;
+ arg_type = Double;
#endif
}
}
@@ -1096,11 +1097,15 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
case 'p':
case 'A':
case 'B':
- args[arg_no].type = Ptr;
+ arg_type = Ptr;
break;
default:
abort();
}
+
+ if (arg_no >= 9)
+ abort ();
+ args[arg_no].type = arg_type;
arg_count++;
}
}
@@ -1119,9 +1124,12 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
static void
error_handler_internal (const char *fmt, va_list ap)
{
- int i, arg_count;
+ unsigned int i, arg_count;
union _bfd_doprnt_args args[9];
+ for (i = 0; i < sizeof (args) / sizeof (args[0]); i++)
+ args[i].type = Bad;
+
arg_count = _bfd_doprnt_scan (fmt, args);
for (i = 0; i < arg_count; i++)
{