Currently the code is working on the keypsec directly, this has the drawback of the already existing freep variable to handle optional key-names accordingly.
Delcare the keyspec as const and never operate on in directly to keep it as it is and instead always alloc path and keyname, so the freep variable can be dropped. For the split operation a simple helper was added. This prepares the code to fix the keyspec env handling which is done by the next commit. Signed-off-by: Marco Felsch <m.fel...@pengutronix.de> --- scripts/keytoc.c | 54 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/scripts/keytoc.c b/scripts/keytoc.c index c92465707f65..617317d6607e 100644 --- a/scripts/keytoc.c +++ b/scripts/keytoc.c @@ -653,6 +653,34 @@ static int gen_key(const char *keyname, const char *path) return ret; } +static void get_name_path(const char *keyspec, char **keyname, char **path) +{ + char *sep, *spec; + + spec = strdup(keyspec); + if (!spec) + enomem_exit(__func__); + + /* Split <key-hint>:<key-path> pair, <key-hint> is optional */ + sep = strchr(spec, ':'); + if (!sep) { + *path = spec; + return; + } + + *sep = 0; + *keyname = strdup(spec); + if (!*keyname) + enomem_exit(__func__); + + sep++; + *path = strdup(sep); + if (!*path) + enomem_exit(__func__); + + free(spec); +} + int main(int argc, char *argv[]) { int i, opt, ret; @@ -705,35 +733,27 @@ int main(int argc, char *argv[]) } for (i = optind; i < argc; i++) { - char *keyspec = argv[i]; + const char *keyspec = argv[i]; char *keyname = NULL; - char *path, *freep = NULL; + char *path = NULL; - if (!strncmp(keyspec, "pkcs11:", 7)) { - path = keyspec; - } else { - path = strchr(keyspec, ':'); - if (path) { - *path = 0; - path++; - keyname = keyspec; - } else { - path = keyspec; - } - } + if (!strncmp(keyspec, "pkcs11:", 7)) + path = strdup(keyspec); + else + get_name_path(keyspec, &keyname, &path); if (!keyname) { - ret = asprintf(&freep, "key_%d", keynum++); + ret = asprintf(&keyname, "key_%d", keynum++); if (ret < 0) enomem_exit("asprintf"); - keyname = freep; } ret = gen_key(keyname, path); if (ret) exit(1); - free(freep); + free(keyname); + free(path); } if (dts) { -- 2.39.5