1ee226c05af9e0187098f43fb71465a581487af9bDan Austin// -*- C++ -*-
2ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===------------------- support/ibm/locale_mgmt_aix.h --------------------===//
3ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
4ee226c05af9e0187098f43fb71465a581487af9bDan Austin//                     The LLVM Compiler Infrastructure
5ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open
7ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details.
8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
9ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===//
10ee226c05af9e0187098f43fb71465a581487af9bDan Austin
11ee226c05af9e0187098f43fb71465a581487af9bDan Austin#ifndef _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
12ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
13ee226c05af9e0187098f43fb71465a581487af9bDan Austin
14ee226c05af9e0187098f43fb71465a581487af9bDan Austin#if defined(_AIX)
15ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "cstdlib"
16ee226c05af9e0187098f43fb71465a581487af9bDan Austin
17ee226c05af9e0187098f43fb71465a581487af9bDan Austin#ifdef __cplusplus
18ee226c05af9e0187098f43fb71465a581487af9bDan Austinextern "C" {
19ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif
20ee226c05af9e0187098f43fb71465a581487af9bDan Austin
21ee226c05af9e0187098f43fb71465a581487af9bDan Austin#if !defined(_AIX71)
22ee226c05af9e0187098f43fb71465a581487af9bDan Austin// AIX 7.1 and higher has these definitions.  Definitions and stubs
23ee226c05af9e0187098f43fb71465a581487af9bDan Austin// are provied here as a temporary workaround on AIX 6.1.
24ee226c05af9e0187098f43fb71465a581487af9bDan Austin
25ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_COLLATE_MASK         1
26ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_CTYPE_MASK           2
27ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_MESSAGES_MASK        4
28ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_MONETARY_MASK        8
29ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_NUMERIC_MASK         16
30ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_TIME_MASK            32
31ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define LC_ALL_MASK             (LC_COLLATE_MASK | LC_CTYPE_MASK | \
32ee226c05af9e0187098f43fb71465a581487af9bDan Austin                                 LC_MESSAGES_MASK | LC_MONETARY_MASK |\
33ee226c05af9e0187098f43fb71465a581487af9bDan Austin                                 LC_NUMERIC_MASK | LC_TIME_MASK)
34ee226c05af9e0187098f43fb71465a581487af9bDan Austin
35ee226c05af9e0187098f43fb71465a581487af9bDan Austintypedef void* locale_t;
36ee226c05af9e0187098f43fb71465a581487af9bDan Austin
37ee226c05af9e0187098f43fb71465a581487af9bDan Austin// The following are stubs.  They are not supported on AIX 6.1.
38ee226c05af9e0187098f43fb71465a581487af9bDan Austinstatic inline
39ee226c05af9e0187098f43fb71465a581487af9bDan Austinlocale_t newlocale(int category_mask, const char *locale, locale_t base)
40ee226c05af9e0187098f43fb71465a581487af9bDan Austin{
41ee226c05af9e0187098f43fb71465a581487af9bDan Austin  _LC_locale_t *newloc, *loc;
42ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if ((loc = (_LC_locale_t *)__xopen_locale(locale)) == NULL)
43ee226c05af9e0187098f43fb71465a581487af9bDan Austin  {
44ee226c05af9e0187098f43fb71465a581487af9bDan Austin    errno = EINVAL;
45ee226c05af9e0187098f43fb71465a581487af9bDan Austin    return (locale_t)0;
46ee226c05af9e0187098f43fb71465a581487af9bDan Austin  }
47ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if ((newloc = (_LC_locale_t *)calloc(1, sizeof(_LC_locale_t))) == NULL)
48ee226c05af9e0187098f43fb71465a581487af9bDan Austin  {
49ee226c05af9e0187098f43fb71465a581487af9bDan Austin    errno = ENOMEM;
50ee226c05af9e0187098f43fb71465a581487af9bDan Austin    return (locale_t)0;
51ee226c05af9e0187098f43fb71465a581487af9bDan Austin  }
52ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (!base)
53ee226c05af9e0187098f43fb71465a581487af9bDan Austin    base = (_LC_locale_t *)__xopen_locale("C");
54ee226c05af9e0187098f43fb71465a581487af9bDan Austin  memcpy(newloc, base, sizeof (_LC_locale_t));
55ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (category_mask & LC_COLLATE_MASK)
56ee226c05af9e0187098f43fb71465a581487af9bDan Austin    newloc->lc_collate = loc->lc_collate;
57ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (category_mask & LC_CTYPE_MASK)
58ee226c05af9e0187098f43fb71465a581487af9bDan Austin    newloc->lc_ctype = loc->lc_ctype;
59ee226c05af9e0187098f43fb71465a581487af9bDan Austin  //if (category_mask & LC_MESSAGES_MASK)
60ee226c05af9e0187098f43fb71465a581487af9bDan Austin  //  newloc->lc_messages = loc->lc_messages;
61ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (category_mask & LC_MONETARY_MASK)
62ee226c05af9e0187098f43fb71465a581487af9bDan Austin    newloc->lc_monetary = loc->lc_monetary;
63ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (category_mask & LC_TIME_MASK)
64ee226c05af9e0187098f43fb71465a581487af9bDan Austin    newloc->lc_time = loc->lc_time;
65ee226c05af9e0187098f43fb71465a581487af9bDan Austin  if (category_mask & LC_NUMERIC_MASK)
66ee226c05af9e0187098f43fb71465a581487af9bDan Austin    newloc->lc_numeric = loc->lc_numeric;
67ee226c05af9e0187098f43fb71465a581487af9bDan Austin  return (locale_t)newloc;
68ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
69ee226c05af9e0187098f43fb71465a581487af9bDan Austinstatic inline
70ee226c05af9e0187098f43fb71465a581487af9bDan Austinvoid freelocale(locale_t locobj)
71ee226c05af9e0187098f43fb71465a581487af9bDan Austin{
72ee226c05af9e0187098f43fb71465a581487af9bDan Austin  free(locobj);
73ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
74ee226c05af9e0187098f43fb71465a581487af9bDan Austinstatic inline
75ee226c05af9e0187098f43fb71465a581487af9bDan Austinlocale_t uselocale(locale_t newloc)
76ee226c05af9e0187098f43fb71465a581487af9bDan Austin{
77ee226c05af9e0187098f43fb71465a581487af9bDan Austin  return (locale_t)0;
78ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
79ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif // !defined(_AIX71)
80ee226c05af9e0187098f43fb71465a581487af9bDan Austin
81ee226c05af9e0187098f43fb71465a581487af9bDan Austin#ifdef __cplusplus
82ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
83ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif
84ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif // defined(_AIX)
85ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif // _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
86