aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/editfns.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/editfns.c b/src/editfns.c
index e671ba0761c..ebf6518994b 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -4722,11 +4722,19 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
4722 char src0 = src[0]; 4722 char src0 = src[0];
4723 int exponent_bytes = 0; 4723 int exponent_bytes = 0;
4724 bool signedp = src0 == '-' || src0 == '+' || src0 == ' '; 4724 bool signedp = src0 == '-' || src0 == '+' || src0 == ' ';
4725 unsigned char after_sign = src[signedp]; 4725 int prefix_bytes = (signedp
4726 if (zero_flag && 0 <= char_hexdigit (after_sign)) 4726 + ((src[signedp] == '0'
4727 && (src[signedp + 1] == 'x'
4728 || src[signedp + 1] == 'X'))
4729 ? 2 : 0));
4730 if (zero_flag)
4727 { 4731 {
4728 leading_zeros += padding; 4732 unsigned char after_prefix = src[prefix_bytes];
4729 padding = 0; 4733 if (0 <= char_hexdigit (after_prefix))
4734 {
4735 leading_zeros += padding;
4736 padding = 0;
4737 }
4730 } 4738 }
4731 4739
4732 if (excess_precision 4740 if (excess_precision
@@ -4745,13 +4753,13 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
4745 nchars += padding; 4753 nchars += padding;
4746 } 4754 }
4747 4755
4748 *p = src0; 4756 memcpy (p, src, prefix_bytes);
4749 src += signedp; 4757 p += prefix_bytes;
4750 p += signedp; 4758 src += prefix_bytes;
4751 memset (p, '0', leading_zeros); 4759 memset (p, '0', leading_zeros);
4752 p += leading_zeros; 4760 p += leading_zeros;
4753 int significand_bytes 4761 int significand_bytes
4754 = sprintf_bytes - signedp - exponent_bytes; 4762 = sprintf_bytes - prefix_bytes - exponent_bytes;
4755 memcpy (p, src, significand_bytes); 4763 memcpy (p, src, significand_bytes);
4756 p += significand_bytes; 4764 p += significand_bytes;
4757 src += significand_bytes; 4765 src += significand_bytes;