primitiveAsyncFileOpen(void) { // AsynchFilePlugin>>#primitiveAsyncFileOpen AsyncFile *f; char *fileName; sqInt fileNameSize; sqInt fOop; sqInt okToOpen; sqInt semaIndex; sqInt writeFlag; success(isBytes(stackValue(2))); fileName = ((char *) (firstIndexableField(stackValue(2)))); writeFlag = booleanValueOf(stackValue(1)); semaIndex = stackIntegerValue(0); if (failed()) { return null; } /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ fileNameSize = slotSizeOf(((int) fileName) - 4); if (sCOAFfn != 0) { okToOpen = ((sqInt (*) (char *, sqInt, sqInt)) sCOAFfn)(fileName, fileNameSize, writeFlag); if (!okToOpen) { primitiveFail(); return null; } } fOop = instantiateClassindexableSize(classByteArray(), sizeof(AsyncFile)); f = asyncFileValueOf(fOop); if (!(failed())) { asyncFileOpen(f, (int)fileName, fileNameSize, writeFlag, semaIndex); } if (failed()) { return null; } popthenPush(4, fOop); return null; }
EXPORT(sqInt) primitiveAsyncFileOpen(void) { AsyncFile * f; sqInt fOop; sqInt okToOpen; sqInt fileNameSize; char *fileName; sqInt writeFlag; sqInt semaIndex; interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(2))); fileName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(2)))); writeFlag = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(1)); semaIndex = interpreterProxy->stackIntegerValue(0); if (interpreterProxy->failed()) { return null; } /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ fileNameSize = interpreterProxy->slotSizeOf(oopForPointer(fileName) - 4); if (sCOAFfn != 0) { okToOpen = ((sqInt (*) (char *, sqInt, sqInt)) sCOAFfn)(fileName, fileNameSize, writeFlag); if (!(okToOpen)) { interpreterProxy->primitiveFail(); return null; } } fOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), sizeof(AsyncFile)); f = asyncFileValueOf(fOop); if (!(interpreterProxy->failed())) { asyncFileOpen(f, (int)fileName, fileNameSize, writeFlag, semaIndex); } if (interpreterProxy->failed()) { return null; } interpreterProxy->popthenPush(4, fOop); return null; }