Skip to content

Commit e2752be

Browse files
milyincguimaraes
andauthored
Fix and align return values for keyexpr handlers (eclipse-zenoh#143)
* return zero as true * rustfmt * Update keyexpr functions * Update docs --------- Co-authored-by: Carlos Guimarães <[email protected]>
1 parent 245eb8f commit e2752be

File tree

4 files changed

+54
-31
lines changed

4 files changed

+54
-31
lines changed

include/zenoh_commons.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,18 +1115,19 @@ struct z_owned_keyexpr_t z_keyexpr_concat(struct z_keyexpr_t left,
11151115
*/
11161116
void z_keyexpr_drop(struct z_owned_keyexpr_t *keyexpr);
11171117
/**
1118-
* Returns ``1`` if `left` and `right` define equal sets, ``0`` otherwise.
1118+
* Returns ``0`` if both ``left`` and ``right`` are equal. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
11191119
*/
1120-
int8_t z_keyexpr_equals(struct z_keyexpr_t left, struct z_keyexpr_t right);
1120+
int8_t z_keyexpr_equals(struct z_keyexpr_t left,
1121+
struct z_keyexpr_t right);
11211122
/**
1122-
* Returns ``1`` if the set defined by `left` contains every key belonging to the set defined by `right`, ``0`` if they don't.
1123-
* Returns negative values in case of error (if one of the key expressions is in an invalid state).
1123+
* Returns ``0`` if ``left`` includes ``right``, i.e. the set defined by ``left`` contains every key belonging to the set
1124+
* defined by ``right``. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
11241125
*/
11251126
int8_t z_keyexpr_includes(struct z_keyexpr_t left,
11261127
struct z_keyexpr_t right);
11271128
/**
1128-
* Returns ``1`` if `left` and `right` define sets that have at least one key in common, ``0`` if they don't.
1129-
* Returns negative values in case of error (if one of the key expressions is in an invalid state).
1129+
* Returns ``0`` if the keyexprs intersect, i.e. there exists at least one key which is contained in both of the
1130+
* sets defined by ``left`` and ``right``. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
11301131
*/
11311132
int8_t z_keyexpr_intersects(struct z_keyexpr_t left,
11321133
struct z_keyexpr_t right);

src/keyexpr.rs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -459,29 +459,50 @@ pub extern "C" fn z_undeclare_keyexpr(session: z_session_t, kexpr: &mut z_owned_
459459

460460
#[allow(clippy::missing_safety_doc)]
461461
#[no_mangle]
462-
/// Returns ``1`` if `left` and `right` define equal sets, ``0`` otherwise.
462+
/// Returns ``0`` if both ``left`` and ``right`` are equal. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
463463
pub extern "C" fn z_keyexpr_equals(left: z_keyexpr_t, right: z_keyexpr_t) -> i8 {
464-
(*left == *right) as i8
464+
match (&*left, &*right) {
465+
(Some(l), Some(r)) => {
466+
if *l == *r {
467+
0
468+
} else {
469+
-1
470+
}
471+
}
472+
_ => i8::MIN,
473+
}
465474
}
466475

467476
#[allow(clippy::missing_safety_doc)]
468477
#[no_mangle]
469-
/// Returns ``1`` if `left` and `right` define sets that have at least one key in common, ``0`` if they don't.
470-
/// Returns negative values in case of error (if one of the key expressions is in an invalid state).
478+
/// Returns ``0`` if the keyexprs intersect, i.e. there exists at least one key which is contained in both of the
479+
/// sets defined by ``left`` and ``right``. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
471480
pub extern "C" fn z_keyexpr_intersects(left: z_keyexpr_t, right: z_keyexpr_t) -> i8 {
472481
match (&*left, &*right) {
473-
(Some(l), Some(r)) => l.intersects(r) as i8,
482+
(Some(l), Some(r)) => {
483+
if l.intersects(r) {
484+
0
485+
} else {
486+
-1
487+
}
488+
}
474489
_ => i8::MIN,
475490
}
476491
}
477492

478493
#[allow(clippy::missing_safety_doc)]
479494
#[no_mangle]
480-
/// Returns ``1`` if the set defined by `left` contains every key belonging to the set defined by `right`, ``0`` if they don't.
481-
/// Returns negative values in case of error (if one of the key expressions is in an invalid state).
495+
/// Returns ``0`` if ``left`` includes ``right``, i.e. the set defined by ``left`` contains every key belonging to the set
496+
/// defined by ``right``. Otherwise, it returns a ``-1``, or other ``negative value`` for errors.
482497
pub extern "C" fn z_keyexpr_includes(left: z_keyexpr_t, right: z_keyexpr_t) -> i8 {
483498
match (&*left, &*right) {
484-
(Some(l), Some(r)) => l.includes(r) as i8,
499+
(Some(l), Some(r)) => {
500+
if l.includes(r) {
501+
0
502+
} else {
503+
-1
504+
}
505+
}
485506
_ => i8::MIN,
486507
}
487508
}

tests/z_api_alignment_test.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,24 @@ int main(int argc, char **argv) {
115115
_Bool _ret_bool = z_keyexpr_is_initialized(&key);
116116
assert(_ret_bool == true);
117117

118-
_ret_bool = z_keyexpr_includes(z_keyexpr("demo/example/**"), z_keyexpr("demo/example/a"));
119-
assert(_ret_bool == true);
118+
int8_t _ret_int;
119+
_ret_int = z_keyexpr_includes(z_keyexpr("demo/example/**"), z_keyexpr("demo/example/a"));
120+
assert(_ret_int == 0);
120121
#ifdef ZENOH_PICO
121122
_ret_bool = zp_keyexpr_includes_null_terminated("demo/example/**", "demo/example/a");
122-
assert(_ret_bool == true);
123+
assert(_ret_int == 0);
123124
#endif
124-
_ret_bool = z_keyexpr_intersects(z_keyexpr("demo/example/**"), z_keyexpr("demo/example/a"));
125-
assert(_ret_bool == true);
125+
_ret_int = z_keyexpr_intersects(z_keyexpr("demo/example/**"), z_keyexpr("demo/example/a"));
126+
assert(_ret_int == 0);
126127
#ifdef ZENOH_PICO
127128
_ret_bool = zp_keyexpr_intersect_null_terminated("demo/example/**", "demo/example/a");
128-
assert(_ret_bool == true);
129+
assert(_ret_int == 0);
129130
#endif
130-
_ret_bool = z_keyexpr_equals(z_keyexpr("demo/example/**"), z_keyexpr("demo/example"));
131-
assert(_ret_bool == false);
131+
_ret_int = z_keyexpr_equals(z_keyexpr("demo/example/**"), z_keyexpr("demo/example"));
132+
assert(_ret_int == -1);
132133
#ifdef ZENOH_PICO
133134
_ret_bool = zp_keyexpr_equals_null_terminated("demo/example/**", "demo/example");
134-
assert(_ret_bool == false);
135+
assert(_ret_int == -1);
135136
#endif
136137

137138
sleep(SLEEP);

tests/z_api_keyexpr_test.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,21 @@ void includes() {
4747
z_keyexpr_t nul = z_keyexpr(NULL);
4848
z_keyexpr_t foobar = z_keyexpr("foo/bar");
4949
z_keyexpr_t foostar = z_keyexpr("foo/*");
50-
assert(z_keyexpr_includes(foostar, foobar) == 1);
51-
assert(z_keyexpr_includes(foobar, foostar) == 0);
52-
assert(z_keyexpr_includes(nul, foobar) < 0);
53-
assert(z_keyexpr_includes(foobar, nul) < 0);
50+
assert(z_keyexpr_includes(foostar, foobar) == 0);
51+
assert(z_keyexpr_includes(foobar, foostar) == -1);
52+
assert(z_keyexpr_includes(nul, foobar) < -1);
53+
assert(z_keyexpr_includes(foobar, nul) < -1);
5454
}
5555

5656
void intersects() {
5757
z_keyexpr_t nul = z_keyexpr(NULL);
5858
z_keyexpr_t foobar = z_keyexpr("foo/bar");
5959
z_keyexpr_t foostar = z_keyexpr("foo/*");
6060
z_keyexpr_t barstar = z_keyexpr("bar/*");
61-
assert(z_keyexpr_intersects(foostar, foobar) == 1);
62-
assert(z_keyexpr_intersects(barstar, foobar) == 0);
63-
assert(z_keyexpr_intersects(nul, foobar) < 0);
64-
assert(z_keyexpr_intersects(foobar, nul) < 0);
61+
assert(z_keyexpr_intersects(foostar, foobar) == 0);
62+
assert(z_keyexpr_intersects(barstar, foobar) == -1);
63+
assert(z_keyexpr_intersects(nul, foobar) < -1);
64+
assert(z_keyexpr_intersects(foobar, nul) < -1);
6565
}
6666

6767
void undeclare() {

0 commit comments

Comments
 (0)