264 lines · 5.1 KB · C
RawDownload
/* $Id: common.c 338 2006-01-11 19:05:54Z tsaviran $ * ------------------------------------------------------- * Copyright (C) 2002-2005 Tommi Saviranta <wnd@iki.fi> *	(C) 2002 Sebastian Kienzl <zap@riot.org> * ------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. */ #ifdef HAVE_CONFIG_H#include <config.h>#endif /* ifdef HAVE_CONFIG_H */ #include "common.h"#include "error.h"#include "messages.h" #include <stdlib.h>#include <string.h>   #define REPORT_ERROR(func) error(ERR_UNEXPECTED, func, file, line)   #if HAVE_MALLOC != 1/* * Need to undef. Will cause warnings, but until someone can provide me a * better way to do this, warnings shall we have. Same goes for rpl_realloc. */#undef malloc#include <stdlib.h> void *rpl_malloc(size_t size){	if (size == 0) {		size = 1;	}	return malloc(size);} /* void *rpl_malloc(size_t size) */#endif /* if HAVE_MALLOC != 1 */   #if HAVE_REALLOC != 1#undef realloc#include <stdlib.h> void *rpl_realloc(void *ptr, size_t size){	if (size == 0) {		size = 1;		if (ptr != NULL) {			free(ptr);			ptr = NULL;		}	}	if (ptr == NULL) {		return malloc(size);	} else {		return realloc(ptr, size);	}} /* void *rpl_realloc(void *ptr, size_t size) */#endif /* if HAVE_REALLOC != 1 */   int_xstrcmp(const char *s1, const char *s2  DEBUG_ADDPARMS){	if (s1 != NULL && s2 != NULL) {		return strcmp(s1, s2);	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrcmp");#endif		return 1;	}} /* int _xstrcmp(const char *s1, const char *s2 DEBUG_ADDPARMS) */   int_xstrncmp(const char *s1, const char *s2, size_t n  DEBUG_ADDPARMS){	if (s1 != NULL && s2 != NULL) {		return strncmp(s1, s2, n);	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrncmp");#endif		return 1;	}} /* int _xstrncmp(const char *s1, const char *s2, size_t n DEBUG_ADDPARMS) */   int_xstrcasecmp(const char *s1, const char *s2  DEBUG_ADDPARMS){	if (s1 != NULL && s2 != NULL) {		return strcasecmp(s1, s2);	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrcasecmp");#endif		return 1;	}} /* int _xstrcasecmp(const char *s1, const char *s2 DEBUG_ADDPARMS) */   int_xstrncasecmp(const char *s1, const char *s2, size_t n  DEBUG_ADDPARMS){	if (s1 != NULL && s2 != NULL) {		return strncasecmp(s1, s2, n);	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrncasecmp");#endif		return 1;	}} /* int _xstrncasecmp(const char *s1, const char *s2, size_t n		DEBUG_ADDPARMS) */   char *_xstrcpy(char *dest, const char *src  DEBUG_ADDPARMS){	if (dest != NULL && src != NULL) {		return strcpy(dest, src); /* dangerous, but can't help it */	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrcpy");#endif		return 0;	}} /* char *_xstrcpy(char *dest, const char *src DEBUG_ADDPARMS) */   char *_xstrncpy(char *dest, const char *src, size_t n  DEBUG_ADDPARMS){	if (dest != NULL && src != NULL) {		return strncpy(dest, src, n);	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrncpy");#endif		return 0;	}} /* char *_xstrncpy(char *dest, const char *src, size_t n DEBUG_ADDPARMS) */   char *_xstrdup(const char *s  DEBUG_ADDPARMS){	char *p;	if (s != NULL) {		p = (char*)strdup(s);		if (p == NULL) {			error(ERR_MEMORY);			exit(ERR_CODE_MEMORY);		}		return p;	} else {#ifdef DEBUG_ADDPARMS		REPORT_ERROR("xstrdup");#endif		return NULL;	}} /* char *_xstrdup(const char *s DEBUG_ADDPARMS) */   void *xmalloc(size_t size){	void *ret = malloc(size);	if (ret == NULL) {		error(ERR_MEMORY);		exit(ERR_CODE_MEMORY);	}	return ret;} /* void *xmalloc(size_t size) */   void *xcalloc(size_t nmemb, size_t size){	void *ret = calloc(nmemb, size);	if (ret == NULL) {		error(ERR_MEMORY);		exit(ERR_CODE_MEMORY);	}	return ret;} /* void *xcalloc(size_t nmemb, size_t size) */   voidxfree(void *ptr){	if (ptr != NULL) {		free(ptr);	}} /* void xfree(void *ptr) */   void *xrealloc(void *ptr, size_t size){	void *ret = realloc(ptr, size);	if (ret == NULL && size > 0) {		error(ERR_MEMORY);		exit(ERR_CODE_MEMORY);	}	return ret;} /* void *xrealloc(void *ptr, size_t size) */   /* these functions are "intentionally" unsafe! */#ifndef HAVE_SNPRINTF//int//snprintf(char *str, size_t size, const char *format, ...)//{//	int r;//	va_list va;////	va_start(va, format);//	r = sprintf(str, format, va);//	va_end(va);//	str[size - 1] = '\0';////	return r;//} /* int snprintf(char *str, size_t size, const char *format, ...) */#endif /* ifndef HAVE_SNPRINTF */   #ifndef HAVE_VSNPRINTF//int//vsnprintf(char *str, size_t size, const char *format, va_list ap)//{//	return vsprintf(str, format, ap);//} /* int vsnprintf(char *str, size_t size, const char *format, va_list ap) */#endif /* ifndef HAVE_VSNPRINTF */