ref: 5fffd4ac0ac75d6ba1d8e978a9c618ede9e5f2e5
parent: b600cb8e454bb8ee0116933b96372dd604bbe495
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Mon Feb 19 16:32:36 EST 2018
[ar] Transform afile into a global variable We are going to have only an archive, so it doesn't make sense to pass this variable across all the functions.
--- a/ar/main.c
+++ b/ar/main.c
@@ -13,10 +13,13 @@
#include "../inc/arg.h"
#include "../inc/scc.h"
+#define NOSAVE 0
+#define SAVE 1
+
char *argv0;
static int bflag, vflag, cflag, lflag, uflag, aflag, haslist;
-static char *posname, *tmpafile1, *tmpafile2;
+static char *posname, *tmpafile1, *tmpafile2, *arfile;
struct arop {
FILE *src;
@@ -46,15 +49,15 @@
}
static FILE *
-openar(char *afile)
+openar(void)
{
FILE *fp;
char magic[SARMAG+1];
- if ((fp = fopen(afile,"r+b")) == NULL) {
+ if ((fp = fopen(arfile,"r+b")) == NULL) {
if (!cflag)
- fprintf(stderr, "ar: creating %s\n", afile);
- if ((fp = fopen(afile, "w+b")) == NULL) {
+ fprintf(stderr, "ar: creating %s\n", arfile);
+ if ((fp = fopen(arfile, "w+b")) == NULL) {
perror("ar:opening archive");
exit(1);
}
@@ -71,7 +74,7 @@
if (strcmp(magic, ARMAG)) {
fprintf(stderr,
"ar:%s:invalid magic number '%s'\n",
- afile,
+ arfile,
magic);
exit(1);
}
@@ -448,19 +451,19 @@
}
static void
-closetmp(FILE *tmp, char **name, char *afile)
+closetmp(FILE *tmp, char **name, int save)
{
int c;
FILE *fp;
if (lflag) {
- if (afile && rename(*name, afile) < 0) {
+ if (save && rename(*name, arfile) < 0) {
perror("ar:renaming temporary");
exit(1);
}
*name = NULL;
- } else if (afile) {
- if ((fp = fopen(afile, "wb")) == NULL) {
+ } else if (save) {
+ if ((fp = fopen(arfile, "wb")) == NULL) {
perror("ar:reopening archive file");
exit(1);
}
@@ -500,12 +503,13 @@
static void
usage(void)
{
- fputs("ar [-drqtpmx][posname] [-vuaibcl] [posname] afile name ...\n", stderr);
+ fputs("ar [-drqtpmx][posname] [-vuaibcl] [posname] arfile name ...\n",
+ stderr);
exit(1);
}
static void
-doit(int key, char *afile, FILE *fp, char *flist[])
+doit(int key, FILE *fp, char *flist[])
{
FILE *tmp1, *tmp2;
@@ -532,8 +536,8 @@
fseek(tmp1, SARMAG, SEEK_SET);
tmp2 = opentmp("ar.tmp2", &tmpafile2);
run(tmp1, tmp2, NULL, flist, insert);
- closetmp(tmp1, &tmpafile1, NULL);
- closetmp(tmp2, &tmpafile2, afile);
+ closetmp(tmp1, &tmpafile1, NOSAVE);
+ closetmp(tmp2, &tmpafile2, SAVE);
break;
case 'q':
append(fp, flist);
@@ -541,7 +545,7 @@
case 'd':
tmp1 = opentmp("ar.tmp", &tmpafile1);
run(fp, tmp1, NULL, flist, del);
- closetmp(tmp1, &tmpafile1, afile);
+ closetmp(tmp1, &tmpafile1, SAVE);
break;
case 't':
run(fp, NULL, NULL, flist, list);
@@ -557,7 +561,7 @@
tmp2 = opentmp("ar.tmp2", &tmpafile2);
run(fp, tmp1, tmp2, flist, split);
- fp = openar(afile);
+ fp = openar();
fseek(tmp1, SARMAG, SEEK_SET);
fseek(tmp2, SARMAG, SEEK_SET);
if (!posname) {
@@ -565,8 +569,8 @@
break;
}
run(tmp1, fp, tmp2, NULL, merge);
- closetmp(tmp1, &tmpafile1, NULL);
- closetmp(tmp2, &tmpafile2, NULL);
+ closetmp(tmp1, &tmpafile1, NOSAVE);
+ closetmp(tmp2, &tmpafile2, NOSAVE);
break;
}
if (*flist == NULL)
@@ -581,7 +585,6 @@
main(int argc, char *argv[])
{
int key, nkey = 0, pos = 0;
- char *afile;
atexit(cleanup);
ARGBEGIN {
@@ -647,8 +650,8 @@
signal(SIGQUIT, sigfun);
signal(SIGTERM, sigfun);
- afile = *argv;
- doit(key, afile, openar(afile), argv+1);
+ arfile = *argv;
+ doit(key, openar(), argv+1);
if (fflush(stdout) == EOF) {
perror("ar:error writing to stdout");