]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: safe_fread needs to return an int so you can return -1 on error
authorBjörn Lindqvist <bjourne@gmail.com>
Sun, 31 May 2015 22:21:32 +0000 (00:21 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Fri, 5 Jun 2015 00:14:49 +0000 (02:14 +0200)
vm/io.cpp
vm/io.hpp
vm/vm.hpp

index bdb50ac3fbe39b73ff3c9517eca40b52d4e9b5a0..7d640a18a085b4ad1920a89f5622219f30bc68e9 100644 (file)
--- a/vm/io.cpp
+++ b/vm/io.cpp
@@ -13,18 +13,18 @@ The Factor library provides platform-specific code for Unix and Windows
 with many more capabilities so these words are not usually used in
 normal operation. */
 
-size_t raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
+int raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
   size_t items_read = 0;
-  size_t ret = 0;
 
   do {
-    ret = fread((void*)((int*)ptr + items_read * size), size,
-                nitems - items_read, stream);
+    size_t ret = fread((void*)((int*)ptr + items_read * size), size,
+                       nitems - items_read, stream);
     if (ret == 0) {
-      if (feof(stream))
+      if (feof(stream)) {
         break;
+      }
       else if (errno != EINTR) {
-        return 0;
+        return -1;
       }
     }
     items_read += ret;
@@ -82,10 +82,10 @@ int factor_vm::safe_fgetc(FILE* stream) {
   return c;
 }
 
-size_t factor_vm::safe_fread(void* ptr, size_t size, size_t nitems,
+int factor_vm::safe_fread(void* ptr, size_t size, size_t nitems,
                              FILE* stream) {
-  size_t ret = raw_fread(ptr, size, nitems, stream);
-  if (!ret)
+  int ret = raw_fread(ptr, size, nitems, stream);
+  if (ret == -1)
     io_error_if_not_EINTR();
   return ret;
 }
@@ -199,8 +199,7 @@ void factor_vm::primitive_fread() {
     ctx->push(from_unsigned_cell(0));
     return;
   }
-
-  size_t c = safe_fread(buf, 1, size, file);
+  int c = safe_fread(buf, 1, size, file);
   if (c == 0 || feof(file))
     clearerr(file);
   ctx->push(from_unsigned_cell(c));
index 59b847159d499a47ccd6603ce89dc47b219f379f..57f7b19f8306faf78fa42cfd718d6576581e9bed 100644 (file)
--- a/vm/io.hpp
+++ b/vm/io.hpp
@@ -2,7 +2,7 @@ namespace factor {
 
 /* Safe IO functions that does not throw Factor errors. */
 int raw_fclose(FILE* stream);
-size_t raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
+int raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
 
 /* Platform specific primitives */
 
index a0a9a142d42d860f29edb45083b5b4504909e7ab..1d68ed4a61ec12475fc5c8b87dc68049a63f7d64 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -540,7 +540,7 @@ struct factor_vm {
   void io_error_if_not_EINTR();
   FILE* safe_fopen(char* filename, char* mode);
   int safe_fgetc(FILE* stream);
-  size_t safe_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
+  int safe_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
   void safe_fputc(int c, FILE* stream);
   size_t safe_fwrite(void* ptr, size_t size, size_t nitems, FILE* stream);
   int safe_ftell(FILE* stream);