Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28c16713 authored by Mike Lockwood's avatar Mike Lockwood Committed by Android Git Automerger
Browse files

am 52e5e359: Merge "USB string descriptors are not UTF8, so it is not safe to...

am 52e5e359: Merge "USB string descriptors are not UTF8, so it is not safe to treat them as such." into lmp-dev

* commit '52e5e3599151c01a8107f08238ce1c59d8ec2fe1':
  USB string descriptors are not UTF8, so it is not safe to treat them as such.
parents 1b3c0f82 51938c20
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -905,6 +905,20 @@ char* AndroidRuntime::toSlashClassName(const char* className)
    return result;
}

/** Create a Java string from an ASCII or Latin-1 string */
jstring AndroidRuntime::NewStringLatin1(JNIEnv* env, const char* bytes) {
    if (!bytes) return NULL;
    int length = strlen(bytes);
    jchar* buffer = (jchar *)alloca(length * sizeof(jchar));
    if (!buffer) return NULL;
    jchar* chp = buffer;
    for (int i = 0; i < length; i++) {
        *chp++ = *bytes++;
    }
    return env->NewString(buffer, length);
}


/*
 * Start the Android runtime.  This involves starting the virtual machine
 * and calling the "static void main(String[] args)" method in the class
+3 −0
Original line number Diff line number Diff line
@@ -113,6 +113,9 @@ public:
    /** return a new string corresponding to 'className' with all '.'s replaced by '/'s. */
    static char* toSlashClassName(const char* className);

    /** Create a Java string from an ASCII or Latin-1 string */
    static jstring NewStringLatin1(JNIEnv* env, const char* bytes);

private:
    static int startReg(JNIEnv* env);
    bool parseRuntimeOption(const char* property,
+5 −5
Original line number Diff line number Diff line
@@ -74,9 +74,9 @@ static int usb_device_added(const char *devname, void* client_data) {
    char *serial = usb_device_get_serial(device);

    jstring deviceName = env->NewStringUTF(devname);
    jstring manufacturerName = env->NewStringUTF(manufacturer);
    jstring productName = env->NewStringUTF(product);
    jstring serialNumber = env->NewStringUTF(serial);
    jstring manufacturerName = AndroidRuntime::NewStringLatin1(env, manufacturer);
    jstring productName = AndroidRuntime::NewStringLatin1(env, product);
    jstring serialNumber = AndroidRuntime::NewStringLatin1(env, serial);

    jboolean result = env->CallBooleanMethod(thiz, method_beginUsbDeviceAdded,
            deviceName, usb_device_get_vendor_id(device), usb_device_get_product_id(device),
@@ -99,7 +99,7 @@ static int usb_device_added(const char *devname, void* client_data) {
        if (desc->bDescriptorType == USB_DT_CONFIG) {
            struct usb_config_descriptor *config = (struct usb_config_descriptor *)desc;
            char *name = usb_device_get_string(device, config->iConfiguration);
            jstring configName = env->NewStringUTF(name);
            jstring configName = AndroidRuntime::NewStringLatin1(env, name);

            env->CallVoidMethod(thiz, method_addUsbConfiguration,
                    config->bConfigurationValue, configName, config->bmAttributes,
@@ -110,7 +110,7 @@ static int usb_device_added(const char *devname, void* client_data) {
        } else if (desc->bDescriptorType == USB_DT_INTERFACE) {
            struct usb_interface_descriptor *interface = (struct usb_interface_descriptor *)desc;
            char *name = usb_device_get_string(device, interface->iInterface);
            jstring interfaceName = env->NewStringUTF(name);
            jstring interfaceName = AndroidRuntime::NewStringLatin1(env, name);

            env->CallVoidMethod(thiz, method_addUsbInterface,
                    interface->bInterfaceNumber, interfaceName, interface->bAlternateSetting,