From e3eebf6c098c6b581b8687760cc081b011668281 Mon Sep 17 00:00:00 2001 From: jukoo Date: Wed, 18 Mar 2026 14:58:15 +0000 Subject: [PATCH 1/7] check short option matching pattern --- Makefile.am | 20 ---------- config.h | 110 --------------------------------------------------- config.h.in | 109 -------------------------------------------------- configure.ac | 41 ------------------- 4 files changed, 280 deletions(-) delete mode 100644 Makefile.am delete mode 100644 config.h delete mode 100644 config.h.in delete mode 100644 configure.ac diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 81856b8..0000000 --- a/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -AUTOMAKE_OPTIONS = foreign - -SUBDIRS=lib - -bin_PROGRAMS=test -test_SOURCES=test.c -test_LDADD=lib/liboptkit.la -test_CFLAGS=-I lib - - -clean-local: - @rm config.status config.log - @rm Makefile - @rm -r autom4te.cache/ - @rm aclocal.m4 - @rm compile install-sh missing Makefile.in - @rm stamp-h1 - @rm *~ config.guess config.sub depcomp - - diff --git a/config.h b/config.h deleted file mode 100644 index 6060fcf..0000000 --- a/config.h +++ /dev/null @@ -1,110 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the 'asprintf' function. */ -#define HAVE_ASPRINTF 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and - to 0 otherwise. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the 'opem_memstream' function. */ -/* #undef HAVE_OPEM_MEMSTREAM */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDIO_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the 'strchr' function. */ -#define HAVE_STRCHR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the 'strrchr' function. */ -#define HAVE_STRRCHR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#define LT_OBJDIR ".libs/" - -/* Name of package */ -#define PACKAGE "optkit" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "jUmarB@protonmail.com" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "optkit" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "optkit 0.1" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "optkit" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "0.1" - -/* Define to 1 if all of the C89 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "0.1" - -/* Define to '__inline__' or '__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to rpl_malloc if the replacement function should be used. */ -/* #undef malloc */ - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported only directly. */ -#define restrict __restrict__ -/* Work around a bug in older versions of Sun C++, which did not - #define __restrict__ or support _Restrict or __restrict__ - even though the corresponding Sun C compiler ended up with - "#define restrict _Restrict" or "#define restrict __restrict__" - in the previous line. This workaround can be removed once - we assume Oracle Developer Studio 12.5 (2016) or later. */ -#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ -# define _Restrict -# define __restrict__ -#endif - -/* Define as 'unsigned int' if doesn't define. */ -/* #undef size_t */ - -/* Define as 'int' if doesn't define. */ -/* #undef ssize_t */ diff --git a/config.h.in b/config.h.in deleted file mode 100644 index 46f72ee..0000000 --- a/config.h.in +++ /dev/null @@ -1,109 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the 'asprintf' function. */ -#undef HAVE_ASPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and - to 0 otherwise. */ -#undef HAVE_MALLOC - -/* Define to 1 if you have the 'opem_memstream' function. */ -#undef HAVE_OPEM_MEMSTREAM - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the 'strchr' function. */ -#undef HAVE_STRCHR - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the 'strrchr' function. */ -#undef HAVE_STRRCHR - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if all of the C89 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Define to '__inline__' or '__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to rpl_malloc if the replacement function should be used. */ -#undef malloc - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported only directly. */ -#undef restrict -/* Work around a bug in older versions of Sun C++, which did not - #define __restrict__ or support _Restrict or __restrict__ - even though the corresponding Sun C compiler ended up with - "#define restrict _Restrict" or "#define restrict __restrict__" - in the previous line. This workaround can be removed once - we assume Oracle Developer Studio 12.5 (2016) or later. */ -#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ -# define _Restrict -# define __restrict__ -#endif - -/* Define as 'unsigned int' if doesn't define. */ -#undef size_t - -/* Define as 'int' if doesn't define. */ -#undef ssize_t diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 189890f..0000000 --- a/configure.ac +++ /dev/null @@ -1,41 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ([2.72]) -AC_INIT([optkit],[0.1],[jUmarB@protonmail.com]) -AM_INIT_AUTOMAKE -LT_INIT([dlopen]) -AC_CONFIG_SRCDIR([lib/optkit.c]) -AC_CONFIG_HEADERS([config.h]) - -# Checks for programs. -AC_PROG_CC -AC_PROG_RANLIB -AC_PROG_AR -AC_PROG_CXX -AC_PROG_CPP - -# Allow to use POSIX standard facilities -AC_SEARCH_LIBS([strerror],[cposix]) - -# Checks for libraries. - -# Checks for header files. -AC_CHECK_HEADERS([unistd.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_INLINE -AC_C_RESTRICT -AC_TYPE_SIZE_T -AC_TYPE_SSIZE_T - -# Checks for library functions. -AC_FUNC_MALLOC -AC_CHECK_FUNCS([strchr - strrchr - asprintf - opem_memstream]) - -AC_CONFIG_FILES([Makefile - lib/Makefile]) -AC_OUTPUT From 58981366b3b7bc672f4af4bf0602866859e9b950 Mon Sep 17 00:00:00 2001 From: jukoo Date: Tue, 24 Mar 2026 19:25:26 +0000 Subject: [PATCH 2/7] update meson build. For custom stream helper --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 7f35624..3cc3956 100644 --- a/meson.build +++ b/meson.build @@ -23,7 +23,7 @@ subdir('lib') executable( 'test_optkit', 'test.c', - include_directories:['lib'], + include_directories:['lib' , 'lib/bits/types'], link_with:optkit_so ) From e6b56c3e9f2f3abf5d6fd33ae3d7e17b953accac Mon Sep 17 00:00:00 2001 From: jukoo Date: Tue, 24 Mar 2026 19:27:07 +0000 Subject: [PATCH 3/7] add lib directory and update the .gitignore --- .gitignore | 1 - lib/.libs/liboptkit.a | Bin 0 -> 19160 bytes lib/.libs/liboptkit.la | 1 + lib/.libs/liboptkit.lai | 41 +++++++ lib/.libs/liboptkit.so | 1 + lib/.libs/liboptkit.so.0 | 1 + lib/.libs/liboptkit.so.0.0.0 | Bin 0 -> 26160 bytes lib/.libs/liboptkit_la-optkit.o | Bin 0 -> 18792 bytes lib/bits/types/optkit_cs_help.h | 198 ++++++++++++++++++++++++++++++++ lib/bits/types/optkit_t.h | 50 ++++++++ lib/meson.build | 8 ++ lib/optkit.h | 6 + lib/optkit.o | Bin 0 -> 14872 bytes lib/optkit_base.c | 47 ++++++++ lib/optkit_base.h | 182 +++++++++++++++++++++++++++++ lib/optkit_base.o | Bin 0 -> 14880 bytes lib/optkit_cs_help.c | 125 ++++++++++++++++++++ lib/optkit_macro.h | 45 ++++++++ 18 files changed, 705 insertions(+), 1 deletion(-) create mode 100644 lib/.libs/liboptkit.a create mode 120000 lib/.libs/liboptkit.la create mode 100644 lib/.libs/liboptkit.lai create mode 120000 lib/.libs/liboptkit.so create mode 120000 lib/.libs/liboptkit.so.0 create mode 100755 lib/.libs/liboptkit.so.0.0.0 create mode 100644 lib/.libs/liboptkit_la-optkit.o create mode 100644 lib/bits/types/optkit_cs_help.h create mode 100644 lib/bits/types/optkit_t.h create mode 100644 lib/meson.build create mode 100644 lib/optkit.h create mode 100644 lib/optkit.o create mode 100644 lib/optkit_base.c create mode 100644 lib/optkit_base.h create mode 100644 lib/optkit_base.o create mode 100644 lib/optkit_cs_help.c create mode 100644 lib/optkit_macro.h diff --git a/.gitignore b/.gitignore index 5803c66..b04947b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ bin/* build/* -lib/* example/bin/* example/build/* TODO.md diff --git a/lib/.libs/liboptkit.a b/lib/.libs/liboptkit.a new file mode 100644 index 0000000000000000000000000000000000000000..5eb8afa0205d0593295927bcbe630b0c0d5fa1fe GIT binary patch literal 19160 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%0AKV{d0 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 literal 0 HcmV?d00001 diff --git a/lib/.libs/liboptkit_la-optkit.o b/lib/.libs/liboptkit_la-optkit.o new file mode 100644 index 0000000000000000000000000000000000000000..12dda57714475ab927d51225fe1a8c9ad8249a81 GIT binary patch literal 18792 zcmcJWc|29y+rYP3$QV(HgeV!3QmH6%%rc}x9P>OLLxXz>*|QPuL_e(T44#ev)+Aw`(gbl4IqPx-FT#-3l z!_vLN;&$^?*l@3aBlcV!hs-w|mdxq4iw3l)K%2e)QwM<$_S}E?&SX|`6zz4N2-L9r zYtm~3SpIFa9)}#wv7Rh$mp%7|w>|f*g_ni5#j=;kc~7G%Z+^8VC`eyMEdxPnlZA&3 zcK|!hN`I}xh}bGkWfu1%3|$e4+oaE>eHN6-xI%kx&;4XnZ`8-oCZk3NK3SZVUZulI zuNGhl^s~}Usf1Uo>c7QV!+N;4xYsOYPWM#55zk2xU~#{*s{awO&ql|Ivfx^3%JNOo zC2>|}l}yHOv=K{gA1_i69o)2pZenGlTJ>`g6f}V=tQ=Yciz}?ja42ZgdkdLpF`H~L z3mG{p3RSFSQBjs>;4E#}DmzJB<{~=MFfFppG;OlIXw7xBKIEDuw+CXdN>ldYT$=Ez zR+)V)f8OL^2*3bGv3H#Dh><`(8~M24Gi$YVnfFP z6_kI@)ks!)t&S(m0Slj+AQ?4Fin@gSvNGzsfTp8S)yv3!q+yk&IL{Fj72Xh$J|5xy zWSjEcW#`Onn~ji;hxIN_ljpTJ~J9NVAcLsvtiqbOR$)5+P*#>vrJ zUteF{)568t6_xm^{%gMs8~-((q@w>X-U`!h}Vh z5pGt>bI!CkJos8x*&aDb&(8C@OL2rDzUJt^nitMt3{RX>F!`l?VP;mZ&h-JJvIjS zIf-6P9UF-e(}F}ti&sqP9M@R?#6nQUD0zETkmycvsVSXW@1~~re~`WwKOx=vP?At< zjc@9SIjxpYj06i#)SsxkGS=Dbs;}KUb^AIMDeco$oE_E99N}_fsnfZ)Zb&UCtrI8= zJ~rD-pgCMB@ou3&{nYf}lOqMTs=VI&I?Av$@MAS+i-oSquv|~6MAw76rzAUiiPn$w zGW*>yhG8~E^CRukD;~$5+OnfpKT&v! zj@vzj`uF=cI>>$&U!xOiFzJJ0>Ey#!&nDD_78dHPTmACGx{!^f^TiJDNr-)#<=C{& zM6JE|y!N?2O?PB&X};n(;JMR0a>m)H(_4i{!xldksLfwJ3(335krux>L zo{wb?uASkof9bh?X^qE7j!#`+*Q_z3rD3&J;V-6 zD4mx*v_);_vaCh#tzRBiu3l=`e*doM#oPqL57n1aubfqTuG;c+iBv5|<9p7_rg|OG zz;iRtN^xA;*jeIjcME;OWGC;D5NfZJm++S{>|k${E1meZdH&*U(H0>c+QF**hVS2w z8!&#d(?g)(+7!uMy}#YJz1(4c^G@u-jh9zm3+b6*KPBPtvfx7kTfeVA@$uTa?psd^ zjn;jeb6~9AXgSNZo7%@cNLx~*|EEXF(f5j`8KY}jmp?lccJqAq)ui=DI~UpyDAbp` zc@z&+MlC*BSE#1ju(`i~<0;|b8E3;T`Cm?)Y^p4Bsj{W0;qdMAlv({%Z#B_?&haY_ zmB_rbn*aFVnXpOTnVw1#XO>$vSGYer_vm)F{(~K-#p}N)Mz`*2>hiX>*!OXA<~IEd zGxN#edJX*oQI`1{tj5wWBOKq^h@|fH5!@CPS3h&~MvF#;td;AOzDntK_~uCbD-q&7 ztoXEoXiBof9~z&U3+9g4zFUL!*qsV?@AIZ6_vG(rjFu?Q2y;EAAOG)*1HO(+iuHz1 z>z?ag@%4Vd=dEhC&)fwL1{At&JwBkYx+^3rXRMmj?eVp0OEq(}VqFx@uDP$2JgvF@ z^Tn&zf_BDkpZ&s2x9@$%)-ZPdT=N#YShpo*f6Lpor!1eP+1Jpf7rMdP@oLqafg=CT zaCL!L7s>XuK1cS&iG6Iy3)NfHT&!9dd;O2@7bcC7!71^J)Ov*Tt9)CJM#L4292+%E z`atoBt76rk-$;6}rb_zcitmzs<&YX#G0w)QOs{`O&Q+2g=Y0At>xuosaJo3y$yjC>d zz7u~tz&3Z}%h;o%)n*-as9WLH&6%A0Dr=XGkA{cR#Z_`r^Ni}6ll}ACw?Cb||CDh3 z_t>q;Df4d%ZEiBto~0Y;+&ihoCiKY7aC`OqOZo36mb}$UzuLYk`qlS)+RJtYJb0Wl zyY|_W$yrUAlbWV`SZcKheHiAFw0Jbjq2B&n=!`u_FLn3+ImYF&tj?c#vn@|p?3(lU zjiVM9hwoO`Uip0DsMXVlOWd8=p(thF^v2KEB@j!3`PLlM4e~-b6K<%NCw8a;QAj{J~bWIq#XeT1DzO-;gbC z6EfFCLZt>Sj$qYGL zA+xabNV`Lwjp>3LM}EleSI&())Hu@a(7r_(++j^$caCV?Fzs=osBiyGwqVSis>Jwn z*TV?Alf-_sslsG1?uPB&wcv@dUo<=~H z?U@g0idWBce6mS12nrGs5%v4_E<^jpq}dPOP5It1_tVbNPS#OrM>mVOO;ga^HB-z* zwSL*;+s|Vo>$+KW+Bqc(xA*1LExDJnD076{(*(^66Mc*S827ErKD<)ylD!t>IvK6qALyR_=&-0{8-y_Azx4r#p&F5Hmu z_#E#XN=AC!DQ@~XS&|FZ&4SkYOTXxO`pDG4#bCbZ5;3(^=WTholBvyz{u|Sdl@Mo<;pWJ?HS{n*Ru1- z-WRv5G>`xON1OM8pZD{F|8YDcT^#HL*|NX=Q*_6^t3%XQYu&olVn#3T%DmH5{!LC? zKS4%gVbrt9h8q04=Rqa*L+x)2HNC-E+qpDEpnXuBg^p^*0V`gsV=G+k|3V9`A;r~H1%6E{dtNG)mmlR z^430ix5|dEjCd^W`rXhqIWNRp_six>r>p;T$gjH)yLWndk6c@u`qXp-`IeNYirsC0 zuCaS`MRb?<++wjYPfup0q|QFH$>Kzz_Kj1QQ{paptYtxAvi;fz5UdTytzB}!~SSjyi!u_ku*5vu$EvX3;0>5 zcSwygGoO%bpy=Ro_K8UQ!>;hZE7RMDNhvwC-BLNK|973n7T@hVg|`M3XnA&UUe+(^ zR&$Mw;jPH<`Djj@ugQfc*}lHMew2W;Xh6(rmCPH(wW+EUHPu02DiX#04*f?z&xWe1 zs_RwNRaALNYGzu2RYgWw#g4M_U1i&jXUjR*uCrQ}o~EkJ$rovGo44rN<;ziZ@?&ns zaX+gVpDbZPtxwqN^g?v1#TCPftEX8P z`IR(fjv04GE;e`F@v3=G?r3-U)oP2sajo{Q`s!5Tli0Fgz$Q|#VddP=tsc$_6%!N< zv-5Vm&)QHjZEd=B=2jc)ywH2LbLDazboSnB@Xs@Lz%i@Uv3 zkHfmc(NZn_g}KWW*#t>c#EvHuad-?AxSd%4Gg=V701 zKVDbSHFogHc~P3^IH~!)%k^HfU^G26Nj!%r&k&6spmaSUW?RV+5|Mkc6f4ZD~ zY4uVfU$QtU_pFofl`+3NHBMN_%Ki2#wm{&+omDlm&3mTgf8pjAed;UsSmkx--)Yz0 zau2f)2Bq1wfB3B;k%3l-_df(>F_*B_s_37T@UVhy`*pUMU#V_rL{}r zE-YTDr}-*Fxh7NgT&LZ!mX_kQ4P(!?1ltaT2V2UW({qUU^zMk=vTBRlpJE;2yRT&` z$9nb~u9e(3eeE3Owsx!YOP0RdEK!)h_34vZkKiJm#?0=TbE9XxT`|{T)5SFwjZ-QU zjz45K`ccapTnbD=r+bfDld|~p<5#&Wy9}f@^&)cq+_Eh;rUzt)8IDb1 zMRt!Xmp$iC6$%zr?wKO}u6MZg<03>yNU-2T(XKAC7UukxwzKA#c;%p z)gOK3w`o1FGB$0>iRHGOnb>qfxBA-zYZKY@r)f^zy6;BxrRg}=-mzRh>YglHx2N~( z?H7S(!V}l7{a$nQLG;IsZ8d$zAGB^&oh|cBXZr><#pab4SFQNVOm)XC=Q+`y{oOl< zH!mOS^}==9_l+$h+4UdH6rOockXYClWUT$PG51ZmOy|Br4Nh1<8f9`tf4i>A+b0V| z*_~Upls}d2-(GRs;~>YzBEd#;Q%b43+dmWCdozO%t|@A{Tcpss^tP!(zI$w1xzWE0 z`watbH2D@kF7VSB{>Iwx<;>f~)^FF8OMP6lIN|Kc!|v_6P9k%P->yvD9XS2<`C#dF zT-M|@*AAC{p0A#+d}XDOu6NS9aIahszv^S}b}bbfW4JIsben^FP*ClOSq3Gp9uC*j zTqWXXbJdg*w)GYioLlF+##i@%)t!)shIv`l_qZmTx3!nDiyOpptVc}{Jt3j>#ok0} zz*3>Ss`-1D*X$FD$KD?oah&+&uu{x+*#~TMD6M7ZUDS7%DALm`i&XIlin1!6^kAvC{B6hhw@Gyheb?8= zJU(h=y=T}dTZz3|Z1)pm8z$T=cYEHmY|G9!&-0e_88?1hF}&*c(ykdV?KD&_=eI=f zertcYOzWnahs@rhZQg(EmY<^-{qPW1_VK~`$!F%tm`KG>El${9Aw4~Era{ES<} zx0F(~9m+}L9x5HterUAgt%B#5y^kt0?|NB&Q98@+I&x<1o^{v6-Zza&j=Ook-OI6e z(L`#ObZKnjjNC^)(OtQXmn`~?rGK60%isjS=RtDewv86qm(8Uzzpf37k?T?4#bM`* z$c!~pnx)!iXrgO8?Edf36^e>ZD_0n7d@C|GN#0poKYfkU*bkhnV|}{fNyq+CPRuFr z8GiHFg*}aapPd%Fo>$pll>VEM!Hbh#y0W`OF4tLq!pzV|TZ0V72&MGoG3!8!k z<6eGSx$DBSZ>=UfUKD5^nD~3eGshj;+^)T!`aid|nyg!Rt^CxP1Q)utXH!Xrn@n+z z@ku>J&-%@a3N~(zdOqn+*2*Nxdj9;G>N?hr?z-wmQ}w6l8>vq*oMK`))sVOIi$;!a zJL>cw+GwNYC_ze~3Nbu>0jLk78A>Dg86~j7g%U`X6&NigCccRlM)$KZ(6$QY*3ylF zg3%Jv;uexDx@rn-dr>}5T6TlrJZa?|p?T8k>xC_(b=HVjNE@b$3a*ln*0GjWw~|(- zW#&nXTS?N5^QF~kVLm{*GC-F%+C-!AMnPJB1JacvJWpC@J<_#C)I!=cUCdJ2SLl&| zgtRG*Xic=p4^7sRXaUd&x-?KO?VB#PMs&SMj_?Mdje?GYcC(V?ja3{1#2c5Tv~0Ar zIA|I?L*l|z&%j`L6OjKjs8(Ii2a>0|wa@QxYOgeb8e z92a!yf&e`NOWsy6f8L-r-j+PWPaFkHkT)mf?PxB@(9erIQbZ>q3ePfr9sdeZlDPOw zE<{QFQpXh`3XEa^xez5!5PntY$E^OfS%~6oIsXE^c{Sd)^e@~GIB7W;IBXmK=o0~4 z<_F;yVu6n&cp~u01Yb$lNt;MyGyNw=A1_mA#K)x&IFjKdXqTX;!eDxi(n5prOEj0K zXGAJb2}SLNyqV4ilmBZ7{`U|Z?Y$1B=N-+FT|=0zSDnbyz0;iudfA%7}u~N zxcm@YWe7fY2(C2*pEd-aI|N@a1h=O-io+(jMBwWyx_=E8x4r$$sy$7 zjf1{F<%8ZfpqCGRae+ZWp;5s;3FsY#erS9gTi=ih4M^6XLb2n56CwknI6iTKu?d0k zoWKBmBPyQ5=Fk$*J%$|@AE@si9T7n3+s`*bKU2}q6!c?^eoWBMbjrut-f5nNy^qs^ z1+G?ZK5iEC?5%u$Xz`1pc=ml_XeWI95`uyP<7gjgTmIob{vqK$LF~{7EFBz3yUmUd zjABOy((c4X1V&N*?1+eHe^iU}4~e5910(%omg5dQC#guMoVb^1jYFPQ~g;~D&ShCI4g<8fsW9O*)-7C4HVG5v?-0aM6-v{t|z zjS(dz&m1q-hd6pajOFoqL4s!Rh(wnt3a?`jN2{sZ2+|3!tPoe=5&jRF+bCgodeM9ncz)*&cDN5L`8_cH}eEfqSLIa_bIq&zU{0gYs5d1U9I}?1B2p@P5 zJO=nOf`5d-^VfAh?J9wO{<`ibXM>&;LQe;9F2O@VPdULeAr8j~UJvpY2wnyC>jXax zdRhqn6vp+8;GQ7gL-2m!{REeVaiMhuO87Y9cqtRS7v#}8iYbqtA5fY?a2N0st)o!F z`qjW6v|eKJ?NCP_&@j0k)Po4V6a0xM_;k>pO7PPlzmed0y;ex@3vj#+5d13WIZbeU zJ*pu%K0g}?z6JER6Wjp&?;`kOu=|nVS)fN4`r$aA;D?ctBlvPSE@KIf?&T;=BKSI} zn-csr__KiErNCVXK9R4UT1xOuQ2&kK$6%aU1YZE-#rIP@-uoa|N64=PJ?nM}{EWzDCehR@gp+1A)U%^jHg0BTX7ZSVy>dOf33VI?4ZVLV+ z6FeDsCc)Q0J(u8Rpno^PSG9=5AoL_xB%3x2tE;s7~j_>2 zyn(@)dRiD9>8SzvHiDl4{*2(Cfp-%8J@EIy@wj;3tq2~{6MQ`I1;EKTI5FgrKNHa4>Ey%U$R8Hy@h3Qb4v8Q* ze%^>7INk?LU~s10-xwU(<$&GQ1djo}7C0W)0pvWLiU^M0d!clW;4k@@Y9%;&Z-i1O zaFn5WxElCJg5!0OAiVO#@_1i$IKk_Xayls!+y;*Cc!Ep8x@!i(&p;gL*W0{=?RJ44 zFM^7^BMBUb-aIGLdct=iyWPf5j+%lCBer6 zZzp&?9G5PFTY^8m1djqf98P@H9r=mhlPdwo@jMTMo@QAoZ!76pGa`LuarjccMzX#1UCi!B?PYl{l^H7?N$;T+r3I~eE!}Cj@$s% zytwr+H3aU?H$%Tkrq_m0Mp+V+N%;*7 z&Xg}@a1;mpoK-sn|1tz04Sr#}__;=x!L^_-%4Q6~Z5bT-gY|?D!STKwYG%rB9zq`L z!}2<)6P^AhJ=KdiRGC*0Y~qrSP5}=2gJ49n5b5H-{YaR;XJM{BNk+61)rQP6WsM z9&QBx2K6Nb7l!yV-_xP^pznK7!tua<;&oaGzxhWT#({h!!S#X15gcES@bwexp9k{z z{(!k1@H9ftBH-D;Q5DTAoNf^33*O)R!r;vLsSX{H4yGP6f~P_~i{N&O03`ti#nIcz^V=fv^z5L}82j9}|?=>J`&^aI!&Hl^Zn0{s$#eL|yxqG>g}GTV>-Bq{NiX8KEeJuRPUd}g1ohyk1pSz}X!=tg z4t6>)#3v{YeSGwPP3p7)6nfb9`=QPpN_Za^H>l$Rxhcfe=K<(z>KYkyK7)t8A-=9AYbP?$y;~xR*G>xC4yb`vHF^et?7JpOd zh}uy?@kd*2IG#BEY?|?O;s&~o(k8Hv-y87h&;GdXMHdFMp9=OHNAe|+eYDkq&0zcJ zx;UtPcur~{28{djwNg~-5dD3J^CfQnFa1~2VuShb3@;x3gaeEGM~?#7KK37dcQTm& zhUg)JPUstPX2Sh3+e8-zvo8)WdRQQc?4$2!aDQwc?K2E!KLqSAhyFOj{c(LST^P*1 zGuUqhL1Z7DO1M9^f01T`+3y7VIS@Zk^P@kmpQQ_f+1HuFm%!^{WFPH&koK?B4B0ot z4Rjf$WF$WA#8+G{;t{YE~ayp?nj-vm_{^*)QUi)c8ZHK_)=Q6}lB8J2J SMr^SD*UWk16ghsf|Nj6{E)bXi literal 0 HcmV?d00001 diff --git a/lib/bits/types/optkit_cs_help.h b/lib/bits/types/optkit_cs_help.h new file mode 100644 index 0000000..13083fb --- /dev/null +++ b/lib/bits/types/optkit_cs_help.h @@ -0,0 +1,198 @@ +//!SPDX-License-Identifier: GPL-3.0 +/* + * - Optkit helper cookiestream + * A Custum memory stream io + * for helper or usage . + */ + +#if !defined(_SYS_TYPE_OPTKIT_CS_HLP) +#define _SYS_TYPE_OPTKIT_CS_HLP + +#if !defined(_GNU_SOURCE) +# define _GNU_SOURCE +#endif +#define _FILE_OFFSET_BITS 64 + +#include +#include +#include + +#if defined(UNISTD_H) +# define HELPER_STREAM_BUFFER_SIZE sysconf(_SC_PAGESIZE) +#else +# if !defined(HELPER_STREAM_BUFFER_SIZE) +# define HELPER_STREAM_BUFFER_SIZE 0x1000 +# endif +#endif + +//!NOTE : define helper usage as vector table +enum{ + USAGE_SECTION= 0, +#define _USAGE_SECTION {0x000,0xff} + SYNOPSYS_SECTION, +#define _SYNOPSYS_SECTION {0x100,0x3ff} + HELPER_SECTION, +#define _HELPER_SECTION {0x400,0xbff} + FOOTER_SECTION, +#define _FOOTER_SECTION {0xc00,0x1000} +}; + +#define NSECTIONS 4 + +typedef char iocookie_stream_buf_t; +typedef iocookie_stream_buf_t iocbs_t [HELPER_STREAM_BUFFER_SIZE] ; + + +typedef struct __section_t section_t ; +typedef struct __membuff_cookies_t membuff_cookies_t ; +typedef struct __optkit_memsb_t optkit_memsb_t ; + +struct __section_t { + size_t _begin, + _end; + union { + off_t _coffset ; //used to remember where were you last time + } ; +}; + + +struct __membuff_cookies_t { + char * _sbuff ; + void * _ebuff ; + + size_t _endpos , + _page_allocation; + + off_t _offset, //used for rewind + _checkpoint; //used for persistant checkpoint + +}; + +typedef struct __section_t sections_t[NSECTIONS]; + +struct __optkit_memsb_t { + struct __membuff_cookies_t *_msbio_cookies ; + sections_t _scope_interval; + unsigned char _partition_index ; +}; + +struct __page_io_location_t{ + void * _io_location_address ; + struct __section_t _chunck_part; +}; + + +extern FILE * optkit_stream ; +extern struct __optkit_memsb_t ctx_cookies ; + + +static inline struct __membuff_cookies_t* +__setup_membuff_cookies(void) +{ + struct __membuff_cookies_t * mcookies = malloc(sizeof(*mcookies)) ; + if(!mcookies) + goto _free_mcookies ; + + + mcookies->_sbuff = malloc(HELPER_STREAM_BUFFER_SIZE) ; + if(!mcookies->_sbuff) + goto _free_mcookies ; + + + mcookies->_page_allocation = HELPER_STREAM_BUFFER_SIZE; + + mcookies->_ebuff = (mcookies->_sbuff+HELPER_STREAM_BUFFER_SIZE) ; + mcookies->_endpos = mcookies->_offset = 0 ; + + return mcookies ; + + +_free_mcookies: + free(mcookies) , mcookies=00 ; + + return 00 ; +} +static inline struct __page_io_location_t * +__get_partition_location_address(struct __optkit_memsb_t * new_ctxc) +{ + unsigned start = 0 ; + struct __page_io_location_t * ioloc = malloc(sizeof(*ioloc)) ; + if(!ioloc) + return 00 ; + + struct __section_t secpart = new_ctxc->_scope_interval[new_ctxc->_partition_index]; + + ioloc->_io_location_address = new_ctxc->_msbio_cookies->_sbuff+secpart._begin ; + if(ioloc->_io_location_address > new_ctxc->_msbio_cookies->_ebuff) + { + free(ioloc) , ioloc = 00 ; + return (void* ) -10 ; // overflow code + } + + return ioloc ; + +} + +static inline size_t +write_at(struct __page_io_location_t * ioloc , const char * ubuff , size_t wbytes) +{ + ssize_t limites = ioloc->_chunck_part._end - ioloc->_chunck_part._begin; + ioloc->_chunck_part._coffset+=wbytes; + + if(ioloc->_chunck_part._coffset >limites) + return -1 ; + + + memcpy(ioloc->_io_location_address,ubuff , wbytes) ; + return ioloc->_chunck_part._coffset ; +} + + +static inline void * __expand_buffer(struct __optkit_memsb_t * new_ctxc) +{ + char * buffer_expension = 00 ; + struct __membuff_cookies_t * mbios = new_ctxc->_msbio_cookies; + + mbios->_page_allocation<<=1 ; + buffer_expension = realloc(mbios->_sbuff , mbios->_page_allocation); + if(!buffer_expension) + return 00 ; + + mbios->_sbuff = buffer_expension ; + mbios->_ebuff = (mbios->_sbuff+ mbios->_page_allocation) ; + + return new_ctxc ; + +} +struct __optkit_memsb_t * +init_memstream_buffer_cookies(void) ; + + + +/* Predefined Hooks for cookies stream io manipulation */ +static ssize_t +iomem_write(void * ctx_cookies , const char * buff , size_t wbytesize) ; + +static ssize_t +iomem_read(void * ctx_cookies , char * buff , size_t rbytesize) ; + +static int +iomem_seek(void * ctx_cookies , off_t *offset , int whence) ; + +static int +iomem_close(void * ctx_cookies) ; + + +static struct __optkit_memsb_t * +__update_context_cookies(struct __optkit_memsb_t * ctx_cookies, int partindex , int iomode_flags) ; + +static struct __optkit_memsb_t * +wupdate(struct __optkit_memsb_t * ctx_cookies, int partindex); +static struct __optkit_memsb_t * +rupdate(struct __optkit_memsb_t * ctx_cookies, int partindex); + +size_t +optkit_wat(int partion , const char * fmt , ...) ; + + +#endif //! _SYS_TYPE_OPTKIT_CS_HLP diff --git a/lib/bits/types/optkit_t.h b/lib/bits/types/optkit_t.h new file mode 100644 index 0000000..5f6970e --- /dev/null +++ b/lib/bits/types/optkit_t.h @@ -0,0 +1,50 @@ +/*SPDX-License-Identifier: GPL-3.0 */ + +#if !defined(_SYS_TYPES_OPTKIT_T_H) +#define _SYS_TYPES_OPTKIT_T_H 1 + +#include +#include +#include + +#if defined(__has_feature) +# if !__has_feature(nullability) +# define _Nonnull +# define _Nullable +# endif +#else +# define _Nonnull +# define _Nullable +#endif + +typedef struct __base_optkit_t { + struct option _lopt; + const char * _description; +} base_optkit_t ; + +typedef struct __optkit_t { + struct __base_optkit_t * _optkit_base ; + char * _sysnosys ; + char * _footer ; + union { + struct __optkit_meta_t *_optkit_mcollect ; + }; + +} optkit_t ; + +typedef struct option gopt_t ; + +typedef struct __optkit_meta_t { + gopt_t * _ds_goptl; + char *_shortopts ; + unsigned int _max_entries ; +}optkit_meta_t; + + +typedef struct __optkit_recbuf_t { + FILE * _bmrec ; + char *_bptr ; + size_t _bytes; +} optkit_recbuf_t; + +#endif diff --git a/lib/meson.build b/lib/meson.build new file mode 100644 index 0000000..4c1fa41 --- /dev/null +++ b/lib/meson.build @@ -0,0 +1,8 @@ + +optkit_includes=['bits/types'] +optkit_sources=[ +'optkit_base.c', +'optkit_cs_help.c' + ] + +optkit_so = both_libraries('optkit' , optkit_sources , include_directories: optkit_includes) diff --git a/lib/optkit.h b/lib/optkit.h new file mode 100644 index 0000000..38e1f6b --- /dev/null +++ b/lib/optkit.h @@ -0,0 +1,6 @@ +//SPDX-License-Identifier: GPL-3.0 + +#if !defined(__optkit_h) +#define __optkit_h +#include "optkit_base.h" +#endif diff --git a/lib/optkit.o b/lib/optkit.o new file mode 100644 index 0000000000000000000000000000000000000000..6c43937d28257a5f460cf37eaef8d4e4fc8dcdec GIT binary patch literal 14872 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 NI(1iZQGS#4{|Cls&71%L literal 0 HcmV?d00001 diff --git a/lib/optkit_base.c b/lib/optkit_base.c new file mode 100644 index 0000000..b14a783 --- /dev/null +++ b/lib/optkit_base.c @@ -0,0 +1,47 @@ +/*SPDX-License-Identifier: GPL-3.0 */ + +/* TODO: + * - [] Build the helper + * + */ + +#define _GNU_SOURCE +#include "optkit_base.h" +#include +#include +#include + +char * optkit_pbn =(char *) 00 ; +optkit_meta_t mopt = {0} ; +optkit_recbuf_t helper_record= {0} ; + + +char * optkit_get_basename(char *const * argv) +{ + int jmp_idx = 0 ; + jmp_idx ^=HAS_RPATH_SYMB(*argv) ; + + return optkit_copy_bn(*argv , jmp_idx) ; +} + + +void optkit_parse(base_optkit_t *restrict options, char * const *av) +{ + optkit_pbn = optkit_get_basename(av) ; + mopt._max_entries = __optkit_get_entries(options) ; + mopt._ds_goptl= optkit_extract_option(options , &mopt); + + if(!mopt._ds_goptl){ + optkit_err(optkit_extract_option) ; + return ; + } + //optkit_show_usage() ; + return ; +} + +void optkit_show_usage(void) +{ + setvbuf(stdout , 00 , _IONBF , 0); + printf("%s", helper_record._bptr); + +} diff --git a/lib/optkit_base.h b/lib/optkit_base.h new file mode 100644 index 0000000..539884c --- /dev/null +++ b/lib/optkit_base.h @@ -0,0 +1,182 @@ +//SPDX-License-Identifier: GPL-3.0 + +#if !defined(__optkit__base_h) +#define __optkit_base_h + +#define _GNU_SOURCE + +#include "optkit_macro.h" +#include "optkit_t.h" +#include "optkit_cs_help.h" +#include +#include +#include +#include +#include +#include +#include + + +//! just one record is enougth ... +extern optkit_recbuf_t helper_record ; /*Record helper in memory buffer*/ +extern optkit_meta_t mopt ; +extern char * optkit_pbn ; + + +//! Or use strlen +#define chrlen(str) __get_amount_nsize(str , 0) +static inline size_t __get_amount_nsize(const char * basename , int index) +{ + size_t size = strlen(basename) ; + if(0 < index) + size-=index ; + + return size; +} + +static inline char * optkit_copy_bn(const char * basename , int index) +{ + ssize_t bytes_copy = 0 ; + bytes_copy = __get_amount_nsize(basename , index) ; + char *s = (char *)00 , + *bn_addr = (char*)00 ; + + optkit_pbn = calloc(sizeof(char) , bytes_copy); + if(!optkit_pbn) + return (void *)00 ; + + index += (index > 0) ; + s = strrchr((basename+index) , '/'); + if(s){ + index +=(s-(basename+index))+1; + bytes_copy-=index-1; + } + + //!TODO::NOTE: release optkit_pbn ; + return memcpy(optkit_pbn ,(basename+index), bytes_copy); +} + +/* retrieve the number of flag given and also the max size of + * need for short options + * */ +static inline size_t __optkit_get_entries(base_optkit_t * options) +{ + size_t entry = ~0 , + shopt_len = 0; + + while( (options+(++entry))->_lopt.name ) + shopt_len+=-~(options+(entry))->_lopt.has_arg; + + return (entry<<8|shopt_len); +} +//! build pattern for shortoption like : "xxx:x::" +static inline void __optkit_build_sopt(char * _Nonnull sopt , const gopt_t lopt) +{ + + static int idx = 0 ; + char *args =00 , *s = 00; + asprintf(&args , "%c?%is", *lopt.name, lopt.has_arg); + + s = strchr(args , '?') ; *s='%'; + sprintf((sopt+idx) , args, (0 < lopt.has_arg ? ":" :"")); + + s = strchr(sopt , 0x20); + if(s) + *s=':' ; + + idx = strlen(sopt) ; + free(args) ; + +} + +static inline int __optkit_init_bmrec(void) +{ + + + /* + if(helper_record._bmrec) return 0; + helper_record._bmrec = open_memstream(&helper_record._bptr , &helper_record._bytes); + + return (helper_record._bmrec) ? 0 : ~0 ; + */ + return 0 ; +} + +static inline size_t __optkit_breffing_usage(int argreq) +{ + char usage_brief[][0x64] = OPTKIT_USAGE_CLASSIFICATIONS ; + //optkit_write_at(USAGE_SECTION,"Usage :%s %s",optkit_pbn , *(argreq + usage_brief)) ; + return 0 ; +} +/* Record options in memory stream buffer */ +static inline size_t __optkit_record_helper(base_optkit_t * option) +{ + (void *) init_memstream_buffer_cookies() ; + static size_t argument_requested=3, + help_caddr=0, + stat = 0; + char *s = 0 ; + if(argument_requested){ + argument_requested^= !(option->_lopt.has_arg^stat) ? option->_lopt.has_arg: stat; + if(stat != argument_requested) + stat = argument_requested ; + } + + asprintf(&s , HLPFMT , option->_lopt.val ,option->_lopt.name, option->_description); + + /* + optkit_write_at((HELPER_SECTION+help_caddr),"%s" ,s) ; + help_caddr+=strlen(s) ; + free(s) , s=0; + */ + + + return argument_requested ; +} + +static inline gopt_t * optkit_extract_option(base_optkit_t* options , + optkit_meta_t *__restrict__ meta_option) +{ + unsigned int entries = 1 , + shopt_size =entries, + idx =~0 , argn =0 ; + + entries+= (meta_option->_max_entries >> 8) ; + shopt_size = meta_option->_max_entries & 0xff ; + + gopt_t * super_opt = (gopt_t*) 00 ; + super_opt = malloc(sizeof(gopt_t) * entries); + if(!super_opt) + return (void *) 00 ; + + meta_option->_shortopts = calloc(sizeof(char) , shopt_size) ; + if(!meta_option->_shortopts) + { + free(super_opt) ; + return (void *) 00 ; + } + + while(++idx < entries){ + memcpy((super_opt+idx) ,&(options+idx)->_lopt, sizeof(gopt_t)); + + /*!collect and build short options */ + base_optkit_t * single_opt = (options+idx) ; + if(!single_opt->_lopt.name) + continue ; + + __optkit_build_sopt(meta_option->_shortopts, single_opt->_lopt); + argn =__optkit_record_helper(single_opt) ; + } + + + __optkit_breffing_usage(argn) ; + assert(!strlen(meta_option->_shortopts) ^shopt_size); + + return super_opt ; +} + +extern char * optkit_get_basename(char *const * argument_vector) ; +extern void optkit_show_usage(void) ; +extern void optkit_parse(base_optkit_t * __restrict__ _Nonnull options , char *const *av) ; + +#endif diff --git a/lib/optkit_base.o b/lib/optkit_base.o new file mode 100644 index 0000000000000000000000000000000000000000..c1ebdeb3c7f6b7cd8a8e5de18bdf61f41225ad11 GIT binary patch literal 14880 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 Jo_DhU{{RmR&N2W1 literal 0 HcmV?d00001 diff --git a/lib/optkit_cs_help.c b/lib/optkit_cs_help.c new file mode 100644 index 0000000..468990b --- /dev/null +++ b/lib/optkit_cs_help.c @@ -0,0 +1,125 @@ +//!SPDX-License-Identifier:GPL-3.0 + +#include "optkit_cs_help.h" +#include +#include + + + + +//!NOTE::Warning: THIS ! is a shared resources between ios stream operation +//! : on memery buffer. + +FILE * optkit_stream = (FILE *) 00 ; +struct __optkit_memsb_t ctx_cookies = {00 , { + _USAGE_SECTION, + _SYNOPSYS_SECTION, + _HELPER_SECTION, + _FOOTER_SECTION +}}; + +//init_memstream_buffer_cookies(int lock_permission) +struct __optkit_memsb_t * +init_memstream_buffer_cookies(void) +{ + ctx_cookies._msbio_cookies= __setup_membuff_cookies() ; + if(ctx_cookies._msbio_cookies) + return 00 ; + + cookie_io_functions_t hooks = { + .write = iomem_write, + /*.read= iomem_read, + *.close=iomem_close, + *.seek =iomem_seek + */ + }; + + + optkit_stream = fopencookie(&ctx_cookies , "rw" , hooks) ; + + if(!optkit_stream) + { + free(ctx_cookies._msbio_cookies), ctx_cookies._msbio_cookies=00; + return 00 ; + } + + + return &ctx_cookies ; +} + +static ssize_t +iomem_write(void * ctx_cookies , const char * user_buffer , size_t wbytes) +{ + struct __optkit_memsb_t *new_ctx_cookies =(struct __optkit_memsb_t *) ctx_cookies ; + struct __membuff_cookies_t * mbios = new_ctx_cookies->_msbio_cookies ; + struct __page_io_location_t * waddr_offt = 00 ; + + size_t global_offset = mbios->_offset + wbytes , + local_offset = 0 ; + unsigned int partition_idx = new_ctx_cookies->_partition_index ; + char *buffer_expension = 00 ; + + /* + * Expand the page buffer when the global offset reach + * the end of buffer. by doubling the size of _page_allocation + * */ + if((global_offset &~(mbios->_page_allocation-1))){ + if(!__expand_buffer(new_ctx_cookies)) + return -ENOMEM; + } + + waddr_offt = __get_partition_location_address(new_ctx_cookies); + + local_offset = write_at(waddr_offt , user_buffer , wbytes) ; + if(-1 == local_offset) + return -EOVERFLOW ; + + //update the local offset of the current partion index + new_ctx_cookies->_scope_interval[partition_idx]._coffset+=local_offset ; + + //!update the global offset + if(mbios->_offset < local_offset ){ + mbios->_checkpoint= local_offset ; + mbios->_offset = local_offset ; + } + + free(waddr_offt) , waddr_offt =0 ; + return wbytes ; +} + + + +static struct __optkit_memsb_t * __update_context_cookies(struct __optkit_memsb_t * ctxc , int partition_index , int iom_flags) +{ + ctxc->_partition_index = partition_index; + + if(0 < iom_flags){ + //in read mode ; + struct __section_t p = ctxc->_scope_interval[partition_index] ; + p._coffset = p._begin ; + memcpy((ctxc->_scope_interval+partition_index) , &p , sizeof(p)) ; + } + return ctxc ; +} + +struct __optkit_memsb_t * wupdate(struct __optkit_memsb_t * ctx , int partition_idx) +{ + return __update_context_cookies(ctx , partition_idx , 0) ; +} +struct __optkit_memsb_t * rupdate(struct __optkit_memsb_t * ctx , int partition_idx ) +{ + return __update_context_cookies(ctx , partition_idx , 1) ; +} + + +size_t optkit_wat(int partition , const char * fmt , ...) +{ + size_t bwriten=0 ; + va_list ap ; + va_start(ap , fmt); + ctx_cookies = *wupdate(&ctx_cookies , partition) ; + bwriten = vfprintf(optkit_stream , fmt , ap) ; + va_end(ap) ; + + return bwriten ; +} diff --git a/lib/optkit_macro.h b/lib/optkit_macro.h new file mode 100644 index 0000000..c558f8e --- /dev/null +++ b/lib/optkit_macro.h @@ -0,0 +1,45 @@ +//!SPDX-License-Identifier: GPL-3.0 + +#if !defined(_M_optkit) +#define _M_optkit + + +#define HAS_RPATH_SYMB(__pn) !(0x2e2f ^ ((*__pn)<<8|(*__pn+1))) +#define __sterr__ "%s" , strerror(*__errno_location()) + +#define optkit_err(f) \ + do{perror(#f), fprintf(stderr , __sterr__);}while(0) + +#define HLPFMT " -%c, --%s \011\011%s\012" + +#define optkit_write_at(offset_region , ... ) \ + sprintf(offset_region , __VA_ARGS__) + +#define OPTKIT_USAGE_CLASSIFICATIONS {\ + "[OPTION]... [ARGS]...",\ + "[OPTION]...",\ + "[ARGS]...",\ +} + + +#define optkitnull {{00 ,0 ,00,0}, 00} +#define __shopt(__loption) (__loption[0] & 0xff) + +/*NOTE: Suggestion + * #define optkit_begin(identifer , sysnopys , footer) + **/ +#define optkit_begin(identier) \ + base_optkit_t identier[] = { + +#define noarg(__loption , __description) \ + {{__loption ,0 ,00, __shopt(__loption)} , __description} + +#define rearg(__loption , __description) \ + {{__loption ,1 ,00 , __shopt(__loption) } , __description} + +#define oparg(__loption , __description) \ + {{__loption ,2 ,00 , __shopt(__loption)} , __description} + +#define optkit_end optkitnull } ; + +#endif//_M_optkit From 30bfb726a0946caf63926b470e9d71c9fd25687a Mon Sep 17 00:00:00 2001 From: jukoo Date: Tue, 24 Mar 2026 19:27:56 +0000 Subject: [PATCH 4/7] delete hidden files --- lib/.libs/liboptkit.a | Bin 19160 -> 0 bytes lib/.libs/liboptkit.la | 1 - lib/.libs/liboptkit.lai | 41 -------------------------------- lib/.libs/liboptkit.so | 1 - lib/.libs/liboptkit.so.0 | 1 - lib/.libs/liboptkit.so.0.0.0 | Bin 26160 -> 0 bytes lib/.libs/liboptkit_la-optkit.o | Bin 18792 -> 0 bytes 7 files changed, 44 deletions(-) delete mode 100644 lib/.libs/liboptkit.a delete mode 120000 lib/.libs/liboptkit.la delete mode 100644 lib/.libs/liboptkit.lai delete mode 120000 lib/.libs/liboptkit.so delete mode 120000 lib/.libs/liboptkit.so.0 delete mode 100755 lib/.libs/liboptkit.so.0.0.0 delete mode 100644 lib/.libs/liboptkit_la-optkit.o diff --git a/lib/.libs/liboptkit.a b/lib/.libs/liboptkit.a deleted file mode 100644 index 5eb8afa0205d0593295927bcbe630b0c0d5fa1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19160 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%0AKV{d0 z)~&qWA6XL>UG>FQCI0oDeZgV@makOiEiz7te=Xhh*!a$^WQMz2j^?Gf+G-!)oW2ci z?m17Ds&4HYux-{WN>D%aL89o}r!C(ecKsbVTSuTe<4CoX-=~X_hST!z2Bj4JsGru{ zb6j$Gw(C|qk?)qxEyiLy%TmN==PenC{ZMqtU$}VFHJv#m-=@O)T>Uv$MUX7R4$Eg$;lb=p~M{>mzse zPFY%;JNy1+_mjsGtCglcTHddow&wJawGAtCoqkn5o!?7iUu_rKFVkPv_`|Vef2(9_ z$GyXeo-CiRNhfQ(au0kyw5Bvs#kf@AROXa*E~fk34m(fJvb{fd(Hw6Rufyds4^2PW zDAo3sPQ5KQBil2mT}*fALCxx&5p$eYR_#2qwmO%- z*;s$E=lopL+dCF)6=}N`bu)kIw*z10dVOz6FQUDF@y}m5woZH2S#(SKMa6q&NqQHH z-_reevTU!6PQ#PoPhtyCDt=0_j1OcCiOekD-f9)npuO#%N11C`)0h2iJ8YcbqF1Kd zTiN_+YgN?AaWgMgFwL(EtSr@k@6I>>^0<%P?@B-S=otMwRlvxiE4}Kcz@x$axO`eSJh`2H4#TY|#+UvT77lC=gNppm^$p z8t>GHXWsKD?(%#pe})y3xoxXALrr&mMV?wnR7=XSN6!^9?GpK=tQP0$_KVvJwyF{< zW9Y5s(&GpI-I?>b?hwu9#)JH2tic@BxWed{@(V>0%V!v@YMZ7imBg%!(qPx_>pCGV z+fiLy_0d7X_j#J@ul+ePiIqJS%KcL#C;T*=s?z3j!XR}+Vu532qEwQ%#+rETcok)D zZKXF2`#$A~eK?gVAGX0$EBdhev#-CVSxd zjCy|V#)Yrje)bgoD1Eu$=bJaLLte^mOgPmV(*M|?IZdu?V!O(rT{9&dezJyo2fu9b zpRx1nrk0-m1_O=ygOzWG%5R*x5qdO9D!Tmh^9aem3*H}mZ&Wt0U9@6k6{&0jwpH#x7OX(&B*v*%pb z_a4HTcD>Je=PAbNpYZh0jMes|+gjY9n_uC**;&6ZM9V~)E`G2ix#DJ5+_KP$_4iG5 zpDP@4l(A`io4!<8*j#m8^??kBNj{1WK?nbJJ9WLYq)9r8xvW_I@rj(qxb=$TY*GqT z?Zw_t@v=SpHS*%UhkcJ+(uXGYmgy1$R$mr9d$^CW^UL?|KM(#j<>M0@nVI?HAIYY* z%2){Hd zJ#4*~u75`E+MdJed+E`R8dqM*y~>sUT3MYtfDrn@BTb)M#SV*O7z&BRx^6T5)1lN1tSXHOKnWea1nV>P?po+{=;gWZK?F> ztk`Xu>hFpiRmG2~2JO9E?`LzUPRS*@ef{~tRnlTA){ne-SsjB>N6Xp=o97>Xm!WWG z&i2dgD-SENJ97tq{b*^PpJaVE@5;4s8#0x%Cp*qg?0Bkn(L4!m8Pjf*P?6Ev^2ElYv^cj_ME_-2Hb9FkVvcq#xx?dO4M zA(DYGm3ts~Hro(9k>WhlCyp1~LyDzHPHy0H!Y1%-CfdNu>pwwM&`6j;CiOTu1d$Dn zOGU+Z@h%mWO66NBN=xB45>?qb&PY@vR)BZY1W^?;QJSf!6scJ%DrhQ9W*UpqNHG@x zTb!*m^5_aS(MY@-*xChbrShAKs-ys0I|YnH^$e+KZ@rE4t$RBdC5hXVg0{JwIZ-kt) z#ZSqLBIA?D^P&eUK>fcH@)0S_?iI!C#OZ)T;r9DCb%y*?aN>+Dn6#gLwypF7h*)Ki|gSgJW<$vcA#mfa`rUE;a_I zjlosN;GmtO+1DjG=!ZSNy6H6)xF8piabYZ9ShZegSX z7U#T;rF#VVdlGa@V@>d-1-^8^mp1sC555+R=tq6s>*7LM_3(4?@bPo;a`W{^>ObE9 zhK8~HnSq3do47>y%&qgB*=Hf ztRNQI3FI*_$c41$#(Bj;YPdO}VV-1!@CptO8+jc=dCg2_2Ze_bq0F$2xRrrfdXRjL1%e?N2LW(!&qdrEKr#R>Lw*on1t1v!pH6-dUkxA`$TQEmKO-K_ zp}J(}^0 zDRvYocA6-hM&U0oJD`3L`Y0UC_Q)Rt;0PJOL6ZC+Zbsq2A7p18vnpOZCT=q6c#r@@GATQ|-7=?0_{4(tA?)918cN z@VOM8LgCcw4z)&!ccKhkyX|)b=8KfP=LNvV+zgU|lIneo#Q`A;7`v>ppA`T8RNZ z1&PTcvX3}g5rVl61i-;iI{*@7K=UWylQ@L?1C9NOou1AlV|XlE;C=Woc_825m7 z@-V&~_Co>2Z$o_<#w%dD7UOx)&NGa+!gjS|d^ObfV0-}bUl^YN+a(Og3+jK=Us4$V z4E2f_w}5uFFm4I`T!L|F=#M4FO<>v{?3GGK?ya4KVV>}7^nThdh z@O+)Ycm=d`72_wMo!b~k*JlI9Q=$D+Q$*4rqrTmP6;U5cb<7jE6!$ zXJ8yXC(gxq98BwB{2laX8OAdqx54-v=+AnLC&BbKj61@1CSu$Ww)Yao8(_KyA;{mWdn0Cha zFx2~FTnqXWiE$R>@feSW>3tZthJGHycsb$3eznZe*pC# zFpkzG-!UEl&mS)=hw6O_b?82TxGmJlV)}zz_X!n@|Acl-F|Gi|gEhwYK<DfIfo5F$xFk9~25G9IZV--gU@PKbXRL8!mV4@@t|xCiV9M~wTx@e_*idgxCQ#t%R{=@_2}{W*>CMbOSojB|g7ND!?U z2hR*3{J{7C7ZVcTA(ITKANIrkl7$>J2e^p#8?-Tg2Ks4-@mr8HDIBo;lWX9|Uby)zor@4+~FPCSP3?NFbCakT$=4sz5F9`O8Lq3D61 zX#IDG!ht_$q5XRp&x5>SRHTj%9o*Mz@3;2UxtczoOCbT1saXZN6Fpkz$@)S<3cP@p4dN)Hm>KKoNTo2<( zkQ-n;5pq+EABWr=1*R{7{?t-97$c^z z-|8@K1bGvMgZoPzwDS*z13OHpZ^O6~?Tm<9SA)kbCG|nX{oLcWp3J2}#g?46R`~&3kFpi!FG%$|VflDCA`+-5x1Aml3 zBgwFi!ht{QVE;Q}+zxUk#seYu#W;Gd2&8aoy%7`+>WzbTqA-r0FQOqw?K%UTCqp{M zZ*nnFgzuCS{Fs9cB zlN=e&VB7=p%NUn}{3*u6p`ULsz8Lz`jd35y1>l7biUU8<`*ShK(fPUx8?AuxwZM5Y zXk#3Whs7BG2cAcBj2EHvh4F0IUQdjFhWa3k2f=>WjB&I-wF~1~(EeeJmqGhyFplcI zjB!-&O^l;?pdNDI9yHDAw@!*4T<=F=KX+sN5affH9ea)ya&H-KlmYwH=hGP!4x7p; zv68}pKj`_w5ps0iXTkI3ItFKA{44aw7vm3L<$)MS&xtIIzlL^Z!6WK7^u8VKR|5{0 z9vo%#7<#l1f$Q@zJ$jycI0okf2FQT?L3#y@qvsd2uM4sjI3>AXODTFPUrpiQydXPK zWANlLc=j0lA;y*AVC=y-TK@~ce2@*Ih@*XI#OuDUy<<#+v$|C)4s8gZnLDLcc3*+c|Sw`Vh`_>c=?4b3zFUHaQxdY?q zc{3g3Fgfyj9N<5-UU?`0{R7^w>B6)U#ywzq4#rV^=x;`mozqaKh3P9`8r6gJ=sGvV z^ys~bDaK#J^m2@M!n75}!S8!Ou;U&$;{mi6?R%j48~MWzI*JTvenT9+XGQ&ixHQ!J zaEp!Dp9OgU#?ktXh4F<@AAxZ+Pi?`t1=Po2d=2Eukb@)`S16!;cf`?iSs&$kq>d9B zEC_5+?HFJ@8m1F5j>i9E3a8pf&vVE=@`s>@ZVCuc;1O1|UN;$Rq>MfqKw62fxVx0n9Ui!(j&yCkVoFNI$|+1Rm#+ zN1(yWqxT{VG|@vn4Ia?}yjuYEqj?H(R9*uCcm!Gy(9saasn-O^H-!GrLqY(_K;wM> z{#rpsfdub=f4ELV`yZ$TW{zNx8Kd>Tk36>o$Oi%RKiE=3{fYYDjbt2~D1%IcfZp>A zK|i?kcX^a{BqO8MUjXYbp2k&z`oUHQss_~$=EYI#htElMSc6e{u2q7F9-};3CpZ6p z%14pqNAuqYzF;VZCl>e*mi(xG5tSd&tOW_0!-B9R?JF z`oZsIP56{$N-?dY*u0M#`gfE*TlEejiwWGZcdQ!KH-PUrw^o>i+`k-;G@u zs5~@FTqh%=)o-|%t5Biz|6~%O@~Hi_Bm?zppbTy?A{vOvfSwb%so&)}K9leX`5CQz zumraR$fpKW4J!YZ%;c1(ipaRBBp1kH9F;@IZZaRmsZuvsp2|QR*Zv|IxUR8oCVXId zeEvfI16v?~{Uu-%FMkM@r(qT1XQ7zH`4X3-?~@|NgK4dhEUStStAeXk2OIoT;R-OW6p-Sgj;{c(vjn+ydsreI_dv zy!r^~oYJeA7E0wT$AZa*K}89t=T&x#PvweEa>Ab1qO-I-N3-xMPn9E;$I31Gv6|8O z8Jh(+d8}N?5t`&qNx4%}PUWX%uvBhJaq^L_$EDu%yi)S1JYDWpDVLs?N;#F24N4o{ ziMRcG>@`WbuIZMZ^t|3eGnFfQmqSiAk>vQ>nQG?s(%yLO;FtAQxeTv}r57fs&#YS8 zjDE)l$d?RUlxz}C<(~vRbqC^~^tA)=`M;WTV+16i^9MKDLksQ^h z>}by3%DuIvgqw`(JY0*KADQ~l>)T5gFZ`yy_O3sE_nl`R*uCt{xBsd6t*PG!dCc@W zuz6!phQ`5De7s}um%y>yG4NjjZY=%LaqzEFSCE35o_gqpUmB9qiqu1bSPdu@LKqG1hJIwZwX( z;huOq2@rpKG!$aJp=dNhW|8+q0?^kI4@Y{4$D+jIs4tj%6Y-eR9qWwj2ngT7*A_{{ zSu7OajvBDeP!}`?qM=|U+Qz!VtwCQb;=7niR<#MNWUCq*mMsrd`>N(8izB6K-+T(c zjb<@%*TkJ*!sw$Qg~be*{73Vb#+IT@Wp`kAAHEmUna(yz+@x?gn`XP9gcFm)m^y8& z8!#pHJXHO!R`$CA`MgtjH5d-m3Nfbe3chctg{Qfc=2n%Crr^~xglLba;AyT^>B$s) zmO>&wmV#G(oX7(yc$&9WI+cQ-qL9c>r{L8ipUAJK;N{Q|QfE@|1p*^)wN~yxCPOI@ zW(r;ob%D=G!Hf4Ffn}^H1y8Y4$y;lcNIzXFmDO4$!l^bOOl2+IEnf9(BzQqB-7S2k zRTTHyS_>dOPOB*H{#pwlJUUJ?HPu>0!n=}K#x|wki&OAhQ}FH-d}j(?^;shKrr=ZO z(VZ#yJYtk-Z>?1zf9QEXktQNA5rK&aOhn-SECT+0zcc;)#-kOC`EMSG+lEj3_q|}A zND2?ne;K6VnLozeJ*^fcf;)*mbY>W7=JN#8qi^W6fS)GVM(}`uze_N^3Jg6d;3o*C zSAe0T0{$Ao^e7xUB;W@Krbpn=UIE`pFir16y#l_KV0z>YZ58lM1kSiX8)5=pPq3Td4?hQD=4yiJku`Ki zz<2r>Yd-{d%!JtP0)xN55^*ityru5yx-E6r)CGoSK-b_K(9rI4PunkKDZc)LH5>-~ z2aV52Y~iQze5m-K9Az|5#_$>Uw7tZ9LgwKADKQ?L|1xEBKKJ*1=s*6!QvdN!H9vpR z|I^Rolc3-oslXgQ)9#*DKO+CJ`~1)L*4zVGmbjqVzpv(ba58`2JMk=ke@#2^gT>@& z8*VQe-GKQP*iPCf`Jo*kj#Oi$1U~ANwEmAI#bhr;Ff9e*wr>g4|c=@6V|kfKwSj54It4{{HH*QDo`Ew-6sZD zf%%8jh5dae-A|qH&pGMu`(W@eunm1D;m93W9X9rrt-1OAxZnNMYtNy97=NuX_}ex7 zlg7UHggiA*e&d`o{DePvV&4hw555LHYYvv4zuDjS&y9WWZfWfMz18|dWN&lTfb0w> z+D9UGsP4*!zG3Aw24`7H#CDe!`TPDfI0w@H{`}7_V60)^Quu6h?>`Ce8~Z-3`cc){ z6m1m$;7-%OZ=lS-?>P7K&;9!ru*ARkkH2O5Gd}A3N#Ch@_fsDof8RWK1NZm+)qngw zqp^SHlh9n(S6`Yl`0c;I6iOy)=iYxKjMVp?6_FZ@fz*&BT?LZApBRt7V^GleN&i7; z@b~GZDGs$C`nb*=aWwQh>fE_27y+wtsF))R`~Y!X(Z9oVKSwQnaDESlEjmnTL;uy# z{1Wtm0WN$rIG-Hr-(8yX9KDwhKKAF~;T1QZ^#^Mzmq6rTel;XtWHT|0<_H~exZ+-W z+Rxvt8W=2t@N-_s`TO1++y+rYy{=bVrGyNXpT{JW1of%_`*v#P4nc?KG9-*D_XiG32 zzz-Sp3&~h%^SY*u4eQo!@%en-&2{TnZJ^RvjQ;^#ijDt(mcK3f|H}7Nt9**KxE2Wd znDM<2hKH|4{)^ua57X-Z6XZ>J=l|rx;o%1X$3Ge#K8C#X55vPc@cTa*9zK9vedFfW zt!I2^4xf_cFb@G=3SRpCqzQVxfSD_2rK@PQ+quKs%a%@FJolo~5@3ZqmjBETd#S%0 z&~GW^PZR9#M$T5bPTOpeOqW^b^aI?9>wBO*LbPSBoZD^7Ttx@9WiIb+dY!B67NgEp zxzBFfo#`rD^9PM zi@naZV4tJjwN-nAXSx;u1x;W{YFg!-2R-yV=7XrSsGMu-KF2Ng+l+(y?b;o-wPT8{ zaEchvSAtIv+Xc|U>RmYzS86l}IgutJFcE=?2uws^A_5Z;n25kc1STTzpCR!b=?7X$yQF{kl}035hftDiY*6mIqTeYf-6#3gI*8U%lxV*$ zrCRzW7)jwx>7eqHesiQG*|3w+O8A*Y_8n$Pn)Uz z>gf(%Ec?SsnO`CEcA0ON`7JWPSLTn&{3)5gDDzij{;tf=%G@qDa}~&Zmdr1f`GH!? zGZoKO%a?h{Z^#yw_S7CR)xY%-kx?Z} zeg<%s{8lM=N;-g?W_KOp&VZdPFFDv2!nAUEc%)ns5Bs} zaq+#^K{>IIXEQ#_DbQ!C}*0E83;_K?kGc6YG!itdQdZM zjv>mp{RROU&!eI(7*Aiu+0E+k@2v{Tl zFTWGojKu;d<4=&bB?74ASHLx+MgR+VA5kt9KrLTNs_O*c=gUajG66L4XAom!xd1lt zW&&0eTmy!!oRhXylY#&``FfIR5MKArDkREk0Tdn8__d_G(WEUdJNQ!aZjG}S)_3yR z#MqR#2Ebl^J+WQx-U#3(ei?bUUdZg@vq@&7dnXhe;L8cPI(s)54)IsWp=%0n0_8sb zS5gotz74=p{##P8Re1L}-$0a>jC$anQ-4KIu15=`)zszf9Z|B*Fa{ z3WD3ibZQ$HAq+Q6Io5g(kPhkuu4i#`KLkaNd#&{xhr)+ym7c&=Hjl=X-Fryb2K>_;z`H1IIgq@;{nYrI2nXM!dx+#R zO(f~g(9|CodMUqq87@KvigB=Y~xw208XQ6jj{vnDAkBXTb3r&M z_tNt(0%Mz2`~i%c3qklQ;Qxv%j|k3sU{0Vwe?H}02jE{(_!t+|yqAgSP7-A%rgfXw zGX-``j(5b#2uT4h^DMaN-F7*yygqO{vp~KU5XIYB2;e#tb`nqmfWDC*z*SjJS{C5O zH&iW0_62F`L(3w229IKAJqXW&`zc%nzXtGxbRfbWfIZX4+hUeR zFSF-MD)r~xNh*4~#M4;93(02GQlV_BFoQ@){Hs~!wO}YkJxg$5u#`wgX~@}YBtZTA zUo0EE3RN<1WLbFM9-hqXti(h+~ zZ)ElXDR2*LZLkO#T7efbl(J7sG7awRA4`BHfb91r(2BP%?+xu z{LQGju0~NgD7KPCO9&tGL0`oQ?`eRXNKY%$LMK>=tLPb>Fi%h z5zcrG^}2cb6~H>a2F@>w$Gsx}?3eRffpGj1ytj#m^OSJgPIg}oJ&hf=0(;+NDqiAv z56ll1kT!&Zo_sDclEYC77t96nDA_y%u5b-;O=l=}=Mp7DJ5-AdY5Es{>~XcCn4z)D z1rAD{$0%$qBGwm4$!`dpPfU)ZD7Kk|wceL#DiQBXHgONK1;0b3`HD#zO`aKl2C!lg z^`VRh;Mj_$W4JG*8gak0s!OYmJ3wj>uOL%mtRbI-Sk67TEfUqCZX`muXfajC(GE|R zWRj1L=TM0nQDiwLTBbz2!c!l~xE&6ZTtttvjCZNHT-3q?xYYS1?l3h=*mOJ%ebyTg z%Q*!~v8X={TcMs1L!Dv+IZsweBQpqStVa1s7^Bedc4+q6Dk0{f*r3JAu zSe3_C`2A)0){$Y1re&5gr}I*$hR;6Ec_VCDKEAYAcw#Jc&Mt27EGZ_<*?vYwFbFOY z-nfM&>F(0vC8%1Ck0*_jpm(}PlDQtBoldK2gvfL9X87abyg@iUX*x7kpvL+5^G462 z={EA-hKd(Vx|l5n9xMQ)lEU`*~5gqwIV#bNrWP?NhQK1PA)aZwbq z7Egy;Gjcha*QrgLGOf8Vm*=3`rD#Ufb*79yo@ujETRz*l4ZUIZNDE^T0=k*nGv>^K z>bW9n;Jtv%iUvd2toq>{H(5J@%;kBG+M?@370anMvJ$@0Y|Vv=sRD6G+LRrrl46X< zkQ1#!3MpRI$tEI<)kqi)qt!MDcBOh=YR{3X=O@*umd1mK%$tjw-~qcxM5yu-ehQr)rQ$%Xf=lU4MVFi%$T9sD@>2U?H=7`*S@vKR>}?CLx>#1 zwO{8(-mWFO&2VLd(JTR6sAY0Po8-YVI!*;6&(1d)IhqTsT6B}4+iQ$WyJrasm)gN# zFU~h|P;fDu&c6xxh+zo)W+MZ+Sz}~eNlqB1!2Xh`_NxpxAmUFfvyguFFu_#Q<}{hG(@=roF@{Tm?eY zy?cC6Q>OhhBU!_JEos*N`yQxE@@%0HJp;C4?QMo~{v;1#OSK<~)Lq6@z*9))DWI>i z0;nC^W5&%*0JPJPoNV807z^#6cnk-a4f|bW>xn(94MTf{{lS=I*B;%o3Hm)E?3(@X zei89$q}Bemfxjt7?!jGOLdCd&cO0El|ELip{OP%_$Emo9N~`Thg(1!UBXS2$ky*`t zsil6O;UHFO*$%t#@h9-H0Dp93Xa(qAcJeU}sdXq6#-ZYf;qVw)LWh>!j@(HKG@NjO z%!i0*I}tZ@VY`-nXorYkuHg97jb!&ubciDJlxWPtxJf-n`=5*-Nnz~Y!wq|tA*8+t zkw(Mr5!&rkBOBechYW6hd6OOEN3EUn4UI-auAyCKHxnqCm4@cG;gc&hqMd|@U403L z!v=rY!vB0P1S#h>2P(uc}J_9l%@O z9Z&RxYC1wap=dY=umy)a)F3qF7tiyScZmPiReHte%Xh)(OA;wt~UrdB>8b=#z-4#c$f)N~o zfnzy3yyBMViG@3QLTz69rjPpV9MvwZIBO%(D^AuxfWv6k2z+lr1v;rBF*>h<+>M4> z+AJ<{YDPeqQf)^kc?7!QxL~zHcdpk)T+IZ3L{NH&SX&6_&?)oYT96GSLQ>u2ym?+23d=1lnQ&YRoQX z4G+|wLM2Gs<8jVnfk;j-lpjp5{xD&2G_N=r9Ob}7sdQIa5{-M4HmOy`sV+DohUO=! zgL-{{`k|O5s##}CEC2;85KKfdB)Ssa)Ya6WwoY>qhAy5*QA_kBVxhKb(N0uz(JRKB zVtfA96nl;YlasRLr7y@TIwReoiUbBpMSUo?EgtEuxH1ymwgJPfVs&C$BvP?X1f>FV zH>*g*qEx8p2nOXWU!LgM))U#$Q{ENsN$f1gELK6kh*pGqf?WxWKp`T5iq}szt&kJ zl%3Sx)SyN)XibmDHLes6e4rdYqO)vU_#Y`$KfJy(nFIik;Ei?He%Mty{+F>mP7HgSN>?`5t%9A#$*2GN?>!#AjY*lc=7!A{> zQ)o)Hnn|_DoW`5|;{Voz2LGle`7s>wjNnM3xx3C&^*SGK{ERxLRS7q6NcJ)0~XL;xrd5>^W zSNc9DQVPA4l$CC@$Cx=h`G~%8GvA=!&mZ6tp=y%+6v}ic)O-0gdSVa1Mv_UXeT1b_ zX{%fZZR?t~7(b#n2T)FIS9&$M&`cBckUO4r{0fL=ZD;UGe3d#6@|y|XlY}=1z?9g< zuTcG^5X*5&I;$on)r%0I)@~GmLA#B(Cu-n<^E!SPl|mln7Zl*VHmOR363q@HRoaa!>VV!+Fg~9l}{FtVr=jF%s#P#~_J^Ic3R?bF~ zChOD6m_rTo*L6p72r}cjq?@|#xK!V;LI0WduEvbNB=I)g%-5&CYttXsz6*l-;YMc# z`r^y`oC7?^ zt|IlF7R@D6g}@iGL$wyHCc%1v$M+8TU03m62E5QOe{?9Z#Ml<(WBEg09Eksr!`~qBOg5e3zY7KO|7fj+q54xgf{QZ`Q~SRJ61Nv|k=@!fJwFrtdC7Cd6#sbs zeS`_dFY{q2s8p;yTLKMH>Z@M)nDq>gd$`+@f=;gtL+@M%pbsDCf;=brC( z9Qd*9{$d>b@5jN@PxE8xq2Dsc!WWE#FB=EHSm4h+7ts&=SaG;=96e#+$2vzbF7>O$ z{sI|O`ZaAV|L>RlXC(0v$^R{>f1p+(WIO+G96i4n2R|tFsBIJ&`69hP4*$S7czRHH zrEF?88Thg4RRMfSDx)l~27au5rQQ#*kQw`>-4~8UTX3);mOQ>{dUH=(oBFE6vJxEf zWl?;2@ZrV0ja~<1ah(2$x8sqcB?Iy9K#&fXqyI8Ww8bM)yx1ppvS6gU zw=0BYFLaK{K?hETu?C2?>=H}fT{!R&hern565ZXqAd&(Fz=<_z3Tq&+a(&&J6@e9N z>*?4_Qbkr`kw9llPaBtxq*Zy?4u4m9YsP*fqxW=`C_}e z@kIf7JZj~gs?-yShkRJ%`Ff)f_!Zy9d`Xn}7*rl^V}bz--cIIg+tmYQR*pruplrtn zE&7AqR3HFaG}P5X05KEM0{`Xg*xTX>BJg730b1n z7_uZ(85UZ)!$Fvj#7Q%pqwf~J)>w>T0_diXSipr^6CDs~>FL0bmteT3J)+7jt@uo^ zT|rp=hEy4`Qbj`JbIAxC3DUR2q{1jZCJA_qx$obDngSu(0*+}}q{n4J<&_ezGWDLP zVET0`Ri3tNP*QoR1t#z6eNZ9lP&kXd=gPiZFyLn+i=$RDD!Fv~^j_)2rQ~asoXk&4 z0=*UEl_0rTSI?;pz!9sGSNr=_uJ-eTMI_RZnl=NVz4c07?Wb2c?Wd-s{8xM`r}tdi ztFK_SUti_5B#e~qzlFt?T@*;Sl2879fDDxS`v7HM#ZT4$OHzKBR9Gu^l(6LA9jL!g zAbHw^moDEA9K}Q|!I3B57v=i|epDWnlphLt3ks?7UMZK%(*iEZNi&Dje;`eMtCUyysWgYZN|DTuB2V>Sy}zqmhBGOZrj9)(DoK|wA4mRWIU&B4Hek}_7fSi`_P zp89d*XRomYRw~AEO$o>uK)sLkB diff --git a/lib/.libs/liboptkit_la-optkit.o b/lib/.libs/liboptkit_la-optkit.o deleted file mode 100644 index 12dda57714475ab927d51225fe1a8c9ad8249a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18792 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 SMr^SD*UWk16ghsf|Nj6{E)bXi From 972be750a5d1ffabad9b1223627a96200a2ca757 Mon Sep 17 00:00:00 2001 From: jukoo Date: Fri, 27 Mar 2026 12:37:14 +0000 Subject: [PATCH 5/7] fix: helper stream mmio write stat on section 0 [USAGE_SECTION] --- bpt.dbg | 8 +++++++ lib/bits/types/optkit_cs_help.h | 20 +++++++++++------- lib/optkit_base.c | 6 ++++++ lib/optkit_base.h | 4 ++-- lib/optkit_base.o | Bin 14880 -> 0 bytes lib/optkit_cs_help.c | 36 +++++++++++++++++++------------- test.c | 1 - 7 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 bpt.dbg delete mode 100644 lib/optkit_base.o diff --git a/bpt.dbg b/bpt.dbg new file mode 100644 index 0000000..d3c0d09 --- /dev/null +++ b/bpt.dbg @@ -0,0 +1,8 @@ +break optkit_parse +break optkit_extract_option +break __optkit_record_helper +break optkit_wat +watch ctx_cookies._msbio_cookies->_sbuff +break iomem_write +break __get_partition_location_address +break write_at diff --git a/lib/bits/types/optkit_cs_help.h b/lib/bits/types/optkit_cs_help.h index 13083fb..7380be2 100644 --- a/lib/bits/types/optkit_cs_help.h +++ b/lib/bits/types/optkit_cs_help.h @@ -116,13 +116,18 @@ static inline struct __page_io_location_t * __get_partition_location_address(struct __optkit_memsb_t * new_ctxc) { unsigned start = 0 ; - struct __page_io_location_t * ioloc = malloc(sizeof(*ioloc)) ; + struct __page_io_location_t * ioloc = malloc(sizeof(struct __page_io_location_t *)) ; if(!ioloc) return 00 ; struct __section_t secpart = new_ctxc->_scope_interval[new_ctxc->_partition_index]; ioloc->_io_location_address = new_ctxc->_msbio_cookies->_sbuff+secpart._begin ; + + memcpy(&ioloc->_chunck_part , &secpart , sizeof(struct __section_t)) ; + + + //!CHECK OVERFLOW ... if(ioloc->_io_location_address > new_ctxc->_msbio_cookies->_ebuff) { free(ioloc) , ioloc = 00 ; @@ -136,11 +141,10 @@ __get_partition_location_address(struct __optkit_memsb_t * new_ctxc) static inline size_t write_at(struct __page_io_location_t * ioloc , const char * ubuff , size_t wbytes) { - ssize_t limites = ioloc->_chunck_part._end - ioloc->_chunck_part._begin; ioloc->_chunck_part._coffset+=wbytes; - if(ioloc->_chunck_part._coffset >limites) - return -1 ; + if(ioloc->_chunck_part._coffset >= ioloc->_chunck_part._end) + return EOF ; memcpy(ioloc->_io_location_address,ubuff , wbytes) ; @@ -170,16 +174,16 @@ init_memstream_buffer_cookies(void) ; /* Predefined Hooks for cookies stream io manipulation */ -static ssize_t +ssize_t iomem_write(void * ctx_cookies , const char * buff , size_t wbytesize) ; -static ssize_t +ssize_t iomem_read(void * ctx_cookies , char * buff , size_t rbytesize) ; -static int +int iomem_seek(void * ctx_cookies , off_t *offset , int whence) ; -static int +int iomem_close(void * ctx_cookies) ; diff --git a/lib/optkit_base.c b/lib/optkit_base.c index b14a783..15e04fd 100644 --- a/lib/optkit_base.c +++ b/lib/optkit_base.c @@ -27,6 +27,12 @@ char * optkit_get_basename(char *const * argv) void optkit_parse(base_optkit_t *restrict options, char * const *av) { + + if (!init_memstream_buffer_cookies()) + { + fprintf(stderr , "fail to initialize memory stream buffer \012") ; + return ; + } optkit_pbn = optkit_get_basename(av) ; mopt._max_entries = __optkit_get_entries(options) ; mopt._ds_goptl= optkit_extract_option(options , &mopt); diff --git a/lib/optkit_base.h b/lib/optkit_base.h index 539884c..5698f96 100644 --- a/lib/optkit_base.h +++ b/lib/optkit_base.h @@ -111,7 +111,6 @@ static inline size_t __optkit_breffing_usage(int argreq) /* Record options in memory stream buffer */ static inline size_t __optkit_record_helper(base_optkit_t * option) { - (void *) init_memstream_buffer_cookies() ; static size_t argument_requested=3, help_caddr=0, stat = 0; @@ -121,7 +120,8 @@ static inline size_t __optkit_record_helper(base_optkit_t * option) if(stat != argument_requested) stat = argument_requested ; } - + + optkit_wat(USAGE_SECTION , "this is a test\012") ; asprintf(&s , HLPFMT , option->_lopt.val ,option->_lopt.name, option->_description); /* diff --git a/lib/optkit_base.o b/lib/optkit_base.o deleted file mode 100644 index c1ebdeb3c7f6b7cd8a8e5de18bdf61f41225ad11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14880 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 Jo_DhU{{RmR&N2W1 diff --git a/lib/optkit_cs_help.c b/lib/optkit_cs_help.c index 468990b..12d6038 100644 --- a/lib/optkit_cs_help.c +++ b/lib/optkit_cs_help.c @@ -16,18 +16,14 @@ struct __optkit_memsb_t ctx_cookies = {00 , { _SYNOPSYS_SECTION, _HELPER_SECTION, _FOOTER_SECTION -}}; - -//init_memstream_buffer_cookies(int lock_permission) -struct __optkit_memsb_t * -init_memstream_buffer_cookies(void) -{ - ctx_cookies._msbio_cookies= __setup_membuff_cookies() ; - if(ctx_cookies._msbio_cookies) - return 00 ; +}, + USAGE_SECTION}; - cookie_io_functions_t hooks = { - .write = iomem_write, +cookie_io_functions_t hooks = { + .write = iomem_write, + .read = (void *) 00, + .close = (void *) 00, + .seek = (void *) 00 /*.read= iomem_read, *.close=iomem_close, *.seek =iomem_seek @@ -35,7 +31,15 @@ init_memstream_buffer_cookies(void) }; - optkit_stream = fopencookie(&ctx_cookies , "rw" , hooks) ; +//init_memstream_buffer_cookies(int user_lock_permission) +struct __optkit_memsb_t * +init_memstream_buffer_cookies(void) +{ + ctx_cookies._msbio_cookies= __setup_membuff_cookies() ; + if(!ctx_cookies._msbio_cookies) + return 00 ; + + optkit_stream = fopencookie(&ctx_cookies , "w+" , hooks) ; if(!optkit_stream) { @@ -43,13 +47,16 @@ init_memstream_buffer_cookies(void) return 00 ; } + setvbuf(optkit_stream , 00 , _IONBF ,0 ) ; - return &ctx_cookies ; + return &ctx_cookies ; } -static ssize_t +ssize_t iomem_write(void * ctx_cookies , const char * user_buffer , size_t wbytes) { + + puts("called") ; struct __optkit_memsb_t *new_ctx_cookies =(struct __optkit_memsb_t *) ctx_cookies ; struct __membuff_cookies_t * mbios = new_ctx_cookies->_msbio_cookies ; struct __page_io_location_t * waddr_offt = 00 ; @@ -118,6 +125,7 @@ size_t optkit_wat(int partition , const char * fmt , ...) va_list ap ; va_start(ap , fmt); ctx_cookies = *wupdate(&ctx_cookies , partition) ; + bwriten = vfprintf(optkit_stream , fmt , ap) ; va_end(ap) ; diff --git a/test.c b/test.c index ce537c9..23bd39a 100644 --- a/test.c +++ b/test.c @@ -19,7 +19,6 @@ int main(int ac , char * const *av) printf(" %s \012" , basename) ; - puts("this is a test") ; return 0 ; } From 384e57c9ef8f300025fcbb47db68be855eac2f05 Mon Sep 17 00:00:00 2001 From: jukoo Date: Tue, 31 Mar 2026 13:03:57 +0000 Subject: [PATCH 6/7] fix iomm_write hooks writing at missing gap offset --- .gitignore | 1 + bpt.dbg | 8 ---- lib/bits/types/optkit_cs_help.h | 55 ++++++++++++++++++++++---- lib/optkit_base.c | 8 +++- lib/optkit_base.h | 25 +++++++----- lib/optkit_cs_help.c | 69 ++++++++++++++++++++++++++------- 6 files changed, 126 insertions(+), 40 deletions(-) delete mode 100644 bpt.dbg diff --git a/.gitignore b/.gitignore index b04947b..948a6f7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ depcomp build/ .deps/ config.log +tags diff --git a/bpt.dbg b/bpt.dbg deleted file mode 100644 index d3c0d09..0000000 --- a/bpt.dbg +++ /dev/null @@ -1,8 +0,0 @@ -break optkit_parse -break optkit_extract_option -break __optkit_record_helper -break optkit_wat -watch ctx_cookies._msbio_cookies->_sbuff -break iomem_write -break __get_partition_location_address -break write_at diff --git a/lib/bits/types/optkit_cs_help.h b/lib/bits/types/optkit_cs_help.h index 7380be2..77bff6c 100644 --- a/lib/bits/types/optkit_cs_help.h +++ b/lib/bits/types/optkit_cs_help.h @@ -25,6 +25,9 @@ # endif #endif +#define _IOM_WRITE 0 +#define _IOM_READ 1 + //!NOTE : define helper usage as vector table enum{ USAGE_SECTION= 0, @@ -55,7 +58,10 @@ struct __section_t { } ; }; - +/* + * Internal memory buffer cookies structure + * used to manipulation the memory buffer + * */ struct __membuff_cookies_t { char * _sbuff ; void * _ebuff ; @@ -112,21 +118,36 @@ __setup_membuff_cookies(void) return 00 ; } + +static inline off_t +__io_offaddr(struct __section_t secpartition , int io_mode) +{ + + if(_IOM_WRITE == io_mode) + return secpartition._begin + secpartition._coffset; + + if(io_mode & _IOM_READ) + return secpartition._begin ; +} + + static inline struct __page_io_location_t * -__get_partition_location_address(struct __optkit_memsb_t * new_ctxc) +__get_partition_location_address(struct __optkit_memsb_t * new_ctxc, int io_mode) { unsigned start = 0 ; + off_t offset_address = 0 ; struct __page_io_location_t * ioloc = malloc(sizeof(struct __page_io_location_t *)) ; if(!ioloc) - return 00 ; + return 00 ; struct __section_t secpart = new_ctxc->_scope_interval[new_ctxc->_partition_index]; - ioloc->_io_location_address = new_ctxc->_msbio_cookies->_sbuff+secpart._begin ; + offset_address = __io_offaddr(secpart, io_mode) ; + + ioloc->_io_location_address = new_ctxc->_msbio_cookies->_sbuff+offset_address ; memcpy(&ioloc->_chunck_part , &secpart , sizeof(struct __section_t)) ; - //!CHECK OVERFLOW ... if(ioloc->_io_location_address > new_ctxc->_msbio_cookies->_ebuff) { @@ -148,9 +169,25 @@ write_at(struct __page_io_location_t * ioloc , const char * ubuff , size_t wby memcpy(ioloc->_io_location_address,ubuff , wbytes) ; - return ioloc->_chunck_part._coffset ; + return (wbytes << 0x10 | ioloc->_chunck_part._coffset); } +static inline size_t +read_at(struct __page_io_location_t * ioloc , char * ubuff , size_t rbytes) +{ + size_t locpart_threshold = ioloc->_chunck_part._end - ioloc->_chunck_part._coffset ; + + if (rbytes > locpart_threshold) + rbytes = locpart_threshold ; + + printf("%s \012 ",(char *) ioloc->_io_location_address ) ; + + memcpy(ubuff , ioloc->_io_location_address , rbytes); + + return rbytes ; +} + + static inline void * __expand_buffer(struct __optkit_memsb_t * new_ctxc) { @@ -172,7 +209,6 @@ struct __optkit_memsb_t * init_memstream_buffer_cookies(void) ; - /* Predefined Hooks for cookies stream io manipulation */ ssize_t iomem_write(void * ctx_cookies , const char * buff , size_t wbytesize) ; @@ -196,7 +232,10 @@ static struct __optkit_memsb_t * rupdate(struct __optkit_memsb_t * ctx_cookies, int partindex); size_t -optkit_wat(int partion , const char * fmt , ...) ; +optkit_wat(int partion , const char * fmt , ...); + +size_t +optkit_rat(int partition, char * buffer , size_t rbytes); #endif //! _SYS_TYPE_OPTKIT_CS_HLP diff --git a/lib/optkit_base.c b/lib/optkit_base.c index 15e04fd..c064463 100644 --- a/lib/optkit_base.c +++ b/lib/optkit_base.c @@ -42,6 +42,8 @@ void optkit_parse(base_optkit_t *restrict options, char * const *av) return ; } //optkit_show_usage() ; + + optkit_dump() ; return ; } @@ -49,5 +51,9 @@ void optkit_show_usage(void) { setvbuf(stdout , 00 , _IONBF , 0); printf("%s", helper_record._bptr); - + } + + + + diff --git a/lib/optkit_base.h b/lib/optkit_base.h index 5698f96..673c860 100644 --- a/lib/optkit_base.h +++ b/lib/optkit_base.h @@ -121,15 +121,10 @@ static inline size_t __optkit_record_helper(base_optkit_t * option) stat = argument_requested ; } - optkit_wat(USAGE_SECTION , "this is a test\012") ; - asprintf(&s , HLPFMT , option->_lopt.val ,option->_lopt.name, option->_description); - - /* - optkit_write_at((HELPER_SECTION+help_caddr),"%s" ,s) ; - help_caddr+=strlen(s) ; - free(s) , s=0; - */ - + asprintf(&s ,HLPFMT , option->_lopt.val ,option->_lopt.name, option->_description); + + //!NOTE : Write at HELPER section see definition of coord in "bits/type/optkit_help_cs.h" + optkit_wat(HELPER_SECTION , "%s" , s ); return argument_requested ; } @@ -175,6 +170,18 @@ static inline gopt_t * optkit_extract_option(base_optkit_t* options , return super_opt ; } +static inline size_t optkit_dump(void) +{ + //NOTE : testing ... + char buf[102]={0}; + + size_t rb = optkit_rat(HELPER_SECTION ,buf , 102) ; + + printf("%s \012 size %li\012" , buf, rb) ; + + return rb ; +} + extern char * optkit_get_basename(char *const * argument_vector) ; extern void optkit_show_usage(void) ; extern void optkit_parse(base_optkit_t * __restrict__ _Nonnull options , char *const *av) ; diff --git a/lib/optkit_cs_help.c b/lib/optkit_cs_help.c index 12d6038..2f737dd 100644 --- a/lib/optkit_cs_help.c +++ b/lib/optkit_cs_help.c @@ -21,7 +21,7 @@ struct __optkit_memsb_t ctx_cookies = {00 , { cookie_io_functions_t hooks = { .write = iomem_write, - .read = (void *) 00, + .read = iomem_read, .close = (void *) 00, .seek = (void *) 00 /*.read= iomem_read, @@ -56,7 +56,6 @@ ssize_t iomem_write(void * ctx_cookies , const char * user_buffer , size_t wbytes) { - puts("called") ; struct __optkit_memsb_t *new_ctx_cookies =(struct __optkit_memsb_t *) ctx_cookies ; struct __membuff_cookies_t * mbios = new_ctx_cookies->_msbio_cookies ; struct __page_io_location_t * waddr_offt = 00 ; @@ -75,47 +74,73 @@ iomem_write(void * ctx_cookies , const char * user_buffer , size_t wbytes) return -ENOMEM; } - waddr_offt = __get_partition_location_address(new_ctx_cookies); + waddr_offt = __get_partition_location_address(new_ctx_cookies , _IOM_WRITE); - local_offset = write_at(waddr_offt , user_buffer , wbytes) ; + local_offset = write_at(waddr_offt , user_buffer , wbytes) ; if(-1 == local_offset) - return -EOVERFLOW ; + return -EOVERFLOW ; + + size_t bwriten = (local_offset >> 0x10) , + loffset = (local_offset & 0xffff) ; //update the local offset of the current partion index - new_ctx_cookies->_scope_interval[partition_idx]._coffset+=local_offset ; + //new_ctx_cookies->_scope_interval[partition_idx]._coffset+=local_offset ; + new_ctx_cookies->_scope_interval[partition_idx]._coffset= loffset ; + //!update the global offset - if(mbios->_offset < local_offset ){ - mbios->_checkpoint= local_offset ; - mbios->_offset = local_offset ; + if(mbios->_offset < loffset ){ + mbios->_offset = mbios->_checkpoint= loffset ; } free(waddr_offt) , waddr_offt =0 ; return wbytes ; } +ssize_t iomem_read(void * ctx_cookies , char * ubuff , size_t rbytes) +{ + static int i = 0; + i++ ; + + printf("times %i\012" ,i) ; + struct __optkit_memsb_t * new_ctx_cookies = (struct __optkit_memsb_t*) ctx_cookies ; + struct __section_t secpart = new_ctx_cookies->_scope_interval[new_ctx_cookies->_partition_index]; + struct __page_io_location_t * raddr_offt = 00; + size_t rb = 0 ; + + + raddr_offt = __get_partition_location_address(new_ctx_cookies , _IOM_READ); + + printf(" %s :: %s \012", __func__ , (char *) raddr_offt->_io_location_address) ; + rb = read_at(raddr_offt , ubuff , rbytes); + //!NOTE : The cursor offset is not updated !WARNING! -static struct __optkit_memsb_t * __update_context_cookies(struct __optkit_memsb_t * ctxc , int partition_index , int iom_flags) + return rb ; +} + +static struct __optkit_memsb_t * +__update_context_cookies(struct __optkit_memsb_t * ctxc , int partition_index , int iom_flags) { ctxc->_partition_index = partition_index; if(0 < iom_flags){ //in read mode ; struct __section_t p = ctxc->_scope_interval[partition_index] ; - p._coffset = p._begin ; + //p._coffset = p._begin ; memcpy((ctxc->_scope_interval+partition_index) , &p , sizeof(p)) ; - } + } + return ctxc ; } struct __optkit_memsb_t * wupdate(struct __optkit_memsb_t * ctx , int partition_idx) { - return __update_context_cookies(ctx , partition_idx , 0) ; + return __update_context_cookies(ctx , partition_idx , _IOM_WRITE) ; } struct __optkit_memsb_t * rupdate(struct __optkit_memsb_t * ctx , int partition_idx ) { - return __update_context_cookies(ctx , partition_idx , 1) ; + return __update_context_cookies(ctx , partition_idx , _IOM_READ) ; } @@ -124,6 +149,8 @@ size_t optkit_wat(int partition , const char * fmt , ...) size_t bwriten=0 ; va_list ap ; va_start(ap , fmt); + + //!Update the global cookies context stream ... ctx_cookies = *wupdate(&ctx_cookies , partition) ; bwriten = vfprintf(optkit_stream , fmt , ap) ; @@ -131,3 +158,17 @@ size_t optkit_wat(int partition , const char * fmt , ...) return bwriten ; } + +size_t optkit_rat(int partition , char * ubuff , size_t rbytes) +{ + size_t breaded =0 ; + + //!Update the global cookies context stream ... + ctx_cookies = *rupdate(&ctx_cookies , partition); + + fgets(ubuff , rbytes , optkit_stream) ; + + //breaded = fread(ubuff, rbytes,1,optkit_stream) ; + + return rbytes ; +} From ac17faa850792eddf2c932b219208504b744d60d Mon Sep 17 00:00:00 2001 From: jukoo Date: Thu, 2 Apr 2026 11:51:02 +0000 Subject: [PATCH 7/7] Implement reading hook --- lib/bits/types/optkit_cs_help.h | 34 ++++++++++++++--------- lib/optkit_base.h | 6 +--- lib/optkit_cs_help.c | 49 +++++++++++++++++++-------------- 3 files changed, 50 insertions(+), 39 deletions(-) diff --git a/lib/bits/types/optkit_cs_help.h b/lib/bits/types/optkit_cs_help.h index 77bff6c..06c22af 100644 --- a/lib/bits/types/optkit_cs_help.h +++ b/lib/bits/types/optkit_cs_help.h @@ -87,6 +87,12 @@ struct __page_io_location_t{ struct __section_t _chunck_part; }; +typedef struct __partition_user_buffer_block_t pubb_t ; +struct __partition_user_buffer_block_t { + char * _buffer_block ; + size_t _block_size ; +}; + extern FILE * optkit_stream ; extern struct __optkit_memsb_t ctx_cookies ; @@ -122,12 +128,14 @@ __setup_membuff_cookies(void) static inline off_t __io_offaddr(struct __section_t secpartition , int io_mode) { - - if(_IOM_WRITE == io_mode) - return secpartition._begin + secpartition._coffset; + off_t offset = 0 ; + if(_IOM_WRITE == io_mode) + offset = secpartition._begin + secpartition._coffset; if(io_mode & _IOM_READ) - return secpartition._begin ; + offset=secpartition._begin; + + return offset ; } @@ -135,14 +143,14 @@ static inline struct __page_io_location_t * __get_partition_location_address(struct __optkit_memsb_t * new_ctxc, int io_mode) { unsigned start = 0 ; - off_t offset_address = 0 ; + off_t offset_address = 0 ; struct __page_io_location_t * ioloc = malloc(sizeof(struct __page_io_location_t *)) ; if(!ioloc) return 00 ; struct __section_t secpart = new_ctxc->_scope_interval[new_ctxc->_partition_index]; - offset_address = __io_offaddr(secpart, io_mode) ; + offset_address = __io_offaddr(secpart, io_mode); ioloc->_io_location_address = new_ctxc->_msbio_cookies->_sbuff+offset_address ; @@ -176,13 +184,13 @@ static inline size_t read_at(struct __page_io_location_t * ioloc , char * ubuff , size_t rbytes) { size_t locpart_threshold = ioloc->_chunck_part._end - ioloc->_chunck_part._coffset ; - + size_t rofft = ioloc->_chunck_part._coffset ; if (rbytes > locpart_threshold) rbytes = locpart_threshold ; + - printf("%s \012 ",(char *) ioloc->_io_location_address ) ; - - memcpy(ubuff , ioloc->_io_location_address , rbytes); + memcpy(ubuff , ioloc->_io_location_address+rofft , rbytes); + ioloc->_chunck_part._coffset++; return rbytes ; } @@ -204,11 +212,11 @@ static inline void * __expand_buffer(struct __optkit_memsb_t * new_ctxc) return new_ctxc ; -} +} + struct __optkit_memsb_t * init_memstream_buffer_cookies(void) ; - /* Predefined Hooks for cookies stream io manipulation */ ssize_t iomem_write(void * ctx_cookies , const char * buff , size_t wbytesize) ; @@ -235,7 +243,7 @@ size_t optkit_wat(int partion , const char * fmt , ...); size_t -optkit_rat(int partition, char * buffer , size_t rbytes); +optkit_rat(int partition); #endif //! _SYS_TYPE_OPTKIT_CS_HLP diff --git a/lib/optkit_base.h b/lib/optkit_base.h index 673c860..d64e21c 100644 --- a/lib/optkit_base.h +++ b/lib/optkit_base.h @@ -172,12 +172,8 @@ static inline gopt_t * optkit_extract_option(base_optkit_t* options , static inline size_t optkit_dump(void) { - //NOTE : testing ... - char buf[102]={0}; - size_t rb = optkit_rat(HELPER_SECTION ,buf , 102) ; - - printf("%s \012 size %li\012" , buf, rb) ; + size_t rb = optkit_rat(HELPER_SECTION) ; return rb ; } diff --git a/lib/optkit_cs_help.c b/lib/optkit_cs_help.c index 2f737dd..cf24eaa 100644 --- a/lib/optkit_cs_help.c +++ b/lib/optkit_cs_help.c @@ -94,28 +94,26 @@ iomem_write(void * ctx_cookies , const char * user_buffer , size_t wbytes) } free(waddr_offt) , waddr_offt =0 ; - return wbytes ; + return bwriten ; } ssize_t iomem_read(void * ctx_cookies , char * ubuff , size_t rbytes) -{ - static int i = 0; - i++ ; - - printf("times %i\012" ,i) ; +{ + struct __optkit_memsb_t * new_ctx_cookies = (struct __optkit_memsb_t*) ctx_cookies ; - struct __section_t secpart = new_ctx_cookies->_scope_interval[new_ctx_cookies->_partition_index]; + struct __section_t *secpart = (new_ctx_cookies->_scope_interval+new_ctx_cookies->_partition_index); struct __page_io_location_t * raddr_offt = 00; size_t rb = 0 ; + raddr_offt = __get_partition_location_address(new_ctx_cookies , _IOM_READ); + rb = read_at(raddr_offt , ubuff , rbytes); + + memcpy(secpart, &raddr_offt->_chunck_part , sizeof(struct __section_t)) ; - raddr_offt = __get_partition_location_address(new_ctx_cookies , _IOM_READ); - - printf(" %s :: %s \012", __func__ , (char *) raddr_offt->_io_location_address) ; - rb = read_at(raddr_offt , ubuff , rbytes); + free(raddr_offt) ,raddr_offt=00; //!NOTE : The cursor offset is not updated !WARNING! - + return rb ; } @@ -124,10 +122,12 @@ __update_context_cookies(struct __optkit_memsb_t * ctxc , int partition_index , { ctxc->_partition_index = partition_index; - if(0 < iom_flags){ + if(iom_flags & _IOM_READ){ //in read mode ; - struct __section_t p = ctxc->_scope_interval[partition_index] ; - //p._coffset = p._begin ; + struct __section_t p = ctxc->_scope_interval[partition_index] ; + + //!NO saved: because the read mode read on block at once ; + p._coffset = 0 ; memcpy((ctxc->_scope_interval+partition_index) , &p , sizeof(p)) ; } @@ -159,16 +159,23 @@ size_t optkit_wat(int partition , const char * fmt , ...) return bwriten ; } -size_t optkit_rat(int partition , char * ubuff , size_t rbytes) +size_t optkit_rat(int partition) { - size_t breaded =0 ; - + struct __section_t section = ctx_cookies._scope_interval[partition]; + size_t breaded = section._coffset; + char * buffer = 00 ; //!Update the global cookies context stream ... ctx_cookies = *rupdate(&ctx_cookies , partition); - fgets(ubuff , rbytes , optkit_stream) ; + buffer = malloc(breaded) ; + if(!buffer) + return ~0 ; + + breaded ^=fread(buffer ,1,breaded,optkit_stream) ; + + printf("-->> %s\012",buffer ) ; - //breaded = fread(ubuff, rbytes,1,optkit_stream) ; + free(buffer) ; - return rbytes ; + return breaded; }