diff options
Diffstat (limited to 'Build/source/texk/kpathsea/xdirtest.c')
-rw-r--r-- | Build/source/texk/kpathsea/xdirtest.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/Build/source/texk/kpathsea/xdirtest.c b/Build/source/texk/kpathsea/xdirtest.c new file mode 100644 index 00000000000..1c657fc15fe --- /dev/null +++ b/Build/source/texk/kpathsea/xdirtest.c @@ -0,0 +1,158 @@ +/* xdirtest.c: standalone program to test xdirname() and xbasename(). + + Copyright 1999 Karl Berry. + Copyright 2005 Olaf Weber. + Copyright 2011 Peter Breitenlohner. + Copyright 2016 Akira Kakuto. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, see <http://www.gnu.org/licenses/>. */ + +#include <kpathsea/config.h> + +static const char *tab[] = { +/* UNC names */ +#if defined (WIN32) + "\\\\neuromancer\\fptex\\bin\\win32\\kpsewhich.exe", + "\\\\neuromancer\\fptex\\win32\\kpsewhich.exe", + "\\\\neuromancer\\fptex\\kpsewhich.exe", + "\\\\neuromancer\\kpsewhich.exe", + "//server.host/share/file", + "//server.host/share/file/", + "//server.host/share/", + "//server.host//share", /* malformed */ + "//server.host", /* malformed */ + "//.host/share", /* not UNC name */ +#endif + "//neuromancer/kpsewhich.exe", +/* names with device */ +#if defined (WIN32) + "p:\\bin\\win32\\kpsewhich.exe", + "p:\\bin\\win32\\\\", + "p:\\win32\\kpsewhich.exe", + "p:\\win32\\", + "p:\\kpsewhich.exe", + "p:\\", + "p:bin\\win32\\kpsewhich.exe", + "p:win32\\kpsewhich.exe", +#endif + "p:win32//kpsewhich.exe", + "p:win32/", + "p:kpsewhich.exe", + "p:///kpsewhich.exe", +/* 'normal' names */ + "/usr/bin/win32/kpsewhich.exe", + "/usr/bin/win32//", + "/usr/bin/kpsewhich.exe", + "/usr/bin/", + "///usr/kpsewhich.exe", + "/usr/kpsewhich.exe", + "///kpsewhich.exe", + "/kpsewhich.exe", + "", + NULL +}; + +#if defined (WIN32) +static const char *ktab[] = { +/* UNC names */ + "\\\\serverK\\\\shareK\\\\file", + "\\\\serverKK\\shareKK\\file", + "\\\\serverK\\\\shareK\\", + "\\\\serverKK\\shareKK", +/* 'normal' names */ + "\\abcK\\deKKfK\\\\hijK\\", + "\\abcKKdeKKfKK\\hijKK", + "\\abcK\\deKKfK\\", + "\\abcKKdeKKfKK", + NULL +}; + +static char * +to_kanji (const char *str) { + char *p, *ret = xstrdup(str); + + for (p = ret; *p; p++) + if (*p == 'K') + *p = 0x81; + + return ret; +} + +static char * +from_kanji (char *str) { + char *p; + + for (p = str; *p; p++) + if ((unsigned char) *p == 0x81) + *p = 'K'; + + return str; +} + +static void +do_kanji (kpathsea kpse) { + const char **p; + + printf("\nAssuming CP %s 932\n", kpse->Is_cp932_system ? "is" : "is not"); + + for (p = ktab; *p; p++) { + char *q = to_kanji(*p); + char *r = xdirname(q); + + printf("%s -> %s + %s\n", *p, from_kanji(r), *p + (xbasename(q)-q)); + + free (r); + free (q); + } +} + +static void +kanji_test(kpathsea kpse) { + int save_cp932 = kpse->Is_cp932_system; + + printf("\nTesting 2-Byte Kanji (CP 932, SJIS) codes with 'K' representing 0x81\n"); + + kpse->Is_cp932_system = 932; /* pretend CP is 932 */ + do_kanji(kpse); + + kpse->Is_cp932_system = 0; /* pretend CP is not 932 */ + do_kanji(kpse); + + kpse->Is_cp932_system = save_cp932; +} +#endif + +int main(int argc, char **argv) +{ + const char **p; + kpathsea kpse = kpathsea_new(); + + kpathsea_set_program_name (kpse, argv[0], NULL); + + printf("\n%s: name -> xdirname(name) + xbasename(name)\n\n", + kpse->invocation_short_name); + + for (p = tab; *p; p++) { + char *q = xdirname(*p); + + printf("%s -> %s + %s\n", *p, q, xbasename(*p)); + free (q); + } + +#if defined (WIN32) + kanji_test(kpse); +#endif + + return 0; +} |