- msg = xrealloc(msg, applet_len + used + strerr_len + msgeol_len + 3);
- /* TODO: maybe use writev instead of memmoving? Need full_writev? */
- memmove(msg + applet_len, msg, used);
- used += applet_len;
- strcpy(msg, applet_name);
- msg[applet_len - 2] = ':';
- msg[applet_len - 1] = ' ';
- if (strerr) {
- if (s[0]) { /* not perror_nomsg? */
- msg[used++] = ':';
- msg[used++] = ' ';
+ msg1 = realloc(msg, applet_len + used + strerr_len + msgeol_len + 3);
+ if (!msg1) {
+ msg[used++] = '\n'; /* overwrites NUL */
+ applet_len = 0;
+ } else {
+ msg = msg1;
+ /* TODO: maybe use writev instead of memmoving? Need full_writev? */
+ memmove(msg + applet_len, msg, used);
+ used += applet_len;
+ strcpy(msg, applet_name);
+ msg[applet_len - 2] = ':';
+ msg[applet_len - 1] = ' ';
+ if (strerr) {
+ if (s[0]) { /* not perror_nomsg? */
+ msg[used++] = ':';
+ msg[used++] = ' ';
+ }
+ strcpy(&msg[used], strerr);
+ used += strerr_len;