-/*
- * Copyright (C) 1995-2007, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) Index Data
* See the file LICENSE for details.
- *
- * $Id: unix.c,v 1.20 2007-10-09 06:00:56 adam Exp $
- * UNIX socket COMSTACK. By Morten Bøgeskov.
*/
/**
* \file unix.c
* \brief Implements UNIX domain socket COMSTACK
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#ifndef WIN32
#endif
#include <yaz/unix.h>
-#include <yaz/nmem.h>
+#include <yaz/errno.h>
#ifndef YAZ_SOCKLEN_T
#define YAZ_SOCKLEN_T int
#endif
#endif
-static int unix_close(COMSTACK h);
+static void 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_set_blocking(COMSTACK p, int blocking);
static COMSTACK unix_accept(COMSTACK h);
-static char *unix_addrstr(COMSTACK h);
+static const char *unix_addrstr(COMSTACK h);
static void *unix_straddr(COMSTACK h, const char *str);
#ifndef SUN_LEN
p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
p->event = CS_NONE;
p->cerrno = 0;
- p->stackerr = 0;
p->user = 0;
state->altbuf = 0;
state->altsize = state->altlen = 0;
state->towrite = state->written = -1;
- if (protocol == PROTO_WAIS)
- state->complete = completeWAIS;
- else
- state->complete = cs_complete_auto;
+ state->complete = cs_complete_auto;
- p->timeout = COMSTACK_DEFAULT_TIMEOUT;
TRC(fprintf(stderr, "Created new UNIX comstack\n"));
return p;
unix_state *sp = (unix_state *)h->cprivate;
char * s = f;
const char * file = NULL;
- char * eol;
sp->uid = sp->gid = sp->umask = -1;
- if ((eol = strchr(s, ',')))
+ if (strchr(s, '='))
{
+ char *eol;
do
{
if ((eol = strchr(s, ',')))
{
char * end;
char * arg = s + 6;
-
+
sp->umask = strtol(arg, &end, 8);
if (errno == EINVAL ||
*end)
h->cerrno = CSYSERR;
return -1;
}
- chown(path, sp->uid, sp->gid);
- chmod(path, sp->umask != -1 ? sp->umask : 0666);
+ if (chown(path, sp->uid, sp->gid))
+ {
+ h->cerrno = CSYSERR;
+ return -1;
+ }
+ if (chmod(path, sp->umask != -1 ? sp->umask : 0666))
+ {
+ h->cerrno = CSYSERR;
+ return -1;
+ }
if (mode == CS_SERVER && listen(h->iofile, 100) < 0)
{
h->cerrno = CSYSERR;
}
return 0;
}
- if (!(cnew->flags&CS_FLAGS_BLOCKING) &&
+ if (!(cnew->flags&CS_FLAGS_BLOCKING) &&
(fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
)
{
TRC(fprintf(stderr, "unix_get: bufsize=%d\n", *bufsize));
if (sp->altlen) /* switch buffers */
{
- TRC(fprintf(stderr, " %d bytes in altbuf (0x%x)\n", sp->altlen,
- (unsigned) sp->altbuf));
+ TRC(fprintf(stderr, " %d bytes in altbuf (%p )\n", sp->altlen,
+ sp->altbuf));
tmpc = *buf;
tmpi = *bufsize;
*buf = sp->altbuf;
} else if (sp->altsize < req)
if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
return -1;
- TRC(fprintf(stderr, " Moving %d bytes to altbuf(0x%x)\n", tomove,
- (unsigned) sp->altbuf));
+ TRC(fprintf(stderr, " Moving %d bytes to altbuf(%p)\n", tomove,
+ sp->altbuf));
memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
}
if (berlen < CS_UNIX_BUFCHUNK - 1)
return 0;
}
-static int unix_close(COMSTACK h)
+static void unix_close(COMSTACK h)
{
unix_state *sp = (struct unix_state *)h->cprivate;
xfree(sp->altbuf);
xfree(sp);
xfree(h);
- return 0;
}
-static char *unix_addrstr(COMSTACK h)
+static const char *unix_addrstr(COMSTACK h)
{
unix_state *sp = (struct unix_state *)h->cprivate;
char *buf = sp->buf;
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab