From 7aba8e26775c7e9cc89f9891b40375e4aa4582cb Mon Sep 17 00:00:00 2001 From: Teuniz Date: Tue, 6 Apr 2021 19:36:17 +0200 Subject: [PATCH] Update utils. --- global.h | 2 +- utils.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 135 insertions(+), 7 deletions(-) diff --git a/global.h b/global.h index f2f653a..28b747e 100644 --- a/global.h +++ b/global.h @@ -35,7 +35,7 @@ #define PROGRAM_NAME "DSRemote" -#define PROGRAM_VERSION "0.37_2103130857" +#define PROGRAM_VERSION "0.37_2104061935" #define MAX_PATHLEN 1024 diff --git a/utils.c b/utils.c index 0189cf6..dbb44b1 100644 --- a/utils.c +++ b/utils.c @@ -142,7 +142,7 @@ int get_directory_from_path(char *dest, const char *src, int sz) return 0; } - for(i=len-1; i>=0; i--) + for(i=len-1; i>0; i--) { if((src[i]=='/') || (src[i]=='\\')) { @@ -150,16 +150,12 @@ int get_directory_from_path(char *dest, const char *src, int sz) } } - strncpy(dest, src, sz); + strlcpy(dest, src, sz); if(i < sz) { dest[i] = 0; } - else - { - dest[sz-1] = 0; - } return strlen(dest); } @@ -714,6 +710,105 @@ void latin1_to_ascii(char *str, int len) } +int utf8_set_byte_len(char *str, int new_len) +{ + int i, len; + + if(str == NULL) return 0; + + if(new_len < 1) return 0; + + len = strlen(str); + + if(new_len >= len) return len; + + for(i=new_len-1; i>=0; i--) + { + if((((unsigned char *)str)[i] & 0b11000000) != 0b10000000) + { + str[i] = 0; + + return i; + } + } + + str[0] = 0; + + return 0; +} + + +int utf8_set_char_len(char *str, int new_len) +{ + int i, j=0; + + if(str == NULL) return 0; + + if(new_len < 0) return 0; + + for(i=0; ; i++) + { + if(str[i] == 0) break; + + if((((unsigned char *)str)[i] & 0b11000000) != 0b10000000) + { + if(j == new_len) + { + str[i] = 0; + + return j; + } + + j++; + } + } + + return j; +} + + +int utf8_strlen(const char *str) +{ + int i, j=0; + + if(str == NULL) return 0; + + for(i=0; ; i++) + { + if(str[i] == 0) break; + + if((((unsigned char *)str)[i] & 0b11000000) != 0b10000000) + { + j++; + } + } + + return j; +} + + +int utf8_idx(const char *str, int idx) +{ + int i, j=0; + + if(str == NULL) return 0; + + for(i=0; ; i++) + { + if(str[i] == 0) break; + + if((((unsigned char *)str)[i] & 0b11000000) != 0b10000000) + { + if(j == idx) return i; + + j++; + } + } + + return 0; +} + + int antoi(const char *input_str, int len) { char str[4096]; @@ -2327,6 +2422,39 @@ int str_replace_substr(char *str, int len, int n, const char *dest_substr, const } +int convert_non_ascii_to_hex(char *dest, const char *src, int destlen) +{ + int i, len, newlen=0; + + len = strlen(src); + + for(i=0; i 126)) + { + if((newlen + 7) >= destlen) + { + break; + } + + newlen += snprintf(dest + newlen, 7, "<0x%.2x>", (unsigned char)src[i]); + } + else + { + if((newlen + 2) >= destlen) + { + break; + } + + dest[newlen++] = src[i]; + } + } + + dest[newlen] = 0; + + return newlen; +} +