@@ -756,15 +756,9 @@ PHP_FUNCTION(clearstatcache)
756
756
*/
757
757
PHPAPI void php_stat (const char * filename , size_t filename_length , int type , zval * return_value )
758
758
{
759
- zval stat_dev , stat_ino , stat_mode , stat_nlink , stat_uid , stat_gid , stat_rdev ,
760
- stat_size , stat_atime , stat_mtime , stat_ctime , stat_blksize , stat_blocks ;
761
759
zend_stat_t * stat_sb ;
762
760
php_stream_statbuf ssb ;
763
761
int flags = 0 , rmask = S_IROTH , wmask = S_IWOTH , xmask = S_IXOTH ; /* access rights defaults to other */
764
- char * stat_sb_names [13 ] = {
765
- "dev" , "ino" , "mode" , "nlink" , "uid" , "gid" , "rdev" ,
766
- "size" , "atime" , "mtime" , "ctime" , "blksize" , "blocks"
767
- };
768
762
const char * local ;
769
763
php_stream_wrapper * wrapper ;
770
764
@@ -911,7 +905,19 @@ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zva
911
905
RETURN_TRUE ; /* the false case was done earlier */
912
906
case FS_LSTAT :
913
907
/* FALLTHROUGH */
914
- case FS_STAT :
908
+ case FS_STAT : {
909
+ char * stat_sb_names [] = {
910
+ "dev" , "ino" , "mode" , "nlink" , "uid" , "gid" , "rdev" ,
911
+ "size" , "atime" , "mtime" , "ctime" , "blksize" , "blocks"
912
+ };
913
+ zval stat_dev , stat_ino , stat_mode , stat_nlink , stat_uid , stat_gid , stat_rdev ,
914
+ stat_size , stat_atime , stat_mtime , stat_ctime , stat_blksize , stat_blocks ;
915
+ zval * stat_sb_addresses [] = {
916
+ & stat_dev , & stat_ino , & stat_mode , & stat_nlink , & stat_uid , & stat_gid , & stat_rdev ,
917
+ & stat_size , & stat_atime , & stat_mtime , & stat_ctime , & stat_blksize , & stat_blocks
918
+ };
919
+ size_t i , size_stat_sb = sizeof (stat_sb_addresses ) / sizeof (* stat_sb_addresses );
920
+
915
921
array_init (return_value );
916
922
917
923
ZVAL_LONG (& stat_dev , stat_sb -> st_dev );
@@ -939,38 +945,18 @@ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zva
939
945
#else
940
946
ZVAL_LONG (& stat_blocks ,-1 );
941
947
#endif
942
- /* Store numeric indexes in proper order */
943
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_dev );
944
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_ino );
945
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_mode );
946
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_nlink );
947
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_uid );
948
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_gid );
949
-
950
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_rdev );
951
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_size );
952
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_atime );
953
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_mtime );
954
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_ctime );
955
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_blksize );
956
- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & stat_blocks );
957
-
958
- /* Store string indexes referencing the same zval*/
959
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [0 ], strlen (stat_sb_names [0 ]), & stat_dev );
960
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [1 ], strlen (stat_sb_names [1 ]), & stat_ino );
961
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [2 ], strlen (stat_sb_names [2 ]), & stat_mode );
962
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [3 ], strlen (stat_sb_names [3 ]), & stat_nlink );
963
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [4 ], strlen (stat_sb_names [4 ]), & stat_uid );
964
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [5 ], strlen (stat_sb_names [5 ]), & stat_gid );
965
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [6 ], strlen (stat_sb_names [6 ]), & stat_rdev );
966
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [7 ], strlen (stat_sb_names [7 ]), & stat_size );
967
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [8 ], strlen (stat_sb_names [8 ]), & stat_atime );
968
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [9 ], strlen (stat_sb_names [9 ]), & stat_mtime );
969
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [10 ], strlen (stat_sb_names [10 ]), & stat_ctime );
970
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [11 ], strlen (stat_sb_names [11 ]), & stat_blksize );
971
- zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [12 ], strlen (stat_sb_names [12 ]), & stat_blocks );
948
+ for (i = 0 ; i < size_stat_sb ; i ++ ) {
949
+ /* Store numeric indexes in proper order */
950
+ zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), stat_sb_addresses [i ]);
951
+ }
952
+
953
+ for (i = 0 ; i < size_stat_sb ; i ++ ) {
954
+ /* Store string indexes referencing the same zval */
955
+ zend_hash_str_add_new (Z_ARRVAL_P (return_value ), stat_sb_names [i ], strlen (stat_sb_names [i ]), stat_sb_addresses [i ]);
956
+ }
972
957
973
958
return ;
959
+ }
974
960
}
975
961
php_error_docref (NULL , E_WARNING , "Didn't understand stat call" );
976
962
RETURN_FALSE ;
0 commit comments