Mercurial > hg > octave-nkf > gnulib-hg
changeset 2439:e26f132bf8ec
(S_IRWXUGO): Define.
(make_path): Always perform explicit chmod if MODE specifies any
of the `special' permission bits.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Wed, 26 Apr 2000 12:36:43 +0000 |
parents | c6d2b36bed68 |
children | 32734bec8111 |
files | lib/makepath.c |
diffstat | 1 files changed, 16 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/makepath.c +++ b/lib/makepath.c @@ -1,5 +1,5 @@ /* makepath.c -- Ensure that a directory path exists. - Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1990, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,6 +50,10 @@ # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + #if STDC_HEADERS # include <stdlib.h> #endif @@ -380,13 +384,17 @@ error (0, errno, _("cannot chown %s"), dirpath); retval = 1; } - /* chown may have turned off some permission bits we wanted. */ - if ((mode & (S_ISUID | S_ISGID | S_ISVTX)) - && chmod (basename_dir, mode)) - { - error (0, errno, _("cannot chmod %s"), dirpath); - retval = 1; - } + } + + /* The above chown may have turned off some permission bits in MODE. + Another reason we may have to use chmod here is that mkdir(2) is + required to honor only the file permission bits. In particular, + it may not have honored the `special' bits. */ + if ((mode & ~S_IRWXUGO) + && chmod (basename_dir, mode)) + { + error (0, errno, _("cannot chmod %s"), dirpath); + retval = 1; } CLEANUP_CWD;