LCOV - code coverage report
Current view: top level - usr/include - ctype.h (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 0 1 0.0 %
Date: 2015-10-10 Functions: 0 0 -

          Line data    Source code
       1             : /* Copyright (C) 1991-2014 Free Software Foundation, Inc.
       2             :    This file is part of the GNU C Library.
       3             : 
       4             :    The GNU C Library is free software; you can redistribute it and/or
       5             :    modify it under the terms of the GNU Lesser General Public
       6             :    License as published by the Free Software Foundation; either
       7             :    version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             :    The GNU C Library is distributed in the hope that it will be useful,
      10             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             :    Lesser General Public License for more details.
      13             : 
      14             :    You should have received a copy of the GNU Lesser General Public
      15             :    License along with the GNU C Library; if not, see
      16             :    <http://www.gnu.org/licenses/>.  */
      17             : 
      18             : /*
      19             :  *      ISO C99 Standard 7.4: Character handling        <ctype.h>
      20             :  */
      21             : 
      22             : #ifndef _CTYPE_H
      23             : #define _CTYPE_H        1
      24             : 
      25             : #include <features.h>
      26             : #include <bits/types.h>
      27             : 
      28             : __BEGIN_DECLS
      29             : 
      30             : #ifndef _ISbit
      31             : /* These are all the characteristics of characters.
      32             :    If there get to be more than 16 distinct characteristics,
      33             :    many things must be changed that use `unsigned short int's.
      34             : 
      35             :    The characteristics are stored always in network byte order (big
      36             :    endian).  We define the bit value interpretations here dependent on the
      37             :    machine's byte order.  */
      38             : 
      39             : # include <endian.h>
      40             : # if __BYTE_ORDER == __BIG_ENDIAN
      41             : #  define _ISbit(bit)   (1 << (bit))
      42             : # else /* __BYTE_ORDER == __LITTLE_ENDIAN */
      43             : #  define _ISbit(bit)   ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
      44             : # endif
      45             : 
      46             : enum
      47             : {
      48             :   _ISupper = _ISbit (0),        /* UPPERCASE.  */
      49             :   _ISlower = _ISbit (1),        /* lowercase.  */
      50             :   _ISalpha = _ISbit (2),        /* Alphabetic.  */
      51             :   _ISdigit = _ISbit (3),        /* Numeric.  */
      52             :   _ISxdigit = _ISbit (4),       /* Hexadecimal numeric.  */
      53             :   _ISspace = _ISbit (5),        /* Whitespace.  */
      54             :   _ISprint = _ISbit (6),        /* Printing.  */
      55             :   _ISgraph = _ISbit (7),        /* Graphical.  */
      56             :   _ISblank = _ISbit (8),        /* Blank (usually SPC and TAB).  */
      57             :   _IScntrl = _ISbit (9),        /* Control character.  */
      58             :   _ISpunct = _ISbit (10),       /* Punctuation.  */
      59             :   _ISalnum = _ISbit (11)        /* Alphanumeric.  */
      60             : };
      61             : #endif /* ! _ISbit  */
      62             : 
      63             : /* These are defined in ctype-info.c.
      64             :    The declarations here must match those in localeinfo.h.
      65             : 
      66             :    In the thread-specific locale model (see `uselocale' in <locale.h>)
      67             :    we cannot use global variables for these as was done in the past.
      68             :    Instead, the following accessor functions return the address of
      69             :    each variable, which is local to the current thread if multithreaded.
      70             : 
      71             :    These point into arrays of 384, so they can be indexed by any `unsigned
      72             :    char' value [0,255]; by EOF (-1); or by any `signed char' value
      73             :    [-128,-1).  ISO C requires that the ctype functions work for `unsigned
      74             :    char' values and for EOF; we also support negative `signed char' values
      75             :    for broken old programs.  The case conversion arrays are of `int's
      76             :    rather than `unsigned char's because tolower (EOF) must be EOF, which
      77             :    doesn't fit into an `unsigned char'.  But today more important is that
      78             :    the arrays are also used for multi-byte character sets.  */
      79             : extern const unsigned short int **__ctype_b_loc (void)
      80             :      __THROW __attribute__ ((__const__));
      81             : extern const __int32_t **__ctype_tolower_loc (void)
      82             :      __THROW __attribute__ ((__const__));
      83             : extern const __int32_t **__ctype_toupper_loc (void)
      84             :      __THROW __attribute__ ((__const__));
      85             : 
      86             : 
      87             : #ifndef __cplusplus
      88             : # define __isctype(c, type) \
      89             :   ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
      90             : #elif defined __USE_EXTERN_INLINES
      91             : # define __isctype_f(type) \
      92             :   __extern_inline int                                                         \
      93             :   is##type (int __c) __THROW                                                  \
      94             :   {                                                                           \
      95             :     return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS##type; \
      96             :   }
      97             : #endif
      98             : 
      99             : #define __isascii(c)    (((c) & ~0x7f) == 0)        /* If C is a 7 bit value.  */
     100             : #define __toascii(c)    ((c) & 0x7f)                /* Mask off high bits.  */
     101             : 
     102             : #define __exctype(name) extern int name (int) __THROW
     103             : 
     104             : __BEGIN_NAMESPACE_STD
     105             : 
     106             : /* The following names are all functions:
     107             :      int isCHARACTERISTIC(int c);
     108             :    which return nonzero iff C has CHARACTERISTIC.
     109             :    For the meaning of the characteristic names, see the `enum' above.  */
     110             : __exctype (isalnum);
     111             : __exctype (isalpha);
     112             : __exctype (iscntrl);
     113             : __exctype (isdigit);
     114             : __exctype (islower);
     115             : __exctype (isgraph);
     116             : __exctype (isprint);
     117             : __exctype (ispunct);
     118             : __exctype (isspace);
     119             : __exctype (isupper);
     120             : __exctype (isxdigit);
     121             : 
     122             : 
     123             : /* Return the lowercase version of C.  */
     124             : extern int tolower (int __c) __THROW;
     125             : 
     126             : /* Return the uppercase version of C.  */
     127             : extern int toupper (int __c) __THROW;
     128             : 
     129             : __END_NAMESPACE_STD
     130             : 
     131             : 
     132             : /* ISO C99 introduced one new function.  */
     133             : #ifdef  __USE_ISOC99
     134             : __BEGIN_NAMESPACE_C99
     135             : 
     136             : __exctype (isblank);
     137             : 
     138             : __END_NAMESPACE_C99
     139             : #endif
     140             : 
     141             : #ifdef __USE_GNU
     142             : /* Test C for a set of character classes according to MASK.  */
     143             : extern int isctype (int __c, int __mask) __THROW;
     144             : #endif
     145             : 
     146             : #if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
     147             : 
     148             : /* Return nonzero iff C is in the ASCII set
     149             :    (i.e., is no more than 7 bits wide).  */
     150             : extern int isascii (int __c) __THROW;
     151             : 
     152             : /* Return the part of C that is in the ASCII set
     153             :    (i.e., the low-order 7 bits of C).  */
     154             : extern int toascii (int __c) __THROW;
     155             : 
     156             : /* These are the same as `toupper' and `tolower' except that they do not
     157             :    check the argument for being in the range of a `char'.  */
     158             : __exctype (_toupper);
     159             : __exctype (_tolower);
     160             : #endif /* Use SVID or use misc.  */
     161             : 
     162             : /* This code is needed for the optimized mapping functions.  */
     163             : #define __tobody(c, f, a, args) \
     164             :   (__extension__                                                              \
     165             :    ({ int __res;                                                              \
     166             :       if (sizeof (c) > 1)                                                  \
     167             :         {                                                                     \
     168             :           if (__builtin_constant_p (c))                                       \
     169             :             {                                                                 \
     170             :               int __c = (c);                                                  \
     171             :               __res = __c < -128 || __c > 255 ? __c : (a)[__c];                 \
     172             :             }                                                                 \
     173             :           else                                                                \
     174             :             __res = f args;                                                   \
     175             :         }                                                                     \
     176             :       else                                                                    \
     177             :         __res = (a)[(int) (c)];                                               \
     178             :       __res; }))
     179             : 
     180             : #if !defined __NO_CTYPE
     181             : # ifdef __isctype_f
     182             : __isctype_f (alnum)
     183             : __isctype_f (alpha)
     184             : __isctype_f (cntrl)
     185             : __isctype_f (digit)
     186             : __isctype_f (lower)
     187             : __isctype_f (graph)
     188             : __isctype_f (print)
     189             : __isctype_f (punct)
     190             : __isctype_f (space)
     191             : __isctype_f (upper)
     192             : __isctype_f (xdigit)
     193             : #  ifdef __USE_ISOC99
     194             : __isctype_f (blank)
     195             : #  endif
     196             : # elif defined __isctype
     197             : # define isalnum(c)     __isctype((c), _ISalnum)
     198             : # define isalpha(c)     __isctype((c), _ISalpha)
     199             : # define iscntrl(c)     __isctype((c), _IScntrl)
     200             : # define isdigit(c)     __isctype((c), _ISdigit)
     201             : # define islower(c)     __isctype((c), _ISlower)
     202             : # define isgraph(c)     __isctype((c), _ISgraph)
     203             : # define isprint(c)     __isctype((c), _ISprint)
     204             : # define ispunct(c)     __isctype((c), _ISpunct)
     205             : # define isspace(c)     __isctype((c), _ISspace)
     206             : # define isupper(c)     __isctype((c), _ISupper)
     207             : # define isxdigit(c)    __isctype((c), _ISxdigit)
     208             : #  ifdef __USE_ISOC99
     209             : #   define isblank(c)   __isctype((c), _ISblank)
     210             : #  endif
     211             : # endif
     212             : 
     213             : # ifdef __USE_EXTERN_INLINES
     214             : __extern_inline int
     215             : __NTH (tolower (int __c))
     216             : {
     217           0 :   return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
     218             : }
     219             : 
     220             : __extern_inline int
     221             : __NTH (toupper (int __c))
     222             : {
     223             :   return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c;
     224             : }
     225             : # endif
     226             : 
     227             : # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
     228             : #  define tolower(c)    __tobody (c, tolower, *__ctype_tolower_loc (), (c))
     229             : #  define toupper(c)    __tobody (c, toupper, *__ctype_toupper_loc (), (c))
     230             : # endif /* Optimizing gcc */
     231             : 
     232             : # if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
     233             : #  define isascii(c)    __isascii (c)
     234             : #  define toascii(c)    __toascii (c)
     235             : 
     236             : #  define _tolower(c)   ((int) (*__ctype_tolower_loc ())[(int) (c)])
     237             : #  define _toupper(c)   ((int) (*__ctype_toupper_loc ())[(int) (c)])
     238             : # endif
     239             : 
     240             : #endif /* Not __NO_CTYPE.  */
     241             : 
     242             : 
     243             : #ifdef __USE_XOPEN2K8
     244             : /* The concept of one static locale per category is not very well
     245             :    thought out.  Many applications will need to process its data using
     246             :    information from several different locales.  Another application is
     247             :    the implementation of the internationalization handling in the
     248             :    upcoming ISO C++ standard library.  To support this another set of
     249             :    the functions using locale data exist which have an additional
     250             :    argument.
     251             : 
     252             :    Attention: all these functions are *not* standardized in any form.
     253             :    This is a proof-of-concept implementation.  */
     254             : 
     255             : /* Structure for reentrant locale using functions.  This is an
     256             :    (almost) opaque type for the user level programs.  */
     257             : # include <xlocale.h>
     258             : 
     259             : /* These definitions are similar to the ones above but all functions
     260             :    take as an argument a handle for the locale which shall be used.  */
     261             : #  define __isctype_l(c, type, locale) \
     262             :   ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
     263             : 
     264             : # define __exctype_l(name)                                                    \
     265             :   extern int name (int, __locale_t) __THROW
     266             : 
     267             : /* The following names are all functions:
     268             :      int isCHARACTERISTIC(int c, locale_t *locale);
     269             :    which return nonzero iff C has CHARACTERISTIC.
     270             :    For the meaning of the characteristic names, see the `enum' above.  */
     271             : __exctype_l (isalnum_l);
     272             : __exctype_l (isalpha_l);
     273             : __exctype_l (iscntrl_l);
     274             : __exctype_l (isdigit_l);
     275             : __exctype_l (islower_l);
     276             : __exctype_l (isgraph_l);
     277             : __exctype_l (isprint_l);
     278             : __exctype_l (ispunct_l);
     279             : __exctype_l (isspace_l);
     280             : __exctype_l (isupper_l);
     281             : __exctype_l (isxdigit_l);
     282             : 
     283             : __exctype_l (isblank_l);
     284             : 
     285             : 
     286             : /* Return the lowercase version of C in locale L.  */
     287             : extern int __tolower_l (int __c, __locale_t __l) __THROW;
     288             : extern int tolower_l (int __c, __locale_t __l) __THROW;
     289             : 
     290             : /* Return the uppercase version of C.  */
     291             : extern int __toupper_l (int __c, __locale_t __l) __THROW;
     292             : extern int toupper_l (int __c, __locale_t __l) __THROW;
     293             : 
     294             : # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
     295             : #  define __tolower_l(c, locale) \
     296             :   __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
     297             : #  define __toupper_l(c, locale) \
     298             :   __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
     299             : #  define tolower_l(c, locale)  __tolower_l ((c), (locale))
     300             : #  define toupper_l(c, locale)  __toupper_l ((c), (locale))
     301             : # endif /* Optimizing gcc */
     302             : 
     303             : 
     304             : # ifndef __NO_CTYPE
     305             : #  define __isalnum_l(c,l)      __isctype_l((c), _ISalnum, (l))
     306             : #  define __isalpha_l(c,l)      __isctype_l((c), _ISalpha, (l))
     307             : #  define __iscntrl_l(c,l)      __isctype_l((c), _IScntrl, (l))
     308             : #  define __isdigit_l(c,l)      __isctype_l((c), _ISdigit, (l))
     309             : #  define __islower_l(c,l)      __isctype_l((c), _ISlower, (l))
     310             : #  define __isgraph_l(c,l)      __isctype_l((c), _ISgraph, (l))
     311             : #  define __isprint_l(c,l)      __isctype_l((c), _ISprint, (l))
     312             : #  define __ispunct_l(c,l)      __isctype_l((c), _ISpunct, (l))
     313             : #  define __isspace_l(c,l)      __isctype_l((c), _ISspace, (l))
     314             : #  define __isupper_l(c,l)      __isctype_l((c), _ISupper, (l))
     315             : #  define __isxdigit_l(c,l)     __isctype_l((c), _ISxdigit, (l))
     316             : 
     317             : #  define __isblank_l(c,l)      __isctype_l((c), _ISblank, (l))
     318             : 
     319             : #  if defined __USE_SVID || defined __USE_MISC
     320             : #   define __isascii_l(c,l)     ((l), __isascii (c))
     321             : #   define __toascii_l(c,l)     ((l), __toascii (c))
     322             : #  endif
     323             : 
     324             : #  define isalnum_l(c,l)        __isalnum_l ((c), (l))
     325             : #  define isalpha_l(c,l)        __isalpha_l ((c), (l))
     326             : #  define iscntrl_l(c,l)        __iscntrl_l ((c), (l))
     327             : #  define isdigit_l(c,l)        __isdigit_l ((c), (l))
     328             : #  define islower_l(c,l)        __islower_l ((c), (l))
     329             : #  define isgraph_l(c,l)        __isgraph_l ((c), (l))
     330             : #  define isprint_l(c,l)        __isprint_l ((c), (l))
     331             : #  define ispunct_l(c,l)        __ispunct_l ((c), (l))
     332             : #  define isspace_l(c,l)        __isspace_l ((c), (l))
     333             : #  define isupper_l(c,l)        __isupper_l ((c), (l))
     334             : #  define isxdigit_l(c,l)       __isxdigit_l ((c), (l))
     335             : 
     336             : #  define isblank_l(c,l)        __isblank_l ((c), (l))
     337             : 
     338             : #  if defined __USE_SVID || defined __USE_MISC
     339             : #   define isascii_l(c,l)       __isascii_l ((c), (l))
     340             : #   define toascii_l(c,l)       __toascii_l ((c), (l))
     341             : #  endif
     342             : 
     343             : # endif /* Not __NO_CTYPE.  */
     344             : 
     345             : #endif /* Use POSIX 2008.  */
     346             : 
     347             : __END_DECLS
     348             : 
     349             : #endif /* ctype.h  */

Generated by: LCOV version 1.10