diff options
author | Alan Modra <amodra@gmail.com> | 2017-07-07 10:19:08 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-07-07 10:35:31 +0930 |
commit | 1cf9552bf1c77df8850de01d48e1057a27415314 (patch) | |
tree | 06eeab93031207a17f240a6b7c13988f898b2b49 /bfd/bfd.c | |
parent | 9691e722c654054cbf2a6992097c730b8cc50435 (diff) | |
download | binutils-gdb-1cf9552bf1c77df8850de01d48e1057a27415314.tar.gz |
Another _doprnt fix for %L handling
* bfd.c (_doprnt): Replace "L" with "ll" when printing bfd_vma
as long long. Move code replacing "ll" with "I64", and simplify.
Diffstat (limited to 'bfd/bfd.c')
-rw-r--r-- | bfd/bfd.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/bfd/bfd.c b/bfd/bfd.c index a119ac4f54e..665f182559b 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -725,11 +725,17 @@ _doprnt (FILE *stream, const char *format, va_list ap) { /* L modifier for bfd_vma or bfd_size_type may be either long long or long. */ - if ((BFD_ARCH_SIZE < 64 || BFD_HOST_64BIT_LONG) - && sptr[-2] == 'L') + if (sptr[-2] == 'L') { - wide_width = 1; sptr[-2] = 'l'; + if (BFD_ARCH_SIZE < 64 || BFD_HOST_64BIT_LONG) + wide_width = 1; + else + { + sptr[-1] = 'l'; + *sptr++ = ptr[-1]; + *sptr = '\0'; + } } switch (wide_width) @@ -742,17 +748,14 @@ _doprnt (FILE *stream, const char *format, va_list ap) break; case 2: default: -#if defined (__GNUC__) || defined (HAVE_LONG_LONG) -# if defined (__MSVCRT__) - sptr--; - while (sptr[-1] == 'L' || sptr[-1] == 'l') - sptr--; - *sptr++ = 'I'; - *sptr++ = '6'; - *sptr++ = '4'; +#if defined (__MSVCRT__) + sptr[-3] = 'I'; + sptr[-2] = '6'; + sptr[-1] = '4'; *sptr++ = ptr[-1]; *sptr = '\0'; -# endif +#endif +#if defined (__GNUC__) || defined (HAVE_LONG_LONG) PRINT_TYPE (long long); #else /* Fake it and hope for the best. */ |