|
|
- From f1fc04d7609ab074647aa00e96d4c66d5135b155 Mon Sep 17 00:00:00 2001
- From: Michael Heimpold <michael.heimpold@i2se.com>
- Date: Tue, 18 Dec 2018 15:02:25 +0100
- Subject: [PATCH 4/9] Optimize to_binstr() function
-
- Appending multiple times to same string is slow since strcat() needs
- to determine the end during each run. So manually maintain a pointer
- to the end to speed-up things.
-
- Signed-off-by: Michael Heimpold <michael.heimpold@i2se.com>
- Cc: Michael Heimpold <mhei@heimpold.de>
- ---
- lsmmc.c | 11 +++++++----
- 1 file changed, 7 insertions(+), 4 deletions(-)
-
- diff --git a/lsmmc.c b/lsmmc.c
- index e64117c..86713f7 100644
- --- a/lsmmc.c
- +++ b/lsmmc.c
- @@ -371,12 +371,14 @@ char *to_binstr(char *hexstr)
- "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
- "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
- };
- - char *binstr;
- + char *binstr, *tail;
-
- binstr = calloc(strlen(hexstr) * 4 + 1, sizeof(char));
- if (!binstr)
- return NULL;
-
- + tail = binstr;
- +
- while (hexstr && *hexstr != '\0') {
- if (!isxdigit(*hexstr)) {
- free(binstr);
- @@ -384,13 +386,14 @@ char *to_binstr(char *hexstr)
- }
-
- if (isdigit(*hexstr))
- - strcat(binstr, bindigits[*hexstr - '0']);
- + strcat(tail, bindigits[*hexstr - '0']);
- else if (islower(*hexstr))
- - strcat(binstr, bindigits[*hexstr - 'a' + 10]);
- + strcat(tail, bindigits[*hexstr - 'a' + 10]);
- else
- - strcat(binstr, bindigits[*hexstr - 'A' + 10]);
- + strcat(tail, bindigits[*hexstr - 'A' + 10]);
-
- hexstr++;
- + tail += 4;
- }
-
- return binstr;
- --
- 2.17.1
-
|