From ccc64e79a870d37ddff7afa92a41fd9a8dbecd42 Mon Sep 17 00:00:00 2001 From: james <> Date: Thu, 14 Feb 2008 00:57:58 +0000 Subject: *** empty log message *** --- src/libsympathy.c | 4 +- src/prototypes.h | 8 +++- src/slide.c | 9 +++- src/symsocket.c | 126 ++++++++++++++++++++++++++++++------------------------ src/terminal.c | 5 ++- 5 files changed, 90 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/libsympathy.c b/src/libsympathy.c index d05ad13..70cdcfd 100644 --- a/src/libsympathy.c +++ b/src/libsympathy.c @@ -11,6 +11,9 @@ static char rcsid[] = /* * $Log$ + * Revision 1.18 2008/02/14 00:57:58 james + * *** empty log message *** + * * Revision 1.17 2008/02/13 16:57:29 james * *** empty log message *** * @@ -66,4 +69,3 @@ static char rcsid[] = */ #include "project.h" - diff --git a/src/prototypes.h b/src/prototypes.h index ee95d30..dc88c14 100644 --- a/src/prototypes.h +++ b/src/prototypes.h @@ -103,6 +103,10 @@ extern void default_termios(struct termios *termios); extern Log *file_log_new(char *fn); /* ipc.c */ extern IPC_Msg *ipc_check_for_message_in_slide(Slide *s); +extern void ipc_consume_message_in_slide(Slide *s); +extern int ipc_msg_send(Socket *s, IPC_Msg *m); +extern int ipc_msg_send_debug(Socket *s, char *msg); +extern int ipc_msg_send_history(Socket *s, History_ent *l); /* slide.c */ extern void slide_free(Slide *s); extern void slide_consume(Slide *s, int n); @@ -114,7 +118,7 @@ extern void socket_free(Socket *s); extern Socket *socket_listen(char *path); extern Socket *socket_accept(Socket *l); extern Socket *socket_connect(char *path); -extern Socket *socket_post_select(Socket *s, fd_set *rfds, fd_set *wfds); extern void socket_consume_msg(Socket *s); extern void socket_pre_select(Socket *s, fd_set *rfds, fd_set *wfds); -extern IPC_Msg *ipc_check_for_message_in_slide(Slide *s); +extern int socket_post_select(Socket *s, fd_set *rfds, fd_set *wfds); +extern int socket_write(Socket *s, void *buf, int len); diff --git a/src/slide.c b/src/slide.c index e20d0be..d032421 100644 --- a/src/slide.c +++ b/src/slide.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.2 2008/02/14 00:57:58 james + * *** empty log message *** + * * Revision 1.1 2008/02/13 16:57:29 james * *** empty log message *** * @@ -37,9 +40,13 @@ void slide_consume (Slide * s, int n) { s->nbytes -= n; + + if (s->nbytes<0) + abort(); + memmove (s->slide, s->slide + n, s->nbytes); - if ((s->size > s->target_size) && (s->nbytes <= s->size)) + if ((s->size > s->target_size) && (s->nbytes <= s->target_size)) { s->size = s->target_size; s->slide = realloc (s->slide, s->size); diff --git a/src/symsocket.c b/src/symsocket.c index fde1b2d..25657db 100644 --- a/src/symsocket.c +++ b/src/symsocket.c @@ -6,10 +6,14 @@ * */ -static char rcsid[] = "$Id$"; +static char rcsid[] = + "$Id$"; /* * $Log$ + * Revision 1.2 2008/02/14 00:57:58 james + * *** empty log message *** + * * Revision 1.1 2008/02/13 18:05:06 james * *** empty log message *** * @@ -23,12 +27,16 @@ static char rcsid[] = "$Id$"; #define MAX_TXN 4096 -void socket_free(Socket *s) +void +socket_free (Socket * s) { -if (!s) return; -if (s->read_buf) slide_free(s->read_buf); -if (s->write_buf) slide_free(s->write_buf); -close(s->fd); + if (!s) + return; + if (s->read_buf) + slide_free (s->read_buf); + if (s->write_buf) + slide_free (s->write_buf); + close (s->fd); } @@ -122,7 +130,6 @@ socket_connect (char *path) struct sockaddr_un *sun; Socket *ret; - unlink (path); fd = socket (PF_UNIX, SOCK_STREAM, 0); @@ -157,30 +164,57 @@ socket_connect (char *path) return ret; } +void +socket_consume_msg (Socket * s) +{ + int n; -Socket * -socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) + if (!s->msg) + return; + + ipc_consume_message_in_slide(s->read_buf); + s->msg = ipc_check_for_message_in_slide (s->read_buf); + +} + +void +socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds) { char buf[1024]; int n; + /*Server socket */ if (SOCKET_IS_LISTENER (s)) { - if (!FD_ISSET (s->fd, rfds)) - return NULL; - - return socket_accept (s); + FD_SET (s->fd, rfds); + return; } + if (!SLIDE_EMPTY (s->write_buf)) + FD_SET (s->fd, wfds); + + if (!SLIDE_FULL (s->read_buf)) + FD_SET (s->fd, rfds); + +} + +int +socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) +{ + char buf[1024]; + int n; + int error=0; + if ((!SLIDE_EMPTY (s->write_buf)) && FD_ISSET (s->fd, wfds)) { n = (SLIDE_BYTES (s->write_buf) > MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf); - n = write (s->fd, SLIDE_RPTR (s->write_buf), n); + n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n); if (n > 0) slide_consume (s->write_buf, n); + if (n<0) error=-1; } if (!SLIDE_FULL (s->read_buf) && FD_ISSET (s->fd, rfds)) @@ -188,62 +222,40 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) n = (SLIDE_SPACE (s->read_buf) > MAX_TXN) ? MAX_TXN : SLIDE_SPACE (s->read_buf); - n = read (s->fd, SLIDE_RPTR (s->read_buf), n); - + n = wrap_read (s->fd, SLIDE_WPTR (s->read_buf), n); if (n > 0) slide_added (s->read_buf, n); + if (n<0) error=-1; } - if (SLIDE_BYTES (s->read_buf) >= sizeof (IPC_Msg)) - { - s->msg = ipc_check_for_message_in_slide(s->read_buf); - } else { - s->msg=NULL; - } - + s->msg = ipc_check_for_message_in_slide (s->read_buf); - return NULL; + return error; } -void socket_consume_msg(Socket *s) -{ -int n; - -if (!s->msg) return; - -n=s->msg->size; - -slide_consume(s->read_buf,n); - - if (SLIDE_BYTES (s->read_buf) >= sizeof (IPC_Msg)) - { - s->msg = ipc_check_for_message_in_slide(s->read_buf); - } else { - s->msg=NULL; - } - -} -void -socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds) +int +socket_write (Socket * s, void *buf, int len) { - char buf[1024]; int n; - /*Server socket */ - if (SOCKET_IS_LISTENER (s)) - { - FD_SET (s->fd, rfds); - return; - } + slide_expand (s->write_buf, len); + memcpy (SLIDE_WPTR (s->write_buf), buf, len); + slide_added (s->write_buf, len); - if (!SLIDE_EMPTY (s->write_buf)) - FD_SET (s->fd, wfds); + n = + (SLIDE_BYTES (s->write_buf) > + MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf); + n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n); + { + uint8_t *c=SLIDE_RPTR(s->write_buf); + } - if (!SLIDE_FULL (s->read_buf)) - FD_SET (s->fd, rfds); + if (n > 0) + slide_consume (s->write_buf, n); + + if (n<0) return -1; + return len; } - - diff --git a/src/terminal.c b/src/terminal.c index 03ac5d4..0a75f71 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.6 2008/02/14 00:57:58 james + * *** empty log message *** + * * Revision 1.5 2008/02/13 18:05:06 james * *** empty log message *** * @@ -153,7 +156,7 @@ terminal_dispatch (void) terminal_winches = 0; for (t = terminal_list; t; t = t->next) - terminal_getsize ((TTY *)t); + terminal_getsize ((TTY *) t); } -- cgit v1.2.3