mirror of https://github.com/flysand7/ciabatta.git
Add write lock to printf
This commit is contained in:
parent
4917b05771
commit
5453813e39
1
cia.c
1
cia.c
|
@ -30,6 +30,7 @@
|
|||
#include "src/stdlib-thread/thread.c"
|
||||
|
||||
// Module stdlib_file
|
||||
#include "src/stdlib-file/common.c"
|
||||
#include "src/stdlib-file/file.c"
|
||||
#include "src/stdlib-file/fmt.c"
|
||||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
FILE *stdin;
|
||||
FILE *stdout;
|
||||
FILE *stderr;
|
||||
|
||||
static Cia_Pool _page_allocator;
|
||||
static Cia_Pool _file_pool;
|
||||
static Cia_Mutex _g_pool_mutex;
|
|
@ -1,12 +1,4 @@
|
|||
|
||||
FILE *stdin;
|
||||
FILE *stdout;
|
||||
FILE *stderr;
|
||||
|
||||
static Cia_Pool _page_allocator;
|
||||
static Cia_Pool _file_pool;
|
||||
static Cia_Mutex _g_pool_mutex;
|
||||
|
||||
static void _fileapi_init() {
|
||||
cia_pool_create(&_file_pool, cia_allocator_pages(), 0x1000, sizeof(FILE), 16);
|
||||
stdin = cia_pool_alloc(&_file_pool);
|
||||
|
|
|
@ -82,6 +82,7 @@ int printf(const char *restrict fmt, ...) {
|
|||
i64 buf_start_idx = 0;
|
||||
i64 buf_end_idx = 0;
|
||||
u64 unused;
|
||||
cia_mutex_lock(&stdout->mutex);
|
||||
for(i64 i = 0; fmt[i] != 0;) {
|
||||
buf_start_idx = i;
|
||||
buf_end_idx = i;
|
||||
|
@ -98,7 +99,7 @@ int printf(const char *restrict fmt, ...) {
|
|||
, &unused
|
||||
);
|
||||
if(status != _RT_STATUS_OK) {
|
||||
return -1;
|
||||
goto _error;
|
||||
}
|
||||
ret_printed += buf_size;
|
||||
}
|
||||
|
@ -129,16 +130,21 @@ int printf(const char *restrict fmt, ...) {
|
|||
int ch = va_arg(args, int);
|
||||
_RT_Status status = _rt_file_write(&stdout->rt_file, 1, &ch, &unused);
|
||||
if(status != _RT_STATUS_OK) {
|
||||
return -1;
|
||||
goto _error;
|
||||
}
|
||||
arg_chars = 1;
|
||||
}
|
||||
i += 1;
|
||||
if(arg_chars < 0) {
|
||||
return -1;
|
||||
goto _error;
|
||||
}
|
||||
ret_printed += arg_chars;
|
||||
}
|
||||
cia_mutex_unlock(&stdout->mutex);
|
||||
va_end(args);
|
||||
return ret_printed;
|
||||
_error:
|
||||
cia_mutex_unlock(&stdout->mutex);
|
||||
va_end(args);
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue