xref: /haiku/src/system/boot/loader/stdio.cpp (revision 508f54795f39c3e7552d87c95aae9dd8ec6f505b)
1 /*
2  * Copyright 2003-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <boot/vfs.h>
8 #include <boot/stdio.h>
9 #include <util/kernel_cpp.h>
10 
11 #include <errno.h>
12 #include <stdarg.h>
13 #include <string.h>
14 
15 #include <algorithm>
16 
17 
18 //#undef stdout
19 //#undef stdin
20 //extern FILE *stdout;
21 //extern FILE *stdin;
22 
23 
24 #undef errno
25 int errno;
26 
27 
28 int*
29 _errnop(void)
30 {
31 	return &errno;
32 }
33 
34 
35 int
36 vfprintf(FILE *file, const char *format, va_list list)
37 {
38 	ConsoleNode *node = (ConsoleNode *)file;
39 	char buffer[512];
40 		// the buffer handling could (or should) be done better...
41 
42 	int length = vsnprintf(buffer, sizeof(buffer), format, list);
43 	length = std::min(length, (int)sizeof(buffer) - 1);
44 	if (length > 0)
45 		node->Write(buffer, length);
46 
47 	return length;
48 }
49 
50 
51 int
52 vprintf(const char *format, va_list args)
53 {
54 	return vfprintf(stdout, format, args);
55 }
56 
57 
58 int
59 printf(const char *format, ...)
60 {
61 	va_list args;
62 
63 	va_start(args, format);
64 	int status = vfprintf(stdout, format, args);
65 	va_end(args);
66 
67 	return status;
68 }
69 
70 
71 int
72 fprintf(FILE *file, const char *format, ...)
73 {
74 	va_list args;
75 
76 	va_start(args, format);
77 	int status = vfprintf(file, format, args);
78 	va_end(args);
79 
80 	return status;
81 }
82 
83 
84 int
85 fputc(int c, FILE *file)
86 {
87 	if (file == NULL)
88 		return B_FILE_ERROR;
89 
90     status_t status;
91 	char character = (char)c;
92 
93 	// we only support direct console output right now...
94 	status = ((ConsoleNode *)file)->Write(&character, 1);
95 
96 	if (status > 0)
97 		return character;
98 
99 	return status;
100 }
101 
102 
103 int
104 fputs(const char *string, FILE *file)
105 {
106 	if (file == NULL)
107 		return B_FILE_ERROR;
108 
109 	status_t status = ((ConsoleNode *)file)->Write(string, strlen(string));
110 	fputc('\n', file);
111 
112 	return status;
113 }
114 
115 
116 int
117 putc(int character)
118 {
119 	return fputc(character, stdout);
120 }
121 
122 
123 int
124 putchar(int character)
125 {
126 	return fputc(character, stdout);
127 }
128 
129 
130 int
131 puts(const char *string)
132 {
133 	return fputs(string, stdout);
134 }
135 
136