Author: iratqq
Date: Thu Jan 24 11:08:56 2008
New Revision: 5139
Modified:
trunk/emacs/uim-el-helper-agent.c
trunk/fep/uim-fep.c
trunk/uim/prime.c
trunk/uim/skk.c
trunk/uim/uim-helper-client.c
trunk/uim/uim-helper-server.c
trunk/uim/uim-ipc.c
Log:
* emacs/uim-el-helper-agent.c (read_command)
* fep/uim-fep.c (main_loop, recover_loop)
* uim/prime.c (prime_read_msg_from_ud)
* uim/skk.c (search_line_from_server)
* uim/uim-helper-server.c (reflect_message_fragment)
* uim/uim-helper-client.c (uim_helper_read_proc)
* uim/uim-ipc.c (open_pipe_rw):
OpenBSD manpage of read(2) says, error checks should
explicitly test for -1. Some platforms allow for
nbytes to range between SSIZE_MAX and SIZE_MAX - 2,
in which case the return value of an error-free read()
may appear as a negative number distinct from -1.
Modified: trunk/emacs/uim-el-helper-agent.c
==============================================================================
--- trunk/emacs/uim-el-helper-agent.c (original)
+++ trunk/emacs/uim-el-helper-agent.c Thu Jan 24 11:08:56 2008
@@ -206,7 +206,8 @@
debug_printf(DEBUG_NOTE, "read command\n");
do {
- len = read(STDIN_FILENO, rbuf, sizeof(rbuf) - 1);
+ if ((len = read(STDIN_FILENO, rbuf, sizeof(rbuf) - 1)) == -1 || len
== 0)
+ return; /* XXX */
rbuf[len] = '\0';
if (strlen(cmdbuf) + len + 1 > cmdbuf_len) {
Modified: trunk/fep/uim-fep.c
==============================================================================
--- trunk/fep/uim-fep.c (original)
+++ trunk/fep/uim-fep.c Thu Jan 24 11:08:56 2008
@@ -819,13 +819,17 @@
int start, end;
#ifdef __CYGWIN32__
- if ((len = read(s_setmode_fd, buf, sizeof(buf) - 1)) <= 0) {
+ if ((len = read(s_setmode_fd, buf, sizeof(buf) - 1)) == -1 ||
len == 0) {
debug2(("pipe closed\n"));
close(s_setmode_fd);
s_setmode_fd = open(s_path_setmode, O_RDONLY | O_NONBLOCK);
}
#else
- len = read(s_setmode_fd, buf, sizeof(buf) - 1);
+ if ((len = read(s_setmode_fd, buf, sizeof(buf) - 1)) == -1 ||
len == 0) {
+ /* XXX: fatal */
+ debug2(("cannot read setmode file\n"));
+ return;
+ }
#endif
for (end = len - 1; end >= 0 && !isdigit((unsigned
char)buf[end]); --end);
@@ -855,7 +859,7 @@
focus_in();
}
- if ((len = read_stdin(buf, sizeof(buf) - 1)) <= 0) {
+ if ((len = read_stdin(buf, sizeof(buf) - 1)) == -1 || len == 0) {
/* �����ˤϤ��ʤ��Ȼפ� */
return;
}
@@ -895,11 +899,18 @@
t.tv_sec = 0;
t.tv_usec = g_opt.timeout;
if (my_select(g_win_in + 1, &fds, &t) > 0) {
- len += read_stdin(buf + len, sizeof(buf) - len - 1);
- buf[len] = '\0';
- debug(("read_again \"%s\"\n", buf));
- i--;
- continue;
+ ssize_t nr;
+
+ if ((nr = read_stdin(buf + len, sizeof(buf) - len -
1)) != -1) {
+ len += nr;
+ buf[len] = '\0';
+ debug(("read_again \"%s\"\n", buf));
+ i--;
+ continue;
+ } else {
+ /* XXX: fatal */
+ return;
+ }
}
}
@@ -940,7 +951,7 @@
/* input from pty (child process) */
if (!g_opt.print_key && FD_ISSET(s_master, &fds)) {
- if ((len = read(s_master, buf, sizeof(buf) - 1)) <= 0) {
+ if ((len = read(s_master, buf, sizeof(buf) - 1)) == -1 || len ==
0) {
/* �ҥץ�������λ���� */
return;
}
@@ -993,14 +1004,14 @@
continue;
}
if (FD_ISSET(g_win_in, &fds)) {
- if ((len = read(g_win_in, buf, sizeof(buf))) <= 0) {
+ if ((len = read(g_win_in, buf, sizeof(buf))) == -1 || len == 0) {
/* �����ˤϤ��ʤ��Ȼפ� */
return;
}
write(s_master, buf, len);
}
if (FD_ISSET(s_master, &fds)) {
- if ((len = read(s_master, buf, sizeof(buf))) <= 0) {
+ if ((len = read(s_master, buf, sizeof(buf))) == -1 || len == 0) {
/* �ҥץ�������λ���� */
return;
}
Modified: trunk/uim/prime.c
==============================================================================
--- trunk/uim/prime.c (original)
+++ trunk/uim/prime.c Thu Jan 24 11:08:56 2008
@@ -183,13 +183,12 @@
read_buf = uim_strdup("");
for (;;) {
- rc = read(fd, buf, sizeof(buf) - 1);
- buf[rc] = '\0';
-
- if (rc <= 0) {
+ if ((rc = read(fd, buf, sizeof(buf) - 1)) == -1) {
perror("disconnected");
if (errno == EAGAIN || errno == EINTR)
continue;
+
+ buf[rc] = '\0';
free(read_buf);
clear_prime_fd();
Modified: trunk/uim/skk.c
==============================================================================
--- trunk/uim/skk.c (original)
+++ trunk/uim/skk.c Thu Jan 24 11:08:56 2008
@@ -727,6 +727,7 @@
int n = 0, ret, len;
char buf[SKK_SERV_BUFSIZ];
char *line, *idx;
+ ssize_t nr;
if (!(di->skkserv_state & SKK_SERV_CONNECTED)) {
if (!((di->skkserv_state |= open_skkserv(di->skkserv_hostname,
@@ -751,15 +752,14 @@
line = uim_malloc(len);
snprintf(line, len, "%s ", idx);
- if (read(skkservsock, &r, 1) <= 0) {
+ if ((nr = read(skkservsock, &r, 1)) == -1 || nr == 0) {
skkserv_disconnected(di);
return NULL;
}
if (r == '1') { /* succeeded */
while (1) {
- ret = read(skkservsock, &r, 1);
- if (ret <= 0) {
+ if ((nr = read(skkservsock, &r, 1)) == -1 || nr == 0) {
skkserv_disconnected(di);
return NULL;
}
@@ -786,7 +786,8 @@
free(line);
return sl;
} else {
- while (read(skkservsock, &r, 1) > 0 && r != '\n');
+ while ((nr = read(skkservsock, &r, 1)) != -1 && nr != 0 && r != '\n')
+ ;
return NULL;
}
}
Modified: trunk/uim/uim-helper-client.c
==============================================================================
--- trunk/uim/uim-helper-client.c (original)
+++ trunk/uim/uim-helper-client.c Thu Jan 24 11:08:56 2008
@@ -185,7 +185,7 @@
while (uim_helper_fd_readable(fd) > 0) {
rc = read(fd, uim_recv_buf, sizeof(uim_recv_buf));
- if (rc == 0 || (rc < 0 && errno != EAGAIN)) {
+ if (rc == 0 || (rc == -1 && errno != EAGAIN)) {
uim_helper_close_client_fd(fd);
return;
} else if (rc > 0) {
Modified: trunk/uim/uim-helper-server.c
==============================================================================
--- trunk/uim/uim-helper-server.c (original)
+++ trunk/uim/uim-helper-server.c Thu Jan 24 11:08:56 2008
@@ -182,16 +182,17 @@
static int
reflect_message_fragment(struct client *cl)
{
- int rc;
+ ssize_t rc;
char *msg;
/* do read */
rc = read(cl->fd, read_buf, sizeof(read_buf));
- if (rc <= 0) {
- if (rc < 0 && (errno == EAGAIN || errno == EINTR))
+ if (rc == -1) {
+ if (errno == EAGAIN || errno == EINTR)
return 0;
return -1;
- }
+ } else if (rc == 0)
+ return -1;
cl->rbuf = uim_helper_buffer_append(cl->rbuf, read_buf, rc);
Modified: trunk/uim/uim-ipc.c
==============================================================================
--- trunk/uim/uim-ipc.c (original)
+++ trunk/uim/uim-ipc.c Thu Jan 24 11:08:56 2008
@@ -69,6 +69,7 @@
int pipe_fd[2];
pid_t pid;
int res;
+ ssize_t nr;
if (pipe(pipe_fd) < 0)
return (pid_t)-1;
@@ -120,7 +121,9 @@
*fw = fdopen(fdw[1], "w");
}
- read(pipe_fd[0], &pid, sizeof(pid_t));
+ if ((nr = read(pipe_fd[0], &pid, sizeof(pid_t))) == -1 || nr == 0)
+ goto err0;
+
close(pipe_fd[0]);
close(pipe_fd[1]);