#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stddef.h>
#define LIBKODIK_PARAMS_TYPES_START 7 /* Длина начала параматра в строке `type=` */
#define LIBKODIK_PARAMS_TYPES_NO_VALUE 42 /* Позиция в строке, если парамерт необходимо удалить полностью */
#define LIBKODIK_PARAMS_TYPES_MAX 12 /* Максимально возможное кол-во параметров для type=... */
#define LIBKODIK_PARAMS_PRINTF_LENGTH_STRING 3 /* Размер `%s,` */
void
libkodik_api_countries_param_types_remove_unusable_values(char *psz_value, uint8_t i_count) {
size_t const s_strlen
= strlen(psz_value
); char buffer[s_strlen];
(void) strcpy(buffer
, psz_value
); if (0 == i_count) { /* Кол-во параметров равно нулю? Просто срезает от и до */
(
psz_value,
&buffer[LIBKODIK_PARAMS_TYPES_NO_VALUE],
s_strlen - LIBKODIK_PARAMS_TYPES_NO_VALUE + 1
);
return;
}
(
&psz_value[LIBKODIK_PARAMS_TYPES_START],
&buffer[LIBKODIK_PARAMS_TYPES_START] + (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count)),
s_strlen - (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count) + 1)
);
}
int main(void) {
char buffer_flags[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
char buffer_flags2[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
uint8_t i_flags_count = 4;
if (12 != i_flags_count) {
libkodik_api_countries_param_types_remove_unusable_values(buffer_flags, i_flags_count);
}
printf("Changed: %s\n", buffer_flags
); printf("Original: %s\n", "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s"); i_flags_count = 0;
if (12 != i_flags_count) {
libkodik_api_countries_param_types_remove_unusable_values(buffer_flags2, i_flags_count);
}
printf("Changed2: %s\n", buffer_flags2
); printf("Original2: %s\n", "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s"); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkZGVmLmg+CgojZGVmaW5lIExJQktPRElLX1BBUkFNU19UWVBFU19TVEFSVCA3ICAgICAgICAgICAvKiDQlNC70LjQvdCwINC90LDRh9Cw0LvQsCDQv9Cw0YDQsNC80LDRgtGA0LAg0LIg0YHRgtGA0L7QutC1IGB0eXBlPWAgKi8KI2RlZmluZSBMSUJLT0RJS19QQVJBTVNfVFlQRVNfTk9fVkFMVUUgNDIgICAgICAgLyog0J/QvtC30LjRhtC40Y8g0LIg0YHRgtGA0L7QutC1LCDQtdGB0LvQuCDQv9Cw0YDQsNC80LXRgNGCINC90LXQvtCx0YXQvtC00LjQvNC+INGD0LTQsNC70LjRgtGMINC/0L7Qu9C90L7RgdGC0YzRjiAqLwojZGVmaW5lIExJQktPRElLX1BBUkFNU19UWVBFU19NQVggMTIgICAgICAgICAgICAvKiDQnNCw0LrRgdC40LzQsNC70YzQvdC+INCy0L7Qt9C80L7QttC90L7QtSDQutC+0Lst0LLQviDQv9Cw0YDQsNC80LXRgtGA0L7QsiDQtNC70Y8gdHlwZT0uLi4gKi8KI2RlZmluZSBMSUJLT0RJS19QQVJBTVNfUFJJTlRGX0xFTkdUSF9TVFJJTkcgMyAgLyog0KDQsNC30LzQtdGAIGAlcyxgICovCgp2b2lkCmxpYmtvZGlrX2FwaV9jb3VudHJpZXNfcGFyYW1fdHlwZXNfcmVtb3ZlX3VudXNhYmxlX3ZhbHVlcyhjaGFyICpwc3pfdmFsdWUsIHVpbnQ4X3QgaV9jb3VudCkgewogICAgc2l6ZV90IGNvbnN0IHNfc3RybGVuID0gc3RybGVuKHBzel92YWx1ZSk7CiAgICBjaGFyIGJ1ZmZlcltzX3N0cmxlbl07CiAgICAodm9pZCkgc3RyY3B5KGJ1ZmZlciwgcHN6X3ZhbHVlKTsKICAgIGlmICgwID09IGlfY291bnQpIHsgLyog0JrQvtC7LdCy0L4g0L/QsNGA0LDQvNC10YLRgNC+0LIg0YDQsNCy0L3QviDQvdGD0LvRjj8g0J/RgNC+0YHRgtC+INGB0YDQtdC30LDQtdGCINC+0YIg0Lgg0LTQviAqLwogICAgICAgICh2b2lkKSBtZW1jcHkKICAgICAgICAoCiAgICAgICAgICAgIHBzel92YWx1ZSwKICAgICAgICAgICAgJmJ1ZmZlcltMSUJLT0RJS19QQVJBTVNfVFlQRVNfTk9fVkFMVUVdLAogICAgICAgICAgICBzX3N0cmxlbiAtIExJQktPRElLX1BBUkFNU19UWVBFU19OT19WQUxVRSArIDEKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICh2b2lkKSBtZW1tb3ZlCiAgICAoCiAgICAgICAgJnBzel92YWx1ZVtMSUJLT0RJS19QQVJBTVNfVFlQRVNfU1RBUlRdLAogICAgICAgICZidWZmZXJbTElCS09ESUtfUEFSQU1TX1RZUEVTX1NUQVJUXSArIChMSUJLT0RJS19QQVJBTVNfUFJJTlRGX0xFTkdUSF9TVFJJTkcgKiAoTElCS09ESUtfUEFSQU1TX1RZUEVTX01BWCAtIGlfY291bnQpKSwKICAgICAgICBzX3N0cmxlbiAtIChMSUJLT0RJS19QQVJBTVNfUFJJTlRGX0xFTkdUSF9TVFJJTkcgKiAoTElCS09ESUtfUEFSQU1TX1RZUEVTX01BWCAtIGlfY291bnQpICsgMSkKICAgICk7Cn0KCmludCBtYWluKHZvaWQpIHsKCWNoYXIgYnVmZmVyX2ZsYWdzW10gPSAidHlwZXM9JXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMmeWVhcj0lbHUmdHJhbnNsYXRpb25faWQ9JWx1JnRyYW5zbGF0aW9uX3R5cGU9JXMmc29ydD0lcyI7CgljaGFyIGJ1ZmZlcl9mbGFnczJbXSA9ICJ0eXBlcz0lcywlcywlcywlcywlcywlcywlcywlcywlcywlcywlcywlcyZ5ZWFyPSVsdSZ0cmFuc2xhdGlvbl9pZD0lbHUmdHJhbnNsYXRpb25fdHlwZT0lcyZzb3J0PSVzIjsKICAgIHVpbnQ4X3QgaV9mbGFnc19jb3VudCA9IDQ7CiAgICBpZiAoMTIgIT0gaV9mbGFnc19jb3VudCkgewogICAgICAgIGxpYmtvZGlrX2FwaV9jb3VudHJpZXNfcGFyYW1fdHlwZXNfcmVtb3ZlX3VudXNhYmxlX3ZhbHVlcyhidWZmZXJfZmxhZ3MsIGlfZmxhZ3NfY291bnQpOwogICAgfQogICAgcHJpbnRmKCJDaGFuZ2VkOiAgICVzXG4iLCAJYnVmZmVyX2ZsYWdzKTsKICAgIHByaW50ZigiT3JpZ2luYWw6ICAlc1xuIiwJInR5cGVzPSVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzJnllYXI9JWx1JnRyYW5zbGF0aW9uX2lkPSVsdSZ0cmFuc2xhdGlvbl90eXBlPSVzJnNvcnQ9JXMiKTsKICAgIGlfZmxhZ3NfY291bnQgPSAwOwogICAgaWYgKDEyICE9IGlfZmxhZ3NfY291bnQpIHsKICAgICAgICBsaWJrb2Rpa19hcGlfY291bnRyaWVzX3BhcmFtX3R5cGVzX3JlbW92ZV91bnVzYWJsZV92YWx1ZXMoYnVmZmVyX2ZsYWdzMiwgaV9mbGFnc19jb3VudCk7CiAgICB9CiAgICBwcmludGYoIkNoYW5nZWQyOiAgJXNcbiIsIAlidWZmZXJfZmxhZ3MyKTsKICAgIHByaW50ZigiT3JpZ2luYWwyOiAlc1xuIiwJInR5cGVzPSVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzJnllYXI9JWx1JnRyYW5zbGF0aW9uX2lkPSVsdSZ0cmFuc2xhdGlvbl90eXBlPSVzJnNvcnQ9JXMiKTsKCXJldHVybiAwOwp9Cg==