void TestFH_Run_IMP(TestFileHandle *self, TestBatchRunner *runner) { TestBatchRunner_Plan(runner, (TestBatch*)self, 2); FileHandle *fh = S_new_filehandle(); String *foo = SSTR_WRAP_UTF8("foo", 3); TEST_TRUE(runner, Str_Equals_Utf8(FH_Get_Path(fh), "", 0), "Get_Path"); FH_Set_Path(fh, foo); TEST_TRUE(runner, Str_Equals(FH_Get_Path(fh), (Obj*)foo), "Set_Path"); DECREF(fh); }
InStream* InStream_do_open(InStream *self, Obj *file) { InStreamIVARS *const ivars = InStream_IVARS(self); // Init. ivars->buf = NULL; ivars->limit = NULL; ivars->offset = 0; ivars->window = FileWindow_new(); // Obtain a FileHandle. if (Obj_Is_A(file, FILEHANDLE)) { ivars->file_handle = (FileHandle*)INCREF(file); } else if (Obj_Is_A(file, RAMFILE)) { ivars->file_handle = (FileHandle*)RAMFH_open(NULL, FH_READ_ONLY, (RAMFile*)file); } else if (Obj_Is_A(file, CHARBUF)) { ivars->file_handle = (FileHandle*)FSFH_open((CharBuf*)file, FH_READ_ONLY); } else { Err_set_error(Err_new(CB_newf("Invalid type for param 'file': '%o'", Obj_Get_Class_Name(file)))); DECREF(self); return NULL; } if (!ivars->file_handle) { ERR_ADD_FRAME(Err_get_error()); DECREF(self); return NULL; } // Get length and filename from the FileHandle. ivars->filename = CB_Clone(FH_Get_Path(ivars->file_handle)); ivars->len = FH_Length(ivars->file_handle); if (ivars->len == -1) { ERR_ADD_FRAME(Err_get_error()); DECREF(self); return NULL; } return self; }
OutStream* OutStream_do_open(OutStream *self, Obj *file) { OutStreamIVARS *const ivars = OutStream_IVARS(self); // Init. ivars->buf = (char*)MALLOCATE(IO_STREAM_BUF_SIZE); ivars->buf_start = 0; ivars->buf_pos = 0; // Obtain a FileHandle. if (Obj_is_a(file, FILEHANDLE)) { ivars->file_handle = (FileHandle*)INCREF(file); } else if (Obj_is_a(file, RAMFILE)) { ivars->file_handle = (FileHandle*)RAMFH_open(NULL, FH_WRITE_ONLY, (RAMFile*)file); } else if (Obj_is_a(file, STRING)) { ivars->file_handle = (FileHandle*)FSFH_open((String*)file, FH_WRITE_ONLY | FH_CREATE | FH_EXCLUSIVE); } else { Err_set_error(Err_new(Str_newf("Invalid type for param 'file': '%o'", Obj_get_class_name(file)))); DECREF(self); return NULL; } if (!ivars->file_handle) { ERR_ADD_FRAME(Err_get_error()); DECREF(self); return NULL; } // Derive filepath from FileHandle. ivars->path = Str_Clone(FH_Get_Path(ivars->file_handle)); return self; }