ref: 53c4ce7baacccf3d1b616912446c4a98984516f0
parent: d724fab92904d3e8279b22f12f3c3bf633ae22ea
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Fri Feb 23 04:47:04 EST 2018
[ar] Create temporary files only when it is needed
--- a/ar/main.c
+++ b/ar/main.c
@@ -429,9 +429,6 @@
FILE *fp, *fi;
int c, i;
- fseek(tmps[0].fp, 0, SEEK_SET);
- fseek(tmps[1].fp, 0, SEEK_SET);
- fseek(tmps[2].fp, 0, SEEK_SET);
if ((fp = fopen(arfile, "wb")) == NULL) { perror("ar:reopening archive");@@ -441,7 +438,9 @@
fputs(ARMAG, fp);
for (i = 0; i < 3; i++) {- fi = tmps[i].fp;
+ if ((fi = tmps[i].fp) == NULL)
+ continue;
+ fseek(fi , 0, SEEK_SET);
while ((c = getc(fi)) != EOF)
putc(c, fp);
if (ferror(fi)) {@@ -461,6 +460,8 @@
{struct tmp *tmp = &tmps[which];
+ if (!tmp->fp)
+ return;
if (fclose(tmp->fp) == EOF) { perror("ar:closing temporaries");exit(1);
@@ -500,9 +501,12 @@
return;
}
- opentmp("ar.tmp1", BEFORE);- opentmp("ar.tmp2", INDOT);- opentmp("ar.tmp3", AFTER);+ if (key == 'r' || key == 'm' || key == 'd')
+ opentmp("ar.tmp1", BEFORE);+ if (key == 'r' || key == 'm') {+ opentmp("ar.tmp2", INDOT);+ opentmp("ar.tmp3", AFTER);+ }
switch (key) {case 'r':
--
⑨