diff options
author | Elliott Hughes <enh@google.com> | 2015-04-25 14:44:23 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2015-04-25 14:44:23 -0700 |
commit | ce6363bbbcd05ff16111040eecacd174f9327745 (patch) | |
tree | 90153768297f555fa10f4f3d49a5ee77486852c1 /adb/usb_linux.cpp | |
parent | 8929c77ab9aa9be612291809669e9162837c54ae (diff) | |
download | system_core-ce6363bbbcd05ff16111040eecacd174f9327745.zip system_core-ce6363bbbcd05ff16111040eecacd174f9327745.tar.gz system_core-ce6363bbbcd05ff16111040eecacd174f9327745.tar.bz2 |
Improve logging of USBDEVFS_CLAIMINTERFACE failures.
Bug: https://code.google.com/p/android/issues/detail?id=170054
Change-Id: I9b11eb019093e3322da0a8e70d6e17de4c25ab75
Diffstat (limited to 'adb/usb_linux.cpp')
-rw-r--r-- | adb/usb_linux.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/adb/usb_linux.cpp b/adb/usb_linux.cpp index 9f23511..31fd167 100644 --- a/adb/usb_linux.cpp +++ b/adb/usb_linux.cpp @@ -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) { 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. */ adb_mutex_lock(&usb_lock); - for (usb_handle* usb = handle_list.next; usb != &handle_list; - usb = usb->next) { + for (usb_handle* usb = handle_list.next; usb != &handle_list; usb = usb->next) { if (!strcmp(usb->fname, dev_name)) { adb_mutex_unlock(&usb_lock); return; @@ -596,8 +591,7 @@ static void register_device(const char *dev_name, const char *devpath, } adb_mutex_unlock(&usb_lock); - D("[ usb located new device %s (%d/%d/%d) ]\n", - dev_name, ep_in, ep_out, interface); + D("[ usb located new device %s (%d/%d/%d) ]\n", dev_name, ep_in, ep_out, interface); usb_handle* usb = reinterpret_cast<usb_handle*>(calloc(1, sizeof(usb_handle))); if (usb == nullptr) fatal("couldn't allocate usb_handle"); 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->desc = unix_open(usb->fname, O_RDWR | O_CLOEXEC); - if(usb->desc < 0) { - /* if we fail, see if have read-only access */ + if (usb->desc == -1) { + // Opening RW failed, so see if we have RO access. 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; - 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); - 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 */ @@ -685,15 +690,6 @@ static void register_device(const char *dev_name, const char *devpath, adb_mutex_unlock(&usb_lock); 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) |