From 87adda6abc3467ede45a6d2a87df2b9efdf5bb33 Mon Sep 17 00:00:00 2001
From: Nathan Hjelm <hjelmn@me.com>
Date: Fri, 9 Oct 2015 15:03:10 -0600
Subject: [PATCH] Use C99 standard fixed width integer types in usb.h

This patch modifies the integer types in usb.h of the form u_int* to the
C99 standard uint* types.

Based on patch from Gwenhael Goavec-Merou.

Backported from upstream commit
https://github.com/libusb/libusb-compat-0.1/commit/2e9b6bbebb7cf1ef0095516ec6d5203deb3822e8.

Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
---
 libusb/usb.h | 130 ++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 70 insertions(+), 60 deletions(-)

diff --git a/libusb/usb.h b/libusb/usb.h
index 84e730f..d2c30aa 100644
--- a/libusb/usb.h
+++ b/libusb/usb.h
@@ -2,6 +2,7 @@
  * Prototypes, structure definitions and macros.
  *
  * Copyright (c) 2000-2003 Johannes Erdfelt <johannes@erdfelt.com>
+ * Copyright (c) 2015      Nathan Hjelm <hjelmn@cs.unm.edu>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -22,8 +23,8 @@
  * distribution for details.
  */
 
-#ifndef __USB_H__
-#define __USB_H__
+#ifndef USB_H
+#define USB_H
 
 #include <unistd.h>
 #include <stdlib.h>
@@ -31,6 +32,15 @@
 
 #include <dirent.h>
 
+/* stdint.h is not available on older MSVC */
+#if defined(_MSC_VER) && (_MSC_VER < 1600) && (!defined(_STDINT)) && (!defined(_STDINT_H))
+typedef unsigned __int8   uint8_t;
+typedef unsigned __int16  uint16_t;
+typedef unsigned __int32  uint32_t;
+#else
+#include <stdint.h>
+#endif
+
 /*
  * USB spec information
  *
@@ -78,40 +88,40 @@
 
 /* All standard descriptors have these 2 fields in common */
 struct usb_descriptor_header {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
 };
 
 /* String descriptor */
 struct usb_string_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int16_t wData[1];
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint16_t wData[1];
 };
 
 /* HID descriptor */
 struct usb_hid_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int16_t bcdHID;
-	u_int8_t  bCountryCode;
-	u_int8_t  bNumDescriptors;
-	/* u_int8_t  bReportDescriptorType; */
-	/* u_int16_t wDescriptorLength; */
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint16_t bcdHID;
+	uint8_t  bCountryCode;
+	uint8_t  bNumDescriptors;
+	/* uint8_t  bReportDescriptorType; */
+	/* uint16_t wDescriptorLength; */
 	/* ... */
 };
 
 /* Endpoint descriptor */
 #define USB_MAXENDPOINTS	32
 struct usb_endpoint_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int8_t  bEndpointAddress;
-	u_int8_t  bmAttributes;
-	u_int16_t wMaxPacketSize;
-	u_int8_t  bInterval;
-	u_int8_t  bRefresh;
-	u_int8_t  bSynchAddress;
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint8_t  bEndpointAddress;
+	uint8_t  bmAttributes;
+	uint16_t wMaxPacketSize;
+	uint8_t  bInterval;
+	uint8_t  bRefresh;
+	uint8_t  bSynchAddress;
 
 	unsigned char *extra;	/* Extra descriptors */
 	int extralen;
@@ -129,15 +139,15 @@ struct usb_endpoint_descriptor {
 /* Interface descriptor */
 #define USB_MAXINTERFACES	32
 struct usb_interface_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int8_t  bInterfaceNumber;
-	u_int8_t  bAlternateSetting;
-	u_int8_t  bNumEndpoints;
-	u_int8_t  bInterfaceClass;
-	u_int8_t  bInterfaceSubClass;
-	u_int8_t  bInterfaceProtocol;
-	u_int8_t  iInterface;
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint8_t  bInterfaceNumber;
+	uint8_t  bAlternateSetting;
+	uint8_t  bNumEndpoints;
+	uint8_t  bInterfaceClass;
+	uint8_t  bInterfaceSubClass;
+	uint8_t  bInterfaceProtocol;
+	uint8_t  iInterface;
 
 	struct usb_endpoint_descriptor *endpoint;
 
@@ -155,14 +165,14 @@ struct usb_interface {
 /* Configuration descriptor information.. */
 #define USB_MAXCONFIG		8
 struct usb_config_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int16_t wTotalLength;
-	u_int8_t  bNumInterfaces;
-	u_int8_t  bConfigurationValue;
-	u_int8_t  iConfiguration;
-	u_int8_t  bmAttributes;
-	u_int8_t  MaxPower;
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint16_t wTotalLength;
+	uint8_t  bNumInterfaces;
+	uint8_t  bConfigurationValue;
+	uint8_t  iConfiguration;
+	uint8_t  bmAttributes;
+	uint8_t  MaxPower;
 
 	struct usb_interface *interface;
 
@@ -172,28 +182,28 @@ struct usb_config_descriptor {
 
 /* Device descriptor */
 struct usb_device_descriptor {
-	u_int8_t  bLength;
-	u_int8_t  bDescriptorType;
-	u_int16_t bcdUSB;
-	u_int8_t  bDeviceClass;
-	u_int8_t  bDeviceSubClass;
-	u_int8_t  bDeviceProtocol;
-	u_int8_t  bMaxPacketSize0;
-	u_int16_t idVendor;
-	u_int16_t idProduct;
-	u_int16_t bcdDevice;
-	u_int8_t  iManufacturer;
-	u_int8_t  iProduct;
-	u_int8_t  iSerialNumber;
-	u_int8_t  bNumConfigurations;
+	uint8_t  bLength;
+	uint8_t  bDescriptorType;
+	uint16_t bcdUSB;
+	uint8_t  bDeviceClass;
+	uint8_t  bDeviceSubClass;
+	uint8_t  bDeviceProtocol;
+	uint8_t  bMaxPacketSize0;
+	uint16_t idVendor;
+	uint16_t idProduct;
+	uint16_t bcdDevice;
+	uint8_t  iManufacturer;
+	uint8_t  iProduct;
+	uint8_t  iSerialNumber;
+	uint8_t  bNumConfigurations;
 };
 
 struct usb_ctrl_setup {
-	u_int8_t  bRequestType;
-	u_int8_t  bRequest;
-	u_int16_t wValue;
-	u_int16_t wIndex;
-	u_int16_t wLength;
+	uint8_t  bRequestType;
+	uint8_t  bRequest;
+	uint16_t wValue;
+	uint16_t wIndex;
+	uint16_t wLength;
 };
 
 /*
@@ -254,7 +264,7 @@ struct usb_device {
 
   void *dev;		/* Darwin support */
 
-  u_int8_t devnum;
+  uint8_t devnum;
 
   unsigned char num_children;
   struct usb_device **children;
@@ -266,7 +276,7 @@ struct usb_bus {
   char dirname[PATH_MAX + 1];
 
   struct usb_device *devices;
-  u_int32_t location;
+  uint32_t location;
 
   struct usb_device *root_dev;
 };
-- 
2.9.3