aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJiri Slaby2022-06-07 12:49:41 +0200
committerGreg Kroah-Hartman2022-06-10 13:37:03 +0200
commit9ec9b79a2b9b44c33510156906a6e7c0cef7047e (patch)
tree7cfa8b3e936519828a09846aa5d6fbc9b869566b /drivers
parent1a086f5d63ae3f9bfa85a6ddfc3c377315a56187 (diff)
tty/vt: consolemap: make conv_uni_to_pc() more readable
1) Fetch *conp->vc_uni_pagedir_loc first and do the NULL check on the local variable. 2) Decouple the large "if" into few smaller "if"s. 3) Remove a \n from the definition line. This makes the code more readable. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20220607104946.18710-31-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/tty/vt/consolemap.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/tty/vt/consolemap.c b/drivers/tty/vt/consolemap.c
index 8abf114b6c68..a9b497ffb346 100644
--- a/drivers/tty/vt/consolemap.c
+++ b/drivers/tty/vt/consolemap.c
@@ -849,8 +849,7 @@ int conv_uni_to_8bit(u32 uni)
return -1;
}
-int
-conv_uni_to_pc(struct vc_data *conp, long ucs)
+int conv_uni_to_pc(struct vc_data *conp, long ucs)
{
struct uni_pagedict *dict;
u16 **dir, *row, glyph;
@@ -869,17 +868,24 @@ conv_uni_to_pc(struct vc_data *conp, long ucs)
*/
else if ((ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE)
return ucs & UNI_DIRECT_MASK;
-
- if (!*conp->vc_uni_pagedir_loc)
- return -3;
dict = *conp->vc_uni_pagedir_loc;
- if ((dir = dict->uni_pgdir[UNI_DIR(ucs)]) &&
- (row = dir[UNI_ROW(ucs)]) &&
- (glyph = row[UNI_GLYPH(ucs)]) < MAX_GLYPH)
- return glyph;
+ if (!dict)
+ return -3;
+
+ dir = dict->uni_pgdir[UNI_DIR(ucs)];
+ if (!dir)
+ return -4;
+
+ row = dir[UNI_ROW(ucs)];
+ if (!row)
+ return -4;
+
+ glyph = row[UNI_GLYPH(ucs)];
+ if (glyph >= MAX_GLYPH)
+ return -4;
- return -4; /* not found */
+ return glyph;
}
/*