From 74b80b4aca87ce93c0d7212f0fa4ac4e517edb31 Mon Sep 17 00:00:00 2001 From: Justin Meza Date: Mon, 5 May 2014 11:30:35 -0400 Subject: [PATCH] updated some library code --- binding.c | 23 +++++++++++++++++------ interpreter.c | 4 ++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/binding.c b/binding.c index 61398b2..fadafe3 100644 --- a/binding.c +++ b/binding.c @@ -1,5 +1,5 @@ #include "binding.h" -#include "inet.h" /* for SOCKS */ +#include "inet.h" /* for sockets */ ValueObject *getArg(struct scopeobject *scope, char *name) { @@ -98,8 +98,9 @@ ReturnObject *ireceiveWrapper(struct scopeobject *scope) inet_host_t *remote = (inet_host_t *)getBlob(arg2); int amount = getInteger(arg3); - char *data = malloc(sizeof(char) * amount); - inet_receive(remote, local, data, amount, -1); + char *data = malloc(sizeof(char) * (amount + 1)); + int len = inet_receive(remote, local, data, amount, -1); + data[len] = '\0'; ValueObject *ret = createStringValueObject(data); return createReturnObject(RT_RETURN, ret); @@ -125,9 +126,9 @@ ReturnObject *freadWrapper(struct scopeobject *scope) FILE *file = (FILE *)getBlob(arg1); int length = getInteger(arg2); - char *buf = malloc((sizeof(char) * length) + 1); - fread(buf, 1, length, file); - buf[length] = '\0'; + char *buf = malloc(sizeof(char) * (length + 1)); + int len = fread(buf, 1, length, file); + buf[len] = '\0'; ValueObject *ret = createStringValueObject(buf); return createReturnObject(RT_RETURN, ret); @@ -155,6 +156,15 @@ ReturnObject *fcloseWrapper(struct scopeobject *scope) return createReturnObject(RT_DEFAULT, NULL); } +ReturnObject *ferrorWrapper(struct scopeobject *scope) +{ + ValueObject *arg1 = getArg(scope, "file"); + FILE *file = (FILE *)getBlob(arg1); + + ValueObject *ret = createBooleanValueObject(file == NULL || ferror(file)); + return createReturnObject(RT_RETURN, ret); +} + ReturnObject *rewindWrapper(struct scopeobject *scope) { ValueObject *arg1 = getArg(scope, "file"); @@ -208,6 +218,7 @@ void loadLibrary(ScopeObject *scope, IdentifierNode *target) if (!lib) goto loadLibraryAbort; loadBinding(lib, "OPEN", "filename mode", &fopenWrapper); + loadBinding(lib, "DIAF", "file", &ferrorWrapper); loadBinding(lib, "LUK", "file length", &freadWrapper); loadBinding(lib, "SCRIBBEL", "file data", &fwriteWrapper); loadBinding(lib, "AGEIN", "file", &rewindWrapper); diff --git a/interpreter.c b/interpreter.c index a11a7b3..1553858 100644 --- a/interpreter.c +++ b/interpreter.c @@ -1406,6 +1406,10 @@ ValueObject *castStringExplicit(ValueObject *node, temp[a] = '\n'; a++, b += 2; } + else if (!strncmp(str + b, ":3", 2)) { + temp[a] = '\r'; + a++, b += 2; + } else if (!strncmp(str + b, ":>", 2)) { temp[a] = '\t'; a++, b += 2;