summaryrefslogtreecommitdiff
path: root/src/lib/dlt_user.c
diff options
context:
space:
mode:
authorMartin Willers <M.Willers@gmx.net>2020-04-21 17:15:30 +0200
committerSaya Sugiura <39760799+ssugiura@users.noreply.github.com>2020-05-18 08:21:27 +0900
commit1e414546eaf2049136af33029b9e6df8356fce95 (patch)
tree9c4f51975dcc8e1167f6ff2d675876970eb6b7fa /src/lib/dlt_user.c
parent179150f7d52abbb1d923da0c35d4a715ade382b0 (diff)
downloadDLT-daemon-1e414546eaf2049136af33029b9e6df8356fce95.tar.gz
Add helper function for writing strings with known sizes
This use case is common in C++ code nowadays, due to the usage of e.g. std::string_view, which does not provide a function for retrieving a null-terminated C-string, but which provides quick access to the string length via std::string_view::size(). Such use cases can now avoid an entirely unnecessary strlen() call. Signed-off-by: Martin Willers <M.Willers@gmx.net>
Diffstat (limited to 'src/lib/dlt_user.c')
-rw-r--r--src/lib/dlt_user.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 511f991..9c9734f 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -175,6 +175,9 @@ static void dlt_fork_child_fork_handler();
static DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text,
const enum StringType type);
+static DltReturnValue dlt_user_log_write_sized_string_utils(DltContextData *log, const char *text,
+ uint16_t text_len, const enum StringType type);
+
DltReturnValue dlt_user_check_library_version(const char *user_major_version, const char *user_minor_version)
{
@@ -2341,7 +2344,7 @@ DltReturnValue dlt_user_log_write_utf8_string(DltContextData *log, const char *t
return dlt_user_log_write_string_utils(log, text, UTF8_STRING);
}
-DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text, const enum StringType type)
+DltReturnValue dlt_user_log_write_sized_string_utils(DltContextData *log, const char *text, uint16_t length, const enum StringType type)
{
uint16_t arg_size = 0;
uint32_t type_info = 0;
@@ -2359,7 +2362,7 @@ DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *
return DLT_RETURN_ERROR;
}
- arg_size = strlen(text) + 1;
+ arg_size = length + 1;
new_log_size = log->size + arg_size + sizeof(uint16_t);
@@ -2445,7 +2448,9 @@ DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *
case DLT_RETURN_OK:
{
/* Whole string will be copied */
- memcpy((log->buffer) + log->size, text, arg_size);
+ memcpy((log->buffer) + log->size, text, length);
+ /* The input string might not be null-terminated, so we're doing that by ourselves */
+ log->buffer[log->size + length] = '\0';
log->size += arg_size;
break;
}
@@ -2472,6 +2477,15 @@ DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *
return ret;
}
+DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text, const enum StringType type)
+{
+ if ((log == NULL) || (text == NULL))
+ return DLT_RETURN_WRONG_PARAMETER;
+
+ uint16_t length = strlen(text);
+ return dlt_user_log_write_sized_string_utils(log, text, length, type);
+}
+
DltReturnValue dlt_register_injection_callback_with_id(DltContext *handle, uint32_t service_id,
dlt_injection_callback_id dlt_injection_cbk, void *priv)
{