From f414175e0cf08e02d65ca09028641ac2adbd0f8e Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Tue, 20 Feb 2018 22:21:46 -0500 Subject: stdlib independence, fixes for calculator --- variable.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'variable.c') diff --git a/variable.c b/variable.c index 620a4b6..38b771b 100644 --- a/variable.c +++ b/variable.c @@ -1,12 +1,33 @@ #include "variable.h" #include "parser.h" -#include #include +#include +#include + +extern int atoi(const char *); extern char *str_undef; extern char *str_func; +char *fixstring(char *s) +{ + int len = strlen(s); + char *n = malloc(len + 1); + int i, j; + for (i = 0, j = 0; s[i] != '\0'; i++, j++) { + if (s[i] == '\\') { + if (s[i + 1] == 'n') + n[j] = '\n'; + i++; + } else { + n[j] = s[i]; + } + } + n[j] = '\0'; + return n; +} + variable *vmake(uint8_t fromc, uint8_t valtype, void *value) { variable *v = (variable *)malloc(sizeof(variable)); @@ -18,7 +39,8 @@ variable *vmake(uint8_t fromc, uint8_t valtype, void *value) switch (valtype) { case STRING: v->value = 0; - v->svalue = value; + v->svalue = fixstring(value); + free(value); break; case INTEGER: INT(v) = (int32_t)value; -- cgit v1.2.3