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