[Olsr-dev] [PATCH v1 1/1] android: remove regex code and update API level
Ferry Huberts
(spam-protected)
Mon Oct 15 16:55:58 CEST 2012
On 15-10-12 16:53, Hans of Guardian wrote:
>
> NAK. android-7 is still useful to us. Older devices and Android
> releases support adhoc mode better than newer ones, unfortunately.
Then please work with Henning in making the regex library a standalone
static library with it's own makefile.
>
> .hc
>
>
> On Oct 15, 2012, at 5:25 AM, Ferry Huberts wrote:
>
>> From: Ferry Huberts <(spam-protected)>
>>
>> Minimum API level now is 8 (Froyo)
>>
>> Signed-off-by: Ferry Huberts <(spam-protected)> ---
>> Makefile | 6 +- android/README | 5
>> +- android/regex.h | 105 ---- android/regex/COPYRIGHT |
>> 54 -- android/regex/NOTICE | 382 ------------
>> android/regex/WHATSNEW | 95 --- android/regex/cclass.h | 68
>> --- android/regex/cname.h | 139 ----- android/regex/engine.c
>> | 1021 ------------------------------- android/regex/regcomp.c |
>> 1517 ----------------------------------------------
>> android/regex/regerror.c | 130 ---- android/regex/regex2.h |
>> 157 ----- android/regex/regexec.c | 160 -----
>> android/regex/regfree.c | 71 --- android/regex/utils.h | 55
>> -- make/Makefile.android | 25 +- 16 files changed, 4
>> insertions(+), 3986 deletions(-) delete mode 100644
>> android/regex.h delete mode 100644 android/regex/COPYRIGHT delete
>> mode 100644 android/regex/NOTICE delete mode 100644
>> android/regex/WHATSNEW delete mode 100644 android/regex/cclass.h
>> delete mode 100644 android/regex/cname.h delete mode 100644
>> android/regex/engine.c delete mode 100644 android/regex/regcomp.c
>> delete mode 100644 android/regex/regerror.c delete mode 100644
>> android/regex/regex2.h delete mode 100644 android/regex/regexec.c
>> delete mode 100644 android/regex/regfree.c delete mode 100644
>> android/regex/utils.h
>>
>> diff --git a/Makefile b/Makefile index a5cb10c..ecb8764 100644 ---
>> a/Makefile +++ b/Makefile @@ -188,7 +188,6 @@ libs:
>>
>> libs_clean clean_libs: -for dir in $(SUBDIRS);do $(MAKECMD) -C
>> lib/$$dir LIBDIR=$(LIBDIR) clean;rm -f lib/$$dir/*.so
>> lib/$$dir/*.dll;done - -rm -f $(REGEX_OBJS)
>>
>> libs_install install_libs: @set -e;for dir in $(SUBDIRS);do
>> $(MAKECMD) -C lib/$$dir LIBDIR=$(LIBDIR) install;done @@ -301,10
>> +300,7 @@ mdns_uninstall: # no targets for mini: it's an example
>> plugin #
>>
>> -# nameserver uses regex, which was only recently added to Android.
>> On -# Android, $(REGEX_OBJS) will have all of the files needed, on
>> all -# other platforms, it'll be empty and therefore ignored.
>> -nameservice: $(REGEX_OBJS) +nameservice: @$(MAKECMD) -C
>> lib/nameservice clean @$(MAKECMD) -C lib/nameservice
>>
>> diff --git a/android/README b/android/README index 9f36257..10c26be
>> 100644 --- a/android/README +++ b/android/README @@ -1,8 +1,5 @@ -
>> This directory contains some Android specific code. (Mostly
>> dealing -with providing missing filesfrom Android NDK.) - - * regex
>> support was not added until NDK platform android-8 (v2.2) +with
>> providing missing files from Android NDK.)
>>
>>
>> Building olsrd for Android diff --git a/android/regex.h
>> b/android/regex.h deleted file mode 100644 index aec38e3..0000000
>> --- a/android/regex.h +++ /dev/null @@ -1,105 +0,0 @@ -/* $OpenBSD:
>> regex.h,v 1.6 2003/06/02 19:34:12 millert Exp $ */ -/* $NetBSD:
>> regex.h,v 1.4.6.1 1996/06/10 18:57:07 explorer Exp $ */ - -/*- - *
>> Copyright (c) 1992 Henry Spencer. - * Copyright (c) 1992, 1993 - *
>> The Regents of the University of California. All rights reserved.
>> - * - * This code is derived from software contributed to Berkeley
>> by - * Henry Spencer of the University of Toronto. - * - *
>> Redistribution and use in source and binary forms, with or without
>> - * modification, are permitted provided that the following
>> conditions - * are met: - * 1. Redistributions of source code must
>> retain the above copyright - * notice, this list of conditions
>> and the following disclaimer. - * 2. Redistributions in binary form
>> must reproduce the above copyright - * notice, this list of
>> conditions and the following disclaimer in the - * documentation
>> and/or other materials provided with the distribution. - * 3.
>> Neither the name of the University nor the names of its
>> contributors - * may be used to endorse or promote products
>> derived from this software - * without specific prior written
>> permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND
>> CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE
>> DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
>> LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regex.h 8.1 (Berkeley)
>> 6/2/93 - */ - -#ifndef _REGEX_H_ -#define _REGEX_H_ - -#include
>> <sys/cdefs.h> -#include <sys/types.h> - -/* types */ -typedef off_t
>> regoff_t; - -typedef struct { - int re_magic; - size_t re_nsub; /*
>> number of parenthesized subexpressions */ - const char *re_endp; /*
>> end pointer for REG_PEND */ - struct re_guts *re_g; /* none of your
>> business :-) */ -} regex_t; - -typedef struct { - regoff_t rm_so;
>> /* start of match */ - regoff_t rm_eo; /* end of match */ -}
>> regmatch_t; - -/* regcomp() flags */ -#define REG_BASIC 0000
>> -#define REG_EXTENDED 0001 -#define REG_ICASE 0002 -#define
>> REG_NOSUB 0004 -#define REG_NEWLINE 0010 -#define REG_NOSPEC 0020
>> -#define REG_PEND 0040 -#define REG_DUMP 0200 - -/* regerror()
>> flags */ -#define REG_NOMATCH 1 -#define REG_BADPAT 2 -#define
>> REG_ECOLLATE 3 -#define REG_ECTYPE 4 -#define REG_EESCAPE 5
>> -#define REG_ESUBREG 6 -#define REG_EBRACK 7 -#define REG_EPAREN
>> 8 -#define REG_EBRACE 9 -#define REG_BADBR 10 -#define REG_ERANGE
>> 11 -#define REG_ESPACE 12 -#define REG_BADRPT 13 -#define REG_EMPTY
>> 14 -#define REG_ASSERT 15 -#define REG_INVARG 16 -#define REG_ATOI
>> 255 /* convert name to number (!) */ -#define REG_ITOA 0400 /*
>> convert number to name (!) */ - -/* regexec() flags */ -#define
>> REG_NOTBOL 00001 -#define REG_NOTEOL 00002 -#define REG_STARTEND
>> 00004 -#define REG_TRACE 00400 /* tracing of execution */ -#define
>> REG_LARGE 01000 /* force large representation */ -#define REG_BACKR
>> 02000 /* force use of backref code */ - -__BEGIN_DECLS -int
>> regcomp(regex_t *, const char *, int); -size_t regerror(int, const
>> regex_t *, char *, size_t); -int regexec(const regex_t *, const
>> char *, size_t, regmatch_t [], int); -void regfree(regex_t *);
>> -__END_DECLS - -#endif /* !_REGEX_H_ */ diff --git
>> a/android/regex/COPYRIGHT b/android/regex/COPYRIGHT deleted file
>> mode 100644 index a6392fd..0000000 --- a/android/regex/COPYRIGHT
>> +++ /dev/null @@ -1,54 +0,0 @@ -$OpenBSD: COPYRIGHT,v 1.3
>> 2003/06/02 20:18:36 millert Exp $ - -Copyright 1992, 1993, 1994
>> Henry Spencer. All rights reserved. -This software is not subject
>> to any license of the American Telephone -and Telegraph Company or
>> of the Regents of the University of California. - -Permission is
>> granted to anyone to use this software for any purpose on -any
>> computer system, and to alter it and redistribute it, subject -to
>> the following restrictions: - -1. The author is not responsible for
>> the consequences of use of this - software, no matter how awful,
>> even if they arise from flaws in it. - -2. The origin of this
>> software must not be misrepresented, either by - explicit claim
>> or by omission. Since few users ever read sources, - credits
>> must appear in the documentation. - -3. Altered versions must be
>> plainly marked as such, and must not be - misrepresented as being
>> the original software. Since few users - ever read sources,
>> credits must appear in the documentation. - -4. This notice may not
>> be removed or altered. -
>> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>>
>>
-/*-
>> - * Copyright (c) 1994 - * The Regents of the University of
>> California. All rights reserved. - * - * Redistribution and use in
>> source and binary forms, with or without - * modification, are
>> permitted provided that the following conditions - * are met: - *
>> 1. Redistributions of source code must retain the above copyright -
>> * notice, this list of conditions and the following disclaimer.
>> - * 2. Redistributions in binary form must reproduce the above
>> copyright - * notice, this list of conditions and the following
>> disclaimer in the - * documentation and/or other materials
>> provided with the distribution. - * 3. Neither the name of the
>> University nor the names of its contributors - * may be used to
>> endorse or promote products derived from this software - *
>> without specific prior written permission. - * - * THIS SOFTWARE IS
>> PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY
>> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -
>> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
>> PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE
>> REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT,
>> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES
>> (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - *
>> OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>> INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
>> WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING
>> NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF
>> THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH
>> DAMAGE. - * - * @(#)COPYRIGHT 8.1 (Berkeley) 3/16/94 - */ diff
>> --git a/android/regex/NOTICE b/android/regex/NOTICE deleted file
>> mode 100644 index d9e6818..0000000 --- a/android/regex/NOTICE +++
>> /dev/null @@ -1,382 +0,0 @@ - -Copyright (c) 2005-2010, The Android
>> Open Source Project -All rights reserved. - -Redistribution and use
>> in source and binary forms, with or without -modification, are
>> permitted provided that the following conditions -are met: - *
>> Redistributions of source code must retain the above copyright -
>> notice, this list of conditions and the following disclaimer. - *
>> Redistributions in binary form must reproduce the above copyright -
>> notice, this list of conditions and the following disclaimer in -
>> the documentation and/or other materials provided with the -
>> distribution. - * Neither the name of The Android Open Source
>> Project nor the names - of its contributors may be used to
>> endorse or promote products - derived from this software without
>> specific prior written - permission. - -THIS SOFTWARE IS PROVIDED
>> BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS
>> OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE
>> ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR
>> CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL,
>> SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT
>> LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -OF
>> USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
>> -AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
>> LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF -SUCH DAMAGE. - - -Copyright (c) 2004 by Internet
>> Systems Consortium, Inc. ("ISC") -Copyright (c) 1995,1996,1999 by
>> Internet Software Consortium. - -Permission to use, copy, modify,
>> and distribute this software for any -purpose with or without fee
>> is hereby granted, provided that the above -copyright notice and
>> this permission notice appear in all copies. - -THE SOFTWARE IS
>> PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES -WITH REGARD TO
>> THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY
>> AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR -ANY SPECIAL,
>> DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
>> -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
>> AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
>> ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
>> THIS SOFTWARE. - - -Portions Copyright (c) 1995 by International
>> Business Machines, Inc. - -International Business Machines, Inc.
>> (hereinafter called IBM) grants -permission under its copyrights to
>> use, copy, modify, and distribute this -Software with or without
>> fee, provided that the above copyright notice and -all paragraphs
>> of this notice appear in all copies, and that the name of IBM -not
>> be used in connection with the marketing of any product
>> incorporating -the Software or modifications thereof, without
>> specific, written prior -permission. - -To the extent it has a
>> right to do so, IBM grants an immunity from suit -under its
>> patents, if any, for the use, sale or manufacture of products to
>> -the extent that such products are used for performing Domain Name
>> System -dynamic updates in TCP/IP networks by means of the
>> Software. No immunity is -granted for any product per se or for
>> any other function of any product. - -THE SOFTWARE IS PROVIDED "AS
>> IS", AND IBM DISCLAIMS ALL WARRANTIES, -INCLUDING ALL IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR
>> PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, -DIRECT,
>> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
>> ARISING -OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
>> THIS SOFTWARE, EVEN -IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH
>> DAMAGES. - -Copyright (c) 1997, 1998, 1999, 2004 The NetBSD
>> Foundation, Inc. -All rights reserved. - -This code is derived from
>> software contributed to The NetBSD Foundation -by Luke Mewburn; and
>> by Jason R. Thorpe. -This code is derived from software contributed
>> to The NetBSD Foundation -by Christos Zoulas. - -Copyright (c) 1993
>> Christopher G. Demetriou -Copyright (c) 1983, 1985, 1993 The
>> Regents of the University of California. All rights reserved.
>> -Copyright (c) 2000 Ben Harris. -Copyright (C) 1995, 1996, 1997,
>> and 1998 WIDE Project. -All rights reserved. - -Redistribution and
>> use in source and binary forms, with or without -modification, are
>> permitted provided that the following conditions -are met: -1.
>> Redistributions of source code must retain the above copyright -
>> notice, this list of conditions and the following disclaimer. -2.
>> Redistributions in binary form must reproduce the above copyright -
>> notice, this list of conditions and the following disclaimer in
>> the - documentation and/or other materials provided with the
>> distribution. -3. Neither the name of the project nor the names of
>> its contributors - may be used to endorse or promote products
>> derived from this software - without specific prior written
>> permission. - -THIS SOFTWARE IS PROVIDED BY THE PROJECT AND
>> CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE
>> DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE
>> LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
>> OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR
>> PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY
>> THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR
>> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF
>> THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> -SUCH DAMAGE. - -Copyright (c) 2003 Networks Associates Technology,
>> Inc. -All rights reserved. - -Portions of this software were
>> developed for the FreeBSD Project by -Jacques A. Vidrine, Safeport
>> Network Services, and Network -Associates Laboratories, the
>> Security Research Division of Network -Associates, Inc. under
>> DARPA/SPAWAR contract N66001-01-C-8035 -("CBOSS"), as part of the
>> DARPA CHATS research program. - -Redistribution and use in source
>> and binary forms, with or without -modification, are permitted
>> provided that the following conditions -are met: -1.
>> Redistributions of source code must retain the above copyright -
>> notice, this list of conditions and the following disclaimer. -2.
>> Redistributions in binary form must reproduce the above copyright -
>> notice, this list of conditions and the following disclaimer in
>> the - documentation and/or other materials provided with the
>> distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND
>> CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE
>> DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>> LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
>> OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR
>> PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY
>> THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR
>> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF
>> THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> -SUCH DAMAGE. - -Portions Copyright (c) 1993 by Digital Equipment
>> Corporation. - -Permission to use, copy, modify, and distribute
>> this software for any -purpose with or without fee is hereby
>> granted, provided that the above -copyright notice and this
>> permission notice appear in all copies, and that -the name of
>> Digital Equipment Corporation not be used in advertising or
>> -publicity pertaining to distribution of the document or software
>> without -specific, written prior permission. - -THE SOFTWARE IS
>> PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
>> -WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
>> WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
>> DIGITAL EQUIPMENT -CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT,
>> INDIRECT, OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER
>> RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION
>> OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF
>> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. -
>> - -Copyright (c) 1997 Mark Brinicombe -All rights reserved. -
>> -Redistribution and use in source and binary forms, with or
>> without -modification, are permitted provided that the following
>> conditions -are met: -1. Redistributions of source code must retain
>> the above copyright - notice, this list of conditions and the
>> following disclaimer. -2. Redistributions in binary form must
>> reproduce the above copyright - notice, this list of conditions
>> and the following disclaimer in the - documentation and/or other
>> materials provided with the distribution. -3. All advertising
>> materials mentioning features or use of this software - must
>> display the following acknowledgement: - This product includes
>> software developed by Mark Brinicombe -4. Neither the name of the
>> University nor the names of its contributors - may be used to
>> endorse or promote products derived from this software - without
>> specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY
>> THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES
>> OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE
>> DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>> LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
>> OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR
>> PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY
>> THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR
>> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF
>> THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> -SUCH DAMAGE. - - -Copyright (c) 1993 Martin Birgmeier -All rights
>> reserved. - -You may redistribute unmodified or modified versions
>> of this source -code provided that the above copyright notice and
>> this and the -following conditions are retained. - -This software
>> is provided ``as is'', and comes with no warranties -of any kind. I
>> shall in no event be liable for anything that happens -to
>> anyone/anything when using this software. - - -Arc4 random number
>> generator for OpenBSD. -Copyright 1996 David Mazieres
>> <(spam-protected)>. - -Modification and redistribution in source and
>> binary forms is -permitted provided that due credit is given to the
>> author and the -OpenBSD project by leaving this copyright notice
>> intact. - - -Copyright (c) 1999 Kungliga Tekniska Högskolan -(Royal
>> Institute of Technology, Stockholm, Sweden). -All rights reserved.
>> - -Redistribution and use in source and binary forms, with or
>> without -modification, are permitted provided that the following
>> conditions -are met: - -1. Redistributions of source code must
>> retain the above copyright - notice, this list of conditions and
>> the following disclaimer. - -2. Redistributions in binary form must
>> reproduce the above copyright - notice, this list of conditions
>> and the following disclaimer in the - documentation and/or other
>> materials provided with the distribution. - -3. Neither the name of
>> KTH nor the names of its contributors may be - used to endorse or
>> promote products derived from this software without - specific
>> prior written permission. - -THIS SOFTWARE IS PROVIDED BY KTH AND
>> ITS CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE
>> DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE -LIABLE
>> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>> -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
>> OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
>> OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
>> LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
>> (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE
>> USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH
>> DAMAGE. */ - -
>> -==================================================== -Copyright
>> (C) 1993 by Sun Microsystems, Inc. All rights reserved. -
>> -Developed at SunPro, a Sun Microsystems, Inc. business.
>> -Permission to use, copy, modify, and distribute this -software is
>> freely granted, provided that this notice -is preserved.
>> -==================================================== - -
>> -Copyright (c) 1997, 2005 Todd C. Miller
>> <(spam-protected)> - -Permission to use, copy, modify, and
>> distribute this software for any -purpose with or without fee is
>> hereby granted, provided that the above -copyright notice and this
>> permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED
>> "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO
>> THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY
>> AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY
>> SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
>> -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
>> AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
>> ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
>> THIS SOFTWARE. - - -Copyright (c) 1989, 1993 - The Regents of
>> the University of California. All rights reserved. -(c) UNIX
>> System Laboratories, Inc. -All or some portions of this file are
>> derived from material licensed -to the University of California by
>> American Telephone and Telegraph -Co. or Unix System Laboratories,
>> Inc. and are reproduced herein with -the permission of UNIX System
>> Laboratories, Inc. - -Redistribution and use in source and binary
>> forms, with or without -modification, are permitted provided that
>> the following conditions -are met: -1. Redistributions of source
>> code must retain the above copyright - notice, this list of
>> conditions and the following disclaimer. -2. Redistributions in
>> binary form must reproduce the above copyright - notice, this
>> list of conditions and the following disclaimer in the -
>> documentation and/or other materials provided with the
>> distribution. -3. Neither the name of the University nor the names
>> of its contributors - may be used to endorse or promote products
>> derived from this software - without specific prior written
>> permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND
>> CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE
>> DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
>> LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
>> OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR
>> PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY
>> THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR
>> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF
>> THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> -SUCH DAMAGE. - - -Copyright (c) 1995, 1996 Carnegie-Mellon
>> University. -All rights reserved. - -Author: Chris G. Demetriou -
>> -Permission to use, copy, modify and distribute this software and
>> -its documentation is hereby granted, provided that both the
>> copyright -notice and this permission notice appear in all copies
>> of the -software, derivative works or modified versions, and any
>> portions -thereof, and that both notices appear in supporting
>> documentation. - -CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE
>> IN ITS "AS IS" -CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY
>> OF ANY KIND -FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
>> THIS SOFTWARE. - -Carnegie Mellon requests users of this software
>> to return to - - Software Distribution Coordinator or
>> (spam-protected) - School of Computer Science -
>> Carnegie Mellon University - Pittsburgh PA 15213-3890 - -any
>> improvements or extensions that they make and grant Carnegie the
>> -rights to redistribute these changes. - - -Copyright (c) 1995,
>> 1996 Carnegie-Mellon University. -All rights reserved. - -Author:
>> Chris G. Demetriou - -Permission to use, copy, modify and
>> distribute this software and -its documentation is hereby granted,
>> provided that both the copyright -notice and this permission notice
>> appear in all copies of the -software, derivative works or modified
>> versions, and any portions -thereof, and that both notices appear
>> in supporting documentation. - -CARNEGIE MELLON ALLOWS FREE USE OF
>> THIS SOFTWARE IN ITS "AS IS" -CONDITION. CARNEGIE MELLON DISCLAIMS
>> ANY LIABILITY OF ANY KIND -FOR ANY DAMAGES WHATSOEVER RESULTING
>> FROM THE USE OF THIS SOFTWARE. - -Carnegie Mellon requests users of
>> this software to return to - - Software Distribution Coordinator
>> or (spam-protected) - School of Computer Science -
>> Carnegie Mellon University - Pittsburgh PA 15213-3890 - -any
>> improvements or extensions that they make and grant Carnegie the
>> -rights to redistribute these changes. - - -Copyright (c) 2003
>> Networks Associates Technology, Inc. -All rights reserved. -
>> -Portions of this software were developed for the FreeBSD Project
>> by -Jacques A. Vidrine, Safeport Network Services, and Network
>> -Associates Laboratories, the Security Research Division of
>> Network -Associates, Inc. under DARPA/SPAWAR contract
>> N66001-01-C-8035 -("CBOSS"), as part of the DARPA CHATS research
>> program. - -Redistribution and use in source and binary forms, with
>> or without -modification, are permitted provided that the following
>> conditions -are met: -1. Redistributions of source code must retain
>> the above copyright - notice, this list of conditions and the
>> following disclaimer. -2. Redistributions in binary form must
>> reproduce the above copyright - notice, this list of conditions
>> and the following disclaimer in the - documentation and/or other
>> materials provided with the distribution. - -THIS SOFTWARE IS
>> PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS
>> OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
>> LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
>> OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR
>> PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY
>> THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR
>> TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF
>> THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> -SUCH DAMAGE. - - diff --git a/android/regex/WHATSNEW
>> b/android/regex/WHATSNEW deleted file mode 100644 index
>> 95a80ed..0000000 --- a/android/regex/WHATSNEW +++ /dev/null @@
>> -1,95 +0,0 @@ -# $OpenBSD: WHATSNEW,v 1.3 1997/04/28 20:44:56
>> millert Exp $ -# @(#)WHATSNEW 8.3 (Berkeley) 3/18/94 - -New in
>> alpha3.4: The complex bug alluded to below has been fixed (in a
>> -slightly kludgey temporary way that may hurt efficiency a bit;
>> this is -another "get it out the door for 4.4" release). The tests
>> at the end of -the tests file have accordingly been uncommented.
>> The primary sign of -the bug was that something like a?b matching
>> ab matched b rather than ab. -(The bug was essentially specific to
>> this exact situation, else it would -have shown up earlier.) - -New
>> in alpha3.3: The definition of word boundaries has been altered
>> -slightly, to more closely match the usual programming notion that
>> "_" -is an alphabetic. Stuff used for pre-ANSI systems is now in a
>> subdir, -and the makefile no longer alludes to it in mysterious
>> ways. The -makefile has generally been cleaned up some. Fixes
>> have been made -(again!) so that the regression test will run
>> without -DREDEBUG, at -the cost of weaker checking. A workaround
>> for a bug in some folks' -<assert.h> has been added. And some more
>> things have been added to -tests, including a couple right at the
>> end which are commented out -because the code currently flunks them
>> (complex bug; fix coming). -Plus the usual minor cleanup. - -New in
>> alpha3.2: Assorted bits of cleanup and portability improvement
>> -(the development base is now a BSDI system using GCC instead of an
>> ancient -Sun system, and the newer compiler exposed some glitches).
>> Fix for a -serious bug that affected REs using many [] (including
>> REG_ICASE REs -because of the way they are implemented),
>> *sometimes*, depending on -memory-allocation patterns. The
>> header-file prototypes no longer name -the parameters, avoiding
>> possible name conflicts. The possibility that -some clot has
>> defined CHAR_MIN as (say) `-128' instead of `(-128)' is -now
>> handled gracefully. "uchar" is no longer used as an internal type
>> -name (too many people have the same idea). Still the same old
>> lousy -performance, alas. - -New in alpha3.1: Basically nothing,
>> this release is just a bookkeeping -convenience. Stay tuned. -
>> -New in alpha3.0: Performance is no better, alas, but some fixes
>> have been -made and some functionality has been added. (This is
>> basically the "get -it out the door in time for 4.4" release.) One
>> bug fix: regfree() didn't -free the main internal structure (how
>> embarrassing). It is now possible -to put NULs in either the RE or
>> the target string, using (resp.) a new -REG_PEND flag and the old
>> REG_STARTEND flag. The REG_NOSPEC flag to -regcomp() makes all
>> characters ordinary, so you can match a literal -string easily
>> (this will become more useful when performance improves!). -There
>> are now primitives to match beginnings and ends of words, although
>> -the syntax is disgusting and so is the implementation. The
>> REG_ATOI -debugging interface has changed a bit. And there has
>> been considerable -internal cleanup of various kinds. - -New in
>> alpha2.3: Split change list out of README, and moved flags notes
>> -into Makefile. Macro-ized the name of regex(7) in regex(3), since
>> it has -to change for 4.4BSD. Cleanup work in engine.c, and some
>> new regression -tests to catch tricky cases thereof. - -New in
>> alpha2.2: Out-of-date manpages updated. Regerror() acquires two
>> -small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging
>> kludges -in my own test program and might be useful to others for
>> similar purposes. -The regression test will now compile (and run)
>> without REDEBUG. The -BRE \$ bug is fixed. Most uses of "uchar"
>> are gone; it's all chars now. -Char/uchar parameters are now
>> written int/unsigned, to avoid possible -portability problems with
>> unpromoted parameters. Some unsigned casts have -been introduced
>> to minimize portability problems with shifting into sign -bits. -
>> -New in alpha2.1: Lots of little stuff, cleanup and fixes. The
>> one big -thing is that regex.h is now generated, using mkh, rather
>> than being -supplied in the distribution; due to circularities in
>> dependencies, -you have to build regex.h explicitly by "make h".
>> The two known bugs -have been fixed (and the regression test now
>> checks for them), as has a -problem with assertions not being
>> suppressed in the absence of REDEBUG. -No performance work yet. -
>> -New in alpha2: Backslash-anything is an ordinary character, not
>> an -error (except, of course, for the handful of backslashed
>> metacharacters -in BREs), which should reduce script breakage. The
>> regression test -checks *where* null strings are supposed to match,
>> and has generally -been tightened up somewhat. Small bug fixes in
>> parameter passing (not -harmful, but technically errors) and some
>> other areas. Debugging -invoked by defining REDEBUG rather than
>> not defining NDEBUG. - -New in alpha+3: full prototyping for
>> internal routines, using a little -helper program, mkh, which
>> extracts prototypes given in stylized comments. -More minor
>> cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple
>> -pre-screening of input when a literal string is known to be part
>> of the -RE; this does wonders for performance. - -New in alpha+2:
>> minor bits of cleanup. Notably, the number "32" for the -word
>> width isn't hardwired into regexec.c any more, the public header
>> -file prototypes the functions if __STDC__ is defined, and some
>> small typos -in the manpages have been fixed. - -New in alpha+1:
>> improvements to the manual pages, and an important -extension, the
>> REG_STARTEND option to regexec(). diff --git
>> a/android/regex/cclass.h b/android/regex/cclass.h deleted file mode
>> 100644 index d105491..0000000 --- a/android/regex/cclass.h +++
>> /dev/null @@ -1,68 +0,0 @@ -/* $OpenBSD: cclass.h,v 1.5 2003/06/02
>> 20:18:36 millert Exp $ */ - -/*- - * Copyright (c) 1992, 1993, 1994
>> Henry Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents
>> of the University of California. All rights reserved. - * - * This
>> code is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)cclass.h 8.3 (Berkeley)
>> 3/20/94 - */ - -/* character-class table */ -static const struct
>> cclass { - char *name; - char *chars; - char *multis; -} cclasses[]
>> = { - { "alnum",
>> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
>> -0123456789", ""} , - { "alpha",
>> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - ""}
>> , - { "blank", " \t", ""} , - { "cntrl",
>> "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\
>> -\25\26\27\30\31\32\33\34\35\36\37\177", ""} , - { "digit",
>> "0123456789", ""} , - { "graph",
>> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
>> -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""} , - {
>> "lower", "abcdefghijklmnopqrstuvwxyz", - ""} , - { "print",
>> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
>> -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ", - ""} , - {
>> "punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""} , - {
>> "space", "\t\n\v\f\r ", ""} , - { "upper",
>> "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - ""} , - { "xdigit",
>> "0123456789ABCDEFabcdef", - ""} , - { NULL, 0, "" } -}; diff
>> --git a/android/regex/cname.h b/android/regex/cname.h deleted file
>> mode 100644 index b674b68..0000000 --- a/android/regex/cname.h +++
>> /dev/null @@ -1,139 +0,0 @@ -/* $OpenBSD: cname.h,v 1.5 2003/06/02
>> 20:18:36 millert Exp $ */ - -/*- - * Copyright (c) 1992, 1993, 1994
>> Henry Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents
>> of the University of California. All rights reserved. - * - * This
>> code is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)cname.h 8.3 (Berkeley)
>> 3/20/94 - */ - -/* character-name table */ -static const struct
>> cname { - char *name; - char code; -} cnames[] = { - { "NUL",
>> '\0' }, - { "SOH", '\001' }, - { "STX", '\002' }, - { "ETX",
>> '\003' }, - { "EOT", '\004' }, - { "ENQ", '\005' }, - { "ACK",
>> '\006' }, - { "BEL", '\007' }, - { "alert", '\007' }, - { "BS",
>> '\010' }, - { "backspace", '\b' }, - { "HT", '\011' }, - {
>> "tab", '\t' }, - { "LF", '\012' }, - { "newline", '\n' }, -
>> { "VT", '\013' }, - { "vertical-tab", '\v' }, - { "FF",
>> '\014' }, - { "form-feed", '\f' }, - { "CR", '\015' }, - {
>> "carriage-return", '\r' }, - { "SO", '\016' }, - { "SI",
>> '\017' }, - { "DLE", '\020' }, - { "DC1", '\021' }, - { "DC2",
>> '\022' }, - { "DC3", '\023' }, - { "DC4", '\024' }, - { "NAK",
>> '\025' }, - { "SYN", '\026' }, - { "ETB", '\027' }, - { "CAN",
>> '\030' }, - { "EM", '\031' }, - { "SUB", '\032' }, - { "ESC",
>> '\033' }, - { "IS4", '\034' }, - { "FS", '\034' }, - { "IS3",
>> '\035' }, - { "GS", '\035' }, - { "IS2", '\036' }, - { "RS",
>> '\036' }, - { "IS1", '\037' }, - { "US", '\037' }, - {
>> "space", ' ' }, - { "exclamation-mark", '!' }, - {
>> "quotation-mark", '"' }, - { "number-sign", '#' }, - {
>> "dollar-sign", '$' }, - { "percent-sign", '%' }, - { "ampersand",
>> '&' }, - { "apostrophe", '\'' }, - { "left-parenthesis", '(' },
>> - { "right-parenthesis", ')' }, - { "asterisk", '*' }, - {
>> "plus-sign", '+' }, - { "comma", ',' }, - { "hyphen", '-' },
>> - { "hyphen-minus", '-' }, - { "period", '.' }, - { "full-stop",
>> '.' }, - { "slash", '/' }, - { "solidus", '/' }, - { "zero",
>> '0' }, - { "one", '1' }, - { "two", '2' }, - { "three", '3'
>> }, - { "four", '4' }, - { "five", '5' }, - { "six", '6' }, -
>> { "seven", '7' }, - { "eight", '8' }, - { "nine", '9' }, - {
>> "colon", ':' }, - { "semicolon", ';' }, - { "less-than-sign",
>> '<' }, - { "equals-sign", '=' }, - { "greater-than-sign", '>' },
>> - { "question-mark", '?' }, - { "commercial-at", '@' }, - {
>> "left-square-bracket", '[' }, - { "backslash", '\\' }, - {
>> "reverse-solidus", '\\' }, - { "right-square-bracket", ']' }, - {
>> "circumflex", '^' }, - { "circumflex-accent", '^' }, - {
>> "underscore", '_' }, - { "low-line", '_' }, - { "grave-accent",
>> '`' }, - { "left-brace", '{' }, - { "left-curly-bracket", '{'
>> }, - { "vertical-line", '|' }, - { "right-brace", '}' }, - {
>> "right-curly-bracket", '}' }, - { "tilde", '~' }, - { "DEL",
>> '\177' }, - { NULL, 0 } -}; diff --git a/android/regex/engine.c
>> b/android/regex/engine.c deleted file mode 100644 index
>> eae6ff2..0000000 --- a/android/regex/engine.c +++ /dev/null @@
>> -1,1021 +0,0 @@ -/* $OpenBSD: engine.c,v 1.15 2005/08/05 13:03:00
>> espie Exp $ */ - -/*- - * Copyright (c) 1992, 1993, 1994 Henry
>> Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents of the
>> University of California. All rights reserved. - * - * This code
>> is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)engine.c 8.5 (Berkeley)
>> 3/20/94 - */ - -/* - * The matching engine and friends. This file
>> is #included by regexec.c - * after suitable #defines of a variety
>> of macros used herein, so that - * different state representations
>> can be used without duplicating masses - * of code. - */ - -#ifdef
>> SNAMES -#define matcher smatcher -#define fast sfast -#define slow
>> sslow -#define dissect sdissect -#define backref sbackref -#define
>> step sstep -#define print sprint -#define at sat -#define match
>> smat -#define nope snope -#endif -#ifdef LNAMES -#define matcher
>> lmatcher -#define fast lfast -#define slow lslow -#define dissect
>> ldissect -#define backref lbackref -#define step lstep -#define
>> print lprint -#define at lat -#define match lmat -#define nope
>> lnope -#endif - -/* another structure passed up and down to avoid
>> zillions of parameters */ -struct match { - struct re_guts *g; -
>> int eflags; - regmatch_t *pmatch; /* [nsub+1] (0 element unused)
>> */ - char *offp; /* offsets work from here */ - char *beginp; /*
>> start of string -- virtual NUL precedes */ - char *endp; /* end of
>> string -- virtual NUL here */ - char *coldp; /* can be no match
>> starting before here */ - char **lastpos; /* [nplus+1] */ -
>> STATEVARS; - states st; /* current states */ - states fresh; /*
>> states for a fresh start */ - states tmp; /* temporary */ - states
>> empty; /* empty set of states */ -}; - -static int matcher(struct
>> re_guts *, char *, size_t, regmatch_t[], int); -static char
>> *dissect(struct match *, char *, char *, sopno, sopno); -static
>> char *backref(struct match *, char *, char *, sopno, sopno, sopno,
>> int); -static char *fast(struct match *, char *, char *, sopno,
>> sopno); -static char *slow(struct match *, char *, char *, sopno,
>> sopno); -static states step(struct re_guts *, sopno, sopno, states,
>> int, states); -#define MAX_RECURSION 100 -#define BOL (OUT+1)
>> -#define EOL (BOL+1) -#define BOLEOL (BOL+2) -#define NOTHING
>> (BOL+3) -#define BOW (BOL+4) -#define EOW (BOL+5) -#define CODEMAX
>> (BOL+5) /* highest code used */ -#define NONCHAR(c) ((c) >
>> CHAR_MAX) -#define NNONCHAR (CODEMAX-CHAR_MAX) -#ifdef REDEBUG
>> -static void print(struct match *, char *, states, int, FILE *);
>> -#endif -#ifdef REDEBUG -static void at(struct match *, char *,
>> char *, char *, sopno, sopno); -#endif -#ifdef REDEBUG -static char
>> *pchar(int); -#endif - -#ifdef REDEBUG -#define SP(t, s, c)
>> print(m, t, s, c, stdout) -#define AT(t, p1, p2, s1, s2) at(m, t,
>> p1, p2, s1, s2) -#define NOTE(str) { if (m->eflags®_TRACE)
>> (void)printf("=%s\n", (str)); } -static int nope = 0; -#else
>> -#define SP(t, s, c) /* nothing */ -#define AT(t, p1, p2, s1, s2)
>> /* nothing */ -#define NOTE(s) /* nothing */ -#endif - -/* - -
>> matcher - the actual matching engine - */ -static int /* 0
>> success, REG_NOMATCH failure */ -matcher(struct re_guts *g, char
>> *string, size_t nmatch, regmatch_t pmatch[], - int eflags) -{ -
>> char *endp; - int i; - struct match mv; - struct match *m = &mv; -
>> char *dp; - const sopno gf = g->firststate+1; /* +1 for OEND */ -
>> const sopno gl = g->laststate; - char *start; - char *stop; - - /*
>> simplify the situation where possible */ - if
>> (g->cflags®_NOSUB) - nmatch = 0; - if (eflags®_STARTEND) { -
>> start = string + pmatch[0].rm_so; - stop = string +
>> pmatch[0].rm_eo; - } else { - start = string; - stop = start +
>> strlen(start); - } - if (stop < start) - return(REG_INVARG); - -
>> /* prescreening; this does wonders for this rather slow code */ -
>> if (g->must != NULL) { - for (dp = start; dp < stop; dp++) - if
>> (*dp == g->must[0] && stop - dp >= g->mlen && - memcmp(dp,
>> g->must, (size_t)g->mlen) == 0) - break; - if (dp == stop) /*
>> we didn't find g->must */ - return(REG_NOMATCH); - } - - /* match
>> struct setup */ - m->g = g; - m->eflags = eflags; - m->pmatch =
>> NULL; - m->lastpos = NULL; - m->offp = string; - m->beginp =
>> start; - m->endp = stop; - STATESETUP(m, 4); - SETUP(m->st); -
>> SETUP(m->fresh); - SETUP(m->tmp); - SETUP(m->empty); -
>> CLEAR(m->empty); - - /* this loop does only one repetition except
>> for backrefs */ - for (;;) { - endp = fast(m, start, stop, gf,
>> gl); - if (endp == NULL) { /* a miss */ - free(m->pmatch); -
>> free(m->lastpos); - STATETEARDOWN(m); - return(REG_NOMATCH); -
>> } - if (nmatch == 0 && !g->backrefs) - break; /* no further
>> info needed */ - - /* where? */ - assert(m->coldp != NULL); -
>> for (;;) { - NOTE("finding start"); - endp = slow(m, m->coldp,
>> stop, gf, gl); - if (endp != NULL) - break; -
>> assert(m->coldp < m->endp); - m->coldp++; - } - if (nmatch == 1
>> && !g->backrefs) - break; /* no further info needed */ - - /*
>> oh my, he wants the subexpressions... */ - if (m->pmatch == NULL)
>> - m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) * -
>> sizeof(regmatch_t)); - if (m->pmatch == NULL) { -
>> STATETEARDOWN(m); - return(REG_ESPACE); - } - for (i = 1; i <=
>> (int)m->g->nsub; i++) - m->pmatch[i].rm_so = m->pmatch[i].rm_eo =
>> -1; - if (!g->backrefs && !(m->eflags®_BACKR)) { -
>> NOTE("dissecting"); - dp = dissect(m, m->coldp, endp, gf, gl); -
>> } else { - if (g->nplus > 0 && m->lastpos == NULL) -
>> m->lastpos = (char **)malloc((g->nplus+1) * - sizeof(char
>> *)); - if (g->nplus > 0 && m->lastpos == NULL) { -
>> free(m->pmatch); - STATETEARDOWN(m); - return(REG_ESPACE); -
>> } - NOTE("backref dissect"); - dp = backref(m, m->coldp, endp,
>> gf, gl, (sopno)0, 0); - } - if (dp != NULL) - break; - - /*
>> uh-oh... we couldn't find a subexpression-level match */ -
>> assert(g->backrefs); /* must be back references doing it */ -
>> assert(g->nplus == 0 || m->lastpos != NULL); - for (;;) { - if
>> (dp != NULL || endp <= m->coldp) - break; /* defeat */ -
>> NOTE("backoff"); - endp = slow(m, m->coldp, endp-1, gf, gl); -
>> if (endp == NULL) - break; /* defeat */ - /* try it on a
>> shorter possibility */ -#ifndef NDEBUG - for (i = 1; i <=
>> m->g->nsub; i++) { - assert(m->pmatch[i].rm_so == -1); -
>> assert(m->pmatch[i].rm_eo == -1); - } -#endif - NOTE("backoff
>> dissect"); - dp = backref(m, m->coldp, endp, gf, gl, (sopno)0,
>> 0); - } - assert(dp == NULL || dp == endp); - if (dp != NULL)
>> /* found a shorter one */ - break; - - /* despite initial
>> appearances, there is no match here */ - NOTE("false alarm"); -
>> if (m->coldp == stop) - break; - start = m->coldp + 1; /*
>> recycle starting later */ - } - - /* fill in the details if
>> requested */ - if (nmatch > 0) { - pmatch[0].rm_so = m->coldp -
>> m->offp; - pmatch[0].rm_eo = endp - m->offp; - } - if (nmatch > 1)
>> { - assert(m->pmatch != NULL); - for (i = 1; i < (ssize_t)nmatch;
>> i++) - if (i <= (int)m->g->nsub) - pmatch[i] = m->pmatch[i]; -
>> else { - pmatch[i].rm_so = -1; - pmatch[i].rm_eo = -1; - }
>> - } - - if (m->pmatch != NULL) - free((char *)m->pmatch); - if
>> (m->lastpos != NULL) - free((char *)m->lastpos); -
>> STATETEARDOWN(m); - return(0); -} - -/* - - dissect - figure out
>> what matched what, no back references - */ -static char * /* ==
>> stop (success) always */ -dissect(struct match *m, char *start,
>> char *stop, sopno startst, sopno stopst) -{ - int i; - sopno ss; /*
>> start sop of current subRE */ - sopno es; /* end sop of current
>> subRE */ - char *sp; /* start of string matched by it */ - char
>> *stp; /* string matched by it cannot pass here */ - char *rest; /*
>> start of rest of string */ - char *tail; /* string unmatched by
>> rest of RE */ - sopno ssub; /* start sop of subsubRE */ - sopno
>> esub; /* end sop of subsubRE */ - char *ssp; /* start of string
>> matched by subsubRE */ - char *sep; /* end of string matched by
>> subsubRE */ - char *oldssp; /* previous ssp */ - char *dp; - -
>> AT("diss", start, stop, startst, stopst); - sp = start; - for (ss =
>> startst; ss < stopst; ss = es) { - /* identify end of subRE */ -
>> es = ss; - switch (OP(m->g->strip[es])) { - case OPLUS_: - case
>> OQUEST_: - es += OPND(m->g->strip[es]); - break; - case OCH_:
>> - while (OP(m->g->strip[es]) != O_CH) - es +=
>> OPND(m->g->strip[es]); - break; - } - es++; - - /* figure out
>> what it matched */ - switch (OP(m->g->strip[ss])) { - case OEND:
>> - assert(nope); - break; - case OCHAR: - sp++; - break; -
>> case OBOL: - case OEOL: - case OBOW: - case OEOW: - break; -
>> case OANY: - case OANYOF: - sp++; - break; - case OBACK_: -
>> case O_BACK: - assert(nope); - break; - /* cases where length
>> of match is hard to find */ - case OQUEST_: - stp = stop; -
>> for (;;) { - /* how long could this one be? */ - rest =
>> slow(m, sp, stp, ss, es); - assert(rest != NULL); /* it did
>> match */ - /* could the rest match the rest? */ - tail =
>> slow(m, rest, stop, es, stopst); - if (tail == stop) -
>> break; /* yes! */ - /* no -- try a shorter match for this one
>> */ - stp = rest - 1; - assert(stp >= sp); /* it did work */ -
>> } - ssub = ss + 1; - esub = es - 1; - /* did innards match?
>> */ - if (slow(m, sp, rest, ssub, esub) != NULL) { - dp =
>> dissect(m, sp, rest, ssub, esub); - assert(dp == rest); - }
>> else /* no */ - assert(sp == rest); - sp = rest; - break; -
>> case OPLUS_: - stp = stop; - for (;;) { - /* how long could
>> this one be? */ - rest = slow(m, sp, stp, ss, es); -
>> assert(rest != NULL); /* it did match */ - /* could the rest
>> match the rest? */ - tail = slow(m, rest, stop, es, stopst); -
>> if (tail == stop) - break; /* yes! */ - /* no -- try a
>> shorter match for this one */ - stp = rest - 1; - assert(stp
>> >= sp); /* it did work */ - } - ssub = ss + 1; - esub = es -
>> 1; - ssp = sp; - oldssp = ssp; - for (;;) { /* find last
>> match of innards */ - sep = slow(m, ssp, rest, ssub, esub); -
>> if (sep == NULL || sep == ssp) - break; /* failed or matched
>> null */ - oldssp = ssp; /* on to next try */ - ssp = sep; -
>> } - if (sep == NULL) { - /* last successful match */ - sep
>> = ssp; - ssp = oldssp; - } - assert(sep == rest); /* must
>> exhaust substring */ - assert(slow(m, ssp, sep, ssub, esub) ==
>> rest); - dp = dissect(m, ssp, sep, ssub, esub); - assert(dp ==
>> sep); - sp = rest; - break; - case OCH_: - stp = stop; -
>> for (;;) { - /* how long could this one be? */ - rest =
>> slow(m, sp, stp, ss, es); - assert(rest != NULL); /* it did
>> match */ - /* could the rest match the rest? */ - tail =
>> slow(m, rest, stop, es, stopst); - if (tail == stop) -
>> break; /* yes! */ - /* no -- try a shorter match for this one
>> */ - stp = rest - 1; - assert(stp >= sp); /* it did work */ -
>> } - ssub = ss + 1; - esub = ss + OPND(m->g->strip[ss]) - 1; -
>> assert(OP(m->g->strip[esub]) == OOR1); - for (;;) { /* find first
>> matching branch */ - if (slow(m, sp, rest, ssub, esub) == rest)
>> - break; /* it matched all of it */ - /* that one missed,
>> try next one */ - assert(OP(m->g->strip[esub]) == OOR1); -
>> esub++; - assert(OP(m->g->strip[esub]) == OOR2); - ssub =
>> esub + 1; - esub += OPND(m->g->strip[esub]); - if
>> (OP(m->g->strip[esub]) == OOR2) - esub--; - else -
>> assert(OP(m->g->strip[esub]) == O_CH); - } - dp = dissect(m,
>> sp, rest, ssub, esub); - assert(dp == rest); - sp = rest; -
>> break; - case O_PLUS: - case O_QUEST: - case OOR1: - case
>> OOR2: - case O_CH: - assert(nope); - break; - case OLPAREN: -
>> i = OPND(m->g->strip[ss]); - assert(0 < i && i <= m->g->nsub); -
>> m->pmatch[i].rm_so = sp - m->offp; - break; - case ORPAREN: -
>> i = OPND(m->g->strip[ss]); - assert(0 < i && i <= m->g->nsub); -
>> m->pmatch[i].rm_eo = sp - m->offp; - break; - default: /* uh oh
>> */ - assert(nope); - break; - } - } - - assert(sp == stop); -
>> return(sp); -} - -/* - - backref - figure out what matched what,
>> figuring in back references - */ -static char * /* == stop
>> (success) or NULL (failure) */ -backref(struct match *m, char
>> *start, char *stop, sopno startst, sopno stopst, - sopno lev,
>> int rec) /* PLUS nesting level */ -{ - int i; - sopno ss; /*
>> start sop of current subRE */ - char *sp; /* start of string
>> matched by it */ - sopno ssub; /* start sop of subsubRE */ - sopno
>> esub; /* end sop of subsubRE */ - char *ssp; /* start of string
>> matched by subsubRE */ - char *dp; - size_t len; - int hard; - sop
>> s; - regoff_t offsave; - cset *cs; - - AT("back", start, stop,
>> startst, stopst); - sp = start; - - /* get as far as we can with
>> easy stuff */ - hard = 0; - for (ss = startst; !hard && ss <
>> stopst; ss++) - switch (OP(s = m->g->strip[ss])) { - case OCHAR:
>> - if (sp == stop || *sp++ != (char)OPND(s)) - return(NULL); -
>> break; - case OANY: - if (sp == stop) - return(NULL); -
>> sp++; - break; - case OANYOF: - cs = &m->g->sets[OPND(s)]; -
>> if (sp == stop || !CHIN(cs, *sp++)) - return(NULL); - break; -
>> case OBOL: - if ( (sp == m->beginp && !(m->eflags®_NOTBOL))
>> || - (sp < m->endp && *(sp-1) == '\n' && -
>> (m->g->cflags®_NEWLINE)) ) - { /* yes */ } - else -
>> return(NULL); - break; - case OEOL: - if ( (sp == m->endp &&
>> !(m->eflags®_NOTEOL)) || - (sp < m->endp && *sp == '\n' && -
>> (m->g->cflags®_NEWLINE)) ) - { /* yes */ } - else -
>> return(NULL); - break; - case OBOW: - if (( (sp == m->beginp
>> && !(m->eflags®_NOTBOL)) || - (sp < m->endp && *(sp-1) ==
>> '\n' && - (m->g->cflags®_NEWLINE)) || - (sp > m->beginp
>> && - !ISWORD(*(sp-1))) ) && - (sp < m->endp &&
>> ISWORD(*sp)) ) - { /* yes */ } - else - return(NULL); -
>> break; - case OEOW: - if (( (sp == m->endp &&
>> !(m->eflags®_NOTEOL)) || - (sp < m->endp && *sp == '\n' && -
>> (m->g->cflags®_NEWLINE)) || - (sp < m->endp && !ISWORD(*sp))
>> ) && - (sp > m->beginp && ISWORD(*(sp-1))) ) - { /* yes */
>> } - else - return(NULL); - break; - case O_QUEST: -
>> break; - case OOR1: /* matches null but needs to skip */ -
>> ss++; - s = m->g->strip[ss]; - do { - assert(OP(s) ==
>> OOR2); - ss += OPND(s); - } while (OP(s = m->g->strip[ss]) !=
>> O_CH); - /* note that the ss++ gets us past the O_CH */ -
>> break; - default: /* have to make a choice */ - hard = 1; -
>> break; - } - if (!hard) { /* that was it! */ - if (sp != stop) -
>> return(NULL); - return(sp); - } - ss--; /* adjust for the for's
>> final increment */ - - /* the hard stuff */ - AT("hard", sp, stop,
>> ss, stopst); - s = m->g->strip[ss]; - switch (OP(s)) { - case
>> OBACK_: /* the vilest depths */ - i = OPND(s); - assert(0 < i &&
>> i <= m->g->nsub); - if (m->pmatch[i].rm_eo == -1) -
>> return(NULL); - assert(m->pmatch[i].rm_so != -1); - len =
>> m->pmatch[i].rm_eo - m->pmatch[i].rm_so; - if (len == 0 && rec++ >
>> MAX_RECURSION) - return(NULL); - assert(stop - m->beginp >=
>> len); - if (sp > stop - len) - return(NULL); /* not enough left
>> to match */ - ssp = m->offp + m->pmatch[i].rm_so; - if
>> (memcmp(sp, ssp, len) != 0) - return(NULL); - while
>> (m->g->strip[ss] != SOP(O_BACK, i)) - ss++; - return(backref(m,
>> sp+len, stop, ss+1, stopst, lev, rec)); - break; - case OQUEST_:
>> /* to null or not */ - dp = backref(m, sp, stop, ss+1, stopst,
>> lev, rec); - if (dp != NULL) - return(dp); /* not */ -
>> return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev, rec)); -
>> break; - case OPLUS_: - assert(m->lastpos != NULL); -
>> assert(lev+1 <= m->g->nplus); - m->lastpos[lev+1] = sp; -
>> return(backref(m, sp, stop, ss+1, stopst, lev+1, rec)); - break; -
>> case O_PLUS: - if (sp == m->lastpos[lev]) /* last pass matched
>> null */ - return(backref(m, sp, stop, ss+1, stopst, lev-1,
>> rec)); - /* try another pass */ - m->lastpos[lev] = sp; - dp =
>> backref(m, sp, stop, ss-OPND(s)+1, stopst, lev, rec); - if (dp ==
>> NULL) - return(backref(m, sp, stop, ss+1, stopst, lev-1, rec)); -
>> else - return(dp); - break; - case OCH_: /* find the right one,
>> if any */ - ssub = ss + 1; - esub = ss + OPND(s) - 1; -
>> assert(OP(m->g->strip[esub]) == OOR1); - for (;;) { /* find first
>> matching branch */ - dp = backref(m, sp, stop, ssub, esub, lev,
>> rec); - if (dp != NULL) - return(dp); - /* that one missed,
>> try next one */ - if (OP(m->g->strip[esub]) == O_CH) -
>> return(NULL); /* there is none */ - esub++; -
>> assert(OP(m->g->strip[esub]) == OOR2); - ssub = esub + 1; -
>> esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) ==
>> OOR2) - esub--; - else - assert(OP(m->g->strip[esub]) ==
>> O_CH); - } - break; - case OLPAREN: /* must undo assignment if
>> rest fails */ - i = OPND(s); - assert(0 < i && i <= m->g->nsub);
>> - offsave = m->pmatch[i].rm_so; - m->pmatch[i].rm_so = sp -
>> m->offp; - dp = backref(m, sp, stop, ss+1, stopst, lev, rec); -
>> if (dp != NULL) - return(dp); - m->pmatch[i].rm_so = offsave; -
>> return(NULL); - break; - case ORPAREN: /* must undo assignment if
>> rest fails */ - i = OPND(s); - assert(0 < i && i <= m->g->nsub);
>> - offsave = m->pmatch[i].rm_eo; - m->pmatch[i].rm_eo = sp -
>> m->offp; - dp = backref(m, sp, stop, ss+1, stopst, lev, rec); -
>> if (dp != NULL) - return(dp); - m->pmatch[i].rm_eo = offsave; -
>> return(NULL); - break; - default: /* uh oh */ - assert(nope); -
>> break; - } - - /* "can't happen" */ - assert(nope); - /* NOTREACHED
>> */ - return 0; -} - -/* - - fast - step through the string at top
>> speed - */ -static char * /* where tentative match ended, or NULL
>> */ -fast(struct match *m, char *start, char *stop, sopno startst,
>> sopno stopst) -{ - states st = m->st; - states fresh = m->fresh; -
>> states tmp = m->tmp; - char *p = start; - int c = (start ==
>> m->beginp) ? OUT : *(start-1); - int lastc; /* previous c */ - int
>> flagch; - int i; - char *coldp; /* last p after which no match was
>> underway */ - - CLEAR(st); - SET1(st, startst); - st = step(m->g,
>> startst, stopst, st, NOTHING, st); - ASSIGN(fresh, st); -
>> SP("start", st, *p); - coldp = NULL; - for (;;) { - /* next
>> character */ - lastc = c; - c = (p == m->endp) ? OUT : *p; - if
>> (EQ(st, fresh)) - coldp = p; - - /* is there an EOL and/or BOL
>> between lastc and c? */ - flagch = '\0'; - i = 0; - if ( (lastc
>> == '\n' && m->g->cflags®_NEWLINE) || - (lastc == OUT &&
>> !(m->eflags®_NOTBOL)) ) { - flagch = BOL; - i = m->g->nbol;
>> - } - if ( (c == '\n' && m->g->cflags®_NEWLINE) || - (c ==
>> OUT && !(m->eflags®_NOTEOL)) ) { - flagch = (flagch == BOL) ?
>> BOLEOL : EOL; - i += m->g->neol; - } - if (i != 0) { - for (;
>> i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st);
>> - SP("boleol", st, c); - } - - /* how about a word boundary?
>> */ - if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && -
>> (c != OUT && ISWORD(c)) ) { - flagch = BOW; - } - if ( (lastc
>> != OUT && ISWORD(lastc)) && - (flagch == EOL || (c != OUT &&
>> !ISWORD(c))) ) { - flagch = EOW; - } - if (flagch == BOW ||
>> flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch,
>> st); - SP("boweow", st, c); - } - - /* are we done? */ - if
>> (ISSET(st, stopst) || p == stop) - break; /* NOTE BREAK OUT */
>> - - /* no, we must deal with this character */ - ASSIGN(tmp,
>> st); - ASSIGN(st, fresh); - assert(c != OUT); - st = step(m->g,
>> startst, stopst, tmp, c, st); - SP("aft", st, c); -
>> assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); -
>> p++; - } - - assert(coldp != NULL); - m->coldp = coldp; - if
>> (ISSET(st, stopst)) - return(p+1); - else - return(NULL); -} -
>> -/* - - slow - step through the string more deliberately - */
>> -static char * /* where it ended */ -slow(struct match *m, char
>> *start, char *stop, sopno startst, sopno stopst) -{ - states st =
>> m->st; - states empty = m->empty; - states tmp = m->tmp; - char *p
>> = start; - int c = (start == m->beginp) ? OUT : *(start-1); - int
>> lastc; /* previous c */ - int flagch; - int i; - char *matchp; /*
>> last p at which a match ended */ - - AT("slow", start, stop,
>> startst, stopst); - CLEAR(st); - SET1(st, startst); - SP("sstart",
>> st, *p); - st = step(m->g, startst, stopst, st, NOTHING, st); -
>> matchp = NULL; - for (;;) { - /* next character */ - lastc = c; -
>> c = (p == m->endp) ? OUT : *p; - - /* is there an EOL and/or BOL
>> between lastc and c? */ - flagch = '\0'; - i = 0; - if ( (lastc
>> == '\n' && m->g->cflags®_NEWLINE) || - (lastc == OUT &&
>> !(m->eflags®_NOTBOL)) ) { - flagch = BOL; - i = m->g->nbol;
>> - } - if ( (c == '\n' && m->g->cflags®_NEWLINE) || - (c ==
>> OUT && !(m->eflags®_NOTEOL)) ) { - flagch = (flagch == BOL) ?
>> BOLEOL : EOL; - i += m->g->neol; - } - if (i != 0) { - for (;
>> i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st);
>> - SP("sboleol", st, c); - } - - /* how about a word boundary?
>> */ - if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && -
>> (c != OUT && ISWORD(c)) ) { - flagch = BOW; - } - if ( (lastc
>> != OUT && ISWORD(lastc)) && - (flagch == EOL || (c != OUT &&
>> !ISWORD(c))) ) { - flagch = EOW; - } - if (flagch == BOW ||
>> flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch,
>> st); - SP("sboweow", st, c); - } - - /* are we done? */ - if
>> (ISSET(st, stopst)) - matchp = p; - if (EQ(st, empty) || p ==
>> stop) - break; /* NOTE BREAK OUT */ - - /* no, we must deal
>> with this character */ - ASSIGN(tmp, st); - ASSIGN(st, empty); -
>> assert(c != OUT); - st = step(m->g, startst, stopst, tmp, c, st);
>> - SP("saft", st, c); - assert(EQ(step(m->g, startst, stopst, st,
>> NOTHING, st), st)); - p++; - } - - return(matchp); -} - - -/* - -
>> step - map set of states reachable before char to set reachable
>> after - */ -static states -step(struct re_guts *g, - sopno
>> start, /* start state within strip */ - sopno stop, /* state
>> after stop state within strip */ - states bef, /* states
>> reachable before */ - int ch, /* character or NONCHAR code */
>> - states aft) /* states already known reachable after */ -{ -
>> cset *cs; - sop s; - sopno pc; - onestate here; /* note, macros
>> know this name */ - sopno look; - int i; - - for (pc = start,
>> INIT(here, pc); pc != stop; pc++, INC(here)) { - s =
>> g->strip[pc]; - switch (OP(s)) { - case OEND: - assert(pc ==
>> stop-1); - break; - case OCHAR: - /* only characters can match
>> */ - assert(!NONCHAR(ch) || ch != (char)OPND(s)); - if (ch ==
>> (char)OPND(s)) - FWD(aft, bef, 1); - break; - case OBOL: -
>> if (ch == BOL || ch == BOLEOL) - FWD(aft, bef, 1); - break; -
>> case OEOL: - if (ch == EOL || ch == BOLEOL) - FWD(aft, bef,
>> 1); - break; - case OBOW: - if (ch == BOW) - FWD(aft, bef,
>> 1); - break; - case OEOW: - if (ch == EOW) - FWD(aft, bef,
>> 1); - break; - case OANY: - if (!NONCHAR(ch)) - FWD(aft,
>> bef, 1); - break; - case OANYOF: - cs = &g->sets[OPND(s)]; -
>> if (!NONCHAR(ch) && CHIN(cs, ch)) - FWD(aft, bef, 1); -
>> break; - case OBACK_: /* ignored here */ - case O_BACK: -
>> FWD(aft, aft, 1); - break; - case OPLUS_: /* forward, this is
>> just an empty */ - FWD(aft, aft, 1); - break; - case O_PLUS:
>> /* both forward and back */ - FWD(aft, aft, 1); - i =
>> ISSETBACK(aft, OPND(s)); - BACK(aft, aft, OPND(s)); - if (!i &&
>> ISSETBACK(aft, OPND(s))) { - /* oho, must reconsider loop body
>> */ - pc -= OPND(s) + 1; - INIT(here, pc); - } - break; -
>> case OQUEST_: /* two branches, both forward */ - FWD(aft, aft,
>> 1); - FWD(aft, aft, OPND(s)); - break; - case O_QUEST: /*
>> just an empty */ - FWD(aft, aft, 1); - break; - case OLPAREN:
>> /* not significant here */ - case ORPAREN: - FWD(aft, aft, 1); -
>> break; - case OCH_: /* mark the first two branches */ -
>> FWD(aft, aft, 1); - assert(OP(g->strip[pc+OPND(s)]) == OOR2); -
>> FWD(aft, aft, OPND(s)); - break; - case OOR1: /* done a branch,
>> find the O_CH */ - if (ISSTATEIN(aft, here)) { - for (look =
>> 1; - OP(s = g->strip[pc+look]) != O_CH; - look +=
>> OPND(s)) - assert(OP(s) == OOR2); - FWD(aft, aft, look); -
>> } - break; - case OOR2: /* propagate OCH_'s marking */ -
>> FWD(aft, aft, 1); - if (OP(g->strip[pc+OPND(s)]) != O_CH) { -
>> assert(OP(g->strip[pc+OPND(s)]) == OOR2); - FWD(aft, aft,
>> OPND(s)); - } - break; - case O_CH: /* just empty */ -
>> FWD(aft, aft, 1); - break; - default: /* ooooops... */ -
>> assert(nope); - break; - } - } - - return(aft); -} - -#ifdef
>> REDEBUG -/* - - print - print a set of states - */ -static void
>> -print(struct match *m, char *caption, states st, int ch, FILE *d)
>> -{ - struct re_guts *g = m->g; - int i; - int first = 1; - - if
>> (!(m->eflags®_TRACE)) - return; - - (void)fprintf(d, "%s",
>> caption); - if (ch != '\0') - (void)fprintf(d, " %s", pchar(ch));
>> - for (i = 0; i < g->nstates; i++) - if (ISSET(st, i)) { -
>> (void)fprintf(d, "%s%d", (first) ? "\t" : ", ", i); - first = 0;
>> - } - (void)fprintf(d, "\n"); -} - -/* - - at - print current
>> situation - */ -static void -at(struct match *m, char *title, char
>> *start, char *stop, sopno startst, - sopno stopst) -{ - if
>> (!(m->eflags®_TRACE)) - return; - - (void)printf("%s %s-",
>> title, pchar(*start)); - (void)printf("%s ", pchar(*stop)); -
>> (void)printf("%ld-%ld\n", (long)startst, (long)stopst); -} -
>> -#ifndef PCHARDONE -#define PCHARDONE /* never again */ -/* - -
>> pchar - make a character printable - * - * Is this identical to
>> regchar() over in debug.c? Well, yes. But a - * duplicate here
>> avoids having a debugging-capable regexec.o tied to - * a matching
>> debug.o, and this is convenient. It all disappears in - * the
>> non-debug compilation anyway, so it doesn't matter much. - */
>> -static char * /* -> representation */ -pchar(int ch) -{ - static
>> char pbuf[10]; - - if (isprint(ch) || ch == ' ') -
>> (void)snprintf(pbuf, sizeof pbuf, "%c", ch); - else -
>> (void)snprintf(pbuf, sizeof pbuf, "\\%o", ch); - return(pbuf); -}
>> -#endif -#endif - -#undef matcher -#undef fast -#undef slow -#undef
>> dissect -#undef backref -#undef step -#undef print -#undef at
>> -#undef match -#undef nope diff --git a/android/regex/regcomp.c
>> b/android/regex/regcomp.c deleted file mode 100644 index
>> 19f4790..0000000 --- a/android/regex/regcomp.c +++ /dev/null @@
>> -1,1517 +0,0 @@ -/* $OpenBSD: regcomp.c,v 1.19 2008/02/23 08:13:07
>> otto Exp $ */ -/*- - * Copyright (c) 1992, 1993, 1994 Henry
>> Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents of the
>> University of California. All rights reserved. - * - * This code
>> is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regcomp.c 8.5
>> (Berkeley) 3/20/94 - */ - -#include <sys/types.h> -#include
>> <stdio.h> -#include <string.h> -#include <ctype.h> -#include
>> <limits.h> -#include <stdlib.h> -#include <regex.h> - -#include
>> "utils.h" -#include "regex2.h" - -#include "cclass.h" -#include
>> "cname.h" - -/* - * parse structure, passed up and down to avoid
>> global variables and - * other clumsinesses - */ -struct parse { -
>> char *next; /* next character in RE */ - char *end; /* end of
>> string (-> NUL normally) */ - int error; /* has an error been
>> seen? */ - sop *strip; /* malloced strip */ - sopno ssize; /*
>> malloced strip size (allocated) */ - sopno slen; /* malloced strip
>> length (used) */ - int ncsalloc; /* number of csets allocated */ -
>> struct re_guts *g; -# define NPAREN 10 /* we need to remember ()
>> 1-9 for back refs */ - sopno pbegin[NPAREN]; /* -> ( ([0] unused)
>> */ - sopno pend[NPAREN]; /* -> ) ([0] unused) */ -}; - -static void
>> p_ere(struct parse *, int); -static void p_ere_exp(struct parse
>> *); -static void p_str(struct parse *); -static void p_bre(struct
>> parse *, int, int); -static int p_simp_re(struct parse *, int);
>> -static int p_count(struct parse *); -static void p_bracket(struct
>> parse *); -static void p_b_term(struct parse *, cset *); -static
>> void p_b_cclass(struct parse *, cset *); -static void
>> p_b_eclass(struct parse *, cset *); -static char p_b_symbol(struct
>> parse *); -static char p_b_coll_elem(struct parse *, int); -static
>> char othercase(int); -static void bothcases(struct parse *, int);
>> -static void ordinary(struct parse *, int); -static void
>> nonnewline(struct parse *); -static void repeat(struct parse *,
>> sopno, int, int); -static int seterr(struct parse *, int); -static
>> cset *allocset(struct parse *); -static void freeset(struct parse
>> *, cset *); -static int freezeset(struct parse *, cset *); -static
>> int firstch(struct parse *, cset *); -static int nch(struct parse
>> *, cset *); -static void mcadd(struct parse *, cset *, char *);
>> -static void mcinvert(struct parse *, cset *); -static void
>> mccase(struct parse *, cset *); -static int isinsets(struct re_guts
>> *, int); -static int samesets(struct re_guts *, int, int); -static
>> void categorize(struct parse *, struct re_guts *); -static sopno
>> dupl(struct parse *, sopno, sopno); -static void doemit(struct
>> parse *, sop, size_t); -static void doinsert(struct parse *, sop,
>> size_t, sopno); -static void dofwd(struct parse *, sopno, sop);
>> -static void enlarge(struct parse *, sopno); -static void
>> stripsnug(struct parse *, struct re_guts *); -static void
>> findmust(struct parse *, struct re_guts *); -static sopno
>> pluscount(struct parse *, struct re_guts *); - -static char
>> nuls[10]; /* place to point scanner in event of error */ - -/* - *
>> macros for use with parse structure - * BEWARE: these know that
>> the parse structure is named `p' !!! - */ -#define PEEK()
>> (*p->next) -#define PEEK2() (*(p->next+1)) -#define MORE() (p->next
>> < p->end) -#define MORE2() (p->next+1 < p->end) -#define SEE(c)
>> (MORE() && PEEK() == (c)) -#define SEETWO(a, b) (MORE() && MORE2()
>> && PEEK() == (a) && PEEK2() == (b)) -#define EAT(c) ((SEE(c)) ?
>> (NEXT(), 1) : 0) -#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(),
>> 1) : 0) -#define NEXT() (p->next++) -#define NEXT2() (p->next +=
>> 2) -#define NEXTn(n) (p->next += (n)) -#define GETNEXT()
>> (*p->next++) -#define SETERROR(e) seterr(p, (e)) -#define
>> REQUIRE(co, e) ((co) || SETERROR(e)) -#define MUSTSEE(c, e)
>> (REQUIRE(MORE() && PEEK() == (c), e)) -#define MUSTEAT(c, e)
>> (REQUIRE(MORE() && GETNEXT() == (c), e)) -#define MUSTNOTSEE(c, e)
>> (REQUIRE(!MORE() || PEEK() != (c), e)) -#define EMIT(op, sopnd)
>> doemit(p, (sop)(op), (size_t)(sopnd)) -#define INSERT(op, pos)
>> doinsert(p, (sop)(op), HERE()-(pos)+1, pos) -#define AHEAD(pos)
>> dofwd(p, pos, HERE()-(pos)) -#define ASTERN(sop, pos) EMIT(sop,
>> HERE()-pos) -#define HERE() (p->slen) -#define THERE() (p->slen -
>> 1) -#define THERETHERE() (p->slen - 2) -#define DROP(n) (p->slen -=
>> (n)) - -#ifndef NDEBUG -static int never = 0; /* for use in
>> asserts; shuts lint up */ -#else -#define never 0 /* some
>> <assert.h>s have bugs too */ -#endif - -/* - - regcomp - interface
>> for parser and compilation - */ -int /* 0 success, otherwise
>> REG_something */ -regcomp(regex_t *preg, const char *pattern, int
>> cflags) -{ - struct parse pa; - struct re_guts *g; - struct parse
>> *p = &pa; - int i; - size_t len; -#ifdef REDEBUG -# define
>> GOODFLAGS(f) (f) -#else -# define GOODFLAGS(f) ((f)&~REG_DUMP)
>> -#endif - - cflags = GOODFLAGS(cflags); - if ((cflags®_EXTENDED)
>> && (cflags®_NOSPEC)) - return(REG_INVARG); - - if
>> (cflags®_PEND) { - if (preg->re_endp < pattern) -
>> return(REG_INVARG); - len = preg->re_endp - pattern; - } else -
>> len = strlen((char *)pattern); - - /* do the mallocs early so
>> failure handling is easy */ - g = (struct re_guts
>> *)malloc(sizeof(struct re_guts) + - (NC-1)*sizeof(cat_t)); -
>> if (g == NULL) - return(REG_ESPACE); - p->ssize =
>> len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ - p->strip = (sop
>> *)calloc(p->ssize, sizeof(sop)); - p->slen = 0; - if (p->strip ==
>> NULL) { - free((char *)g); - return(REG_ESPACE); - } - - /* set
>> things up */ - p->g = g; - p->next = (char *)pattern; /*
>> convenience; we do not modify it */ - p->end = p->next + len; -
>> p->error = 0; - p->ncsalloc = 0; - for (i = 0; i < NPAREN; i++) { -
>> p->pbegin[i] = 0; - p->pend[i] = 0; - } - g->csetsize = NC; -
>> g->sets = NULL; - g->setbits = NULL; - g->ncsets = 0; - g->cflags =
>> cflags; - g->iflags = 0; - g->nbol = 0; - g->neol = 0; - g->must =
>> NULL; - g->mlen = 0; - g->nsub = 0; - g->ncategories = 1; /*
>> category 0 is "everything else" */ - g->categories =
>> &g->catspace[-(CHAR_MIN)]; - (void) memset((char *)g->catspace, 0,
>> NC*sizeof(cat_t)); - g->backrefs = 0; - - /* do it */ - EMIT(OEND,
>> 0); - g->firststate = THERE(); - if (cflags®_EXTENDED) -
>> p_ere(p, OUT); - else if (cflags®_NOSPEC) - p_str(p); - else -
>> p_bre(p, OUT, OUT); - EMIT(OEND, 0); - g->laststate = THERE(); - -
>> /* tidy up loose ends and fill things in */ - categorize(p, g); -
>> stripsnug(p, g); - findmust(p, g); - g->nplus = pluscount(p, g); -
>> g->magic = MAGIC2; - preg->re_nsub = g->nsub; - preg->re_g = g; -
>> preg->re_magic = MAGIC1; -#ifndef REDEBUG - /* not debugging, so
>> can't rely on the assert() in regexec() */ - if (g->iflags&BAD) -
>> SETERROR(REG_ASSERT); -#endif - - /* win or lose, we're done */ -
>> if (p->error != 0) /* lose */ - regfree(preg); -
>> return(p->error); -} - -/* - - p_ere - ERE parser top level,
>> concatenation and alternation - */ -static void -p_ere(struct parse
>> *p, int stop) /* character this ERE should end at */ -{ - char c; -
>> sopno prevback = 0; - sopno prevfwd = 0; - sopno conc; - int first
>> = 1; /* is this the first alternative? */ - - for (;;) { - /* do
>> a bunch of concatenated expressions */ - conc = HERE(); - while
>> (MORE() && (c = PEEK()) != '|' && c != stop) - p_ere_exp(p); -
>> REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */ - - if
>> (!EAT('|')) - break; /* NOTE BREAK OUT */ - - if (first) { -
>> INSERT(OCH_, conc); /* offset is wrong */ - prevfwd = conc; -
>> prevback = conc; - first = 0; - } - ASTERN(OOR1, prevback); -
>> prevback = THERE(); - AHEAD(prevfwd); /* fix previous offset */
>> - prevfwd = HERE(); - EMIT(OOR2, 0); /* offset is very wrong
>> */ - } - - if (!first) { /* tail-end fixups */ - AHEAD(prevfwd);
>> - ASTERN(O_CH, prevback); - } - - assert(!MORE() || SEE(stop));
>> -} - -/* - - p_ere_exp - parse one subERE, an atom possibly
>> followed by a repetition op - */ -static void -p_ere_exp(struct
>> parse *p) -{ - char c; - sopno pos; - int count; - int count2; -
>> sopno subno; - int wascaret = 0; - - assert(MORE()); /* caller
>> should have ensured this */ - c = GETNEXT(); - - pos = HERE(); -
>> switch (c) { - case '(': - REQUIRE(MORE(), REG_EPAREN); -
>> p->g->nsub++; - subno = p->g->nsub; - if (subno < NPAREN) -
>> p->pbegin[subno] = HERE(); - EMIT(OLPAREN, subno); - if
>> (!SEE(')')) - p_ere(p, ')'); - if (subno < NPAREN) { -
>> p->pend[subno] = HERE(); - assert(p->pend[subno] != 0); - } -
>> EMIT(ORPAREN, subno); - MUSTEAT(')', REG_EPAREN); - break;
>> -#ifndef POSIX_MISTAKE - case ')': /* happens only if no current
>> unmatched ( */ - /* - * You may ask, why the ifndef? Because I
>> didn't notice - * this until slightly too late for 1003.2, and
>> none of the - * other 1003.2 regular-expression reviewers noticed
>> it at - * all. So an unmatched ) is legal POSIX, at least until
>> - * we can get it fixed. - */ - SETERROR(REG_EPAREN); -
>> break; -#endif - case '^': - EMIT(OBOL, 0); - p->g->iflags |=
>> USEBOL; - p->g->nbol++; - wascaret = 1; - break; - case '$': -
>> EMIT(OEOL, 0); - p->g->iflags |= USEEOL; - p->g->neol++; -
>> break; - case '|': - SETERROR(REG_EMPTY); - break; - case '*': -
>> case '+': - case '?': - SETERROR(REG_BADRPT); - break; - case
>> '.': - if (p->g->cflags®_NEWLINE) - nonnewline(p); - else -
>> EMIT(OANY, 0); - break; - case '[': - p_bracket(p); - break; -
>> case '\\': - REQUIRE(MORE(), REG_EESCAPE); - c = GETNEXT(); -
>> ordinary(p, c); - break; - case '{': /* okay as ordinary except
>> if digit follows */ - REQUIRE(!MORE() || !isdigit((uch)PEEK()),
>> REG_BADRPT); - /* FALLTHROUGH */ - default: - ordinary(p, c); -
>> break; - } - - if (!MORE()) - return; - c = PEEK(); - /* we call {
>> a repetition if followed by a digit */ - if (!( c == '*' || c ==
>> '+' || c == '?' || - (c == '{' && MORE2() &&
>> isdigit((uch)PEEK2())) )) - return; /* no repetition, we're done
>> */ - NEXT(); - - REQUIRE(!wascaret, REG_BADRPT); - switch (c) { -
>> case '*': /* implemented as +? */ - /* this case does not require
>> the (y|) trick, noKLUDGE */ - INSERT(OPLUS_, pos); -
>> ASTERN(O_PLUS, pos); - INSERT(OQUEST_, pos); - ASTERN(O_QUEST,
>> pos); - break; - case '+': - INSERT(OPLUS_, pos); -
>> ASTERN(O_PLUS, pos); - break; - case '?': - /* KLUDGE: emit y? as
>> (y|) until subtle bug gets fixed */ - INSERT(OCH_, pos); /*
>> offset slightly wrong */ - ASTERN(OOR1, pos); /* this one's right
>> */ - AHEAD(pos); /* fix the OCH_ */ - EMIT(OOR2, 0); /*
>> offset very wrong... */ - AHEAD(THERE()); /* ...so fix it */ -
>> ASTERN(O_CH, THERETHERE()); - break; - case '{': - count =
>> p_count(p); - if (EAT(',')) { - if (isdigit((uch)PEEK())) { -
>> count2 = p_count(p); - REQUIRE(count <= count2, REG_BADBR); -
>> } else /* single number with comma */ - count2 = INFINITY; - }
>> else /* just a single number */ - count2 = count; - repeat(p,
>> pos, count, count2); - if (!EAT('}')) { /* error heuristics */ -
>> while (MORE() && PEEK() != '}') - NEXT(); - REQUIRE(MORE(),
>> REG_EBRACE); - SETERROR(REG_BADBR); - } - break; - } - - if
>> (!MORE()) - return; - c = PEEK(); - if (!( c == '*' || c == '+' ||
>> c == '?' || - (c == '{' && MORE2() && isdigit((uch)PEEK2())) )
>> ) - return; - SETERROR(REG_BADRPT); -} - -/* - - p_str - string
>> (no metacharacters) "parser" - */ -static void -p_str(struct parse
>> *p) -{ - REQUIRE(MORE(), REG_EMPTY); - while (MORE()) -
>> ordinary(p, GETNEXT()); -} - -/* - - p_bre - BRE parser top level,
>> anchoring and concatenation - * Giving end1 as OUT essentially
>> eliminates the end1/end2 check. - * - * This implementation is a
>> bit of a kludge, in that a trailing $ is first - * taken as an
>> ordinary character and then revised to be an anchor. The - * only
>> undesirable side effect is that '$' gets included as a character -
>> * category in such cases. This is fairly harmless; not worth
>> fixing. - * The amount of lookahead needed to avoid this kludge is
>> excessive. - */ -static void -p_bre(struct parse *p, - int end1,
>> /* first terminating character */ - int end2) /* second
>> terminating character */ -{ - sopno start = HERE(); - int first =
>> 1; /* first subexpression? */ - int wasdollar = 0; - - if
>> (EAT('^')) { - EMIT(OBOL, 0); - p->g->iflags |= USEBOL; -
>> p->g->nbol++; - } - while (MORE() && !SEETWO(end1, end2)) { -
>> wasdollar = p_simp_re(p, first); - first = 0; - } - if (wasdollar)
>> { /* oops, that was a trailing anchor */ - DROP(1); - EMIT(OEOL,
>> 0); - p->g->iflags |= USEEOL; - p->g->neol++; - } - -
>> REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */ -} -
>> -/* - - p_simp_re - parse a simple RE, an atom possibly followed by
>> a repetition - */ -static int /* was the simple RE an
>> unbackslashed $? */ -p_simp_re(struct parse *p, - int
>> starordinary) /* is a leading * an ordinary character? */ -{ - int
>> c; - int count; - int count2; - sopno pos; - int i; - sopno subno;
>> -# define BACKSL (1<<CHAR_BIT) - - pos = HERE(); /* repetion op,
>> if any, covers from here */ - - assert(MORE()); /* caller should
>> have ensured this */ - c = GETNEXT(); - if (c == '\\') { -
>> REQUIRE(MORE(), REG_EESCAPE); - c = BACKSL | GETNEXT(); - } -
>> switch (c) { - case '.': - if (p->g->cflags®_NEWLINE) -
>> nonnewline(p); - else - EMIT(OANY, 0); - break; - case '[': -
>> p_bracket(p); - break; - case BACKSL|'{': -
>> SETERROR(REG_BADRPT); - break; - case BACKSL|'(': -
>> p->g->nsub++; - subno = p->g->nsub; - if (subno < NPAREN) -
>> p->pbegin[subno] = HERE(); - EMIT(OLPAREN, subno); - /* the MORE
>> here is an error heuristic */ - if (MORE() && !SEETWO('\\', ')'))
>> - p_bre(p, '\\', ')'); - if (subno < NPAREN) { -
>> p->pend[subno] = HERE(); - assert(p->pend[subno] != 0); - } -
>> EMIT(ORPAREN, subno); - REQUIRE(EATTWO('\\', ')'), REG_EPAREN); -
>> break; - case BACKSL|')': /* should not get here -- must be user
>> */ - case BACKSL|'}': - SETERROR(REG_EPAREN); - break; - case
>> BACKSL|'1': - case BACKSL|'2': - case BACKSL|'3': - case
>> BACKSL|'4': - case BACKSL|'5': - case BACKSL|'6': - case
>> BACKSL|'7': - case BACKSL|'8': - case BACKSL|'9': - i =
>> (c&~BACKSL) - '0'; - assert(i < NPAREN); - if (p->pend[i] != 0)
>> { - assert(i <= p->g->nsub); - EMIT(OBACK_, i); -
>> assert(p->pbegin[i] != 0); - assert(OP(p->strip[p->pbegin[i]]) ==
>> OLPAREN); - assert(OP(p->strip[p->pend[i]]) == ORPAREN); -
>> (void) dupl(p, p->pbegin[i]+1, p->pend[i]); - EMIT(O_BACK, i); -
>> } else - SETERROR(REG_ESUBREG); - p->g->backrefs = 1; - break;
>> - case '*': - REQUIRE(starordinary, REG_BADRPT); - /* FALLTHROUGH
>> */ - default: - ordinary(p, (char)c); - break; - } - - if
>> (EAT('*')) { /* implemented as +? */ - /* this case does not
>> require the (y|) trick, noKLUDGE */ - INSERT(OPLUS_, pos); -
>> ASTERN(O_PLUS, pos); - INSERT(OQUEST_, pos); - ASTERN(O_QUEST,
>> pos); - } else if (EATTWO('\\', '{')) { - count = p_count(p); -
>> if (EAT(',')) { - if (MORE() && isdigit((uch)PEEK())) { -
>> count2 = p_count(p); - REQUIRE(count <= count2, REG_BADBR); -
>> } else /* single number with comma */ - count2 = INFINITY; - }
>> else /* just a single number */ - count2 = count; - repeat(p,
>> pos, count, count2); - if (!EATTWO('\\', '}')) { /* error
>> heuristics */ - while (MORE() && !SEETWO('\\', '}')) -
>> NEXT(); - REQUIRE(MORE(), REG_EBRACE); - SETERROR(REG_BADBR); -
>> } - } else if (c == '$') /* $ (but not \$) ends it */ -
>> return(1); - - return(0); -} - -/* - - p_count - parse a repetition
>> count - */ -static int /* the value */ -p_count(struct parse *p)
>> -{ - int count = 0; - int ndigits = 0; - - while (MORE() &&
>> isdigit((uch)PEEK()) && count <= DUPMAX) { - count = count*10 +
>> (GETNEXT() - '0'); - ndigits++; - } - - REQUIRE(ndigits > 0 &&
>> count <= DUPMAX, REG_BADBR); - return(count); -} - -/* - -
>> p_bracket - parse a bracketed character list - * - * Note a
>> significant property of this code: if the allocset() did
>> SETERROR, - * no set operations are done. - */ -static void
>> -p_bracket(struct parse *p) -{ - cset *cs; - int invert = 0; - - /*
>> Dept of Truly Sickening Special-Case Kludges */ - if (p->next + 5 <
>> p->end && strncmp(p->next, "[:<:]]", 6) == 0) { - EMIT(OBOW, 0); -
>> NEXTn(6); - return; - } - if (p->next + 5 < p->end &&
>> strncmp(p->next, "[:>:]]", 6) == 0) { - EMIT(OEOW, 0); -
>> NEXTn(6); - return; - } - - if ((cs = allocset(p)) == NULL) { -
>> /* allocset did set error status in p */ - return; - } - - if
>> (EAT('^')) - invert++; /* make note to invert set at end */ - if
>> (EAT(']')) - CHadd(cs, ']'); - else if (EAT('-')) - CHadd(cs,
>> '-'); - while (MORE() && PEEK() != ']' && !SEETWO('-', ']')) -
>> p_b_term(p, cs); - if (EAT('-')) - CHadd(cs, '-'); - MUSTEAT(']',
>> REG_EBRACK); - - if (p->error != 0) { /* don't mess things up
>> further */ - freeset(p, cs); - return; - } - - if
>> (p->g->cflags®_ICASE) { - int i; - int ci; - - for (i =
>> p->g->csetsize - 1; i >= 0; i--) - if (CHIN(cs, i) && isalpha(i))
>> { - ci = othercase(i); - if (ci != i) - CHadd(cs, ci); -
>> } - if (cs->multis != NULL) - mccase(p, cs); - } - if (invert)
>> { - int i; - - for (i = p->g->csetsize - 1; i >= 0; i--) - if
>> (CHIN(cs, i)) - CHsub(cs, i); - else - CHadd(cs, i); - if
>> (p->g->cflags®_NEWLINE) - CHsub(cs, '\n'); - if (cs->multis
>> != NULL) - mcinvert(p, cs); - } - - assert(cs->multis == NULL);
>> /* xxx */ - - if (nch(p, cs) == 1) { /* optimize singleton sets
>> */ - ordinary(p, firstch(p, cs)); - freeset(p, cs); - } else -
>> EMIT(OANYOF, freezeset(p, cs)); -} - -/* - - p_b_term - parse one
>> term of a bracketed character list - */ -static void
>> -p_b_term(struct parse *p, cset *cs) -{ - char c; - char start,
>> finish; - int i; - - /* classify what we've got */ - switch
>> ((MORE()) ? PEEK() : '\0') { - case '[': - c = (MORE2()) ? PEEK2()
>> : '\0'; - break; - case '-': - SETERROR(REG_ERANGE); - return;
>> /* NOTE RETURN */ - break; - default: - c = '\0'; - break; - }
>> - - switch (c) { - case ':': /* character class */ - NEXT2(); -
>> REQUIRE(MORE(), REG_EBRACK); - c = PEEK(); - REQUIRE(c != '-' &&
>> c != ']', REG_ECTYPE); - p_b_cclass(p, cs); - REQUIRE(MORE(),
>> REG_EBRACK); - REQUIRE(EATTWO(':', ']'), REG_ECTYPE); - break; -
>> case '=': /* equivalence class */ - NEXT2(); - REQUIRE(MORE(),
>> REG_EBRACK); - c = PEEK(); - REQUIRE(c != '-' && c != ']',
>> REG_ECOLLATE); - p_b_eclass(p, cs); - REQUIRE(MORE(),
>> REG_EBRACK); - REQUIRE(EATTWO('=', ']'), REG_ECOLLATE); - break;
>> - default: /* symbol, ordinary character, or range */ -/* xxx
>> revision needed for multichar stuff */ - start = p_b_symbol(p); -
>> if (SEE('-') && MORE2() && PEEK2() != ']') { - /* range */ -
>> NEXT(); - if (EAT('-')) - finish = '-'; - else - finish =
>> p_b_symbol(p); - } else - finish = start; -/* xxx what about
>> signed chars here... */ - REQUIRE(start <= finish, REG_ERANGE); -
>> for (i = start; i <= finish; i++) - CHadd(cs, i); - break; - }
>> -} - -/* - - p_b_cclass - parse a character-class name and deal
>> with it - */ -static void -p_b_cclass(struct parse *p, cset *cs)
>> -{ - char *sp = p->next; - const struct cclass *cp; - size_t len; -
>> char *u; - char c; - - while (MORE() && isalpha(PEEK())) -
>> NEXT(); - len = p->next - sp; - for (cp = cclasses; cp->name !=
>> NULL; cp++) - if (strncmp(cp->name, sp, len) == 0 && cp->name[len]
>> == '\0') - break; - if (cp->name == NULL) { - /* oops, didn't
>> find it */ - SETERROR(REG_ECTYPE); - return; - } - - u =
>> cp->chars; - while ((c = *u++) != '\0') - CHadd(cs, c); - for (u =
>> cp->multis; *u != '\0'; u += strlen(u) + 1) - MCadd(p, cs, u); -}
>> - -/* - - p_b_eclass - parse an equivalence-class name and deal
>> with it - * - * This implementation is incomplete. xxx - */ -static
>> void -p_b_eclass(struct parse *p, cset *cs) -{ - char c; - - c =
>> p_b_coll_elem(p, '='); - CHadd(cs, c); -} - -/* - - p_b_symbol -
>> parse a character or [..]ed multicharacter collating symbol - */
>> -static char /* value of symbol */ -p_b_symbol(struct parse *p)
>> -{ - char value; - - REQUIRE(MORE(), REG_EBRACK); - if
>> (!EATTWO('[', '.')) - return(GETNEXT()); - - /* collating symbol
>> */ - value = p_b_coll_elem(p, '.'); - REQUIRE(EATTWO('.', ']'),
>> REG_ECOLLATE); - return(value); -} - -/* - - p_b_coll_elem - parse
>> a collating-element name and look it up - */ -static char /*
>> value of collating element */ -p_b_coll_elem(struct parse *p, -
>> int endc) /* name ended by endc,']' */ -{ - char *sp = p->next; -
>> const struct cname *cp; - int len; - - while (MORE() &&
>> !SEETWO(endc, ']')) - NEXT(); - if (!MORE()) { -
>> SETERROR(REG_EBRACK); - return(0); - } - len = p->next - sp; - for
>> (cp = cnames; cp->name != NULL; cp++) - if (strncmp(cp->name, sp,
>> len) == 0 && cp->name[len] == '\0') - return(cp->code); /* known
>> name */ - if (len == 1) - return(*sp); /* single character */ -
>> SETERROR(REG_ECOLLATE); /* neither */ - return(0); -} - -/* - -
>> othercase - return the case counterpart of an alphabetic - */
>> -static char /* if no counterpart, return ch */ -othercase(int
>> ch) -{ - ch = (uch)ch; - assert(isalpha(ch)); - if (isupper(ch)) -
>> return ((uch)tolower(ch)); - else if (islower(ch)) - return
>> ((uch)toupper(ch)); - else /* peculiar, but could happen */ -
>> return(ch); -} - -/* - - bothcases - emit a dualcase version of a
>> two-case character - * - * Boy, is this implementation ever a
>> kludge... - */ -static void -bothcases(struct parse *p, int ch) -{
>> - char *oldnext = p->next; - char *oldend = p->end; - char
>> bracket[3]; - - ch = (uch)ch; - assert(othercase(ch) != ch); /*
>> p_bracket() would recurse */ - p->next = bracket; - p->end =
>> bracket+2; - bracket[0] = ch; - bracket[1] = ']'; - bracket[2] =
>> '\0'; - p_bracket(p); - assert(p->next == bracket+2); - p->next =
>> oldnext; - p->end = oldend; -} - -/* - - ordinary - emit an
>> ordinary character - */ -static void -ordinary(struct parse *p, int
>> ch) -{ - cat_t *cap = p->g->categories; - - if
>> ((p->g->cflags®_ICASE) && isalpha((uch)ch) && othercase(ch) !=
>> ch) - bothcases(p, ch); - else { - EMIT(OCHAR, (uch)ch); - if
>> (cap[ch] == 0) - cap[ch] = p->g->ncategories++; - } -} - -/* - -
>> nonnewline - emit REG_NEWLINE version of OANY - * - * Boy, is this
>> implementation ever a kludge... - */ -static void
>> -nonnewline(struct parse *p) -{ - char *oldnext = p->next; - char
>> *oldend = p->end; - char bracket[4]; - - p->next = bracket; -
>> p->end = bracket+3; - bracket[0] = '^'; - bracket[1] = '\n'; -
>> bracket[2] = ']'; - bracket[3] = '\0'; - p_bracket(p); -
>> assert(p->next == bracket+3); - p->next = oldnext; - p->end =
>> oldend; -} - -/* - - repeat - generate code for a bounded
>> repetition, recursively if needed - */ -static void -repeat(struct
>> parse *p, - sopno start, /* operand from here to end of strip
>> */ - int from, /* repeated from this number */ - int to)
>> /* to this number of times (maybe INFINITY) */ -{ - sopno finish =
>> HERE(); -# define N 2 -# define INF 3 -# define REP(f, t) ((f)*8 +
>> (t)) -# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF :
>> N) - sopno copy; - - if (p->error != 0) /* head off possible
>> runaway recursion */ - return; - - assert(from <= to); - - switch
>> (REP(MAP(from), MAP(to))) { - case REP(0, 0): /* must be user
>> doing this */ - DROP(finish-start); /* drop the operand */ -
>> break; - case REP(0, 1): /* as x{1,1}? */ - case REP(0, N): /*
>> as x{1,n}? */ - case REP(0, INF): /* as x{1,}? */ - /* KLUDGE:
>> emit y? as (y|) until subtle bug gets fixed */ - INSERT(OCH_,
>> start); /* offset is wrong... */ - repeat(p, start+1, 1, to); -
>> ASTERN(OOR1, start); - AHEAD(start); /* ... fix it */ -
>> EMIT(OOR2, 0); - AHEAD(THERE()); - ASTERN(O_CH, THERETHERE()); -
>> break; - case REP(1, 1): /* trivial case */ - /* done */ -
>> break; - case REP(1, N): /* as x?x{1,n-1} */ - /* KLUDGE: emit
>> y? as (y|) until subtle bug gets fixed */ - INSERT(OCH_, start); -
>> ASTERN(OOR1, start); - AHEAD(start); - EMIT(OOR2, 0); /* offset
>> very wrong... */ - AHEAD(THERE()); /* ...so fix it */ -
>> ASTERN(O_CH, THERETHERE()); - copy = dupl(p, start+1, finish+1); -
>> assert(copy == finish+4); - repeat(p, copy, 1, to-1); - break; -
>> case REP(1, INF): /* as x+ */ - INSERT(OPLUS_, start); -
>> ASTERN(O_PLUS, start); - break; - case REP(N, N): /* as
>> xx{m-1,n-1} */ - copy = dupl(p, start, finish); - repeat(p, copy,
>> from-1, to-1); - break; - case REP(N, INF): /* as xx{n-1,INF} */
>> - copy = dupl(p, start, finish); - repeat(p, copy, from-1, to); -
>> break; - default: /* "can't happen" */ - SETERROR(REG_ASSERT);
>> /* just in case */ - break; - } -} - -/* - - seterr - set an error
>> condition - */ -static int /* useless but makes type checking
>> happy */ -seterr(struct parse *p, int e) -{ - if (p->error == 0) /*
>> keep earliest error condition */ - p->error = e; - p->next = nuls;
>> /* try to bring things to a halt */ - p->end = nuls; - return(0);
>> /* make the return value well-defined */ -} - -/* - - allocset -
>> allocate a set of characters for [] - */ -static cset *
>> -allocset(struct parse *p) -{ - int no = p->g->ncsets++; - size_t
>> nc; - size_t nbytes; - cset *cs; - size_t css =
>> (size_t)p->g->csetsize; - int i; - - if (no >= p->ncsalloc) { /*
>> need another column of space */ - void *ptr; - - p->ncsalloc +=
>> CHAR_BIT; - nc = p->ncsalloc; - assert(nc % CHAR_BIT == 0); -
>> nbytes = nc / CHAR_BIT * css; - - ptr = (cset *)realloc((char
>> *)p->g->sets, nc * sizeof(cset)); - if (ptr == NULL) - goto
>> nomem; - p->g->sets = ptr; - - ptr = (uch *)realloc((char
>> *)p->g->setbits, nbytes); - if (ptr == NULL) - goto nomem; -
>> p->g->setbits = ptr; - - for (i = 0; i < no; i++) -
>> p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT); - - (void)
>> memset((char *)p->g->setbits + (nbytes - css), 0, css); - } - /*
>> XXX should not happen */ - if (p->g->sets == NULL || p->g->setbits
>> == NULL) - goto nomem; - - cs = &p->g->sets[no]; - cs->ptr =
>> p->g->setbits + css*((no)/CHAR_BIT); - cs->mask = 1 << ((no) %
>> CHAR_BIT); - cs->hash = 0; - cs->smultis = 0; - cs->multis = NULL;
>> - - return(cs); -nomem: - free(p->g->sets); - p->g->sets = NULL; -
>> free(p->g->setbits); - p->g->setbits = NULL; - -
>> SETERROR(REG_ESPACE); - /* caller's responsibility not to do set
>> ops */ - return(NULL); -} - -/* - - freeset - free a now-unused
>> set - */ -static void -freeset(struct parse *p, cset *cs) -{ - int
>> i; - cset *top = &p->g->sets[p->g->ncsets]; - size_t css =
>> (size_t)p->g->csetsize; - - for (i = 0; i < (ssize_t)css; i++) -
>> CHsub(cs, i); - if (cs == top-1) /* recover only the easy case */ -
>> p->g->ncsets--; -} - -/* - - freezeset - final processing on a set
>> of characters - * - * The main task here is merging identical sets.
>> This is usually a waste - * of time (although the hash code
>> minimizes the overhead), but can win - * big if REG_ICASE is being
>> used. REG_ICASE, by the way, is why the hash - * is done using
>> addition rather than xor -- all ASCII [aA] sets xor to - * the same
>> value! - */ -static int /* set number */ -freezeset(struct parse
>> *p, cset *cs) -{ - uch h = cs->hash; - int i; - cset *top =
>> &p->g->sets[p->g->ncsets]; - cset *cs2; - size_t css =
>> (size_t)p->g->csetsize; - - /* look for an earlier one which is the
>> same */ - for (cs2 = &p->g->sets[0]; cs2 < top; cs2++) - if
>> (cs2->hash == h && cs2 != cs) { - /* maybe */ - for (i = 0; i <
>> (ssize_t)css; i++) - if (!!CHIN(cs2, i) != !!CHIN(cs, i)) -
>> break; /* no */ - if (i == (ssize_t)css) - break; /* yes
>> */ - } - - if (cs2 < top) { /* found one */ - freeset(p, cs); -
>> cs = cs2; - } - - return((int)(cs - p->g->sets)); -} - -/* - -
>> firstch - return first character in a set (which must have at least
>> one) - */ -static int /* character; there is no "none" value */
>> -firstch(struct parse *p, cset *cs) -{ - int i; - size_t css =
>> (size_t)p->g->csetsize; - - for (i = 0; i < (ssize_t)css; i++) -
>> if (CHIN(cs, i)) - return((char)i); - assert(never); - return(0);
>> /* arbitrary */ -} - -/* - - nch - number of characters in a set -
>> */ -static int -nch(struct parse *p, cset *cs) -{ - int i; - size_t
>> css = (size_t)p->g->csetsize; - int n = 0; - - for (i = 0; i <
>> (ssize_t)css; i++) - if (CHIN(cs, i)) - n++; - return(n); -} -
>> -/* - - mcadd - add a collating element to a cset - */ -static
>> void -mcadd( struct parse *p, cset *cs, char *cp) -{ - size_t
>> oldend = cs->smultis; - void *np; - - cs->smultis += strlen(cp) +
>> 1; - np = realloc(cs->multis, cs->smultis); - if (np == NULL) { -
>> if (cs->multis) - free(cs->multis); - cs->multis = NULL; -
>> SETERROR(REG_ESPACE); - return; - } - cs->multis = np; - -
>> strlcpy(cs->multis + oldend - 1, cp, cs->smultis - oldend + 1); -}
>> - -/* - - mcinvert - invert the list of collating elements in a
>> cset - * - * This would have to know the set of possibilities.
>> Implementation - * is deferred. - */ -/* ARGSUSED */ -static void
>> -mcinvert(struct parse *p, cset *cs) -{ - assert(cs->multis ==
>> NULL); /* xxx */ -} - -/* - - mccase - add case counterparts of the
>> list of collating elements in a cset - * - * This would have to
>> know the set of possibilities. Implementation - * is deferred. -
>> */ -/* ARGSUSED */ -static void -mccase(struct parse *p, cset *cs)
>> -{ - assert(cs->multis == NULL); /* xxx */ -} - -/* - - isinsets -
>> is this character in any sets? - */ -static int /* predicate */
>> -isinsets(struct re_guts *g, int c) -{ - uch *col; - int i; - int
>> ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; - unsigned uc =
>> (uch)c; - - for (i = 0, col = g->setbits; i < ncols; i++, col +=
>> g->csetsize) - if (col[uc] != 0) - return(1); - return(0); -} -
>> -/* - - samesets - are these two characters in exactly the same
>> sets? - */ -static int /* predicate */ -samesets(struct re_guts
>> *g, int c1, int c2) -{ - uch *col; - int i; - int ncols =
>> (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; - unsigned uc1 = (uch)c1; -
>> unsigned uc2 = (uch)c2; - - for (i = 0, col = g->setbits; i <
>> ncols; i++, col += g->csetsize) - if (col[uc1] != col[uc2]) -
>> return(0); - return(1); -} - -/* - - categorize - sort out
>> character categories - */ -static void -categorize(struct parse *p,
>> struct re_guts *g) -{ - cat_t *cats = g->categories; - int c; - int
>> c2; - cat_t cat; - - /* avoid making error situations worse */ - if
>> (p->error != 0) - return; - - for (c = CHAR_MIN; c <= CHAR_MAX;
>> c++) - if (cats[c] == 0 && isinsets(g, c)) { - cat =
>> g->ncategories++; - cats[c] = cat; - for (c2 = c+1; c2 <=
>> CHAR_MAX; c2++) - if (cats[c2] == 0 && samesets(g, c, c2)) -
>> cats[c2] = cat; - } -} - -/* - - dupl - emit a duplicate of a
>> bunch of sops - */ -static sopno /* start of duplicate */
>> -dupl(struct parse *p, - sopno start, /* from here */ -
>> sopno finish) /* to this less one */ -{ - sopno ret = HERE(); -
>> sopno len = finish - start; - - assert(finish >= start); - if (len
>> == 0) - return(ret); - enlarge(p, p->ssize + len); /* this many
>> unexpected additions */ - assert(p->ssize >= p->slen + len); -
>> (void) memcpy((char *)(p->strip + p->slen), - (char *)(p->strip +
>> start), (size_t)len*sizeof(sop)); - p->slen += len; - return(ret);
>> -} - -/* - - doemit - emit a strip operator - * - * It might seem
>> better to implement this as a macro with a function as - *
>> hard-case backup, but it's just too big and messy unless there are
>> - * some changes to the data structures. Maybe later. - */ -static
>> void -doemit(struct parse *p, sop op, size_t opnd) -{ - /* avoid
>> making error situations worse */ - if (p->error != 0) - return; -
>> - /* deal with oversize operands ("can't happen", more or less) */
>> - assert(opnd < 1<<OPSHIFT); - - /* deal with undersized strip */ -
>> if (p->slen >= p->ssize) - enlarge(p, (p->ssize+1) / 2 * 3); /*
>> +50% */ - assert(p->slen < p->ssize); - - /* finally, it's all
>> reduced to the easy case */ - p->strip[p->slen++] = SOP(op, opnd);
>> -} - -/* - - doinsert - insert a sop into the strip - */ -static
>> void -doinsert(struct parse *p, sop op, size_t opnd, sopno pos) -{
>> - sopno sn; - sop s; - int i; - - /* avoid making error situations
>> worse */ - if (p->error != 0) - return; - - sn = HERE(); -
>> EMIT(op, opnd); /* do checks, ensure space */ - assert(HERE() ==
>> sn+1); - s = p->strip[sn]; - - /* adjust paren pointers */ -
>> assert(pos > 0); - for (i = 1; i < NPAREN; i++) { - if
>> (p->pbegin[i] >= pos) { - p->pbegin[i]++; - } - if (p->pend[i]
>> >= pos) { - p->pend[i]++; - } - } - - memmove((char
>> *)&p->strip[pos+1], (char *)&p->strip[pos], -
>> (HERE()-pos-1)*sizeof(sop)); - p->strip[pos] = s; -} - -/* - -
>> dofwd - complete a forward reference - */ -static void
>> -dofwd(struct parse *p, sopno pos, sop value) -{ - /* avoid making
>> error situations worse */ - if (p->error != 0) - return; - -
>> assert(value < 1<<OPSHIFT); - p->strip[pos] = OP(p->strip[pos]) |
>> value; -} - -/* - - enlarge - enlarge the strip - */ -static void
>> -enlarge(struct parse *p, sopno size) -{ - sop *sp; - - if
>> (p->ssize >= size) - return; - - sp = (sop *)realloc(p->strip,
>> size*sizeof(sop)); - if (sp == NULL) { - SETERROR(REG_ESPACE); -
>> return; - } - p->strip = sp; - p->ssize = size; -} - -/* - -
>> stripsnug - compact the strip - */ -static void -stripsnug(struct
>> parse *p, struct re_guts *g) -{ - g->nstates = p->slen; - g->strip
>> = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop)); - if
>> (g->strip == NULL) { - SETERROR(REG_ESPACE); - g->strip =
>> p->strip; - } -} - -/* - - findmust - fill in must and mlen with
>> longest mandatory literal string - * - * This algorithm could do
>> fancy things like analyzing the operands of | - * for common
>> subsequences. Someday. This code is simple and finds most - * of
>> the interesting cases. - * - * Note that must and mlen got
>> initialized during setup. - */ -static void -findmust(struct parse
>> *p, struct re_guts *g) -{ - sop *scan; - sop *start = NULL; /*
>> start initialized in the default case, after that */ - sop
>> *newstart; /* newstart was initialized in the OCHAR case */ - sopno
>> newlen; - sop s; - char *cp; - sopno i; - - /* avoid making error
>> situations worse */ - if (p->error != 0) - return; - - /* find the
>> longest OCHAR sequence in strip */ - newlen = 0; - scan = g->strip
>> + 1; - do { - s = *scan++; - switch (OP(s)) { - case OCHAR: /*
>> sequence member */ - if (newlen == 0) /* new sequence */ -
>> newstart = scan - 1; - newlen++; - break; - case OPLUS_: /*
>> things that don't break one */ - case OLPAREN: - case ORPAREN: -
>> break; - case OQUEST_: /* things that must be skipped */ - case
>> OCH_: - scan--; - do { - scan += OPND(s); - s = *scan; -
>> /* assert() interferes w debug printouts */ - if (OP(s) !=
>> O_QUEST && OP(s) != O_CH && - OP(s) != OOR2) { -
>> g->iflags |= BAD; - return; - } - } while (OP(s) !=
>> O_QUEST && OP(s) != O_CH); - /* fallthrough */ - default: /*
>> things that break a sequence */ - if (newlen > g->mlen) { /*
>> ends one */ - start = newstart; - g->mlen = newlen; - } -
>> newlen = 0; - break; - } - } while (OP(s) != OEND); - - if
>> (g->mlen == 0) /* there isn't one */ - return; - - /* turn it
>> into a character string */ - g->must = malloc((size_t)g->mlen +
>> 1); - if (g->must == NULL) { /* argh; just forget it */ - g->mlen
>> = 0; - return; - } - cp = g->must; - scan = start; - for (i =
>> g->mlen; i > 0; i--) { - while (OP(s = *scan++) != OCHAR) -
>> continue; - assert(cp < g->must + g->mlen); - *cp++ =
>> (char)OPND(s); - } - assert(cp == g->must + g->mlen); - *cp++ =
>> '\0'; /* just on general principles */ -} - -/* - - pluscount -
>> count + nesting - */ -static sopno /* nesting depth */
>> -pluscount(struct parse *p, struct re_guts *g) -{ - sop *scan; -
>> sop s; - sopno plusnest = 0; - sopno maxnest = 0; - - if (p->error
>> != 0) - return(0); /* there may not be an OEND */ - - scan =
>> g->strip + 1; - do { - s = *scan++; - switch (OP(s)) { - case
>> OPLUS_: - plusnest++; - break; - case O_PLUS: - if (plusnest
>> > maxnest) - maxnest = plusnest; - plusnest--; - break; -
>> } - } while (OP(s) != OEND); - if (plusnest != 0) - g->iflags |=
>> BAD; - return(maxnest); -} diff --git a/android/regex/regerror.c
>> b/android/regex/regerror.c deleted file mode 100644 index
>> 838ec8f..0000000 --- a/android/regex/regerror.c +++ /dev/null @@
>> -1,130 +0,0 @@ -/* $OpenBSD: regerror.c,v 1.13 2005/08/05 13:03:00
>> espie Exp $ */ -/*- - * Copyright (c) 1992, 1993, 1994 Henry
>> Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents of the
>> University of California. All rights reserved. - * - * This code
>> is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regerror.c 8.4
>> (Berkeley) 3/20/94 - */ - -#include <sys/types.h> -#include
>> <stdio.h> -#include <string.h> -#include <ctype.h> -#include
>> <limits.h> -#include <stdlib.h> -#include <regex.h> - -#include
>> "utils.h" - -static char *regatoi(const regex_t *, char *, int); -
>> -static const struct rerr { - int code; - char *name; - char
>> *explain; -} rerrs[] = { - { REG_NOMATCH, "REG_NOMATCH", "regexec()
>> failed to match" }, - { REG_BADPAT, "REG_BADPAT", "invalid regular
>> expression" }, - { REG_ECOLLATE, "REG_ECOLLATE", "invalid collating
>> element" }, - { REG_ECTYPE, "REG_ECTYPE", "invalid character class"
>> }, - { REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)" }, - {
>> REG_ESUBREG, "REG_ESUBREG", "invalid backreference number" }, - {
>> REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced" }, - {
>> REG_EPAREN, "REG_EPAREN", "parentheses not balanced" }, - {
>> REG_EBRACE, "REG_EBRACE", "braces not balanced" }, - { REG_BADBR,
>> "REG_BADBR", "invalid repetition count(s)" }, - { REG_ERANGE,
>> "REG_ERANGE", "invalid character range" }, - { REG_ESPACE,
>> "REG_ESPACE", "out of memory" }, - { REG_BADRPT, "REG_BADRPT",
>> "repetition-operator operand invalid" }, - { REG_EMPTY,
>> "REG_EMPTY", "empty (sub)expression" }, - { REG_ASSERT,
>> "REG_ASSERT", "\"can't happen\" -- you found a bug" }, - {
>> REG_INVARG, "REG_INVARG", "invalid argument to regex routine" }, -
>> { 0, "", "*** unknown regexp error code ***" } -}; - -/* - -
>> regerror - the interface to error numbers - = extern size_t
>> regerror(int, const regex_t *, char *, size_t); - */ -/* ARGSUSED
>> */ -size_t -regerror(int errcode, const regex_t *preg, char
>> *errbuf, size_t errbuf_size) -{ - const struct rerr *r; - size_t
>> len; - int target = errcode &~ REG_ITOA; - char *s; - char
>> convbuf[50]; - - if (errcode == REG_ATOI) - s = regatoi(preg,
>> convbuf, sizeof convbuf); - else { - for (r = rerrs; r->code != 0;
>> r++) - if (r->code == target) - break; - - if
>> (errcode®_ITOA) { - if (r->code != 0) { -
>> assert(strlen(r->name) < sizeof(convbuf)); - (void)
>> strlcpy(convbuf, r->name, sizeof convbuf); - } else -
>> (void)snprintf(convbuf, sizeof convbuf, - "REG_0x%x",
>> target); - s = convbuf; - } else - s = r->explain; - } - - len
>> = strlen(s) + 1; - if (errbuf_size > 0) { - strlcpy(errbuf, s,
>> errbuf_size); - } - - return(len); -} - -/* - - regatoi - internal
>> routine to implement REG_ATOI - */ -static char * -regatoi(const
>> regex_t *preg, char *localbuf, int localbufsize) -{ - const struct
>> rerr *r; - - for (r = rerrs; r->code != 0; r++) - if
>> (strcmp(r->name, preg->re_endp) == 0) - break; - if (r->code ==
>> 0) - return("0"); - - (void)snprintf(localbuf, localbufsize, "%d",
>> r->code); - return(localbuf); -} diff --git
>> a/android/regex/regex2.h b/android/regex/regex2.h deleted file mode
>> 100644 index 15e15bc..0000000 --- a/android/regex/regex2.h +++
>> /dev/null @@ -1,157 +0,0 @@ -/* $OpenBSD: regex2.h,v 1.7 2004/11/30
>> 17:04:23 otto Exp $ */ - -/*- - * Copyright (c) 1992, 1993, 1994
>> Henry Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents
>> of the University of California. All rights reserved. - * - * This
>> code is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regex2.h 8.4 (Berkeley)
>> 3/20/94 - */ - -/* - * internals of regex_t - */ -#define MAGIC1
>> ((('r'^0200)<<8) | 'e') - -/* - * The internal representation is a
>> *strip*, a sequence of - * operators ending with an endmarker.
>> (Some terminology etc. is a - * historical relic of earlier
>> versions which used multiple strips.) - * Certain oddities in the
>> representation are there to permit running - * the machinery
>> backwards; in particular, any deviation from sequential - * flow
>> must be marked at both its source and its destination. Some - *
>> fine points: - * - * - OPLUS_ and O_PLUS are *inside* the loop they
>> create. - * - OQUEST_ and O_QUEST are *outside* the bypass they
>> create. - * - OCH_ and O_CH are *outside* the multi-way branch they
>> create, while - * OOR1 and OOR2 are respectively the end and the
>> beginning of one of - * the branches. Note that there is an
>> implicit OOR2 following OCH_ - * and an implicit OOR1 preceding
>> O_CH. - * - * In state representations, an operator's bit is on to
>> signify a state - * immediately *preceding* "execution" of that
>> operator. - */ -typedef unsigned long sop; /* strip operator */
>> -typedef long sopno; -#define OPRMASK 0xf8000000LU -#define OPDMASK
>> 0x07ffffffLU -#define OPSHIFT ((unsigned)27) -#define OP(n)
>> ((n)&OPRMASK) -#define OPND(n) ((n)&OPDMASK) -#define SOP(op, opnd)
>> ((op)|(opnd)) -/* operators meaning operand */ -/*
>> (back, fwd are offsets) */ -#define OEND (1LU<<OPSHIFT) /*
>> endmarker - */ -#define OCHAR (2LU<<OPSHIFT) /* character
>> unsigned char */ -#define OBOL (3LU<<OPSHIFT) /* left anchor -
>> */ -#define OEOL (4LU<<OPSHIFT) /* right anchor - */ -#define
>> OANY (5LU<<OPSHIFT) /* . - */ -#define OANYOF (6LU<<OPSHIFT) /*
>> [...] set number */ -#define OBACK_ (7LU<<OPSHIFT) /* begin \d
>> paren number */ -#define O_BACK (8LU<<OPSHIFT) /* end \d paren
>> number */ -#define OPLUS_ (9LU<<OPSHIFT) /* + prefix fwd to suffix
>> */ -#define O_PLUS (10LU<<OPSHIFT) /* + suffix back to prefix */
>> -#define OQUEST_ (11LU<<OPSHIFT) /* ? prefix fwd to suffix */
>> -#define O_QUEST (12LU<<OPSHIFT) /* ? suffix back to prefix */
>> -#define OLPAREN (13LU<<OPSHIFT) /* ( fwd to ) */ -#define
>> ORPAREN (14LU<<OPSHIFT) /* ) back to ( */ -#define OCH_
>> (15LU<<OPSHIFT) /* begin choice fwd to OOR2 */ -#define OOR1
>> (16LU<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */ -#define OOR2
>> (17LU<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */ -#define O_CH
>> (18LU<<OPSHIFT) /* end choice back to OOR1 */ -#define OBOW
>> (19LU<<OPSHIFT) /* begin word - */ -#define OEOW (20LU<<OPSHIFT)
>> /* end word - */ - -/* - * Structure for [] character-set
>> representation. Character sets are - * done as bit vectors,
>> grouped 8 to a byte vector for compactness. - * The individual set
>> therefore has both a pointer to the byte vector - * and a mask to
>> pick out the relevant bit of each byte. A hash code - * simplifies
>> testing whether two sets could be identical. - * - * This will get
>> trickier for multicharacter collating elements. As - * preliminary
>> hooks for dealing with such things, we also carry along - * a
>> string of multi-character elements, and decide the size of the - *
>> vectors at run time. - */ -typedef struct { - uch *ptr; /* -> uch
>> [csetsize] */ - uch mask; /* bit within array */ - uch hash; /*
>> hash code */ - size_t smultis; - char *multis; /* -> char[smulti]
>> ab\0cd\0ef\0\0 */ -} cset; -/* note that CHadd and CHsub are
>> unsafe, and CHIN doesn't yield 0/1 */ -#define CHadd(cs, c)
>> ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c)) -#define
>> CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -=
>> (c)) -#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask)
>> -#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal
>> fns */ -#define MCsub(p, cs, cp) mcsub(p, cs, cp) -#define MCin(p,
>> cs, cp) mcin(p, cs, cp) - -/* stuff for character categories */
>> -typedef unsigned char cat_t; - -/* - * main compiled-expression
>> structure - */ -struct re_guts { - int magic; -# define MAGIC2
>> ((('R'^0200)<<8)|'E') - sop *strip; /* malloced area for strip */
>> - int csetsize; /* number of bits in a cset vector */ - int
>> ncsets; /* number of csets in use */ - cset *sets; /* -> cset
>> [ncsets] */ - uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT]
>> */ - int cflags; /* copy of regcomp() cflags argument */ - sopno
>> nstates; /* = number of sops */ - sopno firststate; /* the initial
>> OEND (normally 0) */ - sopno laststate; /* the final OEND */ - int
>> iflags; /* internal flags */ -# define USEBOL 01 /* used ^ */ -#
>> define USEEOL 02 /* used $ */ -# define BAD 04 /* something wrong
>> */ - int nbol; /* number of ^ used */ - int neol; /* number of $
>> used */ - int ncategories; /* how many character categories */ -
>> cat_t *categories; /* ->catspace[-CHAR_MIN] */ - char *must; /*
>> match must contain this string */ - int mlen; /* length of must
>> */ - size_t nsub; /* copy of re_nsub */ - int backrefs; /* does
>> it use back references? */ - sopno nplus; /* how deep does it nest
>> +s? */ - /* catspace must be last */ - cat_t catspace[1]; /*
>> actually [NC] */ -}; - -/* misc utilities */ -#define OUT
>> (CHAR_MAX+1) /* a non-character value */ -#define ISWORD(c)
>> (isalnum(c) || (c) == '_') diff --git a/android/regex/regexec.c
>> b/android/regex/regexec.c deleted file mode 100644 index
>> 6feed3b..0000000 --- a/android/regex/regexec.c +++ /dev/null @@
>> -1,160 +0,0 @@ -/* $OpenBSD: regexec.c,v 1.11 2005/08/05 13:03:00
>> espie Exp $ */ -/*- - * Copyright (c) 1992, 1993, 1994 Henry
>> Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents of the
>> University of California. All rights reserved. - * - * This code
>> is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regexec.c 8.3
>> (Berkeley) 3/20/94 - */ - -/* - * the outer shell of regexec() - *
>> - * This file includes engine.c *twice*, after muchos fiddling with
>> the - * macros that code uses. This lets the same code operate on
>> two different - * representations for state sets. - */ -#include
>> <sys/types.h> -#include <stdio.h> -#include <stdlib.h> -#include
>> <string.h> -#include <limits.h> -#include <ctype.h> -#include
>> <regex.h> - -#include "utils.h" -#include "regex2.h" - -/* macros
>> for manipulating states, small version */ -#define states long
>> -#define states1 states /* for later use in regexec() decision */
>> -#define CLEAR(v) ((v) = 0) -#define SET0(v, n) ((v) &= ~((unsigned
>> long)1 << (n))) -#define SET1(v, n) ((v) |= (unsigned long)1 <<
>> (n)) -#define ISSET(v, n) (((v) & ((unsigned long)1 << (n))) != 0)
>> -#define ASSIGN(d, s) ((d) = (s)) -#define EQ(a, b) ((a) == (b))
>> -#define STATEVARS long dummy /* dummy version */ -#define
>> STATESETUP(m, n) /* nothing */ -#define STATETEARDOWN(m) /* nothing
>> */ -#define SETUP(v) ((v) = 0) -#define onestate long -#define
>> INIT(o, n) ((o) = (unsigned long)1 << (n)) -#define INC(o) ((o)
>> <<= 1) -#define ISSTATEIN(v, o) (((v) & (o)) != 0) -/* some
>> abbreviations; note that some of these know variable names! */ -/*
>> do "if I'm here, I can also be there" etc without branches */
>> -#define FWD(dst, src, n) ((dst) |= ((unsigned long)(src)&(here))
>> << (n)) -#define BACK(dst, src, n) ((dst) |= ((unsigned
>> long)(src)&(here)) >> (n)) -#define ISSETBACK(v, n) (((v) &
>> ((unsigned long)here >> (n))) != 0) -/* function names */ -#define
>> SNAMES /* engine.c looks after details */ - -#include "engine.c"
>> - -/* now undo things */ -#undef states -#undef CLEAR -#undef SET0
>> -#undef SET1 -#undef ISSET -#undef ASSIGN -#undef EQ -#undef
>> STATEVARS -#undef STATESETUP -#undef STATETEARDOWN -#undef SETUP
>> -#undef onestate -#undef INIT -#undef INC -#undef ISSTATEIN -#undef
>> FWD -#undef BACK -#undef ISSETBACK -#undef SNAMES - -/* macros for
>> manipulating states, large version */ -#define states char *
>> -#define CLEAR(v) memset(v, 0, m->g->nstates) -#define SET0(v, n)
>> ((v)[n] = 0) -#define SET1(v, n) ((v)[n] = 1) -#define ISSET(v, n)
>> ((v)[n]) -#define ASSIGN(d, s) memcpy(d, s, m->g->nstates) -#define
>> EQ(a, b) (memcmp(a, b, m->g->nstates) == 0) -#define STATEVARS long
>> vn; char *space -#define STATESETUP(m, nv) { (m)->space =
>> malloc((nv)*(m)->g->nstates); \ - if ((m)->space == NULL)
>> return(REG_ESPACE); \ - (m)->vn = 0; } -#define STATETEARDOWN(m)
>> { free((m)->space); } -#define SETUP(v) ((v) = &m->space[m->vn++ *
>> m->g->nstates]) -#define onestate long -#define INIT(o, n) ((o) =
>> (n)) -#define INC(o) ((o)++) -#define ISSTATEIN(v, o) ((v)[o]) -/*
>> some abbreviations; note that some of these know variable names!
>> */ -/* do "if I'm here, I can also be there" etc without branches
>> */ -#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here])
>> -#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here])
>> -#define ISSETBACK(v, n) ((v)[here - (n)]) -/* function names */
>> -#define LNAMES /* flag */ - -#include "engine.c" - -/* - -
>> regexec - interface for matching - * - * We put this here so we can
>> exploit knowledge of the state representation - * when choosing
>> which matcher to call. Also, by this point the matchers - * have
>> been prototyped. - */ -int /* 0 success, REG_NOMATCH failure */
>> -regexec(const regex_t *preg, const char *string, size_t nmatch, -
>> regmatch_t pmatch[], int eflags) -{ - struct re_guts *g =
>> preg->re_g; -#ifdef REDEBUG -# define GOODFLAGS(f) (f) -#else -#
>> define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))
>> -#endif - - if (preg->re_magic != MAGIC1 || g->magic != MAGIC2) -
>> return(REG_BADPAT); - assert(!(g->iflags&BAD)); - if
>> (g->iflags&BAD) /* backstop for no-debug case */ -
>> return(REG_BADPAT); - eflags = GOODFLAGS(eflags); - - if
>> (g->nstates <= (int)(CHAR_BIT*sizeof(states1)) &&
>> !(eflags®_LARGE)) - return(smatcher(g, (char *)string, nmatch,
>> pmatch, eflags)); - else - return(lmatcher(g, (char *)string,
>> nmatch, pmatch, eflags)); -} diff --git a/android/regex/regfree.c
>> b/android/regex/regfree.c deleted file mode 100644 index
>> a57eba3..0000000 --- a/android/regex/regfree.c +++ /dev/null @@
>> -1,71 +0,0 @@ -/* $OpenBSD: regfree.c,v 1.7 2005/08/05 13:03:00
>> espie Exp $ */ -/*- - * Copyright (c) 1992, 1993, 1994 Henry
>> Spencer. - * Copyright (c) 1992, 1993, 1994 - * The Regents of the
>> University of California. All rights reserved. - * - * This code
>> is derived from software contributed to Berkeley by - * Henry
>> Spencer. - * - * Redistribution and use in source and binary forms,
>> with or without - * modification, are permitted provided that the
>> following conditions - * are met: - * 1. Redistributions of source
>> code must retain the above copyright - * notice, this list of
>> conditions and the following disclaimer. - * 2. Redistributions in
>> binary form must reproduce the above copyright - * notice, this
>> list of conditions and the following disclaimer in the - *
>> documentation and/or other materials provided with the
>> distribution. - * 3. Neither the name of the University nor the
>> names of its contributors - * may be used to endorse or promote
>> products derived from this software - * without specific prior
>> written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE
>> REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED
>> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED
>> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
>> BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)regfree.c 8.3
>> (Berkeley) 3/20/94 - */ - -#include <sys/types.h> -#include
>> <stdio.h> -#include <stdlib.h> -#include <regex.h> - -#include
>> "utils.h" -#include "regex2.h" - -/* - - regfree - free everything
>> - */ -void -regfree(regex_t *preg) -{ - struct re_guts *g; - - if
>> (preg->re_magic != MAGIC1) /* oops */ - return; /* nice to
>> complain, but hard */ - - g = preg->re_g; - if (g == NULL ||
>> g->magic != MAGIC2) /* oops again */ - return; - preg->re_magic =
>> 0; /* mark it invalid */ - g->magic = 0; /* mark it invalid */
>> - - if (g->strip != NULL) - free((char *)g->strip); - if (g->sets
>> != NULL) - free((char *)g->sets); - if (g->setbits != NULL) -
>> free((char *)g->setbits); - if (g->must != NULL) - free(g->must);
>> - free((char *)g); -} diff --git a/android/regex/utils.h
>> b/android/regex/utils.h deleted file mode 100644 index
>> 3e184fc..0000000 --- a/android/regex/utils.h +++ /dev/null @@ -1,55
>> +0,0 @@ -/* $OpenBSD: utils.h,v 1.4 2003/06/02 20:18:36 millert Exp
>> $ */ - -/*- - * Copyright (c) 1992, 1993, 1994 Henry Spencer. - *
>> Copyright (c) 1992, 1993, 1994 - * The Regents of the University of
>> California. All rights reserved. - * - * This code is derived from
>> software contributed to Berkeley by - * Henry Spencer. - * - *
>> Redistribution and use in source and binary forms, with or without
>> - * modification, are permitted provided that the following
>> conditions - * are met: - * 1. Redistributions of source code must
>> retain the above copyright - * notice, this list of conditions
>> and the following disclaimer. - * 2. Redistributions in binary form
>> must reproduce the above copyright - * notice, this list of
>> conditions and the following disclaimer in the - * documentation
>> and/or other materials provided with the distribution. - * 3.
>> Neither the name of the University nor the names of its
>> contributors - * may be used to endorse or promote products
>> derived from this software - * without specific prior written
>> permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND
>> CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES,
>> INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF
>> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE
>> DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
>> LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED
>> TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE,
>> DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND
>> ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - *
>> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
>> ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
>> POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)utils.h 8.3 (Berkeley)
>> 3/20/94 - */ - -/* utility definitions */ -#define DUPMAX 255
>> -#define INFINITY (DUPMAX + 1) -#define NC (CHAR_MAX - CHAR_MIN +
>> 1) -typedef unsigned char uch; - -/* switch off assertions (if not
>> already off) if no REDEBUG */ -#ifndef REDEBUG -#ifndef NDEBUG
>> -#define NDEBUG /* no assertions please */ -#endif -#endif
>> -#include <assert.h> - -/* for old systems with bcopy() but no
>> memmove() */ -#ifdef USEBCOPY -#define memmove(d, s, c) bcopy(s, d,
>> c) -#endif diff --git a/make/Makefile.android
>> b/make/Makefile.android index dc56b84..ed0c9e9 100644 ---
>> a/make/Makefile.android +++ b/make/Makefile.android @@ -44,20
>> +44,12 @@ SHAREDIR = $(DESTDIR)$(datarootdir) SRCS += $(wildcard
>> src/unix/*.c src/linux/*.c) HDRS += $(wildcard src/unix/*.h
>> src/linux/*.h)
>>
>> -# Android didn't add regex until android-8 so include this one
>> -REGEX_SRCS = \ - android/regex/regcomp.c \ -
>> android/regex/regerror.c \ - android/regex/regexec.c \ -
>> android/regex/regfree.c -REGEX_OBJS = $(REGEX_SRCS:.c=.o) -
>> CPPFLAGS += -DOLSRD_GLOBAL_CONF_FILE=\"$(CFGFILE)\" # bionic libc:
>> missing declarations CPPFLAGS += -DINET_ADDRSTRLEN=16 CPPFLAGS +=
>> -D'IPTOS_PREC(tos)=((tos)&0xe0)' CPPFLAGS +=
>> -D'IPTOS_TOS(tos)=((tos)&0x1e)' -# Android NDK is missing some
>> Linux headers and regex, we have them here: +# Android NDK is
>> missing some Linux headers: we have them here CPPFLAGS +=
>> -I$(TOPDIR)/android
>>
>> # Compilation flags from build/toolchains/arm-eabi-4.2.1/setup.mk
>> @@ -105,7 +97,7 @@ NDK_BASE = /opt/android-ndk CURRENT_SYSTEM :=
>> $(shell uname -s | tr A-Z a-z) NDK_TOOLCHAIN_BASE =
>> $(NDK_BASE)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/$(CURRENT_SYSTEM)-x86
>>
>>
>>
-NDK_PLATFORM_VERSION = 4
>> +NDK_PLATFORM_VERSION = 8 NDK_SYSROOT =
>> $(NDK_BASE)/platforms/android-$(NDK_PLATFORM_VERSION)/arch-arm
>> CROSS_COMPILE = $(NDK_TOOLCHAIN_BASE)/bin/$(HOST)-
>>
>> @@ -116,19 +108,6 @@ ifeq ($(DEBUG),0) STRIP =
>> $(CROSS_COMPILE)strip endif
>>
>> - -# The Android NDK didn't add proper regex support until
>> android-8 -# (2.2), so we include the Android files here, and build
>> with -# -DPOSIX_MISTAKE like Android does. -$(REGEX_OBJS):
>> $(REGEX_SRCS) - @echo "[CC] $<" - @$(CC) $(CFLAGS) $(CPPFLAGS)
>> -DPOSIX_MISTAKE -c -o $@ $< - -regex: $(REGEX_OBJS) -
>> -regex_clean: - rm -f $(REGEX_OBJS) - # Local Variables: # mode:
>> makefile # End: -- 1.7.11.7
>>
>
--
Ferry Huberts
More information about the Olsr-dev
mailing list