/trunk/uspace/libc/generic/io/vprintf.c |
---|
36,10 → 36,7 |
#include <stdio.h> |
#include <unistd.h> |
#include <io/printf_core.h> |
#include <futex.h> |
atomic_t printf_futex = FUTEX_INITIALIZER; |
static int vprintf_write(const char *str, size_t count, void *unused) |
{ |
return write(1, str, count); |
54,9 → 51,7 |
{ |
struct printf_spec ps = {(int(*)(void *, size_t, void *)) vprintf_write, NULL}; |
futex_down(&printf_futex); |
int ret = printf_core(fmt, &ps, ap); |
futex_up(&printf_futex); |
return ret; |
} |
/trunk/uspace/libc/generic/io/printf_core.c |
---|
40,6 → 40,7 |
#include <io/printf_core.h> |
#include <ctype.h> |
#include <string.h> |
#include <async.h> /* for pseudo thread serialization */ |
#define __PRINTF_FLAG_PREFIX 0x00000001 /**< show prefixes 0x or 0*/ |
#define __PRINTF_FLAG_SIGNED 0x00000002 /**< signed / unsigned number */ |
443,6 → 444,9 |
int width, precision; |
uint64_t flags; |
/* Don't let other pseudo threads interfere. */ |
async_serialize_start(); |
counter = 0; |
while ((c = fmt[i])) { |
674,8 → 678,10 |
counter += retval; |
} |
async_serialize_end(); |
return counter; |
minus_out: |
async_serialize_end(); |
return -counter; |
} |