Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=1f76ee63e8f2025f039d0d723b039692137d1d3d
commit 1f76ee63e8f2025f039d0d723b039692137d1d3d Author: James Buren <[email protected]> Date: Thu Sep 6 23:40:28 2012 -0500 add function for measuring the number of actual characters in a UTF-8 string. diff --git a/src/local.h b/src/local.h index 7ebfb43..01c9bbb 100644 --- a/src/local.h +++ b/src/local.h @@ -49,6 +49,7 @@ struct module extern bool mkdir_recurse(const char *path); extern bool size_to_string(char *s,size_t n,long long size,bool pad); +extern int get_text_length(const char *s) extern int get_text_screen_width(const char *s); extern bool get_text_screen_size(const char *text,int *width,int *height); extern bool get_button_screen_size(const char *text,int *width,int *height); diff --git a/src/utility.c b/src/utility.c index f43cba7..e55e44b 100644 --- a/src/utility.c +++ b/src/utility.c @@ -81,6 +81,43 @@ extern bool size_to_string(char *s,size_t n,long long size,bool pad) return true; } +extern int get_text_length(const char *s) +{ + wchar_t wc = 0; + size_t n = 0; + size_t len = 0; + mbstate_t mbs = {0}; + int l = 0; + + if(s == 0) + { + errno = EINVAL; + fprintf(logfile,"%s: %s\n",__func__,strerror(errno)); + return -1; + } + + len = strlen(s); + + while(true) + { + n = mbrtowc(&wc,s,len,&mbs); + + if(n == (size_t) -1 || n == (size_t) -2) + { + fprintf(logfile,"%s: %s\n",__func__,strerror(errno)); + return -1; + } + + ++l; + + s += n; + + len -= n; + } + + return l; +} + extern int get_text_screen_width(const char *s) { wchar_t wc = 0; @@ -219,4 +256,4 @@ extern bool get_label_screen_size(const char *text,int *width,int *height) *height = h; return true; -} \ No newline at end of file +} _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
