Index: src/OFFile.m ================================================================== --- src/OFFile.m +++ src/OFFile.m @@ -95,27 +95,33 @@ return self; } - free { - fclose(fp); + if (fp != NULL) + fclose(fp); return [super free]; } - (BOOL)atEndOfFile { + if (fp == NULL) + return YES; + return (feof(fp) == 0 ? NO : YES); } - (size_t)readNItems: (size_t)nitems ofSize: (size_t)size intoBuffer: (char*)buf { size_t ret; - if ((ret = fread(buf, size, nitems, fp)) == 0 && !feof(fp)) + if (fp == NULL || feof(fp) || + ((ret = fread(buf, size, nitems, fp)) == 0 && + size != 0 && nitems != 0 && !feof(fp))) @throw [OFReadFailedException newWithClass: isa andSize: size andNItems: nitems]; return ret; @@ -133,12 +139,13 @@ ofSize: (size_t)size fromBuffer: (const char*)buf { size_t ret; - if ((ret = fwrite(buf, size, nitems, fp)) == 0 && - size != 0 && nitems != 0) + if (fp == NULL || feof(fp) || + ((ret = fwrite(buf, size, nitems, fp)) < nitems && + size != 0 && nitems != 0)) @throw [OFWriteFailedException newWithClass: isa andSize: size andNItems: nitems]; return ret;