MCPcopy Create free account
hub / github.com/YatSenOS/YatSenOS-Tutorial-Volume-1 / printf

Function printf

lab7/src/2/src/kernel/stdio.cpp:165–235  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

163}
164
165int printf(const char *const fmt, ...)
166{
167 const int BUF_LEN = 32;
168
169 char buffer[BUF_LEN + 1];
170 char number[33];
171
172 int idx, counter;
173 va_list ap;
174
175 va_start(ap, fmt);
176 idx = 0;
177 counter = 0;
178
179 for (int i = 0; fmt[i]; ++i)
180 {
181 if (fmt[i] != '%')
182 {
183 counter += printf_add_to_buffer(buffer, fmt[i], idx, BUF_LEN);
184 }
185 else
186 {
187 i++;
188 if (fmt[i] == '\0')
189 {
190 break;
191 }
192
193 switch (fmt[i])
194 {
195 case '%':
196 counter += printf_add_to_buffer(buffer, fmt[i], idx, BUF_LEN);
197 break;
198
199 case 'c':
200 counter += printf_add_to_buffer(buffer, va_arg(ap, char), idx, BUF_LEN);
201 break;
202
203 case 's':
204 buffer[idx] = '\0';
205 idx = 0;
206 counter += stdio.print(buffer);
207 counter += stdio.print(va_arg(ap, const char *));
208 break;
209
210 case 'd':
211 case 'x':
212 int temp = va_arg(ap, int);
213
214 if (temp < 0 && fmt[i] == 'd')
215 {
216 counter += printf_add_to_buffer(buffer, '-', idx, BUF_LEN);
217 temp = -temp;
218 }
219
220 itos(number, temp, (fmt[i] == 'd' ? 10 : 16));
221
222 for (int j = 0; number[j]; ++j)

Callers 3

first_threadFunction · 0.70
setup_kernelFunction · 0.70
program_exitFunction · 0.70

Calls 3

printf_add_to_bufferFunction · 0.70
itosFunction · 0.50
printMethod · 0.45

Tested by

no test coverage detected