[24055] in Source-Commits
/svn/athena r23659 - in trunk/athena/bin/delete: . debian
daemon@ATHENA.MIT.EDU (Evan Broder)
Sun Mar 29 15:55:53 2009
Date: Sun, 29 Mar 2009 15:55:41 -0400
From: Evan Broder <broder@MIT.EDU>
Message-Id: <200903291955.n2TJtfIk009164@drugstore.mit.edu>
To: source-commits@mit.edu
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Author: broder
Date: 2009-03-29 15:55:41 -0400 (Sun, 29 Mar 2009)
New Revision: 23659
Modified:
trunk/athena/bin/delete/Makefile.in
trunk/athena/bin/delete/debian/changelog
trunk/athena/bin/delete/delete.c
Log:
In delete:
* Apply patches from jik:
- When recursively deleting a directory, read in the directory's
entire contents before deleting anything so readdir doesn't get
confused
Modified: trunk/athena/bin/delete/Makefile.in
===================================================================
--- trunk/athena/bin/delete/Makefile.in 2009-03-29 17:49:31 UTC (rev 23658)
+++ trunk/athena/bin/delete/Makefile.in 2009-03-29 19:55:41 UTC (rev 23659)
@@ -22,7 +22,7 @@
COBJS= util.o delete_errs.o errors.o
POBJS= directories.o pattern.o shell_regexp.o stack.o
OBJS= ${COBJS} ${POBJS} delete.o undelete.o expunge.o lsdel.o col.o
-DELETEOBJS= delete.o ${COBJS}
+DELETEOBJS= delete.o ${POBJS} ${COBJS}
UNDELETEOBJS= undelete.o ${POBJS} ${COBJS}
EXPUNGEOBJS= expunge.o col.o ${POBJS} ${COBJS}
LSDELOBJS= lsdel.o col.o ${POBJS} ${COBJS}
Modified: trunk/athena/bin/delete/debian/changelog
===================================================================
--- trunk/athena/bin/delete/debian/changelog 2009-03-29 17:49:31 UTC (rev 23658)
+++ trunk/athena/bin/delete/debian/changelog 2009-03-29 19:55:41 UTC (rev 23659)
@@ -1,3 +1,12 @@
+debathena-delete (10.0.1-0debathena1) unstable; urgency=low
+
+ * Patches from Jonathan Kamens:
+ - When recursively deleting a directory, read in the directory's
+ entire contents before deleting anything so readdir doesn't get
+ confused
+
+ -- Evan Broder <broder@mit.edu> Sun, 29 Mar 2009 14:50:37 -0400
+
debathena-delete (10.0.0-0debathena1) unstable; urgency=low
* Change DEB_AUTO_UPDATE_AUTOCONF to 2.50, not 1.
Modified: trunk/athena/bin/delete/delete.c
===================================================================
--- trunk/athena/bin/delete/delete.c 2009-03-29 17:49:31 UTC (rev 23658)
+++ trunk/athena/bin/delete/delete.c 2009-03-29 19:55:41 UTC (rev 23659)
@@ -357,6 +357,8 @@
int status = 0;
char newfile[MAXPATHLEN];
int retval = 0;
+ char **dir_contents = 0;
+ int num_dir_contents = 0, dir_contents_size = 0;
if (interactive && recursed) {
printf("%s: remove directory %s? ", whoami, filename);
@@ -378,20 +380,33 @@
continue;
if (is_deleted(dp->d_name))
continue;
- else {
- (void) strcpy(newfile, append(filename, dp->d_name));
- if (! *newfile) {
- error(filename);
- status = error_code;
- }
-
- retval = delete(newfile, 1);
- if (retval) {
- error(newfile);
- status = retval;
- }
+ (void) strcpy(newfile, append(filename, dp->d_name));
+ if (! *newfile) {
+ error(filename);
+ status = error_code;
+ break;
}
+ if ((retval = add_str(&dir_contents, num_dir_contents,
+ &dir_contents_size, newfile))) {
+ error(filename);
+ status = retval;
+ break;
+ }
+ num_dir_contents++;
}
+
+ if (!status && num_dir_contents) {
+ int i;
+ for (i = 0; i < num_dir_contents; i++) {
+ retval = delete(dir_contents[i], 1);
+ if (retval) {
+ error(dir_contents[i]);
+ status = retval;
+ }
+ }
+ }
+
+ free_list(dir_contents, num_dir_contents);
closedir(dirp);
if (status && (! emulate_rm)) {