On 9/13/2021 7:01 AM, Daniel Stenberg via curl-library wrote:
> A) If we drop the < 64 bit requirement (1), we can introduce
> CURLOPT_PROTOCOLS_LARGE etc that use a (guaranteed) 64 bit type and we
> double room for protocols, which should be enough for the forseeable
> future.
>
> B) If we maintain the < 64 bit requirement (1), we would have to do
> something like introducing a *second* protocol option for the next set
> of protocols. It would be error-prone and cumbersome for users (it
> will appear semi-random as to which protocols that appear in which
> bitmask etc) and also inconvenient to handle internally. Perpaps one
> of the bits in the first bitmask should then signal that there are
> bits set in the second one. Or perhaps that's not necessary. 


I like CURLOPT_PROTOCOLS_LARGE and I think that we could continue to
support systems that do not have a 64-bit type (like what?) by not
defining those proto masks for them. I think a bigger problem would be
users that continue to use CURLOPT_PROTOCOLS and the like but pass those
options extended protocols, effectively passing a curl_off_t to an
option that expects a long. We could have a signal bit like a trouble
bit in every extended protocol and then check what is passed in
curlopt_protocols for the trouble bit and refuse to work in such a case.
Like this

#define CURLPROTO_EXTENDED_FLAG (1<<30)
#define CURLPROTO_DONT_USE (1<<31)
#define CURLPROTO_MAKE_EXTENDED(idx)
(CURL_OFF_T_C(1)<<idx)|CURLPROTO_EXTENDED_FLAG
#define CURLPROTO_IS_EXTENDED(proto) ((proto)&CURLPROTO_EXTENDED_FLAG)
#define CURLPROTO_FOO  CURLPROTO_MAKE_EXTENDED(32)
#define CURLPROTO_BAR  CURLPROTO_MAKE_EXTENDED(33)

CURLPROTO_ALL could still technically enable everything

and in CURLOPT_PROTOCOLS setopt:

long allowed_protocols = va_arg(param, long);

if((allowed_protocols&CURLPROTO_EXTENDED_FLAG) && allowed_protocols !=
CURLPROTO_ALL)
  /* problem */


-- 
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to