]> sigrok.org Git - libsigrok.git/commitdiff
usb: Simplify usb_get_port_path() and fix writing into a const char *.
authorAurelien Jacobs <redacted>
Mon, 6 Oct 2014 22:02:10 +0000 (00:02 +0200)
committerUwe Hermann <redacted>
Sun, 12 Oct 2014 17:36:11 +0000 (19:36 +0200)
src/libsigrok-internal.h
src/usb.c

index bed08e4c0cbb460fc6bd6b3bd7a69c776805fee2..93da7f9664b62e9d637c112520e618365a10b0c1 100644 (file)
@@ -677,7 +677,7 @@ SR_PRIV int sr_usb_open(libusb_context *usb_ctx, struct sr_usb_dev_inst *usb);
 SR_PRIV int usb_source_add(struct sr_session *session, struct sr_context *ctx,
                int timeout, sr_receive_data_callback cb, void *cb_data);
 SR_PRIV int usb_source_remove(struct sr_session *session, struct sr_context *ctx);
-SR_PRIV int usb_get_port_path(libusb_device *dev, const char *path, int path_len);
+SR_PRIV int usb_get_port_path(libusb_device *dev, char *path, int path_len);
 #endif
 
 /*--- hardware/common/scpi.c ------------------------------------------------*/
index 1c9e4118ebc0ad96e35e01cbadaf654e547c50bc..ec502c97501704f38bed9b2d535374166ff7601e 100644 (file)
--- a/src/usb.c
+++ b/src/usb.c
@@ -271,27 +271,18 @@ SR_PRIV int usb_source_remove(struct sr_session *session, struct sr_context *ctx
        return SR_OK;
 }
 
-SR_PRIV int usb_get_port_path(libusb_device *dev, const char *path, int path_len)
+SR_PRIV int usb_get_port_path(libusb_device *dev, char *path, int path_len)
 {
-       gchar s[64];
-       gchar tmp_s[8];
-       uint8_t port_numbers[32];
-       int i;
-
-       memset(port_numbers, 0, sizeof(port_numbers));
-       libusb_get_port_numbers(dev, port_numbers, sizeof(port_numbers));
-
-       g_snprintf((gchar*)&s, sizeof(s), "usb/%d-%d",
-                       libusb_get_bus_number(dev), port_numbers[0]);
-
-       i = 1;
-       while (port_numbers[i]) {
-               g_snprintf(tmp_s, sizeof(tmp_s), ".%d", port_numbers[i]);
-               g_strlcat((gchar*)&s, tmp_s, sizeof(s));
-               i++;
-       }
+       uint8_t port_numbers[8];
+       int i, n, len;
+
+       n = libusb_get_port_numbers(dev, port_numbers, sizeof(port_numbers));
+
+       len = snprintf(path, path_len, "usb/%d-%d",
+                      libusb_get_bus_number(dev), port_numbers[0]);
 
-       g_strlcpy((gchar*)path, s, path_len);
+       for (i = 1; i < n; i++)
+               len += snprintf(path+len, path_len-len, ".%d", port_numbers[i]);
 
        return SR_OK;
 }