From: Phillip Wood <phillip.wood123@gmail.com>
To: "René Scharfe" <l.s.r@web.de>, git@vger.kernel.org
Cc: AtariDreams via GitGitGadget <gitgitgadget@gmail.com>,
Seija Kijin <doremylover123@gmail.com>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Subject: Re: [PATCH] git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
Date: Mon, 18 Dec 2023 16:23:19 +0000 [thread overview]
Message-ID: <b7a56625-46d5-4d77-b4bf-5595a6fb2aef@gmail.com> (raw)
In-Reply-To: <2d30dc36-6091-4b47-846f-92d3f4a8b135@web.de>
Hi René
On 16/12/2023 10:47, René Scharfe wrote:
> Use the data type bool and its values true and false to document the
> binary return value of skip_prefix() and friends more explicitly.
>
> This first use of stdbool.h, introduced with C99, is meant to check
> whether there are platforms that claim support for C99, as tested by
> 7bc341e21b (git-compat-util: add a test balloon for C99 support,
> 2021-12-01), but still lack that header for some reason.
>
> A fallback based on a wider type, e.g. int, would have to deal with
> comparisons somehow to emulate that any non-zero value is true:
>
> bool b1 = 1;
> bool b2 = 2;
> if (b1 == b2) puts("This is true.");
>
> int i1 = 1;
> int i2 = 2;
> if (i1 == i2) puts("Not printed.");
> #define BOOLEQ(a, b) (!(a) == !(b))
> if (BOOLEQ(i1, i2)) puts("This is true.");
>
> So we'd be better off using bool everywhere without a fallback, if
> possible. That's why this patch doesn't include any.
Thanks for the comprehensive commit message, I agree that we'd be better
off avoiding adding a fallback. The patch looks good, I did wonder if we
really need to covert all of these functions for a test-balloon but the
patch is still pretty small overall.
Best Wishes
Phillip
> Signed-off-by: René Scharfe <l.s.r@web.de>
> ---
> git-compat-util.h | 42 ++++++++++++++++++++++--------------------
> 1 file changed, 22 insertions(+), 20 deletions(-)
>
> diff --git a/git-compat-util.h b/git-compat-util.h
> index 3e7a59b5ff..603c97e3b3 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -225,6 +225,7 @@ struct strbuf;
> #include <stddef.h>
> #include <stdlib.h>
> #include <stdarg.h>
> +#include <stdbool.h>
> #include <string.h>
> #ifdef HAVE_STRINGS_H
> #include <strings.h> /* for strcasecmp() */
> @@ -684,11 +685,11 @@ report_fn get_warn_routine(void);
> void set_die_is_recursing_routine(int (*routine)(void));
>
> /*
> - * If the string "str" begins with the string found in "prefix", return 1.
> + * If the string "str" begins with the string found in "prefix", return true.
> * The "out" parameter is set to "str + strlen(prefix)" (i.e., to the point in
> * the string right after the prefix).
> *
> - * Otherwise, return 0 and leave "out" untouched.
> + * Otherwise, return false and leave "out" untouched.
> *
> * Examples:
> *
> @@ -699,57 +700,58 @@ void set_die_is_recursing_routine(int (*routine)(void));
> * [skip prefix if present, otherwise use whole string]
> * skip_prefix(name, "refs/heads/", &name);
> */
> -static inline int skip_prefix(const char *str, const char *prefix,
> - const char **out)
> +static inline bool skip_prefix(const char *str, const char *prefix,
> + const char **out)
> {
> do {
> if (!*prefix) {
> *out = str;
> - return 1;
> + return true;
> }
> } while (*str++ == *prefix++);
> - return 0;
> + return false;
> }
>
> /*
> * Like skip_prefix, but promises never to read past "len" bytes of the input
> * buffer, and returns the remaining number of bytes in "out" via "outlen".
> */
> -static inline int skip_prefix_mem(const char *buf, size_t len,
> - const char *prefix,
> - const char **out, size_t *outlen)
> +static inline bool skip_prefix_mem(const char *buf, size_t len,
> + const char *prefix,
> + const char **out, size_t *outlen)
> {
> size_t prefix_len = strlen(prefix);
> if (prefix_len <= len && !memcmp(buf, prefix, prefix_len)) {
> *out = buf + prefix_len;
> *outlen = len - prefix_len;
> - return 1;
> + return true;
> }
> - return 0;
> + return false;
> }
>
> /*
> - * If buf ends with suffix, return 1 and subtract the length of the suffix
> - * from *len. Otherwise, return 0 and leave *len untouched.
> + * If buf ends with suffix, return true and subtract the length of the suffix
> + * from *len. Otherwise, return false and leave *len untouched.
> */
> -static inline int strip_suffix_mem(const char *buf, size_t *len,
> - const char *suffix)
> +static inline bool strip_suffix_mem(const char *buf, size_t *len,
> + const char *suffix)
> {
> size_t suflen = strlen(suffix);
> if (*len < suflen || memcmp(buf + (*len - suflen), suffix, suflen))
> - return 0;
> + return false;
> *len -= suflen;
> - return 1;
> + return true;
> }
>
> /*
> - * If str ends with suffix, return 1 and set *len to the size of the string
> - * without the suffix. Otherwise, return 0 and set *len to the size of the
> + * If str ends with suffix, return true and set *len to the size of the string
> + * without the suffix. Otherwise, return false and set *len to the size of the
> * string.
> *
> * Note that we do _not_ NUL-terminate str to the new length.
> */
> -static inline int strip_suffix(const char *str, const char *suffix, size_t *len)
> +static inline bool strip_suffix(const char *str, const char *suffix,
> + size_t *len)
> {
> *len = strlen(str);
> return strip_suffix_mem(str, len, suffix);
> --
> 2.43.0
>
next prev parent reply other threads:[~2023-12-18 16:23 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-12 17:17 [PATCH] Use ^=1 to toggle between 0 and 1 AtariDreams via GitGitGadget
2023-12-12 17:29 ` Dragan Simic
2023-12-12 20:09 ` Jeff King
2023-12-12 22:30 ` René Scharfe
2023-12-13 8:01 ` Jeff King
2023-12-13 15:17 ` Junio C Hamano
2023-12-14 13:08 ` René Scharfe
2023-12-14 22:05 ` Jeff King
2023-12-15 14:46 ` Phillip Wood
2023-12-15 17:09 ` Junio C Hamano
2023-12-16 10:46 ` René Scharfe
2023-12-18 16:18 ` Phillip Wood
2023-12-16 10:47 ` [PATCH] git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool René Scharfe
2023-12-18 16:23 ` Phillip Wood [this message]
2023-12-18 20:19 ` Junio C Hamano
2023-12-19 13:36 ` René Scharfe
2023-12-21 9:59 ` Jeff King
2023-12-21 9:56 ` [PATCH] Use ^=1 to toggle between 0 and 1 Jeff King
2023-12-21 15:06 ` phillip.wood123
2024-12-18 0:16 ` [PATCH v2] " AreaZR via GitGitGadget
2024-12-18 0:42 ` [PATCH v3] git: use " AreaZR via GitGitGadget
2024-12-18 2:38 ` [PATCH v4] " AreaZR via GitGitGadget
2024-12-18 16:46 ` [PATCH v5] " AreaZR via GitGitGadget
2024-12-18 16:57 ` [PATCH v6] git: use logical-not operator " AreaZR via GitGitGadget
2024-12-19 10:35 ` Junio C Hamano
2024-12-18 15:46 ` [PATCH v3] git: use ^=1 " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b7a56625-46d5-4d77-b4bf-5595a6fb2aef@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=doremylover123@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=l.s.r@web.de \
--cc=peff@peff.net \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).