LCOV - code coverage report
Current view: top level - usr/include - runetype.h (source / functions) Hit Total Coverage
Test: cov.info Lines: 4 6 66.7 %
Date: 2015-08-15 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*-
       2             :  * Copyright (c) 1993
       3             :  *      The Regents of the University of California.  All rights reserved.
       4             :  *
       5             :  * This code is derived from software contributed to Berkeley by
       6             :  * Paul Borman at Krystal Technologies.
       7             :  *
       8             :  * Redistribution and use in source and binary forms, with or without
       9             :  * modification, are permitted provided that the following conditions
      10             :  * are met:
      11             :  * 1. Redistributions of source code must retain the above copyright
      12             :  *    notice, this list of conditions and the following disclaimer.
      13             :  * 2. Redistributions in binary form must reproduce the above copyright
      14             :  *    notice, this list of conditions and the following disclaimer in the
      15             :  *    documentation and/or other materials provided with the distribution.
      16             :  * 3. Neither the name of the University nor the names of its contributors
      17             :  *    may be used to endorse or promote products derived from this software
      18             :  *    without specific prior written permission.
      19             :  *
      20             :  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      21             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      22             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      23             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      24             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      25             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      26             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      27             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      28             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      29             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      30             :  * SUCH DAMAGE.
      31             :  *
      32             :  *      @(#)runetype.h  8.1 (Berkeley) 6/2/93
      33             :  * $FreeBSD: head/include/runetype.h 232620 2012-03-06 20:15:23Z dim $
      34             :  */
      35             : 
      36             : #ifndef _RUNETYPE_H_
      37             : #define _RUNETYPE_H_
      38             : 
      39             : #include <sys/cdefs.h>
      40             : #include <sys/_types.h>
      41             : 
      42             : #define _CACHED_RUNES   (1 <<8 )  /* Must be a power of 2 */
      43             : #define _CRMASK         (~(_CACHED_RUNES - 1))
      44             : 
      45             : /*
      46             :  * The lower 8 bits of runetype[] contain the digit value of the rune.
      47             :  */
      48             : typedef struct {
      49             :         __rune_t        __min;          /* First rune of the range */
      50             :         __rune_t        __max;          /* Last rune (inclusive) of the range */
      51             :         __rune_t        __map;          /* What first maps to in maps */
      52             :         unsigned long   *__types;       /* Array of types in range */
      53             : } _RuneEntry;
      54             : 
      55             : typedef struct {
      56             :         int             __nranges;      /* Number of ranges stored */
      57             :         _RuneEntry      *__ranges;      /* Pointer to the ranges */
      58             : } _RuneRange;
      59             : 
      60             : typedef struct {
      61             :         char            __magic[8];     /* Magic saying what version we are */
      62             :         char            __encoding[32]; /* ASCII name of this encoding */
      63             : 
      64             :         __rune_t        (*__sgetrune)(const char *, __size_t, char const **);
      65             :         int             (*__sputrune)(__rune_t, char *, __size_t, char **);
      66             :         __rune_t        __invalid_rune;
      67             : 
      68             :         unsigned long   __runetype[_CACHED_RUNES];
      69             :         __rune_t        __maplower[_CACHED_RUNES];
      70             :         __rune_t        __mapupper[_CACHED_RUNES];
      71             : 
      72             :         /*
      73             :          * The following are to deal with Runes larger than _CACHED_RUNES - 1.
      74             :          * Their data is actually contiguous with this structure so as to make
      75             :          * it easier to read/write from/to disk.
      76             :          */
      77             :         _RuneRange      __runetype_ext;
      78             :         _RuneRange      __maplower_ext;
      79             :         _RuneRange      __mapupper_ext;
      80             : 
      81             :         void            *__variable;    /* Data which depends on the encoding */
      82             :         int             __variable_len; /* how long that data is */
      83             : } _RuneLocale;
      84             : 
      85             : #define _RUNE_MAGIC_1   "RuneMagi"    /* Indicates version 0 of RuneLocale */
      86             : __BEGIN_DECLS
      87             : extern const _RuneLocale _DefaultRuneLocale;
      88             : extern const _RuneLocale *_CurrentRuneLocale;
      89             : #if defined(__NO_TLS) || defined(__RUNETYPE_INTERNAL)
      90             : extern const _RuneLocale *__getCurrentRuneLocale(void);
      91             : #else
      92             : extern _Thread_local const _RuneLocale *_ThreadRuneLocale;
      93        6924 : static __inline const _RuneLocale *__getCurrentRuneLocale(void)
      94             : {
      95             : 
      96        6924 :         if (_ThreadRuneLocale) 
      97           0 :                 return _ThreadRuneLocale;
      98        6924 :         if (_CurrentRuneLocale) 
      99        6924 :                 return _CurrentRuneLocale;
     100           0 :         return &_DefaultRuneLocale;
     101             : }
     102             : #endif /* __NO_TLS || __RUNETYPE_INTERNAL */
     103             : #define _CurrentRuneLocale (__getCurrentRuneLocale())
     104             : __END_DECLS
     105             : 
     106             : #endif  /* !_RUNETYPE_H_ */

Generated by: LCOV version 1.10