1 /* $FreeBSD: head/usr.bin/grep/regex/glue.h 296799 2016-03-13 14:53:12Z ian $ */ 2 3 #ifndef GLUE_H 4 #define GLUE_H 5 6 #include <limits.h> 7 #undef RE_DUP_MAX 8 #include <regex.h> 9 #include <stdio.h> 10 #include <stdlib.h> 11 12 #define TRE_WCHAR 1 13 #define TRE_MULTIBYTE 1 14 #define HAVE_MBSTATE_T 1 15 16 #define TRE_CHAR(n) L##n 17 #define CHF "%lc" 18 19 #define tre_char_t wchar_t 20 #define tre_mbrtowc(pwc, s, n, ps) (mbrtowc((pwc), (s), (n), (ps))) 21 #define tre_strlen wcslen 22 #define tre_isspace iswspace 23 #define tre_isalnum iswalnum 24 25 #define REG_OK 0 26 #define REG_LITERAL 0020 27 #define REG_WORD 0100 28 #define REG_GNU 0400 29 30 #define TRE_MB_CUR_MAX MB_CUR_MAX 31 32 #ifndef _GREP_DEBUG 33 #define DPRINT(msg) 34 #else 35 #define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/0) 36 #endif 37 38 #define MIN(a,b) ((a > b) ? (b) : (a)) 39 #define MAX(a,b) ((a > b) ? (a) : (b)) 40 41 typedef enum { STR_WIDE, STR_BYTE, STR_MBS, STR_USER } tre_str_type_t; 42 43 #define CALL_WITH_OFFSET(fn) \ 44 do \ 45 { \ 46 size_t slen = (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so); \ 47 size_t offset = pmatch[0].rm_so; \ 48 int ret; \ 49 \ 50 if ((long long)pmatch[0].rm_eo - pmatch[0].rm_so < 0) \ 51 return REG_NOMATCH; \ 52 ret = fn; \ 53 for (unsigned i = 0; (!preg->nosub && (i < nmatch)); i++) \ 54 { \ 55 pmatch[i].rm_so += offset; \ 56 pmatch[i].rm_eo += offset; \ 57 } \ 58 return ret; \ 59 } while (0 /*CONSTCOND*/) 60 61 int 62 tre_convert_pattern(const char *regex, size_t n, tre_char_t **w, 63 size_t *wn); 64 65 void 66 tre_free_pattern(tre_char_t *wregex); 67 #endif 68