aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schwab2010-08-15 11:30:06 +0200
committerAndreas Schwab2010-08-15 11:30:06 +0200
commit603dfc72ef70256c13ce0bb87246e741e17d55c6 (patch)
tree61c9f4403cc3d76c64d85b575965008d2b538652
parentc25ce9d017f6f82ae27256039d313601735dd998 (diff)
downloademacs-603dfc72ef70256c13ce0bb87246e741e17d55c6.tar.gz
emacs-603dfc72ef70256c13ce0bb87246e741e17d55c6.zip
* keyboard.c (parse_tool_bar_item): Avoid excessive use of strlen.
-rw-r--r--src/ChangeLog4
-rw-r--r--src/keyboard.c31
2 files changed, 19 insertions, 16 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 316487359cb..fc3d815ad49 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
12010-08-15 Andreas Schwab <schwab@linux-m68k.org>
2
3 * keyboard.c (parse_tool_bar_item): Avoid excessive use of strlen.
4
12010-08-15 Jan Djärv <jan.h.d@swipnet.se> 52010-08-15 Jan Djärv <jan.h.d@swipnet.se>
2 6
3 * keyboard.c (parse_tool_bar_item): malloc buf. Set TOOL_BAR_ITEM_LABEL 7 * keyboard.c (parse_tool_bar_item): malloc buf. Set TOOL_BAR_ITEM_LABEL
diff --git a/src/keyboard.c b/src/keyboard.c
index 8691788f418..6493fa5f9fd 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -8328,35 +8328,34 @@ parse_tool_bar_item (Lisp_Object key, Lisp_Object item)
8328 Lisp_Object capt = PROP (TOOL_BAR_ITEM_CAPTION); 8328 Lisp_Object capt = PROP (TOOL_BAR_ITEM_CAPTION);
8329 const char *label = SYMBOLP (key) ? (char *) SDATA (SYMBOL_NAME (key)) : ""; 8329 const char *label = SYMBOLP (key) ? (char *) SDATA (SYMBOL_NAME (key)) : "";
8330 const char *caption = STRINGP (capt) ? (char *) SDATA (capt) : ""; 8330 const char *caption = STRINGP (capt) ? (char *) SDATA (capt) : "";
8331 EMACS_INT max_lbl = 2*tool_bar_max_label_size; 8331 EMACS_INT max_lbl = 2 * tool_bar_max_label_size;
8332 char *buf = (char *) xmalloc (max_lbl+1); 8332 char *buf = (char *) xmalloc (max_lbl + 1);
8333 Lisp_Object new_lbl; 8333 Lisp_Object new_lbl;
8334 size_t caption_len = strlen (caption);
8334 8335
8335 if (strlen (caption) < max_lbl && caption[0] != '\0') 8336 if (caption_len <= max_lbl && caption[0] != '\0')
8336 { 8337 {
8337 strcpy (buf, caption); 8338 strcpy (buf, caption);
8338 while (buf[0] != '\0' && buf[strlen (buf) -1] == '.') 8339 while (caption_len > 0 && buf[caption_len - 1] == '.')
8339 buf[strlen (buf)-1] = '\0'; 8340 caption_len--;
8340 if (strlen (buf) <= max_lbl) 8341 buf[caption_len] = '\0';
8341 caption = buf; 8342 label = caption = buf;
8342 } 8343 }
8343 8344
8344 if (strlen (caption) <= max_lbl)
8345 label = caption;
8346
8347 if (strlen (label) <= max_lbl && label[0] != '\0') 8345 if (strlen (label) <= max_lbl && label[0] != '\0')
8348 { 8346 {
8349 int i; 8347 int i;
8350 if (label != buf) strcpy (buf, label); 8348 if (label != buf)
8349 strcpy (buf, label);
8351 8350
8352 for (i = 0; i < strlen (buf); ++i) 8351 for (i = 0; buf[i] != '\0'; ++i)
8353 { 8352 if (buf[i] == '-')
8354 if (buf[i] == '-') buf[i] = ' '; 8353 buf[i] = ' ';
8355 }
8356 label = buf; 8354 label = buf;
8357 8355
8358 } 8356 }
8359 else label = ""; 8357 else
8358 label = "";
8360 8359
8361 new_lbl = Fupcase_initials (make_string (label, strlen (label))); 8360 new_lbl = Fupcase_initials (make_string (label, strlen (label)));
8362 if (SCHARS (new_lbl) <= tool_bar_max_label_size) 8361 if (SCHARS (new_lbl) <= tool_bar_max_label_size)