From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id ECACF430407 for ; Tue, 11 Aug 2020 01:49:52 +0300 (MSK) References: <20200806131955.3400088-1-yaroslav.dynnikov@tarantool.org> From: Vladislav Shpilevoy Message-ID: <4a43127c-6e11-8f28-27ee-62e24fa65a4b@tarantool.org> Date: Tue, 11 Aug 2020 00:49:50 +0200 MIME-Version: 1.0 In-Reply-To: <20200806131955.3400088-1-yaroslav.dynnikov@tarantool.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [Tarantool-patches] [PATCH] Ensure all curl symbols are exported List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Yaroslav Dynnikov , tarantool-patches@dev.tarantool.org Cc: Alexander Turenko Hi! Thanks for the patch! > diff --git a/test/box-tap/gh-5223-curl-exports.test.lua b/test/box-tap/gh-5223-curl-exports.test.lua > new file mode 100755 > index 000000000..300d60b07 > --- /dev/null > +++ b/test/box-tap/gh-5223-curl-exports.test.lua > @@ -0,0 +1,177 @@ > +#!/usr/bin/env tarantool > + > +local tap = require('tap') > +local ffi = require('ffi') > +ffi.cdef([[ > + void *dlsym(void *handle, const char *symbol); > + struct curl_version_info_data { 1. I don't think you need to copy-paste the entire structure. Anyway it is returned from curl_version_info() by pointer, so you can just announce the pointer type. And in the test check that ffi.C.curl_version_info(7) returned something not nil. I don't think you need to access any fields of this struct. It is going to lead to UB in case the struct will change anyhow in the sources. > + int age; /* see description below */ > + const char *version; /* human readable string */ > + unsigned int version_num; /* numeric representation */ > + const char *host; /* human readable string */ > + int features; /* bitmask, see below */ > + char *ssl_version; /* human readable string */ > + long ssl_version_num; /* not used, always zero */ > + const char *libz_version; /* human readable string */ > + const char * const *protocols; /* protocols */ > + > + /* when 'age' is CURLVERSION_SECOND or higher, the members below exist */ > + const char *ares; /* human readable string */ > + int ares_num; /* number */ > + > + /* when 'age' is CURLVERSION_THIRD or higher, the members below exist */ > + const char *libidn; /* human readable string */ > + > + /* when 'age' is CURLVERSION_FOURTH or higher (>= 7.16.1), the members > + below exist */ > + int iconv_ver_num; /* '_libiconv_version' if iconv support enabled */ > + > + const char *libssh_version; /* human readable string */ > + > + /* when 'age' is CURLVERSION_FIFTH or higher (>= 7.57.0), the members > + below exist */ > + unsigned int brotli_ver_num; /* Numeric Brotli version > + (MAJOR << 24) | (MINOR << 12) | PATCH */ > + const char *brotli_version; /* human readable string. */ > + > + /* when 'age' is CURLVERSION_SIXTH or higher (>= 7.66.0), the members > + below exist */ > + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version > + (MAJOR << 16) | (MINOR << 8) | PATCH */ > + const char *nghttp2_version; /* human readable string. */ > + > + const char *quic_version; /* human readable quic (+ HTTP/3) library + > + version or NULL */ > + > + /* when 'age' is CURLVERSION_SEVENTH or higher (>= 7.70.0), the members > + below exist */ > + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might > + be NULL */ > + const char *capath; /* the built-in default CURLOPT_CAPATH, might > + be NULL */ > + }; > + > + struct curl_version_info_data *curl_version_info(int age); > +]]) > + > +local info = ffi.C.curl_version_info(7) 2. Why '7'? > +local test = tap.test('curl-features') > +test:plan(3) > +