VM: fixes so that raw_fread and safe_fread returns a size_t again

db4
Björn Lindqvist 2015-06-05 02:11:28 +02:00
parent 428937dbeb
commit 40b7805e0a
3 changed files with 9 additions and 8 deletions

View File

@ -13,7 +13,8 @@ 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. */
int raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
size_t raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
FACTOR_ASSERT(nitems > 0);
size_t items_read = 0;
do {
@ -24,7 +25,7 @@ int raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
break;
}
else if (errno != EINTR) {
return -1;
return 0;
}
}
items_read += ret;
@ -82,10 +83,10 @@ int factor_vm::safe_fgetc(FILE* stream) {
return c;
}
int factor_vm::safe_fread(void* ptr, size_t size, size_t nitems,
size_t factor_vm::safe_fread(void* ptr, size_t size, size_t nitems,
FILE* stream) {
int ret = raw_fread(ptr, size, nitems, stream);
if (ret == -1)
size_t ret = raw_fread(ptr, size, nitems, stream);
if (ret == 0 && !feof(stream))
io_error_if_not_EINTR();
return ret;
}
@ -199,7 +200,7 @@ void factor_vm::primitive_fread() {
ctx->push(from_unsigned_cell(0));
return;
}
int c = safe_fread(buf, 1, size, file);
size_t c = safe_fread(buf, 1, size, file);
if (c == 0 || feof(file))
clearerr(file);
ctx->push(from_unsigned_cell(c));

View File

@ -2,7 +2,7 @@ namespace factor {
/* Safe IO functions that does not throw Factor errors. */
int raw_fclose(FILE* stream);
int raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
size_t raw_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
/* Platform specific primitives */

View File

@ -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);
int safe_fread(void* ptr, size_t size, size_t nitems, FILE* stream);
size_t 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);