Browse Source

(delete_archive_members): Honor --occurence option.

Sergey Poznyakoff 21 years ago
parent
commit
f4935ab55d
1 changed files with 24 additions and 15 deletions
  1. 24 15
      src/delete.c

+ 24 - 15
src/delete.c

@@ -173,12 +173,18 @@ delete_archive_members (void)
 	  abort ();
 
 	case HEADER_SUCCESS:
-	  if (name = name_scan (current_stat_info.file_name), !name)
+	  if ((name = name_scan (current_stat_info.file_name)) == NULL)
 	    {
 	      skip_member ();
 	      break;
 	    }
-	  name->found = 1;
+	  name->found_count++;
+	  if (!ISFOUND(name))
+	    {
+	      skip_member ();
+	      break;
+	    }
+	  
 	  /* Fall through.  */
 	case HEADER_SUCCESS_EXTENDED:
 	  logical_status = status;
@@ -279,23 +285,26 @@ delete_archive_members (void)
 
 	  /* Found another header.  */
 
-	  if (name = name_scan (current_stat_info.file_name), name)
+	  if ((name = name_scan (current_stat_info.file_name)) != NULL)
 	    {
-	      name->found = 1;
-	    flush_file:
-	      set_next_block_after (current_header);
-	      blocks_to_skip = (current_stat_info.stat.st_size + BLOCKSIZE - 1) / BLOCKSIZE;
-
-	      while (record_end - current_block <= blocks_to_skip)
+	      name->found_count++;
+	      if (ISFOUND(name))
 		{
-		  blocks_to_skip -= (record_end - current_block);
-		  flush_archive ();
+		flush_file:
+		  set_next_block_after (current_header);
+		  blocks_to_skip = (current_stat_info.stat.st_size
+				    + BLOCKSIZE - 1) / BLOCKSIZE;
+
+		  while (record_end - current_block <= blocks_to_skip)
+		    {
+		      blocks_to_skip -= (record_end - current_block);
+		      flush_archive ();
+		    }
+		  current_block += blocks_to_skip;
+		  blocks_to_skip = 0;
+		  continue;
 		}
-	      current_block += blocks_to_skip;
-	      blocks_to_skip = 0;
-	      continue;
 	    }
-
 	  /* Copy header.  */
 
 	  if (extended_header.size)