From ceff5cf197031a7a0398aeb89e50ca6e360f24c0 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Mon, 7 Dec 2020 02:37:53 +0500 Subject: [PATCH] Add function "kernaux_printf" --- Makefile.am | 6 ++++++ README.md | 5 +++-- configure.ac | 2 +- include/Makefile.am | 1 + include/kernaux/printf.h | 17 +++++++++++++++++ src/printf.c | 19 +++++++++++++++++++ tests/test_printf | Bin 0 -> 54136 bytes tests/test_printf.c | 6 ++++++ 8 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 include/kernaux/printf.h create mode 100644 src/printf.c create mode 100755 tests/test_printf create mode 100644 tests/test_printf.c diff --git a/Makefile.am b/Makefile.am index 7fc8ebc..8f07ae2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,11 +10,13 @@ AM_CFLAGS = \ lib_LIBRARIES = libkernaux.a TESTS = \ + tests/test_printf \ tests/test_stdlib noinst_PROGRAMS = $(TESTS) libkernaux_a_SOURCES = \ + src/printf.c \ src/stdlib.c if ARCH_X86 @@ -83,6 +85,10 @@ tests_test_pfa_SOURCES = \ $(libkernaux_a_SOURCES) \ tests/test_pfa.c +tests_test_printf_SOURCES = \ + $(libkernaux_a_SOURCES) \ + tests/test_printf.c + tests_test_stdlib_SOURCES = \ $(libkernaux_a_SOURCES) \ tests/test_stdlib.c diff --git a/README.md b/README.md index 6876262..09b2e94 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,12 @@ API * [Page Frame Allocator](/include/kernaux/pfa.h) *(work in progress)* * ELF utils *(planned)* * [Architecture-specific helpers](/include/kernaux/arch/) -* [stdlib replacement](/include/kernaux/stdlib.h) (with prefix): +* [printf replacement](/include/kernaux/printf.h) *(work in progress)* +* [stdlib replacement](/include/kernaux/stdlib.h): * `memset` * `strlen` * `strncpy` - * `itoa` *(incomplete)* + * `itoa` *(work in progress)* diff --git a/configure.ac b/configure.ac index 6c1a151..43a2646 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,6 @@ AC_PROG_CC_C99 AC_PROG_RANLIB AC_C_INLINE AC_CHECK_HEADER_STDBOOL -AC_CHECK_HEADERS([stddef.h]) +AC_CHECK_HEADERS([stdarg.h stddef.h]) AC_OUTPUT diff --git a/include/Makefile.am b/include/Makefile.am index 7f41fc3..ad88137 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -4,4 +4,5 @@ nobase_include_HEADERS = \ kernaux/console.h \ kernaux/multiboot2.h \ kernaux/pfa.h \ + kernaux/printf.h \ kernaux/stdlib.h diff --git a/include/kernaux/printf.h b/include/kernaux/printf.h new file mode 100644 index 0000000..09da72c --- /dev/null +++ b/include/kernaux/printf.h @@ -0,0 +1,17 @@ +#ifndef KERNAUX_INCLUDED_PRINTF +#define KERNAUX_INCLUDED_PRINTF 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void kernaux_printf(void (*putchar)(char), const char *format, ...); +void kernaux_printf_va(void (*putchar)(char), const char *format, va_list va); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/printf.c b/src/printf.c new file mode 100644 index 0000000..2f9ef8d --- /dev/null +++ b/src/printf.c @@ -0,0 +1,19 @@ +#include "config.h" + +#include +#include + +void kernaux_printf(void (*putchar)(char), const char *format, ...) +{ + va_list va; + va_start(va, format); + kernaux_printf_va(putchar, format, va); + va_end(va); +} + +void kernaux_printf_va( + void (*const putchar)(char), + const char *format, + va_list va +) { +} diff --git a/tests/test_printf b/tests/test_printf new file mode 100755 index 0000000000000000000000000000000000000000..3584e9c13922fca3d3ed5c232d6102013f8f5c1f GIT binary patch literal 54136 zcmeIb349gR**`vW=O&pfApuk(pa~>!0|^93SQNd4BqY&nCO0fD5D6kN zM$w}6Z7JZ^+Sa!At+lwc4Puqr4R>4ZTWnoGTo4pdTk`up=bUF|?uOd`@BM%NpZ}-x zN#;EJdCqf|IdkUDnaxEdb6vWw@nL8eX@s@JNJ_q9YR1hB#GGSkBk{{wL;QKrC_eop%#hePeFM*)u#J z5aD&iJ9@Ye$C!J7uiYV~H7&RIz}jrj@T~&(4A*ksFYbEoa$ncqeVuO}FDozUiFvm_ za_#BYCX!jdCma3e!p6s*;f2JRRS%@X*Ar8T)R%YK*Y#FlAY2?oC|vA!S>Ithi^~p> zS2hm)@g&%D-bi6){2A!`_Mb6)UB`XCXfY#Z;Y1)lgJ>u9BQv))}JA! zwNLhS&iVyG735EnuY1;Gz>fUuOkdv-ABymF%uj*qq~1YgKY0KqQ63V%?C4rZNF4DV zSMBR|j~NFcUsvJitlVB-PvPhsf>9G7RQsk%c6$u!V%&iv+mQ+T2fL2&<|87{2Qq#7 z=giOFeu1y^8QqunO8du<-I3edaj_N{XqB(0Oz)VPiJT8f{>jkz-SE7x>vUjH?r){P zg`P*;$%Wh9rmu59tUlZR!PD*(jS45LxbyRBU)3}18*b>^82I#WPsdIwcr<}ZR`rap z^J(4J_0cg?)@#>ixz87W`cco-IfXs5;p6A=1)h1QQK4O*`+7F&+n4vXzvj#P=;=6Z zee$spmVM77sh&q-eVs@3?E}c-_5yhE$JQep-_FlB6g*0u_%X`1#8dR_v777&t=&DML~JRQi{CqhCa{E1HKzhd3N@i2ing;^oqM)^6Y%lcf)Uq^kjQ~)WGT@!VcWf zE2IKLa$lo*=z8_i%L-N%Tvl*-f!{8Fao5L>QAhT5{VVrWN!L4tT_vNlN>G<6K0xM? zRj9kdZqR%T-CIKp2dB>u7kdw^5;yeyuN1y&)3;&`tlC7A1~_qBiVhX z(DReP=+$I1i?T?eEXVtnXR~2+u zXr8SPQpS1DdA6Mbv8Pop?b)CgbhT?GUGC=|qXDU4yXJZ1I(;9(}jJ}xnjC4q;MAK4F2L@9+AT*};DS^v+t_d^cjO|M>%w}1VI@SO_Q zcjQ8-9sM@KRDinQ@i^ss^k$&4{Rv;^gV-}$&plPpg@VFU;hpD^3VrMIo~>)a&4X{A zZ5sgGA73FktgcyYV??pmiibjccL0U|Dvz2gxaZ9mszD<&m27$ znzqVg>5vxf0M_Qg+Oek`OllF#97@dZ+3n`&Z&2TMJda+A>~`3A=y-H=#@YF*XXp5O z8mP-%JKDtPnxsb8lF{RGe_P!3-mz4xe|4T76PW7jdd1hXT=)EHcHa%X?eEd3i$Ph9 zx}F<;Pwsa_eTW3KLU#0tc=IA6RNBph>kZ(Wa>n@_fuze&he2E@} zY?y5S7+>2DbYFM6r0eY?J3dFvbRF)Pt_2?Qbv-HjRp*m>$Awz^r|P;x{fh){RY3a( z$F?4scbZy%2a2Upyt?Dyx9QVQ`|=L7onPGb&#q67jZ*x)iGg#v=eRq2<2nzY_UQ)- zy4|Bo^ur{Xgfbj?0yehxw!exoQ4WY9*AF$;l6}l9kdw@1R&m$Ax;`oHdhys;S+2Z^ z?J>o9ueXL|hVHE&u`*jEGkZY{z=)R`fe$#^3+3`F^jz)8NVIuhPnn4*?gOs*JVj56 zxs2Vo5dY4L`+IK8fC2@f{}0gUeO2x)KK)SNVG+;H&F(nQH+xYkb$#3HPQqotiKm3% zo)CG{$-jQHI|cJONy2;p_A{LPj?E?}EAudN&vSdWX43%Hd0O{u8%i;2px+@ z`SVUd{W+n&Sg3!{xjz+y*4BF=k=sk%uLBV5IQ_a46zSK^1O@x$QGR*0wxSAxd^;*e zBI2XmL&!y>!<_NzUhdBA?fl%c?uPC~CN8^MuZE3N`{O(}Tm_(K_VL{3KmF*2=dJj4 z&r8aiXL@eOG*i^qW0Cseza-p@>(LM^hhv)Vdbbev38&cA<$Sl^sD9U}l zH1E%?=S%(E-qO6^1@f$N7j*0Bg>j`fJYVW5e6FCoKy`&;eLu9?4wZEM>Bv5eVCVxc z()_Bp^O#wh_ZQp0%-r4^o^OvsIjJ3xUDUeW1UasOx!sH0qFy^c)7SSqmdX9^Sxhcb zxzw#uxyKQli}gUfk1q}%WD5ec&oDOhxFqd z`l0=o_@;v&+MbCYAIuLLABdk2%oqKF>yP+}!Tg}{hxkds{IK}+3+9LApB&5&8t=%y z=S%o0U&2of=7;5<7R(PCFDd`@V18KnGlKbH-vJOA4lH#j5>6n zoo>Zu&A^D#_fq%N&NH}Dl;YkRH>-cdjHc@Zt`xWV^n-Mzz#O^Fgs>Nk+}^&IfW`wI zW}$ODWZCn`(nQZA3zEQ20NW2XZm1R{<20vV87Z!~gsxGJI}0@q;Nnz+dv){&=sjwZ zOS!$>ZEj#s2&{8P|MgFG8<6XQRr@0L3*py4aW^FV`i02&UkdHUMZ9O0gP8*K3tKiV zn41CgbDKK==w~*X6|6f5sFny4n!l(pGEQ~z9Okt>!AwcVFbSTgk8yyBT zfKVTuNS74upUU3`FdXr1vQhGPqm7ckTgl2>xJ04dQ2AG2N-N5bg&3+-YDhPsvSk&M zfm;*?@GgKQJyj_v+Z=cI0yFn{U+0k&-=`m8p5xj2Yg~#-dM0g#P*LuwqFhYT&*b)& zbbZ+O(t;lMI_S58RoXM{sodV;?(_RzD(+rqiZ*qX$fBToU5Y^02^5#g?sXKi^#bJ_ zi+a}MF5**_adF<$t#=(QLe40U@*Yb~GW_KI%@#(LaVxN+?+9sJ38nmWOM>KQkObWp zSoUZM+P2q+PDq%qN7U{?>XVTgnV5(4h;aT4GROWx@s{{b!k@M5cT$ZkMUFere{#S( zx)W_u>i3T!e5;NB#SJ`Q<5!V#wT=If_~ka`W!reCh z8oJ5RkI`n7fBOl4)5h;7{6!nzO88SYekI`#+jt-0_u2S`gzvQREW)?ixK4P$#t);} z9<8?VCkZcSTviNf^+6QF9s*E*Z;=1F&mSERQL8`UegsP=ORK;ugty`(nw-yO%R3#mwz_ zb!S%yTV2of6zGLLTWBS?;QBZEaPKvSPDSGnVi~BwQ*>zj{{8PJ?LV57_w4%Q9bJbo zGs}A}fBUq!wv#6h?0AfpkaJHR4ZJ7oC-3FfBy-yXOB0|;E8 zJ6#d>>H1gP^$OjlmGq4HZkkwXokZ!4-lnfY78)`zb4`WFJ1qc<@2JyO$ZQjc2>Q=3^y&+I9;xPp!sZG$l-oVC|nhU*S+P&k( zw2dc18y^1i%p)ihNz2=CEa*4MN;3GFQ{HepSDbDJ0S!2&IK z#8e-sZ*F2jTl*S+7_q)-9iB{8k03v4ngXa{r=yaxuBNrkVTXwIHEkD?3MJ1jx87|4UD@x*3&IlnUZ8erx#Pa5zZyBq0imq*_tZlPcLev>I zrAu{c36Xvfp|SFcX1lT0H`$2YgH+HFKxYr4aRZZIT#nFdMX#b}fnlc2+l287wcm)x zsezhmlA$B0K)FxEEuj56gnn@jnj#S@<{cfBI8A(8B+#_& z|99bkJN`G|zYhN^@bAO_bo`IQe-{2t{7-@19jCA?j{ki8d+~q#6QuY*{Bd7j3;wZ1(*F^R!3;-A_riug*qA}T0XPq3-0+XSK6;3G7t(P^A3&OqiNijmhahwCP2ixL zZ}s)9LYjrN1?hC8Tanfwy$k7GNFOBn+kJh#NMFU}juz{VARUeLG}7rv&37@$Mw*3m zHB#R(=p%gq=~G0e`Bi)Cz4(acaZby0;=>teVMtTsbiOJ~^q(hLJANBRoTwrl;49D`4kEn^>FY=zKzbbM zL8NZP`v}r3q~mb=d@fDgkglM5K)M$x9rU{gI`pfTX!?c}eQ;8oxkHajAv*nr;P4xL zeG^GQ9g*cV{Psr5w?N)YvdJlPle6Y~64#p@+QoxrOqe=)B#}wK5dU?M!#v$OvH-2Z zf5+cZr$jAG&S^?WHVbgaikY9b0sr@bhh`uSqTP)Dy`T+~Bq6sK@PnX<%m9XN)g7$5omFXOsdWFd;mnX~Gr7}+gZyb1UlHWLpM!(;2qrYA$D3V5F!D`TGp_mSmqj8}DwB>># zX*5Rc3!%|?;YNS=JLG8WC5R|aS_w%$k${p|f_esaF+l4RfI$z?^!zJlcZLUbbZ zs*q0POLYATjJaWq1&PK2S47U-L}RNC&Vn!rmT)hUcqYt1Nce-6Ib|0WN z@+M?yY`&OeaS-h^Xb*#iwLEbUEeYj)2sCFK@q+e52yGf@G`3H5==wnW7&LC{8Q`q~ zZT0JYbpLN1g@6K}(>0-nsCImdtZ@l_a$BsA#--Ba{MJYj6=k4nN(!zaXvY6J{u6=! zMBqOW_`enb{=FstzEWN4v7RIkYuv;bLf6qyC zQ#zRc$(g=p!f75rhss8y>nRw_;)|O$Q0`K6HEq-QnuuRN1|2*m?^D0iv)5>v7`3279P}%)oOZfNap$6x2MT9cG1n1x5&YLsmLhrbWHSJA-cJBq*=Vj+i zn%XX~+)cUDvva16msIUs7?hPFL)M{ce0G$Kr2L&6PwkMBr{A7LI;8v;h@Z57T-CI= zS%{z@<-Y~1QhtYOVfAOV{|SVpJok{35o{Al+8>%^$tO!ex5SK&mf$dM|}MLrngrqh{b z_yzcPufSfF-Dzn?R7T+oU@vm$r*U%zp?v!6{m- zJFXTs;!T$axKT9;=LG7?db0j95>bb`hw3De?iTfw(>N!stJL(=Gk~;yZ{UCllT@{6VX^6;OYL7AGn z0lIE0>%ULc;>}Rh27DiRta&pM&VJl zvK1iJN@(}E5j58xF!c##sweCOi4J|&DV&XJu>J+0l@Khm19d_EMWF6N)TiW50V$?M z)6XT|PJ!fV`Xs_oiC|4p*bKtjVKjRnc-w%*eiMK`nKJtm&^R0uhpA>q?-^`~4IreF%wo zmFcm_5AJ#?0a?gX54ENG`vG6FSUeiaA-Cp5LqDezg z0@>-enxs;n#re3Z&XHC|L``l3TiC6Ly^dtliTWwoNs>+3HIK+KTz!05(Ra;7$lUqF zjHP?=3iL(KZG^_rt3i6Xn;t9bCi!^_crnN+!4J+eKuk6_M0rC+NTMRh>u#!Lhd%ZwpOmyEw5Ysy^@QkG;XE02V$!08p0NezTL={q?N7onXd33bl-Gcb$o6k&^6}3Qnn|eZ zHZ5TpspifGwk#g8nM~+Za`C&Eog~sP4E4w9trt3y_RMnMh_Ut4*~F0wYO^e`3=bB!6ex6E6dwK_z84U^$ORuIG4v8x2xG#s=ipC zsimDGhCSR9LsCk?T+#-mp9+KyDynqoSCnrhU5`@e2O4yI1FFfEIx^97VBAR1bS>p2 zhs;zdBKqlS_8q*cw5WXYwm{ zy&zBxWl%q+e^+V-brbr>m1a3uZfzKvziOVZfG{4ap_g##H!fO?(nlRqA)=9!4t*C5 z)P@+dM-liVgu@+!XQ`S##si^|xWL3zSqzTmi129kwBR=wweKMJ_%P?Cu)NJ zu#!y>vI9wo>xXAR`mPT^9rOd7QqweT@Exj>7QsTIUSXWnD>Q8&Wx7{!zz~PND;3}n zx*kDhU>?%mFcFI6kRl;6q>PesZ75w4>ED$#jIXIfR|BVi%qeJP(5-!khEO@_IRgSU zt{!SW*F6=^w-=pCyG(y=@}R@UE^a>y0|aMn}s zWznRGhHD;?<*@E5zJK1)7$R!04k%Zx2wnfnwLvY_r0}~*CTTCCpvMu&Ep>^NIqAsEP0IX9 z%1vY*Pnjp8;vT}zaaCrR=YW;-daWi)#4W7ooKgRW!x5=1R*>jkNPm8Ut!AI~St~ zx$4-CX42ECm{ZWra5X$)={8HsrgyX|jABo065knd%639*1sX9)-nlb+#HDmu=F}7Zix?>p^xwHue{A z-PNVggxD`Ao0}Ax6x&YRZiObtO(pKlo1mMLL~|Bb&#eTzaG5~rmZP3%cSP?;?XFLk z4RH?$$%3H8+y~X+uG=PINRm~yQ@VC9h5F7ZGyvzrwcE(kZyunw>(x?X=Tqi)DKsN? z3c2=Q3eAdbC3n6>ORQ8o!3LPfHwVT2#T#rDwexVAS6gz>+zfW;fVk=4aQH7?(7E-VtQ)ou)DncJu z=z!QAXk@M@6q*%#BboZ8LI)utjV0+(1vJpC-gyjuNG~ zo~8ML6#j!l_)lD;nn`y=G4n7yr?_5t-x7XV3Qwg#y{an7j6F{1pA{M}X9Rya0i^_4 zf3K^M?gmM;ITx-nqKU<5F~z7M({*?(NYbHyh&-g`TciosNg<{Qfiqo47h96=IV3+& zlIN1-@6q*5*NJN^$xj@TpDM{^B)L#Dqc5JeB+m%Rl!vL^XgUWk8~dK^Mj}^LNDW2Y!+(Ss#FFpX8@Xeu}85bT*FS9wYfbpjuO0 znfhEyevngsh;CQbV2Gss7S)~P^6K;pa%q2*l6TWcIL2Xr0Yu#Lemh;xbuwacrO?;w z-vdXS`isfT2K`|WG`GC#8eo!b^T#-4&=2qRMk)Ua2vWXD|0~H4Fv)3?=ov%Mg7qpX zh^kbA)p{&o2vRgqVhAoJ!Ie^Qyd`*vK3NJzS;9`A+6r{Q|iJtKk zPWn74c#S3K)329;)I3b0XKX-#^oyk6eU{+G`VXWawK$XL86(kL^z)?PA1uN1^%tZd zHDZ(K8L_B5{ah({$`YKU(=`gErXFPyJtGBOOdlx)hofLJj-&K3fFVfz)FgVwE(%YU z6!ckw1NDVckb1vK^o*G};ciOQ;t3&k#1cFCffS>wn@Qx%T^KF&w}qGoptSZ* ze}E`2T}@3QXBLySzY4MQEwTTZDaGjeZ4x>21c|*U#4fYMUaFE}G(|9poOuR0>%BsZ z@|T(JzX#wzv9@x6ditQj^kZNB>F<#?oS~VDN#X;{Ut%1}+)b7GBVptX%gB%4v5Y+A zF!D1tLK7pC#52>$)o%%PFWQmx;oG$6B7OLdLwzr+)8xz~@yrLQ2)7CKd6xR^r2yd{ z&G1Yj522~GoVRH*A&68aWcdxg-Wfbv6yZupRdo(1cG5Sj*?WuZbFGZ5F|MPR)xgc1R* z4i&mCkA#MR6;F@shW#GVXi-84t~m6?my^)zV4W+327%KNYN@!BgeHKsNC>?LXonJ- z%a-z9CZT_V)e0eRD1Ss8%5?`gBhvtQ(N0FB12{njahLcb=)J5=mVv3y8i;TY|0T$? z2H^KML>qAs*lJ)SUjVR!C@%u|B`9Q~4)9@R;t-iASVbl_fNbJH#b~09=mfSH*vMM| z&@Yrm+zQ}H`Al-yQp8~cx-K240deS;T~B7J!J3){%CP$Zb%Y94e3yiN4%RXf8gmj5 z&ARExk%^|44#%>dwvhzT0O|I`r1mxB1sbU0r~w{VDp#_~uJci%bHrVHw4OvP?2IVIt_Ol?;Ybap=3M!J0S& zEUfBGpbG9#BFin2JtRUEtXGKIyau_AE~6MyO+F0_)~O;7hpGOBRH-tdO0_r|kIY7Q zkSf(+vv`0ufhsUxdBi_f(|7epNG4JxLX~Ro52Q-J-4ZpICDvmn6o9c;sfzHz6@Axq zQe7-mwF%U+d&5L7B@t@bRBWoW!%8IAD)uH4p^76B>O@|wA<)4O;`Lp3lL&Pp5~21% zyNl3a`|=ctQ2QW}Ymu%F6M2V3dXxw?#f~tM1VnZsHAS*A0qNc_kx3*%FBOuAjMz;l*p@SJ%__Y+DPOmH7r>92~wnrQYNwo@crRC(;SOsZ;QphUE5Rk+wNCyD53X;M% z?>_`B=;l2w^yWR~8jR~%u1Wf55KW86!0pP`RZG#*4uR>K%($5*7L0TF);}dp)JQJl z8JbBMhAaidVC>gt>N-6olDDI?bb3*Iz)m!6+$JvqtYwPQQ?n)`shQ0ZVIMVQui0By_I+L(qo|7B^(lXEH?tfJxe!CKcJd zAK*}Wz@k_4)k*vy9Zu=HMq}PMOw1^2CIDQASD<(wCwpI<@h%xLz66_KVUfL_`YJ@&8!@Y^@Uq#X7{S$rj6}SjU((i&>+VE0!>} zkjdI`pYq(N$pdddYFyKEgShUr^6eYQinTLuCh`jb;|e>P?eSPw&J%s>FI02sSn z30@8L*Q68lcyrtyMR%>!Xwwwo#1FYr#{JmlX2P!E{(`yVe`#|C=NaZ`qc0)fR2#~{ zP^jPg9V{7)X#@Fl@{4|7I27U&h&gdHuzX8~>8m3sMm~}g|Mon@K9QQC8p;Rtx zLnzOIbL0kva<`%*l=Rp__;3!ZjeF4Mu3_$Ui_3+EZU=KqnLFuPalehi^K*wg;}jhxUtp7!Jp7G#TyZ~OR;$JOtzyNaU5ng0nU%d>)i^nl{kn<| zA-MdAH4eJMWSTU|HYW>^=E>%T0;FlLStLN3ZJK2Qq}iQ$sQ_uBW6}f8Op~S)=2ZZP zUO|1VWQU5tHL^x=EnAA>4ik$dr7Hpc2#rHt%NEkL>@%QVaiuFKmx{copYJOh_|eas zpoya03x+tx?X$Tq*b6TBxMysxm$~2NN*MbO#eE1lUnJRR5!5j8`=ZG%^_yX;Aea@u zD#(UwpUL5+a?<0+GS&JX!E+SB`NVq~sJ`AMJi&LUWg^DAl`iXHI@sj>R zRh&=YUS)JDU^?_&DVQ)xqxsTkzlW8~5GkT1iy2W7so(7-nkSF49i?x9YKrh@^iM!e zeUP#la|MC#B3Sx4q>_Ri8#H|^foYRTZ_?ug-bb?80t^s!x&RLmHIKmbG?D8J(nCmo zMvTE7%Co_O2+FPt(d4D~L&yb$MC3e_)cTL0rwo+)FhVPV_NUUamAy1Z`F_Dx=#O!BTm=3{s4+L>Hm#tqsP+A^4&?^KJV=O`Rbs#3^iyQy3 z1Ibo$46;MVJx3%dWQy=qr!n$8KkJ*bg+iKb(}mKc(@JH=G|RLLc>gZ+|5QB}b_Qf4 z3DU=vCO4g=va+>{2hJSWluRXz7^tW|7X20*$G7f(!%p*Og&Nvg@Fq)0^VpG9ic@S}K{x;SbOh$`K)z)fBO$b~c9Xj2pjz zPrfLTJmH#;8HchAp~fK{jXR4|*a*T|?sx|ZrxJprl9-@`Q_&}qWMn8v{Wx05vJjr& z*ruSS5yf25a#L?YwY#!zn+@}6%s>m_U}o4APUZP`D&0|!ZsejxsA|>3sUG5-g)+G$ z@xdieusuz56d=iN!~M7b$uj63yS7s7+DhdPoW>nE-B~%ZLuS~OfNny+8698;6yvm0 zgTkK$d8^M34C_mSL|;PN8Y~NO$LxXB>9CL^yV%gsh!3*~QNkbI<_vCgZdv>oyZEue z<5HYGE+r=ROH4|n(J6GW;xHvpm@qN1BbekYeMk@MX9tctak3pXLOpgJra0=48Rhafgm2pn+{5s`6>4~>Md6vJIT$+k2dF7^|x3P3V9 zFAoG%+pwdZqO@X)(`{m^O{DzOESF=bjiuW)kYUw8%-Dg&>9WoCS8Wg`(OkJN1T|F_ z4Q{S>&@tbjwm#UdH8fHyuSCi#=o&H9QQPRp!-lGh$cn_3;<`4R+dVv#WB7<^)a20= zMkYd*hTBo3v;-qBD~*;T*chiV+(kOFg4S5uX|guXZdl_T4QoPJPn^hI?%W{O|F4=> zaI*<*RCXJ)8(whJ5?3QMtVqpD)q-eancT**c#<+uPErQZkWY<>E(1bz2sNvr&XyF^ zj)nzS?r{6M<_)gr5wf1CJB)PH^C(Hilkm{SG=^K?InL%p`eV7t5Te@8H)dxMHeRxT zVf96}#);f+&!u)t&XeFIDTv`*$Yuk@e2US@oC9uPvoS@W5yS4TxptXx6Z@4$I#IE) zJn$H*CNb@x(IRAGid$vp#8eJtX4D#>S%>3_oM1ag-OHY5ISqsi2AG1#K2C$aV*=o@ z%Pw0~ik%l`TXs%C<3GkbYBO{pX20M_e`oz-l;heJlU15;VPun+)Pb_z22s6*U3VQ# z2aPgh;yX-KHL89%*E!slGPoZJswiaWyd+g*rt0F(!M^MmB+t>X+B|B@9?Z2)SaE4J zWJ~`dxgXB->l6+DI=v4%xxKBGK3X=pwyJ6}zE!2fR{>OK_MrNhE@Jm&F z69_I1w{DT$AS3WXnkOUtYUiN-n#*mRq*L3arRh1Z%vdnv%G2pHW)Wo%oo?M(diTKT z`Ss`CKEp^bSG;}U?M8gIarMmEC-dj!6zBPk+AXdOH#0cx>~7wZ`P#mmBi~#`!ai1@kA(GG5Y77(ama>(IUr z+8@oDG0Vu?ZCq&X?li78Pnf@UjYRnNiVFN%;cIScYi_8C96o+Y&PdSHPYp2Q%{K>p zvaQ@0X3jV2X8yRtnDm%&scW?U+e@GQwUGp3>lQP|NLaC8r4e}ZvL6*voR-mP>#5?E z#YTL<6$2k{6F$<)N~E?vxsmrAouWmk?Yf!TR0ezDo;S-hhAW*kPYo^IUb zGT$_Quqj~N=-OfQAU&$@FusBGPe|`a`WDhXNI%nd7_V*GZS2t38b^S?tnFBEeVsYs zp-ay#xxg5*#n`fWt+8F7zo4zI{GM8n;Ki2WhW4`YEOhVDy~fK(@6>n9 zSU02d_BLb9gGS8>BXzg&)FyL9`m9M;EV}R_W5a_+R<@D2!nk6`U%z9t&s=E?dd#?b zesQDmmWHP@F1H@LC3d|zp#Os6oaw8~5tM1*Qlj5Nrx|prH(CQm+KI0xk|3@0uod@8 zK<;lCR|SmpEjc0w!CSvG2$_0m_l!$sEP$+W37y*Lbm=LF%-vTw5NKZp3B8+68-q>d zIx`7Ef(rAcOp7O5F;Yq~jW=Z}pCH)k8a z*Uf`(y=^48Cg{faY@-7$!+2iX^53tb?U`%edh3<9=r9gy4;mZi`;CpejfoF_N|fW9 z%sG0eb zTaAq~e}utX^yqJ)crI;Tl-NZYTd*Q3!$p9&goIvBc=^*9sbff-b#Y7krT65{x@hI3 zmBqQn;+g568ELxFGT;1faE%S~4X=p}99(XfnSWd7C2f-?Nu0r@Dk%7Zmnr)Zkt?NAE;|zBd(`44UJdPG=s0Le!rMP)Hhj{F&UX` z`LwphFZbT1521SJNwwZdi>7!d zA+)oqpfYK#_^{}tme%G#O;w<|6`WSuJ$!9*Yhz_V!v{e9ZI$b4{FSXWl_4cVxmA(< z^g2PUS>$ql_NtJsSgI|(C8`hY2R3%3|>33~!-?M-d< zwM{kEUJ-O`Q;bWMMj^50MTl;DjaFU1uD-3=R<92qt%gL_`Ky|-vyl*@Oznx!?1DK9mX;JO^%WIrwDUUl1`qJO zNb}EbZf+p`Dpg#Ol~&W*+T7}IY^&Ag7B4I)(U$v)%Zrwl70fBZEDxIyiyXD$g~jE? z;4T#;_P$Ea8T{1zY=4<3rl2r_v{tLG4A`~i&}-AMnkWf4*(iw+r@>-yGuxEE*+ zR5r+>EGSyCu%KdvzqF#Hym@q@9IdT2#7d$x44|LD|`) zuwOG~+_Q_z{l%pP^NRewf`x@8MgFq#CE5Z^LkrqB_^o}Or}$}SXFnJ$fuhJx6H$lyy#Np}(Z~>_ZHF+QBcR3yY}c zA_Ya|=jR)VC^F?#NYUTK^)5WRXLFb$;27@cI~k%H=(`3{^7B(qSkzD*Z6JW#ewYc1au`7VwL2O5nm<)mq=MBZl9<(E8FvF}BUO?cvh_QV$nv zzxZ%OH0Om!CHSfZRb?5zX;FZWH`s>4qvxmcV0aZ@BmYuCd;nyr{Qk$6iY}yYl0?am zcwcG&K`s@aDJiXN`BLFh@pThhEa>wXn)rM{G-ojEQnWSkJ%(sPT;of{7fwX5P~%z~ zW^eeIhQF?cKD5#nP5Y~tgKL65*CIa(ui^U$m{vuJq%5~aA92v=n<4nj{JLnej)rXq zDvDia@HJ<1#z!xr*|!@N(P2W3Ra#fNFut-%}+-v#m0ry@eH?>snQN+dpC;#XhA zh?axA*oyjTvkOUCU~Yvuc7x1Cd=n$6T;ls5B94BVvqle#_|!~DGmx&)Y&M!AO+%<# z*0e6f_hD?$qURG~fYGQNxE#qZrqF#zwCqrQ!q4CVDw=e#a~gg9L$p8o1yU3TsVyz6 zSuX}jXY&x>R|yKNyhueJ@8Bloy;OY>WMOll-2NVjW6b1A=ca-Qe`U3w25~vOMsd8TL#X)FPPC%YwTmCL-j|17EZvS(lV(0?1PgAzvd;nhH1vP%-4<<4{@v zj5Uq*(Xz69@fXoYr)cUSRn|lsKWI|t4>aQn*Q%j0;bT%?Zd)wD2)k?7M3c5JL2?~P zh~wfyUp}Kkpc#v_vZXQfO2aFMB-YkQ*V0ItNGBrH7h*@{R@q|Y^kYRutSYqIhRWs^ zU?rpVN`HG(<+{rH2J!hclBJcG4OV_6R@u4E z*yhDI$b>WOHG3f7HNLa$sx>nAhQ?Wcuu|t`-MWx7*!QG1F*4nk
uNqLLqsWnkTz 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 PFbxbimWL>WpxXZdbcV4= literal 0 HcmV?d00001 diff --git a/tests/test_printf.c b/tests/test_printf.c new file mode 100644 index 0000000..5df8faf --- /dev/null +++ b/tests/test_printf.c @@ -0,0 +1,6 @@ +#include + +int main() +{ + return 0; +}