From tom@@@k@liber@ @ending from gm@il@com  Wed May 30 15:38:56 2018
From: tom@@@k@liber@ @ending from gm@il@com (Tomas Kalibera)
Date: Wed, 30 May 2018 15:38:56 +0200
Subject: [Rd] Buffering in R 3.5 connections causes incorrect data in
 readChar
In-Reply-To: <CAJvXDNaBtR9+1uLDyLwm1t5XeuHo6BT6EbJCWy9X486TMghHpg@mail.gmail.com>
References: <CAJvXDNbV+oH_SQPOBP=4S_NiuFZ=0E6ZyzTNKEALz5t7VxfTJA@mail.gmail.com>
 <9d63bec8-b5c0-1099-7d47-0b2dd1aeb352@gmail.com>
 <CAJvXDNaBtR9+1uLDyLwm1t5XeuHo6BT6EbJCWy9X486TMghHpg@mail.gmail.com>
Message-ID: <03da0bcc-4ede-c8a5-633b-c955d0c3403f@gmail.com>

For now I have added a warning that is issued (only) when there is 
definitely a problem (currently a read buffer, a pushback buffer or 
encoding conversion of the input). And I have added a similar warning 
for writing when there is encoding conversion of the output (writeChar). 
But, as you say, the behavior is undefined and it remains so regardless 
of whether there is a warning or not: programs should only use these 
functions with binary connections.

Best
Tomas

On 05/30/2018 12:00 AM, Aaron Goodman wrote:
> Tomas,
>
> Thank you for the explanation. I see in the documentation: "These 
> functions are intended to be used with binary-mode connections."? So I 
> see how using it on a text connection is undefined, and not a bug. An 
> error or warning when attempting to use a it on a text connection 
> would be helpful considering how the behavior has changed in R-3.5.
>
> On Tue, May 29, 2018 at 3:09 AM, Tomas Kalibera 
> <tomas.kalibera at gmail.com <mailto:tomas.kalibera at gmail.com>> wrote:
>
>     On 05/26/2018 05:15 AM, Aaron Goodman wrote:
>
>         I noticed an issue where readChar does not return the correct
>         value after a
>         call to readline. It appears that readChar is not aware of the
>         buffering,
>         so it reads from the end of the buffer, rather than the
>         current position in
>         the file. This is a significant change of behavior from R-3.4.4.
>
>         Below is a test case that I used to home in on the problem.
>
>     Thanks for the report and analysis, you are right, readChar
>     ignores the buffer (and it also ignores the pushback). But please
>     note that this behavior is in line with the documentation, see
>     ?readChar: readChar must only be used with binary connections, but
>     the example uses it on a text connection. Buffering and pushback
>     are only used on (readable) text connections. I will check whether
>     we could report a runtime error.
>
>     Best
>     Tomas
>
>         ---
>
>         p<-"test2.txt"
>         cat("abcdefg
>         hijklmn
>         opqrstu",file=p)
>
>         cat("read char after readline (h)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1))
>         print(readChar(con,1))
>         close(con)
>
>         cat("read char after readline and seek (h)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1))
>         invisible(seek(con,seek(con)))
>         print(readChar(con,1))
>         close(con)
>
>         cat("read lines after readline (hijklmn)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1) )
>         print(readLines(con,1))
>         close(con)
>
>
>         cat("read line after char (bcdefg):\n")
>         con <- file(p,"r")
>         invisible(readChar(con,1) )
>         print(readLines(con,1))
>         close(con)
>
>         ? ? ? ? [[alternative HTML version deleted]]
>
>         ______________________________________________
>         R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list
>         https://stat.ethz.ch/mailman/listinfo/r-devel
>         <https://stat.ethz.ch/mailman/listinfo/r-devel>
>
>
>
>


	[[alternative HTML version deleted]]



[Rd] Buffering in R 3.5 connections causes incorrect data in readChar
Tomas Kalibera