Skip to content

Commit 1616415

Browse files
committed
Code cleanup in proc_open
1 parent 1071bf7 commit 1616415

File tree

1 file changed

+15
-36
lines changed

1 file changed

+15
-36
lines changed

ext/standard/proc_open.c

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,11 @@ static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent
7878
zval *element;
7979
php_process_env_t env;
8080
zend_string *string_key;
81-
char *data;
8281
#ifndef PHP_WIN32
8382
char **ep;
8483
#endif
8584
char *p;
86-
uint cnt, l, sizeenv=0, el_len;
87-
ulong num_key;
85+
uint cnt, l, sizeenv=0;
8886
HashTable *target_hash;
8987

9088
memset(&env, 0, sizeof(env));
@@ -109,22 +107,16 @@ static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent
109107
}
110108

111109
/* first, we have to get the size of all the elements in the hash */
112-
ZEND_HASH_FOREACH_KEY_VAL(target_hash, num_key, string_key, element) {
113-
zval tmp;
114-
115-
if (Z_TYPE_P(element) != IS_STRING) {
116-
ZVAL_DUP(&tmp, element);
117-
convert_to_string(&tmp);
118-
el_len = Z_STRLEN(tmp);
119-
zval_dtor(&tmp);
120-
} else {
121-
el_len = Z_STRLEN_P(element);
122-
}
110+
ZEND_HASH_FOREACH_STR_KEY_VAL(target_hash, string_key, element) {
111+
zend_string *str = zval_get_string(element);
112+
uint el_len = str->len;
113+
STR_RELEASE(str);
114+
123115
if (el_len == 0) {
124116
continue;
125117
}
126118

127-
sizeenv += el_len+1;
119+
sizeenv += el_len + 1;
128120

129121
if (string_key) {
130122
if (string_key->len == 0) {
@@ -139,51 +131,38 @@ static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent
139131
#endif
140132
p = env.envp = (char *) pecalloc(sizeenv + 4, 1, is_persistent);
141133

142-
ZEND_HASH_FOREACH_KEY_VAL(target_hash, num_key, string_key, element) {
143-
zval tmp;
144-
145-
if (Z_TYPE_P(element) != IS_STRING) {
146-
ZVAL_DUP(&tmp, element);
147-
convert_to_string(&tmp);
148-
} else {
149-
ZVAL_COPY_VALUE(&tmp, element);
150-
}
151-
152-
el_len = Z_STRLEN(tmp);
134+
ZEND_HASH_FOREACH_STR_KEY_VAL(target_hash, string_key, element) {
135+
zend_string *str = zval_get_string(element);
153136

154-
if (el_len == 0) {
137+
if (str->len == 0) {
155138
goto next_element;
156139
}
157140

158-
data = Z_STRVAL(tmp);
159-
160141
if (string_key) {
161142
if (string_key->len == 0) {
162143
goto next_element;
163144
}
164145

165-
l = string_key->len + el_len + 2;
146+
l = string_key->len + str->len + 2;
166147
memcpy(p, string_key->val, string_key->len);
167148
strncat(p, "=", 1);
168-
strncat(p, data, el_len);
149+
strncat(p, str->val, str->len);
169150

170151
#ifndef PHP_WIN32
171152
*ep = p;
172153
++ep;
173154
#endif
174155
p += l;
175156
} else {
176-
memcpy(p,data,el_len);
157+
memcpy(p, str->val, str->len);
177158
#ifndef PHP_WIN32
178159
*ep = p;
179160
++ep;
180161
#endif
181-
p += el_len + 1;
162+
p += str->len + 1;
182163
}
183164
next_element:
184-
if (Z_TYPE_P(element) != IS_STRING) {
185-
zval_dtor(&tmp);
186-
}
165+
STR_RELEASE(str);
187166
} ZEND_HASH_FOREACH_END();
188167

189168
assert((uint)(p - env.envp) <= sizeenv);

0 commit comments

Comments
 (0)