int usb_desc_msos(const USBDesc *desc,  USBPacket *p,

                  int index, uint8_t *dest, size_t len)

{

    void *buf = g_malloc0(4096);

    int length = 0;



    switch (index) {

    case 0x0004:

        length = usb_desc_msos_compat(desc, buf);

        break;

    case 0x0005:

        length = usb_desc_msos_prop(desc, buf);

        break;

    }



    if (length > len) {

        length = len;

    }

    memcpy(dest, buf, length);

    free(buf);



    p->actual_length = length;

    return 0;

}

int usb_desc_msos(const USBDesc *desc,  USBPacket *p,

                  int index, uint8_t *dest, size_t len)

{

    void *buf = g_malloc0(4096);

    int length = 0;



    switch (index) {

    case 0x0004:

        length = usb_desc_msos_compat(desc, buf);

        break;

    case 0x0005:

        length = usb_desc_msos_prop(desc, buf);

        break;

    }



    if (length > len) {

        length = len;

    }

    memcpy(dest, buf, length);

    free(buf);



    p->actual_length = length;

    return 0;

}

int FUNC_0(const USBDesc *VAR_0,  USBPacket *VAR_1,

                  int VAR_2, uint8_t *VAR_3, size_t VAR_4)

{

    void *VAR_5 = g_malloc0(4096);

    int VAR_6 = 0;



    switch (VAR_2) {

    case 0x0004:

        VAR_6 = usb_desc_msos_compat(VAR_0, VAR_5);

        break;

    case 0x0005:

        VAR_6 = usb_desc_msos_prop(VAR_0, VAR_5);

        break;

    }



    if (VAR_6 > VAR_4) {

        VAR_6 = VAR_4;

    }

    memcpy(VAR_3, VAR_5, VAR_6);

    free(VAR_5);



    VAR_1->actual_length = VAR_6;

    return 0;

}

int FUNC_0(const USBDesc *VAR_0,  USBPacket *VAR_1,
int VAR_2, uint8_t *VAR_3, size_t VAR_4)
{ void *VAR_5 = g_malloc0(4096); int VAR_6 = 0; switch (VAR_2) { case 0x0004:
VAR_6 = usb_desc_msos_compat(VAR_0, VAR_5); break; case 0x0005:
VAR_6 = usb_desc_msos_prop(VAR_0, VAR_5); break; } if (VAR_6 > VAR_4) { VAR_6 = VAR_4; } memcpy(VAR_3, VAR_5, VAR_6); free(VAR_5); VAR_1->actual_length = VAR_6; return 0; }