Mercurial > hg > xemacs-beta
view lib-src/make-path.c @ 5853:1044acf60048
Revert part of Jerry's December 2014 that broke gnuclient on some OS X.
lib-src/ChangeLog addition:
2015-03-08 Aidan Kehoe <kehoea@parhasard.net>
* gnuserv.c (echo_request):
No longer close the file handle unconditionally, leave this to the
individual socket types.
* gnuserv.c (handle_internet_request):
Close the file handle here.
* gnuserv.c (handle_unix_request):
Don't close the file handle here, document why (it broke gnuclient
under OS X). It should actually be OK, but my suspicion is that
the issues is that the Unix (local) domain sockets are still
underdocumented compared to the internet sockets.
| author | Aidan Kehoe <kehoea@parhasard.net> |
|---|---|
| date | Sun, 08 Mar 2015 20:59:25 +0000 |
| parents | b9167d522a9a |
| children |
line wrap: on
line source
/* Make all the directories along a path. Copyright (C) 1992 Free Software Foundation, Inc. This file is part of XEmacs. XEmacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. XEmacs 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 General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ /* Synched up with: FSF 19.28. */ /* This program works like mkdir, except that it generates intermediate directories if they don't exist. This is just like the `mkdir -p' command on most systems; unfortunately, the mkdir command on some of the purer BSD systems (like Mt. Xinu) don't have that option. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno.h> char *prog_name; static int touchy_mkdir (char *path) { struct stat buf; /* If PATH already exists and is a directory, return success. */ if (stat (path, &buf) >= 0 && (buf.st_mode & S_IFMT) == S_IFDIR) return 0; /* Otherwise, try to make it. If PATH exists but isn't a directory, this will signal an error. */ if (mkdir (path, 0777) < 0) { fprintf (stderr, "%s: ", prog_name); perror (path); return 1; } return 0; } int main (int argc, char *argv[]) { prog_name = *argv; for (argc--, argv++; argc > 0; argc--, argv++) { char *path = *argv; int i; /* Stop at each slash in path and try to create the directory. Skip any initial slash. */ for (i = (path[0] == '/') ? 1 : 0; path[i]; i++) if (path[i] == '/') { path[i] = '\0'; if (touchy_mkdir (path) < 0) goto next_pathname; path[i] = '/'; } touchy_mkdir (path); next_pathname: ; } return 0; }
