hyanantha               Thu Oct 24 07:14:04 2002 EDT

  Modified files:              (Branch: PHP_4_2_0)
    /php4/ext/standard  filestat.c 
  Log:
  NetWare related changes/modifications.
  
  
Index: php4/ext/standard/filestat.c
diff -u php4/ext/standard/filestat.c:1.89.2.7 php4/ext/standard/filestat.c:1.89.2.8
--- php4/ext/standard/filestat.c:1.89.2.7       Tue Sep 10 20:41:17 2002
+++ php4/ext/standard/filestat.c        Thu Oct 24 07:14:04 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: filestat.c,v 1.89.2.7 2002/09/11 00:41:17 edink Exp $ */
+/* $Id: filestat.c,v 1.89.2.8 2002/10/24 11:14:04 hyanantha Exp $ */
 
 #include "php.h"
 #include "safe_mode.h"
@@ -54,6 +54,8 @@
 #if HAVE_PWD_H
 # ifdef PHP_WIN32
 #  include "win32/pwd.h"
+# elif defined(NETWARE)
+#  include "netware/pwd.h"
 # else
 #  include <pwd.h>
 # endif
@@ -335,7 +337,7 @@
    Change file group */
 PHP_FUNCTION(chgrp)
 {
-#ifndef WINDOWS
+#if !defined(WINDOWS) && !defined(NETWARE)     /* 'chgrp' is not available on NetWare 
+also */
        pval **filename, **group;
        gid_t gid;
        struct group *gr=NULL;
@@ -383,7 +385,7 @@
    Change file owner */
 PHP_FUNCTION(chown)
 {
-#ifndef WINDOWS
+#if !defined(WINDOWS) && !defined(NETWARE)     /* 'chown' is not available on NetWare 
+also */
        pval **filename, **user;
        int ret;
        uid_t uid;
@@ -472,7 +474,12 @@
 {
        pval **filename, **filetime, **fileatime;
        int ret;
+#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
+    struct stat_libc sb;
+#else
        struct stat sb;
+#endif
+
        FILE *file;
        struct utimbuf newtimebuf;
        struct utimbuf *newtime = NULL;
@@ -546,7 +553,11 @@
 {
        zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, 
*stat_rdev,
                *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, 
*stat_blocks;
+#if (defined(NETWARE) && defined(CLIB_STAT_PATCH))
+    struct stat_libc *stat_sb;
+#else
        struct stat *stat_sb;
+#endif
        int rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to 
other */
        char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
                              "size", "atime", "mtime", "ctime", "blksize", "blocks"};
@@ -559,7 +570,11 @@
                RETURN_FALSE;
        }
 
+#if (defined(NETWARE) && defined(CLIB_STAT_PATCH))
+       stat_sb = (struct stat_libc *)&BG(sb);
+#else
        stat_sb = &BG(sb);
+#endif
 
        if (!BG(CurrentStatFile) || strcmp(filename, BG(CurrentStatFile))) {
                if (!BG(CurrentStatFile) || filename_length > BG(CurrentStatLength)) {
@@ -574,7 +589,12 @@
 #if HAVE_SYMLINK
                BG(lsb).st_mode = 0; /* mark lstat buf invalid */
 #endif
+
+#if (defined(NETWARE) && defined(CLIB_STAT_PATCH))
+               if (VCWD_STAT(BG(CurrentStatFile), (struct stat_libc *)&BG(sb)) == -1) 
+{
+#else
                if (VCWD_STAT(BG(CurrentStatFile), &BG(sb)) == -1) {
+#endif
                        if (!IS_LINK_OPERATION(type) && (!IS_EXISTS_CHECK(type) || 
errno != ENOENT)) { /* fileexists() test must print no error */
                                php_error(E_WARNING, "stat failed for %s (errno=%d - 
%s)", BG(CurrentStatFile), errno, strerror(errno));
                        }
@@ -599,6 +619,7 @@
 #endif
 
 
+#ifndef NETWARE
        if (type >= FS_IS_W && type <= FS_IS_X) {
                if(BG(sb).st_uid==getuid()) {
                        rmask=S_IRUSR;
@@ -628,6 +649,7 @@
                        }
                }
        }
+#endif /* NETWARE */
 
        switch (type) {
        case FS_PERMS:
@@ -641,11 +663,23 @@
        case FS_GROUP:
                RETURN_LONG((long)BG(sb).st_gid);
        case FS_ATIME:
+#if defined(NETWARE) && defined(NEW_LIBC)
+               RETURN_LONG((long)((((struct stat_libc *)stat_sb)->st_atime).tv_sec));
+#else
                RETURN_LONG((long)BG(sb).st_atime);
+#endif
        case FS_MTIME:
+#if defined(NETWARE) && defined(NEW_LIBC)
+               RETURN_LONG((long)((((struct stat_libc *)stat_sb)->st_mtime).tv_sec));
+#else
                RETURN_LONG((long)BG(sb).st_mtime);
+#endif
        case FS_CTIME:
+#if defined(NETWARE) && defined(NEW_LIBC)
+               RETURN_LONG((long)((((struct stat_libc *)stat_sb)->st_ctime).tv_sec));
+#else
                RETURN_LONG((long)BG(sb).st_ctime);
+#endif
        case FS_TYPE:
 #if HAVE_SYMLINK
                if (S_ISLNK(BG(lsb).st_mode)) {
@@ -665,19 +699,25 @@
                php_error(E_WARNING, "Unknown file type (%d)", BG(sb).st_mode&S_IFMT);
                RETURN_STRING("unknown", 1);
        case FS_IS_W:
+       #ifndef NETWARE /* getuid is not available on NetWare */
                if (getuid()==0) {
                        RETURN_TRUE; /* root */
                }
+       #endif  /* NETWARE */
                RETURN_BOOL((BG(sb).st_mode & wmask) != 0);
        case FS_IS_R:
+       #ifndef NETWARE /* getuid is not available on NetWare */
                if (getuid()==0) {
                        RETURN_TRUE; /* root */
                }
+       #endif  /* NETWARE */
                RETURN_BOOL((BG(sb).st_mode&rmask)!=0);
        case FS_IS_X:
+       #ifndef NETWARE /* getuid is not available on NetWare */
                if (getuid()==0) {
                        xmask = S_IXROOT; /* root */
                }
+       #endif  /* NETWARE */
                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));
@@ -700,7 +740,42 @@
                if (array_init(return_value) == FAILURE) {
                        RETURN_FALSE;
                }
-       
+
+#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
+               MAKE_LONG_ZVAL_INCREF(stat_dev, ((struct stat_libc*)stat_sb)->st_dev);
+               MAKE_LONG_ZVAL_INCREF(stat_ino, ((struct stat_libc*)stat_sb)->st_ino);
+               MAKE_LONG_ZVAL_INCREF(stat_mode, ((struct 
+stat_libc*)stat_sb)->st_mode);
+               MAKE_LONG_ZVAL_INCREF(stat_nlink, ((struct 
+stat_libc*)stat_sb)->st_nlink);
+               MAKE_LONG_ZVAL_INCREF(stat_uid, ((struct stat_libc*)stat_sb)->st_uid);
+               MAKE_LONG_ZVAL_INCREF(stat_gid, ((struct stat_libc*)stat_sb)->st_gid);
+#ifdef HAVE_ST_RDEV
+               MAKE_LONG_ZVAL_INCREF(stat_rdev, ((struct 
+stat_libc*)stat_sb)->st_rdev); 
+#else
+               MAKE_LONG_ZVAL_INCREF(stat_rdev, -1); 
+#endif
+               MAKE_LONG_ZVAL_INCREF(stat_size, ((struct 
+stat_libc*)stat_sb)->st_size);
+#ifdef NEW_LIBC
+               MAKE_LONG_ZVAL_INCREF(stat_atime, (((struct 
+stat_libc*)stat_sb)->st_atime).tv_sec);
+               MAKE_LONG_ZVAL_INCREF(stat_mtime, (((struct 
+stat_libc*)stat_sb)->st_mtime).tv_sec);
+               MAKE_LONG_ZVAL_INCREF(stat_ctime, (((struct 
+stat_libc*)stat_sb)->st_ctime).tv_sec);
+#else
+               MAKE_LONG_ZVAL_INCREF(stat_atime, ((struct 
+stat_libc*)stat_sb)->st_atime);
+               MAKE_LONG_ZVAL_INCREF(stat_mtime, ((struct 
+stat_libc*)stat_sb)->st_mtime);
+               MAKE_LONG_ZVAL_INCREF(stat_ctime, ((struct 
+stat_libc*)stat_sb)->st_ctime);
+#endif
+#ifdef HAVE_ST_BLKSIZE
+               MAKE_LONG_ZVAL_INCREF(stat_blksize, ((struct 
+stat_libc*)stat_sb)->st_blksize); 
+#else
+               MAKE_LONG_ZVAL_INCREF(stat_blksize,-1);
+#endif
+#ifdef HAVE_ST_BLOCKS
+               MAKE_LONG_ZVAL_INCREF(stat_blocks, ((struct 
+stat_libc*)stat_sb)->st_blocks);
+#else
+               MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
+#endif
+
+#else  /* NETWARE && CLIB_STAT_PATCH */
+
                MAKE_LONG_ZVAL_INCREF(stat_dev, stat_sb->st_dev);
                MAKE_LONG_ZVAL_INCREF(stat_ino, stat_sb->st_ino);
                MAKE_LONG_ZVAL_INCREF(stat_mode, stat_sb->st_mode);
@@ -726,6 +801,9 @@
 #else
                MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
 #endif
+
+#endif /* NETWARE && CLIB_STAT_PATCH */
+
                /* Store numeric indexes in propper order */
                zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_dev, 
sizeof(zval *), NULL);
                zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ino, 
sizeof(zval *), NULL);



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to