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,11 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2012 Nexenta Systems, Inc. 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,11 +83,11 @@
 } codepage_id_t;
 
 /*
  * Maximum number of bytes per multi-byte character.
  */
-#define MTS_MB_CUR_MAX          3
+#define MTS_MB_CUR_MAX          4
 #define MTS_MB_CHAR_MAX         MTS_MB_CUR_MAX
 
 typedef uint16_t smb_wchar_t;
 
 /*
@@ -116,12 +116,12 @@
 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);
+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,18 +128,18 @@
 
 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);
+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_stombs(char *, char *, int);
-int smb_mbstos(char *, 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);