summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/buffer')
-rw-r--r--src/lib/libcrypto/buffer/buf_err.c12
-rw-r--r--src/lib/libcrypto/buffer/buffer.c31
-rw-r--r--src/lib/libcrypto/buffer/buffer.h17
3 files changed, 46 insertions, 14 deletions
diff --git a/src/lib/libcrypto/buffer/buf_err.c b/src/lib/libcrypto/buffer/buf_err.c
index 1fc32a6861..3e25bbe879 100644
--- a/src/lib/libcrypto/buffer/buf_err.c
+++ b/src/lib/libcrypto/buffer/buf_err.c
@@ -70,9 +70,12 @@
70 70
71static ERR_STRING_DATA BUF_str_functs[]= 71static ERR_STRING_DATA BUF_str_functs[]=
72 { 72 {
73{ERR_FUNC(BUF_F_BUF_MEMDUP), "BUF_memdup"},
73{ERR_FUNC(BUF_F_BUF_MEM_GROW), "BUF_MEM_grow"}, 74{ERR_FUNC(BUF_F_BUF_MEM_GROW), "BUF_MEM_grow"},
75{ERR_FUNC(BUF_F_BUF_MEM_GROW_CLEAN), "BUF_MEM_grow_clean"},
74{ERR_FUNC(BUF_F_BUF_MEM_NEW), "BUF_MEM_new"}, 76{ERR_FUNC(BUF_F_BUF_MEM_NEW), "BUF_MEM_new"},
75{ERR_FUNC(BUF_F_BUF_STRDUP), "BUF_strdup"}, 77{ERR_FUNC(BUF_F_BUF_STRDUP), "BUF_strdup"},
78{ERR_FUNC(BUF_F_BUF_STRNDUP), "BUF_strndup"},
76{0,NULL} 79{0,NULL}
77 }; 80 };
78 81
@@ -85,15 +88,12 @@ static ERR_STRING_DATA BUF_str_reasons[]=
85 88
86void ERR_load_BUF_strings(void) 89void ERR_load_BUF_strings(void)
87 { 90 {
88 static int init=1; 91#ifndef OPENSSL_NO_ERR
89 92
90 if (init) 93 if (ERR_func_error_string(BUF_str_functs[0].error) == NULL)
91 { 94 {
92 init=0;
93#ifndef OPENSSL_NO_ERR
94 ERR_load_strings(0,BUF_str_functs); 95 ERR_load_strings(0,BUF_str_functs);
95 ERR_load_strings(0,BUF_str_reasons); 96 ERR_load_strings(0,BUF_str_reasons);
96#endif
97
98 } 97 }
98#endif
99 } 99 }
diff --git a/src/lib/libcrypto/buffer/buffer.c b/src/lib/libcrypto/buffer/buffer.c
index d96487e7db..3bf03c7eff 100644
--- a/src/lib/libcrypto/buffer/buffer.c
+++ b/src/lib/libcrypto/buffer/buffer.c
@@ -149,7 +149,7 @@ int BUF_MEM_grow_clean(BUF_MEM *str, int len)
149 ret=OPENSSL_realloc_clean(str->data,str->max,n); 149 ret=OPENSSL_realloc_clean(str->data,str->max,n);
150 if (ret == NULL) 150 if (ret == NULL)
151 { 151 {
152 BUFerr(BUF_F_BUF_MEM_GROW,ERR_R_MALLOC_FAILURE); 152 BUFerr(BUF_F_BUF_MEM_GROW_CLEAN,ERR_R_MALLOC_FAILURE);
153 len=0; 153 len=0;
154 } 154 }
155 else 155 else
@@ -164,22 +164,41 @@ int BUF_MEM_grow_clean(BUF_MEM *str, int len)
164 164
165char *BUF_strdup(const char *str) 165char *BUF_strdup(const char *str)
166 { 166 {
167 if (str == NULL) return(NULL);
168 return BUF_strndup(str, strlen(str));
169 }
170
171char *BUF_strndup(const char *str, size_t siz)
172 {
167 char *ret; 173 char *ret;
168 int n;
169 174
170 if (str == NULL) return(NULL); 175 if (str == NULL) return(NULL);
171 176
172 n=strlen(str); 177 ret=OPENSSL_malloc(siz+1);
173 ret=OPENSSL_malloc(n+1);
174 if (ret == NULL) 178 if (ret == NULL)
175 { 179 {
176 BUFerr(BUF_F_BUF_STRDUP,ERR_R_MALLOC_FAILURE); 180 BUFerr(BUF_F_BUF_STRNDUP,ERR_R_MALLOC_FAILURE);
177 return(NULL); 181 return(NULL);
178 } 182 }
179 memcpy(ret,str,n+1); 183 BUF_strlcpy(ret,str,siz+1);
180 return(ret); 184 return(ret);
181 } 185 }
182 186
187void *BUF_memdup(const void *data, size_t siz)
188 {
189 void *ret;
190
191 if (data == NULL) return(NULL);
192
193 ret=OPENSSL_malloc(siz);
194 if (ret == NULL)
195 {
196 BUFerr(BUF_F_BUF_MEMDUP,ERR_R_MALLOC_FAILURE);
197 return(NULL);
198 }
199 return memcpy(ret, data, siz);
200 }
201
183size_t BUF_strlcpy(char *dst, const char *src, size_t size) 202size_t BUF_strlcpy(char *dst, const char *src, size_t size)
184 { 203 {
185 size_t l = 0; 204 size_t l = 0;
diff --git a/src/lib/libcrypto/buffer/buffer.h b/src/lib/libcrypto/buffer/buffer.h
index 465dc34f3f..1db9607450 100644
--- a/src/lib/libcrypto/buffer/buffer.h
+++ b/src/lib/libcrypto/buffer/buffer.h
@@ -59,25 +59,35 @@
59#ifndef HEADER_BUFFER_H 59#ifndef HEADER_BUFFER_H
60#define HEADER_BUFFER_H 60#define HEADER_BUFFER_H
61 61
62#include <openssl/ossl_typ.h>
63
62#ifdef __cplusplus 64#ifdef __cplusplus
63extern "C" { 65extern "C" {
64#endif 66#endif
65 67
66#include <stddef.h> 68#include <stddef.h>
69
70#if !defined(NO_SYS_TYPES_H)
67#include <sys/types.h> 71#include <sys/types.h>
72#endif
73
74/* Already declared in ossl_typ.h */
75/* typedef struct buf_mem_st BUF_MEM; */
68 76
69typedef struct buf_mem_st 77struct buf_mem_st
70 { 78 {
71 int length; /* current number of bytes */ 79 int length; /* current number of bytes */
72 char *data; 80 char *data;
73 int max; /* size of buffer */ 81 int max; /* size of buffer */
74 } BUF_MEM; 82 };
75 83
76BUF_MEM *BUF_MEM_new(void); 84BUF_MEM *BUF_MEM_new(void);
77void BUF_MEM_free(BUF_MEM *a); 85void BUF_MEM_free(BUF_MEM *a);
78int BUF_MEM_grow(BUF_MEM *str, int len); 86int BUF_MEM_grow(BUF_MEM *str, int len);
79int BUF_MEM_grow_clean(BUF_MEM *str, int len); 87int BUF_MEM_grow_clean(BUF_MEM *str, int len);
80char * BUF_strdup(const char *str); 88char * BUF_strdup(const char *str);
89char * BUF_strndup(const char *str, size_t siz);
90void * BUF_memdup(const void *data, size_t siz);
81 91
82/* safe string functions */ 92/* safe string functions */
83size_t BUF_strlcpy(char *dst,const char *src,size_t siz); 93size_t BUF_strlcpy(char *dst,const char *src,size_t siz);
@@ -93,9 +103,12 @@ void ERR_load_BUF_strings(void);
93/* Error codes for the BUF functions. */ 103/* Error codes for the BUF functions. */
94 104
95/* Function codes. */ 105/* Function codes. */
106#define BUF_F_BUF_MEMDUP 103
96#define BUF_F_BUF_MEM_GROW 100 107#define BUF_F_BUF_MEM_GROW 100
108#define BUF_F_BUF_MEM_GROW_CLEAN 105
97#define BUF_F_BUF_MEM_NEW 101 109#define BUF_F_BUF_MEM_NEW 101
98#define BUF_F_BUF_STRDUP 102 110#define BUF_F_BUF_STRDUP 102
111#define BUF_F_BUF_STRNDUP 104
99 112
100/* Reason codes. */ 113/* Reason codes. */
101 114