mirror of
https://review.haiku-os.org/haiku
synced 2024-11-23 07:18:40 +01:00
d338200e2b
Implemented the missing POSIX functions in <locale.h>: newlocale, duplocale, uselocale, and freelocale, and also provided missing type definitions for <locale.h>. Implemented missing POSIX locale-based function variants. Modified LocaleBackend so that it could support thread-local locales. Some glibc-like locale-related variables supporting ctype and printf family of functions have also been updated to reflect the thread-local variables present in the latest glibc sources. As there have been some modifications to global symbols in libroot, libroot_stubs.c has been regenerated. Bug: #17168 Change-Id: Ibf296c58c47d42d1d1dfb2ce64042442f2679431 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5351 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
106 lines
2.7 KiB
C
106 lines
2.7 KiB
C
/*
|
|
* Copyright 2003-2012 Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _CTYPE_H
|
|
#define _CTYPE_H
|
|
|
|
|
|
#include <locale_t.h>
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
int isalnum(int);
|
|
int isalpha(int);
|
|
int isascii(int);
|
|
int isblank(int);
|
|
int iscntrl(int);
|
|
int isdigit(int);
|
|
int isgraph(int);
|
|
int islower(int);
|
|
int isprint(int);
|
|
int ispunct(int);
|
|
int isspace(int);
|
|
int isupper(int);
|
|
int isxdigit(int);
|
|
int toascii(int);
|
|
int tolower(int);
|
|
int toupper(int);
|
|
|
|
|
|
int isalnum_l(int, locale_t);
|
|
int isalpha_l(int, locale_t);
|
|
int isblank_l(int, locale_t);
|
|
int iscntrl_l(int, locale_t);
|
|
int isdigit_l(int, locale_t);
|
|
int isgraph_l(int, locale_t);
|
|
int islower_l(int, locale_t);
|
|
int isprint_l(int, locale_t);
|
|
int ispunct_l(int, locale_t);
|
|
int isspace_l(int, locale_t);
|
|
int isupper_l(int, locale_t);
|
|
int isxdigit_l(int, locale_t);
|
|
int tolower_l(int, locale_t);
|
|
int toupper_l(int, locale_t);
|
|
|
|
enum {
|
|
_ISblank = 0x0001, /* blank */
|
|
_IScntrl = 0x0002, /* control */
|
|
_ISpunct = 0x0004, /* punctuation */
|
|
_ISalnum = 0x0008, /* alpha-numeric */
|
|
_ISupper = 0x0100, /* uppercase */
|
|
_ISlower = 0x0200, /* lowercase */
|
|
_ISalpha = 0x0400, /* alphabetic */
|
|
_ISdigit = 0x0800, /* digit */
|
|
_ISxdigit = 0x1000, /* hexadecimal digit */
|
|
_ISspace = 0x2000, /* white space */
|
|
_ISprint = 0x4000, /* printing */
|
|
_ISgraph = 0x8000 /* graphical */
|
|
};
|
|
|
|
/* Characteristics */
|
|
extern const unsigned short int *__ctype_b;
|
|
/* Case conversions */
|
|
extern const int *__ctype_tolower;
|
|
extern const int *__ctype_toupper;
|
|
|
|
extern const unsigned short int **__ctype_b_loc();
|
|
extern const int **__ctype_tolower_loc();
|
|
extern const int **__ctype_toupper_loc();
|
|
|
|
#define __isctype(c, type) \
|
|
((*__ctype_b_loc())[(int)(c)] & (unsigned short int)type)
|
|
|
|
#define tolower(c) ((int)(*__ctype_tolower_loc())[(int)(c)])
|
|
#define toupper(c) ((int)(*__ctype_toupper_loc())[(int)(c)])
|
|
|
|
#define isascii(c) (((c) & ~0x7f) == 0) /* ASCII characters have bit 8 cleared */
|
|
#define toascii(c) ((c) & 0x7f) /* Clear higher bits */
|
|
|
|
#define _tolower(c) tolower(c)
|
|
#define _toupper(c) toupper(c)
|
|
|
|
#define isalnum(c) __isctype((c), _ISalnum)
|
|
#define isalpha(c) __isctype((c), _ISalpha)
|
|
#define isblank(c) __isctype((c), _ISblank)
|
|
#define iscntrl(c) __isctype((c), _IScntrl)
|
|
#define isdigit(c) __isctype((c), _ISdigit)
|
|
#define islower(c) __isctype((c), _ISlower)
|
|
#define isgraph(c) __isctype((c), _ISgraph)
|
|
#define isprint(c) __isctype((c), _ISprint)
|
|
#define ispunct(c) __isctype((c), _ISpunct)
|
|
#define isspace(c) __isctype((c), _ISspace)
|
|
#define isupper(c) __isctype((c), _ISupper)
|
|
#define isxdigit(c) __isctype((c), _ISxdigit)
|
|
|
|
extern unsigned short int __ctype_mb_cur_max;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _CTYPE_H */
|