#22362 [Fbk->Csd]: Certain combinations of fseek() and fwrite() produce unexpected results
| From: | php at codewhore dot org | Date: | Sat, 22 Feb 2003 18:55:49 +0000 |
| Subject: | #22362 [Fbk->Csd]: Certain combinations of fseek() and fwrite() produce unexpected results | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-33924@lists.php.net to get a copy of this message | ||
ID: 22362
User updated by: php at codewhore dot org
Reported By: php at codewhore dot org
-Status: Feedback
+Status: Closed
Bug Type: Filesystem function related
Operating System: Linux 2.4
PHP Version: 4.3.1
Assigned To: wez
New Comment:
I just pulled from the PHP_4_3 branch of CVS, and the problem is indeed
fixed.
Thanks again. :)
Previous Comments:
------------------------------------------------------------------------
[2003-02-21 20:46:12] wez@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
Try the next stable snapshot.
------------------------------------------------------------------------
[2003-02-21 19:38:41] php at codewhore dot org
Thanks. Glad I could be of (some) help. :)
------------------------------------------------------------------------
[2003-02-21 18:40:52] wez@php.net
Save yourself some energy :)
I'm going to look into this this weekend; I know precisely
how to fix this, and it most likely not something you
would have time to think of by the time I've sorted it
out :)
I will update this report when it is fixed and you will be able to try
the fix using a stable snapshot.
Thanks for your efforts so far!
------------------------------------------------------------------------
[2003-02-21 17:44:27] php at codewhore dot org
FWIW, the problem also occurs in the following piece of code:
<?php
$fp = fopen('./foo', 'w+');
fwrite($fp, 'quxbar', 6);
fseek($fp, 3, SEEK_SET);
fread($fp, 1);
fwrite($fp, '!', 1);
fseek($fp, 0, SEEK_SET);
$buf = fread($fp, 4095);
echo "$buf\n";
?>
There's no fseek() between the fread() and fwrite(), so my previous
theory seems to be quite wrong. I'll do more digging as time permits...
------------------------------------------------------------------------
[2003-02-21 17:02:51] php at codewhore dot org
I'm still mostly lost, but commenting out the following segment of code
fixes the problem for the test case. Obviously this isn't the solution,
but I think I have it narrowed down to _php_stream_seek thinking that
the underlying file position matches the seek offset when it doesn't in
reality.
PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int
whence TSRMLS_DC)
{
/* not moving anywhere */
#if 0
if ((offset == 0 && whence == SEEK_CUR) || (offset ==
stream->position && whence == SEEK_SET))
return 0;
#endif
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/22362
--
Edit this bug report at http://bugs.php.net/?id=22362&edit=1