Commit 6c595aea authored by Michael Heimpold's avatar Michael Heimpold Committed by Chris Ball
Browse files

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: default avatarMichael Heimpold <michael.heimpold@i2se.com>
Cc: Michael Heimpold <mhei@heimpold.de>
Reviewed-by: default avatarAvri Altman <avri.altman@wdc.com>
Signed-off-by: default avatarChris Ball <chris@printf.net>
parent c19c7694
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment