diff options
Diffstat (limited to 'tools/re2c/substr.c')
-rw-r--r-- | tools/re2c/substr.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tools/re2c/substr.c b/tools/re2c/substr.c new file mode 100644 index 0000000..c750fb9 --- /dev/null +++ b/tools/re2c/substr.c @@ -0,0 +1,65 @@ +#include <string.h> +#include "tools/re2c/substr.h" +#include "tools/re2c/globals.h" + +void +SubStr_out(const SubStr *s, FILE *o) +{ + unsigned int i; + fwrite(s->str, s->len, 1, o); + for (i=0; i<s->len; i++) + if (s->str[i] == '\n') + oline++; +} + +int +SubStr_eq(const SubStr *s1, const SubStr *s2) +{ + return (s1->len == s2->len && memcmp(s1->str, s2->str, s1->len) == 0); +} + +void +Str_init(Str *r, const SubStr* s) +{ + SubStr_init(r, malloc(sizeof(char)*s->len), s->len); + memcpy(r->str, s->str, s->len); +} + +Str * +Str_new(const SubStr* s) +{ + Str *r = SubStr_new(malloc(sizeof(char)*s->len), s->len); + memcpy(r->str, s->str, s->len); + return r; +} + +void +Str_copy(Str *r, Str* s) +{ + SubStr_init(r, s->str, s->len); + s->str = NULL; + s->len = 0; +} + +Str * +Str_new_copy(Str* s) +{ + Str *r = SubStr_new(s->str, s->len); + s->str = NULL; + s->len = 0; + return r; +} + +Str * +Str_new_empty(void) +{ + return SubStr_new(NULL, 0); +} + + +void Str_delete(Str *s) { + free(s->str); + s->str = (char*)-1; + s->len = (unsigned int)-1; + free(s); +} |