summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2014-06-10 12:59:56 +0000
committeremaste <emaste@FreeBSD.org>2014-06-10 12:59:56 +0000
commitbfeb0432500456729d8b8057d3268cfd1177507e (patch)
treeb3305737f5977374bc3e892740cb462d85d9564b /tools
parent0a5ab649fa361cd564e01adcf2415f9351ed4a18 (diff)
downloadFreeBSD-src-bfeb0432500456729d8b8057d3268cfd1177507e.zip
FreeBSD-src-bfeb0432500456729d8b8057d3268cfd1177507e.tar.gz
vt fontcvt: handle failure writing output font
Diffstat (limited to 'tools')
-rw-r--r--tools/tools/vt/fontcvt/fontcvt.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/tools/tools/vt/fontcvt/fontcvt.c b/tools/tools/vt/fontcvt/fontcvt.c
index abe4ebc..5acad70 100644
--- a/tools/tools/vt/fontcvt/fontcvt.c
+++ b/tools/tools/vt/fontcvt/fontcvt.c
@@ -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 map_idx)
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);
}
OpenPOWER on IntegriCloud