34 static size_t iconv_copy_ntlmssp(
void *,
const char **,
size_t *,
char **,
size_t *);
43 if (strcasecmp(
name, c->
name) == 0) {
60 const char **inbuf,
size_t *inbytesleft,
61 char **outbuf,
size_t *outbytesleft)
70 inbuf, inbytesleft, outbuf, outbytesleft);
75 while (*inbytesleft > 0) {
77 bufsize =
sizeof(cvtbuf);
80 inbuf, inbytesleft, &bufp, &bufsize) == -1
81 && errno != E2BIG)
return -1;
84 bufsize =
sizeof(cvtbuf) - bufsize;
87 (
const char **)&bufp, &bufsize,
88 outbuf, outbytesleft) == -1)
return -1;
95 static bool is_utf16_ntlmssp(
const char *
name)
97 return strcasecmp(
name,
"UCS-2LE") == 0 ||
98 strcasecmp(
name,
"UTF-16LE") == 0;
121 if (strcasecmp(fromcode, tocode) == 0) {
122 ret->
direct = iconv_copy_ntlmssp;
127 from = find_charset_functions_ntlmssp(fromcode);
130 to = find_charset_functions_ntlmssp(tocode);
134 #ifdef HAVE_NATIVE_ICONV 136 ret->
cd_pull = iconv_open(
"UTF-16LE", fromcode);
137 if (ret->
cd_pull == (iconv_t)-1)
138 ret->
cd_pull = iconv_open(
"UCS-2LE", fromcode);
139 if (ret->
cd_pull != (iconv_t)-1)
140 ret->
pull = sys_iconv;
144 ret->
cd_push = iconv_open(tocode,
"UTF-16LE");
145 if (ret->
cd_push == (iconv_t)-1)
146 ret->
cd_push = iconv_open(tocode,
"UCS-2LE");
147 if (ret->
cd_push != (iconv_t)-1)
148 ret->
push = sys_iconv;
161 if (is_utf16_ntlmssp(fromcode) && to) {
167 if (is_utf16_ntlmssp(tocode) && from) {
174 #ifdef HAVE_NATIVE_ICONV 175 if (is_utf16(fromcode)) {
181 if (is_utf16(tocode)) {
197 #ifdef HAVE_NATIVE_ICONV 206 memset(cd, 0,
sizeof(*cd));
211 static size_t iconv_copy_ntlmssp(
void *cd,
const char **inbuf,
size_t *inbytesleft,
212 char **outbuf,
size_t *outbytesleft)
216 n = MIN(*inbytesleft, *outbytesleft);
218 memmove(*outbuf, *inbuf, n);
221 (*outbytesleft) -= n;
225 if (*inbytesleft > 0) {
struct charset_functions_ntlmssp * next
size_t(* push)(void *, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* pull)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* direct)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* push)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
smb_iconv_t smb_iconv_open_ntlmssp(const char *tocode, const char *fromcode)
size_t(* pull)(void *, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t smb_iconv_ntlmssp(smb_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
#define SMB_MALLOC_P(type)
int smb_iconv_close_ntlmssp(smb_iconv_t cd)