This fixes problems with NULs in files being scanned, but costs +800 bytes. The same can be done to sed (TODO).
		
			
				
	
	
		
			33 lines
		
	
	
		
			777 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			777 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* vi: set sw=4 ts=4: */
 | |
| /*
 | |
|  * Utility routines.
 | |
|  *
 | |
|  * Copyright (C) many different people.
 | |
|  * If you wrote this, please acknowledge your work.
 | |
|  *
 | |
|  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
 | |
|  */
 | |
| 
 | |
| #include "libbb.h"
 | |
| #include "xregex.h"
 | |
| 
 | |
| char* FAST_FUNC regcomp_or_errmsg(regex_t *preg, const char *regex, int cflags)
 | |
| {
 | |
| 	int ret = regcomp(preg, regex, cflags);
 | |
| 	if (ret) {
 | |
| 		int errmsgsz = regerror(ret, preg, NULL, 0);
 | |
| 		char *errmsg = xmalloc(errmsgsz);
 | |
| 		regerror(ret, preg, errmsg, errmsgsz);
 | |
| 		return errmsg;
 | |
| 	}
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| void FAST_FUNC xregcomp(regex_t *preg, const char *regex, int cflags)
 | |
| {
 | |
| 	char *errmsg = regcomp_or_errmsg(preg, regex, cflags);
 | |
| 	if (errmsg) {
 | |
| 		bb_error_msg_and_die("bad regex '%s': %s", regex, errmsg);
 | |
| 	}
 | |
| }
 |