From b5d539616723e1d62cc96d85602c7d186b7f892a Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Wed, 4 Mar 2026 09:10:56 +0300 Subject: [PATCH] fixed for "-pedantic-errors" --- CMakeLists.txt | 2 +- locale/ru/LC_MESSAGES/usefull_macros.mo | Bin 5115 -> 5289 bytes locale/ru/messages.po | 34 ++++---- locale/ru/ru.po | 34 ++++---- parseargs.c | 109 +++++++++++++----------- socket.c | 5 +- usefull_macros.h | 2 +- 7 files changed, 98 insertions(+), 88 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 778882f..67cc5ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(VERSION "${MAJOR_VERSION}.${MID_VERSION}.${MINOR_VERSION}") project(${PROJ} VERSION ${VERSION} LANGUAGES C) # default flags -set(CMAKE_C_FLAGS "${CFLAGS} -O2") +set(CMAKE_C_FLAGS "${CFLAGS} -O2 -pedantic-errors") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -Wextra -Wall -Werror -W") set(CMAKE_COLOR_MAKEFILE ON) diff --git a/locale/ru/LC_MESSAGES/usefull_macros.mo b/locale/ru/LC_MESSAGES/usefull_macros.mo index b302ff2fe9707e9ba029029155ada6d7f276f0b9..e0c1c4bff1ecf5e21acac3f9eb1c0807bb6ece3b 100644 GIT binary patch delta 1161 zcmY+@OGs2v7{Kx4IKG|nRoTPz+QV^7Yf4R;nBKL?&?c&74&{VpPS_X}!5z{P0z-l} zWf8cl)!<-FY7=gv<+(1xRV3je$bB#&{l9xH=nUun?sp&Oe&;)9vcA`T^J}I1siL*e zYv?06N`>&Jiv#Uju2Mc+!b&W1JI~eNM&biljbYr3*RT{Hpa-AeCVYh(a0aW;a$-|0 zbFz*Lzp)uB@|*__;Wpwh%0NTdfWugUZ!my!DDSVJOu&`z#C5oZxDB^sH_8O!D2b2S z_f0b6LmUfW3!$p)Cd&-;y>o7rl9(Uju+=W@( zjlObc{0q31*eqA3oyiL>jC0`!N@jN%wF5t)d}tM;*vbN)!e@9Gm#_uvS+^tDg-3B5 z_u>L}qMP--h-Z;PtMzo*lm&d>E}d);X$D<3Q3G8zpN~!v>?WH=vX;iyQ2ZhOHA#Y8 z>~hPDS;_xeEm6tZ6^dc+3kjQgI7rE5LrKa0HkL-!)7jMargLL6U7Bn*X%t1V73@~T zk;y3+UH*ZH-gd4`APcqUY@lcTcaWUj;E8>sGi2Oo|X@-c)a<404~C)U;qFB delta 988 zcmXxjOGs5g9LMp$dA(lKeCxHWe0KHvq^>C_Sc-+9q9`Z`(Jl}X5jQHraUkjr5A~seh=ye5A}QtM=+e}M?Q|4cp4M9hMM?2Dv)EW!(z^(6}zwx z=dc++pf^b49}T_O!#)q-6yCyjs9ZR~7OczmBYlWk*bFY=YpllF9J6{Hz$TnW&AWlu za38gRKlm6sa@l_ke9ARz!xHvU9~#0(xQzGl81G<$3~a<%yo=AV3%}z{tY-iFaTLe! zC9=WB_go<*TuuaCj*0Wv3bpFY^HGciZH~}_i(s6NRRrVLQOOyhDstsTIaP(tbT@`P zHa5nH%@ySeak$&SC32;pH)sf*B|Gi5N>@r}rz=%NB|w+$ZF)V^Kx` diff --git a/locale/ru/messages.po b/locale/ru/messages.po index 81f1d4d..f3cd849 100644 --- a/locale/ru/messages.po +++ b/locale/ru/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-06 15:03+0300\n" +"POT-Creation-Date: 2026-03-04 09:05+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -77,79 +77,79 @@ msgstr "" msgid "Can't use multiple args with arg_none!" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:267 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:268 #, c-format msgid "double long arguments: --%s" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:273 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:274 #, c-format msgid "double short arguments: -%c" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:343 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:347 #, c-format msgid "Need argument with %s type\n" msgstr "" #. print only one message -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:435 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:439 msgid "sl_showhelp(): option index out of range" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:441 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:445 #, c-format msgid "Usage: %s [arguments]\n" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:528 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:535 #, c-format msgid "Wrong parameter: %s" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:532 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:539 #, c-format msgid "%s: need argument!" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:536 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:543 #, c-format msgid "Wrong argument \"%s\" of parameter \"%s\"" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:147 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:154 msgid "Server disconnected" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:434 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:441 msgid "Can't start server handlers thread" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:503 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:513 msgid "Limit of connections reached" msgstr "" #. check for RB overflow #. -1 - buffer empty (can't be), -2 - buffer overflow -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:547 -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:548 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:557 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:558 #, c-format msgid "Server thread: ring buffer overflow for fd=%d" msgstr "" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:562 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:572 #, c-format msgid "Server thread: can't write data to ringbuffer: overflow from fd=%d" msgstr "" #. buffer overflow -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:574 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:584 #, c-format msgid "Server thread: buffer overflow from fd=%d" msgstr "" #. never reached -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:664 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:681 #, c-format msgid "Unsupported socket type %d" msgstr "" diff --git a/locale/ru/ru.po b/locale/ru/ru.po index dc054b0..2621218 100644 --- a/locale/ru/ru.po +++ b/locale/ru/ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2025-11-06 14:57+0300\n" + "POT-Creation-Date: 2026-03-04 09:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -76,80 +76,80 @@ msgstr " msgid "Can't use multiple args with arg_none!" msgstr "Массив параметров не может иметь тип arg_none!" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:267 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:268 #, c-format msgid "double long arguments: --%s" msgstr "дублирующийся длинный параметр: --%s" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:273 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:274 #, c-format msgid "double short arguments: -%c" msgstr "дублирующийся короткий параметр: -%c" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:343 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:347 #, c-format msgid "Need argument with %s type\n" msgstr "Необходим аргумент с типом %s\n" #. print only one message -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:435 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:439 msgid "sl_showhelp(): option index out of range" msgstr "sl_showhelp(): индекс опции вне допустимого диапазона" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:441 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:445 #, c-format msgid "Usage: %s [arguments]\n" msgstr "Использование: %s [аргументы]\n" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:528 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:535 #, c-format msgid "Wrong parameter: %s" msgstr "Неправильный параметр: %s" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:532 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:539 #, c-format msgid "%s: need argument!" msgstr "%s: необходим аргумент!" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:536 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/parseargs.c:543 #, c-format msgid "Wrong argument \"%s\" of parameter \"%s\"" msgstr "Неправильный аргумент \"%s\" параметра \"%s\"" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:147 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:154 msgid "Server disconnected" msgstr "Сервер отключен" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:434 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:441 msgid "Can't start server handlers thread" msgstr "Не могу запустить поток-обработчик сервера" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:503 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:513 msgid "Limit of connections reached" msgstr "Достигнут предел соединений" #. check for RB overflow #. -1 - buffer empty (can't be), -2 - buffer overflow -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:547 -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:548 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:557 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:558 #, c-format msgid "Server thread: ring buffer overflow for fd=%d" msgstr "Поток сервера: переполнение буфера от fd=%d" -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:562 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:572 #, c-format msgid "Server thread: can't write data to ringbuffer: overflow from fd=%d" msgstr "Поток сервера: не могу сохранить данные в кольцевом буфере, " "переполнение от fd=%d" #. buffer overflow -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:574 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:584 #, c-format msgid "Server thread: buffer overflow from fd=%d" msgstr "Поток сервера: переполнение буфера от fd=%d" #. never reached -#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:664 +#: /home/eddy/Docs/SAO/C_diff/snippets_library/socket.c:681 #, c-format msgid "Unsupported socket type %d" msgstr "Неподдерживаемый тип сокета %d" diff --git a/parseargs.c b/parseargs.c index 8e4b7f7..e6d7b10 100644 --- a/parseargs.c +++ b/parseargs.c @@ -191,6 +191,18 @@ void *get_aptr(void *paptr, sl_argtype_e type){ return aptr[i - 1]; } +static int cmpstringp(const void *p1, const void *p2){ + if(!p1 || !p2) return 0; + const char *str1 = * (char * const *) p1, *str2 = * (char * const *) p2; + if(!str1 && !str2) return 0; + else if(!str1) return 1; + else if(!str2) return -1; + return strcmp(str1, str2); +} +static int cmpcharp(const void *p1, const void *p2){ + return (int)(*(char * const)p1 - *(char *const)p2); +} + /** * @brief sl_parseargs_hf - parse arguments with user help funtion * @param argc - amount of arguments @@ -246,17 +258,6 @@ void sl_parseargs_hf(int *argc, char ***argv, sl_option_t *options, void (*helpf } } // sort all lists & check for repeating - int cmpstringp(const void *p1, const void *p2){ - if(!p1 || !p2) return 0; - const char *str1 = * (char * const *) p1, *str2 = * (char * const *) p2; - if(!str1 && !str2) return 0; - else if(!str1) return 1; - else if(!str2) return -1; - return strcmp(str1, str2); - } - int cmpcharp(const void *p1, const void *p2){ - return (int)(*(char * const)p1 - *(char *const)p2); - } qsort(longlist, optsize, sizeof(char *), cmpstringp); qsort(shortlist,optsize, sizeof(char), cmpcharp); char *prevl = longlist[0], prevshrt = shortlist[0]; @@ -336,7 +337,10 @@ void sl_parseargs_hf(int *argc, char ***argv, sl_option_t *options, void (*helpf type = "string"; break; case arg_function: +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" result = ((sl_argfn_t)aptr)(optarg); +#pragma GCC diagnostic pop break; } if(!result){ @@ -460,6 +464,49 @@ void sl_showhelp(int oindex, sl_option_t *options){ exit(-1); } +static int findsubopt(char *par, sl_suboption_t *so){ + int idx = 0; + if(!par) return -1; + while(so[idx].name){ + if(strcasecmp(par, so[idx].name) == 0) return idx; + ++idx; + } + return -1; // badarg +} +static int opt_setarg(sl_suboption_t *so, int idx, char *val){ + sl_suboption_t *soptr = &so[idx]; + int result = FALSE; + void *aptr = soptr->argptr; + switch(soptr->type){ + default: + case arg_none: + if(soptr->argptr) *((int*)aptr) += 1; // increment value + result = TRUE; + break; + case arg_int: + result = myatoll(aptr, val, arg_int); + break; + case arg_longlong: + result = myatoll(aptr, val, arg_longlong); + break; + case arg_double: + result = myatod(aptr, val, arg_double); + break; + case arg_float: + result = myatod(aptr, val, arg_float); + break; + case arg_string: + result = (*((void**)aptr) = (void*)strdup(val)) != NULL; + break; + case arg_function: +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" + result = ((sl_argfn_t)aptr)(val); +#pragma GCC diagnostic pop + break; + } + return result; +} /** * @brief sl_get_suboption - get suboptions from parameter string * @param str - parameter string @@ -467,46 +514,6 @@ void sl_showhelp(int oindex, sl_option_t *options){ * @return TRUE if all OK */ int sl_get_suboption(char *str, sl_suboption_t *opt){ - int findsubopt(char *par, sl_suboption_t *so){ - int idx = 0; - if(!par) return -1; - while(so[idx].name){ - if(strcasecmp(par, so[idx].name) == 0) return idx; - ++idx; - } - return -1; // badarg - } - int opt_setarg(sl_suboption_t *so, int idx, char *val){ - sl_suboption_t *soptr = &so[idx]; - int result = FALSE; - void *aptr = soptr->argptr; - switch(soptr->type){ - default: - case arg_none: - if(soptr->argptr) *((int*)aptr) += 1; // increment value - result = TRUE; - break; - case arg_int: - result = myatoll(aptr, val, arg_int); - break; - case arg_longlong: - result = myatoll(aptr, val, arg_longlong); - break; - case arg_double: - result = myatod(aptr, val, arg_double); - break; - case arg_float: - result = myatod(aptr, val, arg_float); - break; - case arg_string: - result = (*((void**)aptr) = (void*)strdup(val)) != NULL; - break; - case arg_function: - result = ((sl_argfn_t)aptr)(val); - break; - } - return result; - } char *tok; int ret = FALSE; char *tmpbuf; diff --git a/socket.c b/socket.c index f1f874c..9b9900a 100644 --- a/socket.c +++ b/socket.c @@ -469,7 +469,9 @@ static void *serverthread(void _U_ *d){ // ZERO - listening server socket poll_set[0].fd = sockfd; poll_set[0].events = POLLIN; - // disconnect client + // disconnect client (no way to make this function non-nested) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" void disconnect_(sl_sock_t *c, int N){ DBG("Disconnect client \"%s\" (fd=%d)", c->IP, c->fd); if(s->disconnect_handler) s->disconnect_handler(c); @@ -496,6 +498,7 @@ static void *serverthread(void _U_ *d){ pthread_mutex_unlock(&c->mutex); --nfd; } +#pragma GCC diagnostic pop // allocate buffer with size not less than RB size size_t bufsize = s->buffer->length; // as RB should be 1 byte less, this is OK uint8_t *buf = MALLOC(uint8_t, bufsize); diff --git a/usefull_macros.h b/usefull_macros.h index fe99cf9..6172e19 100644 --- a/usefull_macros.h +++ b/usefull_macros.h @@ -453,7 +453,7 @@ typedef struct{ double magick; // -Inf - to distinguish it from sl_sock_*_t int n; // if n < 0 there was no any number in `key` } sl_sock_keyno_t; -#define SL_SOCK_KEYNO_DEFAULT (sl_sock_keyno_t){.magick = -INFINITY, .n = -1} +#define SL_SOCK_KEYNO_DEFAULT {.magick = -INFINITY, .n = -1} void sl_sock_keyno_init(sl_sock_keyno_t*); int sl_sock_keyno_check(sl_sock_keyno_t*);