Blame gnulib/lib/mbtowc-impl.h

Packit 06dd63
/* Convert multibyte character to wide character.
Packit 06dd63
   Copyright (C) 2011-2019 Free Software Foundation, Inc.
Packit 06dd63
   Written by Bruno Haible <bruno@clisp.org>, 2011.
Packit 06dd63
Packit 06dd63
   This program is free software: you can redistribute it and/or modify
Packit 06dd63
   it under the terms of the GNU Lesser General Public License as published by
Packit 06dd63
   the Free Software Foundation; either version 2.1 of the License, or
Packit 06dd63
   (at your option) any later version.
Packit 06dd63
Packit 06dd63
   This program is distributed in the hope that it will be useful,
Packit 06dd63
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 06dd63
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 06dd63
   GNU Lesser General Public License for more details.
Packit 06dd63
Packit 06dd63
   You should have received a copy of the GNU Lesser General Public License
Packit 06dd63
   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
Packit 06dd63
Packit 06dd63
/* We don't need a static internal state, because the encoding is not state
Packit 06dd63
   dependent, and when mbrtowc returns (size_t)(-2). we throw the result
Packit 06dd63
   away. */
Packit 06dd63
Packit 06dd63
int
Packit 06dd63
mbtowc (wchar_t *pwc, const char *s, size_t n)
Packit 06dd63
{
Packit 06dd63
  if (s == NULL)
Packit 06dd63
    return 0;
Packit 06dd63
  else
Packit 06dd63
    {
Packit 06dd63
      mbstate_t state;
Packit 06dd63
      wchar_t wc;
Packit 06dd63
      size_t result;
Packit 06dd63
Packit 06dd63
      memset (&state, 0, sizeof (mbstate_t));
Packit 06dd63
      result = mbrtowc (&wc, s, n, &state);
Packit 06dd63
      if (result == (size_t)-1 || result == (size_t)-2)
Packit 06dd63
        {
Packit 06dd63
          errno = EILSEQ;
Packit 06dd63
          return -1;
Packit 06dd63
        }
Packit 06dd63
      if (pwc != NULL)
Packit 06dd63
        *pwc = wc;
Packit 06dd63
      return (wc == 0 ? 0 : result);
Packit 06dd63
    }
Packit 06dd63
}