[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] posix: Falling back to non wide mode in case of encoding
From: |
Florian Weimer |
Subject: |
Re: [PATCH 1/2] posix: Falling back to non wide mode in case of encoding error [BZ #14185] |
Date: |
Mon, 22 Feb 2021 11:54:34 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
* Adhemerval Zanella via Libc-alpha:
> +static int
> +fnmatch_convert_to_wide (const char *str, struct scratch_buffer *buf,
> + size_t *n)
> +{
> + mbstate_t ps;
> + memset (&ps, '\0', sizeof (ps));
> +
> + size_t nw = buf->length / sizeof (wchar_t);
> + *n = strnlen (str, nw - 1);
> + if (__glibc_likely (*n < nw))
> + {
> + const char *p = str;
> + *n = mbsrtowcs (buf->data, &p, *n + 1, &ps);
> + if (__glibc_unlikely (*n == (size_t) -1))
> + /* Something wrong.
> + XXX Do we have to set 'errno' to something which mbsrtows hasn't
> + already done? */
> + return -1;
> + if (p == NULL)
> + return 0;
> + memset (&ps, '\0', sizeof (ps));
> + }
> +
> + *n = mbsrtowcs (NULL, &str, 0, &ps);
> + if (__glibc_unlikely (*n == (size_t) -1))
> + return -1;
> + if (!scratch_buffer_set_array_size (buf, *n + 1, sizeof (wchar_t)))
> + {
> + __set_errno (ENOMEM);
> + return -2;
> + }
> + assert (mbsinit (&ps));
> + mbsrtowcs (buf->data, &str, *n + 1, &ps);
> + return 0;
> +}
>
This, along with
> + if (r == -2 || r == 0)
> + return r;
below causes fnmatch to return the undocumented -2 error value, I think.
Shouldn't we keep failing with -1 on error?
Thanks,
Florian