3 Date of creation : 05/12/2022
5 Copyright : Soft'n'design
6 Author : Laurent Mazet <mazet@softndesign.org>
8 Description : This file contains embedded printf
18 inline unsigned int nextpow10 (unsigned int x
) {
24 return (n
== 0) ? 1 : n
;
27 /* simple fprintf function */
29 size_t _fprintf (FILE *fid
, const char *fmt
, ...)
31 char buffer
[1024 + 1] = { 0 };
43 /* copy standard char */
50 /* process format char */
53 c
= (char) va_arg (ap
, int);
64 case 'u': /* unsigned int */
65 u
= (t
) ? (unsigned int)d
: va_arg (ap
, unsigned int);
66 for (i
= nextpow10 (u
), s
= str
; i
> 0; i
--, s
++) {
67 str
[i
- 1] = '0' + (u
% 10);
72 case 'p': /* pointer */
73 p
= va_arg (ap
, void *);
76 for (i
= sizeof (void *) * 2; i
> 0; i
--) {
77 char x
= (char)(((uintptr_t)p
>> (i
* 4 - 4)) & 0xf);
78 *str
++ = (x
> 9) ? 'a' + x
- 10 : '0' + x
;
81 case 's': /* string */
82 s
= va_arg (ap
, char *);
94 size_t n
= str
- buffer
;
95 if (n
< sizeof (buffer
) - 1) {
96 fwrite (buffer
, n
, 1, fid
);
102 /* vim: set ts=4 sw=4 et */