There's no warnings as long as size_t and ssize_t variables are not compared.


len = -odp_cpumask_to_str(&mask, NULL, 0);

This looks odd with the minus sign... Almost len -= ...


ssize_t odp_cpumask_to_str(const odp_cpumask_t *mask, char *buf, ssize_t bufsz);

This forces application to use signed buf length and implementation to check 
that bufsz >0.


size_t odp_cpumask_to_str(const odp_cpumask_t *mask, char *str, size_t len) 
would be closer to snprintf() types and logic... which people already know.


-Petri


> -----Original Message-----
> From: ext Ola Liljedahl [mailto:ola.liljed...@linaro.org]
> Sent: Wednesday, January 28, 2015 2:47 PM
> To: Savolainen, Petri (NSN - FI/Espoo)
> Cc: LNG ODP Mailman List
> Subject: Re: [lng-odp] odp_cpumask.h
> 
> The following code compiles without warnings or errors:
> #include <assert.h>
> #include <stddef.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/types.h>
> #include <odp_cpumask.h>
> 
> void test(odp_cpumask_t mask)
> {
>         /* Start with a small value so that a retry will be forced */
>         size_t len = 1;
>         char *str;
> 
>         for (;;) {
>                 ssize_t out;
>                 str = malloc(len);
>                 if (str == NULL)
>                         perror("malloc"), exit(EXIT_FAILURE);
> 
>                 out = odp_cpumask_to_str(&mask, str, len);
>                 if (out > 0) /* success */
>                         break;
> 
>                 /* failure, try with the recommended buffer size */
>                 free(str);
>                 len = -out;
>         }
>         /* do something with str */
>         free(str);
> }
> 
> void test2(odp_cpumask_t mask)
> {
>         char *str;
>         size_t len;
>         ssize_t out;
>         /* Call with zero-length buffer, this will fail and return
> required
>          * buffer size */
>         len = -odp_cpumask_to_str(&mask, NULL, 0);
>         str = malloc(len);
>         if (str == NULL)
>                 perror("malloc"), exit(EXIT_FAILURE);
>         out = odp_cpumask_to_str(&mask, str, len);
>         assert(out > 0);
>         /* do something with str */
>         free(str);
> }
> 
> ssize_t odp_cpumask_to_str(const odp_cpumask_t *mask, char *buf, ssize_t
> bufsz);
> 
> gcc -c -std=c99 -W -Wall -ansi -pedantic test.c -I
> platform/linux-generic/include/api/
> 
> Am I missing any important compiler flags this time?
> 
> 
> On 28 January 2015 at 13:32, Savolainen, Petri (NSN - FI/Espoo)
> <petri.savolai...@nsn.com> wrote:
> >> (maybe your audio was breaking on call yesterday on that part).
> >> I have tested mixing size_t and ssize_t and neither gcc nor clang
> >> complained. I was using -Wall -ansi -pedantic.
> >
> > Missing -W from there ? -Wall is not enough...
> >
> >
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to