Mercurial > hg > octave-nkf > gnulib-hg
changeset 1815:9de6ea676212
(make_path): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
(S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IRWXU): Define if not defined.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Mon, 26 Apr 1999 13:13:00 +0000 |
parents | e8f03a041d0e |
children | 6dfbec8a5a2d |
files | lib/makepath.c |
diffstat | 1 files changed, 21 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/makepath.c +++ b/lib/makepath.c @@ -71,14 +71,29 @@ # endif #endif +#ifndef S_ISUID +# define S_ISUID 04000 +#endif +#ifndef S_ISGID +# define S_ISGID 02000 +#endif +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif +#ifndef S_IRUSR +# define S_IRUSR 0200 +#endif #ifndef S_IWUSR # define S_IWUSR 0200 #endif - #ifndef S_IXUSR # define S_IXUSR 0100 #endif +#ifndef S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif + #define WX_USR (S_IWUSR | S_IXUSR) #if HAVE_LOCALE_H @@ -223,7 +238,7 @@ char *dirpath; /* Temporarily relax umask in case it's overly restrictive. */ - int oldmask = umask (0); + mode_t oldmask = umask (0); /* Make a copy of ARGPATH that we can scribble NULs on. */ dirpath = (char *) alloca (strlen (argpath) + 1); @@ -235,9 +250,9 @@ their owners, we need to fix their permissions after making them. */ if (((parent_mode & WX_USR) != WX_USR) || ((owner != (uid_t) -1 || group != (gid_t) -1) - && (parent_mode & 07000) != 0)) + && (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0)) { - tmp_mode = 0700; + tmp_mode = S_IRWXU; re_protect = 1; } else @@ -363,7 +378,8 @@ retval = 1; } /* chown may have turned off some permission bits we wanted. */ - if ((mode & 07000) != 0 && chmod (basename_dir, mode)) + if ((mode & (S_ISUID | S_ISGID | S_ISVTX)) + && chmod (basename_dir, mode)) { error (0, errno, _("cannot chmod %s"), dirpath); retval = 1;