Blame gettext-tools/gnulib-lib/mbsinit.c

Packit 5b56b6
/* Test for initial conversion state.
Packit 5b56b6
   Copyright (C) 2008-2015 Free Software Foundation, Inc.
Packit 5b56b6
   Written by Bruno Haible <bruno@clisp.org>, 2008.
Packit 5b56b6
Packit 5b56b6
   This program is free software: you can redistribute it and/or modify
Packit 5b56b6
   it under the terms of the GNU General Public License as published by
Packit 5b56b6
   the Free Software Foundation; either version 3 of the License, or
Packit 5b56b6
   (at your option) any later version.
Packit 5b56b6
Packit 5b56b6
   This program is distributed in the hope that it will be useful,
Packit 5b56b6
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 5b56b6
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 5b56b6
   GNU General Public License for more details.
Packit 5b56b6
Packit 5b56b6
   You should have received a copy of the GNU General Public License
Packit 5b56b6
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit 5b56b6
Packit 5b56b6
#include <config.h>
Packit 5b56b6
Packit 5b56b6
/* Specification.  */
Packit 5b56b6
#include <wchar.h>
Packit 5b56b6
Packit 5b56b6
#include "verify.h"
Packit 5b56b6
Packit 5b56b6
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
Packit 5b56b6
Packit 5b56b6
/* On native Windows, 'mbstate_t' is defined as 'int'.  */
Packit 5b56b6
Packit 5b56b6
int
Packit 5b56b6
mbsinit (const mbstate_t *ps)
Packit 5b56b6
{
Packit 5b56b6
  return ps == NULL || *ps == 0;
Packit 5b56b6
}
Packit 5b56b6
Packit 5b56b6
#else
Packit 5b56b6
Packit 5b56b6
/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
Packit 5b56b6
   and wcrtomb(), wcsrtombs().
Packit 5b56b6
   We assume that
Packit 5b56b6
     - sizeof (mbstate_t) >= 4,
Packit 5b56b6
     - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
Packit 5b56b6
       not ISO-2022 variants),
Packit 5b56b6
     - for each encoding, the number of bytes for a wide character is <= 4.
Packit 5b56b6
       (This maximum is attained for UTF-8, GB18030, EUC-TW.)
Packit 5b56b6
   We define the meaning of mbstate_t as follows:
Packit 5b56b6
     - In mb -> wc direction, mbstate_t's first byte contains the number of
Packit 5b56b6
       buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
Packit 5b56b6
     - In wc -> mb direction, mbstate_t contains no information. In other
Packit 5b56b6
       words, it is always in the initial state.  */
Packit 5b56b6
Packit 5b56b6
verify (sizeof (mbstate_t) >= 4);
Packit 5b56b6
Packit 5b56b6
int
Packit 5b56b6
mbsinit (const mbstate_t *ps)
Packit 5b56b6
{
Packit 5b56b6
  const char *pstate = (const char *)ps;
Packit 5b56b6
Packit 5b56b6
  return pstate == NULL || pstate[0] == 0;
Packit 5b56b6
}
Packit 5b56b6
Packit 5b56b6
#endif