lkml.org 
[lkml]   [2011]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] nls: add surrogate pair support in nls utf8.
    On Sun, 4 Dec 2011, Namjae Jeon wrote:

    > It allows surrogate pair in nls utf8.

    That's a pretty brief description.

    > --- a/fs/nls/nls_utf8.c
    > +++ b/fs/nls/nls_utf8.c
    > @@ -30,13 +30,24 @@ static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
    > {
    > int n;
    > unicode_t u;
    > + u16 *op;
    >
    > + op = uni;
    > n = utf8_to_utf32(rawstring, boundlen, &u);
    > - if (n < 0 || u > MAX_WCHAR_T) {
    > + if (n < 0 || u > UNICODE_MAX) {
    > *uni = 0x003f; /* ? */
    > return -EINVAL;
    > }
    > - *uni = (wchar_t) u;
    > +
    > + if (u >= PLANE_SIZE) {
    > + u -= PLANE_SIZE;
    > + *op++ = (wchar_t) (SURROGATE_PAIR |
    > + ((u >> 10) & SURROGATE_BITS));
    > + *op++ = (wchar_t) (SURROGATE_PAIR |
    > + SURROGATE_LOW | (u & SURROGATE_BITS));
    > + } else
    > + *op++ = (wchar_t) u;
    > +
    > return n;
    > }

    Firstly, have you checked whether the callers of this function expect
    to receive back more than one 16-bit value? Maybe you will overrun
    their buffers by doing this.

    Secondly, you shouldn't have to make all these changes. Just call
    utf8s_to_utf16s(); then all you have to worry about is changing an
    invalid character to a '?'.

    Alan Stern



    \
     
     \ /
      Last update: 2011-12-04 18:11    [W:0.021 / U:181.828 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site