Don't let garbage collection close stdin/out/err

This commit is contained in:
K. Lange 2021-03-12 19:40:05 +09:00
parent d23aed51b2
commit 57b7f76244

View File

@ -23,6 +23,7 @@ static KrkClass * BinaryFile = NULL;
struct File {
KrkInstance inst;
FILE * filePtr;
int unowned;
};
#define IS_File(o) (krk_isInstanceOf(o, File))
@ -268,6 +269,7 @@ static void makeFileInstance(KrkInstance * module, const char name[], FILE * fil
krk_attachNamedValue(&fileObject->fields, "filename", filename);
((struct File*)fileObject)->filePtr = file;
((struct File*)fileObject)->unowned = 1;
krk_attachNamedObject(&module->fields, name, (KrkObj*)fileObject);
@ -409,7 +411,7 @@ KRK_METHOD(BinaryFile,write,{
static void _file_sweep(KrkInstance * self) {
struct File * me = (void *)self;
if (me->filePtr) {
if (me->filePtr && !me->unowned) {
fclose(me->filePtr);
me->filePtr = NULL;
}