File: intrinsics.h

package info (click to toggle)
389-ds-base 2.3.1%2Bdfsg1-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 37,536 kB
  • sloc: ansic: 306,972; python: 96,937; cpp: 10,257; perl: 2,854; makefile: 2,046; sh: 925; yacc: 806; xml: 379; lex: 366; javascript: 148; java: 50
file content (86 lines) | stat: -rw-r--r-- 1,999 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/** BEGIN COPYRIGHT BLOCK
 * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
 * Copyright (C) 2005 Red Hat, Inc.
 * All rights reserved.
 *
 * License: GPL (version 3 or any later version).
 * See LICENSE for details.
 * END COPYRIGHT BLOCK **/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif


/* Header file used to declare functions which we beat on heavily as intrinsic */

#if defined(HPUX)
#define INLINE_DIRECTIVE __inline
#elif defined(LINUX)
#define INLINE_DIRECTIVE __inline__
#else
#define INLINE_DIRECTIVE
#endif

__attribute__((nonnull (1, 2))) INLINE_DIRECTIVE static int
strcmpi_fast(const char *dst, const char *src)
{
    int f, l;
    do {
        if (((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z'))
            f -= ('A' - 'a');
        if (((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z'))
            l -= ('A' - 'a');
    } while (f && (f == l));
    return (f - l);
}
#ifdef strcasecmp
#undef strcasecmp
#endif
#define strcasecmp(x, y) strcmpi_fast(x, y)
#ifdef strcmpi
#undef strcmpi
#endif
#define strcmpi(x, y) strcmpi_fast(x, y)

INLINE_DIRECTIVE static int
tolower_fast(int c)
{
    if ((c >= 'A') && (c <= 'Z'))
        c = c + ('a' - 'A');
    return c;
}
#ifdef tolower
#undef tolower
#endif
#define tolower(x) tolower_fast(x)

INLINE_DIRECTIVE static int
toupper_fast(int c)
{
    if ((c >= 'a') && (c <= 'z'))
        c = c - ('a' - 'A');
    return c;
}
#ifdef toupper
#undef toupper
#endif
#define toupper(x) toupper_fast(x)

__attribute__((nonnull (1, 2))) INLINE_DIRECTIVE static int
strncasecmp_fast(const char *dst, const char *src, int n)
{
    int f, l, x = 0;
    do {
        if (((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z'))
            f -= ('A' - 'a');
        if (((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z'))
            l -= ('A' - 'a');
    } while (f && (f == l) && ++x < n);
    return (f - l);
}

#ifdef strncasecmp
#undef strncasecmp
#endif
#define strncasecmp(x, y, z) strncasecmp_fast(x, y, z)