From 16d6dc8f953ccdaadd47ce6a60df22efff73bff4 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Sat, 22 Oct 2005 13:32:04 +0000 Subject: [PATCH] Use xstrdup rather than strdup. Define stat(2) masks S_IFMT and S_IFSOCK when gcc -ansi is in use. --- src/unix.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/unix.c b/src/unix.c index 71f9d4f..7f1ba93 100644 --- a/src/unix.c +++ b/src/unix.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: unix.c,v 1.15 2005-06-25 15:46:06 adam Exp $ + * $Id: unix.c,v 1.16 2005-10-22 13:32:04 adam Exp $ * UNIX socket COMSTACK. By Morten Bøgeskov. */ /** @@ -47,6 +47,14 @@ #define YAZ_SOCKLEN_T int #endif +/* stat(2) masks: S_IFMT and S_IFSOCK may not be defined in gcc -ansi mode */ +#if __STRICT_ANSI__ +#ifndef S_IFSOCK +#define S_IFMT 0170000 +#define S_IFSOCK 0140000 +#endif +#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); @@ -183,11 +191,10 @@ static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add) return 1; } -static void *unix_straddr(COMSTACK h, const char *str) +static void *unix_straddr1(COMSTACK h, const char *str, char *f) { unix_state *sp = (unix_state *)h->cprivate; - char * s = strdup(str); - char * f = s; + char * s = f; const char * file = NULL; char * eol; @@ -212,7 +219,6 @@ static void *unix_straddr(COMSTACK h, const char *str) if(pw == NULL) { printf("No such user\n"); - free(f); return 0; } sp->uid = pw->pw_uid; @@ -231,7 +237,6 @@ static void *unix_straddr(COMSTACK h, const char *str) if (gr == NULL) { printf("No such group\n"); - free(f); return 0; } sp->gid = gr->gr_gid; @@ -247,7 +252,6 @@ static void *unix_straddr(COMSTACK h, const char *str) *end) { printf("Invalid umask\n"); - free(f); return 0; } } @@ -259,7 +263,6 @@ static void *unix_straddr(COMSTACK h, const char *str) else { printf("invalid or double argument: %s\n", s); - free(f); return 0; } } while((s = eol)); @@ -277,14 +280,18 @@ static void *unix_straddr(COMSTACK h, const char *str) TRC(fprintf(stderr, "unix_straddr: %s\n", str ? str : "NULL")); if (!unix_strtoaddr_ex (file, &sp->addr)) - { - free(f); return 0; - } - free(f); return &sp->addr; } +static void *unix_straddr(COMSTACK h, const char *str) +{ + char *f = xstrdup(str); + void *vp = unix_straddr1(h, str, f); + xfree(f); + return vp; +} + struct sockaddr_un *unix_strtoaddr(const char *str) { static struct sockaddr_un add; @@ -386,7 +393,8 @@ static int unix_bind(COMSTACK h, void *address, int mode) if(stat(path, &stat_buf) != -1) { struct sockaddr_un socket_unix; int socket_out = -1; - if(! S_ISSOCK(stat_buf.st_mode)) { + + if((stat_buf.st_mode&S_IFMT) != S_IFSOCK) { /* used to be S_ISSOCK */ h->cerrno = CSYSERR; yaz_set_errno(EEXIST); /* Not a socket (File exists) */ return -1; -- 1.7.10.4