svn commit: r267324 - head/tools/tools/vt/fontcvt

Ed Maste emaste at FreeBSD.org
Tue Jun 10 12:59:57 UTC 2014


Author: emaste
Date: Tue Jun 10 12:59:56 2014
New Revision: 267324
URL: http://svnweb.freebsd.org/changeset/base/267324

Log:
  vt fontcvt: handle failure writing output font

Modified:
  head/tools/tools/vt/fontcvt/fontcvt.c

Modified: head/tools/tools/vt/fontcvt/fontcvt.c
==============================================================================
--- head/tools/tools/vt/fontcvt/fontcvt.c	Tue Jun 10 09:36:10 2014	(r267323)
+++ head/tools/tools/vt/fontcvt/fontcvt.c	Tue Jun 10 12:59:56 2014	(r267324)
@@ -354,7 +354,7 @@ number_glyphs(void)
 			gl->g_index = idx++;
 }
 
-static void
+static int
 write_glyphs(FILE *fp)
 {
 	struct glyph *gl;
@@ -362,8 +362,10 @@ write_glyphs(FILE *fp)
 
 	for (i = 0; i < VFNT_MAPS; i++) {
 		TAILQ_FOREACH(gl, &glyphs[i], g_list)
-			fwrite(gl->g_data, wbytes * height, 1, fp);
+			if (fwrite(gl->g_data, wbytes * height, 1, fp) != 1)
+				return (1);
 	}
+	return (0);
 }
 
 static void
@@ -390,7 +392,7 @@ struct file_mapping {
 	uint16_t	length;
 } __packed;
 
-static void
+static int
 write_mappings(FILE *fp, unsigned int map_idx)
 {
 	struct mapping_list *ml = &maps[map_idx];
@@ -405,10 +407,12 @@ write_mappings(FILE *fp, unsigned int ma
 			fm.source = htobe32(mp->m_char);
 			fm.destination = htobe16(mp->m_glyph->g_index);
 			fm.length = htobe16(mp->m_length - 1);
-			fwrite(&fm, sizeof fm, 1, fp);
+			if (fwrite(&fm, sizeof fm, 1, fp) != 1)
+				return (1);
 		}
 	}
 	assert(i == j);
+	return (0);
 }
 
 struct file_header {
@@ -441,13 +445,19 @@ write_fnt(const char *filename)
 	fh.map_count[1] = htobe32(map_folded_count[1]);
 	fh.map_count[2] = htobe32(map_folded_count[2]);
 	fh.map_count[3] = htobe32(map_folded_count[3]);
-	fwrite(&fh, sizeof fh, 1, fp);
+	if (fwrite(&fh, sizeof fh, 1, fp) != 1) {
+		perror(filename);
+		return (1);
+	}
 	
-	write_glyphs(fp);
-	write_mappings(fp, VFNT_MAP_NORMAL);
-	write_mappings(fp, 1);
-	write_mappings(fp, VFNT_MAP_BOLD);
-	write_mappings(fp, 3);
+	if (write_glyphs(fp) != 0 ||
+	    write_mappings(fp, VFNT_MAP_NORMAL) != 0 ||
+	    write_mappings(fp, 1) != 0 ||
+	    write_mappings(fp, VFNT_MAP_BOLD) != 0 ||
+	    write_mappings(fp, 3) != 0) {
+		perror(filename);
+		return (1);
+	}
 
 	return (0);
 }


More information about the svn-src-head mailing list