From: Gabriel Caruso Date: Sun, 26 Apr 2020 01:03:58 +0000 (+0200) Subject: Reduce code duplication using for loop X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aaa30f14ebb0e2b7c33a70c225e01d678dd27a8d;p=php Reduce code duplication using for loop --- diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c index 35090bde54..c4b4717c0e 100644 --- a/ext/standard/filestat.c +++ b/ext/standard/filestat.c @@ -756,15 +756,9 @@ PHP_FUNCTION(clearstatcache) */ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zval *return_value) { - 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; zend_stat_t *stat_sb; php_stream_statbuf ssb; int flags = 0, 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" - }; const char *local; php_stream_wrapper *wrapper; @@ -911,7 +905,19 @@ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zva RETURN_TRUE; /* the false case was done earlier */ case FS_LSTAT: /* FALLTHROUGH */ - case FS_STAT: + case FS_STAT: { + char *stat_sb_names[] = { + "dev", "ino", "mode", "nlink", "uid", "gid", "rdev", + "size", "atime", "mtime", "ctime", "blksize", "blocks" + }; + 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; + zval *stat_sb_addresses[] = { + &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 + }; + size_t i, size_stat_sb = sizeof(stat_sb_addresses) / sizeof(*stat_sb_addresses); + array_init(return_value); 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 #else ZVAL_LONG(&stat_blocks,-1); #endif - /* Store numeric indexes in proper order */ - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_dev); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_ino); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_mode); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_nlink); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_uid); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_gid); - - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_rdev); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_size); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_atime); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_mtime); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_ctime); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_blksize); - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &stat_blocks); - - /* Store string indexes referencing the same zval*/ - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[0], strlen(stat_sb_names[0]), &stat_dev); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[1], strlen(stat_sb_names[1]), &stat_ino); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[2], strlen(stat_sb_names[2]), &stat_mode); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[3], strlen(stat_sb_names[3]), &stat_nlink); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[4], strlen(stat_sb_names[4]), &stat_uid); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[5], strlen(stat_sb_names[5]), &stat_gid); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[6], strlen(stat_sb_names[6]), &stat_rdev); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[7], strlen(stat_sb_names[7]), &stat_size); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[8], strlen(stat_sb_names[8]), &stat_atime); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[9], strlen(stat_sb_names[9]), &stat_mtime); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[10], strlen(stat_sb_names[10]), &stat_ctime); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[11], strlen(stat_sb_names[11]), &stat_blksize); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[12], strlen(stat_sb_names[12]), &stat_blocks); + for (i = 0; i < size_stat_sb; i++) { + /* Store numeric indexes in proper order */ + zend_hash_next_index_insert(Z_ARRVAL_P(return_value), stat_sb_addresses[i]); + } + + for (i = 0; i < size_stat_sb; i++) { + /* Store string indexes referencing the same zval */ + zend_hash_str_add_new(Z_ARRVAL_P(return_value), stat_sb_names[i], strlen(stat_sb_names[i]), stat_sb_addresses[i]); + } return; + } } php_error_docref(NULL, E_WARNING, "Didn't understand stat call"); RETURN_FALSE;