From d82d45d6b6a1c8cc2da3f8a797fe4fdcd58832f8 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 30 Aug 2024 17:11:42 +0600 Subject: [PATCH 1/3] Added 2 size functions --- source/libublsettings.c | 30 ++++++++++++++++++++++++++++++ source/libublsettings.h | 4 ++++ 2 files changed, 34 insertions(+) diff --git a/source/libublsettings.c b/source/libublsettings.c index 783a43f..efe1670 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -919,6 +919,36 @@ float yon_size_convert_automatic(int bytes, int *size){ return byte_float; } +int yon_get_size_get_from_letter(char size){ + switch (size){ + case 'K': return 0; + break; + case 'M': return 1; + break; + case 'G': return 2; + break; + case 'T': return 0; + break; + default: return -1; + break; + } +} + +char *yon_size_get_mod(int size){ + char *size_modifier = NULL; + switch (size){ + case 0: size_modifier = "K"; + break; + case 1: size_modifier = "M"; + break; + case 2: size_modifier = "G"; + break; + case 3: size_modifier = "T"; + break; + } + return size_modifier; +} + config_str yon_dir_get_contents(char *dir_path, int *size){ config_str dir = NULL; *size=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index c48a649..f576c6d 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -568,6 +568,10 @@ config_str yon_ubl_get_all_users(int *user_size); */ float yon_size_convert_automatic(int bytes, int *size); +int yon_get_size_get_from_letter(char size); + +char *yon_size_get_mod(int size); + apps *yon_apps_scan_and_parse_desktops(int *sizef); void yon_apps_sort(apps *applist, int size); -- 2.35.1 From d3d39887a7fd832bef3e6dc8a281fd5d3f8719ed Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Sep 2024 11:23:54 +0600 Subject: [PATCH 2/3] Added new char converting function --- source/libublsettings.c | 14 ++++++++++++++ source/libublsettings.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/source/libublsettings.c b/source/libublsettings.c index efe1670..8bdc6a6 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -552,6 +552,20 @@ char *yon_char_from_float(float int_to_convert) return ch; } +char *yon_char_from_double(double int_to_convert) +{ + int i = 1; + double convert_check = (double)int_to_convert; + for (i = 1; convert_check >= 10; i++) + { + convert_check = convert_check / 10; + } + char *ch = malloc((i + 9)* sizeof(char)); + memset(ch,0,(i + 9)* sizeof(char)); + sprintf(ch, "%.2f", int_to_convert); + return ch; +} + char *yon_char_from_long(long int_to_convert) { int i = 1; diff --git a/source/libublsettings.h b/source/libublsettings.h index f576c6d..ea683a4 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -383,6 +383,8 @@ char *yon_char_from_int(int int_to_convert); */ char *yon_char_from_float(float int_to_convert); +char *yon_char_from_double(double int_to_convert); + /**yon_char_from_long(int int_to_convert) * [EN] * converts long to char*. -- 2.35.1 From bebb4bf8953e17e6bcd0317fc217f3e1266d3346 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 5 Sep 2024 17:48:25 +0600 Subject: [PATCH 3/3] Leaks fixes --- source/libublsettings.c | 58 +++++++++++++++++++++++++---------------- source/libublsettings.h | 1 + 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/source/libublsettings.c b/source/libublsettings.c index 8bdc6a6..efb3c76 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -229,6 +229,7 @@ void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipul if(data_manipulation) data_manipulation(dict->data); if(dict->prev) + free(dict->prev->key); free(dict->prev); } free(dict); @@ -554,28 +555,28 @@ char *yon_char_from_float(float int_to_convert) char *yon_char_from_double(double int_to_convert) { - int i = 1; - double convert_check = (double)int_to_convert; - for (i = 1; convert_check >= 10; i++) - { - convert_check = convert_check / 10; + int negative = int_to_convert < 0 ? 1 : 0; + int digits_before_decimal = (int_to_convert == 0) ? 1 : (int)log10(fabs(int_to_convert)) + 1; + int total_length = digits_before_decimal + 1 + 2 + negative + 1; + char *ch = malloc(total_length * sizeof(char)); + if (!ch) { + return NULL; } - char *ch = malloc((i + 9)* sizeof(char)); - memset(ch,0,(i + 9)* sizeof(char)); + sprintf(ch, "%.2f", int_to_convert); return ch; } char *yon_char_from_long(long int_to_convert) { - int i = 1; - double convert_check = (double)int_to_convert; - for (i = 1; convert_check >= 10; i++) - { - convert_check = convert_check / 10; + int negative = int_to_convert < 0 ? 1 : 0; + int digits = (int_to_convert == 0) ? 1 : (int)log10(labs(int_to_convert)) + 1; + int total_length = digits + negative + 1; + char *ch = malloc(total_length * sizeof(char)); + if (!ch) { + return NULL; } - char *ch = malloc(i * sizeof(char) + 1); - memset(ch,0,i * sizeof(char) + 1); + sprintf(ch, "%ld", int_to_convert); return ch; } @@ -584,7 +585,6 @@ char *yon_char_replace(char *source, char *find, char*replace){ if (!strstr(replace,find)){ char *final=NULL; char *temp=NULL; - if(!strstr(replace,find)){ while ((final=strstr(source,find))){ temp=malloc(strlen(source)-strlen(final)+strlen(replace)); memset(temp,0,strlen(source)-strlen(final)+strlen(replace)); @@ -592,8 +592,6 @@ char *yon_char_replace(char *source, char *find, char*replace){ temp=yon_char_append(temp,replace); source=yon_char_append(temp,final+strlen(find)); } - - } } return source; } @@ -621,16 +619,23 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ } char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) { - if (char_string && size && (*size) > 0 && (*size) > item_to_delete && item_to_delete >= 0) { + if (char_string && size && (*size) > 0 && item_to_delete >= 0 && item_to_delete < (*size)) { char **new_char_parsed = malloc(sizeof(char*) * ((*size) - 1)); if (!new_char_parsed) { return NULL; } - + int new_index = 0; for (int i = 0; i < (*size); i++) { if (i != item_to_delete) { new_char_parsed[new_index] = yon_char_new(char_string[i]); + if (!new_char_parsed[new_index]) { + for (int j = 0; j < new_index; j++) { + free(new_char_parsed[j]); + } + free(new_char_parsed); + return NULL; + } new_index++; } else { free(char_string[i]); @@ -970,8 +975,8 @@ config_str yon_dir_get_contents(char *dir_path, int *size){ DIR *directory = opendir(dir_path); struct dirent *de; while ((de = readdir(directory))){ - if (dir){ dir = yon_char_parsed_append(dir,size,yon_char_new(de->d_name)); - } else dir = yon_char_parsed_new(size,yon_char_new(de->d_name),NULL); + if (dir){ dir = yon_char_parsed_append(dir,size,de->d_name); + } else dir = yon_char_parsed_new(size,de->d_name,NULL); } closedir(directory); } @@ -1279,10 +1284,16 @@ int yon_config_command_prepare(config_str *commands, int *commands_size,char *co for (int j=5;j #include #include +#include #define DesktopPath "/usr/share/applications/" -- 2.35.1