svn commit: r268172 - head/usr.bin/vtfontcvt

Ed Maste emaste at FreeBSD.org
Wed Jul 2 19:31:50 UTC 2014


Author: emaste
Date: Wed Jul  2 19:31:49 2014
New Revision: 268172
URL: http://svnweb.freebsd.org/changeset/base/268172

Log:
  vtfontcvt: correct width calculation (.hex files and commandline)
  
  MFC after:	1 week
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/usr.bin/vtfontcvt/vtfontcvt.c

Modified: head/usr.bin/vtfontcvt/vtfontcvt.c
==============================================================================
--- head/usr.bin/vtfontcvt/vtfontcvt.c	Wed Jul  2 19:25:49 2014	(r268171)
+++ head/usr.bin/vtfontcvt/vtfontcvt.c	Wed Jul  2 19:31:49 2014	(r268172)
@@ -285,6 +285,16 @@ parse_bdf(FILE *fp, unsigned int map_idx
 	return (0);
 }
 
+static void
+set_width(int w)
+{
+
+	if (w <= 0 || w > 128)
+		errx(1, "invalid width %d", w);
+	width = w;
+	wbytes = howmany(width, 8);
+}
+
 static int
 parse_hex(FILE *fp, unsigned int map_idx)
 {
@@ -300,12 +310,12 @@ parse_hex(FILE *fp, unsigned int map_idx
 		if (strncmp(ln, "# Height: ", 10) == 0) {
 			height = atoi(ln + 10);
 		} else if (strncmp(ln, "# Width: ", 9) == 0) {
-			width = atoi(ln + 9);
+			set_width(atoi(ln + 9));
 		} else if (sscanf(ln, "%4x:", &curchar)) {
 			p = ln + 5;
 			chars_per_row = strlen(p) / height;
 			dwidth = width;
-			if (chars_per_row / 2 > width / 8)
+			if (chars_per_row / 2 > (width + 7) / 8)
 				dwidth *= 2; /* Double-width character. */
 			snprintf(fmt_str, sizeof(fmt_str), "%%%ux",
 			    chars_per_row);
@@ -528,12 +538,7 @@ main(int argc, char *argv[])
 			verbose = 1;
 			break;
 		case 'w':
-			val = atoi(optarg);
-			if (val <= 0 || val > 128) {
-				errx(1, "Invalid width %d", val);
-				return (1);
-			}
-			width = val;
+			set_width(atoi(optarg));
 			break;
 		case '?':
 		default:


More information about the svn-src-head mailing list