X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fbuffer-view.c;fp=src%2Fcommon%2Fbuffer-view.c;h=6f674f4a9828f857ada1a5e2fc3038d00ba343ba;hp=4bdb1eb7d75d48be514689200954d69c44a7809b;hb=67d8e2ef48ea2cd334bf9efd90b58b976437a3cd;hpb=03bb2358875cfca96394e78357c96baaa1e91efa diff --git a/src/common/buffer-view.c b/src/common/buffer-view.c index 4bdb1eb7d..6f674f4a9 100644 --- a/src/common/buffer-view.c +++ b/src/common/buffer-view.c @@ -67,3 +67,45 @@ struct lttng_buffer_view lttng_buffer_view_from_dynamic_buffer( end: return view; } + +LTTNG_HIDDEN +bool lttng_buffer_view_contains_string(const struct lttng_buffer_view *buf, + const char *str, + size_t len_with_null_terminator) +{ + const char *past_buf_end; + size_t max_str_len_with_null_terminator; + size_t str_len; + bool ret; + + past_buf_end = buf->data + buf->size; + + /* Is the start of the string in the buffer view? */ + if (str < buf->data || str >= past_buf_end) { + ret = false; + goto end; + } + + /* + * Max length the string could have to fit in the buffer, including + * NULL terminator. + */ + max_str_len_with_null_terminator = past_buf_end - str; + + /* Could the string even fit in the buffer? */ + if (len_with_null_terminator > max_str_len_with_null_terminator) { + ret = false; + goto end; + } + + str_len = lttng_strnlen(str, max_str_len_with_null_terminator); + if (str_len != (len_with_null_terminator - 1)) { + ret = false; + goto end; + } + + ret = true; + +end: + return ret; +}