- char *leaf = strrchr(base, '/'); \
- char *result = malloc(strlen(base) + 80); \
- if (result == NULL) { \
- static char unknown[] = "?"; \
- result = unknown; \
- } else { \
- if (leaf++ == NULL) leaf = base; \
- sprintf(result, "%.20s: ", leaf); \
- format_version(result + strlen(result)); \
+ char *part = strrchr(base, '/'); \
+ size_t need = strlen(base) + 80; \
+ char *result = malloc(need); \
+ if (result != NULL) { \
+ if (part++ == NULL) part = base; \
+ _nc_SPRINTF(result, _nc_SLIMIT(need) "%.20s: ", part); \
+ format_version(result + strlen(result), need - strlen(result)); \