ssize_t read_bytes = 0;
do
{
- if (data_length < read_bytes)
+ if (data_length <= read_bytes)
break;
ret = read(fd, data + read_bytes, data_length - read_bytes);
break;
else if (ret >= 0)
read_bytes += ret;
- else if ((ret == -1) && (errno == EPIPE))
+ else if (ret == -1)
{
- ERR("error when reading data in pipe\n");
+ switch (errno)
+ {
+ case EINTR:
+ case EAGAIN:
+ ERR("error when reading data in pipe. try again\n");
+ continue;
+ default:
+ ERR("unhandled error (ret: %zd, errno: %d)\n", ret, errno);
+ break;
+ }
+
return -1;
}
- else if ((ret == -1) && (errno == EINTR))
- ERR("error when reading data in pipe. try again\n");
- else
- {
- ERR("unhandled error (ret: %zd, errno: %d)\n", ret, errno);
- return -1;
- }
} while (retry--);
return 0;
ssize_t written_bytes = 0;
do
{
- if (data_length < written_bytes)
+ if (data_length <= written_bytes)
break;
ret = write(g_input_backend->main_to_input_thread_pipe_fd[1], data + written_bytes, data_length - written_bytes);
written_bytes += ret;
ERR("write %zd bytes in pipe. try more\n", ret);
}
- else if ((ret == -1) && (errno == EPIPE))
+ else if (ret < 0)
{
- ERR("error when writing data in pipe\n");
+ switch (errno)
+ {
+ case EPIPE:
+ ERR("error when writing data in pipe\n");
+ break;
+ case EINTR:
+ case EAGAIN:
+ ERR("error when writing data in pipe. try again\n");
+ continue;
+ case EACCES:
+ ERR("error when writing data in pipe. permission denied\n");
+ break;
+ case EFAULT:
+ ERR("error when writing data in pipe. Bad buf outside address space\n");
+ break;
+ case EBADF:
+ ERR("error when writing data in pipe. Bad fd\n");
+ break;
+ case EINVAL:
+ ERR("error when writing data in pipe. Invalid value\n");
+ break;
+ default:
+ ERR("unhandled error (ret: %zd, errno: %d)\n", ret, errno);
+ break;
+ }
+
return -1;
}
- else if ((ret == -1) && (errno == EINTR))
- ERR("error when writing data in pipe. try again\n");
- else
- {
- ERR("unhandled error (ret: %zd, errno: %d)\n", ret, errno);
- return -1;
- }
} while (retry--);
return 0;
{
ret = input_thread_pipe_read(input->main_to_input_thread_pipe_fd[0], &order, sizeof(E_Input_Thread_Request_Data));
if (ret < 0)
- return TRUE;
+ {
+ ERR("Error when reading header pipe");
+ return TRUE;
+ }
data = calloc(1, sizeof(char)*order.data_length);
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_TRUE);
ret = input_thread_pipe_read(input->main_to_input_thread_pipe_fd[0], data, order.data_length);
if (ret < 0)
{
+ ERR("Error when reading body pipe");
free(data);
return TRUE;
}
}
}
-
static int
_device_open_no_pending(const char *device, int flags)
{