1 /*
   2  * This file and its contents are supplied under the terms of the
   3  * Common Development and Distribution License ("CDDL"), version 1.0.
   4  * You may only use this file in accordance with the terms of version
   5  * 1.0 of the CDDL.
   6  *
   7  * A full copy of the text of the CDDL should have accompanied this
   8  * source.  A copy of the CDDL is also available via the Internet at
   9  * http://www.illumos.org/license/CDDL.
  10  */
  11 
  12 /*
  13  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  14  */
  15 
  16 #ifndef _XLOCALE_H
  17 #define _XLOCALE_H
  18 
  19 /*
  20  * This file supplies declarations for extended locale routines, as
  21  * originally delivered by MacOS X.  Many of these things are now
  22  * officially part of XPG7.  (Note that while the interfaces are the
  23  * same as MacOS X, there is no shared implementation.)
  24  *
  25  * Those declarations that are part of XPG7 are provided for the in the
  26  * XPG7-specified location.  This file lists just the declarations that
  27  * were not part of the standard.  These will be useful in their own right,
  28  * and will aid porting programs that don't strictly follow the standard.
  29  *
  30  * Note that it is an error to include this file in a program with strict
  31  * symbol visibilty rules (under strict ANSI or POSIX_C_SOURCE rules.)
  32  * If this is done, the symbols defined here will indeed be exposed to your
  33  * program, but those symbols that are part of the related standards might
  34  * not be.
  35  */
  36 
  37 #include <sys/feature_tests.h>
  38 #include <wchar.h>
  39 #include <locale.h>
  40 #include <stdio.h>
  41 
  42 #ifdef __cplusplus
  43 extern "C" {
  44 #endif
  45 
  46 #ifndef _LOCALE_T
  47 #define _LOCALE_T
  48 typedef struct locale *locale_t;
  49 #endif
  50 
  51 extern int mbsinit_l(const mbstate_t *, locale_t);
  52 
  53 extern size_t mbsrtowcs_l(wchar_t *_RESTRICT_KYWD, const char **_RESTRICT_KYWD,
  54     size_t, mbstate_t *_RESTRICT_KYWD, locale_t);
  55 
  56 extern size_t mbsnrtowcs_l(wchar_t *_RESTRICT_KYWD, const char **_RESTRICT_KYWD,
  57     size_t, size_t, mbstate_t *_RESTRICT_KYWD, locale_t);
  58 
  59 extern char *strptime_l(const char *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
  60     struct tm *_RESTRICT_KYWD, locale_t);
  61 
  62 extern int wcwidth_l(wchar_t, locale_t);
  63 
  64 extern int wcswidth_l(const wchar_t *, size_t, locale_t);
  65 
  66 extern int iswspecial_l(wint_t, locale_t);
  67 extern int iswnumber_l(wint_t, locale_t);
  68 extern int iswhexnumber_l(wint_t, locale_t);
  69 extern int iswideogram_l(wint_t, locale_t);
  70 extern int iswphonogram_l(wint_t, locale_t);
  71 
  72 extern wint_t btowc_l(int, locale_t);
  73 extern int wctob_l(wint_t, locale_t);
  74 extern size_t mbrtowc_l(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
  75     size_t, mbstate_t *_RESTRICT_KYWD, locale_t);
  76 extern size_t mbstowcs_l(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
  77     size_t, locale_t);
  78 extern int mblen_l(const char *, size_t, locale_t);
  79 extern size_t mbrlen_l(const char *_RESTRICT_KYWD, size_t,
  80     mbstate_t *_RESTRICT_KYWD, locale_t);
  81 extern int mbtowc_l(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, size_t,
  82     locale_t);
  83 extern size_t wcsrtombs_l(char *_RESTRICT_KYWD, const wchar_t **_RESTRICT_KYWD,
  84     size_t, mbstate_t *_RESTRICT_KYWD, locale_t);
  85 extern size_t wcsnrtombs_l(char *_RESTRICT_KYWD, const wchar_t **_RESTRICT_KYWD,
  86     size_t, size_t, mbstate_t *_RESTRICT_KYWD, locale_t);
  87 extern size_t wcrtomb_l(char *_RESTRICT_KYWD, wchar_t,
  88     mbstate_t *_RESTRICT_KYWD, locale_t);
  89 extern size_t wcstombs_l(char *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
  90     size_t, locale_t);
  91 extern int wctomb_l(char *, wchar_t, locale_t);
  92 
  93 extern unsigned char __mb_cur_max_l(locale_t);
  94 #ifndef MB_CUR_MAX_L
  95 #define MB_CUR_MAX_L(l) (__mb_cur_max_l(l))
  96 #endif
  97 
  98 
  99 #if defined(_XPG4) && !defined(_FILEDEFED) || __cplusplus >= 199711L
 100 #define _FILEDEFED
 101 typedef __FILE FILE;
 102 #endif
 103 
 104 extern wint_t fgetwc_l(FILE *, locale_t);
 105 extern wint_t getwc_l(FILE *, locale_t);
 106 
 107 #ifndef getwchar_l
 108 #define getwchar_l(l)   fgetwc_l(stdin, (l))
 109 #endif
 110 
 111 #ifdef __cplusplus
 112 }
 113 #endif
 114 
 115 #endif /* _XLOCALE_H */