/* We sometimes print in the tracing path, and tracing can occur in
* signal handlers, so we must use a print method which is signal safe.
*/
/* We sometimes print in the tracing path, and tracing can occur in
* signal handlers, so we must use a print method which is signal safe.
*/
-
-extern int ust_safe_snprintf(char *str, size_t n, const char *fmt, ...)
- __attribute__ ((format (printf, 3, 4)));
-
/* Can't use dynamic allocation. Limit ourselves to USTERR_MAX_LEN chars. */
/* Add end of string in case of buffer overflow. */
#define sigsafe_print_err(fmt, args...) \
/* Can't use dynamic allocation. Limit ourselves to USTERR_MAX_LEN chars. */
/* Add end of string in case of buffer overflow. */
#define sigsafe_print_err(fmt, args...) \
____saved_errno = errno; /* signal-safety */ \
ust_safe_snprintf(____buf, sizeof(____buf), fmt, ## args); \
____buf[sizeof(____buf) - 1] = 0; \
____saved_errno = errno; /* signal-safety */ \
ust_safe_snprintf(____buf, sizeof(____buf), fmt, ## args); \
____buf[sizeof(____buf) - 1] = 0; \