beta-0.89.2
[luatex.git] / source / texk / kpathsea / win32 / dirutil.c
blobc219efd27d075f0fadf568e9821b7b2605c51d8f
1 /* dirutil.c
3 Copyright 2000, 2015 Akira Kakuto.
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License
16 along with this library; if not, see <http://www.gnu.org/licenses/>.
19 #include <kpathsea/kpathsea.h>
20 #include "mktex.h"
22 /* check a directory */
23 int
24 is_dir (char *buff)
26 struct stat stats;
28 return stat (buff, &stats) == 0 && S_ISDIR (stats.st_mode);
31 /* make a directory */
32 int
33 make_dir (char *buff)
35 if (_mkdir (buff)) {
36 fprintf(stderr, "mkdir %s error.\n", buff);
37 return (1);
39 if (_chmod (buff, _S_IREAD | _S_IWRITE)) {
40 fprintf(stderr, "chmod %s failed.\n", buff);
41 return (1);
43 return (0);
46 int
47 make_dir_p(char *buff)
49 int ret = 0;
50 int i = 0;
51 char *p = buff;
53 while (1) {
54 if(*p == '\0') {
55 ret = 0;
56 if(!is_dir(buff)) {
57 if(make_dir(buff)) {
58 ret = 1;
61 break;
63 if(*p == '/' && (i > 0 && *(p-1) != ':')) {
64 *p = '\0';
65 if(!is_dir(buff)) {
66 if(make_dir(buff)) {
67 ret = 1;
68 *p = '/';
69 break;
72 *p = '/';
74 p++;
75 i++;
77 return ret;