1#include <string.h> 2#include "tools/re2c/substr.h" 3#include "tools/re2c/globals.h" 4 5void 6SubStr_out(const SubStr *s, FILE *o) 7{ 8 unsigned int i; 9 fwrite(s->str, s->len, 1, o); 10 for (i=0; i<s->len; i++) 11 if (s->str[i] == '\n') 12 oline++; 13} 14 15int 16SubStr_eq(const SubStr *s1, const SubStr *s2) 17{ 18 return (s1->len == s2->len && memcmp(s1->str, s2->str, s1->len) == 0); 19} 20 21void 22Str_init(Str *r, const SubStr* s) 23{ 24 SubStr_init(r, malloc(sizeof(char)*s->len), s->len); 25 memcpy(r->str, s->str, s->len); 26} 27 28Str * 29Str_new(const SubStr* s) 30{ 31 Str *r = SubStr_new(malloc(sizeof(char)*s->len), s->len); 32 memcpy(r->str, s->str, s->len); 33 return r; 34} 35 36void 37Str_copy(Str *r, Str* s) 38{ 39 SubStr_init(r, s->str, s->len); 40 s->str = NULL; 41 s->len = 0; 42} 43 44Str * 45Str_new_copy(Str* s) 46{ 47 Str *r = SubStr_new(s->str, s->len); 48 s->str = NULL; 49 s->len = 0; 50 return r; 51} 52 53Str * 54Str_new_empty(void) 55{ 56 return SubStr_new(NULL, 0); 57} 58 59 60void Str_delete(Str *s) { 61 free(s->str); 62 s->str = (char*)-1; 63 s->len = (unsigned int)-1; 64 free(s); 65} 66