change read behaviour, test seek, implement read(size=-1) later

This commit is contained in:
pmp-p 2023-12-22 11:54:26 +01:00
parent c38a94da53
commit 042a5ef85f
2 changed files with 12 additions and 3 deletions

View File

@ -55,10 +55,11 @@ unsigned char* _default_import_handler(const char* name_p, int name_size, int* o
vm->bind_method<0>(type, "read", [](VM* vm, ArgsView args){
FileIO& io = CAST(FileIO&, args[0]);
int cur_pos = ftell(io.fp);
fseek(io.fp, 0, SEEK_END);
int buffer_size = ftell(io.fp);
unsigned char* buffer = new unsigned char[buffer_size];
fseek(io.fp, 0, SEEK_SET);
fseek(io.fp, cur_pos, SEEK_SET);
size_t actual_size = io_fread(buffer, 1, buffer_size, io.fp);
PK_ASSERT(actual_size <= buffer_size);
// in text mode, CR may be dropped, which may cause `actual_size < buffer_size`

View File

@ -41,9 +41,17 @@ os.remove('123.bin')
assert not os.path.exists('123.bin')
f = open("123.txt","w+")
# read 0 sized file
assert( f.read() == "")
# write, rewind() and read whole back
f.write("123456")
f.seek(0)
assert ( f.read() == "123456" )
f.seek(3)
assert ( f.read() == "456" )
# cannot test seek(>0) then read() for now
f.close()