[pacman-dev] [PATCH 1/2] Add config option to specify amount of concurrent download streams

brainpower brainpower at mailbox.org
Wed Mar 4 22:32:31 UTC 2020


Hi!

Am 04.03.20 um 22:29 schrieb Anatol Pomozov:
> On Wed, Mar 4, 2020 at 12:39 PM Anatol Pomozov <anatol.pomozov at gmail.com> wrote:
>> +               } else if(strcmp(key, "ConcurrentDownloadStreams") == 0) {
>> +                       /* TODO: what is the best way to handle int conversion errors? */
>> +                       config->concurrent_download_streams = atoi(value);
> 
> Here is a question I have. What is the best way to handle int
> conversion errors for this option?
> 

I'd recommend strtol() [1] over atoi() any time.
It makes it a lot easier to get error handling right, well, in most cases actually possible at all!

I do not know of any way to differentiate between a valid "0" input and the error case with atoi().
There is no way to detect if the input was out of range, atoi() just gives some undefined value.
(The only valid use case for atoi() I might find acceptable would be if you can be *absolutely* sure the input is a valid int. e.g. validate before passing to atoi)


With strtol() do the following:

1. Call strol()
2. Check if *end is NULL, if it is not, parsing was aborted at the position *end points to
3. Check errno for ERANGE, it gets set if the integer given does not fit into a long
4. Now use the number. Check range again, if you want to downcast the long to int.

[1]: https://en.cppreference.com/w/c/string/byte/strtol



-- 
regards,
brainpower

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/pacman-dev/attachments/20200304/008d7899/attachment.sig>


More information about the pacman-dev mailing list