X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=comstack%2Funix.c;h=22087ead5a08b4859402c264c6b5471b7740ba46;hp=fa26bb8b1ca8bdc8072973474ae282d810729b0e;hb=3d47aeca3756dc7d1c2ea91f74fef2b0886f76e8;hpb=c3b984a6d1cf19b1731b7e783ae2c0fd539277ac diff --git a/comstack/unix.c b/comstack/unix.c index fa26bb8..22087ea 100644 --- a/comstack/unix.c +++ b/comstack/unix.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2002, Index Data + * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. * - * $Id: unix.c,v 1.3 2002-07-03 13:36:55 adam Exp $ + * $Id: unix.c,v 1.12 2003-05-14 13:49:02 adam Exp $ * UNIX socket COMSTACK. By Morten Bøgeskov. */ #ifndef WIN32 @@ -22,27 +22,33 @@ #include #include #include +#include -/* Chas added the following, so we get the definition of completeBER */ -#include - -int unix_close(COMSTACK h); -int unix_put(COMSTACK h, char *buf, int size); -int unix_get(COMSTACK h, char **buf, int *bufsize); -int unix_connect(COMSTACK h, void *address); -int unix_more(COMSTACK h); -int unix_rcvconnect(COMSTACK h); -int unix_bind(COMSTACK h, void *address, int mode); -int unix_listen(COMSTACK h, char *raddr, int *addrlen, +#ifndef YAZ_SOCKLEN_T +#define YAZ_SOCKLEN_T int +#endif + +static int unix_close(COMSTACK h); +static int unix_put(COMSTACK h, char *buf, int size); +static int unix_get(COMSTACK h, char **buf, int *bufsize); +static int unix_connect(COMSTACK h, void *address); +static int unix_more(COMSTACK h); +static int unix_rcvconnect(COMSTACK h); +static int unix_bind(COMSTACK h, void *address, int mode); +static int unix_listen(COMSTACK h, char *raddr, int *addrlen, int (*check_ip)(void *cd, const char *a, int len, int type), void *cd); -int static unix_set_blocking(COMSTACK p, int blocking); +static int unix_set_blocking(COMSTACK p, int blocking); -COMSTACK unix_accept(COMSTACK h); -char *unix_addrstr(COMSTACK h); -void *unix_straddr(COMSTACK h, const char *str); +static COMSTACK unix_accept(COMSTACK h); +static char *unix_addrstr(COMSTACK h); +static void *unix_straddr(COMSTACK h, const char *str); +#ifndef SUN_LEN +#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \ + + strlen ((ptr)->sun_path)) +#endif #if 0 #define TRC(x) x #else @@ -132,7 +138,7 @@ COMSTACK unix_type(int s, int blocking, int protocol, void *vp) if (protocol == PROTO_WAIS) state->complete = completeWAIS; else - state->complete = completeBER; + state->complete = cs_complete_auto; p->timeout = COMSTACK_DEFAULT_TIMEOUT; TRC(fprintf(stderr, "Created new UNIX comstack\n")); @@ -141,7 +147,7 @@ COMSTACK unix_type(int s, int blocking, int protocol, void *vp) } -int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) +static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) { char *cp; if (!unix_init ()) @@ -155,7 +161,7 @@ int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) return 1; } -void *unix_straddr(COMSTACK h, const char *str) +static void *unix_straddr(COMSTACK h, const char *str) { unix_state *sp = (unix_state *)h->cprivate; @@ -177,7 +183,7 @@ struct sockaddr_un *unix_strtoaddr(const char *str) return &add; } -int unix_more(COMSTACK h) +static int unix_more(COMSTACK h) { unix_state *sp = (unix_state *)h->cprivate; @@ -190,7 +196,7 @@ int unix_more(COMSTACK h) * weird things like spawning subprocesses or threading or some weird junk * like that. */ -int unix_connect(COMSTACK h, void *address) +static int unix_connect(COMSTACK h, void *address) { struct sockaddr_un *add = (struct sockaddr_un *)address; int r; @@ -205,7 +211,7 @@ int unix_connect(COMSTACK h, void *address) r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add)); if (r < 0) { - if (errno == EINPROGRESS) + if (yaz_errno() == EINPROGRESS) { h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; @@ -224,7 +230,7 @@ int unix_connect(COMSTACK h, void *address) /* * nop */ -int unix_rcvconnect(COMSTACK h) +static int unix_rcvconnect(COMSTACK h) { TRC(fprintf(stderr, "unix_rcvconnect\n")); @@ -243,7 +249,7 @@ int unix_rcvconnect(COMSTACK h) #define CERTF "ztest.pem" #define KEYF "ztest.pem" -int unix_bind(COMSTACK h, void *address, int mode) +static int unix_bind(COMSTACK h, void *address, int mode) { struct sockaddr *addr = (struct sockaddr *)address; const char * path = ((struct sockaddr_un *)addr)->sun_path; @@ -256,7 +262,7 @@ int unix_bind(COMSTACK h, void *address, int mode) int socket_out = -1; if(! S_ISSOCK(stat_buf.st_mode)) { h->cerrno = CSYSERR; - errno = EEXIST; /* Not a socket (File exists) */ + yaz_set_errno(EEXIST); /* Not a socket (File exists) */ return -1; } if((socket_out = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { @@ -266,7 +272,7 @@ int unix_bind(COMSTACK h, void *address, int mode) socket_unix.sun_family = AF_UNIX; strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path)); if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) { - if(errno == ECONNREFUSED) { + if(yaz_errno() == ECONNREFUSED) { TRC (fprintf (stderr, "Socket exists but nobody is listening\n")); } else { h->cerrno = CSYSERR; @@ -275,7 +281,7 @@ int unix_bind(COMSTACK h, void *address, int mode) } else { close(socket_out); h->cerrno = CSYSERR; - errno = EADDRINUSE; + yaz_set_errno(EADDRINUSE); return -1; } unlink(path); @@ -286,6 +292,7 @@ int unix_bind(COMSTACK h, void *address, int mode) h->cerrno = CSYSERR; return -1; } + chmod(path, 0777); if (mode == CS_SERVER && listen(h->iofile, 3) < 0) { h->cerrno = CSYSERR; @@ -296,16 +303,12 @@ int unix_bind(COMSTACK h, void *address, int mode) return 0; } -int unix_listen(COMSTACK h, char *raddr, int *addrlen, - int (*check_ip)(void *cd, const char *a, int len, int t), - void *cd) +static int unix_listen(COMSTACK h, char *raddr, int *addrlen, + int (*check_ip)(void *cd, const char *a, int len, int t), + void *cd) { struct sockaddr_un addr; -#ifdef __cplusplus - socklen_t len = SUN_LEN(&addr); -#else - int len = SUN_LEN(&addr); -#endif + YAZ_SOCKLEN_T len = SUN_LEN(&addr); TRC(fprintf(stderr, "unix_listen pid=%d\n", getpid())); if (h->state != CS_ST_IDLE) @@ -317,10 +320,10 @@ int unix_listen(COMSTACK h, char *raddr, int *addrlen, if (h->newfd < 0) { if ( - errno == EWOULDBLOCK + yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN #endif #endif ) @@ -337,7 +340,7 @@ int unix_listen(COMSTACK h, char *raddr, int *addrlen, return 0; } -COMSTACK unix_accept(COMSTACK h) +static COMSTACK unix_accept(COMSTACK h) { COMSTACK cnew; unix_state *state, *st = (unix_state *)h->cprivate; @@ -411,7 +414,7 @@ COMSTACK unix_accept(COMSTACK h) * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer, * 0=connection closed. */ -int unix_get(COMSTACK h, char **buf, int *bufsize) +static int unix_get(COMSTACK h, char **buf, int *bufsize) { unix_state *sp = (unix_state *)h->cprivate; char *tmpc; @@ -447,19 +450,19 @@ int unix_get(COMSTACK h, char **buf, int *bufsize) TRC(fprintf(stderr, " recv res=%d, hasread=%d\n", res, hasread)); if (res < 0) { - if (errno == EWOULDBLOCK + if (yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN #endif #endif - || errno == EINPROGRESS + || yaz_errno() == EINPROGRESS ) { h->io_pending = CS_WANT_READ; break; } - else if (errno == 0) + else if (yaz_errno() == 0) continue; else return -1; @@ -500,7 +503,7 @@ int unix_get(COMSTACK h, char **buf, int *bufsize) * In nonblocking mode, you must call again with same buffer while * return value is 1. */ -int unix_put(COMSTACK h, char *buf, int size) +static int unix_put(COMSTACK h, char *buf, int size) { int res; struct unix_state *state = (struct unix_state *)h->cprivate; @@ -531,10 +534,10 @@ int unix_put(COMSTACK h, char *buf, int size) )) < 0) { if ( - errno == EWOULDBLOCK + yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN #endif #endif ) @@ -555,9 +558,7 @@ int unix_put(COMSTACK h, char *buf, int size) return 0; } - - -int unix_close(COMSTACK h) +static int unix_close(COMSTACK h) { unix_state *sp = (struct unix_state *)h->cprivate; @@ -573,7 +574,7 @@ int unix_close(COMSTACK h) return 0; } -char *unix_addrstr(COMSTACK h) +static char *unix_addrstr(COMSTACK h) { unix_state *sp = (struct unix_state *)h->cprivate; char *buf = sp->buf; @@ -581,7 +582,7 @@ char *unix_addrstr(COMSTACK h) return buf; } -int static unix_set_blocking(COMSTACK p, int blocking) +static int unix_set_blocking(COMSTACK p, int blocking) { unsigned long flag;