Skip to content

Commit 282c10d

Browse files
committed
Fix minor issues/errors pointed out by Microsoft Studio in casting
iio_device_get_sample_size() and iio_device_get_sample_size_mask() can return errors (as neg number), check and cast to unsigned (which is how things are stored internally in the iio_buf structure). errno is int, cast ssize_t (return type of many iio functions) when setting it. if functions are int, return an int (not a ssize_t) change some internal usb functions to uint16_t since it matches up with libusb better The macro FD_ZERO() & FD_SET() emits warnings, so turn them off/on around those calls. Initilize var to NULL, to keep compiler happy libusb_get_device_list() can return errors, so check for them. handle locales with the safe verison of the string functions (using _snprintf_s_l() rather than _snprintf_l()) Signed-off-by: Robin Getz <[email protected]>
1 parent 19522e0 commit 282c10d

File tree

8 files changed

+113
-56
lines changed

8 files changed

+113
-56
lines changed

buffer.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,25 @@ static bool device_is_high_speed(const struct iio_device *dev)
3636
struct iio_buffer * iio_device_create_buffer(const struct iio_device *dev,
3737
size_t samples_count, bool cyclic)
3838
{
39-
int ret = -EINVAL;
39+
ssize_t ret = -EINVAL;
4040
struct iio_buffer *buf;
41-
unsigned int sample_size = iio_device_get_sample_size(dev);
41+
ssize_t sample_size = iio_device_get_sample_size(dev);
4242

4343
if (!sample_size || !samples_count)
4444
goto err_set_errno;
4545

46+
if (sample_size < 0) {
47+
ret = sample_size;
48+
goto err_set_errno;
49+
}
50+
4651
buf = malloc(sizeof(*buf));
4752
if (!buf) {
4853
ret = -ENOMEM;
4954
goto err_set_errno;
5055
}
5156

52-
buf->dev_sample_size = sample_size;
57+
buf->dev_sample_size = (unsigned int) sample_size;
5358
buf->length = sample_size * samples_count;
5459
buf->dev = dev;
5560
buf->mask = calloc(dev->words, sizeof(*buf->mask));
@@ -87,8 +92,11 @@ struct iio_buffer * iio_device_create_buffer(const struct iio_device *dev,
8792
}
8893
}
8994

90-
buf->sample_size = iio_device_get_sample_size_mask(dev,
91-
buf->mask, dev->words);
95+
ret = iio_device_get_sample_size_mask(dev, buf->mask, dev->words);
96+
if (ret < 0)
97+
goto err_close_device;
98+
99+
buf->sample_size = (unsigned int) ret;
92100
buf->data_length = buf->length;
93101
return buf;
94102

@@ -99,7 +107,7 @@ struct iio_buffer * iio_device_create_buffer(const struct iio_device *dev,
99107
err_free_buf:
100108
free(buf);
101109
err_set_errno:
102-
errno = -ret;
110+
errno = -(int)ret;
103111
return NULL;
104112
}
105113

