shithub: scc

Download patch

ref: ed326ceb48992680934f1c82c387893b0ccf1af0
parent: 25e676d87fef3efa5cd4101ce7f955f477564cfc
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Sat Feb 3 05:53:07 EST 2018

[nm] Fix some small bugs

--- a/nm/main.c
+++ b/nm/main.c
@@ -30,12 +30,10 @@
 
 	fgetpos(fp, &pos);
 	fread(magic, sizeof(magic), 1, fp);
-	if (!ferror(fp)) {
-		if (!strncmp(magic, MYROMAGIC, MYROMAGIC_SIZ))
-			return 1;
-	}
-
 	fsetpos(fp, &pos);
+
+	if (!ferror(fp) && !strncmp(magic, MYROMAGIC, MYROMAGIC_SIZ))
+		return 1;
 	return 0;
 }
 
@@ -47,13 +45,10 @@
 
 	fgetpos(fp, &pos);
 	fread(magic, sizeof(magic), 1, fp);
-
-	if (!ferror(fp)) {
-		if (!strncmp(magic, ARMAGIC, ARMAGIC_SIZ))
-			return 1;
-	}
-
 	fsetpos(fp, &pos);
+
+	if (!ferror(fp) && !strncmp(magic, ARMAGIC, ARMAGIC_SIZ))
+		return 1;
 	return 0;
 }
 
@@ -75,7 +70,7 @@
 }
 
 static void
-print(char *file, char *member, struct myrosym *sym, FILE *fp)
+print(char *file, char *member, struct myrosym *sym)
 {
 	char *fmt, *name = strings + sym->name;
 	int type = typeof(sym);
@@ -86,9 +81,9 @@
 		return;
 
 	if (Aflag)
-		fprintf(fp, (archflag) ? "%s[%s]: " : "%s: ", file, member);
+		printf((archflag) ? "%s[%s]: " : "%s: ", file, member);
 	if (Pflag) {
-		fprintf(fp, "%s %c", name, type);
+		printf("%s %c", name, type);
 		if (type != 'U') {
 			if (radix == 8)
 				fmt = "%llo %llo";
@@ -96,7 +91,7 @@
 				fmt = "%llu %llu";
 			else
 				fmt = "%llx %llx";
-			fprintf(fp, fmt, sym->offset, sym->len);
+			printf(fmt, sym->offset, sym->len);
 		}
 	} else {
 		if (type == 'U')
@@ -107,10 +102,10 @@
 			fmt = "%016.16lld";
 		else
 			fmt = "%016.16llx";
-		fprintf(fp, fmt, sym->offset);
-		fprintf(fp, " %c %s", type, name);
+		printf(fmt, sym->offset);
+		printf(" %c %s", type, name);
 	}
-	putc('\n', fp);
+	putchar('\n');
 }
 
 static void
@@ -154,13 +149,13 @@
 
 	for (i = 0; i < n; ++i) {
 		if (rdmyrosym(fp, &syms[i]) < 0)
-			goto free_arrays;
+			goto symbol_error;
 		if (syms[i].name >= hdr.strsize)
 			goto offset_overflow;
 	}
 	qsort(syms, n, sizeof(*syms), cmp);
 	for (i = 0; i < n; ++i)
-		print(fname, member, &syms[i], fp);
+		print(fname, member, &syms[i]);
 
 
 free_arrays:
@@ -168,6 +163,10 @@
 	free(strings);
 	return;
 
+symbol_error:
+	fprintf(stderr, "nm: %s: error reading symbols\n", fname);
+	goto free_arrays;
+
 offset_overflow:
 	fprintf(stderr, "nm: %s: overflow in headers of archive\n",
 		fname);
@@ -273,8 +272,8 @@
 	if (argc == 0) {
 		doit("a.out");
 	} else {
-		while (argc-- > 0)
-			doit(*++argv);
+		for ( ; *argv; ++argv)
+			doit(*argv);
 	}
 
 	return 0;
--- a/objdump/main.c
+++ b/objdump/main.c
@@ -222,7 +222,7 @@
 	for (off = 0; ; off += 32) {
 		printf(" %016llX:", off);
 		for (i = 0; i < 2; i++) {
-			for (j = 0; j < 16; j++) {
+			for (j = 0; j < 8; j++) {
 				if ((c = getc(obj->fp)) == EOF)
 					goto exit_loop;
 				printf(" %02X", c);