]> git.sur5r.net Git - u-boot/blobdiff - drivers/usb/gadget/usbstring.c
Merge branch 'master' of http://git.denx.de/u-boot-sunxi
[u-boot] / drivers / usb / gadget / usbstring.c
index 168f75f7adb902cf3c3698a8f4ac8f6c95d9cbd3..8c3ff64fe35359566a673a08791228d4f95989cf 100644 (file)
@@ -1,10 +1,7 @@
 /*
  * Copyright (C) 2003 David Brownell
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * SPDX-License-Identifier:    LGPL-2.1+
  *
  * Ported to U-boot by: Thomas Smits <ts.smits@gmail.com> and
  *                      Remy Bohmer <linux@bohmer.net>
@@ -24,14 +21,17 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
        u8      c;
        u16     uchar;
 
-       /* this insists on correct encodings, though not minimal ones.
+       /*
+        * this insists on correct encodings, though not minimal ones.
         * BUT it currently rejects legit 4-byte UTF-8 code points,
         * which need surrogate pairs.  (Unicode 3.1 can use them.)
         */
        while (len != 0 && (c = (u8) *s++) != 0) {
                if ((c & 0x80)) {
-                       // 2-byte sequence:
-                       // 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx
+                       /*
+                        * 2-byte sequence:
+                        * 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx
+                        */
                        if ((c & 0xe0) == 0xc0) {
                                uchar = (c & 0x1f) << 6;
 
@@ -41,8 +41,10 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
                                c &= 0x3f;
                                uchar |= c;
 
-                       // 3-byte sequence (most CJKV characters):
-                       // zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx
+                       /*
+                        * 3-byte sequence (most CJKV characters):
+                        * zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx
+                        */
                        } else if ((c & 0xf0) == 0xe0) {
                                uchar = (c & 0x0f) << 12;
 
@@ -62,12 +64,13 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
                                if (0xd800 <= uchar && uchar <= 0xdfff)
                                        goto fail;
 
-                       // 4-byte sequence (surrogate pairs, currently rare):
-                       // 11101110wwwwzzzzyy + 110111yyyyxxxxxx
-                       //     = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
-                       // (uuuuu = wwww + 1)
-                       // FIXME accept the surrogate code points (only)
-
+                       /*
+                        * 4-byte sequence (surrogate pairs, currently rare):
+                        * 11101110wwwwzzzzyy + 110111yyyyxxxxxx
+                        *     = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
+                        * (uuuuu = wwww + 1)
+                        * FIXME accept the surrogate code points (only)
+                        */
                        } else
                                goto fail;
                } else
@@ -100,17 +103,20 @@ fail:
  * characters (which are also widely used in C strings).
  */
 int
-usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf)
+usb_gadget_get_string(struct usb_gadget_strings *table, int id, u8 *buf)
 {
        struct usb_string       *s;
        int                     len;
 
+       if (!table)
+               return -EINVAL;
+
        /* descriptor 0 has the language id */
        if (id == 0) {
-               buf [0] = 4;
-               buf [1] = USB_DT_STRING;
-               buf [2] = (u8) table->language;
-               buf [3] = (u8) (table->language >> 8);
+               buf[0] = 4;
+               buf[1] = USB_DT_STRING;
+               buf[2] = (u8) table->language;
+               buf[3] = (u8) (table->language >> 8);
                return 4;
        }
        for (s = table->strings; s && s->s; s++)
@@ -122,13 +128,12 @@ usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf)
                return -EINVAL;
 
        /* string descriptors have length, tag, then UTF16-LE text */
-       len = min ((size_t) 126, strlen (s->s));
-       memset (buf + 2, 0, 2 * len);   /* zero all the bytes */
+       len = min((size_t) 126, strlen(s->s));
+       memset(buf + 2, 0, 2 * len);    /* zero all the bytes */
        len = utf8_to_utf16le(s->s, (__le16 *)&buf[2], len);
        if (len < 0)
                return -EINVAL;
-       buf [0] = (len + 1) * 2;
-       buf [1] = USB_DT_STRING;
-       return buf [0];
+       buf[0] = (len + 1) * 2;
+       buf[1] = USB_DT_STRING;
+       return buf[0];
 }
-