(make_path, make_dir): Use bool, not int, since we're not setting errno.

Use mode_t for modes, not int.  All uses changed.
(errno): Remove decl; no longer needed since we assume C89.
This commit is contained in:
Paul Eggert 2004-07-30 20:29:01 +00:00
parent b90519d9f9
commit 21e05084ac

View File

@ -35,13 +35,7 @@
#endif
#include <stdlib.h>
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#include <string.h>
#include "gettext.h"
@ -85,18 +79,19 @@ extern int errno;
while (0)
/* Attempt to create directory DIR (aka DIRPATH) with the specified MODE.
If CREATED_DIR_P is non-NULL, set *CREATED_DIR_P to non-zero if this
function creates DIR and to zero otherwise. Give a diagnostic and
return non-zero if DIR cannot be created or cannot be determined to
If CREATED_DIR_P is non-NULL, set *CREATED_DIR_P if this
function creates DIR and clear it otherwise. Give a diagnostic and
return false if DIR cannot be created or cannot be determined to
exist already. Use DIRPATH in any diagnostic, not DIR.
Note that if DIR already exists, this function returns zero
(indicating success) and sets *CREATED_DIR_P to zero. */
Note that if DIR already exists, this function returns true
(indicating success) and clears *CREATED_DIR_P. */
int
make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
bool
make_dir (const char *dir, const char *dirpath, mode_t mode,
bool *created_dir_p)
{
int fail = 0;
int created_dir;
bool ok = true;
bool created_dir;
created_dir = (mkdir (dir, mode) == 0);
@ -117,12 +112,12 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
{
error (0, saved_errno, _("cannot create directory %s"),
quote (dirpath));
fail = 1;
ok = false;
}
else if (!S_ISDIR (stats.st_mode))
{
error (0, 0, _("%s exists but is not a directory"), quote (dirpath));
fail = 1;
ok = false;
}
else
{
@ -133,7 +128,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
if (created_dir_p)
*created_dir_p = created_dir;
return fail;
return ok;
}
/* Ensure that the directory ARGPATH exists.
@ -147,36 +142,36 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
If VERBOSE_FMT_STRING is nonzero, use it as a printf format
string for printing a message after successfully making a directory,
with the name of the directory that was just made as an argument.
If PRESERVE_EXISTING is non-zero and ARGPATH is an existing directory,
If PRESERVE_EXISTING is true and ARGPATH is an existing directory,
then do not attempt to set its permissions and ownership.
Return 0 if ARGPATH exists as a directory with the proper
ownership and permissions when done, otherwise 1. */
Return true iff ARGPATH exists as a directory with the proper
ownership and permissions when done. */
int
bool
make_path (const char *argpath,
int mode,
int parent_mode,
mode_t mode,
mode_t parent_mode,
uid_t owner,
gid_t group,
int preserve_existing,
bool preserve_existing,
const char *verbose_fmt_string)
{
struct stat stats;
int retval = 0;
bool retval = true;
if (stat (argpath, &stats))
{
char *slash;
int tmp_mode; /* Initial perms for leading dirs. */
int re_protect; /* Should leading dirs be unwritable? */
mode_t tmp_mode; /* Initial perms for leading dirs. */
bool re_protect; /* Should leading dirs be unwritable? */
struct ptr_list
{
char *dirname_end;
struct ptr_list *next;
};
struct ptr_list *p, *leading_dirs = NULL;
int do_chdir; /* Whether to chdir before each mkdir. */
bool do_chdir; /* Whether to chdir before each mkdir. */
struct saved_cwd cwd;
char *basename_dir;
char *dirpath;
@ -197,23 +192,23 @@ make_path (const char *argpath,
&& (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0))
{
tmp_mode = S_IRWXU;
re_protect = 1;
re_protect = true;
}
else
{
tmp_mode = parent_mode;
re_protect = 0;
re_protect = false;
}
/* If we can record the current working directory, we may be able
to do the chdir optimization. */
do_chdir = !save_cwd (&cwd);
do_chdir = (save_cwd (&cwd) == 0);
/* If we've saved the cwd and DIRPATH is an absolute pathname,
we must chdir to `/' in order to enable the chdir optimization.
So if chdir ("/") fails, turn off the optimization. */
if (do_chdir && *dirpath == '/' && chdir ("/") < 0)
do_chdir = 0;
do_chdir = false;
slash = dirpath;
@ -223,8 +218,7 @@ make_path (const char *argpath,
while (1)
{
int newly_created_dir;
int fail;
bool newly_created_dir;
/* slash points to the leftmost unprocessed component of dirpath. */
basename_dir = slash;
@ -239,11 +233,10 @@ make_path (const char *argpath,
basename_dir = dirpath;
*slash = '\0';
fail = make_dir (basename_dir, dirpath, tmp_mode, &newly_created_dir);
if (fail)
if (! make_dir (basename_dir, dirpath, tmp_mode, &newly_created_dir))
{
CLEANUP;
return 1;
return false;
}
if (newly_created_dir)
@ -261,7 +254,7 @@ make_path (const char *argpath,
error (0, errno, _("cannot change owner and/or group of %s"),
quote (dirpath));
CLEANUP;
return 1;
return false;
}
if (re_protect)
@ -283,7 +276,7 @@ make_path (const char *argpath,
error (0, errno, _("cannot chdir to directory %s"),
quote (dirpath));
CLEANUP;
return 1;
return false;
}
*slash++ = '/';
@ -303,10 +296,10 @@ make_path (const char *argpath,
/* We're done making leading directories.
Create the final component of the path. */
if (make_dir (basename_dir, dirpath, mode, NULL))
if (! make_dir (basename_dir, dirpath, mode, NULL))
{
CLEANUP;
return 1;
return false;
}
if (verbose_fmt_string != NULL)
@ -322,7 +315,7 @@ make_path (const char *argpath,
{
error (0, errno, _("cannot change owner and/or group of %s"),
quote (dirpath));
retval = 1;
retval = false;
}
}
@ -336,7 +329,7 @@ make_path (const char *argpath,
{
error (0, errno, _("cannot change permissions of %s"),
quote (dirpath));
retval = 1;
retval = false;
}
CLEANUP_CWD;
@ -351,7 +344,7 @@ make_path (const char *argpath,
{
error (0, errno, _("cannot change permissions of %s"),
quote (dirpath));
retval = 1;
retval = false;
}
}
}
@ -364,7 +357,7 @@ make_path (const char *argpath,
if (!S_ISDIR (stats.st_mode))
{
error (0, 0, _("%s exists but is not a directory"), quote (dirpath));
return 1;
return false;
}
if (!preserve_existing)
@ -384,13 +377,13 @@ make_path (const char *argpath,
{
error (0, errno, _("cannot change owner and/or group of %s"),
quote (dirpath));
retval = 1;
retval = false;
}
if (chmod (dirpath, mode))
{
error (0, errno, _("cannot change permissions of %s"),
quote (dirpath));
retval = 1;
retval = false;
}
}
}