ID:               26355
 User updated by:  mlemos at acm dot org
 Reported By:      mlemos at acm dot org
-Status:           Feedback
+Status:           Open
 Bug Type:         Filesystem function related
 Operating System: *
 PHP Version:      4.3.4
 New Comment:

Ok, here it is:

http://manuellemos.sites.uol.com.br/file.c.patch


Previous Comments:
------------------------------------------------------------------------

[2003-11-21 21:21:11] [EMAIL PROTECTED]

Provide the patches always in unified format.
(diff -u)

And provide an url pointing to the patch file, DO NOT add these to bug
reports.


------------------------------------------------------------------------

[2003-11-21 16:03:24] mlemos at acm dot org

Description:
------------
flock() does not initialize the wouldblock argument when present and it
succeeds locking, even when non-blocking locking is requested.

It is also failing when wouldblock argument is not present but  non
blocking locking is requested and flock() system call returns
EWOULDBLOCK. This is a minor issue.

This patch should fix both issues:

*** ext/standard/file.c 2003-11-21 18:39:13.000000000 -0200
--- ext/standard/file.c.fixed   2003-11-21 18:39:00.000000000 -0200
***************
*** 251,261 ****
           if (arg2 & 4) we won't block on the lock */
        act = flock_values[act - 1] | (Z_LVAL_PP(arg2) & 4 ? LOCK_NB :
0);
        if (flock(fd, act)) {
!               if (errno == EWOULDBLOCK && arg_count == 3) {
!                       ZVAL_LONG(*arg3, 1);
                } else {
                        RETURN_FALSE;
!               }
        }
        RETURN_TRUE;
  }
--- 251,269 ----
           if (arg2 & 4) we won't block on the lock */
        act = flock_values[act - 1] | (Z_LVAL_PP(arg2) & 4 ? LOCK_NB :
0);
        if (flock(fd, act)) {
!               if ((Z_LVAL_PP(arg2) & 4) && errno == EWOULDBLOCK) {
!                       if(arg_count == 3) {
!                               ZVAL_LONG(*arg3, 1);
!                       }
                } else {
                        RETURN_FALSE;
!               }
!       }
!       else
!       {
!               if(arg_count == 3) {
!                       ZVAL_LONG(*arg3, 0);
!               }
        }
        RETURN_TRUE;
  }


Reproduce code:
---------------
<?php
 
        if(!($file=(fopen("testfile","w")))) die("could not open
file");
        if(flock($file,6,&$wouldblock))
                echo "flock succeed, wouldblock
",serialize($wouldblock),"\n";
        else
                echo "flock failed\n";
        fclose($file);
?>

Expected result:
----------------
flock succeed, wouldblock i:0;

Actual result:
--------------
flock succeed, wouldblock N;


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=26355&edit=1

Reply via email to