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 +#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;