Changeset 5828554 in mainline for uspace/lib/c
- Timestamp:
- 2014-01-19T14:37:22Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- cf982ff
- Parents:
- 2f591127 (diff), 476f62c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib/c
- Files:
-
- 32 added
- 4 deleted
- 17 edited
- 1 moved
-
Makefile (modified) (5 diffs)
-
arch/abs32le/include/libarch/atomic.h (modified) (2 diffs)
-
arch/amd64/_link.ld.in (modified) (1 diff)
-
arch/ia32/Makefile.inc (modified) (1 diff)
-
arch/sparc32/Makefile.common (added)
-
arch/sparc32/Makefile.inc (added)
-
arch/sparc32/_link.ld.in (added)
-
arch/sparc32/include/libarch/atomic.h (added)
-
arch/sparc32/include/libarch/barrier.h (added)
-
arch/sparc32/include/libarch/config.h (added)
-
arch/sparc32/include/libarch/context_offset.h (added)
-
arch/sparc32/include/libarch/ddi.h (added)
-
arch/sparc32/include/libarch/elf.h (added)
-
arch/sparc32/include/libarch/elf_linux.h (added)
-
arch/sparc32/include/libarch/faddr.h (added)
-
arch/sparc32/include/libarch/fibril.h (added)
-
arch/sparc32/include/libarch/inttypes.h (added)
-
arch/sparc32/include/libarch/istate.h (added)
-
arch/sparc32/include/libarch/stack.h (added)
-
arch/sparc32/include/libarch/stackarg.h (added)
-
arch/sparc32/include/libarch/syscall.h (added)
-
arch/sparc32/include/libarch/thread.h (added)
-
arch/sparc32/include/libarch/tls.h (added)
-
arch/sparc32/include/libarch/types.h (added)
-
arch/sparc32/src/entry.s (added)
-
arch/sparc32/src/entryjmp.s (added)
-
arch/sparc32/src/fibril.S (added)
-
arch/sparc32/src/stacktrace.c (added)
-
arch/sparc32/src/stacktrace_asm.S (moved) (moved from uspace/lib/c/arch/ia32/src/setjmp.S ) (2 diffs)
-
arch/sparc32/src/thread_entry.s (added)
-
arch/sparc32/src/tls.c (added)
-
generic/adt/checksum.c (added)
-
generic/assert.c (modified) (2 diffs)
-
generic/ddi.c (modified) (1 diff)
-
generic/device/ahci.c (deleted)
-
generic/device/char_dev.c (deleted)
-
generic/device/nic.c (deleted)
-
generic/device/pci.c (deleted)
-
generic/io/io.c (modified) (12 diffs)
-
generic/io/kio.c (added)
-
generic/io/klog.c (modified) (3 diffs)
-
generic/io/window.c (modified) (2 diffs)
-
generic/private/stdio.h (modified) (1 diff)
-
generic/setjmp.c (added)
-
include/adt/checksum.h (added)
-
include/bitops.h (modified) (1 diff)
-
include/ddi.h (modified) (1 diff)
-
include/io/kio.h (added)
-
include/io/klog.h (modified) (2 diffs)
-
include/io/log.h (modified) (1 diff)
-
include/io/window.h (modified) (4 diffs)
-
include/math.h (added)
-
include/setjmp.h (modified) (3 diffs)
-
include/stdio.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
r2f591127 r5828554 61 61 generic/bd.c \ 62 62 generic/bd_srv.c \ 63 generic/bitops.c \64 63 generic/cap.c \ 65 64 generic/cfg.c \ … … 70 69 generic/device/hw_res_parsed.c \ 71 70 generic/device/pio_window.c \ 72 generic/device/char_dev.c \73 71 generic/device/clock_dev.c \ 74 generic/device/battery_dev.c \75 generic/device/graph_dev.c \76 generic/device/nic.c \77 generic/device/pci.c \78 generic/device/ahci.c \79 72 generic/dhcp.c \ 80 73 generic/dnsr.c \ … … 108 101 generic/io/log.c \ 109 102 generic/io/logctl.c \ 103 generic/io/kio.c \ 110 104 generic/io/klog.c \ 111 105 generic/io/snprintf.c \ … … 129 123 generic/loader.c \ 130 124 generic/getopt.c \ 125 generic/adt/checksum.c \ 131 126 generic/adt/list.c \ 132 127 generic/adt/hash_table.c \ … … 143 138 generic/net/socket_client.c \ 144 139 generic/net/socket_parse.c \ 140 generic/setjmp.c \ 145 141 generic/stack.c \ 146 142 generic/stacktrace.c \ -
uspace/lib/c/arch/abs32le/include/libarch/atomic.h
r2f591127 r5828554 53 53 } 54 54 55 static inline void atomic_inc(atomic_t *val) { 55 static inline void atomic_inc(atomic_t *val) 56 { 56 57 /* On real hardware the increment has to be done 57 58 as an atomic action. */ … … 60 61 } 61 62 62 static inline void atomic_dec(atomic_t *val) { 63 static inline void atomic_dec(atomic_t *val) 64 { 63 65 /* On real hardware the decrement has to be done 64 66 as an atomic action. */ -
uspace/lib/c/arch/amd64/_link.ld.in
r2f591127 r5828554 39 39 .data : { 40 40 *(.data); 41 *(.data.rel*); 41 42 } :data 42 43 -
uspace/lib/c/arch/ia32/Makefile.inc
r2f591127 r5828554 34 34 arch/$(UARCH)/src/fibril.S \ 35 35 arch/$(UARCH)/src/tls.c \ 36 arch/$(UARCH)/src/setjmp.S \37 36 arch/$(UARCH)/src/stacktrace.c \ 38 37 arch/$(UARCH)/src/stacktrace_asm.S \ -
uspace/lib/c/arch/sparc32/src/stacktrace_asm.S
r2f591127 r5828554 1 1 # 2 # Copyright (c) 200 8 Josef Cejka2 # Copyright (c) 2009 Jakub Jermar 3 3 # All rights reserved. 4 4 # … … 27 27 # 28 28 29 #include <libarch/ context_offset.h>29 #include <libarch/stack.h> 30 30 31 31 .text 32 .global setjmp33 .global longjmp34 32 35 .type setjmp,@function 36 setjmp: 37 movl 0(%esp), %eax # save pc value into eax 38 movl 4(%esp), %edx # address of the jmp_buf structure to save context to 33 .global stacktrace_prepare 34 .global stacktrace_fp_get 35 .global stacktrace_pc_get 36 37 stacktrace_prepare: 38 save %sp, -(STACK_WINDOW_SAVE_AREA_SIZE+STACK_ARG_SAVE_AREA_SIZE), %sp 39 39 40 # save registers to the jmp_buf structure 41 CONTEXT_SAVE_ARCH_CORE %edx %eax 40 # Flush all other windows to memory so that we can read their contents. 42 41 43 xorl %eax, %eax # set_jmp returns 0 42 mov 7, %g1 43 1: 44 subcc %g1, 1, %g1 45 bg 1b 46 save %sp, -64, %sp 47 48 mov 7, %g1 49 1: 50 subcc %g1, 1, %g1 51 bg 1b 52 44 53 ret 54 restore 45 55 46 .type longjmp,@function 47 longjmp: 48 movl 4(%esp), %ecx # put address of jmp_buf into ecx 49 movl 8(%esp), %eax # put return value into eax 50 51 # restore registers from the jmp_buf structure 52 CONTEXT_RESTORE_ARCH_CORE %ecx %edx 53 54 movl %edx, 0(%esp) # put saved pc on stack 55 ret 56 stacktrace_fp_get: 57 # Add the stack bias to %sp to get the actual address. 58 retl 59 mov %sp, %o0 60 61 stacktrace_pc_get: 62 retl 63 mov %o7, %o0 -
uspace/lib/c/generic/assert.c
r2f591127 r5828554 33 33 #include <assert.h> 34 34 #include <stdio.h> 35 #include <io/k log.h>35 #include <io/kio.h> 36 36 #include <stdlib.h> 37 37 #include <atomic.h> … … 44 44 { 45 45 /* 46 * Send the message safely to k log. Nested asserts should not occur.46 * Send the message safely to kio. Nested asserts should not occur. 47 47 */ 48 k log_printf("Assertion failed (%s) in file \"%s\", line %u.\n",48 kio_printf("Assertion failed (%s) in file \"%s\", line %u.\n", 49 49 cond, file, line); 50 50 -
uspace/lib/c/generic/ddi.c
r2f591127 r5828554 280 280 * 281 281 */ 282 int irq_register(int inr, int devno, int method, irq_code_t *ucode)282 int irq_register(int inr, int devno, int method, const irq_code_t *ucode) 283 283 { 284 284 return __SYSCALL4(SYS_IRQ_REGISTER, inr, devno, method, -
uspace/lib/c/generic/io/io.c
r2f591127 r5828554 42 42 #include <malloc.h> 43 43 #include <async.h> 44 #include <io/k log.h>44 #include <io/kio.h> 45 45 #include <vfs/vfs.h> 46 46 #include <vfs/vfs_sess.h> … … 57 57 .error = true, 58 58 .eof = true, 59 .k log= false,59 .kio = false, 60 60 .sess = NULL, 61 61 .btype = _IONBF, … … 67 67 }; 68 68 69 static FILE stdout_k log= {69 static FILE stdout_kio = { 70 70 .fd = -1, 71 71 .error = false, 72 72 .eof = false, 73 .k log= true,73 .kio = true, 74 74 .sess = NULL, 75 75 .btype = _IOLBF, … … 81 81 }; 82 82 83 static FILE stderr_k log= {83 static FILE stderr_kio = { 84 84 .fd = -1, 85 85 .error = false, 86 86 .eof = false, 87 .k log= true,87 .kio = true, 88 88 .sess = NULL, 89 89 .btype = _IONBF, … … 113 113 stdout = fdopen(1, "w"); 114 114 } else { 115 stdout = &stdout_k log;115 stdout = &stdout_kio; 116 116 list_append(&stdout->link, &files); 117 117 } … … 120 120 stderr = fdopen(2, "w"); 121 121 } else { 122 stderr = &stderr_k log;122 stderr = &stderr_kio; 123 123 list_append(&stderr->link, &files); 124 124 } … … 267 267 stream->error = false; 268 268 stream->eof = false; 269 stream->k log= false;269 stream->kio = false; 270 270 stream->sess = NULL; 271 271 stream->need_sync = false; … … 289 289 stream->error = false; 290 290 stream->eof = false; 291 stream->k log= false;291 stream->kio = false; 292 292 stream->sess = NULL; 293 293 stream->need_sync = false; … … 314 314 315 315 if ((stream != &stdin_null) 316 && (stream != &stdout_k log)317 && (stream != &stderr_k log))316 && (stream != &stdout_kio) 317 && (stream != &stderr_kio)) 318 318 free(stream); 319 319 … … 382 382 ssize_t wr; 383 383 384 if (stream->k log)385 wr = k log_write(buf + done, left);384 if (stream->kio) 385 wr = kio_write(buf + done, left); 386 386 else 387 387 wr = write(stream->fd, buf + done, left); … … 705 705 _fflushbuf(stream); 706 706 707 if (stream->k log) {708 k log_update();707 if (stream->kio) { 708 kio_update(); 709 709 return EOK; 710 710 } … … 740 740 int fileno(FILE *stream) 741 741 { 742 if (stream->k log) {742 if (stream->kio) { 743 743 errno = EBADF; 744 744 return -1; -
uspace/lib/c/generic/io/klog.c
r2f591127 r5828554 1 1 /* 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2006 Jakub Vana 2 * Copyright (c) 2013 Martin Sucha 4 3 * All rights reserved. 5 4 * … … 41 40 #include <abi/klog.h> 42 41 #include <io/klog.h> 43 #include < io/printf_core.h>42 #include <abi/log.h> 44 43 45 size_t klog_write( const void *buf, size_t size)44 size_t klog_write(log_level_t lvl, const void *buf, size_t size) 46 45 { 47 ssize_t ret = (ssize_t) __SYSCALL3(SYS_KLOG, KLOG_WRITE, (sysarg_t) buf, size); 46 ssize_t ret = (ssize_t) __SYSCALL4(SYS_KLOG, KLOG_WRITE, (sysarg_t) buf, 47 size, lvl); 48 48 49 49 if (ret >= 0) … … 53 53 } 54 54 55 void klog_update(void)55 int klog_read(void *data, size_t size) 56 56 { 57 (void) __SYSCALL3(SYS_KLOG, KLOG_UPDATE, (uintptr_t) NULL, 0); 58 } 59 60 void klog_command(const void *buf, size_t size) 61 { 62 (void) __SYSCALL3(SYS_KLOG, KLOG_COMMAND, (sysarg_t) buf, (sysarg_t) size); 63 } 64 65 /** Print formatted text to klog. 66 * 67 * @param fmt Format string 68 * 69 * \see For more details about format string see printf_core. 70 * 71 */ 72 int klog_printf(const char *fmt, ...) 73 { 74 va_list args; 75 va_start(args, fmt); 76 77 int ret = klog_vprintf(fmt, args); 78 79 va_end(args); 80 81 return ret; 82 } 83 84 static int klog_vprintf_str_write(const char *str, size_t size, void *data) 85 { 86 size_t wr = klog_write(str, size); 87 return str_nlength(str, wr); 88 } 89 90 static int klog_vprintf_wstr_write(const wchar_t *str, size_t size, void *data) 91 { 92 size_t offset = 0; 93 size_t chars = 0; 94 95 while (offset < size) { 96 char buf[STR_BOUNDS(1)]; 97 size_t sz = 0; 98 99 if (chr_encode(str[chars], buf, &sz, STR_BOUNDS(1)) == EOK) 100 klog_write(buf, sz); 101 102 chars++; 103 offset += sizeof(wchar_t); 104 } 105 106 return chars; 107 } 108 109 /** Print formatted text to klog. 110 * 111 * @param fmt Format string 112 * @param ap Format parameters 113 * 114 * \see For more details about format string see printf_core. 115 * 116 */ 117 int klog_vprintf(const char *fmt, va_list ap) 118 { 119 printf_spec_t ps = { 120 klog_vprintf_str_write, 121 klog_vprintf_wstr_write, 122 NULL 123 }; 124 125 return printf_core(fmt, &ps, ap); 57 return (int) __SYSCALL4(SYS_KLOG, KLOG_READ, (uintptr_t) data, size, 0); 126 58 } 127 59 -
uspace/lib/c/generic/io/window.c
r2f591127 r5828554 40 40 #include <stdio.h> 41 41 42 int win_register(async_sess_t *sess, service_id_t *in, service_id_t *out, 43 sysarg_t x_offset, sysarg_t y_offset) 42 int win_register(async_sess_t *sess, service_id_t *in, service_id_t *out) 44 43 { 45 44 async_exch_t *exch = async_exchange_begin(sess); 46 int ret = async_req_ 2_2(exch, WINDOW_REGISTER, x_offset, y_offset, in, out);45 int ret = async_req_0_2(exch, WINDOW_REGISTER, in, out); 47 46 async_exchange_end(exch); 48 47 49 48 return ret; 50 49 } … … 92 91 } 93 92 94 int win_resize(async_sess_t *sess, sysarg_t width, sysarg_t height, void *cells) 93 int win_resize(async_sess_t *sess, sysarg_t x, sysarg_t y, sysarg_t width, 94 sysarg_t height, window_placement_flags_t placement_flags, void *cells) 95 95 { 96 96 async_exch_t *exch = async_exchange_begin(sess); 97 97 98 98 ipc_call_t answer; 99 aid_t req = async_send_2(exch, WINDOW_RESIZE, width, height, &answer); 100 99 aid_t req = async_send_5(exch, WINDOW_RESIZE, x, y, width, height, 100 (sysarg_t) placement_flags, &answer); 101 101 102 int rc = async_share_out_start(exch, cells, AS_AREA_READ | AS_AREA_CACHEABLE); 102 103 103 104 async_exchange_end(exch); 104 105 105 106 sysarg_t ret; 106 107 async_wait_for(req, &ret); 107 108 if (rc != EOK) {108 109 if (rc != EOK) 109 110 return rc; 110 } else if (ret != EOK) {111 else if (ret != EOK) 111 112 return ret; 112 } else { 113 return EOK; 114 } 113 114 return EOK; 115 115 } 116 116 -
uspace/lib/c/generic/private/stdio.h
r2f591127 r5828554 53 53 int eof; 54 54 55 /** K logindicator */56 int k log;55 /** KIO indicator */ 56 int kio; 57 57 58 58 /** Session to the file provider */ -
uspace/lib/c/include/bitops.h
r2f591127 r5828554 107 107 } 108 108 109 extern int __popcountsi2(int);110 111 109 #endif 112 110 -
uspace/lib/c/include/ddi.h
r2f591127 r5828554 130 130 } 131 131 132 extern int irq_register(int, int, int, irq_code_t *);132 extern int irq_register(int, int, int, const irq_code_t *); 133 133 extern int irq_unregister(int, int); 134 134 -
uspace/lib/c/include/io/klog.h
r2f591127 r5828554 1 1 /* 2 * Copyright (c) 20 06 Jakub Vana2 * Copyright (c) 2013 Martin Sucha 3 3 * All rights reserved. 4 4 * … … 39 39 #include <stdarg.h> 40 40 #include <io/verify.h> 41 #include <stdio.h> 42 #include <stdlib.h> 43 #include <str.h> 44 #include <abi/log.h> 41 45 42 extern size_t klog_write(const void *, size_t); 43 extern void klog_update(void); 44 extern void klog_command(const void *, size_t); 45 extern int klog_printf(const char *, ...) 46 PRINTF_ATTRIBUTE(1, 2); 47 extern int klog_vprintf(const char *, va_list); 46 extern size_t klog_write(log_level_t, const void *, size_t); 47 extern int klog_read(void *, size_t); 48 49 #define KLOG_PRINTF(lvl, fmt, ...) ({ \ 50 char *_fmt = str_dup(fmt); \ 51 size_t _fmtsize = str_size(_fmt); \ 52 if (_fmtsize > 0 && _fmt[_fmtsize - 1] == '\n') \ 53 _fmt[_fmtsize - 1] = 0; \ 54 char *_s; \ 55 int _c = asprintf(&_s, _fmt, ##__VA_ARGS__); \ 56 free(_fmt); \ 57 if (_c >= 0) { \ 58 _c = klog_write((lvl), _s, str_size(_s)); \ 59 free(_s); \ 60 }; \ 61 (_c >= 0); \ 62 }) 48 63 49 64 #endif -
uspace/lib/c/include/io/log.h
r2f591127 r5828554 39 39 #include <io/verify.h> 40 40 41 /** Log message level. */ 42 typedef enum { 43 /** Fatal error, program is not able to recover at all. */ 44 LVL_FATAL, 45 /** Serious error but the program can recover from it. */ 46 LVL_ERROR, 47 /** Easily recoverable problem. */ 48 LVL_WARN, 49 /** Information message that ought to be printed by default. */ 50 LVL_NOTE, 51 /** Debugging purpose message. */ 52 LVL_DEBUG, 53 /** More detailed debugging message. */ 54 LVL_DEBUG2, 55 56 /** For checking range of values */ 57 LVL_LIMIT 58 } log_level_t; 41 #include <abi/log.h> 59 42 60 43 /** Log itself (logging target). */ -
uspace/lib/c/include/io/window.h
r2f591127 r5828554 43 43 #include <io/pos_event.h> 44 44 45 typedef enum { 46 GF_EMPTY = 0, 47 GF_MOVE_X = 1, 48 GF_MOVE_Y = 2, 49 GF_RESIZE_X = 4, 50 GF_RESIZE_Y = 8, 51 GF_SCALE_X = 16, 52 GF_SCALE_Y = 32 53 } window_grab_flags_t; 54 55 typedef enum { 56 WINDOW_PLACEMENT_ANY = 0, 57 WINDOW_PLACEMENT_CENTER_X = 1, 58 WINDOW_PLACEMENT_CENTER_Y = 2, 59 WINDOW_PLACEMENT_CENTER = 60 WINDOW_PLACEMENT_CENTER_X | WINDOW_PLACEMENT_CENTER_Y, 61 WINDOW_PLACEMENT_LEFT = 4, 62 WINDOW_PLACEMENT_RIGHT = 8, 63 WINDOW_PLACEMENT_TOP = 16, 64 WINDOW_PLACEMENT_BOTTOM = 32, 65 WINDOW_PLACEMENT_ABSOLUTE_X = 64, 66 WINDOW_PLACEMENT_ABSOLUTE_Y = 128, 67 WINDOW_PLACEMENT_ABSOLUTE = 68 WINDOW_PLACEMENT_ABSOLUTE_X | WINDOW_PLACEMENT_ABSOLUTE_Y 69 } window_placement_flags_t; 70 45 71 typedef struct { 46 72 sysarg_t object; 47 73 sysarg_t slot; 48 74 sysarg_t argument; 49 } sig _event_t;75 } signal_event_t; 50 76 51 77 typedef struct { 78 sysarg_t offset_x; 79 sysarg_t offset_y; 52 80 sysarg_t width; 53 81 sysarg_t height; 54 } rsz_event_t; 82 window_placement_flags_t placement_flags; 83 } resize_event_t; 55 84 56 85 typedef enum { … … 69 98 kbd_event_t kbd; 70 99 pos_event_t pos; 71 sig _event_t sig;72 r sz_event_t rsz;100 signal_event_t signal; 101 resize_event_t resize; 73 102 } window_event_data_t; 74 103 … … 79 108 } window_event_t; 80 109 81 typedef enum { 82 GF_EMPTY = 0, 83 GF_MOVE_X = 1, 84 GF_MOVE_Y = 2, 85 GF_RESIZE_X = 4, 86 GF_RESIZE_Y = 8, 87 GF_SCALE_X = 16, 88 GF_SCALE_Y = 32 89 } window_grab_flags_t; 90 91 extern int win_register(async_sess_t *, service_id_t *, service_id_t *, sysarg_t, sysarg_t); 110 extern int win_register(async_sess_t *, service_id_t *, service_id_t *); 92 111 93 112 extern int win_get_event(async_sess_t *, window_event_t *); … … 95 114 extern int win_damage(async_sess_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t); 96 115 extern int win_grab(async_sess_t *, sysarg_t, sysarg_t); 97 extern int win_resize(async_sess_t *, sysarg_t, sysarg_t, void *); 116 extern int win_resize(async_sess_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 117 window_placement_flags_t, void *); 98 118 extern int win_close(async_sess_t *); 99 119 extern int win_close_request(async_sess_t *); -
uspace/lib/c/include/setjmp.h
r2f591127 r5828554 1 1 /* 2 2 * Copyright (c) 2008 Josef Cejka 3 * Copyright (c) 2013 Vojtech Horky 3 4 * All rights reserved. 4 5 * … … 30 31 * @{ 31 32 */ 32 /** @file 33 /** @file Long jump implementation. 34 * 35 * Implementation inspired by Jiri Zarevucky's code from 36 * http://bazaar.launchpad.net/~zarevucky-jiri/helenos/stdc/revision/1544/uspace/lib/posix/setjmp.h 33 37 */ 34 38 … … 38 42 #include <libarch/fibril.h> 39 43 40 typedef context_t jmp_buf[1]; 44 struct jmp_buf_interal { 45 context_t context; 46 int return_value; 47 }; 48 typedef struct jmp_buf_interal jmp_buf[1]; 41 49 42 extern int setjmp(jmp_buf env); 50 /* 51 * Specified as extern to minimize number of included headers 52 * because this file is used as is in libposix too. 53 */ 54 extern int context_save(context_t *ctx) __attribute__((returns_twice)); 55 56 /** 57 * Save current environment (registers). 58 * 59 * This function may return twice. 60 * 61 * @param env Variable where to save the environment (of type jmp_buf). 62 * @return Whether the call returned after longjmp. 63 * @retval 0 Environment was saved, normal execution. 64 * @retval other longjmp was executed and returned here. 65 */ 66 #define setjmp(env) \ 67 ((env)[0].return_value = 0, \ 68 context_save(&(env)[0].context), \ 69 (env)[0].return_value) 70 43 71 extern void longjmp(jmp_buf env, int val) __attribute__((noreturn)); 44 72 -
uspace/lib/c/include/stdio.h
r2f591127 r5828554 40 40 #include <str.h> 41 41 #include <io/verify.h> 42 #include <abi/k log.h>42 #include <abi/kio.h> 43 43 44 44 #define EOF (-1) … … 52 52 int _n = snprintf(_buf, sizeof(_buf), fmt, ##__VA_ARGS__); \ 53 53 if (_n > 0) \ 54 (void) __SYSCALL3(SYS_K LOG, KLOG_WRITE, (sysarg_t) _buf, str_size(_buf)); \54 (void) __SYSCALL3(SYS_KIO, KIO_WRITE, (sysarg_t) _buf, str_size(_buf)); \ 55 55 } 56 56
Note:
See TracChangeset
for help on using the changeset viewer.
