[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&REG_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&REG_NOSUB) -		nmatch = 0; -	if (eflags&REG_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&REG_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&REG_NOTBOL))
>> || -					(sp < m->endp && *(sp-1) == '\n' && -
>> (m->g->cflags&REG_NEWLINE)) ) -				{ /* yes */ } -			else -
>> return(NULL); -			break; -		case OEOL: -			if ( (sp == m->endp &&
>> !(m->eflags&REG_NOTEOL)) || -					(sp < m->endp && *sp == '\n' && -
>> (m->g->cflags&REG_NEWLINE)) ) -				{ /* yes */ } -			else -
>> return(NULL); -			break; -		case OBOW: -			if (( (sp == m->beginp
>> && !(m->eflags&REG_NOTBOL)) || -					(sp < m->endp && *(sp-1) ==
>> '\n' && -						(m->g->cflags&REG_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&REG_NOTEOL)) || -					(sp < m->endp && *sp == '\n' && -
>> (m->g->cflags&REG_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&REG_NEWLINE) || -				(lastc == OUT &&
>> !(m->eflags&REG_NOTBOL)) ) { -			flagch = BOL; -			i = m->g->nbol;
>> -		} -		if ( (c == '\n' && m->g->cflags&REG_NEWLINE) || -				(c ==
>> OUT && !(m->eflags&REG_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&REG_NEWLINE) || -				(lastc == OUT &&
>> !(m->eflags&REG_NOTBOL)) ) { -			flagch = BOL; -			i = m->g->nbol;
>> -		} -		if ( (c == '\n' && m->g->cflags&REG_NEWLINE) || -				(c ==
>> OUT && !(m->eflags&REG_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&REG_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&REG_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&REG_EXTENDED)
>> && (cflags&REG_NOSPEC)) -		return(REG_INVARG); - -	if
>> (cflags&REG_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&REG_EXTENDED) -
>> p_ere(p, OUT); -	else if (cflags&REG_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&REG_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&REG_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&REG_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&REG_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&REG_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&REG_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&REG_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