tty/vt: consolemap: make con_get_unimap() more readable

The indentation is completely broken in con_get_unimap(). Reorder the
code using "if (!cond) continue;"s so that the code makes sense. Switch
also the "p" assignment and add a short path using goto. This makes the
code readable again.

Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20220607104946.18710-14-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jiri Slaby 2022-06-07 12:49:24 +02:00 committed by Greg Kroah-Hartman
parent 6e4e8d7466
commit 6364d39136

View File

@ -768,7 +768,8 @@ EXPORT_SYMBOL(con_copy_unimap);
* Read the console unicode data for this console. Called from the ioctl
* handlers.
*/
int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct unipair __user *list)
int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct,
struct unipair __user *list)
{
int i, j, k, ret = 0;
ushort ect;
@ -783,27 +784,32 @@ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct uni
console_lock();
ect = 0;
if (*vc->vc_uni_pagedir_loc) {
p = *vc->vc_uni_pagedir_loc;
for (i = 0; i < UNI_DIRS; i++) {
p = *vc->vc_uni_pagedir_loc;
if (!p)
goto unlock;
for (i = 0; i < UNI_DIRS; i++) {
p1 = p->uni_pgdir[i];
if (p1)
for (j = 0; j < UNI_DIR_ROWS; j++) {
if (!p1)
continue;
for (j = 0; j < UNI_DIR_ROWS; j++) {
p2 = *(p1++);
if (p2)
for (k = 0; k < UNI_ROW_GLYPHS; k++, p2++) {
if (*p2 >= MAX_GLYPH)
continue;
if (ect < ct) {
unilist[ect].unicode =
UNI(i, j, k);
unilist[ect].fontpos = *p2;
}
ect++;
if (!p2)
continue;
for (k = 0; k < UNI_ROW_GLYPHS; k++, p2++) {
if (*p2 >= MAX_GLYPH)
continue;
if (ect < ct) {
unilist[ect].unicode = UNI(i, j, k);
unilist[ect].fontpos = *p2;
}
ect++;
}
}
}
unlock:
console_unlock();
if (copy_to_user(list, unilist, min(ect, ct) * sizeof(*unilist)))
ret = -EFAULT;