projects
/
libam7xxx.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
am7xxx: make sure am7xxx_get_device_info() always returns sensible values
[libam7xxx.git]
/
src
/
am7xxx.c
diff --git
a/src/am7xxx.c
b/src/am7xxx.c
index
74ae689
..
512cf6f
100644
(file)
--- a/
src/am7xxx.c
+++ b/
src/am7xxx.c
@@
-341,7
+341,7
@@
static inline unsigned int in_80chars(unsigned int i)
{
/* The 3 below is the length of "xx " where xx is the hex string
* representation of a byte */
{
/* The 3 below is the length of "xx " where xx is the hex string
* representation of a byte */
- return ((i
+1) % (80/
3));
+ return ((i
+ 1) % (80 /
3));
}
static void trace_dump_buffer(am7xxx_context *ctx, const char *message,
}
static void trace_dump_buffer(am7xxx_context *ctx, const char *message,
@@
-800,7
+800,7
@@
static int open_device(am7xxx_context *ctx,
}
if (current_configuration != (*dev)->desc->configuration) {
}
if (current_configuration != (*dev)->desc->configuration) {
- debug(ctx, "libusb configuration changed (expected: %hhu, current: %
hhu
\n",
+ debug(ctx, "libusb configuration changed (expected: %hhu, current: %
d)
\n",
(*dev)->desc->configuration, current_configuration);
ret = -EINVAL;
goto out_libusb_release_interface;
(*dev)->desc->configuration, current_configuration);
ret = -EINVAL;
goto out_libusb_release_interface;
@@
-1093,8
+1093,7
@@
AM7XXX_PUBLIC int am7xxx_init(am7xxx_context **ctx)
*ctx = malloc(sizeof(**ctx));
if (*ctx == NULL) {
fatal("cannot allocate the context (%s)\n", strerror(errno));
*ctx = malloc(sizeof(**ctx));
if (*ctx == NULL) {
fatal("cannot allocate the context (%s)\n", strerror(errno));
- ret = -ENOMEM;
- goto out;
+ return -ENOMEM;
}
memset(*ctx, 0, sizeof(**ctx));
}
memset(*ctx, 0, sizeof(**ctx));
@@
-1214,10
+1213,9
@@
AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
int ret;
struct am7xxx_header h;
int ret;
struct am7xxx_header h;
- if (dev->device_info) {
- memcpy(device_info, dev->device_info, sizeof(*device_info));
- return 0;
- }
+ /* if there is a cached copy of the device info, just return that */
+ if (dev->device_info)
+ goto return_value;
ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO);
if (ret < 0)
ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO);
if (ret < 0)
@@
-1251,6
+1249,9
@@
AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
dev->device_info->unknown1 = h.header_data.devinfo.unknown1;
#endif
dev->device_info->unknown1 = h.header_data.devinfo.unknown1;
#endif
+return_value:
+ if (device_info)
+ memcpy(device_info, dev->device_info, sizeof(*device_info));
return 0;
}
return 0;
}
@@
-1261,7
+1262,6
@@
AM7XXX_PUBLIC int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev,
unsigned int *scaled_width,
unsigned int *scaled_height)
{
unsigned int *scaled_width,
unsigned int *scaled_height)
{
-
am7xxx_device_info device_info;
float width_ratio;
float height_ratio;
am7xxx_device_info device_info;
float width_ratio;
float height_ratio;