From tplate at blackmesacapital.com  Wed May 25 22:37:12 2005
From: tplate at blackmesacapital.com (tplate@blackmesacapital.com)
Date: Wed May 25 22:37:17 2005
Subject: [Rd] seek(con, 0, "end",
	rw="r") does not always work correctly (PR#7896)
Message-ID: <20050525203712.36C2685B0@slim.kubism.ku.dk>

I've noticed that seek(con, 0, "end", rw="r") on a file connection does 
not always work correctly after a write (R 2.1.0 on Windows).

[Is a call to fflush() needed inside file_seek() in main/connections.c?]

Example (see the lines with the "***WRONG***" comment)

 > # seek(, rw="r") on a file does not always work correctly after a write
 > f <- file("tmp3.txt", "w+b")
 > # Write something earlier in the file
 > seek(f, 10, rw="w")
[1] 0
 > writeLines(c("ghi", "jkl"), f)
 > seek(f, 20, rw="w")
[1] 18
 > writeLines(c("abc"), f)
 > seek(f, 0, "end", rw="w")
[1] 24
 > # Try to read at the end of the file
 > seek(f, 0, "end", rw="r")
[1] 0
 > readLines(f, -1)
character(0)
 > seek(f, 0, "end", rw="w")
[1] 18
 > # write something at the end of the file
 > writeLines(c("def"), f)
 > # Try to read at the end of the file
 > # flush(f) # flushing here makes the seek work correctly
 > seek(f, 0, "end", rw="r")
[1] 24
 > seek(f, NA, rw="r") # ***WRONG*** (should return 28)
[1] 24
 > readLines(f, -1) # ***WRONG*** (should return character(0))
[1] "def"
 > seek(f, 20, rw="r")
[1] 28
 > readLines(f, -1)
[1] "abc" "def"
 > seek(f, 0, "end", rw="r") # now it works correctly
[1] 28
 > seek(f, NA, rw="r")
[1] 28
 > readLines(f, -1)
character(0)
 > close(f)
 >
 > version
          _
platform i386-pc-mingw32
arch     i386
os       mingw32
system   i386, mingw32
status
major    2
minor    1.0
year     2005
month    04
day      18
language R
 >

-- Tony Plate


[Rd] seek(con, 0, "end", rw="r") does not always work correctly (PR#7896)
tplate@blackmesacapital.com