86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
// -*- C++ -*-
 | 
						|
//===------------------- support/ibm/locale_mgmt_aix.h --------------------===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is dual licensed under the MIT and the University of Illinois Open
 | 
						|
// Source Licenses. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
 | 
						|
#define _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
 | 
						|
 | 
						|
#if defined(_AIX)
 | 
						|
#include "cstdlib"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#if !defined(_AIX71)
 | 
						|
// AIX 7.1 and higher has these definitions.  Definitions and stubs
 | 
						|
// are provied here as a temporary workaround on AIX 6.1.
 | 
						|
 | 
						|
#define LC_COLLATE_MASK         1
 | 
						|
#define LC_CTYPE_MASK           2
 | 
						|
#define LC_MESSAGES_MASK        4
 | 
						|
#define LC_MONETARY_MASK        8
 | 
						|
#define LC_NUMERIC_MASK         16
 | 
						|
#define LC_TIME_MASK            32
 | 
						|
#define LC_ALL_MASK             (LC_COLLATE_MASK | LC_CTYPE_MASK | \
 | 
						|
                                 LC_MESSAGES_MASK | LC_MONETARY_MASK |\
 | 
						|
                                 LC_NUMERIC_MASK | LC_TIME_MASK)
 | 
						|
 | 
						|
typedef void* locale_t;
 | 
						|
 | 
						|
// The following are stubs.  They are not supported on AIX 6.1.
 | 
						|
static inline
 | 
						|
locale_t newlocale(int category_mask, const char *locale, locale_t base)
 | 
						|
{
 | 
						|
  _LC_locale_t *newloc, *loc;
 | 
						|
  if ((loc = (_LC_locale_t *)__xopen_locale(locale)) == NULL)
 | 
						|
  {
 | 
						|
    errno = EINVAL;
 | 
						|
    return (locale_t)0;
 | 
						|
  }
 | 
						|
  if ((newloc = (_LC_locale_t *)calloc(1, sizeof(_LC_locale_t))) == NULL)
 | 
						|
  {
 | 
						|
    errno = ENOMEM;
 | 
						|
    return (locale_t)0;
 | 
						|
  }
 | 
						|
  if (!base)
 | 
						|
    base = (_LC_locale_t *)__xopen_locale("C");
 | 
						|
  memcpy(newloc, base, sizeof (_LC_locale_t));
 | 
						|
  if (category_mask & LC_COLLATE_MASK)
 | 
						|
    newloc->lc_collate = loc->lc_collate;
 | 
						|
  if (category_mask & LC_CTYPE_MASK)
 | 
						|
    newloc->lc_ctype = loc->lc_ctype;
 | 
						|
  //if (category_mask & LC_MESSAGES_MASK)
 | 
						|
  //  newloc->lc_messages = loc->lc_messages;
 | 
						|
  if (category_mask & LC_MONETARY_MASK)
 | 
						|
    newloc->lc_monetary = loc->lc_monetary;
 | 
						|
  if (category_mask & LC_TIME_MASK)
 | 
						|
    newloc->lc_time = loc->lc_time;
 | 
						|
  if (category_mask & LC_NUMERIC_MASK)
 | 
						|
    newloc->lc_numeric = loc->lc_numeric;
 | 
						|
  return (locale_t)newloc;
 | 
						|
}
 | 
						|
static inline
 | 
						|
void freelocale(locale_t locobj)
 | 
						|
{
 | 
						|
  free(locobj);
 | 
						|
}
 | 
						|
static inline
 | 
						|
locale_t uselocale(locale_t newloc)
 | 
						|
{
 | 
						|
  return (locale_t)0;
 | 
						|
}
 | 
						|
#endif // !defined(_AIX71)
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
#endif // defined(_AIX)
 | 
						|
#endif // _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_AIX_H
 |