X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcmemory.c;h=93fd8751e8334a593817bb3079004da40d829e07;hp=2e3f2bee429499bfc487ef2509ed26bd860ccc90;hb=382d15d447b7a95390decfa783836ae4fe255b3d;hpb=48d89bc2868ec49c2ab9aa74efe9ac703eee8f29 diff --git a/lib/silcutil/silcmemory.c b/lib/silcutil/silcmemory.c index 2e3f2bee..93fd8751 100644 --- a/lib/silcutil/silcmemory.c +++ b/lib/silcutil/silcmemory.c @@ -1,16 +1,15 @@ /* - silcmemory.c + silcmemory.c - Author: Pekka Riikonen + Author: Pekka Riikonen - Copyright (C) 1999 - 2000 Pekka Riikonen + Copyright (C) 1999 - 2002 Pekka Riikonen 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. - + the Free Software Foundation; version 2 of the License. + 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 @@ -21,49 +20,35 @@ #include "silcincludes.h" +#ifndef SILC_STACKTRACE + +#define SILC_MAX_ALLOC (1024 * 1024L * 1024L) + void *silc_malloc(size_t size) { void *addr; -#ifdef HAVE_MLOCK - addr = malloc(size); - assert(addr != NULL); - mlock(addr, size); - return addr; -#else + assert(size >= 0 && size <= SILC_MAX_ALLOC); addr = malloc(size); assert(addr != NULL); return addr; -#endif } void *silc_calloc(size_t items, size_t size) { void *addr; -#ifdef HAVE_MLOCK + assert(size * items >= 0 && size * items <= SILC_MAX_ALLOC); addr = calloc(items, size); assert(addr != NULL); - mlock(addr, size); return addr; -#else - addr = calloc(items, size); - assert(addr != NULL); - return addr; -#endif } void *silc_realloc(void *ptr, size_t size) { void *addr; -#ifdef HAVE_MLOCK - addr = realloc(ptr, size); - assert(addr != NULL); - mlock(addr, size); - return addr; -#else + assert(size >= 0 && size <= SILC_MAX_ALLOC); addr = realloc(ptr, size); assert(addr != NULL); return addr; -#endif } void silc_free(void *ptr) @@ -71,9 +56,14 @@ void silc_free(void *ptr) free(ptr); } +void *silc_memdup(const void *ptr, size_t size) +{ + unsigned char *addr; + addr = silc_malloc(size + 1); + assert(addr != NULL); + memcpy((void *)addr, ptr, size); + addr[size] = '\0'; + return (void *)addr; +} - - - - - +#endif /* !SILC_STACKTRACE */