diff options
Diffstat (limited to 'Build/source/texk/kpathsea/xdirname.c')
-rw-r--r-- | Build/source/texk/kpathsea/xdirname.c | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/Build/source/texk/kpathsea/xdirname.c b/Build/source/texk/kpathsea/xdirname.c deleted file mode 100644 index cc6600928ad..00000000000 --- a/Build/source/texk/kpathsea/xdirname.c +++ /dev/null @@ -1,108 +0,0 @@ -/* xdirname.c: return the directory part of a path. - - Copyright 1999, 2008, 2011, 2016, 2017 Karl Berry. - Copyright 2005 Olaf Weber. - - 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/>. */ - -/* Return directory for NAME. This is "." if NAME contains no directory - separators (should never happen for selfdir), else whatever precedes - the final directory separator, but with multiple separators stripped. - For example, `xdirname ("/foo//bar.baz")' returns "/foo". Always - return a new string. */ - -#include <kpathsea/config.h> -#include <kpathsea/c-pathch.h> - -string -xdirname (const_string name) -{ - string ret; - unsigned limit = 0, loc; -#if defined(WIN32) - string p; -#endif - - /* Ignore a NULL name. */ - if (!name) - return NULL; - - if (NAME_BEGINS_WITH_DEVICE(name)) { - limit = 2; - } else if (IS_UNC_NAME(name)) { - for (limit = 2; name[limit] && !IS_DIR_SEP (name[limit]); limit++) - ; - if (name[limit++] && name[limit] && !IS_DIR_SEP (name[limit])) { - for (; name[limit] && !IS_DIR_SEP (name[limit]); limit++) - ; - limit--; - } else - /* malformed UNC name, backup */ - limit = 0; - } - -#if defined(WIN32) && defined (KPSE_COMPAT_API) - for (loc = strlen (name); loc > limit && - (!IS_DIR_SEP (name[loc-1]) || - (loc > 1 && IS_KANJI(name+loc-2))); loc--) - ; -#else - for (loc = strlen (name); loc > limit && !IS_DIR_SEP (name[loc-1]); loc--) - ; -#endif - - if (loc == limit) { - if (limit == 0) - ret = xstrdup ("."); - else if (limit == 2) { - ret = (string)xmalloc(4); - ret[0] = name[0]; - ret[1] = name[1]; - ret[2] = '.'; - ret[3] = '\0'; - } else { - /* UNC name is "//server/share". */ - ret = xstrdup (name); - } - } else { - /* If have ///a, must return /, so don't strip off everything. */ -#if defined(WIN32) && defined (KPSE_COMPAT_API) - while (loc > limit+1 && IS_DIR_SEP (name[loc-1])) { - if (loc > 1 && IS_KANJI(name+loc-2)) - break; - loc--; - } -#else - while (loc > limit+1 && IS_DIR_SEP (name[loc-1])) { - loc--; - } -#endif - ret = (string)xmalloc(loc+1); - strncpy(ret, name, loc); - ret[loc] = '\0'; - } - -#if defined(WIN32) - for (p = ret; *p; p++) { - if (*p == '\\') - *p = '/'; -#if defined (KPSE_COMPAT_API) - else if (IS_KANJI(p)) - p++; -#endif - } -#endif - - return ret; -} |