浏览代码

(decode_options): Ignore --seek if used with --delete.
Delete.c is based on the assumption that the archive is being
actually read, not lseeked.

Sergey Poznyakoff 20 年之前
父节点
当前提交
90b1e24487
共有 1 个文件被更改,包括 12 次插入0 次删除
  1. 12 0
      src/tar.c

+ 12 - 0
src/tar.c

@@ -1464,6 +1464,18 @@ decode_options (int argc, char **argv)
 			  _("--occurrence cannot be used in the requested operation mode")));
     }
 
+  if (seekable_archive && subcommand_option == DELETE_SUBCOMMAND)
+    {
+      /* The current code in delete.c is based on the assumption that
+	 skip_member() reads all data from the archive. So, we should
+	 make sure it won't use seeks. On the other hand, the same code
+	 depends on the ability to backspace a record in the archive,
+	 so setting seekable_archive to false is technically incorrect.
+         However, it is tested only in skip_member(), so it's not a
+	 problem. */
+      seekable_archive = false;
+    }
+  
   if (archive_names == 0)
     {
       /* If no archive file name given, try TAPE from the environment, or