shithub: scc

Download patch

ref: cb32df0efbd91bd9f1c1b3840086133b2e7dd6b2
parent: 59ec69003f284ff73480ce2724e50fe7ee178f98
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Mon Feb 19 10:50:53 EST 2018

[ar] Remove current member from pending list

We don't want to have them there for anything.

--- a/ar/main.c
+++ b/ar/main.c
@@ -135,8 +135,11 @@
 		exit(1);
 	}
 
-	while ((fname = *list++) != NULL)
+	for ( ; fname = *list; ++list) {
+		*list = NULL;
 		archive(fname, fp, 'a');
+	}
+
 	if (fclose(fp) == EOF) {
 		perror("ar:error writing archive");
 		exit(1);
@@ -194,30 +197,22 @@
 	return buf;
 }
 
-static void
-rmlist(char *list[])
-{
-	for (; *list; ++list)
-		list[0] = list[1];
-}
-
-static char **
+static int
 inlist(char *fname, char *list[])
 {
 	while (*list && strcmp(*list, fname))
 		++list;
 	if (*list == NULL)
-		return NULL;
-	return list;
+		return 0;
+	for (; *list; ++list)
+		list[0] = list[1];
+	return 1;
 }
 
 static void
 split(struct arop *op, char *files[])
 {
-	char **l;
-
-	l = inlist(op->fname, files);
-	if (!l) {
+	if (!inlist(op->fname, files)) {
 		copy(&op->hdr, op->size, op->src, op->dst);
 		return;
 	} else {
@@ -224,7 +219,6 @@
 		if (vflag)
 			printf("m - %s\n", op->fname);
 		copy(&op->hdr, op->size, op->src, op->tmp);
-		rmlist(l);
 	}
 }
 
@@ -271,13 +265,10 @@
 {
 	char **l;
 
-	l = inlist(op->fname, files);
-	if (!l) {
+	if (!inlist(op->fname, files))
 		copy(&op->hdr, op->size, op->src, op->dst);
-		return;
-	}
-	archive(op->fname, op->dst, 'r');
-	rmlist(l);
+	else
+		archive(op->fname, op->dst, 'r');
 }
 
 static void