X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fbuffer%2Fbuffer.c;h=3bf03c7eff07f1056b583661c40f3eec4704ef46;hb=71fc9b37aedb0ee7e664fba53696a11d0b879dd7;hp=94535956f7948f4ff7a93e147fa7d0a0aa4ffb11;hpb=e778802f53c8d47e96a6e4cbc776eb6e1d4c461a;p=oweals%2Fopenssl.git diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c index 94535956f7..3bf03c7eff 100644 --- a/crypto/buffer/buffer.c +++ b/crypto/buffer/buffer.c @@ -58,13 +58,13 @@ #include #include "cryptlib.h" -#include "buffer.h" +#include -BUF_MEM *BUF_MEM_new() +BUF_MEM *BUF_MEM_new(void) { BUF_MEM *ret; - ret=(BUF_MEM *)Malloc(sizeof(BUF_MEM)); + ret=OPENSSL_malloc(sizeof(BUF_MEM)); if (ret == NULL) { BUFerr(BUF_F_BUF_MEM_NEW,ERR_R_MALLOC_FAILURE); @@ -76,8 +76,7 @@ BUF_MEM *BUF_MEM_new() return(ret); } -void BUF_MEM_free(a) -BUF_MEM *a; +void BUF_MEM_free(BUF_MEM *a) { if(a == NULL) return; @@ -85,14 +84,12 @@ BUF_MEM *a; if (a->data != NULL) { memset(a->data,0,(unsigned int)a->max); - Free(a->data); + OPENSSL_free(a->data); } - Free(a); + OPENSSL_free(a); } -int BUF_MEM_grow(str, len) -BUF_MEM *str; -int len; +int BUF_MEM_grow(BUF_MEM *str, int len) { char *ret; unsigned int n; @@ -104,15 +101,15 @@ int len; } if (str->max >= len) { - memset(&(str->data[str->length]),0,len-str->length); + memset(&str->data[str->length],0,len-str->length); str->length=len; return(len); } n=(len+3)/3*4; if (str->data == NULL) - ret=(char *)Malloc(n); + ret=OPENSSL_malloc(n); else - ret=(char *)Realloc(str->data,n); + ret=OPENSSL_realloc(str->data,n); if (ret == NULL) { BUFerr(BUF_F_BUF_MEM_GROW,ERR_R_MALLOC_FAILURE); @@ -121,28 +118,104 @@ int len; else { str->data=ret; + str->max=n; + memset(&str->data[str->length],0,len-str->length); str->length=len; + } + return(len); + } + +int BUF_MEM_grow_clean(BUF_MEM *str, int len) + { + char *ret; + unsigned int n; + + if (str->length >= len) + { + memset(&str->data[len],0,str->length-len); + str->length=len; + return(len); + } + if (str->max >= len) + { + memset(&str->data[str->length],0,len-str->length); + str->length=len; + return(len); + } + n=(len+3)/3*4; + if (str->data == NULL) + ret=OPENSSL_malloc(n); + else + ret=OPENSSL_realloc_clean(str->data,str->max,n); + if (ret == NULL) + { + BUFerr(BUF_F_BUF_MEM_GROW_CLEAN,ERR_R_MALLOC_FAILURE); + len=0; + } + else + { + str->data=ret; str->max=n; + memset(&str->data[str->length],0,len-str->length); + str->length=len; } return(len); } -char *BUF_strdup(str) -const char *str; +char *BUF_strdup(const char *str) + { + if (str == NULL) return(NULL); + return BUF_strndup(str, strlen(str)); + } + +char *BUF_strndup(const char *str, size_t siz) { char *ret; - int n; if (str == NULL) return(NULL); - n=strlen(str); - ret=Malloc(n+1); + ret=OPENSSL_malloc(siz+1); if (ret == NULL) { - BUFerr(BUF_F_BUF_STRDUP,ERR_R_MALLOC_FAILURE); + BUFerr(BUF_F_BUF_STRNDUP,ERR_R_MALLOC_FAILURE); return(NULL); } - memcpy(ret,str,n+1); + BUF_strlcpy(ret,str,siz+1); return(ret); } +void *BUF_memdup(const void *data, size_t siz) + { + void *ret; + + if (data == NULL) return(NULL); + + ret=OPENSSL_malloc(siz); + if (ret == NULL) + { + BUFerr(BUF_F_BUF_MEMDUP,ERR_R_MALLOC_FAILURE); + return(NULL); + } + return memcpy(ret, data, siz); + } + +size_t BUF_strlcpy(char *dst, const char *src, size_t size) + { + size_t l = 0; + for(; size > 1 && *src; size--) + { + *dst++ = *src++; + l++; + } + if (size) + *dst = '\0'; + return l + strlen(src); + } + +size_t BUF_strlcat(char *dst, const char *src, size_t size) + { + size_t l = 0; + for(; size > 0 && *dst; size--, dst++) + l++; + return l + BUF_strlcpy(dst, src, size); + }