#include "libublsettings.h" int yon_char_find_last(char *source, char find){ int size = strlen(source); int i=size; for (;source[i]!=find&&i>0;i--); if (source[i]!=find)i=-1; return i; } char *yon_char_append(const char *source, const char *append) { if (source && append) { int size = strlen(source) + strlen(append) + 1; char *final = malloc(size); memset(final, 0, size); sprintf(final, "%s%s", source, append); return final; } return NULL; } char *yon_char_append_c(const char *source, char append) { if (source) { size_t size = strlen(source) + 2; char *final = malloc(size); memset(final, 0, size); memcpy(final,source,size-2); final[size-2]=append; return final; } return NULL; } char *yon_char_append_element(char *source,char *target, char *divider){ if (!yon_char_is_empty(target)&&!yon_char_is_empty(divider)){ if (yon_char_is_empty(source)) return yon_char_new(target); int size; config_str parsed = yon_char_parse(source,&size,divider); if (yon_char_parsed_check_exist(parsed,size,target)==-1){ yon_char_parsed_add_or_create_if_exists(parsed,&size,target); return yon_char_parsed_to_string(parsed,size,divider); } } return yon_char_new(source); } char *yon_char_remove_element(char *source,char *target, char *divider){ if (!yon_char_is_empty(source)&&!yon_char_is_empty(target)&&!yon_char_is_empty(divider)){ if (yon_char_is_empty(source)) return NULL; int size; config_str parsed = yon_char_parse(source,&size,divider); int pos = yon_char_parsed_check_exist(parsed,size,target); if (pos!=-1){ parsed = yon_char_parsed_rip(parsed,&size,pos); return yon_char_parsed_to_string(parsed,size,divider); } } return yon_char_new(source); } char *yon_char_new(const char *chr) { if (chr){ char *newchar = malloc(strlen(chr) + 1); memset(newchar, 0, strlen(chr) + 1); memcpy(newchar, chr, strlen(chr)); return newchar; } else return NULL; } char *yon_char_unite(const char *source, ...){ if (source){ va_list arglist; char *new_char=NULL; char *unite_char=NULL; new_char=yon_char_new(source); va_start(arglist,source); unite_char = va_arg(arglist,char*); while(unite_char){ if (unite_char[0]!='\0'){ char *temp = yon_char_append(new_char,unite_char); free(new_char); new_char=temp; } unite_char = va_arg(arglist,char*); } va_end(arglist); return new_char; } return NULL; } char *yon_cut(char *source, int size, int startpos) { if (source){ if (strlen(source+startpos)>=size){ char *cut = NULL; cut = malloc(size + 1); memset(cut, 0, size + 1); memcpy(cut, source + startpos, size); return cut; } } return NULL; } int yon_char_check_element(char *target, char *element, char *divider){ if (yon_char_is_empty(target)||yon_char_is_empty(element)||yon_char_is_empty(divider)) return 0; int size; 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>-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){ // if (!yon_char_check_element(target,element,divider)) return NULL; // int size; // config_str parsed = yon_char_parse(target,&size,divider); // int found = yon_char_parsed_check_exist(parsed,size,element); // yon_char_parsed_rip(parsed,&size,found); // char *final = yon_char_parsed_to_string(parsed,size,divider); // yon_char_parsed_free(parsed,size); // return final; // } int yon_char_add_element(char *target, char *element, int position, char *divider){ if (!yon_char_check_element(target,element,divider)) return 0; int size; config_str parsed = yon_char_parse(target,&size,divider); if (position>size) position = size; yon_char_parsed_add_or_create_if_exists(parsed,&size,element); memcpy(parsed+position+1,parsed+position,sizeof(parsed)-sizeof(char*)*(size-position-1)); return 1; } int yon_char_check_begins_with(char *haystack, char *needle){ if (!yon_char_is_empty(haystack)&&!yon_char_is_empty(needle)&&strlen(haystack)>=strlen(needle)){ int size = strlen(needle); for (int i=0;i=dividepos){ char *cut = malloc(dividepos + 1); memset(cut, 0, dividepos + 1); memcpy(cut, source, dividepos); char *left = malloc(strlen(source) - strlen(cut)); memset(left, 0, strlen(source) - strlen(cut)); memcpy(left, source + dividepos + 1, (strlen(source) - dividepos)); memset(source, 0, strlen(source)); memcpy(source, left, strlen(left)); free(left); return cut; } return NULL; } // int yon_char_find_count(char *source, char *find){ // char *working_string=yon_char_new(source); // int i=0; // int size=0; // int pos=0; // config_str rtn = yon_char_parse(working_string,&size,find); // free(working_string); // yon_char_parsed_free(rtn,size); // return size-1; // } int yon_char_count(char *source, char *find){ char *working_string=yon_char_new(source); int i=0; int size=0; char *cur=strstr(source,find); for (i=0;cur;cur = strstr(cur,find)){ cur++; i++; } return i; } char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) { if (source&÷pos){ char *cut = strstr(source, dividepos); if (cut){ int leng = strlen(source) - strlen(cut); cut = yon_char_divide(source, leng); return cut; } } return source; } char *yon_char_from_int(int int_to_convert) { int i = snprintf( NULL, 0, "%d", int_to_convert ); char *ch = malloc(i * sizeof(char) + 1); memset(ch,0,i * sizeof(char) + 1); sprintf(ch, "%d", int_to_convert); return ch; } char *yon_char_from_float(float int_to_convert) { int i = 1; float convert_check = (float)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_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; double convert_check = (double)int_to_convert; for (i = 1; convert_check >= 10; i++) { convert_check = convert_check / 10; } char *ch = malloc(i * sizeof(char) + 1); memset(ch,0,i * sizeof(char) + 1); sprintf(ch, "%ld", int_to_convert); return ch; } char* yon_char_replace(char *source, char *find, char *replace){ int size; config_str parsed = yon_char_parse(source,&size,find); char *final = yon_char_parsed_to_string_full(parsed,size,replace); return final; } // char *yon_char_replace(char *source, char *find, char*replace){ // if (!strstr(replace,find)){ // int source_size = strlen(source); // int replace_size = strlen(replace); // char *final=NULL; // char *temp=NULL; // while ((final=strstr(source,find))){ // int final_size = strlen(final); // temp=malloc(source_size-final_size+replace_size); // memset(temp,0,source_size-final_size+replace_size); // memcpy(temp,source,source_size-final_size); // char *tmp = yon_char_append(temp,replace); // if (temp) free(temp); // temp = tmp; // source=yon_char_append(temp,final+strlen(find)); // free(temp); // } // } // return source; // } char *yon_char_replace_single(char *source, char *find, char *replace){ if (!yon_char_is_empty(source)&&!yon_char_is_empty(find)){ char *current = NULL; if ((current=strstr(source,find))){ int size = sizeof(char)*(strlen(source)-strlen(find)+strlen(replace)+1); int replace_pos = strlen(source)-strlen(find); char *final = malloc(size); memset(final,0,size); memcpy(final,source,replace_pos); memcpy(final+replace_pos,replace,strlen(replace)); if (strlen(source+replace_pos)>strlen(find)){ memcpy(final+strlen(final),source+strlen(find),strlen(source+strlen(find))); } return final; } } return NULL; } char **yon_char_parse(const char * parameters, int *size, char * divider){ *size=0; if (parameters&&!yon_char_is_empty(divider)){ if (!strstr(parameters,divider)) return yon_char_parsed_new(size,parameters,NULL); char **string=NULL; char *paramline=yon_char_new(parameters); char *param = strstr(paramline,divider); for (;param;param=strstr(paramline,divider)){ string = yon_remalloc(string,sizeof(char*)*((*size)+1)); int cur_size = strlen(paramline)-strlen(param); string[(*size)] = malloc(cur_size+1); memset(string[(*size)],0,cur_size+1); memcpy(string[(*size)],paramline,cur_size); memmove(paramline,paramline+strlen(string[(*size)])+strlen(divider),strlen(param) - strlen(divider) + 1); // string[(*size)]=yon_char_divide(paramline,strlen(paramline)-strlen(param)); *size=(*size)+1; } string = yon_remalloc(string,sizeof(char*)*((*size)+1)); string[(*size)]=paramline; (*size)+=1; if(!string){ string = yon_char_parsed_new(size,parameters,NULL); } return string; } return NULL; } 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 ((*size)==1){ yon_char_parsed_free(char_string,*size); return NULL; } 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]); new_index++; } else { free(char_string[i]); } } free(char_string); (*size) = (*size) - 1; return new_char_parsed; } else { return NULL; } } int yon_char_parsed_check_exist(char **parameters, int size, char *param){ if (parameters&&size&&!yon_char_is_empty(param)){ for (int i=0;i0){ for (int i=0;i0){ int final_size=0; config_str final = yon_char_parsed_new(&final_size,to_copy[0],NULL); for (int i=1;i0 && !yon_char_is_empty(prepend)){ for (int i=0;i0 && !yon_char_is_empty(prepend)){ for (int i=0;i0&&size2>0){ *final_size=0; config_str parsed_final = yon_char_parsed_new(final_size,array1[0],NULL); for (int i=1;i0&&size2>0){ *final_size=0; int new_size=0; config_str parsed_final = yon_char_parsed_new(final_size,array1[0],NULL); for (int i=1;i0){ for (int i=0;i0){ for (int i=0;i0){ dictionary *dict = NULL; for (int i=0;i0){ dictionary *dict = NULL; for (int i=0;i0){ char *final_string = ""; char *temp; for (int i=0;i0){ char *final_string = ""; char *temp; temp = yon_char_unite(final_string,parsed[0],NULL); final_string=temp; for (int i=1;i0&& iterations>0){ char *final_string = ""; char *temp; for (int i=0;ipos){ config_str new_parsed = malloc(sizeof(char*)*pos); for (int i=0;ilength&&strstr(target," ")){ config_str final = NULL; char *current = yon_char_new(target); for (;strlen(current)>length;){ int last = yon_char_find_last_symbol_before_length(target,' ',length); if (last>-1){ char *parsed = yon_char_divide(current,last); yon_char_parsed_add_or_create_if_exists(final,size,parsed); free(parsed); } } return final; } config_str ret_target = yon_char_parsed_new(size,target,NULL); return ret_target; } char *yon_char_get_element(char *target, unsigned int position, char *divider){ if (!yon_char_is_empty(target)&&strstr(target,divider)){ int size; char *final = NULL; config_str parsed = yon_char_parse(target,&size,divider); if (size>=position){ final = yon_char_new(parsed[position]); } yon_char_parsed_free(parsed,size); return final; } return NULL; } char *yon_char_wrap_to_length_str(char *target, unsigned int length){ int size=0; if (!yon_char_is_empty(target)&&strlen(target)>length&&strstr(target," ")){ config_str final = NULL; char *current = yon_char_new(target); for (;strlen(current)>length;){ int last = yon_char_find_last_symbol_before_length(current,' ',length); if (last>-1){ char *parsed = yon_char_divide(current,last); yon_char_parsed_add_or_create_if_exists(final,&size,parsed); free(parsed); }else { char *next_space = strstr(current," "); if (next_space) { last = strlen(current)-strlen(next_space); char *parsed = yon_char_divide(current,last); yon_char_parsed_add_or_create_if_exists(final,&size,parsed); free(parsed); } else { break; } } } yon_char_parsed_add_or_create_if_exists(final,&size,current); char *final_string = yon_char_parsed_to_string(final,size,"\n"); yon_char_parsed_free(final,size); return final_string; } return target; } int yon_ubl_check_root(){ if (getuid()==0) return 1; else return 0; } char *yon_ubl_root_user_get(){ char *user=NULL; if (yon_ubl_check_root()){ user=getenv("SUDO_USER"); if (user&&strcmp(user,"")!=0){ return user; }else { FILE *file = popen("getent passwd $PKEXEC_UID | cut -d: -f1","r"); user=malloc(4096); memset(user,0,4096); if (fgets(user,4096,file)){}; user=yon_char_divide_search(user,"\n",-1); fclose(file); if (user) return user; } } return getlogin(); } char *yon_ubl_user_get_home_directory(){ FILE *path = popen(get_home_dir_command,"r"); char *ret = malloc(4096); memset(ret,0,4096); if (fgets(ret,4096,path)){}; ret=yon_char_divide_search(ret,"\n",-1); fclose(path); return ret; } config_str yon_ubl_get_all_users(int *user_size){ struct passwd *user = NULL; config_str user_list = NULL; while ((user = getpwent())) { if (!user_list) user_list = yon_char_parsed_new(user_size,user->pw_name,NULL); else { user_list = yon_char_parsed_append(user_list,user_size,user->pw_name); } } endpwent(); return user_list; }