fseek/fgetc puzzle
Steffen Nurpmeso
steffen at sdaoden.eu
Tue Feb 21 06:00:24 AEDT 2023
Darren Tucker wrote in
<CALDDTe39k4UFJWBvts5HWbbhHO+Vw9OAP0zBhu-Hje-2aR9+xA at mail.gmail.com>:
Jörg Schilling convinced me in 2017
Readd removed fflush()/fseek() in between read and write..
The behave:record_a_resend-2 test failed on Solaris 5.10 and 5.11,
messages in *record* where separated by four \n / U+000A instead
of two. It turns out that the effective sequence
if((fo = Zopen(name, "a+")) == NULL){
if((fo = Zopen(name, "wx")) == NULL){
...
if(fseek(fo, -2L, SEEK_END) == 0){
switch(fread(buf, sizeof *buf, 2, fo)){
...
if(emptyline){
putc('\n', fo);
fflush(fo);
}
on a O_APPEND|O_RDWR file requires an intermediate
fseek(fout, 0, SEEK_END))
or
fflush()
which i consider a bug in Solaris stdio.
Jörg Schilling however convinced me that the standard requires
this behaviour, and it is also in the C FAQ. Nonetheless...
--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)
More information about the openssh-unix-dev
mailing list