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

Reply via email to