X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Funix.c;h=6aebb25b46b2216cd0fdb8c8950e4d442f6e1a5a;hb=afae1117609712743c1109597d080a53a8dac5d4;hp=7f1ba93ebc3048d87321ae68fef0964e43dcfaf4;hpb=16d6dc8f953ccdaadd47ce6a60df22efff73bff4;p=yaz-moved-to-github.git diff --git a/src/unix.c b/src/unix.c index 7f1ba93..6aebb25 100644 --- a/src/unix.c +++ b/src/unix.c @@ -1,8 +1,8 @@ /* - * Copyright (C) 1995-2005, Index Data ApS + * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: unix.c,v 1.16 2005-10-22 13:32:04 adam Exp $ + * $Id: unix.c,v 1.19 2007-06-05 05:42:07 adam Exp $ * UNIX socket COMSTACK. By Morten Bøgeskov. */ /** @@ -107,7 +107,7 @@ static int unix_init (void) * This function is always called through the cs_create() macro. * s >= 0: socket has already been established for us. */ -COMSTACK unix_type(int s, int blocking, int protocol, void *vp) +COMSTACK unix_type(int s, int flags, int protocol, void *vp) { COMSTACK p; unix_state *state; @@ -129,7 +129,8 @@ COMSTACK unix_type(int s, int blocking, int protocol, void *vp) xmalloc(sizeof(unix_state))))) return 0; - if (!((p->blocking = blocking)&1)) + p->flags = flags; + if (!(p->flags&CS_FLAGS_BLOCKING)) { if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) return 0; @@ -184,7 +185,8 @@ static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) return 0; TRC(fprintf(stderr, "unix_strtoaddress: %s\n", str ? str : "NULL")); add->sun_family = AF_UNIX; - strncpy(add->sun_path, str, sizeof(add->sun_path)); + strncpy(add->sun_path, str, sizeof(add->sun_path)-1); + add->sun_path[sizeof(add->sun_path)-1] = 0; cp = strchr (add->sun_path, ':'); if (cp) *cp = '\0'; @@ -404,7 +406,8 @@ static int unix_bind(COMSTACK h, void *address, int mode) return -1; } socket_unix.sun_family = AF_UNIX; - strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path)); + strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path)-1); + socket_unix.sun_path[sizeof(socket_unix.sun_path)-1] = 0; if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) { if(yaz_errno() == ECONNREFUSED) { TRC (fprintf (stderr, "Socket exists but nobody is listening\n")); @@ -504,7 +507,7 @@ static COMSTACK unix_accept(COMSTACK h) } return 0; } - if (!(cnew->blocking&1) && + if (!(cnew->flags&CS_FLAGS_BLOCKING) && (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0) ) { @@ -718,20 +721,20 @@ static char *unix_addrstr(COMSTACK h) return buf; } -static int unix_set_blocking(COMSTACK p, int blocking) +static int unix_set_blocking(COMSTACK p, int flags) { unsigned long flag; - if (p->blocking == blocking) + if (p->flags == flags) return 1; flag = fcntl(p->iofile, F_GETFL, 0); - if(!blocking) + if (flags & CS_FLAGS_BLOCKING) flag = flag & ~O_NONBLOCK; else flag = flag | O_NONBLOCK; if (fcntl(p->iofile, F_SETFL, flag) < 0) return 0; - p->blocking = blocking; + p->flags = flags; return 1; } #endif /* WIN32 */