浏览代码

*** empty log message ***

François Pinard 30 年之前
父节点
当前提交
62e7f92178
共有 1 个文件被更改,包括 11 次插入8 次删除
  1. 11 8
      src/create.c

+ 11 - 8
src/create.c

@@ -310,6 +310,7 @@ badfile:
 				}
 				if (link_name - lp->name >= NAMSIZ)
 				  write_long (link_name, LF_LONGLINK);
+				current_link_name = link_name;
 
 				hstat.st_size = 0;
 				header = start_header(p, &hstat);
@@ -610,10 +611,8 @@ badfile:
 		buf[size] = '\0';
 		if (size >= NAMSIZ)
 		  write_long (buf, LF_LONGLINK);
+		current_link_name = buf;
 
-		buf[NAMSIZ - 1] = '\0';
-		if (size >= NAMSIZ)
-		  size = NAMSIZ - 1;
 		hstat.st_size = 0;		/* Force 0 size on symlink */
 		header = start_header(p, &hstat);
 		if (header == NULL) 
@@ -621,7 +620,8 @@ badfile:
 		    critical_error = 1;
 		    goto badfile;
 		  }
-		strcpy (header->header.arch_linkname, buf);
+		strncpy (header->header.arch_linkname, buf, NAMSIZ);
+		header->header.arch_linkname[NAMSIZ - 1] = '\0';
 		header->header.linkflag = LF_SYMLINK;
 		finish_header(header);		/* Nothing more to do to it */
 		if (f_remove_files)
@@ -1199,6 +1199,7 @@ start_header(name, st)
 				msg("Removing leading / from absolute path names in the archive.");
 		}
 	}
+	current_file_name = name;
 	strncpy(header->header.arch_name, name, NAMSIZ);
 	header->header.arch_name[NAMSIZ-1] = '\0';
 
@@ -1344,11 +1345,13 @@ write_long (p, type)
   int size = strlen (p) + 1;
   int bufsize;
   union record *header;
+  struct stat foo;
   
-  /* Link name won't fit, so we write
-     an LF_LONGLINK record. */
-  hstat.st_size = size;
-  header = start_header ("././@LongLink", &hstat);
+
+  bzero (&foo, sizeof foo);
+  foo.st_size = size;
+
+  header = start_header ("././@LongLink", &foo);
   header->header.linkflag = type;
   finish_header (header);