git: 181751a8b6ef - main - citrus_prop.c: do not ignore sign

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 29 Nov 2021 15:43:18 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=181751a8b6ef580c44d49ef3cac1c6627bfa461e

commit 181751a8b6ef580c44d49ef3cac1c6627bfa461e
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-11-28 03:03:49 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-11-29 15:39:54 +0000

    citrus_prop.c: do not ignore sign
    
    In _citrus_prop_read_TYPE_func_ generated functions, do not ignore parsed
    '-' sign, negate the value as appropriate.
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D33146
---
 lib/libc/iconv/citrus_prop.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/libc/iconv/citrus_prop.c b/lib/libc/iconv/citrus_prop.c
index 7ac39bbee6e5..0b627f362c22 100644
--- a/lib/libc/iconv/citrus_prop.c
+++ b/lib/libc/iconv/citrus_prop.c
@@ -79,7 +79,7 @@ static const char *xdigit = "0123456789ABCDEF";
 #define _CITRUS_PROP_READ_UINT_COMMON(_func_, _type_, _max_)		\
 static int								\
 _citrus_prop_read_##_func_##_common(struct _memstream * __restrict ms,	\
-    _type_ * __restrict result, int base)				\
+    _type_ * __restrict result, int base, int neg)			\
 {									\
 	_type_ acc, cutoff;						\
 	int ch, cutlim, n;						\
@@ -99,7 +99,7 @@ _citrus_prop_read_##_func_##_common(struct _memstream * __restrict ms,	\
 		acc += n;						\
 	}								\
 	_memstream_ungetc(ms, ch);					\
-	*result = acc;							\
+	*result = neg ? -acc : acc;					\
 	return (0);							\
 }
 _CITRUS_PROP_READ_UINT_COMMON(chr, int, UCHAR_MAX)
@@ -139,7 +139,7 @@ _citrus_prop_read_##_func_(struct _memstream * __restrict ms,	\
 		return (EINVAL);				\
 	_memstream_ungetc(ms, ch);				\
 	return (_citrus_prop_read_##_func_##_common		\
-	    (ms, &obj->u._func_, base));			\
+	    (ms, &obj->u._func_, base, neg));			\
 }
 _CITRUS_PROP_READ_INT(chr, int)
 _CITRUS_PROP_READ_INT(num, uint64_t)
@@ -185,7 +185,8 @@ _citrus_prop_read_character_common(struct _memstream * __restrict ms,
 			base -= 8;
 			/*FALLTHROUGH*/
 		case 'x':
-			return (_citrus_prop_read_chr_common(ms, result, base));
+			return (_citrus_prop_read_chr_common(ms, result,
+			    base, 0));
 			/*NOTREACHED*/
 		default:
 			/* unknown escape */