aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifs_unicode.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2009-04-30 07:16:14 -0400
committerSteve French <sfrench@us.ibm.com>2009-04-30 11:45:00 -0400
commit066ce6899484d9026acd6ba3a8dbbedb33d7ae1b (patch)
treee052f744476e4043ae183d3731138354a1ab307a /fs/cifs/cifs_unicode.c
parent69f801fcaa03be83d58c564f00913b7c172808e4 (diff)
cifs: rename cifs_strlcpy_to_host and make it use new functions
Rename cifs_strlcpy_to_host to cifs_strndup since that better describes what this function really does. Then, convert it to use the new string conversion and measurement functions that work in units of bytes rather than wide chars. Signed-off-by: Jeff Layton <jlayton@redhat.com> Acked-by: Suresh Jayaraman <sjayaraman@suse.de> Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/cifs_unicode.c')
-rw-r--r--fs/cifs/cifs_unicode.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/fs/cifs/cifs_unicode.c b/fs/cifs/cifs_unicode.c
index 614512573c67..2a879cff3a40 100644
--- a/fs/cifs/cifs_unicode.c
+++ b/fs/cifs/cifs_unicode.c
@@ -243,3 +243,41 @@ cifs_strtoUCS(__le16 *to, const char *from, int len,
243 return i; 243 return i;
244} 244}
245 245
246/*
247 * cifs_strndup - copy a string from wire format to the local codepage
248 * @src - source string
249 * @maxlen - don't walk past this many bytes in the source string
250 * @is_unicode - is this a unicode string?
251 * @codepage - destination codepage
252 *
253 * Take a string given by the server, convert it to the local codepage and
254 * put it in a new buffer. Returns a pointer to the new string or NULL on
255 * error.
256 */
257char *
258cifs_strndup(const char *src, const int maxlen, const bool is_unicode,
259 const struct nls_table *codepage)
260{
261 int len;
262 char *dst;
263
264 if (is_unicode) {
265 len = cifs_ucs2_bytes((__le16 *) src, maxlen, codepage);
266 len += nls_nullsize(codepage);
267 dst = kmalloc(len, GFP_KERNEL);
268 if (!dst)
269 return NULL;
270 cifs_from_ucs2(dst, (__le16 *) src, len, maxlen, codepage,
271 false);
272 } else {
273 len = strnlen(src, maxlen);
274 len++;
275 dst = kmalloc(len, GFP_KERNEL);
276 if (!dst)
277 return NULL;
278 strlcpy(dst, src, len);
279 }
280
281 return dst;
282}
283