esp_pm: fix formatting issues in esp_pm_dump_locks

- line was truncated because 64 characters were not sufficient
- length passed to snprintf should be full buffer length, not -1
- make the width of lock name field fixed
- fix alignment of lock type column
pull/4512/merge
Ivan Grokhotkov 2020-10-14 19:24:18 +02:00
rodzic 357a277603
commit 30754918ee
1 zmienionych plików z 6 dodań i 6 usunięć

Wyświetl plik

@ -173,19 +173,19 @@ esp_err_t esp_pm_dump_locks(FILE* stream)
fprintf(stream, "Lock stats:\n"); fprintf(stream, "Lock stats:\n");
esp_pm_lock_t* it; esp_pm_lock_t* it;
char line[64]; char line[80];
SLIST_FOREACH(it, &s_list, next) { SLIST_FOREACH(it, &s_list, next) {
char *buf = line; char *buf = line;
size_t len = sizeof(line) - 1; size_t len = sizeof(line);
line[len] = 0;
size_t cb; size_t cb;
portENTER_CRITICAL(&it->spinlock); portENTER_CRITICAL(&it->spinlock);
if (it->name == NULL) { if (it->name == NULL) {
cb = snprintf(buf, len, "lock@%p ", it); cb = snprintf(buf, len, "lock@%p ", it);
} else { } else {
cb = snprintf(buf, len, "%-15s ", it->name); cb = snprintf(buf, len, "%-15.15s ", it->name);
} }
assert(cb <= len); // above formats should fit into sizeof(line)
buf += cb; buf += cb;
len -= cb; len -= cb;
#ifdef WITH_PROFILING #ifdef WITH_PROFILING
@ -193,12 +193,12 @@ esp_err_t esp_pm_dump_locks(FILE* stream)
if (it->count > 0) { if (it->count > 0) {
time_held += cur_time - it->last_taken; time_held += cur_time - it->last_taken;
} }
snprintf(buf, len, "%10s %3d %3d %9d %9lld %3lld%%\n", snprintf(buf, len, "%14s %3d %3d %9d %12lld %3lld%%\n",
s_lock_type_names[it->type], it->arg, s_lock_type_names[it->type], it->arg,
it->count, it->times_taken, time_held, it->count, it->times_taken, time_held,
(time_held + cur_time_d100 - 1) / cur_time_d100); (time_held + cur_time_d100 - 1) / cur_time_d100);
#else #else
snprintf(buf, len, "%10s %3d %3d\n", s_lock_type_names[it->type], it->arg, it->count); snprintf(buf, len, "%14s %3d %3d\n", s_lock_type_names[it->type], it->arg, it->count);
#endif // WITH_PROFILING #endif // WITH_PROFILING
portEXIT_CRITICAL(&it->spinlock); portEXIT_CRITICAL(&it->spinlock);
fputs(line, stream); fputs(line, stream);