From 20fa8338431125b2a190e49e8d70e189be2f70c1 Mon Sep 17 00:00:00 2001 From: german Date: Tue, 16 Dec 2025 19:23:56 +0400 Subject: [PATCH] Beta --- microconf | Bin 16368 -> 16456 bytes microconf.h | 71 +++++++++++++++++++++++++++++++------------- microconf_test.conf | 6 ++-- 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/microconf b/microconf index 9d4cdc13be7574234fd65cacba89a0ff53d8c729..2fc102dfe4e6f6720d43b751505134a0e58f13da 100755 GIT binary patch delta 3167 zcmai0dr(u^89yfvLNF$|QA`ko1cTzPkc5@xArTUZdr@3ptkR(?ItrqdMs z-kIckoZol8=e_5o`X>A7utS&6tw|I0%!_s|PQ zZRf(D2)}!^_0-oc#V*{qUH$P7N$y8~ISB7)3o}i)nHnr1N9C-%+H`W|u~x(4p*s&qZ!?t`#c|9!m%H`T&ry}gA+%Zoz7 zS^JHI=*Uj4JG7X|T5^EPKN~rTMbnVOau`@WUXOGxpR*~<@Em;?RHQX!@h-`bRJDR+ zJ;;EcrrGDSMAc^uZldN4$1pn`{2|Q_CWC4Ig_pExFyCN@D%4KCq&0%yV5jrOcN==r zPgwH}2RwvG1qWe;^(zb8n8TT4k|ebbe`d*jDiyrxfk|uCMycSFVnSLid9{Qn3yC@M z2Xo|K{D&OaF2+ljViO^)uiVP7!~b zEyhcK3)!|D`YkB8<*s;_&F!IA-x4GKZpMnSKZQ-=kpD0WN#nmHDY+LbkrV&t!FV(f_9>XXD+*xe|` z8r+-3SiQTZK33}%#gA*xF|=fCWCQSSQ=q;NgNZxf8j1 zG{H*Nx*O|b|EP;3s5DiN!&Au0gei+SISw{RPL?*A*@mtyc{uggFy)!ceX@w}cOZ6W z<{S!jv1=^sfemssYcPTaw-;Zbdl`g$$Ue`$iDdFA1`xU0c7Y|+^mgFOfwu!Y1I_r} zF+4_`OklH=5HB$fvA&6yfLO6h_z_JuKeb5G{hwo)GnX+H{LsM8OoyiRDfDLMF8DE; zDjy%je;xfNb>n9F(Uq+0k0*%x-$Ew0+0! z?vDK(`((t@g6)C&=Frxy_zbs z{zh>vTMGyBbHugg@`z!bd5mgLYckB`>&)JOxiDyU2F;G3*%~ybhvqe+e(ith132i! zi$6C8zWFnFKfgGw5!pMl@2zdn=4W8=WIeK<1Gkq64^m@?N<+DG}LbW}C3?-Rl5VrU{Gzv%Ye-zFm zQoZM>$Y~krK;&KD4*DIaC~2dM;0GluVS9-!>o}IfhQ4<3LNs!-QMg-T_r1$kQ#`@| zUuCZuv#MF3D6;we?Kj{mv1i@ERY8+Q(rY-JlNkuSW^WnCRV!Ic#^$VkkMF789hY&d z#~kmRgV$jzSPV{n*F4MdMy7}JngvVpIbwoGpU)BHDuS*Dy2_rl31t?qb&iK7@U61z z58-M)+YdXj8|9PSdg1uUs%C0qceR#|nm6j}f@_;gic5-1;X&ytp}VEM^KeUZPuK1} zEj`UG9ecs`dT_k$^>htPXbj_B<+~^?hnp21!KzonQfUH&N{?`hYgM`!wp4nIDXvXH ztg_7L<y>5CXHlKWGa#()qx~?l+H<1H3RA1S!a4Sy;-k_o5UM;jwSX!e)x*{* zkC6|=g+=hqs&#CFt2}}_TPke;!S4~0E@fMlj=>hc$Ee;q2O;J!gMPmkQhuxP#ogSv mrtJA!HHddV_VmJ*H4?_WrMk>Gu}aaMhLP$rx(}{bFaI|$?keQ~ delta 2783 zcmZ`*eQZ=1w;-3WKP87_IHX#!9w1 z`>YgaF99sqs*@w3R$4pnqaSId36zaSDif)o!2W0#_76BSk%B0IYj1Z42&$RMPD-V<8PrgB)uCtQHb(o98OQvnU z|F^;*TVW9FMMo-jJo|$G_)F8_kCr6IJInr5e}7zo=ZoqqOVOC&EXR##rc2?EMeCu@ z>?J>e5wiyb^R{1x)5hF&v!EzPK33#UvK;IfDivHaZ3nK%M}wRoQ1ibE_I zT(bI*o#V{hZiWp#Lggav8%+M)_z4V_i93QaZAP?gy2$0+I`blnkAe3=fAN#mG|oo5 zvsvdTW{3BSJ){(ti#>3^xNOx)Hb%2)2EWw<8?0rkWMh#@ zUu*qdkmJ;KNoe4|-K4JDkJ2;Fnl6s}#JTpr>beJkFUtQ}A>RtX8+>F{?CWy&v3d-R zoNccI$<*)3<+e25d}tbYkfJp28%@vMIivaSYF1#i2;j~5~Q=`#Um z&8W6jw9=sITWTq3y_c+%GnRj1Mag3`NxOQ@S(BoQ=NLu(MLL*$>|tkXDeTWEABPW zRqh(znqKHlFYk({Z%a3ykmh7%L6*}=F(jvVihMlXCDzLq%_4P0zSt#dDWr^GAYRH` z=n~rqe!|@R+smq&epk7tCL5K-lH?X;v2JMp=$v!x71WE4-gJ)rOP>%XxMplP{lWa0 zF=gljX$B)IKe;cqH?}XfKXw4OkBO2MT#$52YPa+cX-->5x~Z*s>T?6o{^aH0J+1+$r;>0ud+bWH_(=Jv-5&k80HE;#1I)#&X~ns zl#!f2r1A;jl@N`WpNxKe_^ zw;IeyM%`vBqzq(-AU&tvbyHES6tBh6z! zjMy;~{I+)Wh8{JAs zK33nF>Z$82fxLB~+PIDT*sV+}g|@BmOTWNZ>O!?nxEx&e*N_+Cu0QCzXVyV_In#EP zJ)W3st(}EfAn3}mtCziBXkjE!?LQmxi2GQ!WW5WUK==lQYhXBcSAvR)F*i!?$FSgK!$LY=*o5}NJJRHZyrve zrtvl#nsb__7d5X-yU8(VZ5$w#@TienbaNdrhtp6UR~)K@;r6c`D^!6uJoCyvsehjMZR z#!(((vn!_FZ8|_;&M1Y2H&}9^oLC?Y=M5o!WnL)iU z84lWK89EEs!_9V{l@SlVw&sULWfWHq4z&%#KtuprgtzC|q050U(hS}RZ%Z)$VZ6-) z$09Db5gvn1o8iq!(9RM)T?rpXddMI&vAr5H30hY+3d=_U<20F&)O@OFg2*1^Lb z?DZWX`)B`!2RoV{9*`XVf6z7vE^|4Y=~y6rFuA$eo}AdBzUcb@0pM(; AKmY&$ diff --git a/microconf.h b/microconf.h index c831d94..e4a8afb 100644 --- a/microconf.h +++ b/microconf.h @@ -33,6 +33,7 @@ #include #include +#include typedef FILE* file_t; typedef struct { @@ -45,6 +46,22 @@ typedef struct { char* value; } save_data_t; +void _remove_spaces_end(char* str) { + if (str != NULL) { + long pos = strlen(str); + if (pos == 0) return; + pos --; + while (pos != 0) { + if (is_space_test(str[pos])) str[pos] = '\0'; + else { + if (str[pos + 1] != '\0') str[pos + 1] = '\0'; + return; + } + pos --; + } + } +} + int _microconf_read_file(file_t fp, save_data_t (*input_handler) (ulong), size_t max_len, size_t max_len_val, ulong max_cnt) { int c; @@ -52,6 +69,8 @@ int _microconf_read_file(file_t fp, save_data_t (*input_handler) (ulong), size_t bool is_space = true; bool read_key = false; bool read_val = false; + bool read_val_spaces = true; + bool print_warning = true; ulong num = 0; size_t key_addr = 0; size_t val_addr = 0; @@ -68,20 +87,24 @@ int _microconf_read_file(file_t fp, save_data_t (*input_handler) (ulong), size_t read_val = false; key_addr = 0; val_addr = 0; + read_val_spaces = true; + print_warning = true; str_num ++; } /* Считать комментарием все до конца строки */ if (c == '#') is_comment = true; /* Если символ не входит в комментарий, то: */ if (!is_comment) { - /* Пропустить пробелы в начале строки */ + /* Пропустить пробелы в начале и конце строки */ if (is_space && !is_space_test(c)) { is_space = false; read_key = true; if (num == max_cnt) { - puts("\033[1mmicroconf: \033[91mThe memory is full!\033[0m Code: READ_COUNT_ERR"); + puts("\033[1mmicroconf: \033[91mError: The memory is full!\033[0m Code: READ_COUNT_ERR"); return EXIT_FAILURE; } + _remove_spaces_end(sv.key); + _remove_spaces_end(sv.value); sv = input_handler(num); num ++; key_addr = 0; @@ -90,19 +113,23 @@ int _microconf_read_file(file_t fp, save_data_t (*input_handler) (ulong), size_t } /* Чтение значения */ if (read_val) { - if (c == '\n' || c == '#' || c == EOF) { - val_addr --; - sv.value[val_addr] = '\0'; - read_val = false; - } - if (read_val) { - if (sv.value != NULL) { - sv.value[val_addr] = c; - } - val_addr ++; - if (key_addr >= max_len) { - puts("\033[1mmicroconf: \033[91mThe memory is full!\033[0m Code: READ_VAL_ERR"); - return EXIT_FAILURE; + if (read_val_spaces && !is_space_test(c)) read_val_spaces = false; + if (!read_val_spaces) { + if (c == '\n' || c == '#' || c == EOF) { + val_addr --; + sv.value[val_addr] = '\0'; + read_val = false; + } + if (read_val) { + if (sv.value != NULL) { + sv.value[val_addr] = c; + } + val_addr ++; + if (val_addr >= max_len_val && print_warning) { + puts("\033[1mmicroconf: \033[35mWarning: The memory is full!\033[0m Code: READ_VAL_ERR"); + val_addr --; + print_warning = false; + } } } } @@ -120,26 +147,30 @@ int _microconf_read_file(file_t fp, save_data_t (*input_handler) (ulong), size_t sv.key[key_addr] = c; } key_addr ++; - if (key_addr >= max_len) { - puts("\033[1mmicroconf: \033[91mThe memory is full!\033[0m Code: READ_KEY_ERR"); - return EXIT_FAILURE; + if (key_addr >= max_len && print_warning) { + puts("\033[1mmicroconf: \033[35mWarning: The memory is full!\033[0m Code: READ_KEY_ERR"); + key_addr --; + print_warning = false; } } } /* Проверка синтаксиса файла */ if ((c == '\n' || c == '#' || c == EOF) && read_key) { - printf("\033[1mmicroconf: \033[91mSyntax error on line %lu\033[0m\n", str_num); + printf("\033[1mmicroconf: \033[91mError: Syntax error on line %lu\033[0m\n", str_num); return EXIT_FAILURE; } /* Сохраняем старое значение в переменную */ old = c; } + /* Удаляем пробелы в конце строки */ + _remove_spaces_end(sv.key); + _remove_spaces_end(sv.value); return EXIT_SUCCESS; } int microconf_compile(file_t fp, save_data_t (*input_handler) (ulong), config_info_t st) { if (fp == NULL) { - puts("\033[1mmicroconf: \033[91mUnable to open file!\033[0m"); + puts("\033[1mmicroconf: \033[91mError: Unable to open file!\033[0m"); return EXIT_FAILURE; } rewind(fp); diff --git a/microconf_test.conf b/microconf_test.conf index d539a30..d1998d4 100644 --- a/microconf_test.conf +++ b/microconf_test.conf @@ -20,6 +20,6 @@ # # -key_1::value_1 # Value -key_2::value_2 # Value -key_3::value_3 # Value \ No newline at end of file +key_1 :: value_1 # Value +key_2 :: value_2 # Value +key_3 :: value_3 # Value