diff libcommon/dumpdirfunc.c @ 106:dcfec53643c5

EF_DIR dump commands support output redirection
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 19 Feb 2021 06:24:06 +0000
parents 2c72709e0891
children
line wrap: on
line diff
--- a/libcommon/dumpdirfunc.c	Fri Feb 19 06:07:49 2021 +0000
+++ b/libcommon/dumpdirfunc.c	Fri Feb 19 06:24:06 2021 +0000
@@ -7,80 +7,86 @@
 #include "simresp.h"
 
 static void
-dump_aid(tlv)
+dump_aid(tlv, outf)
 	u_char *tlv;
+	FILE *outf;
 {
 	unsigned reclen, n;
 
 	reclen = tlv[1];
-	printf(" AID:");
+	fputs(" AID:", outf);
 	for (n = 0; n < reclen; n++)
-		printf(" %02X", tlv[n+2]);
-	putchar('\n');
+		fprintf(outf, " %02X", tlv[n+2]);
+	putc('\n', outf);
 }
 
 static void
-dump_label(tlv)
+dump_label(tlv, outf)
 	u_char *tlv;
+	FILE *outf;
 {
 	int rc;
 	unsigned textlen;
 
-	printf(" Label: ");
+	fputs(" Label: ", outf);
 	rc = validate_alpha_field(tlv + 2, tlv[1], &textlen);
 	if (rc < 0) {
-		printf("malformed\n");
+		fputs("malformed\n", outf);
 		return;
 	}
-	print_alpha_field(tlv + 2, textlen, stdout);
-	putchar('\n');
+	print_alpha_field(tlv + 2, textlen, outf);
+	putc('\n', outf);
 }
 
 static void
-dump_unknown_tlv(tlv)
+dump_unknown_tlv(tlv, outf)
 	u_char *tlv;
+	FILE *outf;
 {
 	unsigned reclen, n;
 
 	reclen = tlv[1] + 2;
-	printf(" TLV:");
+	fputs(" TLV:", outf);
 	for (n = 0; n < reclen; n++)
-		printf(" %02X", tlv[n]);
-	putchar('\n');
+		fprintf(outf, " %02X", tlv[n]);
+	putc('\n', outf);
 }
 
 void
-dump_efdir_record()
+dump_efdir_record(outf)
+	FILE *outf;
 {
 	unsigned totlen, reclen;
 	u_char *dp, *endp;
 
 	if (sim_resp_data[0] != 0x61) {
-		printf(" bad: first byte != 0x61\n");
+		fprintf(outf, " bad: first byte != 0x61\n");
 		return;
 	}
 	totlen = sim_resp_data[1];
 	if (totlen < 3 || totlen > 0x7F) {
-		printf(" bad: global length byte 0x%02X is invalid\n", totlen);
+		fprintf(outf, " bad: global length byte 0x%02X is invalid\n",
+			totlen);
 		return;
 	}
 	if (totlen + 2 > sim_resp_data_len) {
-		printf(" bad: TLV global length exceeds EF record length\n");
+		fprintf(outf,
+			" bad: TLV global length exceeds EF record length\n");
 		return;
 	}
 	dp = sim_resp_data + 2;
 	endp = sim_resp_data + 2 + totlen;
 	while (dp < endp) {
 		if (endp - dp < 2) {
-trunc_error:		printf(" bad: truncated TLV record\n");
+trunc_error:		fprintf(outf, " bad: truncated TLV record\n");
 			return;
 		}
 		if ((dp[0] & 0x1F) == 0x1F) {
-			printf(" bad: extended tag not supported\n");
+			fprintf(outf, " bad: extended tag not supported\n");
 			return;
 		}
 		if (dp[1] & 0x80) {
-			printf(" bad: extended length not supported\n");
+			fprintf(outf, " bad: extended length not supported\n");
 			return;
 		}
 		reclen = dp[1] + 2;
@@ -88,13 +94,13 @@
 			goto trunc_error;
 		switch (dp[0]) {
 		case 0x4F:
-			dump_aid(dp);
+			dump_aid(dp, outf);
 			break;
 		case 0x50:
-			dump_label(dp);
+			dump_label(dp, outf);
 			break;
 		default:
-			dump_unknown_tlv(dp);
+			dump_unknown_tlv(dp, outf);
 		}
 		dp += reclen;
 	}