Skip to content

Commit aaa30f1

Browse files
committed
Reduce code duplication using for loop
1 parent 7ce8c5a commit aaa30f1

File tree

1 file changed

+23
-37
lines changed

1 file changed

+23
-37
lines changed

ext/standard/filestat.c

Lines changed: 23 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -756,15 +756,9 @@ PHP_FUNCTION(clearstatcache)
756756
*/
757757
PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zval *return_value)
758758
{
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;
761759
zend_stat_t *stat_sb;
762760
php_stream_statbuf ssb;
763761
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-
};
768762
const char *local;
769763
php_stream_wrapper *wrapper;
770764

@@ -911,7 +905,19 @@ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zva
911905
RETURN_TRUE; /* the false case was done earlier */
912906
case FS_LSTAT:
913907
/* 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+
915921
array_init(return_value);
916922

917923
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
939945
#else
940946
ZVAL_LONG(&stat_blocks,-1);
941947
#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+
}
972957

973958
return;
959+
}
974960
}
975961
php_error_docref(NULL, E_WARNING, "Didn't understand stat call");
976962
RETURN_FALSE;

0 commit comments

Comments
 (0)