[PATCH mmc-utils] fix GCC7 build by refactoring trimming routines

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I got a compile error with GCC7. When trimming white spaces from strings
lsmmc uses strncpy with overlapping memory areas. This is not allowed.
In addition, the implementation was not efficient with calling strlen
and strncpy once per iteration. Refactor the code to be valid and more
effective.

Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>
---
 lsmmc.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/lsmmc.c b/lsmmc.c
index c4faa00..9737b37 100644
--- a/lsmmc.c
+++ b/lsmmc.c
@@ -316,8 +316,9 @@ int parse_ids(struct config *config)
 /* MMC/SD file parsing functions */
 char *read_file(char *name)
 {
-	char *preparsed;
 	char line[4096];
+	char *preparsed, *start = line;
+	int len;
 	FILE *f;
 
 	f = fopen(name, "r");
@@ -348,12 +349,17 @@ char *read_file(char *name)
 	}
 
 	line[sizeof(line) - 1] = '\0';
+	len = strlen(line);
 
-	while (isspace(line[strlen(line) - 1]))
-		line[strlen(line) - 1] = '\0';
+	while (len > 0 && isspace(line[len - 1]))
+		len--;
 
-	while (isspace(line[0]))
-		strncpy(&line[0], &line[1], sizeof(line));
+	while (len > 0 && isspace(*start)) {
+		start++;
+		len--;
+	}
+	memmove(line, start, len);
+	line[len] = '\0';
 
 	return strdup(line);
 }
-- 
2.11.0




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux