76{
77 const char *p;
78 int ch;
81 int lflag, width, padc;
82
83 while (1) {
84 while ((ch = *(unsigned char *)fmt++) != '%') {
85 if (ch == '\0') return -1;
86 func(ch, handle);
87 }
88
89 width = -1;
90 lflag = 4;
91 padc = ' ';
92again:
93 switch (ch = *(unsigned char *)fmt++) {
94 case '-':
95 padc = '-';
96 goto again;
97 case '0':
98 padc = '0';
99 goto again;
100 case '1':
101 case '2':
102 case '3':
103 case '4':
104 case '5':
105 case '6':
106 case '7':
107 case '8':
108 case '9':
109 width = 0;
110 while (1) {
111 width = 10 * width + ch - '0';
112 ch = *fmt;
113 if (ch < '0' || ch > '9')
114 {
115 break;
116 }
117 fmt++;
118 if (ch == '\0')
119 {
120 fmt--;
121 goto again;
122 }
123 }
124 goto again;
125 case 'c':
126 func(
va_arg(ap,
int) & 0xff, handle);
127 break;
128 case 's': {
129 int spaces;
130
133 func('*', handle);
134 func('N', handle);
135 func('U', handle);
136 func('L', handle);
137 func('L', handle);
138 func('*', handle);
139 break;
140 }
141 spaces = width -
strlen(p);
142
143 if (padc == ' ') {
144 while (spaces > 0)
145 {
146 func(' ', handle);
147 spaces--;
148 }
149 }
150
151 while (*p != '\0')
152 {
153 func(*p++, handle);
154 }
155
156 if (padc == '-') {
157 while (spaces > 0)
158 {
159 func(' ', handle);
160 spaces--;
161 }
162 }
163 break;
164 }
165 case 'd':
167 if (num < 0) {
168 func('-', handle);
169 unum = -num;
170 } else {
171 unum = num;
172 }
173 printnum(func, handle, unum, 10, width, padc);
174 break;
175 case 'u':
177 printnum(func, handle, unum, 10, width, padc);
178 break;
179 case 'o':
181 printnum(func, handle, unum, 8, width, padc);
182 break;
183 case 'p':
184 unum = (
unsigned long)
va_arg(ap,
void *);
185 printnum(func, handle, unum, 8, width, padc);
186 break;
187 case 'x':
189 printnum(func, handle, unum, 16, width, padc);
190 break;
191 case 'X':
193 printnum(func, handle, unum, -16, width, padc);
194 break;
195 case 'l':
196 lflag = 8;
197 goto again;
198 case '%':
199 default:
200 func(ch, handle);
201 break;
202 }
203 }
204 return 0;
205}
#define getuint(ap, lflag)
static void printnum(void(*func)(int, void *), void *handle, uint64_t num, int base, int width, int padc)
#define getint(ap, lflag)
size_t strlen(const char *str)