aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-07-07 10:19:08 +0930
committerAlan Modra <amodra@gmail.com>2017-07-07 10:35:31 +0930
commit1cf9552bf1c77df8850de01d48e1057a27415314 (patch)
tree06eeab93031207a17f240a6b7c13988f898b2b49
parent9691e722c654054cbf2a6992097c730b8cc50435 (diff)
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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/bfd.c27
2 files changed, 20 insertions, 12 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index eda1e3edea..4a3a3acb1b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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>
* bfd.c (_doprnt): Convert 'L' to 'l' when setting wide_width
diff --git a/bfd/bfd.c b/bfd/bfd.c
index a119ac4f54..665f182559 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. */