From: Thomas Zimmermann Date: Mon, 9 Mar 2026 14:14:50 +0000 (+0100) Subject: lib/fonts: Read font size with font_data_size() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e2e000a0b22036a72474088d3399097ff47ace02;p=thirdparty%2Fkernel%2Flinux.git lib/fonts: Read font size with font_data_size() Add font_data_size() and update consoles to use it. Signed-off-by: Thomas Zimmermann Signed-off-by: Helge Deller --- diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index 857b85df360c0..00ace2940aa07 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c @@ -530,7 +530,7 @@ static int newport_set_font(int unit, const struct console_font *op, /* check if font is already used by other console */ for (i = 0; i < MAX_NR_CONSOLES; i++) { if (font_data[i] != FONT_DATA - && FNTSIZE(font_data[i]) == size + && font_data_size(font_data[i]) == size && !memcmp(font_data[i], new_data, size)) { kfree(new_data - FONT_EXTRA_WORDS * sizeof(int)); /* current font is the same as the new one */ diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 8d7840b9ebad9..fa8f3e4196de2 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -2053,7 +2053,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, struct fb_var_screeninfo var = info->var; int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh; - if (p->userfont && FNTSIZE(p->fontdata)) { + if (p->userfont && font_data_size(p->fontdata)) { unsigned int size = vc_font_size(&vc->vc_font); /* @@ -2063,7 +2063,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width, * charcount can change and cannot be used to determine the * font data allocated size. */ - if (!size || size > FNTSIZE(p->fontdata)) + if (!size || size > font_data_size(p->fontdata)) return -EINVAL; } @@ -2302,7 +2302,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne if (font->width <= 8) { j = vc->vc_font.height; - if (font->charcount * j > FNTSIZE(fontdata)) + if (font->charcount * j > font_data_size(fontdata)) return -EINVAL; for (i = 0; i < font->charcount; i++) { @@ -2313,7 +2313,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne } } else if (font->width <= 16) { j = vc->vc_font.height * 2; - if (font->charcount * j > FNTSIZE(fontdata)) + if (font->charcount * j > font_data_size(fontdata)) return -EINVAL; for (i = 0; i < font->charcount; i++) { @@ -2323,7 +2323,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne fontdata += j; } } else if (font->width <= 24) { - if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata)) + if (font->charcount * (vc->vc_font.height * sizeof(u32)) > font_data_size(fontdata)) return -EINVAL; for (i = 0; i < font->charcount; i++) { @@ -2338,7 +2338,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne } } else { j = vc->vc_font.height * 4; - if (font->charcount * j > FNTSIZE(fontdata)) + if (font->charcount * j > font_data_size(fontdata)) return -EINVAL; for (i = 0; i < font->charcount; i++) { @@ -2553,7 +2553,7 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font, if (fb_display[i].userfont && fb_display[i].fontdata && FNTSUM(fb_display[i].fontdata) == csum && - FNTSIZE(fb_display[i].fontdata) == size && + font_data_size(fb_display[i].fontdata) == size && tmp->vc_font.width == w && !memcmp(fb_display[i].fontdata, new_data, size)) { kfree(new_data - FONT_EXTRA_WORDS * sizeof(int)); diff --git a/include/linux/font.h b/include/linux/font.h index 746a0996a018b..5b8557813c5c7 100644 --- a/include/linux/font.h +++ b/include/linux/font.h @@ -54,6 +54,8 @@ static inline const unsigned char *font_data_buf(font_data_t *fd) return (const unsigned char *)fd; } +unsigned int font_data_size(font_data_t *fd); + /* * Font description */ diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c index a7f118b301719..8c9a6762061cb 100644 --- a/lib/fonts/fonts.c +++ b/lib/fonts/fonts.c @@ -20,6 +20,27 @@ #endif #include +/* + * Helpers for font_data_t + */ + +/** + * font_data_size - Return size of the font data in bytes + * @fd: Font data + * + * Returns: + * The number of bytes in the given font data. + */ +unsigned int font_data_size(font_data_t *fd) +{ + return FNTSIZE(fd); +} +EXPORT_SYMBOL_GPL(font_data_size); + +/* + * Font lookup + */ + static const struct font_desc *fonts[] = { #ifdef CONFIG_FONT_8x8 &font_vga_8x8,