From 9c8bcfe4e6f8ec12552edae7b2afa0a9a21d8861 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Tue, 16 Nov 2010 12:56:57 +1000 Subject: [source] now opens the script file in text mode This allows scripts with CRLF line endings on (e.g.) cygwin to work without change. Signed-off-by: Steve Bennett --- jim.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'jim.c') diff --git a/jim.c b/jim.c index 8ca27cb..c9147f4 100644 --- a/jim.c +++ b/jim.c @@ -9870,7 +9870,7 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) int readlen; char missing; - if (stat(filename, &sb) != 0 || (fp = fopen(filename, "r")) == NULL) { + if (stat(filename, &sb) != 0 || (fp = fopen(filename, "rt")) == NULL) { Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", filename, strerror(errno)); return JIM_ERR; } @@ -9880,13 +9880,15 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) } buf = Jim_Alloc(sb.st_size + 1); - readlen = fread(buf, sb.st_size, 1, fp); - fclose(fp); - if (readlen != 1) { + readlen = fread(buf, 1, sb.st_size, fp); + if (ferror(fp)) { + fclose(fp); Jim_Free(buf); + Jim_SetResultFormatted(interp, "failed to load file \"%s\": %s", filename, strerror(errno)); return JIM_ERR; } - buf[sb.st_size] = 0; + fclose(fp); + buf[readlen] = 0; if (!Jim_ScriptIsComplete(buf, sb.st_size, &missing)) { Jim_SetResultFormatted(interp, "missing %s in \"%s\"", @@ -9895,7 +9897,7 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) return JIM_ERR; } - scriptObjPtr = Jim_NewStringObjNoAlloc(interp, buf, sb.st_size); + scriptObjPtr = Jim_NewStringObjNoAlloc(interp, buf, readlen); JimSetSourceInfo(interp, scriptObjPtr, filename, 1); Jim_IncrRefCount(scriptObjPtr); -- cgit v1.1