aboutsummaryrefslogtreecommitdiff
path: root/tools/re2c/substr.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/re2c/substr.c')
-rw-r--r--tools/re2c/substr.c65
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);
+}