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.
This commit is contained in:
Alan Modra 2017-07-07 10:19:08 +09:30
parent 9691e722c6
commit 1cf9552bf1
2 changed files with 20 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2017-07-07 Alan Modra <amodra@gmail.com>
* bfd.c (_doprnt): Replace "L" with "ll" when printing bfd_vma
as long long. Move code replacing "ll" with "I64", and simplify.
2017-07-06 H.J. Lu <hongjiu.lu@intel.com> 2017-07-06 H.J. Lu <hongjiu.lu@intel.com>
* bfd.c (_doprnt): Convert 'L' to 'l' when setting wide_width * bfd.c (_doprnt): Convert 'L' to 'l' when setting wide_width

View File

@ -725,11 +725,17 @@ _doprnt (FILE *stream, const char *format, va_list ap)
{ {
/* L modifier for bfd_vma or bfd_size_type may be /* L modifier for bfd_vma or bfd_size_type may be
either long long or long. */ either long long or long. */
if ((BFD_ARCH_SIZE < 64 || BFD_HOST_64BIT_LONG) if (sptr[-2] == 'L')
&& sptr[-2] == 'L')
{ {
wide_width = 1;
sptr[-2] = 'l'; 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) switch (wide_width)
@ -742,17 +748,14 @@ _doprnt (FILE *stream, const char *format, va_list ap)
break; break;
case 2: case 2:
default: default:
#if defined (__GNUC__) || defined (HAVE_LONG_LONG) #if defined (__MSVCRT__)
# if defined (__MSVCRT__) sptr[-3] = 'I';
sptr--; sptr[-2] = '6';
while (sptr[-1] == 'L' || sptr[-1] == 'l') sptr[-1] = '4';
sptr--;
*sptr++ = 'I';
*sptr++ = '6';
*sptr++ = '4';
*sptr++ = ptr[-1]; *sptr++ = ptr[-1];
*sptr = '\0'; *sptr = '\0';
# endif #endif
#if defined (__GNUC__) || defined (HAVE_LONG_LONG)
PRINT_TYPE (long long); PRINT_TYPE (long long);
#else #else
/* Fake it and hope for the best. */ /* Fake it and hope for the best. */