/* xdirtest.c: standalone program to test xdirname() and xbasename().
Copyright 1999 Karl Berry.
Copyright 2005 Olaf Weber.
Copyright 2011 Peter Breitenlohner.
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 . */
#include
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 (void) {
const char **p;
printf("\nAssuming CP %s 932\n", 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(void) {
int save_cp932 = is_cp932_system;
printf("\nTesting 2-Byte Kanji (CP 932, SJIS) codes with 'K' representing 0x81\n");
is_cp932_system = 1; /* pretend CP is 932 */
do_kanji();
is_cp932_system = 0; /* pretend CP is not 932 */
do_kanji();
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();
#endif
return 0;
}