mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 05:16:38 +02:00
Fix compilation problem on FreeBSD: replace call to wcscasecmp() by towlower()
This commit is contained in:
+1
-41
@@ -549,46 +549,6 @@ string_convert_hex_chars (const char *string)
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* string_get_wide_char: get wide char from string (first char)
|
||||
*/
|
||||
|
||||
wint_t
|
||||
string_get_wide_char (const char *string)
|
||||
{
|
||||
int char_size;
|
||||
wint_t result;
|
||||
|
||||
if (!string || !string[0])
|
||||
return WEOF;
|
||||
|
||||
char_size = utf8_char_size (string);
|
||||
switch (char_size)
|
||||
{
|
||||
case 1:
|
||||
result = (wint_t)string[0];
|
||||
break;
|
||||
case 2:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 8
|
||||
| ((wint_t)((unsigned char)string[1]));
|
||||
break;
|
||||
case 3:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 16
|
||||
| ((wint_t)((unsigned char)string[1])) << 8
|
||||
| ((wint_t)((unsigned char)string[2]));
|
||||
break;
|
||||
case 4:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 24
|
||||
| ((wint_t)((unsigned char)string[1])) << 16
|
||||
| ((wint_t)((unsigned char)string[2])) << 8
|
||||
| ((wint_t)((unsigned char)string[3]));
|
||||
break;
|
||||
default:
|
||||
result = WEOF;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* string_is_word_char: return 1 if given character is a "word character"
|
||||
*/
|
||||
@@ -596,7 +556,7 @@ string_get_wide_char (const char *string)
|
||||
int
|
||||
string_is_word_char (const char *string)
|
||||
{
|
||||
wint_t c = string_get_wide_char (string);
|
||||
wint_t c = utf8_wide_char (string);
|
||||
|
||||
if (c == WEOF)
|
||||
return 0;
|
||||
|
||||
+47
-6
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wctype.h>
|
||||
|
||||
#include "weechat.h"
|
||||
#include "wee-utf8.h"
|
||||
@@ -280,6 +281,46 @@ utf8_char_int (const char *string)
|
||||
return (int)ptr_string[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* utf8_wide_char: get wide char from string (first char)
|
||||
*/
|
||||
|
||||
wint_t
|
||||
utf8_wide_char (const char *string)
|
||||
{
|
||||
int char_size;
|
||||
wint_t result;
|
||||
|
||||
if (!string || !string[0])
|
||||
return WEOF;
|
||||
|
||||
char_size = utf8_char_size (string);
|
||||
switch (char_size)
|
||||
{
|
||||
case 1:
|
||||
result = (wint_t)string[0];
|
||||
break;
|
||||
case 2:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 8
|
||||
| ((wint_t)((unsigned char)string[1]));
|
||||
break;
|
||||
case 3:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 16
|
||||
| ((wint_t)((unsigned char)string[1])) << 8
|
||||
| ((wint_t)((unsigned char)string[2]));
|
||||
break;
|
||||
case 4:
|
||||
result = ((wint_t)((unsigned char)string[0])) << 24
|
||||
| ((wint_t)((unsigned char)string[1])) << 16
|
||||
| ((wint_t)((unsigned char)string[2])) << 8
|
||||
| ((wint_t)((unsigned char)string[3]));
|
||||
break;
|
||||
default:
|
||||
result = WEOF;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* utf8_char_size: return UTF-8 char size (in bytes)
|
||||
*/
|
||||
@@ -410,18 +451,18 @@ utf8_charcmp (const char *string1, const char *string2)
|
||||
int
|
||||
utf8_charcasecmp (const char *string1, const char *string2)
|
||||
{
|
||||
wchar_t wstring1[2], wstring2[2];
|
||||
wint_t wchar1, wchar2;
|
||||
|
||||
if (!string1 || !string2)
|
||||
return (string1) ? 1 : ((string2) ? -1 : 0);
|
||||
|
||||
memset (wstring1, 0, sizeof (wstring1));
|
||||
memset (wstring2, 0, sizeof (wstring2));
|
||||
wchar1 = utf8_wide_char (string1);
|
||||
wchar1 = towlower (wchar1);
|
||||
|
||||
mbstowcs (wstring1, string1, 1);
|
||||
mbstowcs (wstring2, string2, 1);
|
||||
wchar2 = utf8_wide_char (string2);
|
||||
wchar2 = towlower (wchar2);
|
||||
|
||||
return wcscasecmp (wstring1, wstring2);
|
||||
return (wchar1 < wchar2) ? -1 : ((wchar1 == wchar2) ? 0 : 1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -39,6 +39,7 @@ extern void utf8_normalize (const char *string, char replacement);
|
||||
extern char *utf8_prev_char (const char *string_start, const char *string);
|
||||
extern char *utf8_next_char (const char *string);
|
||||
extern int utf8_char_int (const char *string);
|
||||
extern wint_t utf8_wide_char (const char *string);
|
||||
extern int utf8_char_size (const char *string);
|
||||
extern int utf8_strlen (const char *string);
|
||||
extern int utf8_strnlen (const char *string, int bytes);
|
||||
|
||||
Reference in New Issue
Block a user