uorb/topics: update delicated match of listener topics
bug: if user input obr_topic is sensor_gps_sate(wrong topic, which does not exist), the using of `strncmp` will assign idx=8 (as sesnor_gps) in the first. However, there is no match in the `g_sensor_list`, hence idx=8 will give out value of `sensor_gps` as output(wrong). Change: This update aims to match the whole value of sensor name in `g_sensor_list`, while keeping `sensor_name+number` match in this condition. Signed-off-by: haopengxiang <haopengxiang@xiaomi.com>
This commit is contained in:
parent
6b5038ef7a
commit
bdedf648c5
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -127,14 +128,12 @@ FAR const struct orb_metadata *orb_get_meta(FAR const char *name)
|
|||||||
|
|
||||||
for (i = 0; g_sensor_list[i]; i++)
|
for (i = 0; g_sensor_list[i]; i++)
|
||||||
{
|
{
|
||||||
if (!strncmp(g_sensor_list[i]->o_name, name,
|
size_t len = strlen(g_sensor_list[i]->o_name);
|
||||||
strlen(g_sensor_list[i]->o_name)))
|
if ((!strncmp(g_sensor_list[i]->o_name, name, len))
|
||||||
|
&& (name[len] == '\0' || isdigit(name[len])))
|
||||||
{
|
{
|
||||||
if (idx == -1 || strlen(g_sensor_list[idx]->o_name) <
|
idx = i;
|
||||||
strlen(g_sensor_list[i]->o_name))
|
break;
|
||||||
{
|
|
||||||
idx = i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user