> - port xlocale(3) from FreeBSD -- this is what this patch does
> 
> I did the patch in two parts, separating include/ and lib/libc/, because my

Second part (include/ headers) follows.
--
Martin Pelikan


Index: _ctype.h
===================================================================
RCS file: _ctype.h
diff -N _ctype.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ _ctype.h    15 Oct 2013 12:51:52 -0000
@@ -0,0 +1,189 @@
+/*     $OpenBSD$ */
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * From @(#)ctype.h    8.4 (Berkeley) 1/21/94
+ * From FreeBSD: src/include/ctype.h,v 1.27 2004/06/23 07:11:39 tjr Exp
+ */
+
+#ifndef __CTYPE_H_
+#define        __CTYPE_H_
+
+#include <sys/cdefs.h>
+#include <sys/_types.h>
+
+extern const _RuneLocale _DefaultRuneLocale;
+extern const _RuneLocale *_CurrentRuneLocale;
+
+#define        _CTYPE_A        0x00000100L             /* Alpha */
+#define        _CTYPE_C        0x00000200L             /* Control */
+#define        _CTYPE_D        0x00000400L             /* Digit */
+#define        _CTYPE_G        0x00000800L             /* Graph */
+#define        _CTYPE_L        0x00001000L             /* Lower */
+#define        _CTYPE_P        0x00002000L             /* Punct */
+#define        _CTYPE_S        0x00004000L             /* Space */
+#define        _CTYPE_U        0x00008000L             /* Upper */
+#define        _CTYPE_X        0x00010000L             /* X digit */
+#define        _CTYPE_B        0x00020000L             /* Blank */
+#define        _CTYPE_R        0x00040000L             /* Print */
+#define        _CTYPE_I        0x00080000L             /* Ideogram */
+#define        _CTYPE_T        0x00100000L             /* Special */
+#define        _CTYPE_Q        0x00200000L             /* Phonogram */
+#define        _CTYPE_SW0      0x20000000L             /* 0 width character */
+#define        _CTYPE_SW1      0x40000000L             /* 1 width character */
+#define        _CTYPE_SW2      0x80000000L             /* 2 width character */
+#define        _CTYPE_SW3      0xc0000000L             /* 3 width character */
+#define        _CTYPE_SWM      0xe0000000L             /* Mask for screen 
width data */
+#define        _CTYPE_SWS      30                      /* Bits to shift to get 
width */
+
+/* See comments in <sys/_types.h> about __ct_rune_t. */
+__BEGIN_DECLS
+unsigned long  ___runetype(__ct_rune_t) __pure;
+__ct_rune_t    ___tolower(__ct_rune_t) __pure;
+__ct_rune_t    ___toupper(__ct_rune_t) __pure;
+__END_DECLS
+
+/*
+ * _EXTERNALIZE_CTYPE_INLINES_ is defined in locale/nomacros.c to tell us
+ * to generate code for extern versions of all our inline functions.
+ */
+#ifdef _EXTERNALIZE_CTYPE_INLINES_
+#define        _USE_CTYPE_INLINE_
+#define        static
+#define        __inline
+#endif
+
+extern int __mb_sb_limit;
+
+/*
+ * Use inline functions if we are allowed to and the compiler supports them.
+ */
+#if !defined(_DONT_USE_CTYPE_INLINE_) && \
+    (defined(_USE_CTYPE_INLINE_) || defined(__GNUC__) || defined(__cplusplus))
+
+#include <runetype.h>
+
+static __inline int
+__maskrune(__ct_rune_t _c, unsigned long _f)
+{
+       return ((_c < 0 || _c >= _CACHED_RUNES) ? ___runetype(_c) :
+               _CurrentRuneLocale->rl_runetype[_c]) & _f;
+}
+
+static __inline int
+__sbmaskrune(__ct_rune_t _c, unsigned long _f)
+{
+       return (_c < 0 || _c >= __mb_sb_limit) ? 0 :
+              _CurrentRuneLocale->rl_runetype[_c] & _f;
+}
+
+static __inline int
+__istype(__ct_rune_t _c, unsigned long _f)
+{
+       return (!!__maskrune(_c, _f));
+}
+
+static __inline int
+__sbistype(__ct_rune_t _c, unsigned long _f)
+{
+       return (!!__sbmaskrune(_c, _f));
+}
+
+static __inline int
+__isctype(__ct_rune_t _c, unsigned long _f)
+{
+       return (_c < 0 || _c >= 128) ? 0 :
+              !!(_DefaultRuneLocale.rl_runetype[_c] & _f);
+}
+
+static __inline __ct_rune_t
+__toupper(__ct_rune_t _c)
+{
+       return (_c < 0 || _c >= _CACHED_RUNES) ? ___toupper(_c) :
+              _CurrentRuneLocale->rl_mapupper[_c];
+}
+
+static __inline __ct_rune_t
+__sbtoupper(__ct_rune_t _c)
+{
+       return (_c < 0 || _c >= __mb_sb_limit) ? _c :
+              _CurrentRuneLocale->rl_mapupper[_c];
+}
+
+static __inline __ct_rune_t
+__tolower(__ct_rune_t _c)
+{
+       return (_c < 0 || _c >= _CACHED_RUNES) ? ___tolower(_c) :
+              _CurrentRuneLocale->rl_maplower[_c];
+}
+
+static __inline __ct_rune_t
+__sbtolower(__ct_rune_t _c)
+{
+       return (_c < 0 || _c >= __mb_sb_limit) ? _c :
+              _CurrentRuneLocale->rl_maplower[_c];
+}
+
+static __inline int
+__wcwidth(__ct_rune_t _c)
+{
+       unsigned int _x;
+
+       if (_c == 0)
+               return (0);
+       _x = (unsigned int)__maskrune(_c, _CTYPE_SWM|_CTYPE_R);
+       if ((_x & _CTYPE_SWM) != 0)
+               return ((_x & _CTYPE_SWM) >> _CTYPE_SWS);
+       return ((_x & _CTYPE_R) != 0 ? 1 : -1);
+}
+
+#else /* not using inlines */
+
+__BEGIN_DECLS
+int            __maskrune(__ct_rune_t, unsigned long);
+int            __sbmaskrune(__ct_rune_t, unsigned long);
+int            __istype(__ct_rune_t, unsigned long);
+int            __sbistype(__ct_rune_t, unsigned long);
+int            __isctype(__ct_rune_t, unsigned long);
+__ct_rune_t    __toupper(__ct_rune_t);
+__ct_rune_t    __sbtoupper(__ct_rune_t);
+__ct_rune_t    __tolower(__ct_rune_t);
+__ct_rune_t    __sbtolower(__ct_rune_t);
+int            __wcwidth(__ct_rune_t);
+__END_DECLS
+#endif /* using inlines */
+
+#endif /* !__CTYPE_H_ */
Index: ctype.h
===================================================================
RCS file: /cvs/src/include/ctype.h,v
retrieving revision 1.22
diff -u -p -r1.22 ctype.h
--- ctype.h     1 Oct 2010 20:10:24 -0000       1.22
+++ ctype.h     15 Oct 2013 12:51:52 -0000
@@ -41,6 +41,8 @@
 #define _CTYPE_H_
 
 #include <sys/cdefs.h>
+#include <sys/types.h>
+typedef __rune_t __ct_rune_t;
 
 #define        _U      0x01
 #define        _L      0x02
Index: runetype.h
===================================================================
RCS file: runetype.h
diff -N runetype.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ runetype.h  15 Oct 2013 12:51:52 -0000
@@ -0,0 +1,220 @@
+#ifndef _NB_RUNETYPE_H_
+#define _NB_RUNETYPE_H_
+
+/* $OpenBSD: runetype.h,v 1.7 2012/12/05 23:20:00 deraadt Exp $ */
+/*     $NetBSD: runetype.h,v 1.18 2003/08/07 16:43:04 agc Exp $        */
+/*-
+ * Copyright (c) 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)runetype.h  8.1 (Berkeley) 6/2/93
+ */
+
+#include <sys/types.h>
+//#include "ctype_private.h"
+#define CTYPE_NUM_CHARS        256
+
+typedef uint32_t       rune_t;
+typedef uint64_t       __runepad_t;
+
+
+#define        _CACHED_RUNES           (1 << 8)        /* Must be a power of 2 
*/
+#define _RUNE_ISCACHED(c)      ((c)>=0 && (c)<_CACHED_RUNES)
+
+#define _DEFAULT_INVALID_RUNE  ((rune_t)-3)
+
+/*
+ * The lower 8 bits of runetype[] contain the digit value of the rune.
+ */
+typedef uint32_t _RuneType;
+
+#define        _RUNETYPE_A     0x00000100U     /* Alpha */
+#define        _RUNETYPE_C     0x00000200U     /* Control */
+#define        _RUNETYPE_D     0x00000400U     /* Digit */
+#define        _RUNETYPE_G     0x00000800U     /* Graph */
+#define        _RUNETYPE_L     0x00001000U     /* Lower */
+#define        _RUNETYPE_P     0x00002000U     /* Punct */
+#define        _RUNETYPE_S     0x00004000U     /* Space */
+#define        _RUNETYPE_U     0x00008000U     /* Upper */
+#define        _RUNETYPE_X     0x00010000U     /* X digit */
+#define        _RUNETYPE_B     0x00020000U     /* Blank */
+#define        _RUNETYPE_R     0x00040000U     /* Print */
+#define        _RUNETYPE_I     0x00080000U     /* Ideogram */
+#define        _RUNETYPE_T     0x00100000U     /* Special */
+#define        _RUNETYPE_Q     0x00200000U     /* Phonogram */
+#define        _RUNETYPE_SWM   0xe0000000U     /* Mask to get screen width 
data */
+#define        _RUNETYPE_SWS   30              /* Bits to shift to get width */
+#define        _RUNETYPE_SW0   0x20000000U     /* 0 width character */
+#define        _RUNETYPE_SW1   0x40000000U     /* 1 width character */
+#define        _RUNETYPE_SW2   0x80000000U     /* 2 width character */
+#define        _RUNETYPE_SW3   0xc0000000U     /* 3 width character */
+
+
+/*
+ * rune file format.  network endian.
+ */
+typedef struct {
+       int32_t         fre_min;        /* First rune of the range */
+       int32_t         fre_max;        /* Last rune (inclusive) of the range */
+       int32_t         fre_map;        /* What first maps to in maps */
+} __packed _FileRuneEntry;
+
+
+typedef struct {
+       uint32_t        frr_nranges;    /* Number of ranges stored */
+} __packed _FileRuneRange;
+
+
+typedef struct {
+       char            frl_magic[8];   /* Magic saying what version we are */
+       char            frl_encoding[32];/* ASCII name of this encoding */
+
+       int32_t         frl_invalid_rune;
+
+       _RuneType       frl_runetype[_CACHED_RUNES];
+       int32_t         frl_maplower[_CACHED_RUNES];
+       int32_t         frl_mapupper[_CACHED_RUNES];
+
+       /*
+        * The following are to deal with Runes larger than _CACHED_RUNES - 1.
+        * Their data is actually contiguous with this structure so as to make
+        * it easier to read/write from/to disk.
+        */
+       _FileRuneRange  frl_runetype_ext;
+       _FileRuneRange  frl_maplower_ext;
+       _FileRuneRange  frl_mapupper_ext;
+
+       int32_t         frl_variable_len;/* how long that data is */
+
+       /* variable size data follows */
+} __packed _FileRuneLocale;
+
+
+/*
+ * expanded rune locale declaration.  local to the host.  host endian.
+ */
+typedef struct {
+       rune_t          re_min;         /* First rune of the range */
+       rune_t          re_max;         /* Last rune (inclusive) of the range */
+       rune_t          re_map;         /* What first maps to in maps */
+       _RuneType       *re_rune_types; /* Array of types in range */
+} _RuneEntry;
+
+
+typedef struct {
+       uint32_t        rr_nranges;     /* Number of ranges stored */
+       _RuneEntry      *rr_rune_ranges;
+} _RuneRange;
+
+
+/*
+ * wctrans stuffs.
+ */
+typedef struct _WCTransEntry {
+       char            *te_name;
+       rune_t          *te_cached;
+       _RuneRange      *te_extmap;
+} _WCTransEntry;
+
+#define _WCTRANS_INDEX_LOWER   0
+#define _WCTRANS_INDEX_UPPER   1
+#define _WCTRANS_NINDEXES      2
+
+/*
+ * wctype stuffs.
+ */
+typedef struct _WCTypeEntry {
+       char            *te_name;
+       _RuneType       te_mask;
+} _WCTypeEntry;
+#define _WCTYPE_INDEX_ALNUM    0
+#define _WCTYPE_INDEX_ALPHA    1
+#define _WCTYPE_INDEX_BLANK    2
+#define _WCTYPE_INDEX_CNTRL    3
+#define _WCTYPE_INDEX_DIGIT    4
+#define _WCTYPE_INDEX_GRAPH    5
+#define _WCTYPE_INDEX_LOWER    6
+#define _WCTYPE_INDEX_PRINT    7
+#define _WCTYPE_INDEX_PUNCT    8
+#define _WCTYPE_INDEX_SPACE    9
+#define _WCTYPE_INDEX_UPPER    10
+#define _WCTYPE_INDEX_XDIGIT   11
+#define _WCTYPE_NINDEXES       12
+
+/*
+ * ctype stuffs
+ */
+
+struct old_tabs {
+       /* compatibility with `old' ctype */
+       char ctype_tab[CTYPE_NUM_CHARS + 1];
+       short tolower_tab[256 + 1];
+       short toupper_tab[256 + 1];
+};
+
+typedef struct {
+       /*
+        * copied from _FileRuneLocale
+        */
+       char            rl_magic[8];    /* Magic saying what version we are */
+       char            rl_encoding[32];/* ASCII name of this encoding */
+       rune_t          rl_invalid_rune;
+       _RuneType       rl_runetype[_CACHED_RUNES];
+       rune_t          rl_maplower[_CACHED_RUNES];
+       rune_t          rl_mapupper[_CACHED_RUNES];
+       _RuneRange      rl_runetype_ext;
+       _RuneRange      rl_maplower_ext;
+       _RuneRange      rl_mapupper_ext;
+
+       void            *rl_variable;
+       size_t          rl_variable_len;
+
+       /*
+        * the following portion is generated on the fly
+        */
+       char                            *rl_codeset;
+       struct _citrus_ctype_rec        *rl_citrus_ctype;
+       _WCTransEntry                   rl_wctrans[_WCTRANS_NINDEXES];
+       _WCTypeEntry                    rl_wctype[_WCTYPE_NINDEXES];
+
+       struct old_tabs *               rl_tabs;
+
+} _RuneLocale;
+
+/* magic number for LC_CTYPE (rune)locale declaration */
+#define        _RUNE_MAGIC_1 "RuneCT10"        /* Indicates version 0 of 
RuneLocale */
+
+/* magic string for dynamic link module - type should be like "LC_CTYPE" */
+#define        _RUNE_MODULE_1(type)    "RuneModule10." type
+
+/* codeset tag */
+#define _RUNE_CODESET "CODESET="
+
+#endif
Index: xlocale.h
===================================================================
RCS file: xlocale.h
diff -N xlocale.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale.h   15 Oct 2013 12:51:52 -0000
@@ -0,0 +1,84 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _XLOCALE_H_
+#define _XLOCALE_H_
+
+#include <locale.h>
+__BEGIN_DECLS
+#include <xlocale/_locale.h>
+
+#ifdef _STRING_H_
+#include <xlocale/_string.h>
+#endif
+
+#ifdef _INTTYPES_H_
+#include <xlocale/_inttypes.h>
+#endif
+
+#ifdef _MONETARY_H_
+#include <xlocale/_monetary.h>
+#endif
+
+#ifdef _STDLIB_H_
+#include <xlocale/_stdlib.h>
+#endif
+
+#ifdef _TIME_H_
+#include <xlocale/_time.h>
+#endif
+
+#ifdef _LANGINFO_H_
+#include <xlocale/_langinfo.h>
+#endif
+
+#ifdef _CTYPE_H_
+#include <xlocale/_ctype.h>
+#endif
+
+#ifdef _WCTYPE_H_
+#define _XLOCALE_WCTYPES 1
+#include <xlocale/_ctype.h>
+#endif
+
+#ifdef _STDIO_H_
+#include <xlocale/_stdio.h>
+#endif
+
+#ifdef _WCHAR_H_
+#include <xlocale/_wchar.h>
+#endif
+
+
+
+struct lconv   *localeconv_l(locale_t);
+__END_DECLS
+
+#endif
Index: xlocale/Makefile
===================================================================
RCS file: xlocale/Makefile
diff -N xlocale/Makefile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/Makefile    15 Oct 2013 12:51:52 -0000
@@ -0,0 +1,8 @@
+#      $OpenBSD$
+
+NO_OBJ=
+INCS=  _ctype.h _inttypes.h _langinfo.h _locale.h _monetary.h _stdio.h\
+       _stdlib.h _string.h _time.h _uchar.h _wchar.h
+INCSDIR=${INCLUDEDIR}/xlocale
+
+.include <bsd.prog.mk>
Index: xlocale/_ctype.h
===================================================================
RCS file: xlocale/_ctype.h
diff -N xlocale/_ctype.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_ctype.h    15 Oct 2013 12:51:52 -0000
@@ -0,0 +1,208 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#if    (defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_WCTYPE_H)) || \
+       (!defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_CTYPE_H))
+
+#if defined(__OpenBSD__)
+typedef int __ct_rune_t;
+#include <runetype.h>
+#include <_ctype.h>
+#endif /* (__OpenBSD__) */
+
+#ifdef _XLOCALE_WCTYPES
+#define _XLOCALE_WCTYPE_H
+#else
+#define _XLOCALE_CTYPE_H
+#endif
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+#ifndef _XLOCALE_RUN_FUNCTIONS_DEFINED
+#define _XLOCALE_RUN_FUNCTIONS_DEFINED 1
+unsigned long   ___runetype_l(__ct_rune_t, locale_t) __pure;
+__ct_rune_t     ___tolower_l(__ct_rune_t, locale_t) __pure;
+__ct_rune_t     ___toupper_l(__ct_rune_t, locale_t) __pure;
+_RuneLocale    *__runes_for_locale(locale_t, int*);
+#endif
+
+#ifndef _XLOCALE_INLINE
+#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
+/* GNU89 inline has nonstandard semantics. */
+#define _XLOCALE_INLINE extern __inline
+#else
+/* Hack to work around people who define inline away */
+#ifdef inline
+#define _XLOCALE_INLINE static __inline
+#else
+/* Define with C++ / C99 compatible semantics */
+#define _XLOCALE_INLINE inline
+#endif
+#endif
+#endif /* _XLOCALE_INLINE */
+
+#ifdef _XLOCALE_WCTYPES
+_XLOCALE_INLINE int
+__maskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
+_XLOCALE_INLINE int
+__istype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
+
+_XLOCALE_INLINE int
+__maskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
+{
+       int __limit;
+       _RuneLocale *runes = __runes_for_locale(__loc, &__limit);
+       return ((__c < 0 || __c >= _CACHED_RUNES) ? ___runetype_l(__c, __loc) :
+               runes->rl_runetype[__c]) & __f;
+}
+
+_XLOCALE_INLINE int
+__istype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
+{
+       return (!!__maskrune_l(__c, __f, __loc));
+}
+
+#define XLOCALE_ISCTYPE(fname, cat) \
+               _XLOCALE_INLINE int isw##fname##_l(int, locale_t);\
+               _XLOCALE_INLINE int isw##fname##_l(int __c, locale_t __l)\
+               { return __istype_l(__c, cat, __l); }
+#else
+_XLOCALE_INLINE int
+__sbmaskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
+_XLOCALE_INLINE int
+__sbistype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
+
+_XLOCALE_INLINE int
+__sbmaskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
+{
+       int __limit;
+       _RuneLocale *runes = __runes_for_locale(__loc, &__limit);
+       return (__c < 0 || __c >= __limit) ? 0 :
+              runes->rl_runetype[__c] & __f;
+}
+
+_XLOCALE_INLINE int
+__sbistype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
+{
+       return (!!__sbmaskrune_l(__c, __f, __loc));
+}
+
+#define XLOCALE_ISCTYPE(__fname, __cat) \
+               _XLOCALE_INLINE int is##__fname##_l(int, locale_t); \
+               _XLOCALE_INLINE int is##__fname##_l(int __c, locale_t __l)\
+               { return __sbistype_l(__c, __cat, __l); }
+#endif
+
+XLOCALE_ISCTYPE(alnum, _CTYPE_A|_CTYPE_D)
+XLOCALE_ISCTYPE(alpha, _CTYPE_A)
+XLOCALE_ISCTYPE(blank, _CTYPE_B)
+XLOCALE_ISCTYPE(cntrl, _CTYPE_C)
+XLOCALE_ISCTYPE(digit, _CTYPE_D)
+XLOCALE_ISCTYPE(graph, _CTYPE_G)
+XLOCALE_ISCTYPE(hexnumber, _CTYPE_X)
+XLOCALE_ISCTYPE(ideogram, _CTYPE_I)
+XLOCALE_ISCTYPE(lower, _CTYPE_L)
+XLOCALE_ISCTYPE(number, _CTYPE_D)
+XLOCALE_ISCTYPE(phonogram, _CTYPE_Q)
+XLOCALE_ISCTYPE(print, _CTYPE_R)
+XLOCALE_ISCTYPE(punct, _CTYPE_P)
+XLOCALE_ISCTYPE(rune, 0xFFFFFF00L)
+XLOCALE_ISCTYPE(space, _CTYPE_S)
+XLOCALE_ISCTYPE(special, _CTYPE_T)
+XLOCALE_ISCTYPE(upper, _CTYPE_U)
+XLOCALE_ISCTYPE(xdigit, _CTYPE_X)
+#undef XLOCALE_ISCTYPE
+
+#ifdef _XLOCALE_WCTYPES
+_XLOCALE_INLINE int towlower_l(int, locale_t);
+_XLOCALE_INLINE int __wcwidth_l(__ct_rune_t, locale_t);
+_XLOCALE_INLINE int towupper_l(int, locale_t);
+
+_XLOCALE_INLINE int towlower_l(int __c, locale_t __l)
+{
+       int __limit;
+       _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
+       return (__c < 0 || __c >= _CACHED_RUNES) ? ___tolower_l(__c, __l) :
+              __runes->rl_maplower[__c];
+}
+_XLOCALE_INLINE int towupper_l(int __c, locale_t __l)
+{
+       int __limit;
+       _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
+       return (__c < 0 || __c >= _CACHED_RUNES) ? ___toupper_l(__c, __l) :
+              __runes->rl_mapupper[__c];
+}
+_XLOCALE_INLINE int
+__wcwidth_l(__ct_rune_t _c, locale_t __l)
+{
+       unsigned int _x;
+
+       if (_c == 0)
+               return (0);
+       _x = (unsigned int)__maskrune_l(_c, _CTYPE_SWM|_CTYPE_R, __l);
+       if ((_x & _CTYPE_SWM) != 0)
+               return ((_x & _CTYPE_SWM) >> _CTYPE_SWS);
+       return ((_x & _CTYPE_R) != 0 ? 1 : -1);
+}
+int iswctype_l(wint_t __wc, wctype_t __charclass, locale_t __l);
+wctype_t wctype_l(const char *property, locale_t __l);
+wint_t towctrans_l(wint_t __wc, wctrans_t desc, locale_t __l);
+wint_t nextwctype_l(wint_t __wc, wctype_t wct, locale_t __l);
+wctrans_t wctrans_l(const char *__charclass, locale_t __l);
+#undef _XLOCALE_WCTYPES
+#else
+_XLOCALE_INLINE int digittoint_l(int, locale_t);
+_XLOCALE_INLINE int tolower_l(int, locale_t);
+_XLOCALE_INLINE int toupper_l(int, locale_t);
+
+_XLOCALE_INLINE int digittoint_l(int __c, locale_t __l)
+{ return __sbmaskrune_l((__c), 0xFF, __l); }
+
+_XLOCALE_INLINE int tolower_l(int __c, locale_t __l)
+{
+       int __limit;
+       _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
+       return (__c < 0 || __c >= __limit) ? __c :
+              __runes->rl_maplower[__c];
+}
+_XLOCALE_INLINE int toupper_l(int __c, locale_t __l)
+{
+       int __limit;
+       _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
+       return (__c < 0 || __c >= __limit) ? __c :
+              __runes->rl_mapupper[__c];
+}
+#endif
+#endif /* (defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_WCTYPE_H)) || \
+       (!defined(_XLOCALE_WCTYPES) && !defined(_XLOCALE_CTYPE_H)) */
Index: xlocale/_inttypes.h
===================================================================
RCS file: xlocale/_inttypes.h
diff -N xlocale/_inttypes.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_inttypes.h 15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,43 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+/*
+ * Extended locale versions of the locale-aware functions from inttypes.h.
+ * Include <inttypes.h> before <xlocale.h> to expose these.
+ */
+intmax_t       strtoimax_l(const char * __restrict, char ** __restrict,
+                   int, locale_t);
+uintmax_t      strtoumax_l(const char * __restrict, char ** __restrict, int,
+                   locale_t);
+intmax_t       wcstoimax_l(const wchar_t * __restrict, wchar_t ** __restrict,
+                   int , locale_t);
+uintmax_t      wcstoumax_l(const wchar_t * __restrict, wchar_t ** __restrict,
+                   int, locale_t);
Index: xlocale/_langinfo.h
===================================================================
RCS file: xlocale/_langinfo.h
diff -N xlocale/_langinfo.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_langinfo.h 15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,41 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _XLOCALE_LANGINFO_H
+#define _XLOCALE_LANGINFO_H
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+char   *nl_langinfo_l(nl_item, locale_t);
+
+#endif /* _XLOCALE_LANGINFO_H */
Index: xlocale/_locale.h
===================================================================
RCS file: xlocale/_locale.h
diff -N xlocale/_locale.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_locale.h   15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,55 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _XLOCALE_LOCALE_H
+#define _XLOCALE_LOCALE_H
+
+#define LC_COLLATE_MASK  (1<<0)
+#define LC_CTYPE_MASK    (1<<1)
+#define LC_MESSAGES_MASK (1<<2)
+#define LC_MONETARY_MASK (1<<3)
+#define LC_NUMERIC_MASK  (1<<4)
+#define LC_TIME_MASK     (1<<5)
+#define LC_ALL_MASK      (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | 
\
+                         LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
+#define LC_GLOBAL_LOCALE ((locale_t)-1)
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+locale_t        duplocale(locale_t base);
+int             freelocale(locale_t loc);
+locale_t        newlocale(int mask, const char *locale, locale_t base);
+const char     *querylocale(int mask, locale_t loc);
+locale_t        uselocale(locale_t loc);
+
+#endif /* _XLOCALE_LOCALE_H */
Index: xlocale/_monetary.h
===================================================================
RCS file: xlocale/_monetary.h
diff -N xlocale/_monetary.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_monetary.h 15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,44 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
+#ifndef _XLOCALE_MONETARY_H
+#define _XLOCALE_MONETARY_H
+
+ssize_t strfmon_l(char *, size_t, locale_t, const char *, ...)
+    __strfmonlike(4, 5);
+
+#endif /* _XLOCALE_MONETARY_H */
+#endif /* __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_) */
Index: xlocale/_stdio.h
===================================================================
RCS file: xlocale/_stdio.h
diff -N xlocale/_stdio.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_stdio.h    15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,54 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+int     asprintf_l(char **, locale_t, const char *, ...);
+int     dprintf_l(int, locale_t, const char * __restrict, ...);
+int     fprintf_l(FILE * __restrict, locale_t, const char * __restrict, ...);
+int     fscanf_l(FILE * __restrict, locale_t, const char * __restrict, ...);
+int     printf_l(locale_t, const char * __restrict, ...);
+int     scanf_l(locale_t, const char * __restrict, ...);
+int     snprintf_l(char * __restrict, size_t, locale_t,
+           const char * __restrict, ...);
+int     sprintf_l(char * __restrict, locale_t, const char * __restrict, ...);
+int     sscanf_l(const char * __restrict, locale_t, const char * __restrict, 
...);
+int     vfprintf_l(FILE * __restrict, locale_t, const char * __restrict,
+           __va_list);
+int     vprintf_l(locale_t, const char * __restrict, __va_list);
+int     vsprintf_l(char * __restrict, locale_t, const char * __restrict,
+           __va_list);
+int     vfscanf_l(FILE * __restrict, locale_t, const char * __restrict,
+           __va_list);
+int     vscanf_l(locale_t, const char * __restrict, __va_list);
+int     vsnprintf_l(char * __restrict, size_t, locale_t,
+           const char * __restrict, __va_list);
+int     vsscanf_l(const char * __restrict, locale_t, const char * __restrict,
+           __va_list);
+int     vdprintf_l(int, locale_t, const char * __restrict, __va_list);
+int     vasprintf_l(char **, locale_t, const char *, __va_list);
Index: xlocale/_stdlib.h
===================================================================
RCS file: xlocale/_stdlib.h
diff -N xlocale/_stdlib.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_stdlib.h   15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,58 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Extended locale versions of the locale-aware functions from stdlib.h.
+ *
+ * Include <stdlib.h> before <xlocale.h> to expose these.
+ */
+double                  atof_l(const char *, locale_t);
+int                     atoi_l(const char *, locale_t);
+long                    atol_l(const char *, locale_t);
+long long               atoll_l(const char *, locale_t);
+int                     mblen_l(const char *, size_t, locale_t);
+size_t                  mbstowcs_l(wchar_t * __restrict,
+                           const char * __restrict, size_t, locale_t);
+int                     mbtowc_l(wchar_t * __restrict,
+                           const char * __restrict, size_t, locale_t);
+double                  strtod_l(const char *, char **, locale_t);
+float                   strtof_l(const char *, char **, locale_t);
+long                    strtol_l(const char *, char **, int, locale_t);
+long double             strtold_l(const char *, char **, locale_t);
+long long               strtoll_l(const char *, char **, int, locale_t);
+unsigned long           strtoul_l(const char *, char **, int, locale_t);
+unsigned long long      strtoull_l(const char *, char **, int, locale_t);
+size_t                  wcstombs_l(char * __restrict,
+                           const wchar_t * __restrict, size_t, locale_t);
+int                     wctomb_l(char *, wchar_t, locale_t);
+
+int                     ___mb_cur_max_l(locale_t);
+#define MB_CUR_MAX_L(x) (___mb_cur_max_l(x))
+
Index: xlocale/_string.h
===================================================================
RCS file: xlocale/_string.h
diff -N xlocale/_string.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_string.h   15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,60 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+/*
+ * This file is included from both string.h and xlocale.h.  We need to expose
+ * the declarations unconditionally if we are included from xlocale.h, but only
+ * if we are in POSIX2008 mode if included from string.h.
+ */
+
+#ifndef _XLOCALE_STRING1_H
+#define _XLOCALE_STRING1_H
+
+/*
+ * POSIX2008 functions
+ */
+int     strcoll_l(const char *, const char *, locale_t);
+size_t  strxfrm_l(char *, const char *, size_t, locale_t);
+#endif /* _XLOCALE_STRING1_H */
+
+/*
+ * xlocale extensions
+ */
+#ifdef _XLOCALE_H_
+#ifndef _XLOCALE_STRING2_H
+#define _XLOCALE_STRING2_H
+int     strcasecmp_l(const char *, const char *, locale_t);
+char   *strcasestr_l(const char *, const char *, locale_t);
+int     strncasecmp_l(const char *, const char *, size_t, locale_t);
+
+#endif /* _XLOCALE_STRING2_H */
+#endif /* _XLOCALE_H_ */
Index: xlocale/_time.h
===================================================================
RCS file: xlocale/_time.h
diff -N xlocale/_time.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_time.h     15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,57 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+/*
+ * This file is included from both locale.h and xlocale.h.  We need to expose
+ * the declarations unconditionally if we are included from xlocale.h, but only
+ * if we are in POSIX2008 mode if included from locale.h.
+ */
+#ifndef _XLOCALE_LOCALE1_H
+#define _XLOCALE_LOCALE1_H
+
+size_t  strftime_l(char * __restrict, size_t, const char * __restrict,
+           const struct tm * __restrict, locale_t);
+
+#endif /* _XLOCALE_LOCALE1_H */
+
+#ifdef _XLOCALE_H_
+#ifndef _XLOCALE_LOCALE2_H
+#define _XLOCALE_LOCALE2_H
+
+char   *strptime_l(const char * __restrict, const char * __restrict,
+           struct tm * __restrict, locale_t);
+
+#endif /* _XLOCALE_LOCALE2_H */
+#endif /* _XLOCALE_H_ */
Index: xlocale/_uchar.h
===================================================================
RCS file: xlocale/_uchar.h
diff -N xlocale/_uchar.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_uchar.h    15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,45 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2013 Ed Schouten <e...@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+#ifndef _XLOCALE_UCHAR_H_
+#define _XLOCALE_UCHAR_H_
+
+size_t c16rtomb_l(char * __restrict, char16_t, mbstate_t * __restrict,
+    locale_t);
+size_t c32rtomb_l(char * __restrict, char32_t, mbstate_t * __restrict,
+    locale_t);
+size_t mbrtoc16_l(char16_t * __restrict, const char * __restrict, size_t,
+    mbstate_t * __restrict, locale_t);
+size_t mbrtoc32_l(char32_t * __restrict, const char * __restrict, size_t,
+    mbstate_t * __restrict, locale_t);
+
+#endif /* _XLOCALE_UCHAR_H_ */
Index: xlocale/_wchar.h
===================================================================
RCS file: xlocale/_wchar.h
diff -N xlocale/_wchar.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xlocale/_wchar.h    15 Oct 2013 12:51:53 -0000
@@ -0,0 +1,132 @@
+/*     $OpenBSD$ */
+/*-
+ * Copyright (c) 2011, 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LOCALE_T_DEFINED
+#define _LOCALE_T_DEFINED
+typedef struct _xlocale *locale_t;
+#endif
+
+#ifndef _XLOCALE_WCHAR1_H
+#define _XLOCALE_WCHAR1_H
+int                     wcscasecmp_l(const wchar_t *, const wchar_t *,
+                          locale_t);
+int                     wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t,
+                          locale_t);
+int                     wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
+size_t                  wcsxfrm_l(wchar_t * __restrict,
+                          const wchar_t * __restrict, size_t, locale_t);
+
+#endif /* _XLOCALE_WCHAR1_H */
+
+/*
+ * Only declare the non-POSIX functions if we're included from xlocale.h.
+ */
+
+#ifdef _XLOCALE_H_
+#ifndef _XLOCALE_WCHAR2_H
+#define _XLOCALE_WCHAR2_H
+
+wint_t                  btowc_l(int, locale_t);
+wint_t                  fgetwc_l(FILE *, locale_t);
+wchar_t                        *fgetws_l(wchar_t * __restrict, int, FILE * 
__restrict,
+                           locale_t);
+wint_t                  fputwc_l(wchar_t, FILE *, locale_t);
+int                     fputws_l(const wchar_t * __restrict, FILE * __restrict,
+                          locale_t);
+int                     fwprintf_l(FILE * __restrict, locale_t,
+                           const wchar_t * __restrict, ...);
+int                     fwscanf_l(FILE * __restrict, locale_t,
+                           const wchar_t * __restrict, ...);
+wint_t                  getwc_l(FILE *, locale_t);
+wint_t                  getwchar_l(locale_t);
+size_t                  mbrlen_l(const char * __restrict, size_t,
+                          mbstate_t * __restrict, locale_t);
+size_t                  mbrtowc_l(wchar_t * __restrict,
+                           const char * __restrict, size_t,
+                           mbstate_t * __restrict, locale_t);
+int                     mbsinit_l(const mbstate_t *, locale_t);
+size_t                  mbsrtowcs_l(wchar_t * __restrict,
+                           const char ** __restrict, size_t,
+                           mbstate_t * __restrict, locale_t);
+wint_t                  putwc_l(wchar_t, FILE *, locale_t);
+wint_t                  putwchar_l(wchar_t, locale_t);
+int                     swprintf_l(wchar_t * __restrict, size_t n, locale_t,
+                           const wchar_t * __restrict, ...);
+int                     swscanf_l(const wchar_t * __restrict, locale_t,
+                          const wchar_t * __restrict, ...);
+wint_t                  ungetwc_l(wint_t, FILE *, locale_t);
+int                     vfwprintf_l(FILE * __restrict, locale_t,
+                           const wchar_t * __restrict, __va_list);
+int                     vswprintf_l(wchar_t * __restrict, size_t n, locale_t,
+                           const wchar_t * __restrict, __va_list);
+int                     vwprintf_l(locale_t, const wchar_t * __restrict,
+                           __va_list);
+size_t                  wcrtomb_l(char * __restrict, wchar_t,
+                           mbstate_t * __restrict, locale_t);
+size_t                  wcsftime_l(wchar_t * __restrict, size_t,
+                           const wchar_t * __restrict,
+                           const struct tm * __restrict, locale_t);
+size_t                  wcsrtombs_l(char * __restrict,
+                           const wchar_t ** __restrict, size_t,
+                           mbstate_t * __restrict, locale_t);
+double                  wcstod_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, locale_t);
+long                    wcstol_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, int, locale_t);
+unsigned long           wcstoul_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, int, locale_t);
+int                     wcswidth_l(const wchar_t *, size_t, locale_t);
+int                     wctob_l(wint_t, locale_t);
+int                     wcwidth_l(wchar_t, locale_t);
+int                     wprintf_l(locale_t, const wchar_t * __restrict, ...);
+int                     wscanf_l(locale_t, const wchar_t * __restrict, ...);
+int                     vfwscanf_l(FILE * __restrict, locale_t,
+                           const wchar_t * __restrict, __va_list);
+int                     vswscanf_l(const wchar_t * __restrict, locale_t,
+                           const wchar_t *__restrict, __va_list);
+int                     vwscanf_l(locale_t, const wchar_t * __restrict,
+                           __va_list);
+float                   wcstof_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, locale_t);
+long double             wcstold_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, locale_t);
+long long               wcstoll_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, int, locale_t);
+unsigned long long      wcstoull_l(const wchar_t * __restrict,
+                           wchar_t ** __restrict, int, locale_t);
+size_t                  mbsnrtowcs_l(wchar_t * __restrict,
+                           const char ** __restrict, size_t, size_t,
+                           mbstate_t * __restrict, locale_t);
+size_t                  wcsnrtombs_l(char * __restrict,
+                           const wchar_t ** __restrict, size_t, size_t,
+                           mbstate_t * __restrict, locale_t);
+
+#endif /* _XLOCALE_WCHAR_H */
+#endif /* _XLOCALE_H_ */

Reply via email to