From: Matthias Braun Date: Thu, 14 Apr 2011 13:40:08 +0000 (+0200) Subject: assume regex.h exists X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;ds=sidebyside;h=6834cc9ecf59e73256d3f600613bf694686853d2;p=libfirm assume regex.h exists --- diff --git a/ir/stat/statev.c b/ir/stat/statev.c index 4d5c9e16f..96e20a65a 100644 --- a/ir/stat/statev.c +++ b/ir/stat/statev.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "util.h" #include "stat_timing.h" @@ -41,10 +42,6 @@ #ifndef DISABLE_STATEV -#ifdef HAVE_REGEX_H -#define FIRM_HAVE_REGEX -#endif - #define MAX_TIMER 256 static FILE* stat_ev_file = NULL; @@ -54,8 +51,6 @@ int stat_ev_timer_sp = 0; timing_ticks_t stat_ev_timer_elapsed[MAX_TIMER]; timing_ticks_t stat_ev_timer_start[MAX_TIMER]; -#ifdef FIRM_HAVE_REGEX -#include static regex_t regex; static regex_t *filter = NULL; static inline int key_matches(const char *key) @@ -66,22 +61,6 @@ static inline int key_matches(const char *key) return regexec(filter, key, 0, NULL, 0) == 0; } -#else -static char filter[128] = { '\0' }; -static inline int key_matches(const char *key) -{ - int i = 0; - - for (i = 0; filter[i] != '\0'; ++i) { - if (key[i] != filter[i]) - return 0; - } - - return 1; -} -#endif /* FIRM_HAVE_REGEX */ - - void stat_ev_printf(char ev, const char *key, const char *fmt, ...) { if (!key_matches(key)) @@ -108,13 +87,9 @@ void stat_ev_begin(const char *prefix, const char *filt) stat_ev_file = fopen(buf, "wt"); if (filt && filt[0] != '\0') { -#ifdef FIRM_HAVE_REGEX filter = NULL; if (regcomp(®ex, filt, REG_EXTENDED) == 0) filter = ®ex; -#else - strncpy(filter, filt, sizeof(filter) - sizeof(filter[0])); -#endif /* FIRM_HAVE_REGEX */ } stat_ev_enabled = stat_ev_file != NULL; @@ -125,6 +100,9 @@ void stat_ev_end(void) if (stat_ev_file) { fclose(stat_ev_file); } + if (filter != NULL) + regfree(filter); + regfree(filter); } #endif diff --git a/win32/regex.h b/win32/regex.h new file mode 100644 index 000000000..e7337bc2a --- /dev/null +++ b/win32/regex.h @@ -0,0 +1,42 @@ +#ifndef REGEX_H +#define REGEX_H + +#include +#include +#include + +/* naive and wrong regex stubs */ +typedef struct regex_t { + char *pattern; +} regex_t; + +#define REG_EXTENDED 1 +#define REG_ICASE 2 +#define REG_NOSUB 4 +#define REG_NEWLINE 8 + +int regcomp(regex_t *regex, const char *pattern, int cflags) +{ + size_t len = strlen(pattern)+1; + (void) cflags; + regex->pattern = malloc(len); + memcpy(regex->pattern, pattern, len); +} + +int regexec(const regex_t *regex, const char *haystack, int flags) +{ + size_t i = 0; + const char *pattern = regex->pattern; + for (i = 0; pattern[i] != '\0'; ++i) { + if (pattern[i] != haystack[i]) + return 0; + } + return 1; +} + +void regfree(regex_t *regex) +{ + free(regex->pattern); +} + +#endif