1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <stdarg.h>
20: #include <stdio.h>
21: #include <string.h>
22: #include <hurd.h>
23:
24: #ifdef USE_IN_LIBIO
25: # include <libioP.h>
26: #endif
27:
28: static ssize_t
29: do_write (void *cookie, const char *buf, size_t n)
30: {
31: error_t error = __io_write ((io_t) cookie, buf, n, -1,
32: (mach_msg_type_number_t *) &n);
33: if (error)
34: return __hurd_fail (error);
35: return n;
36: }
37:
38:
39:
40: int
41: vpprintf (io_t port, const char *format, va_list arg)
42: {
43: int done;
44:
45: #ifdef USE_IN_LIBIO
46:
47: struct locked_FILE
48: {
49: struct _IO_cookie_file cfile;
50: #ifdef _IO_MTSAFE_IO
51: _IO_lock_t lock;
52: #endif
53: } temp_f;
54: #ifdef _IO_MTSAFE_IO
55: temp_f.cfile.__fp.file._lock = &temp_f.lock;
56: #endif
57:
58: _IO_cookie_init (&temp_f.cfile, _IO_NO_READS,
59: (void *) port, (cookie_io_functions_t) { write: do_write });
60:
61: done = _IO_vfprintf (&temp_f.cfile.__fp.file, format, arg);
62:
63: #else
64:
65: FILE f;
66:
67:
68: memset ((void *) &f, 0, sizeof (f));
69: f.__magic = _IOMAGIC;
70: f.__mode.__write = 1;
71: f.__cookie = (void *) port;
72: f.__room_funcs = __default_room_functions;
73: f.__io_funcs.__write = do_write;
74: f.__seen = 1;
75: f.__userbuf = 1;
76:
77:
78: done = vfprintf (&f, format, arg);
79:
80: #endif
81:
82: return done;
83: }