#endif
}
-static void io_event_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) {
+static void io_event_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
struct userdata *u = userdata;
struct ipc_data data;
- int ret = 0;
- int data_size = 0;
- int read_sum = 0;
+ ssize_t ret = 0;
+ size_t data_size = 0;
+ size_t read_sum = 0;
int retry_count = 0;
pa_assert(io);
}
if (events & PA_IO_EVENT_INPUT) {
- data_size = sizeof(data);
+ data_size = sizeof(struct ipc_data);
memset(&data, 0, data_size);
+
while (read_sum != data_size && retry_count < RETRY_NUM) {
- ret = read(fd, (void*)(((char *)&data)+read_sum), data_size-read_sum);
- if (ret < 0 && errno == EAGAIN)
+ ret = read(fd, (void *)(((char *)&data) + read_sum), data_size - read_sum);
+ if (ret < 0) {
retry_count++;
- else
- read_sum += ret;
+ continue;
+ }
+ read_sum += (size_t)ret;
}
+
if (read_sum == data_size) {
pa_log_info("name(%s), role(%s), volume_gain_type(%s), method(%s)",
data.filename, data.role, data.volume_gain_type, data.method);