Constify some return data
authorDaniel Drake <dsd@gentoo.org>
Tue, 1 Apr 2008 22:28:32 +0000 (23:28 +0100)
committerDaniel Drake <dsd@gentoo.org>
Tue, 1 Apr 2008 22:30:49 +0000 (23:30 +0100)
Make it clear that apps should not mess with these structures

TODO
examples/lsusb.c
libusb/core.c
libusb/descriptor.c
libusb/io.c
libusb/libusb.h

diff --git a/TODO b/TODO
index e0250ab..b9bf475 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,15 +6,12 @@ error codes
 fixme review
 review functionality missing over 0.1
 endianness of control setup, issues when resubmitting transfers
-make libusb_get_pollfds return const?
 doxygen warnings
-make descriptor things const?
 isochronous sync I/O?
 
 1.0 API style/naming points to reconsider
 =========================================
 typedef _cb or _cb_fn or _cb_t?
-typedef as-is or pointers? libusb_dev_t rather than libusb_dev *?
 
 for 1.1 or future
 ==================
index ca39bd9..f196c85 100644 (file)
@@ -27,7 +27,7 @@ void print_devs(libusb_device **devs)
        int i = 0;
 
        while ((dev = devs[i++]) != NULL) {
-               struct libusb_device_descriptor *desc =
+               const struct libusb_device_descriptor *desc =
                        libusb_get_device_descriptor(dev);
                printf("%04x:%04x\n", desc->idVendor, desc->idProduct);
        }
