diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/lib/basechsuffix.c | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (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.c | 43 |
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; +} |