battery: Do not redefine strncat with different semantics

This commit is contained in:
o9000 2017-06-20 16:18:28 +02:00
parent f9ad3cb029
commit b5578ff5bc

View file

@ -128,7 +128,8 @@ void cleanup_battery()
battery_os_free(); battery_os_free();
} }
char *strncat(char *dest, const char *addendum, size_t limit) // Appends addendum to dest, and does not allow dest to grow over limit (including NULL terminator).
char *strnappend(char *dest, const char *addendum, size_t limit)
{ {
char *tmp = strdup(dest); char *tmp = strdup(dest);
@ -164,7 +165,7 @@ void battery_update_text(char *dest, char *format)
switch (*c) { switch (*c) {
case 's': case 's':
// Append the appropriate status message to the string. // Append the appropriate status message to the string.
strncat(dest, strnappend(dest,
(battery_state.state == BATTERY_CHARGING) (battery_state.state == BATTERY_CHARGING)
? "Charging" ? "Charging"
: (battery_state.state == BATTERY_DISCHARGING) : (battery_state.state == BATTERY_DISCHARGING)
@ -174,38 +175,38 @@ void battery_update_text(char *dest, char *format)
break; break;
case 'm': case 'm':
snprintf(buf, sizeof(buf), "%02d", battery_state.time.minutes); snprintf(buf, sizeof(buf), "%02d", battery_state.time.minutes);
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
break; break;
case 'h': case 'h':
snprintf(buf, sizeof(buf), "%02d", battery_state.time.hours); snprintf(buf, sizeof(buf), "%02d", battery_state.time.hours);
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
break; break;
case 'p': case 'p':
snprintf(buf, sizeof(buf), "%d%%", battery_state.percentage); snprintf(buf, sizeof(buf), "%d%%", battery_state.percentage);
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
break; break;
case 't': case 't':
if (battery_state.state == BATTERY_FULL) { if (battery_state.state == BATTERY_FULL) {
snprintf(buf, sizeof(buf), "Full"); snprintf(buf, sizeof(buf), "Full");
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
} else { } else {
snprintf(buf, sizeof(buf), "%02d:%02d", battery_state.time.hours, battery_state.time.minutes); snprintf(buf, sizeof(buf), "%02d:%02d", battery_state.time.hours, battery_state.time.minutes);
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
} }
break; break;
case '%': case '%':
case '\0': case '\0':
strncat(dest, "%", BATTERY_BUF_SIZE); strnappend(dest, "%", BATTERY_BUF_SIZE);
break; break;
default: default:
fprintf(stderr, "Battery: unrecognised format specifier '%%%c'.\n", *c); fprintf(stderr, "Battery: unrecognised format specifier '%%%c'.\n", *c);
buf[0] = *c; buf[0] = *c;
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
} }
} else { } else {
buf[0] = *c; buf[0] = *c;
strncat(dest, buf, BATTERY_BUF_SIZE); strnappend(dest, buf, BATTERY_BUF_SIZE);
} }
} }
} }