1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

Second part of fix for bug 8310 - toupper_ascii() is broken on big-endian systems.

Re-add:
	smb_ucs2_t toupper_w(smb_ucs2_t v);

and ensure it is called whenever we are operating on smb_ucs2_t
variables. I'd like to make the definition of smb_ucs2_t incompatible
with int and codepoint_t so they can't be mixed, but that's a patch
for another time.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Tue Jul 19 23:48:05 CEST 2011 on sn-devel-104
This commit is contained in:
Jeremy Allison 2011-07-19 13:35:45 -07:00
parent ee34c25c8a
commit 93dcfdea38
4 changed files with 14 additions and 2 deletions

View File

@ -257,6 +257,7 @@ int strcmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
int strcmp_wa(const smb_ucs2_t *a, const char *b);
smb_ucs2_t toupper_w(smb_ucs2_t v);
/*
* Define stub for charset module which implements 8-bit encoding with gaps.

View File

@ -252,3 +252,14 @@ int strcmp_wa(const smb_ucs2_t *a, const char *b)
}
return (*(COPY_UCS2_CHAR(&cp,a)) - UCS2_CHAR(*b));
}
smb_ucs2_t toupper_w(smb_ucs2_t v)
{
smb_ucs2_t ret;
/* LE to native. */
codepoint_t cp = SVAL(&v,0);
cp = toupper_m(cp);
/* native to LE. */
SSVAL(&ret,0,cp);
return ret;
}

View File

@ -287,7 +287,7 @@ static size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_
terminated if STR_TERMINATE isn't set. */
for (i = 0; i < (ret / 2) && i < (dest_len / 2) && dest_ucs2[i]; i++) {
smb_ucs2_t v = toupper_m(dest_ucs2[i]);
smb_ucs2_t v = toupper_w(dest_ucs2[i]);
if (v != dest_ucs2[i]) {
dest_ucs2[i] = v;
}

View File

@ -129,7 +129,7 @@ static int ms_fnmatch_core(const smb_ucs2_t *p, const smb_ucs2_t *n,
if (is_case_sensitive) {
return -1;
}
if (toupper_m(c) != toupper_m(*n)) {
if (toupper_w(c) != toupper_w(*n)) {
return -1;
}
}