Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2316 → Rev 2229

/trunk/uspace/libc/generic/io/vprintf.c
36,11 → 36,7
#include <stdio.h>
#include <unistd.h>
#include <io/printf_core.h>
#include <futex.h>
#include <async.h>
 
static atomic_t printf_futex = FUTEX_INITIALIZER;
 
static int vprintf_write(const char *str, size_t count, void *unused)
{
return write(1, str, count);
53,22 → 49,10
*/
int vprintf(const char *fmt, va_list ap)
{
struct printf_spec ps = {
(int (*)(void *, size_t, void *)) vprintf_write,
NULL
};
/*
* Prevent other threads to execute printf_core()
*/
futex_down(&printf_futex);
/*
* Prevent other pseudo threads of the same thread
* to execute printf_core()
*/
async_serialize_start();
struct printf_spec ps = {(int(*)(void *, size_t, void *)) vprintf_write, NULL};
int ret = printf_core(fmt, &ps, ap);
async_serialize_end();
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;
}