Skip to content

Commit 22de60c

Browse files
committed
FIX: WRITE on file-port does not update file size (posix fix)
resolves: Oldes/Rebol-issues#552
1 parent 4127a7c commit 22de60c

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/os/posix/dev-file.c

+6
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ static int Get_File_Info(REBREQ *file)
486486
***********************************************************************/
487487
{
488488
ssize_t num_bytes;
489+
struct stat info;
489490

490491
if (!file->id) {
491492
file->error = -RFE_NO_HANDLE;
@@ -512,8 +513,13 @@ static int Get_File_Info(REBREQ *file)
512513
else file->error = -RFE_BAD_WRITE;
513514
return DR_ERROR;
514515
} else {
516+
//SET_FLAG(file->modes, RFM_RESEEK);
515517
file->actual = (u32)num_bytes;
516518
}
519+
if (fstat(file->id, &info) == 0) {
520+
file->file.size = info.st_size;
521+
file->file.time.l = (i32)(info.st_mtime);
522+
}
517523

518524
return DR_DONE;
519525
}

src/tests/units/port-test.r3

+15
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,21 @@ if system/platform = 'Windows [
337337
--assert "Hella World! Goodbye World!" = to-string read/seek f 0
338338
--assert port? close f
339339
try [delete %file-552]
340+
--assert all [
341+
port? p: open/new %file-552
342+
file? write p "a"
343+
tail? read p
344+
file? write p "b"
345+
tail? read p
346+
#{6162} = read/seek p 0
347+
tail? read p
348+
file? write/seek p "c" 0
349+
#{62} = read p
350+
#{6362} = read/seek p 0
351+
2 = length? p
352+
port? close p
353+
]
354+
try [delete %file-552]
340355

341356
--test-- "clear file port"
342357
;@@ https://github.com/Oldes/Rebol-issues/issues/812

0 commit comments

Comments
 (0)