diff options
author | Nick Clifton <nickc@redhat.com> | 2021-07-07 10:25:41 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2021-07-07 10:25:41 +0100 |
commit | ffa5352c0c0f735541e69fe6d9a192d82e7d418c (patch) | |
tree | df3fd83903f3eb8ae28975107352d5f657583729 /gas/messages.c | |
parent | 1f00b55dba8ed2c6bec4d263b00d41b0e91edb35 (diff) | |
download | binutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.zip binutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.tar.gz binutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.tar.bz2 |
Fix problems translating messages when a percentage sign appears at the end of a string.
PR 28051
gas * config/tc-i386.c (offset_in_range): Reformat error messages in
order to fix problems when translating.
(md_assemble): Likewise.
* messages.c (as_internal_value_out_of_range): Likewise.
* read.c (emit_expr_with_reloc): Likewise.
* testsuite/gas/all/overflow.l Change expected output format.
* po/gas.pot: Regenerate.
bfd * coff-rs6000.c (xcoff_reloc_type_tls): Reformat error messages in
order to fix problems when translating.
* cofflink.c (_bfd_coff_write_global_sym): Likewise.
* elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub):
Likewise.
* po/bfd.pot: Regenerate.
Diffstat (limited to 'gas/messages.c')
-rw-r--r-- | gas/messages.c | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/gas/messages.c b/gas/messages.c index 62f9312..fbd4581 100644 --- a/gas/messages.c +++ b/gas/messages.c @@ -366,9 +366,15 @@ as_internal_value_out_of_range (const char *prefix, offsetT max, const char *file, unsigned line, - int bad) + bool bad) { const char * err; + /* These buffer sizes are excessive, but better to be safe than sorry. + Note - these buffers are used in order to make the error message + string translateable. */ + char val_buf [128]; + char min_buf [128]; + char max_buf [128]; if (prefix == NULL) prefix = ""; @@ -380,41 +386,38 @@ as_internal_value_out_of_range (const char *prefix, if (max <= 1) abort (); + sprintf (val_buf, "%" BFD_VMA_FMT "d", val); + sprintf (min_buf, "%" BFD_VMA_FMT "d", right); + /* xgettext:c-format */ - err = _("%s out of domain (%" BFD_VMA_FMT "d is not a multiple of %" \ - BFD_VMA_FMT "d)"); + err = _("%s out of domain (%s is not a multiple of %s)"); + if (bad) - as_bad_where (file, line, err, prefix, val, right); + as_bad_where (file, line, err, prefix, val_buf, min_buf); else - as_warn_where (file, line, err, prefix, val, right); - return; + as_warn_where (file, line, err, prefix, val_buf, min_buf); } - - if ( val < HEX_MAX_THRESHOLD - && min < HEX_MAX_THRESHOLD - && max < HEX_MAX_THRESHOLD - && val > HEX_MIN_THRESHOLD - && min > HEX_MIN_THRESHOLD - && max > HEX_MIN_THRESHOLD) + else if ( val < HEX_MAX_THRESHOLD + && min < HEX_MAX_THRESHOLD + && max < HEX_MAX_THRESHOLD + && val > HEX_MIN_THRESHOLD + && min > HEX_MIN_THRESHOLD + && max > HEX_MIN_THRESHOLD) { - /* xgettext:c-format */ - err = _("%s out of range (%" BFD_VMA_FMT "d is not between %" \ - BFD_VMA_FMT "d and %" BFD_VMA_FMT "d)"); + sprintf (val_buf, "%" BFD_VMA_FMT "d", val); + sprintf (min_buf, "%" BFD_VMA_FMT "d", min); + sprintf (max_buf, "%" BFD_VMA_FMT "d", max); + + /* xgettext:c-format. */ + err = _("%s out of range (%s is not between %s and %s)"); if (bad) - as_bad_where (file, line, err, prefix, val, min, max); + as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf); else - as_warn_where (file, line, err, prefix, val, min, max); + as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf); } else { - char val_buf [sizeof (val) * 3 + 2]; - char min_buf [sizeof (val) * 3 + 2]; - char max_buf [sizeof (val) * 3 + 2]; - - if (sizeof (val) > sizeof (bfd_vma)) - abort (); - sprintf_vma (val_buf, (bfd_vma) val); sprintf_vma (min_buf, (bfd_vma) min); sprintf_vma (max_buf, (bfd_vma) max); @@ -437,7 +440,7 @@ as_warn_value_out_of_range (const char *prefix, const char *file, unsigned line) { - as_internal_value_out_of_range (prefix, value, min, max, file, line, 0); + as_internal_value_out_of_range (prefix, value, min, max, file, line, false); } void @@ -448,5 +451,5 @@ as_bad_value_out_of_range (const char *prefix, const char *file, unsigned line) { - as_internal_value_out_of_range (prefix, value, min, max, file, line, 1); + as_internal_value_out_of_range (prefix, value, min, max, file, line, true); } |