projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added SILC errno API. Added SilcResult, generic error code and
[silc.git]
/
lib
/
silcutil
/
silcmemory.c
diff --git
a/lib/silcutil/silcmemory.c
b/lib/silcutil/silcmemory.c
index 067cf1a38da069755112078a6d059a84287e876f..ec8eb1e39be41c7d7f214e0ba7ff21969d50334d 100644
(file)
--- a/
lib/silcutil/silcmemory.c
+++ b/
lib/silcutil/silcmemory.c
@@
-27,26
+27,40
@@
void *silc_malloc(size_t size)
{
void *addr;
void *silc_malloc(size_t size)
{
void *addr;
+
if (silc_unlikely(size <= 0 || size >= SILC_MAX_ALLOC)) {
if (silc_unlikely(size <= 0 || size >= SILC_MAX_ALLOC)) {
- SILC_LOG_ERROR(("Invalid memory allocation, allocation by %x", size));
+ if (size == 0)
+ silc_set_errno_nofail(SILC_ERR_ZERO_ALLOCATION);
+ else
+ silc_set_errno_reason_nofail(SILC_ERR_TOO_LARGE_ALLOCATION,
+ "Allocation by %d", size);
return NULL;
}
return NULL;
}
+
addr = malloc(size);
if (silc_unlikely(!addr))
addr = malloc(size);
if (silc_unlikely(!addr))
- SILC_LOG_ERROR(("System out of memory"));
+ silc_set_errno_nofail(SILC_ERR_OUT_OF_MEMORY);
+
return addr;
}
void *silc_calloc(size_t items, size_t size)
{
void *addr;
return addr;
}
void *silc_calloc(size_t items, size_t size)
{
void *addr;
+
if (silc_unlikely(size * items <= 0 || size * items >= SILC_MAX_ALLOC)) {
if (silc_unlikely(size * items <= 0 || size * items >= SILC_MAX_ALLOC)) {
- SILC_LOG_ERROR(("Invalid memory allocation, allocation by %x", size));
+ if (size == 0)
+ silc_set_errno_nofail(SILC_ERR_ZERO_ALLOCATION);
+ else
+ silc_set_errno_reason_nofail(SILC_ERR_TOO_LARGE_ALLOCATION,
+ "Allocation by %d", size);
return NULL;
}
return NULL;
}
+
addr = calloc(items, size);
if (silc_unlikely(!addr))
addr = calloc(items, size);
if (silc_unlikely(!addr))
- SILC_LOG_ERROR(("System out of memory"));
+ silc_set_errno_nofail(SILC_ERR_OUT_OF_MEMORY);
+
return addr;
}
return addr;
}
@@
-54,12
+68,18
@@
void *silc_realloc(void *ptr, size_t size)
{
void *addr;
if (silc_unlikely(size <= 0 || size >= SILC_MAX_ALLOC)) {
{
void *addr;
if (silc_unlikely(size <= 0 || size >= SILC_MAX_ALLOC)) {
- SILC_LOG_ERROR(("Invalid memory allocation, allocation by %x", size));
+ if (size == 0)
+ silc_set_errno_nofail(SILC_ERR_ZERO_ALLOCATION);
+ else
+ silc_set_errno_reason_nofail(SILC_ERR_TOO_LARGE_ALLOCATION,
+ "Allocation by %d", size);
return NULL;
}
return NULL;
}
+
addr = realloc(ptr, size);
if (silc_unlikely(!addr))
addr = realloc(ptr, size);
if (silc_unlikely(!addr))
- SILC_LOG_ERROR(("System out of memory"));
+ silc_set_errno_nofail(SILC_ERR_OUT_OF_MEMORY);
+
return addr;
}
return addr;
}
@@
-71,9
+91,10
@@
void silc_free(void *ptr)
void *silc_memdup(const void *ptr, size_t size)
{
unsigned char *addr;
void *silc_memdup(const void *ptr, size_t size)
{
unsigned char *addr;
+
addr = silc_malloc(size + 1);
if (silc_unlikely(!addr)) {
addr = silc_malloc(size + 1);
if (silc_unlikely(!addr)) {
-
SILC_LOG_ERROR(("System out of memory")
);
+
silc_set_errno_nofail(SILC_ERR_OUT_OF_MEMORY
);
return NULL;
}
memcpy((void *)addr, ptr, size);
return NULL;
}
memcpy((void *)addr, ptr, size);
@@
-81,6
+102,11
@@
void *silc_memdup(const void *ptr, size_t size)
return (void *)addr;
}
return (void *)addr;
}
+char *silc_strdup(const char *str)
+{
+ return silc_memdup(str, strlen(str));
+}
+
#endif /* !SILC_STACKTRACE */
/* SilcStack aware routines */
#endif /* !SILC_STACKTRACE */
/* SilcStack aware routines */