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

Reply via email to