Blame lib/util.c

Packit Service 9ccfef
/*
Packit Service 9ccfef
 * util.c --
Packit Service 9ccfef
 *
Packit Service 9ccfef
 *      Misc utility functions.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * Copyright (c) 1999 Frank Strauss, Technical University of Braunschweig.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * See the file "COPYING" for information on usage and redistribution
Packit Service 9ccfef
 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * @(#) $Id: util.c 1470 2002-11-13 13:15:03Z strauss $
Packit Service 9ccfef
 */
Packit Service 9ccfef
Packit Service 9ccfef
#include <config.h>
Packit Service 9ccfef
Packit Service 9ccfef
#include <stdio.h>
Packit Service 9ccfef
#include <stdarg.h>
Packit Service 9ccfef
#include <stdlib.h>
Packit Service 9ccfef
#include <string.h>
Packit Service 9ccfef
#include <time.h>
Packit Service 9ccfef
Packit Service 9ccfef
#include "util.h"
Packit Service 9ccfef
#include "snprintf.h"
Packit Service 9ccfef
Packit Service 9ccfef
#ifdef HAVE_DMALLOC_H
Packit Service 9ccfef
#include <dmalloc.h>
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
#ifdef HAVE_DMALLOC_H
Packit Service 9ccfef
Packit Service 9ccfef
void *_smiMalloc(char *file, int line, size_t size)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m = _calloc_leap(file, line, 1, size);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
void *_smiRealloc(char *file, int line, void *ptr, size_t size)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m = _realloc_leap(file, line, ptr, size);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
char *_smiStrdup(char *file, int line, const char *s1)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (s1) {
Packit Service 9ccfef
	char *m = _strdup_leap(file, line, s1);
Packit Service 9ccfef
	if (! m) {
Packit Service 9ccfef
	    smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	return m;
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	return NULL;
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
char *_smiStrndup(char *file, int line, const char *s1, size_t n)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m;
Packit Service 9ccfef
    
Packit Service 9ccfef
    m = _smiMalloc(file, line, n+1);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    strncpy(m, s1, n);
Packit Service 9ccfef
    m[n] = 0;
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
void _smiFree(char *file, int line, void *ptr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (ptr) {
Packit Service 9ccfef
	_free_leap(file, line, ptr);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
#else
Packit Service 9ccfef
Packit Service 9ccfef
void *smiMalloc(size_t size)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m = calloc(1, size);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
void *smiRealloc(void *ptr, size_t size)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m = realloc(ptr, size);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
char *smiStrdup(const char *s1)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (s1) {
Packit Service 9ccfef
	char *m = strdup(s1);
Packit Service 9ccfef
	if (! m) {
Packit Service 9ccfef
	    smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	return m;
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	return NULL;
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
char *smiStrndup(const char *s1, size_t n)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *m;
Packit Service 9ccfef
    
Packit Service 9ccfef
    m = smiMalloc(n+1);
Packit Service 9ccfef
    if (! m) {
Packit Service 9ccfef
	smiPrintError(NULL, ERR_OUT_OF_MEMORY);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    strncpy(m, s1, n);
Packit Service 9ccfef
    m[n] = 0;
Packit Service 9ccfef
    return m;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
void smiFree(void *ptr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (ptr) {
Packit Service 9ccfef
	free(ptr);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
int smiIsPath(const char *s)
Packit Service 9ccfef
{
Packit Service 9ccfef
    return (strchr(s, '.') || strchr(s, DIR_SEPARATOR));
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
#ifndef HAVE_TIMEGM
Packit Service 9ccfef
time_t timegm(struct tm *tm)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *tz;
Packit Service 9ccfef
    static char *s = NULL;
Packit Service 9ccfef
    char *tofree = NULL;
Packit Service 9ccfef
    time_t t;
Packit Service 9ccfef
    
Packit Service 9ccfef
    /* ensure to call mktime() for UTC */
Packit Service 9ccfef
    tz = getenv("TZ");
Packit Service 9ccfef
    if (tz) {
Packit Service 9ccfef
	tofree = s;
Packit Service 9ccfef
	smiAsprintf(&s, "TZ=%s", tz);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    putenv("TZ=NULL");
Packit Service 9ccfef
    t = mktime(tm);
Packit Service 9ccfef
    if (tz) {
Packit Service 9ccfef
	putenv(s);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	putenv("TZ=");
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (tofree) smiFree(tofree);
Packit Service 9ccfef
Packit Service 9ccfef
    return t;
Packit Service 9ccfef
}
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
int smiTypeDerivedFrom(Type *typePtr, Type *parentTypePtr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    Type *t;
Packit Service 9ccfef
Packit Service 9ccfef
    if ((!typePtr) || (!parentTypePtr)) {
Packit Service 9ccfef
	return 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (t = typePtr; t != NULL; t = t->parentPtr) {
Packit Service 9ccfef
	if (parentTypePtr == t) {
Packit Service 9ccfef
	    return 1;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return 0;
Packit Service 9ccfef
}