MCPcopy Create free account
hub / github.com/IntegralPilot/wasm_os / vprintf

Function vprintf

stdlib/c/stdio.c:94–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

92}
93
94int vprintf(const char *format, va_list args) {
95 int count = 0;
96
97 while (*format) {
98 if (*format == '%') {
99 format++;
100 switch (*format) {
101 case 'd': {
102 int i = va_arg(args, int);
103 char s[12];
104 itoa(i, s);
105 puts(s);
106 count += strlen(s);
107 break;
108 }
109 case 's': {
110 char *s = va_arg(args, char *);
111 puts(s);
112 count += strlen(s);
113 break;
114 }
115 case 'c': {
116 char c = (char)va_arg(args, int);
117 putchar(c);
118 count++;
119 break;
120 }
121 case 'p': {
122 // Use uintptr_t for pointer conversion
123 uintptr_t p = va_arg(args, uintptr_t);
124 char s[21];
125 s[0] = '0';
126 s[1] = 'x';
127 // Use a loop and bit shifting for hex conversion
128 for (int i = sizeof(p) * 2 - 1; i >= 0; --i) {
129 int digit = (p >> (i * 4)) & 0xF;
130 s[2 + sizeof(p) * 2 - 1 - i] = (digit < 10) ? TO_DIGIT(digit) : (digit - 10 + 'a');
131 }
132 s[sizeof(s) - 1] = '\0';
133 puts(s);
134 count += strlen(s);
135 break;
136 }
137case 'l': {
138 format++;
139 if (*format == 'l' && *(format + 1) == 'd') {
140 // Only increment format once here
141 format++;
142 long long int i = va_arg(args, long long int);
143 char s[21];
144 llitoa(i, s);
145 puts(s);
146 count += strlen(s);
147 } else {
148 // Handle invalid specifier
149 putchar('%');
150 putchar('l');
151 putchar(*format);

Callers 1

printfFunction · 0.85

Calls 4

putsFunction · 0.85
itoaFunction · 0.70
strlenFunction · 0.70
llitoaFunction · 0.70

Tested by

no test coverage detected