libc: Fix some MISRA defects
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Thu, 23 Aug 2018 14:11:46 +0000 (15:11 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Thu, 30 Aug 2018 15:21:59 +0000 (16:21 +0100)
No functional changes.

Change-Id: I907aa47565af2a6c435a5560041fd2b59e65c25c
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
lib/libc/exit.c
lib/libc/printf.c
lib/libc/puts.c
lib/libc/snprintf.c

index b2fde9ca290d2d7696cb4f5bff5d3b227e5a83c2..f4ffe27cfb6a96447d92a7cf176151bfce2de794 100644 (file)
@@ -10,7 +10,7 @@ static void (*exitfun)(void);
 
 void exit(int status)
 {
-       if (exitfun)
+       if (exitfun != NULL)
                (*exitfun)();
        for (;;)
                ;
@@ -18,7 +18,7 @@ void exit(int status)
 
 int atexit(void (*fun)(void))
 {
-       if (exitfun)
+       if (exitfun != NULL)
                return -1;
        exitfun = fun;
 
index 4f4a722f7829f91a6702101212d5803caf1ab141..4480e94db7610659ff044a843541a7d570282f9e 100644 (file)
@@ -6,28 +6,27 @@
 #include <assert.h>
 #include <debug.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <stdint.h>
 
-/***********************************************************
- * The printf implementation for all BL stages
- ***********************************************************/
+#define get_num_va_args(_args, _lcount)                                \
+       (((_lcount) > 1)  ? va_arg(_args, long long int) :      \
+       (((_lcount) == 1) ? va_arg(_args, long int) :           \
+                           va_arg(_args, int)))
 
-#define get_num_va_args(_args, _lcount) \
-       (((_lcount) > 1) ? va_arg(_args, long long int) :       \
-       ((_lcount) ? va_arg(_args, long int) : va_arg(_args, int)))
-
-#define get_unum_va_args(_args, _lcount) \
-       (((_lcount) > 1) ? va_arg(_args, unsigned long long int) :      \
-       ((_lcount) ? va_arg(_args, unsigned long int) : va_arg(_args, unsigned int)))
+#define get_unum_va_args(_args, _lcount)                               \
+       (((_lcount) > 1)  ? va_arg(_args, unsigned long long int) :     \
+       (((_lcount) == 1) ? va_arg(_args, unsigned long int) :          \
+                           va_arg(_args, unsigned int)))
 
 static int string_print(const char *str)
 {
        int count = 0;
 
-       assert(str);
+       assert(str != NULL);
 
-       while (*str) {
-               putchar(*str++);
+       for ( ; *str != '\0'; str++) {
+               (void)putchar(*str);
                count++;
        }
 
@@ -38,26 +37,30 @@ static int unsigned_num_print(unsigned long long int unum, unsigned int radix,
                              char padc, int padn)
 {
        /* Just need enough space to store 64 bit decimal integer */
-       unsigned char num_buf[20];
-       int i = 0, rem, count = 0;
+       char num_buf[20];
+       int i = 0, count = 0;
+       unsigned int rem;
 
        do {
                rem = unum % radix;
                if (rem < 0xa)
-                       num_buf[i++] = '0' + rem;
+                       num_buf[i] = '0' + rem;
                else
-                       num_buf[i++] = 'a' + (rem - 0xa);
-       } while (unum /= radix);
+                       num_buf[i] = 'a' + (rem - 0xa);
+               i++;
+               unum /= radix;
+       } while (unum > 0U);
 
        if (padn > 0) {
-               while (i < padn--) {
-                       putchar(padc);
+               while (i < padn) {
+                       (void)putchar(padc);
                        count++;
+                       padn--;
                }
        }
 
        while (--i >= 0) {
-               putchar(num_buf[i]);
+               (void)putchar(num_buf[i]);
                count++;
        }
 
@@ -90,11 +93,11 @@ int vprintf(const char *fmt, va_list args)
        long long int num;
        unsigned long long int unum;
        char *str;
-       char padc = 0; /* Padding character */
+       char padc = '\0'; /* Padding character */
        int padn; /* Number of characters to pad */
        int count = 0; /* Number of printed characters */
 
-       while (*fmt) {
+       while (*fmt != '\0') {
                l_count = 0;
                padn = 0;
 
@@ -107,7 +110,7 @@ loop:
                        case 'd':
                                num = get_num_va_args(args, l_count);
                                if (num < 0) {
-                                       putchar('-');
+                                       (void)putchar('-');
                                        unum = (unsigned long long int)-num;
                                        padn--;
                                } else
@@ -122,7 +125,7 @@ loop:
                                break;
                        case 'p':
                                unum = (uintptr_t)va_arg(args, void *);
-                               if (unum) {
+                               if (unum > 0U) {
                                        count += string_print("0x");
                                        padn -= 2;
                                }
@@ -136,7 +139,7 @@ loop:
                                                            padc, padn);
                                break;
                        case 'z':
-                               if (sizeof(size_t) == 8)
+                               if (sizeof(size_t) == 8U)
                                        l_count = 2;
 
                                fmt++;
@@ -155,9 +158,9 @@ loop:
                                padn = 0;
                                fmt++;
 
-                               while (1) {
+                               for (;;) {
                                        char ch = *fmt;
-                                       if (ch < '0' || ch > '9') {
+                                       if ((ch < '0') || (ch > '9')) {
                                                goto loop;
                                        }
                                        padn = (padn * 10) + (ch - '0');
@@ -170,7 +173,8 @@ loop:
                        fmt++;
                        continue;
                }
-               putchar(*fmt++);
+               (void)putchar(*fmt);
+               fmt++;
                count++;
        }
 
index 717b5228e26bb191f271432cd7fa55c98cc4a8ee..2a0ca11c62e2315fca8e4ccf75a61613f8676a83 100644 (file)
@@ -10,9 +10,10 @@ int puts(const char *s)
 {
        int count = 0;
 
-       while (*s) {
-               if (putchar(*s++) == EOF)
+       while (*s != '\0') {
+               if (putchar(*s) == EOF)
                        return EOF;
+               s++;
                count++;
        }
 
index 0738a869678af32f1400186ffd2552ab3e405a6e..9bc07b2cb4b4c224e3245632527a1b6c040f05d3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
 static void string_print(char **s, size_t n, size_t *chars_printed,
                         const char *str)
 {
-       while (*str) {
-               if (*chars_printed < n)
-                       *(*s)++ = *str;
+       while (*str != '\0') {
+               if (*chars_printed < n) {
+                       *(*s) = *str;
+                       (*s)++;
+               }
+
                (*chars_printed)++;
                str++;
        }
@@ -23,17 +26,22 @@ static void unsigned_dec_print(char **s, size_t n, size_t *chars_printed,
                               unsigned int unum)
 {
        /* Enough for a 32-bit unsigned decimal integer (4294967295). */
-       unsigned char num_buf[10];
-       int i = 0, rem;
+       char num_buf[10];
+       int i = 0;
+       unsigned int rem;
 
        do {
-               rem = unum % 10;
+               rem = unum % 10U;
                num_buf[i++] = '0' + rem;
-       } while (unum /= 10);
+               unum /= 10U;
+       } while (unum > 0U);
 
        while (--i >= 0) {
-               if (*chars_printed < n)
-                       *(*s)++ = num_buf[i];
+               if (*chars_printed < n) {
+                       *(*s) = num_buf[i];
+                       (*s)++;
+               }
+
                (*chars_printed)++;
        }
 }
@@ -58,19 +66,21 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
        int num;
        unsigned int unum;
        char *str;
-       size_t chars_printed = 0;
+       size_t chars_printed = 0U;
 
-       if (n == 1) {
+       if (n == 0U) {
+               /* There isn't space for anything. */
+       } else if (n == 1U) {
                /* Buffer is too small to actually write anything else. */
                *s = '\0';
-               n = 0;
-       } else if (n >= 2) {
+               n = 0U;
+       } else {
                /* Reserve space for the terminator character. */
                n--;
        }
 
        va_start(args, fmt);
-       while (*fmt) {
+       while (*fmt != '\0') {
 
                if (*fmt == '%') {
                        fmt++;
@@ -81,8 +91,10 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
                                num = va_arg(args, int);
 
                                if (num < 0) {
-                                       if (chars_printed < n)
-                                               *s++ = '-';
+                                       if (chars_printed < n) {
+                                               *s = '-';
+                                               s++;
+                                       }
                                        chars_printed++;
 
                                        unum = (unsigned int)-num;
@@ -110,16 +122,19 @@ int snprintf(char *s, size_t n, const char *fmt, ...)
                        continue;
                }
 
-               if (chars_printed < n)
-                       *s++ = *fmt;
+               if (chars_printed < n) {
+                       *s = *fmt;
+                       s++;
+               }
+
                fmt++;
                chars_printed++;
        }
 
        va_end(args);
 
-       if (n > 0)
+       if (n > 0U)
                *s = '\0';
 
-       return chars_printed;
+       return (int)chars_printed;
 }