From d9da0379cf9aa1eb86789d164e1a8dbdd3c18bea Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Wed, 27 Apr 2022 00:21:44 +0200 Subject: [PATCH] rewrite gethash() as basename() and avoid a bunch of string fiddling --- pdf.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/pdf.c b/pdf.c index 058423e..0a35de9 100644 --- a/pdf.c +++ b/pdf.c @@ -2403,23 +2403,18 @@ ktxtstream(HAllocator *mm__, const HParsedToken *x, void *env) char * -gethash(const char *fn) +basename(const char *fn) { - const char s[2] = "/"; - char *token; - char *tstr = malloc(sizeof(char)* (strlen(fn) + 1)); - char *res = malloc(sizeof(char) * (strlen(fn)+1)); - strncpy(tstr, fn, strlen(fn)+1); + const char *p; + p = strrchr(fn, '/'); + if (p == NULL) /* no slash found */ + p = fn; + else + p++; /* skip the slash */ - token = strtok(tstr, s); - while ( token != NULL ) { - strncpy(res, token, strlen(token)+1); - token = strtok(NULL, s); - } - free(tstr); - - return res; + assert(*p != '\0'); /* not the empty string */ + return strdup(p); } /* @@ -2449,7 +2444,7 @@ text_extract(struct Env *aux) int outdlen = strlen(outdir); - char *fn = gethash(aux->infile); + char *fn = basename(aux->infile); int infnlen = strlen(fn); int sfxlen = strlen(".psectxt"); // TODO file path could be parameterized int namelen = outdlen + infnlen + sfxlen; -- GitLab