summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSterling Hughes <sterling@php.net>2002-07-02 21:02:34 +0000
committerSterling Hughes <sterling@php.net>2002-07-02 21:02:34 +0000
commitd4512030bba79c8b31a7736b7465aa9fbeb407ca (patch)
tree35ef7bd11df1694c6d136b36a3f988420335c471
parent407a0ec66ade7b13b306e0f9ce60d571c9206a21 (diff)
downloadphp-git-d4512030bba79c8b31a7736b7465aa9fbeb407ca.tar.gz
use access instead of manually determining file permissions..
-rw-r--r--ext/standard/filestat.c61
1 files changed, 40 insertions, 21 deletions
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index 84ed8a6f63..a321fe89c5 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -662,21 +662,6 @@ static void php_stat(const char *filename, php_stat_len filename_length, int typ
}
php_error(E_WARNING, "Unknown file type (%d)", BG(sb).st_mode&S_IFMT);
RETURN_STRING("unknown", 1);
- case FS_IS_W:
- if (getuid()==0) {
- RETURN_TRUE; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode & wmask) != 0);
- case FS_IS_R:
- if (getuid()==0) {
- RETURN_TRUE; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode&rmask)!=0);
- case FS_IS_X:
- if (getuid()==0) {
- xmask = S_IXROOT; /* root */
- }
- RETURN_BOOL((BG(sb).st_mode&xmask)!=0 && !S_ISDIR(BG(sb).st_mode));
case FS_IS_FILE:
RETURN_BOOL(S_ISREG(BG(sb).st_mode));
case FS_IS_DIR:
@@ -687,8 +672,6 @@ static void php_stat(const char *filename, php_stat_len filename_length, int typ
#else
RETURN_FALSE;
#endif
- case FS_EXISTS:
- RETURN_TRUE; /* the false case was done earlier */
case FS_LSTAT:
#if HAVE_SYMLINK
stat_sb = &BG(lsb);
@@ -820,17 +803,44 @@ FileFunction(PHP_FN(filetype), FS_TYPE)
/* {{{ proto bool is_writable(string filename)
Returns true if file can be written */
-FileFunction(PHP_FN(is_writable), FS_IS_W)
+PHP_FUNCTION(is_writable)
+{
+ char *filename;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename) == FAILURE) {
+ return;
+ }
+
+ RETURN_BOOL(!access (filename, W_OK));
+}
/* }}} */
/* {{{ proto bool is_readable(string filename)
Returns true if file can be read */
-FileFunction(PHP_FN(is_readable), FS_IS_R)
+PHP_FUNCTION(is_readable)
+{
+ char *filename;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename) == FAILURE) {
+ return;
+ }
+
+ RETURN_BOOL(!access (filename, R_OK));
+}
/* }}} */
/* {{{ proto bool is_executable(string filename)
Returns true if file is executable */
-FileFunction(PHP_FN(is_executable), FS_IS_X)
+PHP_FUNCTION(is_executable)
+{
+ char *filename;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename) == FAILURE) {
+ return;
+ }
+
+ RETURN_BOOL(!access (filename, X_OK));
+}
/* }}} */
/* {{{ proto bool is_file(string filename)
@@ -850,7 +860,16 @@ FileFunction(PHP_FN(is_link), FS_IS_LINK)
/* {{{ proto bool file_exists(string filename)
Returns true if filename exists */
-FileFunction(PHP_FN(file_exists), FS_EXISTS)
+PHP_FUNCTION(file_exists)
+{
+ char *filename;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename) == FAILURE) {
+ return;
+ }
+
+ RETURN_BOOL(!access (filename, F_OK));
+}
/* }}} */
/* {{{ proto array lstat(string filename)