summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/lib/basechsuffix.c
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/lib/basechsuffix.c
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/lib/basechsuffix.c')
-rw-r--r--Build/source/texk/web2c/lib/basechsuffix.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/lib/basechsuffix.c b/Build/source/texk/web2c/lib/basechsuffix.c
new file mode 100644
index 00000000000..cd17d5c45ac
--- /dev/null
+++ b/Build/source/texk/web2c/lib/basechsuffix.c
@@ -0,0 +1,43 @@
+/* basechsuffix.c: replace the last bit of a filename with something else.
+
+ Written in 1995 by Karl Berry. Public domain. */
+
+#include <w2c/config.h>
+#include "lib.h"
+
+/* Return the basename of NAME, with trailing characters OLD replaced by
+ NEW. (If last characters in NAME are not OLD, just append NEW.)
+ Since this is used to turn, e.g., foo/cmr10.300pk -> cmr10.300gf,
+ don't assume a `.' preceding OLD or NEW.
+
+ In other words, we're implementing `basename NAME OLD`NEW. */
+
+string
+basenamechangesuffix (const_string name, const_string old_suffix,
+ const_string new_suffix)
+{
+ string answer;
+ unsigned c;
+ const_string base = xbasename (name);
+ unsigned base_len = strlen (base);
+ unsigned copy_limit = base_len;
+ unsigned old_suffix_len = strlen (old_suffix);
+
+ if (old_suffix_len <= base_len) {
+ for (c = 0; c < old_suffix_len; c++) {
+ if (!FILECHARCASEEQ (old_suffix[old_suffix_len - c - 1],
+ base[base_len - c - 1]))
+ break;
+ }
+ if (c == old_suffix_len) {
+ copy_limit -= old_suffix_len;
+ }
+ }
+
+ answer = xmalloc (copy_limit + strlen (new_suffix) + 1);
+ strncpy (answer, base, copy_limit);
+ answer[copy_limit] = 0;
+ strcat (answer, new_suffix);
+
+ return answer;
+}