On 03/19/2010 02:59 AM, Eric Blake wrote:
[I figured it was high time I subscribed to this list, too]
Is anyone else seeing this?
dfa.c: In function 'parse_bracket_exp':
dfa.c:494: error: passing argument 1 of 'mbrtowc' from incompatible
pointer type
/usr/include/wchar.h:363: note: expected 'wchar_t * __restrict__' but
argument is of type 'wint_t *'
No, but I'm pushing the attached patch to fix it.
Paolo
>From 774d0ee8b680bc86cc563142e857c8cfa149cd28 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Fri, 19 Mar 2010 12:40:07 +0100
Subject: [PATCH] dfa: fix wchar_t/wint_t type mismatch
* src/dfa.c (FETCH_WC): Pass a local wchar_t variable to mbrtowc.
(FETCH): Rename temporary second argument to FETCH_WC.
(parse_bracket_exp): Always use FETCH_WC.
---
src/dfa.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/dfa.c b/src/dfa.c
index 98d7a91..8118aa2 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -350,17 +350,19 @@ static unsigned char const *buf_end; /* reference to
end in dfaexec(). */
} \
else \
{ \
- cur_mb_len = mbrtowc(&wc, lexptr, lexleft, &mbs); \
+ wchar_t _wc; \
+ cur_mb_len = mbrtowc(&_wc, lexptr, lexleft, &mbs); \
if (cur_mb_len <= 0) \
{ \
cur_mb_len = 1; \
--lexleft; \
- wc = c = (unsigned char) *lexptr++; \
+ (wc) = (c) = (unsigned char) *lexptr++; \
} \
else \
{ \
lexptr += cur_mb_len; \
lexleft -= cur_mb_len; \
+ (wc) = _wc; \
(c) = wctob(wc); \
} \
} \
@@ -368,8 +370,8 @@ static unsigned char const *buf_end; /* reference to
end in dfaexec(). */
# define FETCH(c, eoferr) \
do { \
- wint_t _wc; \
- FETCH_WC(c, _wc, eoferr); \
+ wint_t wc; \
+ FETCH_WC(c, wc, eoferr); \
} while(0)
#else
@@ -525,7 +527,7 @@ parse_bracket_exp (void)
int len = 0;
for (;;)
{
- FETCH (c, _("unbalanced ["));
+ FETCH_WC (c, wc, _("unbalanced ["));
if ((c == c1 && *lexptr == ']') || lexleft == 0)
break;
if (len < BRACKET_BUFFER_SIZE)
@@ -537,7 +539,7 @@ parse_bracket_exp (void)
str[len] = '\0';
/* Fetch bracket. */
- FETCH (c, _("unbalanced ["));
+ FETCH_WC (c, wc, _("unbalanced ["));
if (c1 == ':')
/* build character class. */
{
--
1.6.6.1