diff options
author | Jiri Slaby | 2022-06-07 12:49:41 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2022-06-10 13:37:03 +0200 |
commit | 9ec9b79a2b9b44c33510156906a6e7c0cef7047e (patch) | |
tree | 7cfa8b3e936519828a09846aa5d6fbc9b869566b /drivers | |
parent | 1a086f5d63ae3f9bfa85a6ddfc3c377315a56187 (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.c | 26 |
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; } /* |