Skip to content

Commit 6c9221a

Browse files
committed
Modify based on code review
1 parent f0dd052 commit 6c9221a

File tree

1 file changed

+4
-155
lines changed

1 file changed

+4
-155
lines changed

cores/arduino/printk.cpp

Lines changed: 4 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -29,175 +29,24 @@
2929
*/
3030

3131
#include <stdarg.h>
32+
#include <cstdio>
3233
#include "UARTClass.h"
3334

3435
extern "C" void printk(const char *fmt, va_list args);
35-
int __vsnprintf(char *dest, int size, const char *fmt, va_list args)
36-
{
37-
int might_format = 0;
38-
int len = 0;
39-
char lastchar = 0;
40-
bool binary_format = false;
41-
42-
if (!dest || !size)
43-
return 0;
44-
45-
while (*fmt && len < size) {
46-
if (!might_format) {
47-
if (*fmt == '\n' && lastchar != '\r') {
48-
if (len < size) {
49-
lastchar = *dest++ = '\r', len++;
50-
continue;
51-
} else
52-
break;
53-
} else if (*fmt != '%') {
54-
if (len < size)
55-
lastchar = *dest++ = *fmt, len++;
56-
else
57-
break;
58-
} else
59-
might_format = 1;
60-
} else {
61-
if (*fmt == '%') {
62-
if (len < size)
63-
*dest++ = '%', len++;
64-
else
65-
break;
66-
might_format = 0;
67-
} else {
68-
switch (*fmt) {
69-
case '0':
70-
case '1':
71-
might_format |= 2;
72-
goto still_format;
73-
break;
74-
case '2':
75-
might_format |= 4;
76-
goto still_format;
77-
break;
78-
case '4':
79-
might_format |= 8;
80-
goto still_format;
81-
break;
82-
case 'b':
83-
binary_format = true;
84-
goto still_format;
85-
break;
86-
case 'd':
87-
case 'i':
88-
case 'u':
89-
if (!binary_format) {
90-
unsigned long num =
91-
va_arg(args,
92-
unsigned long);
93-
unsigned long pos = 999999999;
94-
unsigned long remainder = num;
95-
int found_largest_digit = 0;
96-
97-
if (*fmt != 'u'
98-
&& (num & (1 << 31))) {
99-
if (len < size)
100-
*dest++ = '-',
101-
len++;
102-
num = (~num) + 1;
103-
remainder = num;
104-
}
105-
while (pos >= 9) {
106-
if (found_largest_digit
107-
|| remainder >
108-
pos) {
109-
found_largest_digit
110-
= 1;
111-
if (len < size)
112-
*dest++ = (char)((remainder / (pos + 1)) + 48),
113-
len++;
114-
else
115-
break;
116-
}
117-
remainder %= (pos + 1);
118-
pos /= 10;
119-
}
120-
if (len < size)
121-
*dest++ = (char)(remainder + 48),
122-
len++;
123-
break;
124-
}
125-
case 'x':
126-
case 'X':
127-
case 'p': {
128-
unsigned long num =
129-
va_arg(args, unsigned long);
130-
int sz = sizeof(num) * 2;
131-
132-
if (might_format & 8) {
133-
sz = 4;
134-
} else if (might_format & 4) {
135-
sz = 2;
136-
} else if (might_format & 2) {
137-
sz = 1;
138-
}
139-
for (; sz; sz--) {
140-
char nibble;
141-
if (!binary_format) {
142-
nibble = (num >> ((sz - 1) << 2) & 0xf);
143-
nibble += nibble > 9 ? 87 : 48;
144-
} else {
145-
nibble = (num >> ((sz - 1) << 3) & 0xff);
146-
}
147-
if (len < size)
148-
*dest++ = nibble,
149-
len++;
150-
else
151-
break;
152-
}
153-
break;
154-
}
155-
case 's': {
156-
char *s = va_arg(args, char *);
157-
while (*s)
158-
if (len < size)
159-
*dest++ =
160-
*s++, len++;
161-
else
162-
break;
163-
break;
164-
}
165-
case 'c': {
166-
char c = va_arg(args, int);
167-
if (len < size)
168-
*dest++ = c, len++;
169-
break;
170-
}
171-
default:
172-
if (len < size)
173-
*dest++ = '%', len++;
174-
if (len < size)
175-
*dest++ = *fmt, len++;
176-
break;
177-
}
178-
might_format = 0;
179-
still_format:
180-
(void)might_format;
181-
}
182-
}
183-
++fmt;
184-
}
185-
*dest = '\0';
186-
return len;
187-
}
188-
18936
extern UARTClass Serial1;
19037
#define PRINTK_BUFSIZ 256
38+
19139
void printk(const char *fmt, va_list args)
19240
{
19341
#ifdef CONFIGURE_DEBUG_CORELIB_ENABLED
19442
int len = 0;
19543

19644
char tmp[PRINTK_BUFSIZ];
19745

198-
len = __vsnprintf(tmp, PRINTK_BUFSIZ, fmt, args);
46+
len = vsnprintf(tmp, PRINTK_BUFSIZ, fmt, args);
19947

20048
tmp[len] = '\0';
20149
Serial1.println(tmp);
20250
#endif
20351
}
52+

0 commit comments

Comments
 (0)