]> granicus.if.org Git - php/commitdiff
Reduce code duplication using for loop
authorGabriel Caruso <carusogabriel34@gmail.com>
Sun, 26 Apr 2020 01:03:58 +0000 (03:03 +0200)
committerGabriel Caruso <carusogabriel34@gmail.com>
Mon, 27 Apr 2020 15:03:40 +0000 (17:03 +0200)
ext/standard/filestat.c

index 35090bde5463e16549be0c4a3f065997df2f7d7a..c4b4717c0e3931bb779a5fadde955daab136c5c6 100644 (file)
@@ -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;