sqInt sqFileAtEnd(SQFile *f) { win32FileOffset ofs; /* Return true if the file's read/write head is at the end of the file. */ if (!sqFileValid(f)) FAIL(); /* If a stdio handle then assume not at end. */ if (f->isStdioStream) return 0; ofs.offset = 0; ofs.dwLow = SetFilePointer(FILE_HANDLE(f), 0, &ofs.dwHigh, FILE_CURRENT); return ofs.offset >= sqFileSize(f); }
EXPORT(sqInt) primitiveFileSize(void) { squeakFileOffsetType size; SQFile * file; sqInt objectPointer; /* begin fileValueOf: */ objectPointer = interpreterProxy->stackValue(0); if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(interpreterProxy->failed())) { size = sqFileSize(file); } if (!(interpreterProxy->failed())) { interpreterProxy->popthenPush(2, interpreterProxy->positive64BitIntegerFor(size)); } }
primitiveFileSize(void) { // FilePlugin>>#primitiveFileSize SQFile *file; sqInt objectPointer; squeakFileOffsetType size; /* begin fileValueOf: */ objectPointer = stackValue(0); if (!((isBytes(objectPointer)) && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) { primitiveFail(); file = null; goto l1; } file = firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(failed())) { size = sqFileSize(file); } if (!(failed())) { popthenPush(2, positive64BitIntegerFor(size)); } }