-malloc_printf(const char *format, ...) {
- va_list args;
- char buf[1024];
- char *head = buf;
- char ch;
- unsigned *nums;
- va_start(args, format);
-#if LOG_THREAD
- head = _malloc_append_unsigned(((unsigned)&args) >> 12, 16, head);
- *head++ = ' ';
-#endif
- nums = (void *)args;
- while (ch = *format++) {
- if (ch == '%') {
- ch = *format++;
- if (ch == 's') {
- char *str = (char *)(*nums++);
- write(logfd, buf, head - buf);
- head = buf;
- write(logfd, str, strlen(str));
- } else if (ch == 'y') {
- unsigned num = *nums++;
- if (num == 0) {
- *head++ = '0';
- } else if (num >= 10 * 1024 *1024) {
- // use a round number of MB
- head = _malloc_append_unsigned(num >> 20, 10, head);
- *head++ = 'M'; *head++ = 'B';
- } else if (num >= 10 * 1024) {
- // use a round amount of KB
- head = _malloc_append_unsigned(num >> 10, 10, head);
- *head++ = 'K'; *head++ = 'B';
- } else {
- head = _malloc_append_unsigned(num, 10, head);
- *head++ = 'b';
- }
- } else {
- if (ch == 'p') {
- *head++ = '0'; *head++ = 'x';
- }
- head = _malloc_append_unsigned(*nums++, (ch == 'd') ? 10 : 16, head);
- }
- } else {
- *head++ = ch;
- }
+malloc_printf(const char *format, ...)
+{
+ va_list ap;
+
+ if (__is_threaded) {
+ /* XXX somewhat rude 'knowing' that pthread_t is a pointer */
+ _simple_dprintf(malloc_debug_file, "%s(%d,%p) malloc: ", getprogname(), getpid(), (void *)pthread_self());
+ } else {
+ _simple_dprintf(malloc_debug_file, "%s(%d) malloc: ", getprogname(), getpid());