[PATCH] acpi: dbg2: remove alloca(), replace with variable length array

Colin King colin.king at canonical.com
Wed Aug 17 09:35:51 UTC 2016


From: Colin Ian King <colin.king at canonical.com>

alloca() is legacy, use C99 variable length array. This fixes a cppcheck
warning:

[src/acpi/dbg2/dbg2.c:132]: (warning) Obsolete function 'alloca'
called. In C99 and later it is recommended to use a variable
length array instead.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/acpi/dbg2/dbg2.c | 56 ++++++++++++++++++++++++++--------------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/src/acpi/dbg2/dbg2.c b/src/acpi/dbg2/dbg2.c
index 72ceaab..a542f1b 100644
--- a/src/acpi/dbg2/dbg2.c
+++ b/src/acpi/dbg2/dbg2.c
@@ -27,7 +27,6 @@
 #include <unistd.h>
 #include <inttypes.h>
 #include <string.h>
-#include <alloca.h>
 
 #include "fwts_acpi_object_eval.h"
 
@@ -102,8 +101,7 @@ static void dbg2_obj_find(
 	fwts_list_link  *item;
 	fwts_list *objects;
 	int i = -1;
-	char *ptr1, *ptr2;
-	char *expanded;
+	char *ptr1;
 
         if (fwts_acpi_init(fw) != FWTS_OK) {
                 fwts_log_error(fw, "Cannot initialise ACPI.");
@@ -129,36 +127,38 @@ static void dbg2_obj_find(
 	 *  Converts \_SB.A.BB.CCC.DDDD.EE to
 	 *	     \_SB_.A___.BB__.CCC_.DDDD.EE__
 	 */
-	expanded = alloca(1 + (5 * (i + 1)));
-	ptr2 = expanded;
-
-	for (i = -1, ptr1 = obj_name; ; ptr1++) {
-		if (*ptr1 == '.' || *ptr1 == '\0') {
-			while (i < 4) {
-				*ptr2++ = '_';
+	{
+		char expanded[1 + (5 * (i + 1))];
+		char *ptr2 = expanded;
+
+		for (i = -1, ptr1 = obj_name; ; ptr1++) {
+			if (*ptr1 == '.' || *ptr1 == '\0') {
+				while (i < 4) {
+					*ptr2++ = '_';
+					i++;
+				}
+				i = 0;
+			} else {
 				i++;
 			}
-			i = 0;
-		} else {
-			i++;
+			*ptr2++ = *ptr1;
+			if (!*ptr1)
+				break;
 		}
-		*ptr2++ = *ptr1;
-		if (!*ptr1)
-			break;
-	}
 
-	/* Search for object */
-	fwts_list_foreach(item, objects) {
-		char *name = fwts_list_data(char*, item);
-		if (!strcmp(expanded, name))
-			goto done;
+		/* Search for object */
+		fwts_list_foreach(item, objects) {
+			char *name = fwts_list_data(char*, item);
+			if (!strcmp(expanded, name))
+				goto done;
+		}
+		/* Not found */
+		*passed = false;
+		fwts_failed(fw, LOG_LEVEL_HIGH,
+			"DBG2DeviceNotFound",
+			"DBG2 Device '%s' not found in ACPI object name space.",
+			expanded);
 	}
-	/* Not found */
-	*passed = false;
-	fwts_failed(fw, LOG_LEVEL_HIGH,
-		"DBG2DeviceNotFound",
-		"DBG2 Device '%s' not found in ACPI object name space.",
-		expanded);
 done:
 	fwts_acpi_deinit(fw);
 }
-- 
2.8.1




More information about the fwts-devel mailing list