- Emchar* decoding_table;
-
- if ((decoding_table = XCHARSET_DECODING_TABLE (charset)) != NULL)
- return decoding_table[c1 - (XCHARSET_CHARS (charset) == 94 ? 33 : 32)];
+ Lisp_Object decoding_table = XCHARSET_DECODING_TABLE (charset);
+ int idx;
+ Lisp_Object ch;
+
+ if (!EQ (decoding_table, Qnil)
+ && (0 <= (idx = c1 - (XCHARSET_CHARS (charset) == 94 ? 33 : 32)))
+ && (idx < XVECTOR_LENGTH (decoding_table))
+ && !EQ (ch = XVECTOR_DATA(decoding_table)[idx], Qnil))
+ return XCHAR (ch);