Date: Tue, 22 May 2018 14:35:33 +0000 (UTC) From: Ed Maste <emaste@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r334046 - head/tools/tools/intel-ucode-split Message-ID: <201805221435.w4MEZXnW041963@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: emaste Date: Tue May 22 14:35:33 2018 New Revision: 334046 URL: https://svnweb.freebsd.org/changeset/base/334046 Log: intel-ucode-split: add -n flag to skip creating output files Sponsored by: The FreeBSD Foundation Modified: head/tools/tools/intel-ucode-split/intel-ucode-split.c Modified: head/tools/tools/intel-ucode-split/intel-ucode-split.c ============================================================================== --- head/tools/tools/intel-ucode-split/intel-ucode-split.c Tue May 22 14:26:58 2018 (r334045) +++ head/tools/tools/intel-ucode-split/intel-ucode-split.c Tue May 22 14:35:33 2018 (r334046) @@ -112,7 +112,7 @@ static void usage(void) { - printf("ucode-split [-v] microcode_file\n"); + printf("ucode-split [-nv] microcode_file\n"); exit(1); } @@ -124,11 +124,14 @@ main(int argc, char *argv[]) size_t len, resid; ssize_t rv; int c, ifd, ofd; - bool vflag; + bool nflag, vflag; - vflag = false; - while ((c = getopt(argc, argv, "v")) != -1) { + nflag = vflag = false; + while ((c = getopt(argc, argv, "nv")) != -1) { switch (c) { + case 'n': + nflag = true; + break; case 'v': vflag = true; break; @@ -166,40 +169,48 @@ main(int argc, char *argv[]) if (vflag) dump_header(&hdr); - sig_str = format_signature(hdr.processor_signature); - asprintf(&output_file, "%s.%02x", sig_str, - hdr.processor_flags & 0xff); - free(sig_str); - if (output_file == NULL) - err(1, "asprintf"); - ofd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0600); - if (ofd < 0) - err(1, "open"); - - /* Write header. */ - rv = write(ofd, &hdr, sizeof(hdr)); - if (rv < (ssize_t)sizeof(hdr)) - err(1, "write"); - - /* Copy data. */ resid = (hdr.total_size != 0 ? hdr.total_size : 2048) - sizeof(hdr); if (resid > 1 << 24) /* Arbitrary chosen maximum size. */ errx(1, "header total_size too large"); - while (resid > 0) { - len = resid < bufsize ? resid : bufsize; - rv = read(ifd, buf, len); - if (rv < 0) - err(1, "read"); - else if (rv < (ssize_t)len) - errx(1, "truncated microcode data"); - if (write(ofd, buf, len) < (ssize_t)len) + + if (nflag) { + if (lseek(ifd, resid, SEEK_CUR) == -1) + err(1, "lseek"); + printf("\n"); + } else { + sig_str = format_signature(hdr.processor_signature); + asprintf(&output_file, "%s.%02x", sig_str, + hdr.processor_flags & 0xff); + free(sig_str); + if (output_file == NULL) + err(1, "asprintf"); + ofd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, + 0600); + if (ofd < 0) + err(1, "open"); + + /* Write header. */ + rv = write(ofd, &hdr, sizeof(hdr)); + if (rv < (ssize_t)sizeof(hdr)) err(1, "write"); - resid -= len; + + /* Copy data. */ + while (resid > 0) { + len = resid < bufsize ? resid : bufsize; + rv = read(ifd, buf, len); + if (rv < 0) + err(1, "read"); + else if (rv < (ssize_t)len) + errx(1, "truncated microcode data"); + if (write(ofd, buf, len) < (ssize_t)len) + err(1, "write"); + resid -= len; + } + if (vflag) + printf("written to %s\n\n", output_file); + close(ofd); + free(output_file); } - if (vflag) - printf("written to %s\n\n", output_file); - close(ofd); - free(output_file); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805221435.w4MEZXnW041963>