[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] tools/libxl: remove usage of VLA arrays
On 28.10.2024 18:26, Roger Pau Monné wrote: > On Mon, Oct 28, 2024 at 12:57:30PM +0000, Frediano Ziglio wrote: >> On Mon, Oct 28, 2024 at 12:48 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: >>> >>> On 28.10.2024 13:03, Andrew Cooper wrote: >>>> On 28/10/2024 11:48 am, Roger Pau Monne wrote: >>>>> Clang 19 complains with the following error when building libxl: >>>>> >>>>> libxl_utils.c:48:15: error: variable length array folded to constant >>>>> array as an extension [-Werror,-Wgnu-folding-constant] >>>>> 48 | char path[strlen("/local/domain") + 12]; >>>>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>> >>>>> Replace the usage of strlen() with ARRAY_SIZE(), which allows the literal >>>>> string length to be known at build time. Note ARRAY_SIZE() accounts for >>>>> the >>>>> NUL terminator while strlen() didn't, hence subtract 1 from the total size >>>>> calculation. >>>>> >>>>> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> >>>>> --- >>>>> tools/libs/light/libxl_utils.c | 4 ++-- >>>>> 1 file changed, 2 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/tools/libs/light/libxl_utils.c >>>>> b/tools/libs/light/libxl_utils.c >>>>> index 10398a6c8611..b3f5e751cc3f 100644 >>>>> --- a/tools/libs/light/libxl_utils.c >>>>> +++ b/tools/libs/light/libxl_utils.c >>>>> @@ -45,7 +45,7 @@ unsigned long libxl_get_required_shadow_memory(unsigned >>>>> long maxmem_kb, unsigned >>>>> char *libxl_domid_to_name(libxl_ctx *ctx, uint32_t domid) >>>>> { >>>>> unsigned int len; >>>>> - char path[strlen("/local/domain") + 12]; >>>>> + char path[ARRAY_SIZE("/local/domain") + 11]; >>>>> char *s; >>>>> >>>>> snprintf(path, sizeof(path), "/local/domain/%d/name", domid); >>>>> @@ -141,7 +141,7 @@ int libxl_cpupool_qualifier_to_cpupoolid(libxl_ctx >>>>> *ctx, const char *p, >>>>> char *libxl_cpupoolid_to_name(libxl_ctx *ctx, uint32_t poolid) >>>>> { >>>>> unsigned int len; >>>>> - char path[strlen("/local/pool") + 12]; >>>>> + char path[ARRAY_SIZE("/local/pool") + 11]; >>>>> char *s; >>>>> >>>>> snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); >>>> >>>> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> >>>> >>>> Although I have a minor preference for sizeof() as suggested by Frediano. >>>> >>>> Can fix on commit, if you're happy? >>> >>> Please can we stick to ARRAY_SIZE() when it comes to strings? It's the >>> same as sizeof() when the base type is char, but the difference becomes >>> relevant if the base type was e.g. wchar_t. >>> >>> Jan >>> >> >> But "literal" is not a wide string, and the type is "char" which is >> not wide too. >> >> BTW, both me and Andrew are not strong about. > > No strong opinion either, I've assumed it was clearer to not make > implicit assumptions about the size of the string literal array > elements. I would rather like to get this committed, and Jan seems to > prefer to use ARRAY_SIZE(), so I suggest we get the patch committed > as-is. Well, ultimately it's Anthony's call, for still being the sole maintainer. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |