From 43648b5f488062fc7007e1161312dd36ba48f22f Mon Sep 17 00:00:00 2001 From: Laurent Ghigonis Date: Tue, 26 Mar 2013 02:00:36 +0100 Subject: propagate: move to broken/ --- broken/propagate/src/util.c | 233 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 broken/propagate/src/util.c (limited to 'broken/propagate/src/util.c') diff --git a/broken/propagate/src/util.c b/broken/propagate/src/util.c new file mode 100644 index 0000000..646492a --- /dev/null +++ b/broken/propagate/src/util.c @@ -0,0 +1,233 @@ +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "pg.h" +#include "atomicio.h" + +int +send_cmd(char dest, int type, uint8_t arg, uint8_t *data, int data_len) { + struct conn *c; + struct route *r; + int fd = -1, len; + + r = route_find(dest); + if (r) + fd = r->proc.fd[1]; + else { + c = listener_conn_find_orig(dest); + if (c) + fd = c->fd; + else { + log_warn("send_cmd %d: no route to go to dest %c", type, dest); + return -1; + } + } + len = msg_send(fd, type, dest, arg, data_len, data); + + return len; +} + +int +intab(int *tab, int val, int len) { + int n; + + for (n=0; n sizeof(buf)) { + log_warn("readbuf: len too big %d", len); + return -1; + } + if ((outlen = atomicio(read, fd, buf, len)) < 0) { + log_warn("readbuf: atomicio read error"); + return -1; + } + if (outlen != len) + log_warn("readbuf: invalid atomicio read size %d, should be %d", + outlen, len); + + *out = buf; + return outlen; +} + +int +writebuf(uint8_t *buf, int fd, int len) { + int writelen; + + if ((writelen = atomicio(vwrite, fd, buf, len)) < 0) { + log_warn("writebuf: atomicio write error"); + return -1; + } + if (writelen < len) + log_warn("writebuf: incomplete write, %d on %d", + writelen, len); + + return writelen; +} + +int +readwrite(int ifd, int ofd, int len) { + char buf[BUFMAX]; + int red, wrote; + + red = atomicio(read, ifd, buf, len); + if (red < 0) { + log_warn("readwrite: atomicio read error"); + return -1; + } + if (red != len) + log_warn("readbuf: invalid atomicio read size %d, should be %d", + red, len); + + if ((wrote = atomicio(vwrite, ofd, buf, red)) < red) { + log_warn("readwrite: atomicio write error"); + return -1; + } + + return wrote; +} -- cgit v1.2.3-59-g8ed1b