Skip to content

Commit 3259696

Browse files
committed
curl: Deduplicate features array
1 parent 7b9145d commit 3259696

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
@@ -237,6 +237,54 @@ static zend_object *curl_clone_obj(zend_object *object);
237237
php_curl *init_curl_handle_into_zval(zval *curl);
238238
static inline zend_result build_mime_structure_from_hash(php_curl *ch, zval *zpostfields);
239239

240+
struct php_curl_feature {
241+
const char *name;
242+
int bitmask;
243+
};
244+
245+
/* To update on each new cURL release using src/main.c in cURL sources */
246+
static const struct php_curl_feature php_curl_features[] = {
247+
{ "AsynchDNS", CURL_VERSION_ASYNCHDNS },
248+
{ "CharConv", CURL_VERSION_CONV },
249+
{ "Debug", CURL_VERSION_DEBUG },
250+
{ "GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE },
251+
{ "IDN", CURL_VERSION_IDN },
252+
{ "IPv6", CURL_VERSION_IPV6 },
253+
{ "krb4", CURL_VERSION_KERBEROS4 },
254+
{ "Largefile", CURL_VERSION_LARGEFILE },
255+
{ "libz", CURL_VERSION_LIBZ },
256+
{ "NTLM", CURL_VERSION_NTLM },
257+
{ "NTLMWB", CURL_VERSION_NTLM_WB },
258+
{ "SPNEGO", CURL_VERSION_SPNEGO },
259+
{ "SSL", CURL_VERSION_SSL },
260+
{ "SSPI", CURL_VERSION_SSPI },
261+
{ "TLS-SRP", CURL_VERSION_TLSAUTH_SRP },
262+
{ "HTTP2", CURL_VERSION_HTTP2 },
263+
{ "GSSAPI", CURL_VERSION_GSSAPI },
264+
{ "KERBEROS5", CURL_VERSION_KERBEROS5 },
265+
{ "UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS },
266+
{ "PSL", CURL_VERSION_PSL },
267+
{ "HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY },
268+
{ "MULTI_SSL", CURL_VERSION_MULTI_SSL },
269+
{ "BROTLI", CURL_VERSION_BROTLI },
270+
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
271+
{ "ALTSVC", CURL_VERSION_ALTSVC },
272+
#endif
273+
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
274+
{ "HTTP3", CURL_VERSION_HTTP3 },
275+
#endif
276+
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
277+
{ "UNICODE", CURL_VERSION_UNICODE },
278+
{ "ZSTD", CURL_VERSION_ZSTD },
279+
#endif
280+
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
281+
{ "HSTS", CURL_VERSION_HSTS },
282+
#endif
283+
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
284+
{ "GSASL", CURL_VERSION_GSASL },
285+
#endif
286+
};
287+
240288
/* {{{ PHP_INI_BEGIN */
241289
PHP_INI_BEGIN()
242290
PHP_INI_ENTRY("curl.cainfo", "", PHP_INI_SYSTEM, NULL)
@@ -258,64 +306,12 @@ PHP_MINFO_FUNCTION(curl)
258306
snprintf(str, sizeof(str), "%d", d->age);
259307
php_info_print_table_row(2, "Age", str);
260308

261-
/* To update on each new cURL release using src/main.c in cURL sources */
262-
/* make sure to sync this list with curl_version as well */
263309
if (d->features) {
264-
struct feat {
265-
const char *name;
266-
int bitmask;
267-
};
268-
269310
unsigned int i;
270311

271-
static const struct feat feats[] = {
272-
{"AsynchDNS", CURL_VERSION_ASYNCHDNS},
273-
{"CharConv", CURL_VERSION_CONV},
274-
{"Debug", CURL_VERSION_DEBUG},
275-
{"GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE},
276-
{"IDN", CURL_VERSION_IDN},
277-
{"IPv6", CURL_VERSION_IPV6},
278-
{"krb4", CURL_VERSION_KERBEROS4},
279-
{"Largefile", CURL_VERSION_LARGEFILE},
280-
{"libz", CURL_VERSION_LIBZ},
281-
{"NTLM", CURL_VERSION_NTLM},
282-
{"NTLMWB", CURL_VERSION_NTLM_WB},
283-
{"SPNEGO", CURL_VERSION_SPNEGO},
284-
{"SSL", CURL_VERSION_SSL},
285-
{"SSPI", CURL_VERSION_SSPI},
286-
{"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
287-
{"HTTP2", CURL_VERSION_HTTP2},
288-
{"GSSAPI", CURL_VERSION_GSSAPI},
289-
{"KERBEROS5", CURL_VERSION_KERBEROS5},
290-
{"UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS},
291-
{"PSL", CURL_VERSION_PSL},
292-
{"HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY},
293-
{"MULTI_SSL", CURL_VERSION_MULTI_SSL},
294-
{"BROTLI", CURL_VERSION_BROTLI},
295-
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
296-
{"ALTSVC", CURL_VERSION_ALTSVC},
297-
#endif
298-
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
299-
{"HTTP3", CURL_VERSION_HTTP3},
300-
#endif
301-
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
302-
{"UNICODE", CURL_VERSION_UNICODE},
303-
{"ZSTD", CURL_VERSION_ZSTD},
304-
#endif
305-
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
306-
{"HSTS", CURL_VERSION_HSTS},
307-
#endif
308-
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
309-
{"GSASL", CURL_VERSION_GSASL},
310-
#endif
311-
{NULL, 0}
312-
};
313-
314312
php_info_print_table_row(1, "Features");
315-
for(i=0; i<sizeof(feats)/sizeof(feats[0]); i++) {
316-
if (feats[i].name) {
317-
php_info_print_table_row(2, feats[i].name, d->features & feats[i].bitmask ? "Yes" : "No");
318-
}
313+
for (i = 0; i < sizeof(php_curl_features) / sizeof(php_curl_features[0]); i++) {
314+
php_info_print_table_row(2, php_curl_features[i].name, d->features & php_curl_features[i].bitmask ? "Yes" : "No");
319315
}
320316
}
321317

@@ -1013,62 +1009,12 @@ PHP_FUNCTION(curl_version)
10131009
CAAL("features", d->features);
10141010
/* Add an array of features */
10151011
{
1016-
struct feat {
1017-
const char *name;
1018-
int bitmask;
1019-
};
1020-
10211012
unsigned int i;
10221013
zval feature_list;
1023-
array_init(&feature_list);
1024-
1025-
/* Sync this list with PHP_MINFO_FUNCTION(curl) as well */
1026-
static const struct feat feats[] = {
1027-
{"AsynchDNS", CURL_VERSION_ASYNCHDNS},
1028-
{"CharConv", CURL_VERSION_CONV},
1029-
{"Debug", CURL_VERSION_DEBUG},
1030-
{"GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE},
1031-
{"IDN", CURL_VERSION_IDN},
1032-
{"IPv6", CURL_VERSION_IPV6},
1033-
{"krb4", CURL_VERSION_KERBEROS4},
1034-
{"Largefile", CURL_VERSION_LARGEFILE},
1035-
{"libz", CURL_VERSION_LIBZ},
1036-
{"NTLM", CURL_VERSION_NTLM},
1037-
{"NTLMWB", CURL_VERSION_NTLM_WB},
1038-
{"SPNEGO", CURL_VERSION_SPNEGO},
1039-
{"SSL", CURL_VERSION_SSL},
1040-
{"SSPI", CURL_VERSION_SSPI},
1041-
{"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
1042-
{"HTTP2", CURL_VERSION_HTTP2},
1043-
{"GSSAPI", CURL_VERSION_GSSAPI},
1044-
{"KERBEROS5", CURL_VERSION_KERBEROS5},
1045-
{"UNIX_SOCKETS", CURL_VERSION_UNIX_SOCKETS},
1046-
{"PSL", CURL_VERSION_PSL},
1047-
{"HTTPS_PROXY", CURL_VERSION_HTTPS_PROXY},
1048-
{"MULTI_SSL", CURL_VERSION_MULTI_SSL},
1049-
{"BROTLI", CURL_VERSION_BROTLI},
1050-
#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */
1051-
{"ALTSVC", CURL_VERSION_ALTSVC},
1052-
#endif
1053-
#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */
1054-
{"HTTP3", CURL_VERSION_HTTP3},
1055-
#endif
1056-
#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */
1057-
{"UNICODE", CURL_VERSION_UNICODE},
1058-
{"ZSTD", CURL_VERSION_ZSTD},
1059-
#endif
1060-
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
1061-
{"HSTS", CURL_VERSION_HSTS},
1062-
#endif
1063-
#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */
1064-
{"GSASL", CURL_VERSION_GSASL},
1065-
#endif
1066-
};
10671014

1068-
for(i = 0; i < sizeof(feats) / sizeof(feats[0]); i++) {
1069-
if (feats[i].name) {
1070-
add_assoc_bool(&feature_list, feats[i].name, d->features & feats[i].bitmask ? true : false);
1071-
}
1015+
array_init_size(&feature_list, sizeof(php_curl_features) / sizeof(php_curl_features[0]));
1016+
for (i = 0; i < sizeof(php_curl_features) / sizeof(php_curl_features[0]); i++) {
1017+
add_assoc_bool(&feature_list, php_curl_features[i].name, d->features & php_curl_features[i].bitmask ? true : false);
10721018
}
10731019

10741020
CAAZ("feature_list", &feature_list);

0 commit comments

Comments
 (0)