- while(argc--) {
- fi = fopen(*++argv,"r");
- if (fi == NULL) {
- fprintf(stderr, "nm: cannot open %s\n", *argv);
+ xargv = argv;
+ while (argc--) {
+ ++xargv;
+ namelist();
+ }
+ exit(errs);
+}
+
+namelist()
+{
+ register int j;
+
+ archive = 0;
+ fi = fopen(*xargv, "r");
+ if (fi == NULL) {
+ error(0, "cannot open");
+ return;
+ }
+ off = SARMAG;
+ fread((char *)&mag_un, 1, sizeof(mag_un), fi);
+ if (mag_un.mag_exp.a_magic == OARMAG) {
+ error(0, "old archive");
+ return;
+ }
+ if (strncmp(mag_un.mag_armag, ARMAG, SARMAG)==0)
+ archive++;
+ else if (N_BADMAG(mag_un.mag_exp)) {
+ error(0, "bad format");
+ return;
+ }
+ fseek(fi, 0L, 0);
+ if (archive) {
+ nextel(fi);
+ if (narg > 1)
+ printf("\n%s:\n", *xargv);
+ }
+ do {
+ off_t o;
+ register i, n, c;
+ struct nlist *symp = NULL;
+ struct nlist sym;
+ struct stat stb;
+
+ fread((char *)&mag_un.mag_exp, 1, sizeof(struct exec), fi);
+ if (N_BADMAG(mag_un.mag_exp))
+ continue;
+ if (archive == 0)
+ fstat(fileno(fi), &stb);
+ o = N_SYMOFF(mag_un.mag_exp) - sizeof (struct exec);
+ fseek(fi, o, 1);
+ n = mag_un.mag_exp.a_syms / sizeof(struct nlist);
+ if (n == 0) {
+ error(0, "no name list");