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;
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;
}
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));
/* 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 */
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);