94 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git a/arch/aarch64/bits/alltypes.h.in b/arch/aarch64/bits/alltypes.h.in
 | |
| index 99f1654..d56abda 100644
 | |
| --- a/arch/aarch64/bits/alltypes.h.in
 | |
| +++ b/arch/aarch64/bits/alltypes.h.in
 | |
| @@ -16,6 +16,8 @@ TYPEDEF unsigned int nlink_t;
 | |
|  TYPEDEF float float_t;
 | |
|  TYPEDEF double double_t;
 | |
|  
 | |
| +TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
 | |
| +
 | |
|  TYPEDEF long time_t;
 | |
|  TYPEDEF long suseconds_t;
 | |
|  
 | |
| diff --git a/include/float.h b/include/float.h
 | |
| index c6429d3..713aadb 100644
 | |
| --- a/include/float.h
 | |
| +++ b/include/float.h
 | |
| @@ -1,6 +1,10 @@
 | |
|  #ifndef _FLOAT_H
 | |
|  #define _FLOAT_H
 | |
|  
 | |
| +#ifdef __cplusplus
 | |
| +extern "C" {
 | |
| +#endif
 | |
| +
 | |
|  int __flt_rounds(void);
 | |
|  #define FLT_ROUNDS (__flt_rounds())
 | |
|  
 | |
| @@ -41,4 +45,8 @@ int __flt_rounds(void);
 | |
|  
 | |
|  #include <bits/float.h>
 | |
|  
 | |
| +#ifdef __cplusplus
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
|  #endif
 | |
| diff --git a/src/network/inet_pton.c b/src/network/inet_pton.c
 | |
| index 4496b47..d36c368 100644
 | |
| --- a/src/network/inet_pton.c
 | |
| +++ b/src/network/inet_pton.c
 | |
| @@ -39,14 +39,15 @@ int inet_pton(int af, const char *restrict s, void *restrict a0)
 | |
|  	for (i=0; ; i++) {
 | |
|  		if (s[0]==':' && brk<0) {
 | |
|  			brk=i;
 | |
| -			ip[i]=0;
 | |
| +			ip[i&7]=0;
 | |
|  			if (!*++s) break;
 | |
| +			if (i==7) return 0;
 | |
|  			continue;
 | |
|  		}
 | |
|  		for (v=j=0; j<4 && (d=hexval(s[j]))>=0; j++)
 | |
|  			v=16*v+d;
 | |
|  		if (j==0) return 0;
 | |
| -		ip[i] = v;
 | |
| +		ip[i&7] = v;
 | |
|  		if (!s[j] && (brk>=0 || i==7)) break;
 | |
|  		if (i==7) return 0;
 | |
|  		if (s[j]!=':') {
 | |
| diff --git a/src/regex/regcomp.c b/src/regex/regcomp.c
 | |
| index 4cdaa1e..978dd87 100644
 | |
| --- a/src/regex/regcomp.c
 | |
| +++ b/src/regex/regcomp.c
 | |
| @@ -839,7 +839,7 @@ static reg_errcode_t parse_atom(tre_parse_ctx_t *ctx, const char *s)
 | |
|  			s--;
 | |
|  			break;
 | |
|  		default:
 | |
| -			if (isdigit(*s)) {
 | |
| +			if (!ere && (unsigned)*s-'1' < 9) {
 | |
|  				/* back reference */
 | |
|  				int val = *s - '0';
 | |
|  				node = tre_ast_new_literal(ctx->mem, BACKREF, val, ctx->position);
 | |
| @@ -847,7 +847,7 @@ static reg_errcode_t parse_atom(tre_parse_ctx_t *ctx, const char *s)
 | |
|  			} else {
 | |
|  				/* extension: accept unknown escaped char
 | |
|  				   as a literal */
 | |
| -				node = tre_ast_new_literal(ctx->mem, *s, *s, ctx->position);
 | |
| +				goto parse_literal;
 | |
|  			}
 | |
|  			ctx->position++;
 | |
|  		}
 | |
| @@ -1700,6 +1700,11 @@ tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast,
 | |
|  		*result = tre_ast_new_literal(mem, min, max, pos);
 | |
|  		if (*result == NULL)
 | |
|  		  status = REG_ESPACE;
 | |
| +		else {
 | |
| +		  tre_literal_t *p = (*result)->obj;
 | |
| +		  p->class = lit->class;
 | |
| +		  p->neg_classes = lit->neg_classes;
 | |
| +		}
 | |
|  
 | |
|  		if (pos > *max_pos)
 | |
|  		  *max_pos = pos;
 | 
