summaryrefslogtreecommitdiffstats
path: root/usr.sbin/vidcontrol
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2017-02-10 15:02:56 +0000
committeremaste <emaste@FreeBSD.org>2017-02-10 15:02:56 +0000
commit24a80a3173e1990c42b9f5db56d2736189decc2f (patch)
tree9db34808a5d7ad26082ddf0edb8b8695ccac48b2 /usr.sbin/vidcontrol
parent8d28fda3179b76e391004630320795f788da145e (diff)
downloadFreeBSD-src-24a80a3173e1990c42b9f5db56d2736189decc2f.zip
FreeBSD-src-24a80a3173e1990c42b9f5db56d2736189decc2f.tar.gz
MFC r308312: vidcontrol: improve error handling in vt(4) font loading
PR: 209078
Diffstat (limited to 'usr.sbin/vidcontrol')
-rw-r--r--usr.sbin/vidcontrol/vidcontrol.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/usr.sbin/vidcontrol/vidcontrol.c b/usr.sbin/vidcontrol/vidcontrol.c
index e1981f3..5933dcd 100644
--- a/usr.sbin/vidcontrol/vidcontrol.c
+++ b/usr.sbin/vidcontrol/vidcontrol.c
@@ -393,11 +393,15 @@ load_vt4mappingtable(unsigned int nmappings, FILE *f)
if (nmappings == 0)
return (NULL);
- t = malloc(sizeof *t * nmappings);
+ if ((t = malloc(sizeof *t * nmappings)) == NULL) {
+ warn("malloc");
+ return (NULL);
+ }
if (fread(t, sizeof *t * nmappings, 1, f) != 1) {
- perror("mappings");
- exit(1);
+ warn("read mappings");
+ free(t);
+ return (NULL);
}
for (i = 0; i < nmappings; i++) {
@@ -422,7 +426,7 @@ load_default_vt4font(void)
}
}
-static int
+static void
load_vt4font(FILE *f)
{
struct vt4font_header fh;
@@ -431,13 +435,13 @@ load_vt4font(FILE *f)
unsigned int i;
if (fread(&fh, sizeof fh, 1, f) != 1) {
- perror("file_header");
- return (1);
+ warn("read file_header");
+ return;
}
if (memcmp(fh.magic, "VFNT0002", 8) != 0) {
- fprintf(stderr, "Bad magic\n");
- return (1);
+ warnx("bad magic in font file\n");
+ return;
}
for (i = 0; i < VFNT_MAPS; i++)
@@ -447,21 +451,26 @@ load_vt4font(FILE *f)
vfnt.height = fh.height;
glyphsize = howmany(vfnt.width, 8) * vfnt.height * vfnt.glyph_count;
- vfnt.glyphs = malloc(glyphsize);
+ if ((vfnt.glyphs = malloc(glyphsize)) == NULL) {
+ warn("malloc");
+ return;
+ }
if (fread(vfnt.glyphs, glyphsize, 1, f) != 1) {
- perror("glyphs");
- return (1);
+ warn("read glyphs");
+ free(vfnt.glyphs);
+ return;
}
for (i = 0; i < VFNT_MAPS; i++)
vfnt.map[i] = load_vt4mappingtable(vfnt.map_count[i], f);
- if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1) {
- perror("PIO_VFONT");
- return (1);
- }
- return (0);
+ if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1)
+ warn("PIO_VFONT");
+
+ for (i = 0; i < VFNT_MAPS; i++)
+ free(vfnt.map[i]);
+ free(vfnt.glyphs);
}
/*
@@ -511,8 +520,7 @@ load_font(const char *type, const char *filename)
}
if (vt4_mode) {
- if(load_vt4font(fd))
- warn("failed to load font \"%s\"", filename);
+ load_vt4font(fd);
fclose(fd);
return;
}
OpenPOWER on IntegriCloud