annotate lib-src/make-path.c @ 25976:8565fbac98d7

Use "pop3" as the POP service name on all platforms, instead of using "pop" on Unix and "pop3" on Windows NT. "pop3" has been the standard service name since RFC 1340 was published in July 1992, so I think it's safe to start using it by default.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 10 Oct 1999 23:07:36 +0000
parents 953e5ea2b8ea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Make all the directories along a path.
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2 Copyright (C) 1992 Free Software Foundation, Inc.
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
6108
b3ea9bc60744 * make-path.c (main): Return 1 on error, not -1. Update GPL.
David J. MacKenzie <djm@gnu.org>
parents: 2978
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 /* This program works like mkdir, except that it generates
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 intermediate directories if they don't exist. This is just like
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 the `mkdir -p' command on most systems; unfortunately, the mkdir
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 command on some of the purer BSD systems (like Mt. Xinu) don't have
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 that option. */
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include <sys/types.h>
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include <sys/stat.h>
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include <stdio.h>
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include <errno.h>
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 extern int errno;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 char *prog_name;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
35 /* Create directory DIRNAME if it does not exist already.
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
36 Then give permission for everyone to read and search it.
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
37 Return 0 if successful, 1 if not. */
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
38
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
39 int
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
40 touchy_mkdir (dirname)
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
41 char *dirname;
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 {
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 struct stat buf;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
45 /* If DIRNAME already exists and is a directory, don't create. */
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
46 if (! (stat (dirname, &buf) >= 0
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
47 && (buf.st_mode & S_IFMT) == S_IFDIR))
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
48 {
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
49 /* Otherwise, try to make it. If DIRNAME exists but isn't a directory,
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
50 this will signal an error. */
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
51 if (mkdir (dirname, 0777) < 0)
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
52 {
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
53 fprintf (stderr, "%s: ", prog_name);
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
54 perror (dirname);
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
55 return 1;
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
56 }
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
57 }
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
59 /* Make sure everyone can look at this directory. */
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
60 if (stat (dirname, &buf) < 0)
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 {
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 fprintf (stderr, "%s: ", prog_name);
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
63 perror (dirname);
6108
b3ea9bc60744 * make-path.c (main): Return 1 on error, not -1. Update GPL.
David J. MacKenzie <djm@gnu.org>
parents: 2978
diff changeset
64 return 1;
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 }
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
66 if (chmod (dirname, 0555 | (buf.st_mode & 0777)) < 0)
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
67 {
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
68 fprintf (stderr, "%s: ", prog_name);
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
69 perror (dirname);
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
70 }
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 return 0;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 }
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 int
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 main (argc, argv)
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 int argc;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 char **argv;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 {
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 prog_name = *argv;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 for (argc--, argv++; argc > 0; argc--, argv++)
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 {
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
84 char *dirname = *argv;
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 int i;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
87 /* Stop at each slash in dirname and try to create the directory.
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 Skip any initial slash. */
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
89 for (i = (dirname[0] == '/') ? 1 : 0; dirname[i]; i++)
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
90 if (dirname[i] == '/')
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 {
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
92 dirname[i] = '\0';
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
93 if (touchy_mkdir (dirname) < 0)
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
94 goto next_dirname;
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
95 dirname[i] = '/';
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 }
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
98 touchy_mkdir (dirname);
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99
9050
953e5ea2b8ea (touchy_mkdir): Make dir ugo+re even if it isn't new.
Richard M. Stallman <rms@gnu.org>
parents: 6108
diff changeset
100 next_dirname:
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 ;
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 }
2978
07010383044d (main): Return 0.
Richard M. Stallman <rms@gnu.org>
parents: 1660
diff changeset
103
07010383044d (main): Return 0.
Richard M. Stallman <rms@gnu.org>
parents: 1660
diff changeset
104 return 0;
1646
81cdb2347fab Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 }