index a4c01ba..f90ea06 100644 (file)
@@ -424,7 +424,7 @@ API_EXPORTED struct libusb_device_handle *libusb_open_device_with_vid_pid(
                return NULL;
 
        while ((dev = devs[i++]) != NULL) {
-               struct libusb_device_descriptor *desc =
+               const struct libusb_device_descriptor *desc =
                        libusb_get_device_descriptor(dev);
                if (desc->idVendor == vendor_id && desc->idProduct == product_id) {
                        found = dev;
index aa0243a..da300e4 100644 (file)
@@ -75,6 +75,7 @@ static int parse_endpoint(struct libusb_endpoint_descriptor *endpoint,
        unsigned char *buffer, int size)
 {
        struct usb_descriptor_header header;
+       unsigned char *extra;
        unsigned char *begin;
        int parsed = 0;
        int len;
@@ -136,13 +137,14 @@ static int parse_endpoint(struct libusb_endpoint_descriptor *endpoint,
                return parsed;
        }
 
-       endpoint->extra = malloc(len);
-       if (!endpoint->extra) {
+       extra = malloc(len);
+       endpoint->extra = extra;
+       if (!extra) {
                endpoint->extralen = 0;
                return parsed;
        }
 
-       memcpy(endpoint->extra, begin, len);
+       memcpy(extra, begin, len);
        endpoint->extralen = len;
 
        return parsed;
@@ -163,13 +165,16 @@ static int parse_interface(struct libusb_interface *interface,
        interface->num_altsetting = 0;
 
        while (size >= INTERFACE_DESC_LENGTH) {
-               interface->altsetting = realloc(interface->altsetting,
+               struct libusb_interface_descriptor *altsetting =
+                       (struct libusb_interface_descriptor *) interface->altsetting;
+               altsetting = realloc(altsetting,
                        sizeof(struct libusb_interface_descriptor) *
                        (interface->num_altsetting + 1));
-               if (!interface->altsetting)
+               if (!altsetting)
                        return -1;
+               interface->altsetting = altsetting;
 
-               ifp = interface->altsetting + interface->num_altsetting;
+               ifp = altsetting + interface->num_altsetting;
                interface->num_altsetting++;
                usbi_parse_descriptor(buffer, "bbbbbbbbb", ifp);
 
@@ -207,13 +212,14 @@ static int parse_interface(struct libusb_interface *interface,
                        ifp->extra = NULL;
                        ifp->extralen = 0;
                } else {
-                       ifp->extra = malloc(len);
-                       if (!ifp->extra) {
+                       unsigned char *extra = malloc(len);
+                       ifp->extra = extra;
+                       if (!extra) {
                                ifp->extralen = 0;
                                /* FIXME will leak memory */
                                return -1;
                        }
-                       memcpy(ifp->extra, begin, len);
+                       memcpy(extra, begin, len);
                        ifp->extralen = len;
                }
 
@@ -231,13 +237,15 @@ static int parse_interface(struct libusb_interface *interface,
                }
 
                if (ifp->bNumEndpoints > 0) {
+                       struct libusb_endpoint_descriptor *endpoint;
                        tmp = ifp->bNumEndpoints * sizeof(struct libusb_endpoint_descriptor);
-                       ifp->endpoint = malloc(tmp);
-                       if (!ifp->endpoint)
+                       endpoint = malloc(tmp);
+                       ifp->endpoint = endpoint;
+                       if (!endpoint)
                                /* FIXME will leak memory? */
                                return -1;      
 
-                       memset(ifp->endpoint, 0, tmp);
+                       memset(endpoint, 0, tmp);
                        for (i = 0; i < ifp->bNumEndpoints; i++) {
                                usbi_parse_descriptor(buffer, "bb", &header);
 
@@ -247,7 +255,7 @@ static int parse_interface(struct libusb_interface *interface,
                                        return -1;
                                }
 
-                               r = parse_endpoint(ifp->endpoint + i, buffer, size);
+                               r = parse_endpoint(endpoint + i, buffer, size);
                                if (r < 0)
                                        /* FIXME will leak memory */
                                        return r;
@@ -278,6 +286,7 @@ int usbi_parse_configuration(struct libusb_config_descriptor *config,
        int size;
        int tmp;
        struct usb_descriptor_header header;
+       struct libusb_interface *interface;
 
        usbi_parse_descriptor(buffer, "bbwbbbbb", config);
        size = config->wTotalLength;
@@ -288,11 +297,12 @@ int usbi_parse_configuration(struct libusb_config_descriptor *config,
        }
 
        tmp = config->bNumInterfaces * sizeof(struct libusb_interface);
-       config->interface = malloc(tmp);
+       interface = malloc(tmp);
+       config->interface = interface;
        if (!config->interface)
                return -1;      
 
-       memset(config->interface, 0, tmp);
+       memset(interface, 0, tmp);
        buffer += config->bLength;
        size -= config->bLength;
 
@@ -333,19 +343,20 @@ int usbi_parse_configuration(struct libusb_config_descriptor *config,
                if (len) {
                        /* FIXME: We should realloc and append here */
                        if (!config->extralen) {
-                               config->extra = malloc(len);
-                               if (!config->extra) {
+                               unsigned char *extra = malloc(len);
+                               config->extra = extra;
+                               if (!extra) {
                                        config->extralen = 0;
                                        /* FIXME will leak memory */
                                        return -1;
                                }
 
-                               memcpy(config->extra, begin, len);
+                               memcpy(extra, begin, len);
                                config->extralen = len;
                        }
                }
 
-               r = parse_interface(config->interface + i, buffer, size);
+               r = parse_interface(interface + i, buffer, size);
                if (r < 0)
                        return r;
 
@@ -361,7 +372,7 @@ int usbi_parse_configuration(struct libusb_config_descriptor *config,
  * \param dev the device
  * \returns the USB device descriptor
  */
-API_EXPORTED struct libusb_device_descriptor *libusb_get_device_descriptor(
+API_EXPORTED const struct libusb_device_descriptor *libusb_get_device_descriptor(
        struct libusb_device *dev)
 {
        return &dev->desc;
@@ -372,7 +383,7 @@ API_EXPORTED struct libusb_device_descriptor *libusb_get_device_descriptor(
  * \param dev the device
  * \returns the USB configuration descriptor
  */
-API_EXPORTED struct libusb_config_descriptor *libusb_get_config_descriptor(
+API_EXPORTED const struct libusb_config_descriptor *libusb_get_config_descriptor(
        struct libusb_device *dev)
 {
        return dev->config;
index 9c0d9bb..9b99f82 100644 (file)
@@ -1166,7 +1166,7 @@ void usbi_remove_pollfd(int fd)
  * \returns a NULL-terminated list of libusb_pollfd structures, or NULL on
  * error
  */
-API_EXPORTED struct libusb_pollfd **libusb_get_pollfds(void)
+API_EXPORTED const struct libusb_pollfd **libusb_get_pollfds(void)
 {
        struct libusb_pollfd **ret;
        struct usbi_pollfd *ipollfd;
@@ -1184,6 +1184,6 @@ API_EXPORTED struct libusb_pollfd **libusb_get_pollfds(void)
                ret[i++] = (struct libusb_pollfd *) ipollfd;
        ret[cnt] = NULL;
 
-       return ret;
+       return (const struct libusb_pollfd **) ret;
 }
 
index 2654ba3..765e0f7 100644 (file)
@@ -350,7 +350,7 @@ struct libusb_endpoint_descriptor {
        uint8_t  bRefresh;
        uint8_t  bSynchAddress;
 
-       unsigned char *extra;   /* Extra descriptors */
+       const unsigned char *extra;     /* Extra descriptors */
        int extralen;
 };
 
@@ -394,9 +394,9 @@ struct libusb_interface_descriptor {
 
        /** Array of endpoint descriptors. This length of this array is determined
         * by the bNumEndpoints field. */
-       struct libusb_endpoint_descriptor *endpoint;
+       const struct libusb_endpoint_descriptor *endpoint;
 
-       unsigned char *extra;   /* Extra descriptors */
+       const unsigned char *extra;     /* Extra descriptors */
        int extralen;
 };
 
@@ -406,7 +406,7 @@ struct libusb_interface_descriptor {
 struct libusb_interface {
        /** Array of interface descriptors. The length of this array is determined
         * by the num_altsetting field. */
-       struct libusb_interface_descriptor *altsetting;
+       const struct libusb_interface_descriptor *altsetting;
 
        /** The number of alternate settings that belong to this interface */
        int num_altsetting;
@@ -448,9 +448,9 @@ struct libusb_config_descriptor {
 
        /** Array of interfaces supported by this configuration. The length of
         * this array is determined by the bNumInterfaces field. */
-       struct libusb_interface *interface;
+       const struct libusb_interface *interface;
 
-       unsigned char *extra;   /* Extra descriptors */
+       const unsigned char *extra;     /* Extra descriptors */
        int extralen;
 };
 
@@ -607,9 +607,9 @@ void libusb_exit(void);
 
 int libusb_get_device_list(libusb_device ***list);
 void libusb_free_device_list(libusb_device **list, int unref_devices);
-struct libusb_device_descriptor *libusb_get_device_descriptor(
+const struct libusb_device_descriptor *libusb_get_device_descriptor(
        libusb_device *dev);
-struct libusb_config_descriptor *libusb_get_config_descriptor(
+const struct libusb_config_descriptor *libusb_get_config_descriptor(
        libusb_device *dev);
 libusb_device *libusb_device_ref(libusb_device *dev);
 void libusb_device_unref(libusb_device *dev);
@@ -869,7 +869,7 @@ struct libusb_pollfd {
 int libusb_handle_events_timeout(struct timeval *tv);
 int libusb_handle_events(void);
 int libusb_get_next_timeout(struct timeval *tv);
-struct libusb_pollfd **libusb_get_pollfds(void);
+const struct libusb_pollfd **libusb_get_pollfds(void);
 
 typedef void (*libusb_pollfd_added_cb)(int fd, short events);
 typedef void (*libusb_pollfd_removed_cb)(int fd);