aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-11-16 12:56:57 +1000
committerSteve Bennett <steveb@workware.net.au>2010-11-17 07:23:39 +1000
commit9c8bcfe4e6f8ec12552edae7b2afa0a9a21d8861 (patch)
treedb0b4cf6a990725160c811c47aea94e9fd9c403b
parentacb85448a17708101ed2a7aa8fda71ab0794877a (diff)
downloadjimtcl-9c8bcfe4e6f8ec12552edae7b2afa0a9a21d8861.zip
jimtcl-9c8bcfe4e6f8ec12552edae7b2afa0a9a21d8861.tar.gz
jimtcl-9c8bcfe4e6f8ec12552edae7b2afa0a9a21d8861.tar.bz2
[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 <steveb@workware.net.au>
-rw-r--r--jim.c14
1 files changed, 8 insertions, 6 deletions
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);