@@ -221,6 +221,54 @@ static zend_object *curl_clone_obj(zend_object *object);
221221php_curl * init_curl_handle_into_zval (zval * curl );
222222static 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 */
225273PHP_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