[24055] in Source-Commits

home help back first fref pref prev next nref lref last post

/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)) {


home help back first fref pref prev next nref lref last post