annotate lib/mkdir-p.h @ 7312:796e1837ac66

* lib/dirchownmod.c: Don't include fcntl.h; no longer needed. (dirchownmod): New arg FD. All callers changed. Use FD rather than opening the directory ourself, as opening is now the caller's responsibility. * lib/dirchownmod.h: Likewise. * lib/mkancesdirs.c: Include <sys/types.h>, for portability to older hosts that require <sys/types.h> before <sys/stat.h>. Include fcntl.h, savewd.h, and unistd.h, not dirname.h and stat-macros.h. (test_dir): Remove. (mkancesdirs): Return length of prefix of FILE that has already been made, or -2 if there is a child doing the work. Redo algorithm so that it is O(N) rather than O(N**2). Optimize away ".", and treat ".." specially since it might stray back into already-created areas. Use a subprocess if necessary. New arg WD; all users changed. MAKE_DIR function should now return 1 if it creates a directory that is not readable. Return -2 if a child process is spun off. * lib/mkancesdirs.h: Include <stddef.h>, for ptrdiff_t. Adjust signature to match code. * lib/mkdir-p.c: Include dirname.h, for IS_ABSOLUTE_FILE_NAME. (make_dir_parents): Use a subprocess if necessary. New arg WD; all users changed. * lib/savewd.c, lib/savewd.h: New files. * m4/savewd.m4: New file. * modules/mkancesdirs (Depends-on): Add fcntl. * modules/savewd: New file. * MODULES.html.sh (File system functions): Add savewd.
author Paul Eggert <eggert@cs.ucla.edu>
date Sat, 16 Sep 2006 19:58:25 +0000
parents bbdf9204a185
children 77a75e20049c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5907
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
1 /* mkdir-p.h -- Ensure that a directory and its parents exist.
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
2
7312
796e1837ac66 * lib/dirchownmod.c: Don't include fcntl.h; no longer needed.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6969
diff changeset
3 Copyright (C) 1994, 1995, 1996, 1997, 2000, 2003, 2004, 2005, 2006
796e1837ac66 * lib/dirchownmod.c: Don't include fcntl.h; no longer needed.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6969
diff changeset
4 Free Software Foundation, Inc.
5907
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
5
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
6 This program is free software; you can redistribute it and/or modify
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
9 any later version.
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
10
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
11 This program is distributed in the hope that it will be useful,
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
14 GNU General Public License for more details.
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
15
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
17 along with this program; if not, write to the Free Software Foundation,
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
19
6969
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
20 /* Written by Paul Eggert, David MacKenzie, and Jim Meyering. */
5907
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
21
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
22 #include <stdbool.h>
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
23 #include <sys/types.h>
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
24
7312
796e1837ac66 * lib/dirchownmod.c: Don't include fcntl.h; no longer needed.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6969
diff changeset
25 struct savewd;
6969
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
26 bool make_dir_parents (char *dir,
7312
796e1837ac66 * lib/dirchownmod.c: Don't include fcntl.h; no longer needed.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6969
diff changeset
27 struct savewd *wd,
6969
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
28 int (*make_ancestor) (char const *, void *),
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
29 void *options,
5907
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
30 mode_t mode,
6969
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
31 void (*announce) (char const *, void *),
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
32 mode_t mode_bits,
5907
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
33 uid_t owner,
c47674a83a78 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
34 gid_t group,
6969
bbdf9204a185 Import from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6271
diff changeset
35 bool preserve_existing);