Message ID | 20181203131923.1487-1-wsa+renesas@sang-engineering.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [mmc-utils] fix GCC7 build by refactoring trimming routines | expand |
Hi, > > 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@sang-engineering.com> > --- > 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) > { See Uwe's note - https://www.spinics.net/lists/linux-mmc/msg51882.html Cheers, Avri
Hi Avri, hi Chris, > > 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@sang-engineering.com> > > --- > > 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) > > { > > See Uwe's note - https://www.spinics.net/lists/linux-mmc/msg51882.html Thanks for the pointer. Chris, how do you feel with maintaining mmc-utils? Would you maybe be willing to share maintenance with someone? Happy hacking, Wolfram
Hi everyone, I'm very sorry for the delay in responding to these patches and the duplicated effort it caused. On Mon, Dec 03, 2018 at 03:24:42PM +0100, Wolfram Sang wrote: > Hi Avri, hi Chris, > > > > 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@sang-engineering.com> Thanks, I've applied this fix of Wolfram's to mmc-utils master. > Thanks for the pointer. Chris, how do you feel with maintaining > mmc-utils? Would you maybe be willing to share maintenance with someone? Yep, that'd make sense.
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); }
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@sang-engineering.com> --- lsmmc.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)