[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Cvs-cvs] ccvs/src ChangeLog Makefile.in add.c base.c che...
From: |
Derek Robert Price |
Subject: |
[Cvs-cvs] ccvs/src ChangeLog Makefile.in add.c base.c che... |
Date: |
Sat, 25 Aug 2007 03:18:00 +0000 |
CVSROOT: /cvsroot/cvs
Module name: ccvs
Changes by: Derek Robert Price <dprice> 07/08/25 03:18:00
Modified files:
src : ChangeLog Makefile.in add.c base.c checkin.c
checkout.c client.c commit.c create_adm.c
edit.c fileattr.c filesubr.c import.c lock.c
ls.c mkmodules.c modules.c sanity.sh subr.c
subr.h update.c
Log message:
Simplify code using new GNULIB modules.
* add.c (add_directory), base.c (base_checkout), checkin.c (Checkin),
checkout.c (emptydir_name, build_dirs_and_chdir), client.c
(call_in_directory, update_entries), commit.c (checkaddfile),
create_adm.c (Create_Admin), edit.c (edit_file, edit_fileproc),
fileattr.c (fileattr_write), import.c (import, process_import_file,
import_descend_dir), lock.c (lock_name), ls.c (ls_direntproc),
mkmodules.c (init), modules.c (my_modules), update.c
(update_dirent_proc): Replace directory access with new functions.
* file_subr.c (make_directory, make_directories, mkdir_if_needed):
Remove in favor of...
* subr.c (mkdir_i, cvs_mkdir_i, cvs_mkdir, cvs_xmkdir,
mkdir_callback, mkdir_announce_callback, cvs_mkdirs_i, cvs_mkdirs,
cvs_xmkdirs): ...these new functions.
* subr.h (cvs_mkdir, cvs_xmkdir, cvs_mkdirs, cvs_xmkdirs): New
prototypes.
* sanity.sh (abspath-4, toplevel-12): Compensate for the above.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/ChangeLog?cvsroot=cvs&r1=1.3522&r2=1.3523
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/Makefile.in?cvsroot=cvs&r1=1.188&r2=1.189
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/add.c?cvsroot=cvs&r1=1.130&r2=1.131
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/base.c?cvsroot=cvs&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/checkin.c?cvsroot=cvs&r1=1.59&r2=1.60
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/checkout.c?cvsroot=cvs&r1=1.148&r2=1.149
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/client.c?cvsroot=cvs&r1=1.462&r2=1.463
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/commit.c?cvsroot=cvs&r1=1.271&r2=1.272
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/create_adm.c?cvsroot=cvs&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/edit.c?cvsroot=cvs&r1=1.95&r2=1.96
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/fileattr.c?cvsroot=cvs&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/filesubr.c?cvsroot=cvs&r1=1.111&r2=1.112
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/import.c?cvsroot=cvs&r1=1.182&r2=1.183
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/lock.c?cvsroot=cvs&r1=1.121&r2=1.122
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/ls.c?cvsroot=cvs&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/mkmodules.c?cvsroot=cvs&r1=1.101&r2=1.102
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/modules.c?cvsroot=cvs&r1=1.100&r2=1.101
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/sanity.sh?cvsroot=cvs&r1=1.1184&r2=1.1185
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/subr.c?cvsroot=cvs&r1=1.157&r2=1.158
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/subr.h?cvsroot=cvs&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/ccvs/src/update.c?cvsroot=cvs&r1=1.268&r2=1.269
Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/ChangeLog,v
retrieving revision 1.3522
retrieving revision 1.3523
diff -u -b -r1.3522 -r1.3523
--- ChangeLog 22 Aug 2007 20:58:14 -0000 1.3522
+++ ChangeLog 25 Aug 2007 03:17:57 -0000 1.3523
@@ -1,3 +1,23 @@
+2007-08-24 Derek Price <address@hidden>
+
+ Simplify code using new GNULIB modules.
+ * add.c (add_directory), base.c (base_checkout), checkin.c (Checkin),
+ checkout.c (emptydir_name, build_dirs_and_chdir), client.c
+ (call_in_directory, update_entries), commit.c (checkaddfile),
+ create_adm.c (Create_Admin), edit.c (edit_file, edit_fileproc),
+ fileattr.c (fileattr_write), import.c (import, process_import_file,
+ import_descend_dir), lock.c (lock_name), ls.c (ls_direntproc),
+ mkmodules.c (init), modules.c (my_modules), update.c
+ (update_dirent_proc): Replace directory access with new functions.
+ * file_subr.c (make_directory, make_directories, mkdir_if_needed):
+ Remove in favor of...
+ * subr.c (mkdir_i, cvs_mkdir_i, cvs_mkdir, cvs_xmkdir,
+ mkdir_callback, mkdir_announce_callback, cvs_mkdirs_i, cvs_mkdirs,
+ cvs_xmkdirs): ...these new functions.
+ * subr.h (cvs_mkdir, cvs_xmkdir, cvs_mkdirs, cvs_xmkdirs): New
+ prototypes.
+ * sanity.sh (abspath-4, toplevel-12): Compensate for the above.
+
2007-08-22 Derek Price <address@hidden>
* server.c (serve_init): Remove unnecessary argument to printf style
Index: Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/Makefile.in,v
retrieving revision 1.188
retrieving revision 1.189
diff -u -b -r1.188 -r1.189
--- Makefile.in 23 Aug 2007 21:39:08 -0000 1.188
+++ Makefile.in 25 Aug 2007 03:17:57 -0000 1.189
@@ -96,8 +96,9 @@
$(top_srcdir)/m4/inline.m4 $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
- $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/lchmod.m4 $(top_srcdir)/m4/lchown.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 \
$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
$(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
$(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
@@ -106,15 +107,17 @@
$(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/md5.m4 \
$(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/memmove.m4 \
$(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
- $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir-slash.m4 \
+ $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkancesdirs.m4 \
+ $(top_srcdir)/m4/mkdir-p.m4 $(top_srcdir)/m4/mkdir-slash.m4 \
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \
$(top_srcdir)/m4/nanosleep.m4 $(top_srcdir)/m4/netinet_in_h.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/openat.m4 \
$(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quotearg.m4 \
- $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/regex.m4 \
- $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rpmatch.m4 \
- $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
+ $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rename.m4 \
+ $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/save-cwd.m4 \
+ $(top_srcdir)/m4/savewd.m4 $(top_srcdir)/m4/setenv.m4 \
$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \
$(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdbool.m4 \
Index: add.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/add.c,v
retrieving revision 1.130
retrieving revision 1.131
diff -u -b -r1.130 -r1.131
--- add.c 22 Aug 2007 19:56:36 -0000 1.130
+++ add.c 25 Aug 2007 03:17:57 -0000 1.131
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (c) 1992, Brian Berliner and Jeff Polk
@@ -818,7 +819,6 @@
if (!isdir (rcsdir))
{
- mode_t omask;
Node *p;
List *ulist;
struct logfile_info *li;
@@ -831,17 +831,8 @@
directories would be to have to add and commit directories
like for files. The code was #if 0'd at least since CVS 1.5. */
- if (!noexec)
- {
- omask = umask (cvsumask);
- if (CVS_MKDIR (rcsdir, 0777) < 0)
- {
- error (0, errno, "cannot mkdir %s", rcsdir);
- (void) umask (omask);
+ if (!noexec && !cvs_mkdir (rcsdir, NULL, MD_REPO) && errno != EEXIST)
goto out;
- }
- (void) umask (omask);
- }
/* Now set the default file attributes to the ones we inherited
from the parent directory. */
Index: base.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/base.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- base.c 12 Aug 2006 17:16:01 -0000 1.5
+++ base.c 25 Aug 2007 03:17:57 -0000 1.6
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 2005-2007 The 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
@@ -262,7 +262,7 @@
if (noexec)
return 0;
- mkdir_if_needed (CVSADM_BASE);
+ cvs_xmkdir (CVSADM_BASE, NULL, MD_EXIST_OK);
assert (!current_parsed_root->isremote);
Index: checkin.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/checkin.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -b -r1.59 -r1.60
--- checkin.c 30 May 2007 23:20:42 -0000 1.59
+++ checkin.c 25 Aug 2007 03:17:57 -0000 1.60
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -121,7 +122,7 @@
{
/* Still need to update the base file. */
char *basefile;
- mkdir_if_needed (CVSADM_BASE);
+ cvs_xmkdir (CVSADM_BASE, NULL, MD_EXIST_OK);
basefile = make_base_file_name (finfo->file, vers->vn_rcs);
copy_file (finfo->file, basefile);
free (basefile);
Index: checkout.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/checkout.c,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -b -r1.148 -r1.149
--- checkout.c 30 May 2007 23:20:43 -0000 1.148
+++ checkout.c 25 Aug 2007 03:17:57 -0000 1.149
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -1160,14 +1161,8 @@
repository = Xasprintf ("%s/%s/%s", current_parsed_root->directory,
CVSROOTADM, CVSNULLREPOS);
- if (!isfile (repository))
- {
- mode_t omask;
- omask = umask (cvsumask);
- if (CVS_MKDIR (repository, 0777) < 0)
- error (1, errno, "cannot create %s", repository);
- (void) umask (omask);
- }
+ if (!isdir (repository))
+ cvs_xmkdir (repository, NULL, MD_REPO);
return repository;
}
@@ -1209,7 +1204,7 @@
if (*dir)
{
- made_dir = !mkdir_if_needed (dir);
+ made_dir = cvs_xmkdir (dir, NULL, MD_EXIST_OK);
if (made_dir) Subdir_Register (NULL, NULL, dir);
}
else
Index: client.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/client.c,v
retrieving revision 1.462
retrieving revision 1.463
diff -u -b -r1.462 -r1.463
--- client.c 19 Jun 2007 03:09:23 -0000 1.462
+++ client.c 25 Aug 2007 03:17:58 -0000 1.463
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 The Free Software Foundation, Inc.
+ * Copyright (C) 2007 The 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
@@ -952,7 +952,7 @@
error (1, 0, "rename the directory and try again");
}
- if (mkdir_if_needed (dir))
+ if (!cvs_xmkdir (dir, NULL, MD_EXIST_OK))
{
/* It already existed, fine. Just keep going. */
}
@@ -1914,7 +1914,7 @@
/* A real checkin. */
char *basefile = make_base_file_name (filename, vn);
- mkdir_if_needed (CVSADM_BASE);
+ cvs_xmkdir (CVSADM_BASE, NULL, MD_EXIST_OK);
copy_file (filename, basefile);
if ((n = findnode_fn (sig_cache, short_pathname)))
@@ -2387,7 +2387,7 @@
bool verify = get_verify_checkouts (true);
if (!*istemp)
- mkdir_if_needed (CVSADM_BASE);
+ cvs_xmkdir (CVSADM_BASE, NULL, MD_EXIST_OK);
e = xfopen (basefile, bin ? FOPEN_BINARY_WRITE : "w");
if (fwrite (buf, sizeof *buf, size, e) != size)
error (1, errno, "cannot write `%s'", fullbase);
Index: commit.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/commit.c,v
retrieving revision 1.271
retrieving revision 1.272
diff -u -b -r1.271 -r1.272
--- commit.c 30 May 2007 23:20:43 -0000 1.271
+++ commit.c 25 Aug 2007 03:17:58 -0000 1.272
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -2096,23 +2097,16 @@
if (adding_on_branch)
{
- mode_t omask;
rcsname = xmalloc (strlen (repository)
+ sizeof (CVSATTIC)
+ strlen (file)
+ sizeof (RCSEXT)
+ 3);
- (void) sprintf (rcsname, "%s/%s", repository, CVSATTIC);
- omask = umask (cvsumask);
- if (CVS_MKDIR (rcsname, 0777) != 0 && errno != EEXIST)
- error (1, errno, "cannot make directory `%s'", rcsname);
- (void) umask (omask);
- (void) sprintf (rcsname,
- "%s/%s/%s%s",
- repository,
- CVSATTIC,
- file,
- RCSEXT);
+ sprintf (rcsname, "%s/%s", repository, CVSATTIC);
+ if (!isdir (rcsname))
+ cvs_xmkdir (rcsname, NULL, MD_REPO);
+ sprintf (rcsname, "%s/%s/%s%s",
+ repository, CVSATTIC, file, RCSEXT);
}
else
rcsname = Xasprintf ("%s/%s%s", repository, file, RCSEXT);
Index: create_adm.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/create_adm.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- create_adm.c 24 Apr 2006 18:50:26 -0000 1.53
+++ create_adm.c 25 Aug 2007 03:17:58 -0000 1.54
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -44,6 +45,7 @@
char *cp;
char *reposcopy;
char *tmp;
+ bool ud;
TRACE (TRACE_FUNCTION, "Create_Admin (%s, %s, %s, %s, %s, %d, %d, %d)",
dir, update_dir, repository, tag ? tag : "",
@@ -52,41 +54,22 @@
if (noexec)
return 0;
- tmp = Xasprintf ("%s/%s", dir, CVSADM);
+ /* A leading "./" looks bad in error messages. */
+ ud = strcmp (dir, ".");
+ tmp = Xasprintf ("%s%s%s", ud ? dir : "", ud ? "/" : "", CVSADM);
if (isfile (tmp))
error (1, 0, "there is a version in %s already", update_dir);
- if (CVS_MKDIR (tmp, 0777) < 0)
+ if (!cvs_mkdir (tmp, update_dir, warn ? 0 : MD_FATAL))
{
free (tmp);
tmp = NULL;
-
- /* We want to print out the entire update_dir, since a lot of
- our code calls this function with dir == "." or dir ==
- NULL. I hope that gives enough information in cases like
- absolute pathnames; printing out xgetcwd() or something would
- be way too verbose in the common cases. */
-
- if (warn)
- {
- /* The reason that this is a warning, rather than silently
- just skipping creating the directory, is that we don't want
- CVS's behavior to vary subtly based on factors (like directory
- permissions) which are not made clear to the user. With
- the warning at least we let them know what is going on. */
- error (0, errno, "warning: cannot make directory %s in %s",
- CVSADM, update_dir);
return 1;
}
- else
- error (1, errno, "cannot make directory %s in %s",
- CVSADM, update_dir);
- }
- else
- {
+ /* else */
+
free (tmp);
tmp = NULL;
- }
/* record the current cvs root for later use */
Index: edit.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/edit.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -b -r1.95 -r1.96
--- edit.c 30 May 2007 23:20:43 -0000 1.95
+++ edit.c 25 Aug 2007 03:17:58 -0000 1.96
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 The Free Software Foundation, Inc.
+ * Copyright (C) 2007 The Free Software Foundation, Inc.
*
* Implementation for "cvs edit", "cvs watch on", and related commands
*
@@ -355,7 +355,7 @@
rev = ((Entnode *) node->data)->version;
xchmod (filename, 1);
- mkdir_if_needed (CVSADM_BASE);
+ cvs_xmkdir (CVSADM_BASE, NULL, MD_EXIST_OK);
basefn = make_base_file_name (filename, rev);
if (!isfile (basefn))
@@ -471,7 +471,7 @@
copy so that if the user removes the working file, then restores it
with "cvs update" (which clears _editors but does not update
CVSADM_BASE), then a future "cvs edit" can still win. */
- /* Could save a system call by only calling mkdir_if_needed if
+ /* Could save a system call by only calling cvs_xmkdir() if
trying to create the output file fails. But copy_file isn't
set up to facilitate that. */
#ifdef SERVER_SUPPORT
Index: fileattr.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/fileattr.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- fileattr.c 24 Apr 2006 18:50:26 -0000 1.37
+++ fileattr.c 25 Aug 2007 03:17:58 -0000 1.38
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 The Free Software Foundation, Inc.
+ * Copyright (C) 2007 The Free Software Foundation, Inc.
*
* Implementation for file attribute munging features.
*
@@ -637,10 +637,9 @@
repname = Xasprintf ("%s/%s", fileattr_stored_repos, CVSREP);
- if (CVS_MKDIR (repname, 0777) < 0 && errno != EEXIST)
+ if (!isdir (repname) && !cvs_mkdir (repname, NULL, MD_REPO))
{
- error (0, errno, "cannot make directory %s", repname);
- (void) umask (omask);
+ umask (omask);
free (fname);
free (repname);
return;
Index: filesubr.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/filesubr.c,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -b -r1.111 -r1.112
--- filesubr.c 12 Aug 2006 17:16:01 -0000 1.111
+++ filesubr.c 25 Aug 2007 03:17:58 -0000 1.112
@@ -294,67 +294,6 @@
/*
- * Make a directory and die if it fails
- */
-void
-make_directory (const char *name)
-{
- struct stat sb;
-
- if (stat (name, &sb) == 0 && (!S_ISDIR (sb.st_mode)))
- error (0, 0, "%s already exists but is not a directory", name);
- if (!noexec && mkdir (name, 0777) < 0)
- error (1, errno, "cannot make directory %s", name);
-}
-
-/*
- * Make a path to the argument directory, printing a message if something
- * goes wrong.
- */
-void
-make_directories (const char *name)
-{
- char *cp;
-
- if (noexec)
- return;
-
- if (mkdir (name, 0777) == 0 || errno == EEXIST)
- return;
- if (! existence_error (errno))
- {
- error (0, errno, "cannot make path to %s", name);
- return;
- }
- if ((cp = strrchr (name, '/')) == NULL)
- return;
- *cp = '\0';
- make_directories (name);
- *cp++ = '/';
- if (*cp == '\0')
- return;
- (void) mkdir (name, 0777);
-}
-
-/* Create directory NAME if it does not already exist; fatal error for
- other errors. Returns 0 if directory was created; 1 if it already
- existed. */
-int
-mkdir_if_needed (const char *name)
-{
- if (mkdir (name, 0777) < 0)
- {
- int save_errno = errno;
- if (save_errno != EEXIST && !isdir (name))
- error (1, save_errno, "cannot make directory %s", name);
- return 1;
- }
- return 0;
-}
-
-
-
-/*
* Change the mode of a file, either adding write permissions, or removing
* all write permissions. Either change honors the current umask setting.
*
Index: import.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/import.c,v
retrieving revision 1.182
retrieving revision 1.183
diff -u -b -r1.182 -r1.183
--- import.c 22 Aug 2007 13:55:02 -0000 1.182
+++ import.c 25 Aug 2007 03:17:58 -0000 1.183
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -358,8 +359,7 @@
* Make all newly created directories writable. Should really use a more
* sophisticated security mechanism here.
*/
- (void) umask (cvsumask);
- make_directories (repository);
+ cvs_xmkdirs (repository, 0777, NULL, MD_REPO | MD_EXIST_OK);
/* Create the logfile that will be logged upon completion */
if ((logfp = cvs_temp_file (&tmpfile)) == NULL)
@@ -623,8 +623,8 @@
/* Attempt to make the Attic directory, in case it
does not exist. */
(void) sprintf (rcs, "%s/%s", repository, CVSATTIC);
- if (CVS_MKDIR (rcs, 0777 ) != 0 && errno != EEXIST)
- error (1, errno, "cannot make directory `%s'", rcs);
+ if (!isdir (rcs))
+ cvs_xmkdir (rcs, NULL, MD_REPO | MD_EXIST_OK);
/* Note that the above clobbered the path name, so we
recreate it here. */
@@ -1843,13 +1843,13 @@
err = 1;
goto out;
}
- if (noexec == 0 && CVS_MKDIR (repository, 0777) < 0)
+ if (!noexec && !cvs_mkdir (repository, NULL, MD_REPO | MD_QUIET))
{
ierrno = errno;
fperrmsg (logfp, 0, ierrno,
- "ERROR: cannot mkdir %s -- not added", repository);
+ "ERROR: cannot mkdir `%s' -- not added", repository);
error (0, ierrno,
- "ERROR: cannot mkdir %s -- not added", repository);
+ "ERROR: cannot mkdir `%s' -- not added", repository);
err = 1;
goto out;
}
Index: lock.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/lock.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -b -r1.121 -r1.122
--- lock.c 20 Mar 2007 16:56:13 -0000 1.121
+++ lock.c 25 Aug 2007 03:17:58 -0000 1.122
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -232,7 +233,7 @@
else
{
if (S_ISDIR (sb.st_mode))
- goto created;
+ goto exists;
else
error (1, 0, "%s is not a directory", retval);
}
@@ -258,42 +259,9 @@
new_mode = sb.st_mode;
save_umask = umask (0000);
saved_umask = 1;
+ cvs_xmkdirs (retval, new_mode, NULL, 0);
- p = short_repos;
- while (1)
- {
- while (!ISSLASH (*p) && *p != '\0')
- ++p;
- if (ISSLASH (*p))
- {
- strncpy (q, short_repos, p - short_repos);
- q[p - short_repos] = '\0';
- if (!ISSLASH (q[p - short_repos - 1])
- && CVS_MKDIR (retval, new_mode) < 0)
- {
- int saved_errno = errno;
- if (saved_errno != EEXIST)
- error (1, errno, "cannot make directory %s", retval);
- else
- {
- if (stat (retval, &sb) < 0)
- error (1, errno, "cannot stat %s", retval);
- new_mode = sb.st_mode;
- }
- }
- ++p;
- }
- else
- {
- strcpy (q, short_repos);
- if (CVS_MKDIR (retval, new_mode) < 0
- && errno != EEXIST)
- error (1, errno, "cannot make directory %s", retval);
- goto created;
- }
- }
- created:;
-
+exists:
strcat (retval, "/");
strcat (retval, name);
Index: ls.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/ls.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- ls.c 22 Aug 2007 13:55:02 -0000 1.21
+++ ls.c 25 Aug 2007 03:17:58 -0000 1.22
@@ -1,6 +1,6 @@
/*
- * Copyright (C) 2006 The Free Software Foundation, Inc.
- * Copyright (c) 2004, Derek R. Price & Ximbiot <http://ximbiot.com>
+ * Copyright (C) 2007 The Free Software Foundation, Inc.
+ * Copyright (c) 2004-2007, Derek R. Price & Ximbiot LLC <http://ximbiot.com>
* Copyright (c) 2001, Tony Hoyle
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
@@ -528,7 +528,7 @@
if (!created_dir)
created_dir = xstrdup (update_dir);
- make_directory (dir);
+ cvs_xmkdir (dir, NULL, 0);
Create_Admin (dir, update_dir, repos, show_tag, show_date,
nonbranch, 0, 0);
Subdir_Register (entries, NULL, dir);
Index: mkmodules.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/mkmodules.c,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -b -r1.101 -r1.102
--- mkmodules.c 22 Aug 2007 20:57:00 -0000 1.101
+++ mkmodules.c 25 Aug 2007 03:17:59 -0000 1.102
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -1235,10 +1236,10 @@
old cvsinit.sh script did. Few utilities do that, and a
non-existent parent directory is as likely to be a typo as something
which needs to be created. */
- mkdir_if_needed (current_parsed_root->directory);
+ cvs_xmkdir (current_parsed_root->directory, NULL, MD_REPO | MD_EXIST_OK);
adm = Xasprintf ("%s/%s", current_parsed_root->directory, CVSROOTADM);
- mkdir_if_needed (adm);
+ cvs_xmkdir (adm, NULL, MD_REPO | MD_EXIST_OK);
/* This is needed because we pass "fileptr->filename" not "info"
to add_rcs_file below. I think this would be easy to change,
@@ -1248,7 +1249,7 @@
error (1, errno, "cannot change to directory %s", adm);
/* Make Emptydir so it's there if we need it */
- mkdir_if_needed (CVSNULLREPOS);
+ cvs_xmkdir (CVSNULLREPOS, NULL, MD_REPO | MD_EXIST_OK);
/* 80 is long enough for all the administrative file names, plus
"/" and so on. */
Index: modules.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/modules.c,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -b -r1.100 -r1.101
--- modules.c 7 Jun 2006 06:59:14 -0000 1.100
+++ modules.c 25 Aug 2007 03:17:59 -0000 1.101
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
+ * Copyright (C) 1986-2007 The Free Software Foundation, Inc.
*
- * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
+ * Portions Copyright (C) 1998-2007 Derek Price,
+ * Ximbiot LLC <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
@@ -552,7 +553,7 @@
dir = where ? where : (mwhere ? mwhere : mname);
/* XXX - think about making null repositories at each dir here
instead of just at the bottom */
- make_directories (dir);
+ cvs_xmkdirs (dir, 0777, NULL, MD_EXIST_OK);
if (CVS_CHDIR (dir) < 0)
{
error (0, errno, "cannot chdir to %s", dir);
Index: sanity.sh
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/sanity.sh,v
retrieving revision 1.1184
retrieving revision 1.1185
diff -u -b -r1.1184 -r1.1185
--- sanity.sh 22 Aug 2007 20:57:00 -0000 1.1184
+++ sanity.sh 25 Aug 2007 03:17:59 -0000 1.1185
@@ -16136,9 +16136,9 @@
# Now try someplace where we don't have permission.
mkdir ${TESTDIR}/barf
chmod -w ${TESTDIR}/barf
- dotest_fail abspath-4r "${testcvs} co -d ${TESTDIR}/barf/sub mod1" \
-"${SPROG} \[checkout aborted\]: cannot make directory sub: Permission denied" \
-"${SPROG} \[checkout aborted\]: absolute pathnames invalid for server
(specified .${TESTDIR}/barf/sub.)"
+ dotest_fail abspath-4 "$testcvs co -d $TESTDIR/barf/sub mod1" \
+"$SPROG \[checkout aborted\]: cannot make directory \`sub': Permission denied"
\
+"$SPROG \[checkout aborted\]: absolute pathnames invalid for server (specified
\`$TESTDIR/barf/sub')"
chmod +w ${TESTDIR}/barf
rmdir ${TESTDIR}/barf
# Done. Nothing to clean up.
@@ -16355,13 +16355,13 @@
fi
# Now see whether CVS has trouble because it can't create CVS.
# First string is for local, second is for remote.
- dotest toplevel-12 "${testcvs} co top-dir" \
-"${SPROG} checkout: warning: cannot make directory CVS in \.: Permission denied
-${SPROG} checkout: Updating top-dir" \
-"${CPROG} checkout: warning: cannot make directory CVS in \.: Permission denied
-${CPROG} checkout: in directory \.:
-${CPROG} checkout: cannot open CVS/Entries for reading: No such file or
directory
-${SPROG} checkout: Updating top-dir"
+ dotest toplevel-12 "$testcvs co top-dir" \
+"$SPROG checkout: cannot make directory \`CVS': Permission denied
+$SPROG checkout: Updating top-dir" \
+"$SPROG checkout: cannot make directory \`CVS': Permission denied
+$SPROG checkout: in directory \.:
+$SPROG checkout: cannot open CVS/Entries for reading: No such file or directory
+$SPROG checkout: Updating top-dir"
chmod +w ../1
Index: subr.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/subr.c,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -b -r1.157 -r1.158
--- subr.c 22 Aug 2007 13:55:02 -0000 1.157
+++ subr.c 25 Aug 2007 03:17:59 -0000 1.158
@@ -30,7 +30,9 @@
#include "canonicalize.h"
#include "canon-host.h"
#include "getline.h"
+#include "mkdir-p.h"
#include "mreadlink.h"
+#include "savewd.h"
#include "vasnprintf.h"
/* CVS headers. */
@@ -2193,3 +2195,189 @@
return true;
}
#endif /* HAVE_CVS_ADMIN_GROUP */
+
+
+
+/* Return true if NAME is created. If FATAL is true, exit on errors.
+ * Otherwise, return false.
+ */
+static inline bool
+mkdir_i (const char *name, mode_t mode,
+ const char *update_dir, unsigned int flags)
+{
+ bool err = mkdir (name, mode);
+ if (err && !(flags & MD_EXIST_OK && errno == EEXIST)
+ && (flags & MD_FATAL || !(flags & MD_QUIET)))
+ {
+ bool uud = update_dir && strlen (update_dir)
+ && strcmp (update_dir, ".");
+ error (flags & MD_FATAL, errno, "cannot make directory `%s%s%s'",
+ uud ? update_dir : "", uud ? "/" : "", name);
+ }
+ return !err;
+}
+
+
+
+/* Returns true if NAME was created, false otherwise.
+ *
+ * GLOBALS
+ * cvsumask Set umask before creating driectories if FLAGS & MD_REPO.
+ * noexec If set, skip directory creation unless FLAGS & MD_FORCE.
+ */
+static inline bool
+cvs_mkdir_i (const char *name, mode_t mode,
+ const char *update_dir, unsigned int flags)
+{
+ mode_t omask;
+ bool retval;
+
+ if (noexec && !(flags & MD_FORCE)) return false;
+
+ /* Use umask(CVSUMASK) rather than CVSUMASK & 0777 since CVSUMASK could be
+ * more permissive than OMASK.
+ */
+ if (flags & MD_REPO)
+ omask = umask (cvsumask);
+
+ retval = mkdir_i (name, mode, update_dir, flags);
+
+ if (flags & MD_REPO)
+ umask (omask);
+
+ return retval;
+}
+
+
+
+/* Create directory NAME.
+ *
+ * GLOBALS
+ * cvsumask
+ * noexec If set, skip directory creation.
+ *
+ * RETURNS
+ * True if NAME was created, false otherwise.
+ */
+bool
+cvs_mkdir (const char *name, const char *update_dir, unsigned int flags)
+{
+ return cvs_mkdir_i (name, 0777, update_dir, flags);
+}
+
+
+
+/*
+ * Make a directory and die with a message if it fails.
+ *
+ * GLOBALS
+ * cvsumask
+ * noexec If set, skip directory creation.
+ */
+bool
+cvs_xmkdir (const char *name, const char *update_dir, unsigned int flags)
+{
+ return cvs_mkdir_i (name, 0777, update_dir, flags | MD_FATAL);
+}
+
+
+
+/*
+ * Closure struct for mkdir_callback.
+ */
+struct mkdir_callback_closure
+{
+ mode_t mode;
+ unsigned int flags;
+ const char *update_dir;
+};
+
+
+
+/*
+ * Callback for make_dir_parents which honors FLAGS.
+ */
+int
+mkdir_callback (const char *child, const char *dir, void *closure)
+{
+ struct mkdir_callback_closure *mcc = closure;
+ return cvs_mkdir_i (dir, mcc->mode, mcc->update_dir,
+ mcc->flags | MD_EXIST_OK) ? 0 : -1;
+}
+
+
+
+/*
+ * make_dir_parents() announce callback which does nothing.
+ */
+void
+mkdir_announce_callback (const char *dir, void *closure)
+{
+ return;
+}
+
+
+
+/* Returns true if complete path to NAME was created, false otherwise.
+ *
+ * GLOBALS
+ * cvsumask Set umask before creating driectories if FLAGS & MD_REPO.
+ * noexec If set, skip directory creation unless FLAGS & MD_FORCE.
+ */
+static inline bool
+cvs_mkdirs_i (const char *name, mode_t mode, const char *update_dir,
+ unsigned int flags)
+{
+ struct mkdir_callback_closure mcc;
+ struct savewd wd;
+ bool retval;
+
+ if (noexec && !(flags & MD_FORCE)) return false;
+ if (isdir (name))
+ {
+ /* Have to set EEXIST explicitly since make_dir_parents will not
+ * do so when MAKE_ANCESTOR is supplied.
+ */
+ if (!(flags & MD_EXIST_OK)) errno = EEXIST;
+ return false;
+ }
+
+ mcc.mode = mode;
+ mcc.flags = flags;
+ mcc.update_dir = NULL;
+
+ savewd_init (&wd);
+ retval = make_dir_parents ((char *)name, &wd, mkdir_callback, &mcc,
+ mode, mkdir_announce_callback, 0777, -1, -1,
+ true);
+ if (!retval && !(flags & MD_EXIST_OK && errno == EEXIST)
+ && (flags & MD_FATAL || !(flags & MD_QUIET)))
+ {
+ bool uud = update_dir && strlen (update_dir)
+ && strcmp (update_dir, ".");
+ error (flags & MD_FATAL, errno, "cannot make directory tree `%s%s%s'",
+ uud ? update_dir : "", uud ? "/" : "", name);
+ }
+ savewd_restore (&wd, 0);
+ savewd_finish (&wd);
+
+ return retval;
+}
+
+
+
+bool
+cvs_mkdirs (const char *name, mode_t mode, const char *update_dir,
+ unsigned int flags)
+{
+ return cvs_mkdirs_i (name, mode, update_dir, flags);
+}
+
+
+
+bool
+cvs_xmkdirs (const char *name, mode_t mode, const char *update_dir,
+ unsigned int flags)
+{
+ return cvs_mkdirs_i (name, mode, update_dir, flags | MD_FATAL);
+}
Index: subr.h
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/subr.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- subr.h 11 Jul 2006 21:48:43 -0000 1.12
+++ subr.h 25 Aug 2007 03:17:59 -0000 1.13
@@ -119,4 +119,15 @@
# define is_admin() true
# endif
+#define MD_QUIET (1 << 0) /* Don't spout on nonfatal errors. */
+#define MD_FATAL (1 << 1) /* Die on error. */
+#define MD_REPO (1 << 2) /* Honor CVSUMASK. */
+#define MD_FORCE (1 << 3) /* Ignore NOEXEC. */
+#define MD_EXIST_OK (1 << 4) /* Ok if directory already exists. */
+bool cvs_mkdir (const char *name, const char *update_dir, unsigned int flags);
+bool cvs_xmkdir (const char *name, const char *update_dir, unsigned int flags);
+bool cvs_mkdirs (const char *name, mode_t mode, const char *update_dir,
+ unsigned int flags);
+bool cvs_xmkdirs (const char *name, mode_t mode, const char *update_dir,
+ unsigned int flags);
#endif /* !SUBR_H */
Index: update.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/update.c,v
retrieving revision 1.268
retrieving revision 1.269
diff -u -b -r1.268 -r1.269
--- update.c 30 May 2007 23:20:45 -0000 1.268
+++ update.c 25 Aug 2007 03:18:00 -0000 1.269
@@ -945,13 +945,18 @@
tag_update_dir = xstrdup (update_dir);
}
- make_directory (dir);
- Create_Admin (dir, update_dir, repository, tag, date,
+ cvs_xmkdir (dir, NULL, 0);
+ if (Create_Admin (dir, update_dir, repository, tag, date,
/* This is a guess. We will rewrite it later
via WriteTag. */
0,
- 0,
- dotemplate);
+ 0, dotemplate))
+ {
+ error (0, 0,
+ "Failed to create admin data in `%s'. Skipping.",
+ update_dir);
+ return R_SKIP_ALL;
+ }
rewrite_tag = 1;
nonbranch = -1;
warned = 0;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Cvs-cvs] ccvs/src ChangeLog Makefile.in add.c base.c che...,
Derek Robert Price <=