@@ -126,6 +134,7 @@ ssize_t iio_buffer_refill(struct iio_buffer *buffer)
126134
{
127135
ssize_t read;
128136
const struct iio_device *dev = buffer->dev;
137+
ssize_t ret;
129138

130139
if (buffer->dev_is_high_speed) {
131140
read = dev->ctx->ops->get_buffer(dev, &buffer->buffer,
@@ -137,8 +146,10 @@ ssize_t iio_buffer_refill(struct iio_buffer *buffer)
137146

138147
if (read >= 0) {
139148
buffer->data_length = read;
140-
buffer->sample_size = iio_device_get_sample_size_mask(dev,
141-
buffer->mask, dev->words);
149+
ret = iio_device_get_sample_size_mask(dev, buffer->mask, dev->words);
150+
if (ret < 0)
151+
return ret;
152+
buffer->sample_size = (unsigned int)ret;
142153
}
143154
return read;
144155
}

channel.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -743,33 +743,33 @@ int iio_channel_attr_read_double(const struct iio_channel *chn,
743743
int iio_channel_attr_write_longlong(const struct iio_channel *chn,
744744
const char *attr, long long val)
745745
{
746-
ssize_t ret;
746+
int ret;
747747
char buf[1024];
748748
iio_snprintf(buf, sizeof(buf), "%lld", val);
749-
ret = iio_channel_attr_write(chn, attr, buf);
749+
ret = (int) iio_channel_attr_write(chn, attr, buf);
750750
return ret < 0 ? ret : 0;
751751
}
752752

753753
int iio_channel_attr_write_double(const struct iio_channel *chn,
754754
const char *attr, double val)
755755
{
756-
ssize_t ret;
756+
int ret;
757757
char buf[1024];
758758

759-
ret = (ssize_t) write_double(buf, sizeof(buf), val);
759+
ret = write_double(buf, sizeof(buf), val);
760760
if (!ret)
761-
ret = iio_channel_attr_write(chn, attr, buf);
761+
ret = (int) iio_channel_attr_write(chn, attr, buf);
762762
return ret < 0 ? ret : 0;
763763
}
764764

765765
int iio_channel_attr_write_bool(const struct iio_channel *chn,
766766
const char *attr, bool val)
767767
{
768-
ssize_t ret;
768+
int ret;
769769
if (val)
770-
ret = iio_channel_attr_write_raw(chn, attr, "1", 2);
770+
ret = (int) iio_channel_attr_write_raw(chn, attr, "1", 2);
771771
else
772-
ret = iio_channel_attr_write_raw(chn, attr, "0", 2);
772+
ret = (int) iio_channel_attr_write_raw(chn, attr, "0", 2);
773773
return ret < 0 ? ret : 0;
774774
}
775775

device.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ int iio_device_attr_write_longlong(const struct iio_device *dev,
661661
iio_snprintf(buf, sizeof(buf), "%lld", val);
662662
ret = iio_device_attr_write(dev, attr, buf);
663663

664-
return ret < 0 ? ret : 0;
664+
return (int) (ret < 0 ? ret : 0);
665665
}
666666

667667
int iio_device_attr_write_double(const struct iio_device *dev,
@@ -673,7 +673,7 @@ int iio_device_attr_write_double(const struct iio_device *dev,
673673
ret = (ssize_t) write_double(buf, sizeof(buf), val);
674674
if (!ret)
675675
ret = iio_device_attr_write(dev, attr, buf);
676-
return ret < 0 ? ret : 0;
676+
return (int) (ret < 0 ? ret : 0);
677677
}
678678

679679
int iio_device_attr_write_bool(const struct iio_device *dev,
@@ -686,7 +686,7 @@ int iio_device_attr_write_bool(const struct iio_device *dev,
686686
else
687687
ret = iio_device_attr_write(dev, attr, "0");
688688

689-
return ret < 0 ? ret : 0;
689+
return (int) (ret < 0 ? ret : 0);
690690
}
691691

692692
int iio_device_buffer_attr_read_longlong(const struct iio_device *dev,
@@ -737,7 +737,7 @@ int iio_device_buffer_attr_write_longlong(const struct iio_device *dev,
737737
iio_snprintf(buf, sizeof(buf), "%lld", val);
738738
ret = iio_device_buffer_attr_write(dev, attr, buf);
739739

740-
return ret < 0 ? ret : 0;
740+
return (int) (ret < 0 ? ret : 0);
741741
}
742742

743743
int iio_device_buffer_attr_write_double(const struct iio_device *dev,
@@ -749,7 +749,7 @@ int iio_device_buffer_attr_write_double(const struct iio_device *dev,
749749
ret = (ssize_t) write_double(buf, sizeof(buf), val);
750750
if (!ret)
751751
ret = iio_device_buffer_attr_write(dev, attr, buf);
752-
return ret < 0 ? ret : 0;
752+
return (int) (ret < 0 ? ret : 0);
753753
}
754754

755755
int iio_device_buffer_attr_write_bool(const struct iio_device *dev,
@@ -762,7 +762,7 @@ int iio_device_buffer_attr_write_bool(const struct iio_device *dev,
762762
else
763763
ret = iio_device_buffer_attr_write(dev, attr, "0");
764764

765-
return ret < 0 ? ret : 0;
765+
return (int) (ret < 0 ? ret : 0);
766766
}
767767

768768
ssize_t iio_device_debug_attr_read(const struct iio_device *dev,
@@ -853,7 +853,7 @@ int iio_device_debug_attr_write_longlong(const struct iio_device *dev,
853853
iio_snprintf(buf, sizeof(buf), "%lld", val);
854854
ret = iio_device_debug_attr_write(dev, attr, buf);
855855

856-
return ret < 0 ? ret : 0;
856+
return (int) (ret < 0 ? ret : 0);
857857
}
858858

859859
int iio_device_debug_attr_write_double(const struct iio_device *dev,
@@ -865,7 +865,7 @@ int iio_device_debug_attr_write_double(const struct iio_device *dev,
865865
ret = (ssize_t) write_double(buf, sizeof(buf), val);
866866
if (!ret)
867867
ret = iio_device_debug_attr_write(dev, attr, buf);
868-
return ret < 0 ? ret : 0;
868+
return (int) (ret < 0 ? ret : 0);
869869
}
870870

871871
int iio_device_debug_attr_write_bool(const struct iio_device *dev,
@@ -878,7 +878,7 @@ int iio_device_debug_attr_write_bool(const struct iio_device *dev,
878878
else
879879
ret = iio_device_debug_attr_write_raw(dev, attr, "0", 2);
880880

881-
return ret < 0 ? ret : 0;
881+
return (int) (ret < 0 ? ret : 0);
882882
}
883883

884884
int iio_device_identify_filename(const struct iio_device *dev,
@@ -930,7 +930,7 @@ int iio_device_reg_write(struct iio_device *dev,
930930
address, value);
931931
ret = iio_device_debug_attr_write(dev, "direct_reg_access", buf);
932932

933-
return ret < 0 ? ret : 0;
933+
return (int) (ret < 0 ? ret : 0);
934934
}
935935

936936
int iio_device_reg_read(struct iio_device *dev,

iio-private.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,8 @@ struct iio_context * local_create_context(void);
288288
struct iio_context * network_create_context(const char *hostname);
289289
struct iio_context * xml_create_context_mem(const char *xml, size_t len);
290290
struct iio_context * xml_create_context(const char *xml_file);
291-
struct iio_context * usb_create_context(unsigned int bus, unsigned int address,
292-
unsigned int interface);
291+
struct iio_context * usb_create_context(unsigned int bus, uint16_t address,
292+
uint16_t interface);
293293
struct iio_context * usb_create_context_from_uri(const char *uri);
294294
struct iio_context * serial_create_context_from_uri(const char *uri);
295295

iiod-client.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,13 +169,13 @@ int iiod_client_get_version(struct iiod_client *client, void *desc,
169169

170170
iio_mutex_lock(client->lock);
171171

172-
ret = ops->write(pdata, desc, "VERSION\r\n", sizeof("VERSION\r\n") - 1);
172+
ret = (int) ops->write(pdata, desc, "VERSION\r\n", sizeof("VERSION\r\n") - 1);
173173
if (ret < 0) {
174174
iio_mutex_unlock(client->lock);
175175
return ret;
176176
}
177177

178-
ret = ops->read_line(pdata, desc, buf, sizeof(buf));
178+
ret = (int) ops->read_line(pdata, desc, buf, sizeof(buf));
179179
iio_mutex_unlock(client->lock);
180180

181181
if (ret < 0)
@@ -325,7 +325,7 @@ static int iiod_client_discard(struct iiod_client *client, void *desc,
325325

326326
ret = iiod_client_read_all(client, desc, buf, read_len);
327327
if (ret < 0)
328-
return ret;
328+
return (int) ret;
329329

330330
to_discard -= (size_t) ret;
331331
} while (to_discard);

network.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ static ssize_t write_command(struct iio_network_io_context *io_ctx,
406406
ret = write_all(io_ctx, cmd, strlen(cmd));
407407
if (ret < 0) {
408408
char buf[1024];
409-
iio_strerror(-ret, buf, sizeof(buf));
409+
iio_strerror(-(int) ret, buf, sizeof(buf));
410410
IIO_ERROR("Unable to send command: %s\n", buf);
411411
}
412412
return ret;
@@ -510,8 +510,17 @@ static int do_connect(int fd, const struct addrinfo *addrinfo,
510510
}
511511

512512
#ifdef _WIN32
513+
#ifdef _MSC_BUILD
514+
/* This is so stupid, but studio emits a signed/unsigned mismatch
515+
* on their own FD_ZERO macro, so turn the warning off/on
516+
*/
517+
#pragma warning(disable : 4389)
518+
#endif
513519
FD_ZERO(&set);
514520
FD_SET(fd, &set);
521+
#ifdef _MSC_BUILD
522+
#pragma warning(default: 4389)
523+
#endif
515524

516525
if (timeout != 0) {
517526
tv.tv_sec = timeout / 1000;

0 commit comments

Comments
 (0)