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

Commit ecd6e36d authored by Elliott Hughes's avatar Elliott Hughes Committed by Android Git Automerger
Browse files

am 47a9ef2f: Merge "Improve logging of USBDEVFS_CLAIMINTERFACE failures."

* commit '47a9ef2f':
  Improve logging of USBDEVFS_CLAIMINTERFACE failures.
parents ecfb3664 47a9ef2f
Loading
Loading
Loading
Loading
+20 −24
Original line number Original line Diff line number Diff line
@@ -114,10 +114,6 @@ static void kick_disconnected_devices()


}
}


static void register_device(const char *dev_name, const char *devpath,
                            unsigned char ep_in, unsigned char ep_out,
                            int ifc, int serial_index, unsigned zero_mask);

static inline int badname(const char *name)
static inline int badname(const char *name)
{
{
    while(*name) {
    while(*name) {
@@ -587,8 +583,7 @@ static void register_device(const char *dev_name, const char *devpath,
        ** name, we have no further work to do.
        ** name, we have no further work to do.
        */
        */
    adb_mutex_lock(&usb_lock);
    adb_mutex_lock(&usb_lock);
    for (usb_handle* usb = handle_list.next; usb != &handle_list;
    for (usb_handle* usb = handle_list.next; usb != &handle_list; usb = usb->next) {
         usb = usb->next) {
        if (!strcmp(usb->fname, dev_name)) {
        if (!strcmp(usb->fname, dev_name)) {
            adb_mutex_unlock(&usb_lock);
            adb_mutex_unlock(&usb_lock);
            return;
            return;
@@ -596,8 +591,7 @@ static void register_device(const char *dev_name, const char *devpath,
    }
    }
    adb_mutex_unlock(&usb_lock);
    adb_mutex_unlock(&usb_lock);


    D("[ usb located new device %s (%d/%d/%d) ]\n",
    D("[ usb located new device %s (%d/%d/%d) ]\n", dev_name, ep_in, ep_out, interface);
        dev_name, ep_in, ep_out, interface);
    usb_handle* usb = reinterpret_cast<usb_handle*>(calloc(1, sizeof(usb_handle)));
    usb_handle* usb = reinterpret_cast<usb_handle*>(calloc(1, sizeof(usb_handle)));
    if (usb == nullptr) fatal("couldn't allocate usb_handle");
    if (usb == nullptr) fatal("couldn't allocate usb_handle");
    strcpy(usb->fname, dev_name);
    strcpy(usb->fname, dev_name);
@@ -613,16 +607,27 @@ static void register_device(const char *dev_name, const char *devpath,
    usb->reaper_thread = 0;
    usb->reaper_thread = 0;


    usb->desc = unix_open(usb->fname, O_RDWR | O_CLOEXEC);
    usb->desc = unix_open(usb->fname, O_RDWR | O_CLOEXEC);
    if(usb->desc < 0) {
    if (usb->desc == -1) {
        /* if we fail, see if have read-only access */
        // Opening RW failed, so see if we have RO access.
        usb->desc = unix_open(usb->fname, O_RDONLY | O_CLOEXEC);
        usb->desc = unix_open(usb->fname, O_RDONLY | O_CLOEXEC);
        if(usb->desc < 0) goto fail;
        if (usb->desc == -1) {
            D("[ usb open %s failed: %s]\n", usb->fname, strerror(errno));
            free(usb);
            return;
        }
        usb->writeable = 0;
        usb->writeable = 0;
        D("[ usb open read-only %s fd = %d]\n", usb->fname, usb->desc);
    }
    } else {

        D("[ usb open %s fd = %d]\n", usb->fname, usb->desc);
    D("[ usb opened %s%s, fd=%d]\n", usb->fname, (usb->writeable ? "" : " (read-only)"), usb->desc);

    if (usb->writeable) {
        n = ioctl(usb->desc, USBDEVFS_CLAIMINTERFACE, &interface);
        n = ioctl(usb->desc, USBDEVFS_CLAIMINTERFACE, &interface);
        if(n != 0) goto fail;
        if (n != 0) {
            D("[ usb ioctl(%d, USBDEVFS_CLAIMINTERFACE) failed: %s]\n", usb->desc, strerror(errno));
            adb_close(usb->desc);
            free(usb);
            return;
        }
    }
    }


        /* read the device's serial number */
        /* read the device's serial number */
@@ -685,15 +690,6 @@ static void register_device(const char *dev_name, const char *devpath,
    adb_mutex_unlock(&usb_lock);
    adb_mutex_unlock(&usb_lock);


    register_usb_transport(usb, serial, devpath, usb->writeable);
    register_usb_transport(usb, serial, devpath, usb->writeable);
    return;

fail:
    D("[ usb open %s error=%d, err_str = %s]\n",
        usb->fname,  errno, strerror(errno));
    if(usb->desc >= 0) {
        adb_close(usb->desc);
    }
    free(usb);
}
}


void* device_poll_thread(void* unused)
void* device_poll_thread(void* unused)