159deaec5SRodney W. Grimes /*- 22321c474SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 32321c474SPedro F. Giffuni * 459deaec5SRodney W. Grimes * Copyright (c) 1992 Henry Spencer. 559deaec5SRodney W. Grimes * Copyright (c) 1992, 1993 659deaec5SRodney W. Grimes * The Regents of the University of California. All rights reserved. 759deaec5SRodney W. Grimes * 859deaec5SRodney W. Grimes * This code is derived from software contributed to Berkeley by 959deaec5SRodney W. Grimes * Henry Spencer of the University of Toronto. 1059deaec5SRodney W. Grimes * 1159deaec5SRodney W. Grimes * Redistribution and use in source and binary forms, with or without 1259deaec5SRodney W. Grimes * modification, are permitted provided that the following conditions 1359deaec5SRodney W. Grimes * are met: 1459deaec5SRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 1559deaec5SRodney W. Grimes * notice, this list of conditions and the following disclaimer. 1659deaec5SRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 1759deaec5SRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 1859deaec5SRodney W. Grimes * documentation and/or other materials provided with the distribution. 19f2556687SWarner Losh * 3. Neither the name of the University nor the names of its contributors 2059deaec5SRodney W. Grimes * may be used to endorse or promote products derived from this software 2159deaec5SRodney W. Grimes * without specific prior written permission. 2259deaec5SRodney W. Grimes * 2359deaec5SRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2459deaec5SRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2559deaec5SRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2659deaec5SRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2759deaec5SRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2859deaec5SRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2959deaec5SRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3059deaec5SRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3159deaec5SRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3259deaec5SRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3359deaec5SRodney W. Grimes * SUCH DAMAGE. 3459deaec5SRodney W. Grimes */ 3559deaec5SRodney W. Grimes 3659deaec5SRodney W. Grimes #ifndef _REGEX_H_ 3759deaec5SRodney W. Grimes #define _REGEX_H_ 3859deaec5SRodney W. Grimes 3959deaec5SRodney W. Grimes #include <sys/cdefs.h> 4049ab7b94SMike Barcroft #include <sys/_types.h> 4159deaec5SRodney W. Grimes 4259deaec5SRodney W. Grimes /* types */ 4349ab7b94SMike Barcroft typedef __off_t regoff_t; 4449ab7b94SMike Barcroft 4549ab7b94SMike Barcroft #ifndef _SIZE_T_DECLARED 4649ab7b94SMike Barcroft typedef __size_t size_t; 4749ab7b94SMike Barcroft #define _SIZE_T_DECLARED 4849ab7b94SMike Barcroft #endif 4959deaec5SRodney W. Grimes 5059deaec5SRodney W. Grimes typedef struct { 5159deaec5SRodney W. Grimes int re_magic; 5259deaec5SRodney W. Grimes size_t re_nsub; /* number of parenthesized subexpressions */ 53f6ab8089SEd Schouten const char *re_endp; /* end pointer for REG_PEND */ 5459deaec5SRodney W. Grimes struct re_guts *re_g; /* none of your business :-) */ 5559deaec5SRodney W. Grimes } regex_t; 5659deaec5SRodney W. Grimes 5759deaec5SRodney W. Grimes typedef struct { 5859deaec5SRodney W. Grimes regoff_t rm_so; /* start of match */ 5959deaec5SRodney W. Grimes regoff_t rm_eo; /* end of match */ 6059deaec5SRodney W. Grimes } regmatch_t; 6159deaec5SRodney W. Grimes 6259deaec5SRodney W. Grimes /* regcomp() flags */ 6359deaec5SRodney W. Grimes #define REG_BASIC 0000 6459deaec5SRodney W. Grimes #define REG_EXTENDED 0001 6559deaec5SRodney W. Grimes #define REG_ICASE 0002 6659deaec5SRodney W. Grimes #define REG_NOSUB 0004 6759deaec5SRodney W. Grimes #define REG_NEWLINE 0010 6859deaec5SRodney W. Grimes #define REG_NOSPEC 0020 6959deaec5SRodney W. Grimes #define REG_PEND 0040 7059deaec5SRodney W. Grimes #define REG_DUMP 0200 71*7c5ec5feSKyle Evans #define REG_POSIX 0400 /* only POSIX-compliant regex (libregex) */ 7259deaec5SRodney W. Grimes 7359deaec5SRodney W. Grimes /* regerror() flags */ 743a5c2520SJordan K. Hubbard #define REG_ENOSYS (-1) 7559deaec5SRodney W. Grimes #define REG_NOMATCH 1 7659deaec5SRodney W. Grimes #define REG_BADPAT 2 7759deaec5SRodney W. Grimes #define REG_ECOLLATE 3 7859deaec5SRodney W. Grimes #define REG_ECTYPE 4 7959deaec5SRodney W. Grimes #define REG_EESCAPE 5 8059deaec5SRodney W. Grimes #define REG_ESUBREG 6 8159deaec5SRodney W. Grimes #define REG_EBRACK 7 8259deaec5SRodney W. Grimes #define REG_EPAREN 8 8359deaec5SRodney W. Grimes #define REG_EBRACE 9 8459deaec5SRodney W. Grimes #define REG_BADBR 10 8559deaec5SRodney W. Grimes #define REG_ERANGE 11 8659deaec5SRodney W. Grimes #define REG_ESPACE 12 8759deaec5SRodney W. Grimes #define REG_BADRPT 13 8859deaec5SRodney W. Grimes #define REG_EMPTY 14 8959deaec5SRodney W. Grimes #define REG_ASSERT 15 9059deaec5SRodney W. Grimes #define REG_INVARG 16 9167aff189STim J. Robbins #define REG_ILLSEQ 17 9259deaec5SRodney W. Grimes #define REG_ATOI 255 /* convert name to number (!) */ 9359deaec5SRodney W. Grimes #define REG_ITOA 0400 /* convert number to name (!) */ 9459deaec5SRodney W. Grimes 9559deaec5SRodney W. Grimes /* regexec() flags */ 9659deaec5SRodney W. Grimes #define REG_NOTBOL 00001 9759deaec5SRodney W. Grimes #define REG_NOTEOL 00002 9859deaec5SRodney W. Grimes #define REG_STARTEND 00004 9959deaec5SRodney W. Grimes #define REG_TRACE 00400 /* tracing of execution */ 10059deaec5SRodney W. Grimes #define REG_LARGE 01000 /* force large representation */ 10159deaec5SRodney W. Grimes #define REG_BACKR 02000 /* force use of backref code */ 10259deaec5SRodney W. Grimes 10359deaec5SRodney W. Grimes __BEGIN_DECLS 10449ab7b94SMike Barcroft int regcomp(regex_t * __restrict, const char * __restrict, int); 10549ab7b94SMike Barcroft size_t regerror(int, const regex_t * __restrict, char * __restrict, size_t); 10696cb3834SMike Barcroft /* 10796cb3834SMike Barcroft * XXX forth parameter should be `regmatch_t [__restrict]', but isn't because 10896cb3834SMike Barcroft * of a bug in GCC 3.2 (when -std=c99 is specified) which perceives this as a 10996cb3834SMike Barcroft * syntax error. 11096cb3834SMike Barcroft */ 11149ab7b94SMike Barcroft int regexec(const regex_t * __restrict, const char * __restrict, size_t, 11296cb3834SMike Barcroft regmatch_t * __restrict, int); 113bb28f3c2SWarner Losh void regfree(regex_t *); 11459deaec5SRodney W. Grimes __END_DECLS 11559deaec5SRodney W. Grimes 11659deaec5SRodney W. Grimes #endif /* !_REGEX_H_ */ 117