Pranay Kr. Srivastava, on mar. 28 févr. 2017 13:57:53 +0530, wrote: > This patch makes spk_set_key_info return -EINVAL > in case of failure instead of returning 4 different > values for the type of error that occurred. > > Print the offending values instead as debug message. > > Signed-off-by: Pranay Kr. Srivastava <pranjas@xxxxxxxxx> Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > --- > drivers/staging/speakup/main.c | 27 +++++++++++++++++++-------- > 1 file changed, 19 insertions(+), 8 deletions(-) > > diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c > index c2f70ef..a1d5b66 100644 > --- a/drivers/staging/speakup/main.c > +++ b/drivers/staging/speakup/main.c > @@ -1216,13 +1216,19 @@ int spk_set_key_info(const u_char *key_info, u_char *k_buffer) > u_char ch, version, num_keys; > > version = *cp++; > - if (version != KEY_MAP_VER) > - return -1; > + if (version != KEY_MAP_VER) { > + pr_debug("version found %d should be %d\n", > + version, KEY_MAP_VER); > + return -EINVAL; > + } > num_keys = *cp; > states = (int)cp[1]; > key_data_len = (states + 1) * (num_keys + 1); > - if (key_data_len + SHIFT_TBL_SIZE + 4 >= sizeof(spk_key_buf)) > - return -2; > + if (key_data_len + SHIFT_TBL_SIZE + 4 >= sizeof(spk_key_buf)) { > + pr_debug("too many key_infos (%d over %u)\n", > + key_data_len + SHIFT_TBL_SIZE + 4, (unsigned int)(sizeof(spk_key_buf))); > + return -EINVAL; > + } > memset(k_buffer, 0, SHIFT_TBL_SIZE); > memset(spk_our_keys, 0, sizeof(spk_our_keys)); > spk_shift_table = k_buffer; > @@ -1233,14 +1239,19 @@ int spk_set_key_info(const u_char *key_info, u_char *k_buffer) > cp1 += 2; /* now pointing at shift states */ > for (i = 1; i <= states; i++) { > ch = *cp1++; > - if (ch >= SHIFT_TBL_SIZE) > - return -3; > + if (ch >= SHIFT_TBL_SIZE) { > + pr_debug("(%d) not valid shift state (max_allowed = %d)\n", ch, > + SHIFT_TBL_SIZE); > + return -EINVAL; > + } > spk_shift_table[ch] = i; > } > keymap_flags = *cp1++; > while ((ch = *cp1)) { > - if (ch >= MAX_KEY) > - return -4; > + if (ch >= MAX_KEY) { > + pr_debug("(%d), not valid key, (max_allowed = %d)\n", ch, MAX_KEY); > + return -EINVAL; > + } > spk_our_keys[ch] = cp1; > cp1 += states + 1; > } > -- > 2.10.2 > -- Samuel Progress (n.): The process through which the Internet has evolved from smart people in front of dumb terminals to dumb people in front of smart terminals. _______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup