summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rühsen <tim.ruehsen@gmx.de>2019-05-20 12:46:54 +0200
committerTim Rühsen <tim.ruehsen@gmx.de>2019-05-28 15:19:13 +0200
commit4d9bb0223a23f1198d224ed4ba34a9f6e64dca94 (patch)
tree8de4d2d1addcb63d7dc1f704a5c0ffad2bf20358
parent6b8c972acff5f15fd39ff7d96b65048c5a69e834 (diff)
downloadgnutls-4d9bb0223a23f1198d224ed4ba34a9f6e64dca94.tar.gz
_gnutls_set_[str]datum: Cleanup, add function attributes
_gnutls_set_datum(): Do not change output 'dat' on error _gnutls_set_strdatum: Likewise, cleanup code Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
-rw-r--r--lib/datum.c22
-rw-r--r--lib/datum.h18
2 files changed, 19 insertions, 21 deletions
diff --git a/lib/datum.c b/lib/datum.c
index ff71068b99..bd0f216438 100644
--- a/lib/datum.c
+++ b/lib/datum.c
@@ -30,6 +30,7 @@
#include <datum.h>
#include "errors.h"
+/* On error, @dat is not changed. */
int
_gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size)
{
@@ -39,10 +40,11 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size)
return 0;
}
- dat->data = gnutls_malloc(data_size);
- if (dat->data == NULL)
+ unsigned char *m = gnutls_malloc(data_size);
+ if (!m)
return GNUTLS_E_MEMORY_ERROR;
+ dat->data = m;
dat->size = data_size;
memcpy(dat->data, data, data_size);
@@ -51,22 +53,22 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size)
/* ensures that the data set are null-terminated
* The function always returns an allocated string in @dat on success.
+ * On error, @dat is not changed.
*/
int
_gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, size_t data_size)
{
- if (data_size == 0 || data == NULL) {
- dat->data = gnutls_calloc(1, 1);
- dat->size = 0;
- return 0;
- }
+ if (data == NULL)
+ return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER);
- dat->data = gnutls_malloc(data_size+1);
- if (dat->data == NULL)
+ unsigned char *m = gnutls_malloc(data_size + 1);
+ if (!m)
return GNUTLS_E_MEMORY_ERROR;
+ dat->data = m;
dat->size = data_size;
- memcpy(dat->data, data, data_size);
+ if (data_size)
+ memcpy(dat->data, data, data_size);
dat->data[data_size] = 0;
return 0;
diff --git a/lib/datum.h b/lib/datum.h
index cdab4b272d..fe847359b0 100644
--- a/lib/datum.h
+++ b/lib/datum.h
@@ -28,11 +28,13 @@
/* This will copy the provided data in @dat. If the provided data are
* NULL or zero-size @dat will be NULL as well.
*/
+warn_unused_result nonnull((1))
int _gnutls_set_datum(gnutls_datum_t * dat, const void *data,
size_t data_size);
/* This will always return a non-NULL, and zero-terminated string in @dat.
*/
+warn_unused_result nonnull((1))
int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data,
size_t data_size);
@@ -40,17 +42,13 @@ int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data,
inline static
void _gnutls_free_datum(gnutls_datum_t * dat)
{
- if (dat == NULL)
- return;
-
- if (dat->data != NULL)
+ if (dat != NULL) {
gnutls_free(dat->data);
-
- dat->data = NULL;
- dat->size = 0;
+ dat->size = 0;
+ }
}
-inline static
+inline static nonnull_all
void _gnutls_free_temp_key_datum(gnutls_datum_t * dat)
{
if (dat->data != NULL) {
@@ -58,11 +56,10 @@ void _gnutls_free_temp_key_datum(gnutls_datum_t * dat)
gnutls_free(dat->data);
}
- dat->data = NULL;
dat->size = 0;
}
-inline static
+inline static nonnull_all
void _gnutls_free_key_datum(gnutls_datum_t * dat)
{
if (dat->data != NULL) {
@@ -70,7 +67,6 @@ void _gnutls_free_key_datum(gnutls_datum_t * dat)
gnutls_free(dat->data);
}
- dat->data = NULL;
dat->size = 0;
}