[SLOF] [PATCH slof 02/13] libc: Compile with -Wextra
Thomas Huth
thuth at redhat.com
Wed Jan 27 23:58:26 AEDT 2021
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?
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) {
>
More information about the SLOF
mailing list