diff options
Diffstat (limited to 'usr/src/head/regex.h')
-rw-r--r-- | usr/src/head/regex.h | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/usr/src/head/regex.h b/usr/src/head/regex.h new file mode 100644 index 0000000000..6c20c3a802 --- /dev/null +++ b/usr/src/head/regex.h @@ -0,0 +1,170 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright 1989, 1994 by Mortice Kern Systems Inc. + * All rights reserved. + */ + +#ifndef _REGEX_H +#define _REGEX_H + +#pragma ident "%Z%%M% %I% %E% SMI" + +#include <sys/feature_tests.h> +#include <sys/types.h> + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * wchar_t is a built-in type in standard C++ and as such is not + * defined here when using standard C++. However, the GNU compiler + * fixincludes utility nonetheless creates it's own version of this + * header for use by gcc and g++. In that version it adds a redundant + * guard for __cplusplus. To avoid the creation of a gcc/g++ specific + * header we need to include the following magic comment: + * + * we must use the C++ compiler's type + * + * The above comment should not be removed or changed until GNU + * gcc/fixinc/inclhack.def is updated to bypass this header. + */ +#if !defined(__cplusplus) || (__cplusplus < 199711L && !defined(__GNUG__)) +#ifndef _WCHAR_T +#define _WCHAR_T +#if defined(_LP64) +typedef int wchar_t; +#else +typedef long wchar_t; +#endif +#endif /* !_WCHAR_T */ +#endif /* !defined(__cplusplus) ... */ + +typedef ssize_t regoff_t; + +/* regcomp flags */ +#define REG_EXTENDED 0x01 /* Use Extended Regular Expressions */ +#define REG_NEWLINE 0x08 /* Treat \n as regular character */ +#define REG_ICASE 0x04 /* Ignore case in match */ +#define REG_NOSUB 0x02 /* Don't set subexpression */ +#define REG_EGREP 0x1000 /* running as egrep(1) */ + +/* non-standard flags */ +#define REG_DELIM 0x10 /* string[0] is delimiter */ +#define REG_DEBUG 0x20 /* Debug recomp and regexec */ +#define REG_ANCHOR 0x40 /* Implicit ^ and $ */ +#define REG_WORDS 0x80 /* \< and \> match word boundries */ + +/* internal flags */ +#define REG_MUST 0x100 /* check for regmust substring */ + +/* regexec flags */ +#define REG_NOTBOL 0x200 /* string is not BOL */ +#define REG_NOTEOL 0x400 /* string has no EOL */ +#define REG_NOOPT 0x800 /* don't do regmust optimization */ + +/* regcomp and regexec return codes */ +#define REG_OK 0 /* success (non-standard) */ +#define REG_NOMATCH 1 /* regexec failed to match */ +#define REG_ECOLLATE 2 /* invalid collation element ref. */ +#define REG_EESCAPE 3 /* trailing \ in pattern */ +#define REG_ENEWLINE 4 /* \n found before end of pattern */ +#define REG_ENSUB 5 /* more than 9 \( \) pairs (OBS) */ +#define REG_ESUBREG 6 /* number in \[0-9] invalid */ +#define REG_EBRACK 7 /* [ ] imbalance */ +#define REG_EPAREN 8 /* ( ) imbalance */ +#define REG_EBRACE 9 /* \{ \} imbalance */ +#define REG_ERANGE 10 /* invalid endpoint in range */ +#define REG_ESPACE 11 /* no memory for compiled pattern */ +#define REG_BADRPT 12 /* invalid repetition */ +#define REG_ECTYPE 13 /* invalid char-class type */ +#define REG_BADPAT 14 /* syntax error */ +#define REG_BADBR 15 /* \{ \} contents bad */ +#define REG_EFATAL 16 /* internal error, not POSIX.2 */ +#define REG_ECHAR 17 /* invalid mulitbyte character */ +#define REG_STACK 18 /* backtrack stack overflow */ +#define REG_ENOSYS 19 /* function not supported (XPG4) */ +#define REG__LAST 20 /* first unused code */ +#define REG_EBOL 21 /* ^ anchor and not BOL */ +#define REG_EEOL 22 /* $ anchor and not EOL */ +#define _REG_BACKREF_MAX 9 /* Max # of subexp. backreference */ + +typedef struct { /* regcomp() data saved for regexec() */ + size_t re_nsub; /* # of subexpressions in RE pattern */ + + /* + * Internal use only + */ + void *re_comp; /* compiled RE; freed by regfree() */ + int re_cflags; /* saved cflags for regexec() */ + size_t re_erroff; /* RE pattern error offset */ + size_t re_len; /* # wchar_t chars in compiled pattern */ + struct _regex_ext_t *re_sc; /* for binary compatibility */ +} regex_t; + +/* subexpression positions */ +typedef struct { +#ifdef __STDC__ + const char *rm_sp, *rm_ep; /* Start pointer, end pointer */ +#else + char *rm_sp, *rm_ep; /* Start pointer, end pointer */ +#endif + regoff_t rm_so, rm_eo; /* Start offset, end offset */ + int rm_ss, rm_es; /* Used internally */ +} regmatch_t; + + +/* + * Additional API and structs to support regular expression manipulations + * on wide characters. + */ + +#if defined(__STDC__) + +extern int regcomp(regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, int); +extern int regexec(const regex_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD, + size_t, regmatch_t *_RESTRICT_KYWD, int); +extern size_t regerror(int, const regex_t *_RESTRICT_KYWD, + char *_RESTRICT_KYWD, size_t); +extern void regfree(regex_t *); + +#else /* defined(__STDC__) */ + +extern int regcomp(); +extern int regexec(); +extern size_t regerror(); +extern void regfree(); + +#endif /* defined(__STDC__) */ + +#ifdef __cplusplus +} +#endif + +#endif /* _REGEX_H */ |