diff options
Diffstat (limited to 'Build/source/texk/kpathsea/win32/getdestdir.c')
-rw-r--r-- | Build/source/texk/kpathsea/win32/getdestdir.c | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/Build/source/texk/kpathsea/win32/getdestdir.c b/Build/source/texk/kpathsea/win32/getdestdir.c deleted file mode 100644 index 7fd78dc4f7f..00000000000 --- a/Build/source/texk/kpathsea/win32/getdestdir.c +++ /dev/null @@ -1,248 +0,0 @@ -/* getdestdir.c - - Copyright 2000, 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/>. - - from mktexmf: - argv[0] = "Dummy", argv[1] = "source", argv[2] = path - from mktexpk: - argv[0] = "Dummy", argv[1] = "pk", argv[2] = path, argv[3] = mode - from mktextfm: - argv[0] = "Dummy", argv[1] = "tfm", argv[2] = path -*/ - -#include <kpathsea/kpathsea.h> -#include "mktex.h" - -#define NUMBUF 32 -#define LENBUF 128 -#define MPATH 256 -#define FTOP "fonts" - -/* error message */ -static void -fatal (const char *s) -{ - fprintf (stderr, "%s\n", s); -} - -char * -getdestdir (int ac, char **av) -{ - static char buff[MPATH]; - char *pb[NUMBUF]; - char *p, *q; - char spec[32]; - int i, Num = 0, ispk, k; - char *topdir; - - ispk = 0; - - for (i = 0; i < NUMBUF; i++) { - if (!(pb[i] = (char *) malloc (LENBUF))) { - fatal ("Memory allocation error."); - return (NULL); - } - } - - if (ac != 3 && ac != 4) { - fatal ("Argument error."); - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - - strcpy (spec, av[1]); - - normalize (av[2]); /* path */ - - p = av[2]; - q = buff; - -/* UNC name support */ - - if (p[0] == '/' && p[1] == '/') { - *q++ = *p++; - *q++ = *p++; - } - - while (*p) { - if (*p == '/') { - *q = *p; - while (*p == '/') - p++; - p--; - } else { - *q = *p; - } - p++; - q++; - } - *q = '\0'; /* now path name of ${name}.mf is in buff. */ -/* -#ifdef TEST - return xstrdup(buff); -#endif -*/ - if (ac == 4) - ispk = 1; /* called from mktexpk */ - - if (!(p = strrchr (buff, '/'))) { - fatal ("Invalid path name."); - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - - *p = '\0'; /* get directory name */ - - for (i = 0; i < NUMBUF; i++) { - if (!(p = strrchr (buff, '/'))) { - fatal ("Invalid path name."); - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - *p = '\0'; - p++; - strcpy (pb[i], p); - if (!stricmp (pb[i], FTOP)) { - Num = i; - break; - } - } - - Num -= 2; - if (Num < 0) { - fprintf (stderr, "Font resources should be under a directory "); - fprintf (stderr, "with the name \"fonts\".\n"); - fprintf (stderr, "Furthermore, there must be at least two directories "); - fprintf (stderr, "under the directory \"fonts\".\n"); - fatal ("Invalid path name."); - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - - topdir = kpse_var_value ("MAKETEXPK_TOP_DIR"); - if (topdir && *topdir && ispk) { - normalize (topdir); - i = (int)strlen (topdir); - while(topdir[i - 1] == '/') - i--; - topdir[i] = '\0'; - - if(!is_dir(topdir)) { - if(make_dir_p(topdir)) { - fprintf(stderr, "Failed to access %s.\n", topdir); - return NULL; - } - } -#ifdef TEST - printf ("%s\n", topdir); -#endif - if (strnicmp (&topdir[i - 3], "/pk", 3) != 0) { - strcat (topdir, "/pk"); - if (!is_dir(topdir)) { - if (make_dir(topdir)) { - fprintf(stderr, "Faild to access %s.\n", topdir); - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - } - } - strcpy (buff, topdir); - free(topdir); - } else { - if((topdir = kpse_var_value("TEXMFVAR")) != NULL) { - normalize (topdir); - i = (int)strlen (topdir); - while(topdir[i - 1] == '/') - i--; - topdir[i] = '\0'; - - if(!is_dir(topdir)) { - if(make_dir_p(topdir)) { - fprintf(stderr, "Failed to access %s.\n", topdir); - return NULL; - } - } - - strcpy(buff, topdir); - free(topdir); - } - - strcat (buff, "/fonts"); - if (!is_dir (buff)) { - if (make_dir (buff)) { - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - } - strcat (buff, "/"); - strcat (buff, spec); - if (!is_dir (buff)) { - if (make_dir (buff)) { - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - } - } - - if (ispk) { - strcat (buff, "/"); - strcat (buff, av[3]); - if (!is_dir (buff)) { - if (make_dir (buff)) { - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - } - } - - for (i = Num; i > -1; i--) { - strcat (buff, "/"); - strcat (buff, pb[i]); - if (is_dir (buff)) - continue; - else { - if (make_dir (buff)) { - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - return (NULL); - } - } - } - - for (k = 0; k < NUMBUF; k++) - free (pb[k]); - - p = xstrdup(buff); - return p; -} - -#ifdef TEST -int -main (int ac, char *av[]) -{ - kpse_set_program_name (av[0], "getdestdir"); - printf ("%s", getdestdir (ac, av)); - return 0; -} -#endif |