summaryrefslogtreecommitdiff
path: root/riscos/wimp.c
diff options
context:
space:
mode:
Diffstat (limited to 'riscos/wimp.c')
-rw-r--r--riscos/wimp.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/riscos/wimp.c b/riscos/wimp.c
index da87cbd8a..baa9d1fa0 100644
--- a/riscos/wimp.c
+++ b/riscos/wimp.c
@@ -106,28 +106,34 @@ char *ro_gui_get_icon_string(wimp_w w, wimp_i i) {
* \param text string (copied)
*/
void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
- wimp_caret caret;
+ wimp_caret caret;
wimp_icon_state ic;
int old_len, len;
-
+
/* Get the icon data
*/
ic.w = w;
ic.i = i;
- if (xwimp_get_icon_state(&ic)) return;
-
+ if (xwimp_get_icon_state(&ic))
+ return;
+
/* Check that the existing text is not the same as the updated text
to stop flicker
*/
- if (!strncmp(ic.icon.data.indirected_text.text, text,
- (unsigned int)ic.icon.data.indirected_text.size)) return;
-
+ if (ic.icon.data.indirected_text.size
+ && !strncmp(ic.icon.data.indirected_text.text, text,
+ (unsigned int)ic.icon.data.indirected_text.size - 1))
+ return;
+
/* Copy the text across
*/
old_len = strlen(ic.icon.data.indirected_text.text);
- strncpy(ic.icon.data.indirected_text.text, text,
- (unsigned int)ic.icon.data.indirected_text.size);
-
+ if (ic.icon.data.indirected_text.size) {
+ strncpy(ic.icon.data.indirected_text.text, text,
+ (unsigned int)ic.icon.data.indirected_text.size - 1);
+ ic.icon.data.indirected_text.text[ic.icon.data.indirected_text.size - 1] = '\0';
+ }
+
/* Handle the caret being in the icon
*/
if (!xwimp_get_caret_position(&caret)) {
@@ -137,7 +143,7 @@ void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
xwimp_set_caret_position(w, i, caret.pos.x, caret.pos.y, -1, caret.index);
}
}
-
+
/* Redraw the icon
*/
ro_gui_redraw_icon(w, i);