summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2010-02-14 05:00:41 +0000
committerTeruaki Kawashima <teru@rockbox.org>2010-02-14 05:00:41 +0000
commited21ab1c8c9b16ec62933313c3d36a93d9255f62 (patch)
tree10726c64521435bcd190d07df2afc54c09fb54cd /apps
parent59d13ccf682322a21062685d7f82e6a6a8f857f2 (diff)
downloadrockbox-ed21ab1c8c9b16ec62933313c3d36a93d9255f62.tar.gz
rockbox-ed21ab1c8c9b16ec62933313c3d36a93d9255f62.zip
keyboard: check length of the last line. avoid dividing by 0.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24643 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/recorder/keyboard.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c
index d6a76d7b08..060393c269 100644
--- a/apps/recorder/keyboard.c
+++ b/apps/recorder/keyboard.c
@@ -157,7 +157,7 @@ static const unsigned char morse_codes[] = {
157int load_kbd(unsigned char* filename) 157int load_kbd(unsigned char* filename)
158{ 158{
159 int fd, l; 159 int fd, l;
160 int i = 0, line_len, max_line_len; 160 int i, line_len, max_line_len;
161 unsigned char buf[4]; 161 unsigned char buf[4];
162 162
163 if (filename == NULL) 163 if (filename == NULL)
@@ -171,7 +171,8 @@ int load_kbd(unsigned char* filename)
171 return 1; 171 return 1;
172 172
173 line_len = 0; 173 line_len = 0;
174 max_line_len = 0; 174 max_line_len = 1;
175 i = 0;
175 while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE) 176 while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE)
176 { 177 {
177 /* check how many bytes to read for this character */ 178 /* check how many bytes to read for this character */
@@ -215,6 +216,9 @@ int load_kbd(unsigned char* filename)
215 close(fd); 216 close(fd);
216 kbd_loaded = true; 217 kbd_loaded = true;
217 218
219 if (max_line_len < line_len)
220 max_line_len = line_len;
221
218 FOR_NB_SCREENS(l) 222 FOR_NB_SCREENS(l)
219 { 223 {
220 struct keyboard_parameters *pm = &kbd_param[l]; 224 struct keyboard_parameters *pm = &kbd_param[l];
@@ -948,6 +952,8 @@ static void kbd_calc_params(struct keyboard_parameters *pm,
948 i++; 952 i++;
949 } 953 }
950 } 954 }
955 if (pm->nchars == 0)
956 pm->kbd_buf[pm->nchars++] = ' ';
951 957
952 /* calculate pm->pages and pm->lines */ 958 /* calculate pm->pages and pm->lines */
953 sc_h = sc->getheight(); 959 sc_h = sc->getheight();