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);