summaryrefslogtreecommitdiff
path: root/usr.bin/cvs
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/cvs')
-rw-r--r--usr.bin/cvs/cvs.h4
-rw-r--r--usr.bin/cvs/release.c10
-rw-r--r--usr.bin/cvs/req.c6
-rw-r--r--usr.bin/cvs/server.c7
-rw-r--r--usr.bin/cvs/util.c16
5 files changed, 22 insertions, 21 deletions
diff --git a/usr.bin/cvs/cvs.h b/usr.bin/cvs/cvs.h
index 23d09e60f0b..1a1c128e0fe 100644
--- a/usr.bin/cvs/cvs.h
+++ b/usr.bin/cvs/cvs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cvs.h,v 1.92 2005/12/19 18:21:30 xsa Exp $ */
+/* $OpenBSD: cvs.h,v 1.93 2005/12/24 19:07:52 xsa Exp $ */
/*
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -437,7 +437,7 @@ int cvs_mkadmin(const char *, const char *, const char *, char *,
int cvs_cksum(const char *, char *, size_t);
int cvs_exec(int, char **, int []);
int cvs_getargv(const char *, char **, int);
-int cvs_chdir(const char *);
+int cvs_chdir(const char *, int);
int cvs_rename(const char *, const char *);
int cvs_unlink(const char *);
int cvs_rmdir(const char *);
diff --git a/usr.bin/cvs/release.c b/usr.bin/cvs/release.c
index 73418748c1b..9c419ba3d1a 100644
--- a/usr.bin/cvs/release.c
+++ b/usr.bin/cvs/release.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: release.c,v 1.24 2005/12/22 14:31:44 xsa Exp $ */
+/* $OpenBSD: release.c,v 1.25 2005/12/24 19:07:52 xsa Exp $ */
/*
* Copyright (c) 2005 Xavier Santolaria <xsa@openbsd.org>
* All rights reserved.
@@ -161,7 +161,7 @@ cvs_release_dir(CVSFILE *cf, void *arg)
return (0);
/* chdir before running the `cvs update' command */
- cvs_chdir(dpath);
+ cvs_chdir(dpath, 0);
/* test if dir has CVS/ directory */
if (stat(CVS_PATH_CVSDIR, &st) == -1) {
@@ -199,7 +199,7 @@ cvs_release_dir(CVSFILE *cf, void *arg)
cvs_log(LP_ERR, "unable to release `%s'", dpath);
/* change back to original working dir */
- cvs_chdir(wdir);
+ cvs_chdir(wdir, 0);
}
printf("You have [%d] altered file%s in this repository.\n",
@@ -218,13 +218,13 @@ cvs_release_dir(CVSFILE *cf, void *arg)
"** `%s' aborted by user choice.\n", cvs_command);
/* change back to original working dir */
- cvs_chdir(wdir);
+ cvs_chdir(wdir, 0);
return (-1);
}
/* change back to original working dir */
- cvs_chdir(wdir);
+ cvs_chdir(wdir, 0);
if (dflag == 1) {
if (cvs_rmdir(dpath) != 0)
diff --git a/usr.bin/cvs/req.c b/usr.bin/cvs/req.c
index 35baf600d76..ea9237959c3 100644
--- a/usr.bin/cvs/req.c
+++ b/usr.bin/cvs/req.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: req.c,v 1.37 2005/12/22 14:31:44 xsa Exp $ */
+/* $OpenBSD: req.c,v 1.38 2005/12/24 19:07:52 xsa Exp $ */
/*
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -282,7 +282,7 @@ cvs_req_directory(int reqid, char *line)
* Lets make sure we always start at the correct
* directory.
*/
- cvs_chdir(cvs_server_tmpdir);
+ cvs_chdir(cvs_server_tmpdir, 1);
/*
* Set repository path.
@@ -609,7 +609,7 @@ cvs_req_command(int reqid, char *line)
/* switch to the correct directory */
if (cmdp->cmd_op != CVS_OP_VERSION)
- cvs_chdir(cvs_server_tmpdir);
+ cvs_chdir(cvs_server_tmpdir, 1);
ret = cvs_startcmd(cmdp, cvs_req_nargs, cvs_req_args);
diff --git a/usr.bin/cvs/server.c b/usr.bin/cvs/server.c
index 60f82d9d83d..e5b29854f2a 100644
--- a/usr.bin/cvs/server.c
+++ b/usr.bin/cvs/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.25 2005/12/20 16:55:21 xsa Exp $ */
+/* $OpenBSD: server.c,v 1.26 2005/12/24 19:07:52 xsa Exp $ */
/*
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -96,10 +96,7 @@ cvs_server(int argc, char **argv)
fatal("cvs_server: mkdir: `%s': %s",
cvs_server_tmpdir, strerror(errno));
- if (cvs_chdir(cvs_server_tmpdir) == -1) {
- (void)cvs_rmdir(cvs_server_tmpdir);
- fatal("cvs_server: cvs_chdir failed");
- }
+ cvs_chdir(cvs_server_tmpdir, 1);
for (;;) {
if (fgets(reqbuf, (int)sizeof(reqbuf), stdin) == NULL) {
diff --git a/usr.bin/cvs/util.c b/usr.bin/cvs/util.c
index 11565ea828f..c912c7cc58d 100644
--- a/usr.bin/cvs/util.c
+++ b/usr.bin/cvs/util.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: util.c,v 1.62 2005/12/24 04:10:51 joris Exp $ */
+/* $OpenBSD: util.c,v 1.63 2005/12/24 19:07:52 xsa Exp $ */
/*
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -495,15 +495,19 @@ cvs_exec(int argc, char **argv, int fds[3])
/*
* cvs_chdir()
*
- * Change to directory.
- * chdir() wrapper with an error message.
+ * Change to directory <path>.
+ * If <rm> is equal to `1', <path> is removed if chdir() fails so we
+ * do not have temporary directories leftovers.
* Returns 0 on success.
*/
int
-cvs_chdir(const char *path)
+cvs_chdir(const char *path, int rm)
{
- if (chdir(path) == -1)
+ if (chdir(path) == -1) {
+ if (rm == 1)
+ cvs_unlink(path);
fatal("cvs_chdir: `%s': %s", path, strerror(errno));
+ }
return (0);
}
@@ -698,7 +702,7 @@ cvs_create_dir(const char *path, int create_adm, char *root, char *repo)
}
/* All went ok, switch to the newly created directory. */
- cvs_chdir(d);
+ cvs_chdir(d, 0);
d = strtok(NULL, "/");
}