Hello!
My mail probably got lost in all the fuzz about goto, etc.
So here's the patch again..
It will fix FR #14924 and someone else was also asking for this feature in an
unrelated bug report which I can't remember the number of.
access(2) will report correct permissions for files when using ACLs too
(is_writeable() etc does not).
Sascha, since you made the comment "access() not supported, because it is
braindead and dangerous and gives outdated results", do you have any
objections ?
Should I go ahead and commit it or should I close the bug as Won't Fix ?
/Magnus
--
Shell to DOS... Come in DOS, do you copy? Shell to DOS...
Index: php_posix.h
===================================================================
RCS file: /repository/php-src/ext/posix/php_posix.h,v
retrieving revision 1.14
diff -u -r1.14 php_posix.h
--- php_posix.h 8 Jan 2004 17:32:41 -0000 1.14
+++ php_posix.h 15 Aug 2004 18:46:31 -0000
@@ -90,6 +90,9 @@
PHP_FUNCTION(posix_mkfifo);
#endif
+/* POSIX.1, 5.6 */
+PHP_FUNCTION(posix_access);
+
/* POSIX.1, 9.2 */
PHP_FUNCTION(posix_getgrnam);
PHP_FUNCTION(posix_getgrgid);
Index: posix.c
===================================================================
RCS file: /repository/php-src/ext/posix/posix.c,v
retrieving revision 1.60
diff -u -r1.60 posix.c
--- posix.c 18 Apr 2004 21:49:10 -0000 1.60
+++ posix.c 15 Aug 2004 18:46:32 -0000
@@ -108,6 +108,8 @@
PHP_FE(posix_mkfifo, NULL)
#endif
+ /* POSIX.1, 5.6 */
+ PHP_FE(posix_access, NULL)
/* POSIX.1, 9.2 */
PHP_FE(posix_getgrnam, NULL)
PHP_FE(posix_getgrgid, NULL)
@@ -146,6 +148,10 @@
static PHP_MINIT_FUNCTION(posix)
{
ZEND_INIT_MODULE_GLOBALS(posix, php_posix_init_globals, NULL);
+ REGISTER_LONG_CONSTANT("POSIX_F_OK", F_OK, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("POSIX_X_OK", X_OK, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("POSIX_W_OK", W_OK, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("POSIX_R_OK", R_OK, CONST_CS | CONST_PERSISTENT);
return SUCCESS;
}
/* }}} */
@@ -638,15 +644,46 @@
POSIX.1, 5.5.1 unlink()
POSIX.1, 5.5.2 rmdir()
POSIX.1, 5.5.3 rename()
- POSIX.1, 5.6.x stat(), access(), chmod(), utime()
- already supported by PHP (access() not supported, because it is
- braindead and dangerous and gives outdated results).
+ POSIX.1, 5.6.x stat(), chmod(), utime() already supported by PHP.
+*/
+
+/* {{{ proto bool posix_access(string file [, int mode])
+ Determine accessibility of a file (POSIX.1 5.6.3) */
+PHP_FUNCTION(posix_access)
+{
+ long mode = 0;
+ int filename_len, ret;
+ char *filename, *path;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &mode) == FAILURE)
+ return;
+
+ path = expand_filepath(filename, NULL TSRMLS_CC);
+
+ if (php_check_open_basedir_ex(path, 0 TSRMLS_CC)) {
+ efree(path);
+ POSIX_G(last_error) = EPERM;
+ RETURN_FALSE;
+ }
+
+ ret = access(path, mode);
+ efree(path);
+
+ if (ret) {
+ POSIX_G(last_error) = errno;
+ RETURN_FALSE;
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+/*
POSIX.1, 6.x most I/O functions already supported by PHP.
POSIX.1, 7.x tty functions, TODO
POSIX.1, 8.x interactions with other C language functions
- POSIX.1, 9.x system database access
- */
+ POSIX.1, 9.x system database access
+*/
/* {{{ proto array posix_getgrnam(string groupname)
Group database access (POSIX.1, 9.2.1) */
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php