[linux-cifs-client] [PATCH 3/5] cifs: Make cifs_strlcpy_to_host use
UniStrnlenBytes()
Suresh Jayaraman
sjayaraman at suse.de
Wed Apr 22 13:43:36 GMT 2009
Make cifs_strlcpy_to_host use UniStrnlenBytes()
Signed-off-by: Suresh Jayaraman <sjayaraman at suse.de>
---
fs/cifs/cifssmb.c | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
index a02c43b..30fa11d 100644
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -91,26 +91,27 @@ static int
cifs_strlcpy_to_host(char **dst, const char *src, const int maxlen,
const bool is_unicode, const struct nls_table *nls_codepage)
{
- int plen;
+ int src_len, dst_len;
+ size_t nbytes;
if (is_unicode) {
- plen = UniStrnlen((wchar_t *)src, maxlen);
- *dst = kmalloc((4 * plen) + 2, GFP_KERNEL);
+ nbytes = UniStrnlenBytes((wchar_t *)src, maxlen, &src_len,
+ nls_codepage);
+ *dst = kmalloc(nbytes + 2, GFP_KERNEL);
if (!*dst)
- goto cifs_strlcpy_to_host_ErrExit;
- cifs_strfromUCS_le(*dst, (__le16 *)src, plen, nls_codepage);
- (*dst)[plen] = 0;
- (*dst)[plen+1] = 0; /* needed for Unicode */
+ goto err_exit;
+ dst_len = cifs_strfromUCS_le(*dst, (__le16 *)src, src_len,
+ nls_codepage);
} else {
- plen = strnlen(src, maxlen);
- *dst = kmalloc(plen + 2, GFP_KERNEL);
+ src_len = strnlen(src, maxlen);
+ *dst = kmalloc(src_len + 1, GFP_KERNEL);
if (!*dst)
- goto cifs_strlcpy_to_host_ErrExit;
- strlcpy(*dst, src, plen);
+ goto err_exit;
+ strlcpy(*dst, src, src_len + 1);
}
return 0;
-cifs_strlcpy_to_host_ErrExit:
+err_exit:
cERROR(1, ("Failed to allocate buffer for string\n"));
return -ENOMEM;
}
More information about the linux-cifs-client
mailing list