Print this page
NEX-19025 CIFS gets confused with filenames containing enhanced Unicode
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
and: (fix build, check-rtime)
NEX-4458 Incorrect directory listing response for non-UNICODE clients
Reviewed by: Matt Barden <Matt.Barden@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
re #6854 FindFirstFile,FindFirstFileEx,... are not working correctly on Nexenta CIFS-shares

*** 18,28 **** * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2012 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2017 by Delphix. All rights reserved. */ #ifndef _SMBSRV_STRING_H #define _SMBSRV_STRING_H --- 18,28 ---- * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2018 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2017 by Delphix. All rights reserved. */ #ifndef _SMBSRV_STRING_H #define _SMBSRV_STRING_H
*** 83,93 **** } codepage_id_t; /* * Maximum number of bytes per multi-byte character. */ ! #define MTS_MB_CUR_MAX 3 #define MTS_MB_CHAR_MAX MTS_MB_CUR_MAX typedef uint16_t smb_wchar_t; /* --- 83,93 ---- } codepage_id_t; /* * Maximum number of bytes per multi-byte character. */ ! #define MTS_MB_CUR_MAX 4 #define MTS_MB_CHAR_MAX MTS_MB_CUR_MAX typedef uint16_t smb_wchar_t; /*
*** 116,127 **** void smb_codepage_init(void); void smb_codepage_fini(void); int smb_isupper(int); int smb_islower(int); ! int smb_toupper(int); ! int smb_tolower(int); char *smb_strupr(char *); char *smb_strlwr(char *); int smb_isstrupr(const char *); int smb_isstrlwr(const char *); int smb_strcasecmp(const char *, const char *, size_t); --- 116,127 ---- void smb_codepage_init(void); void smb_codepage_fini(void); int smb_isupper(int); int smb_islower(int); ! uint32_t smb_toupper(uint32_t); ! uint32_t smb_tolower(uint32_t); char *smb_strupr(char *); char *smb_strlwr(char *); int smb_isstrupr(const char *); int smb_isstrlwr(const char *); int smb_strcasecmp(const char *, const char *, size_t);
*** 128,145 **** boolean_t smb_match(const char *, const char *, boolean_t); size_t smb_mbstowcs(smb_wchar_t *, const char *, size_t); size_t smb_wcstombs(char *, const smb_wchar_t *, size_t); ! int smb_mbtowc(smb_wchar_t *, const char *, size_t); ! int smb_wctomb(char *, smb_wchar_t); size_t smb_wcequiv_strlen(const char *); size_t smb_sbequiv_strlen(const char *); ! int smb_stombs(char *, char *, int); ! int smb_mbstos(char *, const char *); size_t ucstooem(char *, const smb_wchar_t *, size_t, uint32_t); size_t oemtoucs(smb_wchar_t *, const char *, size_t, uint32_t); char *strsubst(char *, char, char); --- 128,145 ---- boolean_t smb_match(const char *, const char *, boolean_t); size_t smb_mbstowcs(smb_wchar_t *, const char *, size_t); size_t smb_wcstombs(char *, const smb_wchar_t *, size_t); ! int smb_mbtowc(uint32_t *, const char *, size_t); ! int smb_wctomb(char *, uint32_t); size_t smb_wcequiv_strlen(const char *); size_t smb_sbequiv_strlen(const char *); ! int smb_oemtombs(char *, const uint8_t *, int); ! int smb_mbstooem(uint8_t *, const char *, int); size_t ucstooem(char *, const smb_wchar_t *, size_t, uint32_t); size_t oemtoucs(smb_wchar_t *, const char *, size_t, uint32_t); char *strsubst(char *, char, char);