Revert "fastboot: create Transport object."

This broke some stuff, will look into it Monday.

This reverts commit 6f233a7799a681e65c539e9c8287db0814c8948f.

Change-Id: I155bc85d21fda3b0ba1e5e17839059797fb15509
diff --git a/fastboot/usb_linux.cpp b/fastboot/usb_linux.cpp
index 02ffcd9..7b87907 100644
--- a/fastboot/usb_linux.cpp
+++ b/fastboot/usb_linux.cpp
@@ -43,8 +43,6 @@
 #include <linux/version.h>
 #include <linux/usb/ch9.h>
 
-#include <memory>
-
 #include "fastboot.h"
 #include "usb.h"
 
@@ -87,22 +85,6 @@
     unsigned char ep_out;
 };
 
-class LinuxUsbTransport : public Transport {
-  public:
-    LinuxUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {}
-    ~LinuxUsbTransport() override = default;
-
-    ssize_t Read(void* data, size_t len) override;
-    ssize_t Write(const void* data, size_t len) override;
-    int Close() override;
-    int WaitForDisconnect() override;
-
-  private:
-    std::unique_ptr<usb_handle> handle_;
-
-    DISALLOW_COPY_AND_ASSIGN(LinuxUsbTransport);
-};
-
 /* True if name isn't a valid name for a USB device in /sys/bus/usb/devices.
  * Device names are made up of numbers, dots, and dashes, e.g., '7-1.5'.
  * We reject interfaces (e.g., '7-1.5:1.0') and host controllers (e.g. 'usb1').
@@ -326,9 +308,9 @@
     return 0;
 }
 
-static std::unique_ptr<usb_handle> find_usb_device(const char* base, ifc_match_func callback)
+static usb_handle *find_usb_device(const char *base, ifc_match_func callback)
 {
-    std::unique_ptr<usb_handle> usb;
+    usb_handle *usb = 0;
     char devname[64];
     char desc[1024];
     int n, in, out, ifc;
@@ -339,37 +321,39 @@
     int writable;
 
     busdir = opendir(base);
-    if (busdir == 0) return 0;
+    if(busdir == 0) return 0;
 
-    while ((de = readdir(busdir)) && (usb == nullptr)) {
-        if (badname(de->d_name)) continue;
+    while((de = readdir(busdir)) && (usb == 0)) {
+        if(badname(de->d_name)) continue;
 
-        if (!convert_to_devfs_name(de->d_name, devname, sizeof(devname))) {
+        if(!convert_to_devfs_name(de->d_name, devname, sizeof(devname))) {
 
 //            DBG("[ scanning %s ]\n", devname);
             writable = 1;
-            if ((fd = open(devname, O_RDWR)) < 0) {
+            if((fd = open(devname, O_RDWR)) < 0) {
                 // Check if we have read-only access, so we can give a helpful
                 // diagnostic like "adb devices" does.
                 writable = 0;
-                if ((fd = open(devname, O_RDONLY)) < 0) {
+                if((fd = open(devname, O_RDONLY)) < 0) {
                     continue;
                 }
             }
 
             n = read(fd, desc, sizeof(desc));
 
-            if (filter_usb_device(de->d_name, desc, n, writable, callback, &in, &out, &ifc) == 0) {
-                usb.reset(new usb_handle());
+            if(filter_usb_device(de->d_name, desc, n, writable, callback,
+                                 &in, &out, &ifc) == 0) {
+                usb = reinterpret_cast<usb_handle*>(calloc(1, sizeof(usb_handle)));
                 strcpy(usb->fname, devname);
                 usb->ep_in = in;
                 usb->ep_out = out;
                 usb->desc = fd;
 
                 n = ioctl(fd, USBDEVFS_CLAIMINTERFACE, &ifc);
-                if (n != 0) {
+                if(n != 0) {
                     close(fd);
-                    usb.reset();
+                    free(usb);
+                    usb = 0;
                     continue;
                 }
             } else {
@@ -382,14 +366,14 @@
     return usb;
 }
 
-ssize_t LinuxUsbTransport::Write(const void* _data, size_t len)
+int usb_write(usb_handle *h, const void *_data, int len)
 {
     unsigned char *data = (unsigned char*) _data;
     unsigned count = 0;
     struct usbdevfs_bulktransfer bulk;
     int n;
 
-    if (handle_->ep_out == 0 || handle_->desc == -1) {
+    if(h->ep_out == 0 || h->desc == -1) {
         return -1;
     }
 
@@ -397,12 +381,12 @@
         int xfer;
         xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len;
 
-        bulk.ep = handle_->ep_out;
+        bulk.ep = h->ep_out;
         bulk.len = xfer;
         bulk.data = data;
         bulk.timeout = 0;
 
-        n = ioctl(handle_->desc, USBDEVFS_BULK, &bulk);
+        n = ioctl(h->desc, USBDEVFS_BULK, &bulk);
         if(n != xfer) {
             DBG("ERROR: n = %d, errno = %d (%s)\n",
                 n, errno, strerror(errno));
@@ -417,30 +401,30 @@
     return count;
 }
 
-ssize_t LinuxUsbTransport::Read(void* _data, size_t len)
+int usb_read(usb_handle *h, void *_data, int len)
 {
     unsigned char *data = (unsigned char*) _data;
     unsigned count = 0;
     struct usbdevfs_bulktransfer bulk;
     int n, retry;
 
-    if (handle_->ep_in == 0 || handle_->desc == -1) {
+    if(h->ep_in == 0 || h->desc == -1) {
         return -1;
     }
 
     while(len > 0) {
         int xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len;
 
-        bulk.ep = handle_->ep_in;
+        bulk.ep = h->ep_in;
         bulk.len = xfer;
         bulk.data = data;
         bulk.timeout = 0;
         retry = 0;
 
         do{
-           DBG("[ usb read %d fd = %d], fname=%s\n", xfer, handle_->desc, handle_->fname);
-           n = ioctl(handle_->desc, USBDEVFS_BULK, &bulk);
-           DBG("[ usb read %d ] = %d, fname=%s, Retry %d \n", xfer, n, handle_->fname, retry);
+           DBG("[ usb read %d fd = %d], fname=%s\n", xfer, h->desc, h->fname);
+           n = ioctl(h->desc, USBDEVFS_BULK, &bulk);
+           DBG("[ usb read %d ] = %d, fname=%s, Retry %d \n", xfer, n, h->fname, retry);
 
            if( n < 0 ) {
             DBG1("ERROR: n = %d, errno = %d (%s)\n",n, errno, strerror(errno));
@@ -462,12 +446,24 @@
     return count;
 }
 
-int LinuxUsbTransport::Close()
+void usb_kick(usb_handle *h)
 {
     int fd;
 
-    fd = handle_->desc;
-    handle_->desc = -1;
+    fd = h->desc;
+    h->desc = -1;
+    if(fd >= 0) {
+        close(fd);
+        DBG("[ usb closed %d ]\n", fd);
+    }
+}
+
+int usb_close(usb_handle *h)
+{
+    int fd;
+
+    fd = h->desc;
+    h->desc = -1;
     if(fd >= 0) {
         close(fd);
         DBG("[ usb closed %d ]\n", fd);
@@ -476,21 +472,20 @@
     return 0;
 }
 
-Transport* usb_open(ifc_match_func callback)
+usb_handle *usb_open(ifc_match_func callback)
 {
-    std::unique_ptr<usb_handle> handle = find_usb_device("/sys/bus/usb/devices", callback);
-    return handle ? new LinuxUsbTransport(std::move(handle)) : nullptr;
+    return find_usb_device("/sys/bus/usb/devices", callback);
 }
 
 /* Wait for the system to notice the device is gone, so that a subsequent
  * fastboot command won't try to access the device before it's rebooted.
  * Returns 0 for success, -1 for timeout.
  */
-int LinuxUsbTransport::WaitForDisconnect()
+int usb_wait_for_disconnect(usb_handle *usb)
 {
   double deadline = now() + WAIT_FOR_DISCONNECT_TIMEOUT;
   while (now() < deadline) {
-    if (access(handle_->fname, F_OK))
+    if (access(usb->fname, F_OK))
       return 0;
     usleep(50000);
   }