[SLOF] [PATCH slof 02/13] libc: Compile with -Wextra
Alexey Kardashevskiy
aik at ozlabs.ru
Thu Jan 28 14:29:07 AEDT 2021
On 27/01/2021 23:58, Thomas Huth wrote:
> On 27/01/2021 09.57, Alexey Kardashevskiy wrote:
>> -Wextra enables a bunch of rather useful checks which this fixes.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
>> ---
>> lib/libc/stdio/vsnprintf.c | 15 ++++++++-------
>> lib/libc/string/memmove.c | 2 +-
>> 2 files changed, 9 insertions(+), 8 deletions(-)
>>
>> diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c
>> index 21dd04dfe46f..1a44301f74da 100644
>> --- a/lib/libc/stdio/vsnprintf.c
>> +++ b/lib/libc/stdio/vsnprintf.c
>> @@ -25,15 +25,15 @@ static int
>> print_str_fill(char **buffer, size_t bufsize, char *sizec,
>> const char *str, char c)
>> {
>> - int i, sizei, len;
>> + unsigned i, sizei, len;
>> char *bstart = *buffer;
>> sizei = strtoul(sizec, NULL, 10);
>> len = strlen(str);
>> if (sizei > len) {
>> for (i = 0;
>> - (i < (sizei - len)) && ((*buffer - bstart) < bufsize);
>> - i++) {
>> + (i < (sizei - len)) && ((*buffer - bstart) < (int)bufsize);
>
> bufsize is of type size_t, so the correct way to cast would be
> "(ssize_t)" instead of "(int)", I think.
> Maybe it would also be worth the effort to introduce a new local
> variable a la:
>
> ssize_t sbufsize = (ssize_t)bufsize;
>
> so that you don't have to do the cast again and again all over the place?
This is done once per a function, does not seem worth the variable,
unless I missed something? Thanks,
>
> Thomas
>
>
>> + i++) {
>> **buffer = c;
>> *buffer += 1;
>> }
>> @@ -47,7 +47,7 @@ print_str(char **buffer, size_t bufsize, const char
>> *str)
>> char *bstart = *buffer;
>> size_t i;
>> - for (i = 0; (i < strlen(str)) && ((*buffer - bstart) < bufsize);
>> i++) {
>> + for (i = 0; (i < strlen(str)) && ((*buffer - bstart) <
>> (int)bufsize); i++) {
>> **buffer = str[i];
>> *buffer += 1;
>> }
>> @@ -112,7 +112,7 @@ print_fill(char **buffer, size_t bufsize, char
>> *sizec, unsigned long size,
>> len = print_intlen(size, base) + optlen;
>> if (sizei > len) {
>> for (i = 0;
>> - (i < (sizei - len)) && ((*buffer - bstart) < bufsize);
>> + (i < (sizei - len)) && ((*buffer - bstart) < (int)bufsize);
>> i++) {
>> **buffer = c;
>> *buffer += 1;
>> @@ -143,7 +143,7 @@ print_format(char **buffer, size_t bufsize, const
>> char *format, void *var)
>> form++;
>> }
>> - while ((*form != '\0') && ((*buffer - start) < bufsize)) {
>> + while ((*form != '\0') && ((*buffer - start) < (int)bufsize)) {
>> switch(*form) {
>> case 'u':
>> case 'd':
>> @@ -163,6 +163,7 @@ print_format(char **buffer, size_t bufsize, const
>> char *format, void *var)
>> break;
>> case 'X':
>> upper = true;
>> + /* fallthrough */
>> case 'x':
>> sizec[i] = '\0';
>> value = (unsigned long) var & convert[length_mod];
>> @@ -260,7 +261,7 @@ vsnprintf(char *buffer, size_t bufsize, const char
>> *format, va_list arg)
>> /* Leave one space for NULL character */
>> bufsize--;
>> - while(*ptr != '\0' && (buffer - bstart) < bufsize)
>> + while(*ptr != '\0' && (buffer - bstart) < (int)bufsize)
>> {
>> if(*ptr == '%') {
>> char formstr[20];
>> diff --git a/lib/libc/string/memmove.c b/lib/libc/string/memmove.c
>> index 3acf1a973bbe..9d0962847296 100644
>> --- a/lib/libc/string/memmove.c
>> +++ b/lib/libc/string/memmove.c
>> @@ -18,7 +18,7 @@ memmove(void *dest, const void *src, size_t n)
>> {
>> char *cdest;
>> const char *csrc;
>> - int i;
>> + size_t i;
>> /* Do the buffers overlap in a bad way? */
>> if (src < dest && src + n >= dest) {
>>
>
--
Alexey
More information about the SLOF
mailing list