~louis/ubuntu/trusty/clamav/lp799623_fix_logrotate

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/Support/regex2.h

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-03-12 11:30:04 UTC
  • mfrom: (0.41.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100312113004-b0fop4bkycszdd0z
Tags: 0.96~rc1+dfsg-0ubuntu1
* New upstream RC - FFE (LP: #537636):
  - Add OfficialDatabaseOnly option to clamav-base.postinst.in
  - Add LocalSocketGroup option to clamav-base.postinst.in
  - Add LocalSocketMode option to clamav-base.postinst.in
  - Add CrossFilesystems option to clamav-base.postinst.in
  - Add ClamukoScannerCount option to clamav-base.postinst.in
  - Add BytecodeSecurity opiton to clamav-base.postinst.in
  - Add DetectionStatsHostID option to clamav-freshclam.postinst.in
  - Add Bytecode option to clamav-freshclam.postinst.in
  - Add MilterSocketGroup option to clamav-milter.postinst.in
  - Add MilterSocketMode option to clamav-milter.postinst.in
  - Add ReportHostname option to clamav-milter.postinst.in
  - Bump libclamav SO version to 6.1.0 in libclamav6.install
  - Drop clamdmon from clamav.examples (no longer shipped by upstream)
  - Drop libclamav.a from libclamav-dev.install (not built by upstream)
  - Update SO version for lintian override for libclamav6
  - Add new Bytecode Testing Tool, usr/bin/clambc, to clamav.install
  - Add build-depends on python and python-setuptools for new test suite
  - Update debian/copyright for the embedded copy of llvm (using the system
    llvm is not currently feasible)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*-
 
2
 * This code is derived from OpenBSD's libc/regex, original license follows:
 
3
 *
 
4
 * Copyright (c) 1992, 1993, 1994 Henry Spencer.
 
5
 * Copyright (c) 1992, 1993, 1994
 
6
 *      The Regents of the University of California.  All rights reserved.
 
7
 *
 
8
 * This code is derived from software contributed to Berkeley by
 
9
 * Henry Spencer.
 
10
 *
 
11
 * Redistribution and use in source and binary forms, with or without
 
12
 * modification, are permitted provided that the following conditions
 
13
 * are met:
 
14
 * 1. Redistributions of source code must retain the above copyright
 
15
 *    notice, this list of conditions and the following disclaimer.
 
16
 * 2. Redistributions in binary form must reproduce the above copyright
 
17
 *    notice, this list of conditions and the following disclaimer in the
 
18
 *    documentation and/or other materials provided with the distribution.
 
19
 * 3. Neither the name of the University nor the names of its contributors
 
20
 *    may be used to endorse or promote products derived from this software
 
21
 *    without specific prior written permission.
 
22
 *
 
23
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
24
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
25
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
26
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
27
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
28
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
29
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
30
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
31
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
32
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
33
 * SUCH DAMAGE.
 
34
 *
 
35
 *      @(#)regex2.h    8.4 (Berkeley) 3/20/94
 
36
 */
 
37
 
 
38
/*
 
39
 * internals of regex_t
 
40
 */
 
41
#define MAGIC1  ((('r'^0200)<<8) | 'e')
 
42
 
 
43
/*
 
44
 * The internal representation is a *strip*, a sequence of
 
45
 * operators ending with an endmarker.  (Some terminology etc. is a
 
46
 * historical relic of earlier versions which used multiple strips.)
 
47
 * Certain oddities in the representation are there to permit running
 
48
 * the machinery backwards; in particular, any deviation from sequential
 
49
 * flow must be marked at both its source and its destination.  Some
 
50
 * fine points:
 
51
 *
 
52
 * - OPLUS_ and O_PLUS are *inside* the loop they create.
 
53
 * - OQUEST_ and O_QUEST are *outside* the bypass they create.
 
54
 * - OCH_ and O_CH are *outside* the multi-way branch they create, while
 
55
 *   OOR1 and OOR2 are respectively the end and the beginning of one of
 
56
 *   the branches.  Note that there is an implicit OOR2 following OCH_
 
57
 *   and an implicit OOR1 preceding O_CH.
 
58
 *
 
59
 * In state representations, an operator's bit is on to signify a state
 
60
 * immediately *preceding* "execution" of that operator.
 
61
 */
 
62
typedef unsigned long sop;      /* strip operator */
 
63
typedef long sopno;
 
64
#define OPRMASK 0xf8000000LU
 
65
#define OPDMASK 0x07ffffffLU
 
66
#define OPSHIFT ((unsigned)27)
 
67
#define OP(n)   ((n)&OPRMASK)
 
68
#define OPND(n) ((n)&OPDMASK)
 
69
#define SOP(op, opnd)   ((op)|(opnd))
 
70
/* operators                       meaning      operand                 */
 
71
/*                                              (back, fwd are offsets) */
 
72
#define OEND    (1LU<<OPSHIFT)  /* endmarker    -                       */
 
73
#define OCHAR   (2LU<<OPSHIFT)  /* character    unsigned char           */
 
74
#define OBOL    (3LU<<OPSHIFT)  /* left anchor  -                       */
 
75
#define OEOL    (4LU<<OPSHIFT)  /* right anchor -                       */
 
76
#define OANY    (5LU<<OPSHIFT)  /* .            -                       */
 
77
#define OANYOF  (6LU<<OPSHIFT)  /* [...]        set number              */
 
78
#define OBACK_  (7LU<<OPSHIFT)  /* begin \d     paren number            */
 
79
#define O_BACK  (8LU<<OPSHIFT)  /* end \d       paren number            */
 
80
#define OPLUS_  (9LU<<OPSHIFT)  /* + prefix     fwd to suffix           */
 
81
#define O_PLUS  (10LU<<OPSHIFT) /* + suffix     back to prefix          */
 
82
#define OQUEST_ (11LU<<OPSHIFT) /* ? prefix     fwd to suffix           */
 
83
#define O_QUEST (12LU<<OPSHIFT) /* ? suffix     back to prefix          */
 
84
#define OLPAREN (13LU<<OPSHIFT) /* (            fwd to )                */
 
85
#define ORPAREN (14LU<<OPSHIFT) /* )            back to (               */
 
86
#define OCH_    (15LU<<OPSHIFT) /* begin choice fwd to OOR2             */
 
87
#define OOR1    (16LU<<OPSHIFT) /* | pt. 1      back to OOR1 or OCH_    */
 
88
#define OOR2    (17LU<<OPSHIFT) /* | pt. 2      fwd to OOR2 or O_CH     */
 
89
#define O_CH    (18LU<<OPSHIFT) /* end choice   back to OOR1            */
 
90
#define OBOW    (19LU<<OPSHIFT) /* begin word   -                       */
 
91
#define OEOW    (20LU<<OPSHIFT) /* end word     -                       */
 
92
 
 
93
/*
 
94
 * Structure for [] character-set representation.  Character sets are
 
95
 * done as bit vectors, grouped 8 to a byte vector for compactness.
 
96
 * The individual set therefore has both a pointer to the byte vector
 
97
 * and a mask to pick out the relevant bit of each byte.  A hash code
 
98
 * simplifies testing whether two sets could be identical.
 
99
 *
 
100
 * This will get trickier for multicharacter collating elements.  As
 
101
 * preliminary hooks for dealing with such things, we also carry along
 
102
 * a string of multi-character elements, and decide the size of the
 
103
 * vectors at run time.
 
104
 */
 
105
typedef struct {
 
106
        uch *ptr;               /* -> uch [csetsize] */
 
107
        uch mask;               /* bit within array */
 
108
        uch hash;               /* hash code */
 
109
        size_t smultis;
 
110
        char *multis;           /* -> char[smulti]  ab\0cd\0ef\0\0 */
 
111
} cset;
 
112
/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */
 
113
#define CHadd(cs, c)    ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))
 
114
#define CHsub(cs, c)    ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))
 
115
#define CHIN(cs, c)     ((cs)->ptr[(uch)(c)] & (cs)->mask)
 
116
#define MCadd(p, cs, cp)        mcadd(p, cs, cp)        /* llvm_regcomp() internal fns */
 
117
#define MCsub(p, cs, cp)        mcsub(p, cs, cp)
 
118
#define MCin(p, cs, cp) mcin(p, cs, cp)
 
119
 
 
120
/* stuff for character categories */
 
121
typedef unsigned char cat_t;
 
122
 
 
123
/*
 
124
 * main compiled-expression structure
 
125
 */
 
126
struct re_guts {
 
127
        int magic;
 
128
#               define  MAGIC2  ((('R'^0200)<<8)|'E')
 
129
        sop *strip;             /* malloced area for strip */
 
130
        int csetsize;           /* number of bits in a cset vector */
 
131
        int ncsets;             /* number of csets in use */
 
132
        cset *sets;             /* -> cset [ncsets] */
 
133
        uch *setbits;           /* -> uch[csetsize][ncsets/CHAR_BIT] */
 
134
        int cflags;             /* copy of llvm_regcomp() cflags argument */
 
135
        sopno nstates;          /* = number of sops */
 
136
        sopno firststate;       /* the initial OEND (normally 0) */
 
137
        sopno laststate;        /* the final OEND */
 
138
        int iflags;             /* internal flags */
 
139
#               define  USEBOL  01      /* used ^ */
 
140
#               define  USEEOL  02      /* used $ */
 
141
#               define  REGEX_BAD       04      /* something wrong */
 
142
        int nbol;               /* number of ^ used */
 
143
        int neol;               /* number of $ used */
 
144
        int ncategories;        /* how many character categories */
 
145
        cat_t *categories;      /* ->catspace[-CHAR_MIN] */
 
146
        char *must;             /* match must contain this string */
 
147
        int mlen;               /* length of must */
 
148
        size_t nsub;            /* copy of re_nsub */
 
149
        int backrefs;           /* does it use back references? */
 
150
        sopno nplus;            /* how deep does it nest +s? */
 
151
        /* catspace must be last */
 
152
        cat_t catspace[1];      /* actually [NC] */
 
153
};
 
154
 
 
155
/* misc utilities */
 
156
#define OUT     (CHAR_MAX+1)    /* a non-character value */
 
157
#define ISWORD(c)       (isalnum(c&0xff) || (c) == '_')