Changeset 5e904dd in mainline
- Timestamp:
- 2018-07-03T17:40:51Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 76f566d
- Parents:
- d3b2ffa
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/console/console.c
rd3b2ffa r5e904dd 424 424 switch (cmd) { 425 425 case KIO_WRITE: 426 printf("%s", data); 426 printf("[%s(%lu)] %s\n", TASK->name, 427 (unsigned long) TASK->taskid, data); 427 428 break; 428 429 case KIO_COMMAND: -
uspace/lib/c/generic/io/kio.c
rd3b2ffa r5e904dd 42 42 #include <io/kio.h> 43 43 #include <io/printf_core.h> 44 #include <macros.h> 45 #include <libarch/config.h> 46 #include <futex.h> 47 48 #define KIO_BUFFER_SIZE PAGE_SIZE 49 50 static struct { 51 futex_t futex; 52 char data[KIO_BUFFER_SIZE]; 53 size_t used; 54 } kio_buffer = { .futex = FUTEX_INITIALIZER, }; 44 55 45 56 errno_t kio_write(const void *buf, size_t size, size_t *nwritten) 46 57 { 47 errno_t rc = (errno_t) __SYSCALL3(SYS_KIO, KIO_WRITE, (sysarg_t) buf, size);58 futex_lock(&kio_buffer.futex); 48 59 49 if (rc == EOK) 60 const char *s = buf; 61 while (true) { 62 const char *endl = memchr(s, '\n', size); 63 if (endl) { 64 size_t used = kio_buffer.used; 65 66 size_t sz = min(KIO_BUFFER_SIZE - used, (size_t) (endl - s)); 67 memcpy(&kio_buffer.data[used], s, sz); 68 69 __SYSCALL3(SYS_KIO, KIO_WRITE, 70 (sysarg_t) &kio_buffer.data[0], used + sz); 71 72 kio_buffer.used = 0; 73 size -= endl + 1 - s; 74 s = endl + 1; 75 } else { 76 size_t used = kio_buffer.used; 77 size_t sz = min(KIO_BUFFER_SIZE - used, size); 78 memcpy(&kio_buffer.data[used], s, sz); 79 kio_buffer.used += sz; 80 break; 81 } 82 } 83 84 futex_unlock(&kio_buffer.futex); 85 if (nwritten) 50 86 *nwritten = size; 51 return rc;87 return EOK; 52 88 } 53 89
Note:
See TracChangeset
for help on using the changeset viewer.