rem: wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
context: fnmatch (pattern, string, flags)     const char *pattern;     const char *string;     int flags;{# if HANDLE_MULTIBYTE  if (__builtin_expect (MB_CUR_MAX, 1) != 1)    {      mbstate_t ps;      size_t n;      wchar_t *wpattern;      wchar_t *wstring;      /* Convert the strings into wide characters.  */      memset (&ps, '\0', sizeof (ps));      n = mbsrtowcs (NULL, &pattern, 0, &ps);      if (__builtin_expect (n, 0) == (size_t) -1)	/* Something wrong.	   XXX Do we have to set `errno' to something which mbsrtows hasn't	   already done?  */	return -1;      wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));      assert (mbsinit (&ps));      (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps);      assert (mbsinit (&ps));      n = mbsrtowcs (NULL, &string, 0, &ps);      if (__builtin_expect (n, 0) == (size_t) -1)	/* Something wrong.	   XXX Do we have to set `errno' to something which mbsrtows hasn't	   already done?  */	return -1;      wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));      assert (mbsinit (&ps));      (void) mbsrtowcs (wstring, &string, n + 1, &ps);      return internal_fnwmatch (wpattern, wstring, wstring + n,				flags & FNM_PERIOD, flags);    }# endif  /* mbstate_t and mbsrtowcs or _LIBC.  */  return internal_fnmatch (pattern, string, string + strlen (string),			   flags & FNM_PERIOD, flags);}