Re: [PATCH v5 1/2] git-compat-util: add strtoi_with_tail()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 30, 2024, 04:40 UTC
- Message-ID
- <xmqqle87e8nx.fsf@gitster.g>
- In-Reply-To
- <f09b0838f049de3e4b8cc6adc6cd4492bac7e967.1706416952.git.gitgitgadget@gmail.com>
"Mohit Marathe via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 18 quoted lines
> From: Mohit Marathe <mohitmarathe23@gmail.com> > > This function is an updated version of strtol_i() function. It will > give more control to handle parsing of the characters after the > numbers and better error handling while parsing numbers. > > Signed-off-by: Mohit Marathe <mohitmarathe@proton.me> > --- > git-compat-util.h | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/git-compat-util.h b/git-compat-util.h > index 7c2a6538e5a..c576b1b104f 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -1309,6 +1309,29 @@ static inline int strtol_i(char const *s, int base, int *result) > return 0; > }
Are we leaving the original one above? Shouldn't this step instead remove it, as strtol_i() is now a C preprocessor macro as seen below?
Show 26 quoted lines
> +#define strtol_i(s,b,r) strtoi_with_tail((s), (b), (r), NULL)
> +static inline int strtoi_with_tail(char const *s, int base, int *result, char **endp)
> +{
> + long ul;
> + char *dummy = NULL;
> +
> + if (!endp)
> + endp = &dummy;
> + errno = 0;
> + ul = strtol(s, endp, base);
> + if (errno ||
> + /*
> + * if we are told to parse to the end of the string by
> + * passing NULL to endp, it is an error to have any
> + * remaining character after the digits.
> + */
> + (dummy && *dummy) ||
> + *endp == s || (int) ul != ul)
> + return -1;
> + *result = ul;
> + return 0;
> +}
> +
> void git_stable_qsort(void *base, size_t nmemb, size_t size,
> int(*compar)(const void *, const void *));
> #ifdef INTERNAL_QSORT