[MIPS] Change libgcc-style functions from lib-y to obj-y
[linux-drm-fsl-dcu.git] / fs / cifs / cifs_unicode.c
index 4e12053f0806bed870906a3280d428ad8a9d9186..701e9a9185f2cf4ec62d45c56853d1d47b2b9e56 100644 (file)
@@ -1,27 +1,28 @@
 /*
  *   fs/cifs/cifs_unicode.c
  *
- *   Copyright (c) International Business Machines  Corp., 2000,2002
+ *   Copyright (c) International Business Machines  Corp., 2000,2005
  *   Modified by Steve French (sfrench@us.ibm.com)
  *
  *   This program is free software;  you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 2 of the License, or 
+ *   the Free Software Foundation; either version 2 of the License, or
  *   (at your option) any later version.
- * 
+ *
  *   This program is distributed in the hope that it will be useful,
  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  *   the GNU General Public License for more details.
  *
  *   You should have received a copy of the GNU General Public License
- *   along with this program;  if not, write to the Free Software 
+ *   along with this program;  if not, write to the Free Software
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 #include <linux/fs.h>
 #include "cifs_unicode.h"
 #include "cifs_uniupr.h"
 #include "cifspdu.h"
+#include "cifsglob.h"
 #include "cifs_debug.h"
 
 /*
@@ -31,7 +32,7 @@
  *
  */
 int
-cifs_strfromUCS_le(char *to, const wchar_t * from,     /* LITTLE ENDIAN */
+cifs_strfromUCS_le(char *to, const __le16 * from,
                   int len, const struct nls_table *codepage)
 {
        int i;
@@ -60,25 +61,26 @@ cifs_strfromUCS_le(char *to, const wchar_t * from,  /* LITTLE ENDIAN */
  *
  */
 int
-cifs_strtoUCS(wchar_t * to, const char *from, int len,
+cifs_strtoUCS(__le16 * to, const char *from, int len,
              const struct nls_table *codepage)
 {
        int charlen;
        int i;
+       wchar_t * wchar_to = (wchar_t *)to; /* needed to quiet sparse */
 
        for (i = 0; len && *from; i++, from += charlen, len -= charlen) {
 
                /* works for 2.4.0 kernel or later */
-               charlen = codepage->char2uni(from, len, &to[i]);
+               charlen = codepage->char2uni(from, len, &wchar_to[i]);
                if (charlen < 1) {
                        cERROR(1,
-                              ("cifs_strtoUCS: char2uni returned %d",
-                               charlen));
+                              ("strtoUCS: char2uni of %d returned %d",
+                               (int)*from, charlen));
                        /* A question mark */
-                       to[i] = (wchar_t)cpu_to_le16(0x003f);
+                       to[i] = cpu_to_le16(0x003f);
                        charlen = 1;
-               } else 
-                       to[i] = (wchar_t)cpu_to_le16(to[i]);
+               } else
+                       to[i] = cpu_to_le16(wchar_to[i]);
 
        }