Rev 4234 | Rev 4482 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4234 | Rev 4245 | ||
|---|---|---|---|
| Line 246... | Line 246... | ||
| 246 | * @param flags Flags that modify the way the string is printed. |
246 | * @param flags Flags that modify the way the string is printed. |
| 247 | * |
247 | * |
| 248 | * @return Number of characters printed, negative value on failure. |
248 | * @return Number of characters printed, negative value on failure. |
| 249 | */ |
249 | */ |
| 250 | static int print_str(char *str, int width, unsigned int precision, |
250 | static int print_str(char *str, int width, unsigned int precision, |
| 251 | uint32_t flags, printf_spec_t *ps) |
251 | uint32_t flags, printf_spec_t *ps) |
| 252 | { |
252 | { |
| 253 | if (str == NULL) |
253 | if (str == NULL) |
| 254 | return printf_putstr(nullstr, ps); |
254 | return printf_putstr(nullstr, ps); |
| 255 | 255 | ||
| 256 | /* Print leading spaces. */ |
256 | /* Print leading spaces. */ |
| Line 294... | Line 294... | ||
| 294 | * @param flags Flags that modify the way the string is printed. |
294 | * @param flags Flags that modify the way the string is printed. |
| 295 | * |
295 | * |
| 296 | * @return Number of wide characters printed, negative value on failure. |
296 | * @return Number of wide characters printed, negative value on failure. |
| 297 | */ |
297 | */ |
| 298 | static int print_wstr(wchar_t *str, int width, unsigned int precision, |
298 | static int print_wstr(wchar_t *str, int width, unsigned int precision, |
| 299 | uint32_t flags, printf_spec_t *ps) |
299 | uint32_t flags, printf_spec_t *ps) |
| 300 | { |
300 | { |
| 301 | if (str == NULL) |
301 | if (str == NULL) |
| 302 | return printf_putstr(nullstr, ps); |
302 | return printf_putstr(nullstr, ps); |
| - | 303 | ||
| - | 304 | if (*str == U_BOM) |
|
| - | 305 | str++; |
|
| 303 | 306 | ||
| 304 | /* Print leading spaces. */ |
307 | /* Print leading spaces. */ |
| 305 | size_t strw = wstr_length(str); |
308 | size_t strw = wstr_length(str); |
| 306 | if (precision == 0) |
309 | if (precision == 0) |
| 307 | precision = strw; |
310 | precision = strw; |
| 308 | 311 | ||
| 309 | /* Left padding */ |
312 | /* Left padding */ |
| 310 | count_t counter = 0; |
313 | count_t counter = 0; |
| 311 | width -= precision; |
314 | width -= precision; |
| 312 | if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
315 | if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
| 313 | while (width-- > 0) { |
316 | while (width-- > 0) { |
| 314 | if (printf_putchar(' ', ps) == 1) |
317 | if (printf_putchar(' ', ps) == 1) |
| 315 | counter++; |
318 | counter++; |
| 316 | } |
319 | } |
| 317 | } |
320 | } |
| 318 | 321 | ||
| 319 | /* Part of @a wstr fitting into the alloted space. */ |
322 | /* Part of @a wstr fitting into the alloted space. */ |
| 320 | int retval; |
323 | int retval; |
| 321 | size_t size = wstr_lsize(str, precision); |
324 | size_t size = wstr_lsize(str, precision); |
| 322 | if ((retval = printf_wputnchars(str, size, ps)) < 0) |
325 | if ((retval = printf_wputnchars(str, size, ps)) < 0) |
| 323 | return -counter; |
326 | return -counter; |
| 324 | 327 | ||
| 325 | counter += retval; |
328 | counter += retval; |
| 326 | 329 | ||
| 327 | /* Right padding */ |
330 | /* Right padding */ |
| 328 | while (width-- > 0) { |
331 | while (width-- > 0) { |
| 329 | if (printf_putchar(' ', ps) == 1) |
332 | if (printf_putchar(' ', ps) == 1) |
| 330 | counter++; |
333 | counter++; |
| 331 | } |
334 | } |