Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.22-rc7 90 lines 2.3 kB view raw
1/* 2 * fs/cifs/cifs_unicode.c 3 * 4 * Copyright (c) International Business Machines Corp., 2000,2005 5 * Modified by Steve French (sfrench@us.ibm.com) 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15 * the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21#include <linux/fs.h> 22#include "cifs_unicode.h" 23#include "cifs_uniupr.h" 24#include "cifspdu.h" 25#include "cifsglob.h" 26#include "cifs_debug.h" 27 28/* 29 * NAME: cifs_strfromUCS() 30 * 31 * FUNCTION: Convert little-endian unicode string to character string 32 * 33 */ 34int 35cifs_strfromUCS_le(char *to, const __le16 * from, 36 int len, const struct nls_table *codepage) 37{ 38 int i; 39 int outlen = 0; 40 41 for (i = 0; (i < len) && from[i]; i++) { 42 int charlen; 43 /* 2.4.0 kernel or greater */ 44 charlen = 45 codepage->uni2char(le16_to_cpu(from[i]), &to[outlen], 46 NLS_MAX_CHARSET_SIZE); 47 if (charlen > 0) { 48 outlen += charlen; 49 } else { 50 to[outlen++] = '?'; 51 } 52 } 53 to[outlen] = 0; 54 return outlen; 55} 56 57/* 58 * NAME: cifs_strtoUCS() 59 * 60 * FUNCTION: Convert character string to unicode string 61 * 62 */ 63int 64cifs_strtoUCS(__le16 * to, const char *from, int len, 65 const struct nls_table *codepage) 66{ 67 int charlen; 68 int i; 69 wchar_t * wchar_to = (wchar_t *)to; /* needed to quiet sparse */ 70 71 for (i = 0; len && *from; i++, from += charlen, len -= charlen) { 72 73 /* works for 2.4.0 kernel or later */ 74 charlen = codepage->char2uni(from, len, &wchar_to[i]); 75 if (charlen < 1) { 76 cERROR(1, 77 ("strtoUCS: char2uni of %d returned %d", 78 (int)*from, charlen)); 79 /* A question mark */ 80 to[i] = cpu_to_le16(0x003f); 81 charlen = 1; 82 } else 83 to[i] = cpu_to_le16(wchar_to[i]); 84 85 } 86 87 to[i] = 0; 88 return i; 89} 90