summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Batz <senneth@irssi.org>2005-11-23 18:30:22 +0000
committervb <vb@dbcabf3a-b0e7-0310-adc4-f8d773084564>2005-11-23 18:30:22 +0000
commitfb6bdac677d4173e994f7a5fdaa92ac22f6671e3 (patch)
tree08e8544b33d98c417a8a6eebf2e88b63ce7a0e2e
parent870253e12c684e1998a330692665b7f9e747cc45 (diff)
downloadirssi-fb6bdac677d4173e994f7a5fdaa92ac22f6671e3.zip
replace guint by gsize for the glib2 version of irssi_ssl_read
like it's defined in GIOFuncs for glib2 moved src/fe-text/utf8.* to src/fe-common/core changed get_utf8_char so it returns a status code and the unichar argument pointer to the value that it returned before if there were no errors, so you can check for a negative value an handle the error git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4091 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/core/network-openssl.c2
-rw-r--r--src/fe-common/core/utf8.c (renamed from src/fe-text/utf8.c)14
-rw-r--r--src/fe-common/core/utf8.h (renamed from src/fe-text/utf8.h)2
-rw-r--r--src/fe-text/term-terminfo.c7
-rw-r--r--src/fe-text/textbuffer-view.c10
5 files changed, 19 insertions, 16 deletions
diff --git a/src/core/network-openssl.c b/src/core/network-openssl.c
index 547f86c1..68fb8ea8 100644
--- a/src/core/network-openssl.c
+++ b/src/core/network-openssl.c
@@ -277,7 +277,7 @@ static GIOStatus irssi_ssl_cert_step(GIOSSLChannel *chan)
return G_IO_STATUS_ERROR;
}
-static GIOStatus irssi_ssl_read(GIOChannel *handle, gchar *buf, guint len, guint *ret, GError **gerr)
+static GIOStatus irssi_ssl_read(GIOChannel *handle, gchar *buf, gsize len, gsize *ret, GError **gerr)
{
GIOSSLChannel *chan = (GIOSSLChannel *)handle;
gint err;
diff --git a/src/fe-text/utf8.c b/src/fe-common/core/utf8.c
index 4049991d..ae235d34 100644
--- a/src/fe-text/utf8.c
+++ b/src/fe-common/core/utf8.c
@@ -76,22 +76,23 @@
(Result) |= ((Chars)[(Count)] & 0x3f); \
}
-unichar get_utf8_char(const unsigned char **ptr, int len)
+int get_utf8_char(const unsigned char **ptr, int len, unichar *chr_r)
{
int i, result, mask, chrlen;
mask = 0;
UTF8_COMPUTE(**ptr, mask, chrlen);
if (chrlen == -1)
- return (unichar) -2;
+ return -2;
if (chrlen > len)
- return (unichar) -1;
+ return -1;
UTF8_GET(result, *ptr, i, mask, chrlen);
if (result == -1)
- return (unichar) -2;
-
+ return -2;
+
+ *chr_r = (unichar) result;
*ptr += chrlen-1;
return result;
}
@@ -100,9 +101,10 @@ int strlen_utf8(const char *str)
{
const unsigned char *p = (const unsigned char *) str;
int len;
+ unichar chr_r;
len = 0;
- while (*p != '\0' && get_utf8_char(&p, 6) > 0) {
+ while (*p != '\0' && get_utf8_char(&p, 6, &chr_r) > 0) {
len++;
p++;
}
diff --git a/src/fe-text/utf8.h b/src/fe-common/core/utf8.h
index 456c6bf8..996f51f3 100644
--- a/src/fe-text/utf8.h
+++ b/src/fe-common/core/utf8.h
@@ -2,7 +2,7 @@
#define __UTF8_H
/* Returns -2 = invalid, -1 = need more data, otherwise unichar. */
-unichar get_utf8_char(const unsigned char **ptr, int len);
+int get_utf8_char(const unsigned char **ptr, int len, unichar *chr_r);
/* Returns length of UTF8 string */
int strlen_utf8(const char *str);
diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c
index 21591889..5552d9cb 100644
--- a/src/fe-text/term-terminfo.c
+++ b/src/fe-text/term-terminfo.c
@@ -556,13 +556,12 @@ static int input_utf8(const unsigned char *buffer, int size, unichar *result)
{
const unsigned char *end = buffer;
- *result = get_utf8_char(&end, size);
- switch (*result) {
- case (unichar) -2:
+ switch (get_utf8_char(&end, size, result)) {
+ case -2:
/* not UTF8 - fallback to 8bit ascii */
*result = *buffer;
return 1;
- case (unichar) -1:
+ case -1:
/* need more data */
return -1;
default:
diff --git a/src/fe-text/textbuffer-view.c b/src/fe-text/textbuffer-view.c
index b8c12c07..906e5668 100644
--- a/src/fe-text/textbuffer-view.c
+++ b/src/fe-text/textbuffer-view.c
@@ -212,8 +212,7 @@ view_update_line_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
char_len++;
next_ptr = ptr;
- chr = get_utf8_char(&next_ptr, char_len);
- if (chr < 0)
+ if (get_utf8_char(&next_ptr, char_len, &chr) < 0)
char_len = 1;
else
char_len = utf8_width(chr);
@@ -432,8 +431,11 @@ static int view_line_draw(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
end = text;
if (view->utf8) {
- unichar chr = get_utf8_char(&end, 6);
- char_width = utf8_width(chr);
+ unichar chr;
+ if (get_utf8_char(&end, 6, &chr)<0)
+ char_width = 1;
+ else
+ char_width = utf8_width(chr);
} else {
if (term_type == TERM_TYPE_BIG5 &&
is_big5(end[0], end[1]))