diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 6b2b9d3..2208110 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -115,8 +115,25 @@ int yon_char_check_element(char *target, char *element, char *divider){ config_str parsed = yon_char_parse(target,&size,divider); int found = yon_char_parsed_check_exist(parsed,size,element); yon_char_parsed_free(parsed,size); - return !!found; - return 0; + return found>-1; +} + +char *yon_char_swap_element(const char *source, const char *a, const char *b, const char *divider){ + if (yon_char_is_empty(source)||yon_char_is_empty(a)||yon_char_is_empty(b)) return 0; + int size; + config_str parsed = yon_char_parse(source,&size,(char*)divider); + int found_a = yon_char_parsed_check_exist(parsed,size,(char*)a); + int found_b = yon_char_parsed_check_exist(parsed,size,(char*)b); + if (found_a>-1&&found_b>-1){ + char *temp = parsed[found_a]; + parsed[found_a] = parsed[found_b]; + parsed[found_b] = temp; + char *full = yon_char_parsed_to_string(parsed,size,(char*)divider); + yon_char_parsed_free(parsed,size); + return full; + } + yon_char_parsed_free(parsed,size); + return NULL; } // char *yon_char_remove_element(char *target, char *element, char *divider){ diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 3332538..2b0ff55 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -887,6 +887,7 @@ enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char current = (yon_config_parameter*)yon_dictionary_get_last((dictionary *)__yon__config__strings); } else if (!yon_char_is_empty(data)&¤t->data&&!strcmp((char*)current->data,(char*)data)){ save_type=YON_CONFIG_SAVED_EXIST; + yon_config_remove_ignore(key); return save_type; } else { current->data = yon_char_new(data); diff --git a/source/libublsettings.h b/source/libublsettings.h index b3dbafc..5364a98 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -696,6 +696,15 @@ char *yon_cut(char *source, int size, int startpos); int yon_char_check_element(char *target, char *element, char *divider); + +/// @brief Swap 2 substrings. +/// @param source Source string +/// @param a First substring to swap +/// @param b Second substring to swap +/// @param divider String divider +/// @return Type: char*. String with swapped substrings. The data is owned by the caller of the method. +char *yon_char_swap_element(const char *source, const char *a, const char *b, const char *divider); + /** * @brief Check if string begins with substring. *