Skip to content

Commit 717ae7f

Browse files
committed
curl: Deduplicate features array
1 parent 1e30f8b commit 717ae7f

File tree

1 file changed

+53
-107
lines changed

1 file changed

+53
-107
lines changed

ext/curl/interface.c

Lines changed: 53 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,54 @@ static zend_object *curl_clone_obj(zend_object *object);
221221
php_curl *init_curl_handle_into_zval(zval *curl);
222222
static inline zend_result build_mime_structure_from_hash(php_curl *ch, zval *zpostfields);
223223

224+
struct php_curl_feature {
225+
const char *name;
226+
int bitmask;
227+
};
228+
229+
/* To update on each new cURL release using src/main.c in cURL sources */
230+
static const struct php_curl_feature php_curl_features[] = {
231+
{ "AsynchDNS", CURL_VERSION_ASYNCHDNS },
232+
{ "CharConv", CURL_VERSION_CONV },
233+
{ "Debug", CURL_VERSION_DEBUG },
234+
{ "GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE },
235+
{ "IDN", CURL_VERSION_IDN },
236+
{ "IPv6", CURL_VERSION_IPV6 },
237+
{ "krb4", CURL_VERSION_KERBEROS4 },
238+
{ "Largefile", CURL_VERSION_LARGEFILE },
239+
{ "libz", CURL_VERSION_LIBZ },
240+
{ "NTLM", CURL_VERSION_NTLM },
241+
{ "NTLMWB", CURL_VERSION_NTLM_WB },
242+
{ "SPNEGO", CURL_VERSION_SPNEGO },
243+
{ "SSL", CURL_VERSION_SSL },
244+
{ "SSPI", CURL_VERSION_SSPI },
245+
{ "TLS-SRP", CURL_VERSION_TLSAUTH_SRP },
246+
{ "HTTP2", CURL_VERSION_HTTP2 },
247+
{ "GSSAPI", CURL_VERSION_GSSAPI },
248+
{ "KERBEROS5", CURL_VERSION_KERBEROS5 },
249+
{ "UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS },
250+
{ "PSL", CURL_VERSION_PSL },
251+
{ "HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY },
252+
{ "MULTI_SSL", CURL_VERSION_MULTI_SSL },
253+
{ "BROTLI", CURL_VERSION_BROTLI },
254+
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
255+
{ "ALTSVC", CURL_VERSION_ALTSVC },
256+
#endif
257+
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
258+
{ "HTTP3", CURL_VERSION_HTTP3 },
259+
#endif
260+
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
261+
{ "UNICODE", CURL_VERSION_UNICODE },
262+
{ "ZSTD", CURL_VERSION_ZSTD },
263+
#endif
264+
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
265+
{ "HSTS", CURL_VERSION_HSTS },
266+
#endif
267+
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
268+
{ "GSASL", CURL_VERSION_GSASL },
269+
#endif
270+
};
271+
224272
/* {{{ PHP_INI_BEGIN */
225273
PHP_INI_BEGIN()
226274
PHP_INI_ENTRY("curl.cainfo", "", PHP_INI_SYSTEM, NULL)
@@ -242,64 +290,12 @@ PHP_MINFO_FUNCTION(curl)
242290
snprintf(str, sizeof(str), "%d", d->age);
243291
php_info_print_table_row(2, "Age", str);
244292

245-
/* To update on each new cURL release using src/main.c in cURL sources */
246-
/* make sure to sync this list with curl_version as well */
247293
if (d->features) {
248-
struct feat {
249-
const char *name;
250-
int bitmask;
251-
};
252-
253294
unsigned int i;
254295

255-
static const struct feat feats[] = {
256-
{"AsynchDNS", CURL_VERSION_ASYNCHDNS},
257-
{"CharConv", CURL_VERSION_CONV},
258-
{"Debug", CURL_VERSION_DEBUG},
259-
{"GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE},
260-
{"IDN", CURL_VERSION_IDN},
261-
{"IPv6", CURL_VERSION_IPV6},
262-
{"krb4", CURL_VERSION_KERBEROS4},
263-
{"Largefile", CURL_VERSION_LARGEFILE},
264-
{"libz", CURL_VERSION_LIBZ},
265-
{"NTLM", CURL_VERSION_NTLM},
266-
{"NTLMWB", CURL_VERSION_NTLM_WB},
267-
{"SPNEGO", CURL_VERSION_SPNEGO},
268-
{"SSL", CURL_VERSION_SSL},
269-
{"SSPI", CURL_VERSION_SSPI},
270-
{"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
271-
{"HTTP2", CURL_VERSION_HTTP2},
272-
{"GSSAPI", CURL_VERSION_GSSAPI},
273-
{"KERBEROS5", CURL_VERSION_KERBEROS5},
274-
{"UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS},
275-
{"PSL", CURL_VERSION_PSL},
276-
{"HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY},
277-
{"MULTI_SSL", CURL_VERSION_MULTI_SSL},
278-
{"BROTLI", CURL_VERSION_BROTLI},
279-
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
280-
{"ALTSVC", CURL_VERSION_ALTSVC},
281-
#endif
282-
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
283-
{"HTTP3", CURL_VERSION_HTTP3},
284-
#endif
285-
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
286-
{"UNICODE", CURL_VERSION_UNICODE},
287-
{"ZSTD", CURL_VERSION_ZSTD},
288-
#endif
289-
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
290-
{"HSTS", CURL_VERSION_HSTS},
291-
#endif
292-
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
293-
{"GSASL", CURL_VERSION_GSASL},
294-
#endif
295-
{NULL, 0}
296-
};
297-
298296
php_info_print_table_row(1, "Features");
299-
for(i=0; i<sizeof(feats)/sizeof(feats[0]); i++) {
300-
if (feats[i].name) {
301-
php_info_print_table_row(2, feats[i].name, d->features & feats[i].bitmask ? "Yes" : "No");
302-
}
297+
for (i = 0; i < sizeof(php_curl_features) / sizeof(php_curl_features[0]); i++) {
298+
php_info_print_table_row(2, php_curl_features[i].name, d->features & php_curl_features[i].bitmask ? "Yes" : "No");
303299
}
304300
}
305301

@@ -970,62 +966,12 @@ PHP_FUNCTION(curl_version)
970966
CAAL("features", d->features);
971967
/* Add an array of features */
972968
{
973-
struct feat {
974-
const char *name;
975-
int bitmask;
976-
};
977-
978969
unsigned int i;
979970
zval feature_list;
980-
array_init(&feature_list);
981-
982-
/* Sync this list with PHP_MINFO_FUNCTION(curl) as well */
983-
static const struct feat feats[] = {
984-
{"AsynchDNS", CURL_VERSION_ASYNCHDNS},
985-
{"CharConv", CURL_VERSION_CONV},
986-
{"Debug", CURL_VERSION_DEBUG},
987-
{"GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE},
988-
{"IDN", CURL_VERSION_IDN},
989-
{"IPv6", CURL_VERSION_IPV6},
990-
{"krb4", CURL_VERSION_KERBEROS4},
991-
{"Largefile", CURL_VERSION_LARGEFILE},
992-
{"libz", CURL_VERSION_LIBZ},
993-
{"NTLM", CURL_VERSION_NTLM},
994-
{"NTLMWB", CURL_VERSION_NTLM_WB},
995-
{"SPNEGO", CURL_VERSION_SPNEGO},
996-
{"SSL", CURL_VERSION_SSL},
997-
{"SSPI", CURL_VERSION_SSPI},
998-
{"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
999-
{"HTTP2", CURL_VERSION_HTTP2},
1000-
{"GSSAPI", CURL_VERSION_GSSAPI},
1001-
{"KERBEROS5", CURL_VERSION_KERBEROS5},
1002-
{"UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS},
1003-
{"PSL", CURL_VERSION_PSL},
1004-
{"HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY},
1005-
{"MULTI_SSL", CURL_VERSION_MULTI_SSL},
1006-
{"BROTLI", CURL_VERSION_BROTLI},
1007-
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
1008-
{"ALTSVC", CURL_VERSION_ALTSVC},
1009-
#endif
1010-
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
1011-
{"HTTP3", CURL_VERSION_HTTP3},
1012-
#endif
1013-
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
1014-
{"UNICODE", CURL_VERSION_UNICODE},
1015-
{"ZSTD", CURL_VERSION_ZSTD},
1016-
#endif
1017-
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
1018-
{"HSTS", CURL_VERSION_HSTS},
1019-
#endif
1020-
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
1021-
{"GSASL", CURL_VERSION_GSASL},
1022-
#endif
1023-
};
1024971

1025-
for(i = 0; i < sizeof(feats) / sizeof(feats[0]); i++) {
1026-
if (feats[i].name) {
1027-
add_assoc_bool(&feature_list, feats[i].name, d->features & feats[i].bitmask ? true : false);
1028-
}
972+
array_init_size(&feature_list, sizeof(php_curl_features) / sizeof(php_curl_features[0]));
973+
for (i = 0; i < sizeof(php_curl_features) / sizeof(php_curl_features[0]); i++) {
974+
add_assoc_bool(&feature_list, php_curl_features[i].name, d->features & php_curl_features[i].bitmask ? true : false);
1029975
}
1030976

1031977
CAAZ("feature_list", &feature_list);

0 commit comments

Comments
 (0)