diff options
author | emaste <emaste@FreeBSD.org> | 2014-06-10 12:59:56 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2014-06-10 12:59:56 +0000 |
commit | bfeb0432500456729d8b8057d3268cfd1177507e (patch) | |
tree | b3305737f5977374bc3e892740cb462d85d9564b /tools | |
parent | 0a5ab649fa361cd564e01adcf2415f9351ed4a18 (diff) | |
download | FreeBSD-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.c | 30 |
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); } |