fb: Explicitly handle errors when getting or setting a colour palette

In the VESA driver, simply ignore errors.  It is not clear to me how to
return them to userspace.

This is in preparation for annotating copyin() and related functions
with __result_use_check.

MFC after:	1 week
This commit is contained in:
Mark Johnston 2023-12-26 19:00:14 -05:00
parent b4a9e6d814
commit ddc8576d29
2 changed files with 23 additions and 15 deletions

View file

@ -1698,12 +1698,12 @@ get_palette(video_adapter_t *adp, int base, int count,
b = g + count;
error = vesa_bios_save_palette2(base, count, r, g, b, bits);
if (error == 0) {
copyout(r, red, count);
copyout(g, green, count);
copyout(b, blue, count);
(void)copyout(r, red, count);
(void)copyout(g, green, count);
(void)copyout(b, blue, count);
if (trans != NULL) {
bzero(r, count);
copyout(r, trans, count);
(void)copyout(r, trans, count);
}
}
free(r, M_DEVBUF);
@ -1729,12 +1729,12 @@ set_palette(video_adapter_t *adp, int base, int count,
return (1);
bits = (adp->va_flags & V_ADP_DAC8) != 0 ? 8 : 6;
r = malloc(count * 3, M_DEVBUF, M_WAITOK);
r = malloc(count * 3, M_DEVBUF, M_WAITOK | M_ZERO);
g = r + count;
b = g + count;
copyin(red, r, count);
copyin(green, g, count);
copyin(blue, b, count);
(void)copyin(red, r, count);
(void)copyin(green, g, count);
(void)copyin(blue, b, count);
error = vesa_bios_load_palette2(base, count, r, g, b, bits);
free(r, M_DEVBUF);

View file

@ -2854,6 +2854,7 @@ get_palette(video_adapter_t *adp, int base, int count,
u_char *r;
u_char *g;
u_char *b;
int error;
if (count < 0 || base < 0 || count > 256 || base > 256 ||
base + count > 256)
@ -2863,19 +2864,26 @@ get_palette(video_adapter_t *adp, int base, int count,
g = r + count;
b = g + count;
if (vga_save_palette2(adp, base, count, r, g, b)) {
free(r, M_DEVBUF);
return ENODEV;
error = ENODEV;
goto out;
}
copyout(r, red, count);
copyout(g, green, count);
copyout(b, blue, count);
error = copyout(r, red, count);
if (error != 0)
goto out;
error = copyout(g, green, count);
if (error != 0)
goto out;
error = copyout(b, blue, count);
if (error != 0)
goto out;
if (trans != NULL) {
bzero(r, count);
copyout(r, trans, count);
error = copyout(r, trans, count);
}
out:
free(r, M_DEVBUF);
return 0;
return error;
}
static int