diff options
| author | Dmitry Mikhirev | 2014-11-17 19:31:51 +0300 | 
|---|---|---|
| committer | Dmitry Mikhirev | 2014-11-17 19:31:51 +0300 | 
| commit | d09171fe28b0b29f90cdf3fe2ebe03c39365cddd (patch) | |
| tree | 8a7e23d2cb52a62e30bedaee061d1dbdad9b02e6 | |
| parent | a82fb28ede37a9e81cfca1b99b18c04746bcede5 (diff) | |
| download | make_pcre-d09171fe28b0b29f90cdf3fe2ebe03c39365cddd.tar.gz make_pcre-d09171fe28b0b29f90cdf3fe2ebe03c39365cddd.tar.bz2 make_pcre-d09171fe28b0b29f90cdf3fe2ebe03c39365cddd.tar.xz make_pcre-d09171fe28b0b29f90cdf3fe2ebe03c39365cddd.zip | |
handle some possible errors
| -rw-r--r-- | pcre.c | 33 | 
1 files changed, 29 insertions, 4 deletions
| @@ -33,9 +33,10 @@ char *match(const char *name, int argc, char **argv)  	char *pat = NULL;    /* expanded pattern */  	char *p;             /* iteration pointer */  	int co = 0;          /* pattern compilation options */ +	int b;               /* PCRE configuration option value */  	pcre *re;            /* compiled regexp */  	const char *err;     /* compilation error */ -	int erroffset;       /* offset of pattern character whwre error occured */ +	int erroffset;       /* offset of pattern character where error occured */  	char *str = NULL;    /* expanded subject string */  	int ncap = 0;        /* number of captured substrings */  	int ovec[MAX_CAP*3]; /* ovector */ @@ -58,7 +59,18 @@ char *match(const char *name, int argc, char **argv)  				co |= PCRE_DOTALL;  				break;  			case 'u': /* use Unicode properties */ -				co |= PCRE_UCP; +				pcre_config(PCRE_CONFIG_UNICODE_PROPERTIES, +						&b); +				if (b) { +					co |= PCRE_UCP; +				} else { +					fprintf(stderr, "%s: PCRE library " +							"does not support " +							"Unicode properties, " +							"`%c' option is " +							"unavailable\n", +							name, *p); +				}  				break;  			case 'U': /* ungreedy quantifiers */  				co |= PCRE_UNGREEDY; @@ -70,7 +82,17 @@ char *match(const char *name, int argc, char **argv)  				co |= PCRE_EXTRA;  				break;  			case '8': /* UTF-8 */ -				co |= PCRE_UTF8; +				pcre_config(PCRE_CONFIG_UTF8, &b); +				if (b) { +					co |= PCRE_UTF8; +				} else { +					fprintf(stderr, "%s: PCRE library " +							"does not support " +							"UTF-8, " +							"`%c' option is " +							"unavailable\n", +							name, *p); +				}  				break;  			default: /* unknown option */  				fprintf(stderr, "%s: unknown option `%c'\n", @@ -95,9 +117,12 @@ char *match(const char *name, int argc, char **argv)  	str = gmk_expand(argv[1]);  	ncap = pcre_exec(re, NULL, str, strlen(str), 0, 0, ovec, MAX_CAP*3);  	pcre_free(re); +	if (ncap < 0) { /* error occured */ +		fprintf(stderr, "%s: pattern matching error: %d\n", name, ncap); +	}  end_match: -	if (ncap) { /* set retstr to matched substring */ +	if (ncap > 0) { /* set retstr to matched substring */  		int len = ovec[1] - ovec[0];  		retstr = gmk_alloc(len + 1);  		strncpy(retstr, str + ovec[0], len); | 
