Mercurial > ~darius > hgwebdir.cgi > paradise_server
diff src/cutil.c @ 2:2719a89505ba
First entry of Paradise Server 2.9 patch 10 Beta
author | darius |
---|---|
date | Sat, 06 Dec 1997 04:37:01 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cutil.c Sat Dec 06 04:37:01 1997 +0000 @@ -0,0 +1,136 @@ +/*-------------------------------------------------------------------------- +NETREK II -- Paradise + +Permission to use, copy, modify, and distribute this software and its +documentation, or any derivative works thereof, for any NON-COMMERCIAL +purpose and without fee is hereby granted, provided that this copyright +notice appear in all copies. No representations are made about the +suitability of this software for any purpose. This software is provided +"as is" without express or implied warranty. + + Xtrek Copyright 1986 Chris Guthrie + Netrek (Xtrek II) Copyright 1989 Kevin P. Smith + Scott Silvey + Paradise II (Netrek II) Copyright 1993 Larry Denys + Kurt Olsen + Brandon Gillespie +--------------------------------------------------------------------------*/ + +/* cutil.c - misc utility fuctions common to all the binaries */ + +#include "config.h" +#ifndef apollo +#include <unistd.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <signal.h> +#include <sys/types.h> +#ifdef hpux +#include <time.h> +#else +#include <sys/time.h> +#endif +#ifdef SYSV +#include <utime.h> +#endif +#include <math.h> +#include "data.h" + +/* + * r_signal - reliable version of signal() the System-V signal() function + * provides the older, unreliable signal semantics. So, this is an + * implementation of signal using sigaction. + */ + +void (* + r_signal(sig, func)) () + int sig; + void (*func) (); +{ + struct sigaction act, oact; + + act.sa_handler = func; + + sigemptyset(&act.sa_mask); + act.sa_flags = 0; +#ifdef SA_RESTART +#ifdef BAD_SVR4_HACKS + if (sig != SIGALRM) +#endif /* BAD_SVR4_HACKS */ + act.sa_flags |= SA_RESTART; +#endif + + if (sigaction(sig, &act, &oact) < 0) + return (SIG_ERR); + + return (oact.sa_handler); +} + + +int +touch(file) + char *file; +{ + time_t now[2]; + + now[0] = now[1] = time(0); + + return utime(file, (void *) now); +} + +#ifdef NO_STRDUP +char * +strdup(str) + char *str; +{ + char *s; + + s = (char *) malloc(strlen(str) + 1); + if (!s) + return NULL; + strcpy(s, str); + return s; +} +#endif + + +/* dunno if any other systems have anyting like this */ +#ifdef hpux + +int +matherr(x) + struct exception *x; +{ + char *t; + + switch (x->type) + { + case DOMAIN: + t = "domain"; + break; + case SING: + t = "singularity"; + break; + case OVERFLOW: + t = "overflow"; + break; + case UNDERFLOW: + t = "underflow"; + break; + case TLOSS: + t = "tloss"; + break; + case PLOSS: + t = "ploss"; + break; + default: + t = "buh??"; + break; + } + fprintf(stderr, "%s: %s error: %s(%f [, %f]) = %f\n", + argv0, t, x->name, x->arg1, x->arg2, x->retval); +} + +#endif