Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missed z_string_* methods #495

Merged
merged 3 commits into from
Jul 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,10 @@ Primitives
.. autocfunction:: primitives.h::z_sample_loan
.. autocfunction:: primitives.h::z_string_data
.. autocfunction:: primitives.h::z_string_len
.. autocfunction:: primitives.h::z_string_from_str
.. autocfunction:: primitives.h::z_string_from_substr
.. autocfunction:: primitives.h::z_string_empty
.. autocfunction:: primitives.h::z_string_is_empty
.. autocfunction:: primitives.h::z_scout
.. autocfunction:: primitives.h::z_open
.. autocfunction:: primitives.h::z_close
Expand Down
43 changes: 43 additions & 0 deletions include/zenoh-pico/api/primitives.h
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,49 @@ const char *z_string_data(const z_loaned_string_t *str);
*/
size_t z_string_len(const z_loaned_string_t *str);

/**
* Builds a :c:type:`z_string_t` by wrapping a ``const char *`` string.
*
* Parameters:
* str: Pointer to an uninitialized :c:type:`z_string_t`.
* value: Pointer to a null terminated string.
*
* Return:
* ``0`` if creation successful, ``negative value`` otherwise.
*/
int8_t z_string_from_str(z_owned_string_t *str, const char *value);

/**
* Builds an empty :c:type:`z_string_t`.
*
* Parameters:
* str: Pointer to an uninitialized :c:type:`z_string_t`.
*/
void z_string_empty(z_owned_string_t *str);

/**
* Builds a :c:type:`z_string_t` by wrapping a substring specified by ``const char *`` and length `len`.
*
* Parameters:
* value: Pointer to a string.
* len: String size.
* str: Pointer to an uninitialized :c:type:`z_string_t`.
*
* Return:
* ``0`` if creation successful, ``negative value`` otherwise.
*/
int8_t z_string_from_substr(z_owned_string_t *str, const char *value, size_t len);

/**
* Checks if string is empty
*
* Parameters:
* str: Pointer to a :c:type:`z_loaned_string_t` to check.
* Return:
* ``true`` if conainer is empty, ``false`` otherwise.
*/
bool z_string_is_empty(const z_loaned_string_t *str);

/************* Primitives **************/
/**
* Scouts for other Zenoh entities like routers and/or peers.
Expand Down
2 changes: 2 additions & 0 deletions include/zenoh-pico/collections/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
typedef char *_z_str_t;

char *_z_str_clone(const char *src);
char *_z_str_n_clone(const char *src, size_t len);
void _z_str_clear(char *src);
void _z_str_free(char **src);
_Bool _z_str_eq(const char *left, const char *right);
Expand Down Expand Up @@ -72,6 +73,7 @@ typedef struct {
_z_string_t _z_string_null(void);
_Bool _z_string_check(const _z_string_t *value);
_z_string_t _z_string_make(const char *value);
_z_string_t _z_string_n_make(const char *value, size_t len);
_z_string_t _z_string_wrap(char *value);
_z_string_t *_z_string_make_as_ptr(const char *value);

Expand Down
14 changes: 14 additions & 0 deletions src/api/api.c
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,20 @@ const z_loaned_encoding_t *z_reply_err_encoding(const z_loaned_reply_err_t *repl
const char *z_string_data(const z_loaned_string_t *str) { return str->val; }
size_t z_string_len(const z_loaned_string_t *str) { return str->len; }

int8_t z_string_from_str(z_owned_string_t *str, const char *value) {
str->_val = _z_string_make(value);
return _Z_RES_OK;
}

void z_string_empty(z_owned_string_t *str) { str->_val = _z_string_null(); }

int8_t z_string_from_substr(z_owned_string_t *str, const char *value, size_t len) {
str->_val = _z_string_n_make(value, len);
sashacmc marked this conversation as resolved.
Show resolved Hide resolved
return _Z_RES_OK;
}

bool z_string_is_empty(const z_loaned_string_t *str) { return str->val == NULL; }

#if Z_FEATURE_PUBLICATION == 1
int8_t _z_undeclare_and_clear_publisher(_z_publisher_t *pub) {
int8_t ret = _Z_RES_OK;
Expand Down
24 changes: 22 additions & 2 deletions src/collections/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ _z_string_t _z_string_make(const char *value) {
return s;
}

_z_string_t _z_string_n_make(const char *value, size_t len) {
_z_string_t s;
s.val = _z_str_n_clone(value, len);
if (s.val == NULL) {
s.len = 0;
} else {
s.len = len;
}
return s;
}

_z_string_t _z_string_wrap(char *value) {
_z_string_t s;
s.val = value;
Expand Down Expand Up @@ -171,12 +182,12 @@ void _z_str_free(char **src) {

void _z_str_copy(char *dst, const char *src) {
size_t size = _z_str_size(src);
strncpy(dst, src, size);
strncpy(dst, src, size - 1);
dst[size - 1] = '\0'; // No matter what, strings are always null-terminated upon copy
}

void _z_str_n_copy(char *dst, const char *src, size_t size) {
strncpy(dst, src, size);
strncpy(dst, src, size - 1);
dst[size - 1] = '\0'; // No matter what, strings are always null-terminated upon copy
}

Expand All @@ -190,4 +201,13 @@ char *_z_str_clone(const char *src) {
return dst;
}

char *_z_str_n_clone(const char *src, size_t len) {
char *dst = (char *)z_malloc(len + 1);
if (dst != NULL) {
_z_str_n_copy(dst, src, len + 1);
}

return dst;
}

_Bool _z_str_eq(const char *left, const char *right) { return strcmp(left, right) == 0; }
Loading