-/*
- * Copyright (C) 1995-2005, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
* See the file LICENSE for details.
- *
- * $Id: unix.c,v 1.16 2005-10-22 13:32:04 adam Exp $
- * UNIX socket COMSTACK. By Morten Bøgeskov.
*/
/**
* \file unix.c
int written; /* -1 if we aren't writing */
int towrite; /* to verify against user input */
- int (*complete)(const unsigned char *buf, int len); /* length/comple. */
+ int (*complete)(const char *buf, int len); /* length/complete. */
struct sockaddr_un addr; /* returned by cs_straddr */
int uid;
int gid;
* 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;
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;
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';
{
unix_state *sp = (unix_state *)h->cprivate;
- return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
- sp->altlen);
+ return sp->altlen && (*sp->complete)(sp->altbuf, sp->altlen);
}
/*
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"));
}
return 0;
}
- if (!(cnew->blocking&1) &&
+ if (!(cnew->flags&CS_FLAGS_BLOCKING) &&
(fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
)
{
sp->altsize = tmpi;
}
h->io_pending = 0;
- while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
+ while (!(berlen = (*sp->complete)(*buf, hasread)))
{
if (!*bufsize)
{
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 */