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