Blame gnu/mbsinit.c

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