rcl
master
C API providing common ROS client library functionality.
|
#include "rcl/arguments.h"
#include <string.h>
#include "./arguments_impl.h"
#include "./remap_impl.h"
#include "rcl/error_handling.h"
#include "rcl/lexer_lookahead.h"
#include "rcl/validate_topic_name.h"
#include "rcutils/allocator.h"
#include "rcutils/error_handling.h"
#include "rcutils/format_string.h"
#include "rcutils/logging.h"
#include "rcutils/logging_macros.h"
#include "rcutils/strdup.h"
#include "rmw/validate_namespace.h"
#include "rmw/validate_node_name.h"
Functions | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_rule (const char *arg, rcl_allocator_t allocator, rcl_remap_t *output_rule) |
// Internal Doxygen documentation More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_param_file_rule (const char *arg, rcl_allocator_t allocator, char **param_file) |
Parse an argument that may or may not be a parameter file rule. More... | |
rcl_ret_t | rcl_arguments_get_param_files (const rcl_arguments_t *arguments, rcl_allocator_t allocator, char ***parameter_files) |
Return a list of yaml parameter file paths specified on the command line. More... | |
int | rcl_arguments_get_param_files_count (const rcl_arguments_t *args) |
Return the number of parameter yaml files given in the arguments. More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_log_level_rule (const char *arg, rcl_allocator_t allocator, int *log_level) |
Parse an argument that may or may not be a log level rule. More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_external_log_config_file (const char *arg, rcl_allocator_t allocator, char **log_config_file) |
Parse an argument that may or may not be a log file rule. More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_bool_arg (const char *arg, const char *key, bool *value) |
Parse a bool argument that may or may not be for the provided key rule. More... | |
RCL_LOCAL rcl_ret_t | _atob (const char *str, bool *val) |
Parse a null terminated string to a boolean value. More... | |
rcl_ret_t | rcl_parse_arguments (int argc, const char *const argv[], rcl_allocator_t allocator, rcl_arguments_t *args_output) |
Parse command line arguments into a structure usable by code. More... | |
int | rcl_arguments_get_count_unparsed (const rcl_arguments_t *args) |
Return the number of arguments that were not successfully parsed. More... | |
rcl_ret_t | rcl_arguments_get_unparsed (const rcl_arguments_t *args, rcl_allocator_t allocator, int **output_unparsed_indices) |
Return a list of indexes that weren't successfully parsed. More... | |
rcl_arguments_t | rcl_get_zero_initialized_arguments (void) |
Return a rcl_arguments_t struct with members initialized to NULL . More... | |
rcl_ret_t | rcl_remove_ros_arguments (char const *const argv[], const rcl_arguments_t *args, rcl_allocator_t allocator, int *nonros_argc, const char **nonros_argv[]) |
Return a list of arguments with ROS-specific arguments removed. More... | |
rcl_ret_t | rcl_arguments_copy (const rcl_arguments_t *args, rcl_arguments_t *args_out) |
Copy one arguments structure into another. More... | |
rcl_ret_t | rcl_arguments_fini (rcl_arguments_t *args) |
Reclaim resources held inside rcl_arguments_t structure. More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_fully_qualified_namespace (rcl_lexer_lookahead2_t *lex_lookahead) |
Parses a fully qualified namespace for a namespace replacement rule (ex: /foo/bar ) More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_replacement_token (rcl_lexer_lookahead2_t *lex_lookahead) |
Parse either a token or a backreference (ex: bar , or \7 ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_replacement_name (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse the replacement side of a name remapping rule (ex: bar/\1/foo ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_match_token (rcl_lexer_lookahead2_t *lex_lookahead) |
Parse either a token or a wildcard (ex: foobar , or * , or ** ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_match_name (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse the match side of a name remapping rule (ex: rostopic://foo ) More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_name_remap (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse a name remapping rule (ex: rostopic:///foo:=bar ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_namespace_replacement (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse a namespace replacement rule (ex: __ns:=/new/ns ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_nodename_replacement (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse a nodename replacement rule (ex: __node:=new_name ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_nodename_prefix (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Parse a nodename prefix including trailing colon (ex: node_name: ). More... | |
RCL_LOCAL rcl_ret_t | _rcl_parse_remap_begin_remap_rule (rcl_lexer_lookahead2_t *lex_lookahead, rcl_remap_t *rule) |
Start recursive descent parsing of a remap rule. More... | |
rcl_ret_t _rcl_parse_remap_rule | ( | const char * | arg, |
rcl_allocator_t | allocator, | ||
rcl_remap_t * | output_rule | ||
) |
// Internal Doxygen documentation
Parse an argument that may or may not be a remap rule.
[in] | arg | the argument to parse |
[in] | allocator | an allocator to use |
[in,out] | output_rule | input a zero intialized rule, output a fully initialized one |
rcl_ret_t _rcl_parse_param_file_rule | ( | const char * | arg, |
rcl_allocator_t | allocator, | ||
char ** | param_file | ||
) |
Parse an argument that may or may not be a parameter file rule.
The syntax of the file name is not validated.
[in] | arg | the argument to parse |
[in] | allocator | an allocator to use |
[in,out] | param_file | string that could be a parameter file name |
rcl_ret_t rcl_arguments_get_param_files | ( | const rcl_arguments_t * | arguments, |
rcl_allocator_t | allocator, | ||
char *** | parameter_files | ||
) |
Return a list of yaml parameter file paths specified on the command line.
Attribute | Adherence |
---|---|
Allocates Memory | Yes |
Thread-Safe | No |
Uses Atomics | No |
Lock-Free | Yes |
[in] | arguments | An arguments structure that has been parsed. |
[in] | allocator | A valid allocator. |
[out] | parameter_files | An allocated array of paramter file names. This array must be deallocated by the caller using the given allocator. The output is NULL if there were no paramter files. |
RCL_RET_OK
if everything goes correctly, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_BAD_ALLOC
if allocating memory failed, or RCL_RET_ERROR
if an unspecified error occurs. int rcl_arguments_get_param_files_count | ( | const rcl_arguments_t * | args | ) |
Return the number of parameter yaml files given in the arguments.
Attribute | Adherence |
---|---|
Allocates Memory | No |
Thread-Safe | No |
Uses Atomics | No |
Lock-Free | Yes |
[in] | args | An arguments structure that has been parsed. |
NULL
or zero initialized. rcl_ret_t _rcl_parse_log_level_rule | ( | const char * | arg, |
rcl_allocator_t | allocator, | ||
int * | log_level | ||
) |
Parse an argument that may or may not be a log level rule.
[in] | arg | the argument to parse |
[in] | allocator | an allocator to use |
[in,out] | log_level | parsed log level represented by RCUTILS_LOG_SEVERITY enum |
rcl_ret_t _rcl_parse_external_log_config_file | ( | const char * | arg, |
rcl_allocator_t | allocator, | ||
char ** | log_config_file | ||
) |
Parse an argument that may or may not be a log file rule.
[in] | arg | the argument to parse |
[in] | allocator | an allocator to use |
[in,out] | log_config_file | parsed log configuration file |
Parse a bool argument that may or may not be for the provided key rule.
[in] | arg | the argument to parse |
[in] | key | the key for the argument to parse. Should be a null terminated string |
[in,out] | value | parsed boolean value |
Parse a null terminated string to a boolean value.
The case sensitive values: "T", "t", "True", "true", "Y", "y", "Yes", "yes", and "1" will all map to true. The case sensitive values: "F", "f", "False", "false", "N", "n", "No", "no", and "0" will all map to false.
[in] | str | a null terminated string to be parsed into a boolean |
[in,out] | val | the boolean value parsed from the string. Left unchanged if string cannot be parsed to a valid bool. |
rcl_ret_t rcl_parse_arguments | ( | int | argc, |
const char *const | argv[], | ||
rcl_allocator_t | allocator, | ||
rcl_arguments_t * | args_output | ||
) |
Parse command line arguments into a structure usable by code.
If an argument does not appear to be a valid ROS argument then it is skipped and parsing continues with the next argument in argv
.
Successfully parsed remap rules are stored in the order they were given in argv
. If given arguments {"__ns:=/foo", "__ns:=/bar"}
then the namespace used by nodes in this process will be /foo
and not /bar
.
The default log level will be parsed as __log_level:=level
, where level
is a name representing one of the log levels in the RCUTILS_LOG_SEVERITY
enum, e.g. info
, debug
, warn
, not case sensitive. If multiple of these rules are found, the last one parsed will be used.
Attribute | Adherence |
---|---|
Allocates Memory | Yes |
Thread-Safe | Yes |
Uses Atomics | No |
Lock-Free | Yes |
[in] | argc | The number of arguments in argv. |
[in] | argv | The values of the arguments. |
[in] | allocator | A valid allocator. |
[out] | args_output | A structure that will contain the result of parsing. Must be zero initialized before use. |
RCL_RET_OK
if the arguments were parsed successfully, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_BAD_ALLOC
if allocating memory failed, or RCL_RET_ERROR
if an unspecified error occurs. int rcl_arguments_get_count_unparsed | ( | const rcl_arguments_t * | args | ) |
Return the number of arguments that were not successfully parsed.
Attribute | Adherence |
---|---|
Allocates Memory | No |
Thread-Safe | Yes |
Uses Atomics | No |
Lock-Free | Yes |
[in] | args | An arguments structure that has been parsed. |
NULL
or zero initialized. rcl_ret_t rcl_arguments_get_unparsed | ( | const rcl_arguments_t * | args, |
rcl_allocator_t | allocator, | ||
int ** | output_unparsed_indices | ||
) |
Return a list of indexes that weren't successfully parsed.
Some arguments may not have been successfully parsed, or were not intended as ROS arguments. This function populates an array of indexes to these arguments in the original argv array. Since the first argument is always assumed to be a process name, the list will always contain the index 0.
Attribute | Adherence |
---|---|
Allocates Memory | Yes |
Thread-Safe | Yes |
Uses Atomics | No |
Lock-Free | Yes |
[in] | args | An arguments structure that has been parsed. |
[in] | allocator | A valid allocator. |
[out] | output_unparsed_indices | An allocated array of indices into the original argv array. This array must be deallocated by the caller using the given allocator. If there are no unparsed args then the output will be set to NULL. |
RCL_RET_OK
if everything goes correctly, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_BAD_ALLOC
if allocating memory failed, or RCL_RET_ERROR
if an unspecified error occurs. rcl_arguments_t rcl_get_zero_initialized_arguments | ( | void | ) |
Return a rcl_arguments_t struct with members initialized to NULL
.
rcl_ret_t rcl_remove_ros_arguments | ( | char const *const | argv[], |
const rcl_arguments_t * | args, | ||
rcl_allocator_t | allocator, | ||
int * | nonros_argc, | ||
const char ** | nonros_argv[] | ||
) |
Return a list of arguments with ROS-specific arguments removed.
Some arguments may not have been intended as ROS arguments. This function populates an array of the aruments in a new argv array. Since the first argument is always assumed to be a process name, the list will always contain the first value from the argument vector.
Attribute | Adherence |
---|---|
Allocates Memory | Yes |
Thread-Safe | Yes |
Uses Atomics | No |
Lock-Free | Yes |
[in] | argv | The argument vector |
[in] | args | An arguments structure that has been parsed. |
[in] | allocator | A valid allocator. |
[out] | nonros_argc | The count of arguments that aren't ROS-specific |
[out] | nonros_argv | An allocated array of arguments that aren't ROS-specific This array must be deallocated by the caller using the given allocator. If there are no non-ROS args, then the output will be set to NULL. |
RCL_RET_OK
if everything goes correctly, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_BAD_ALLOC
if allocating memory failed, or RCL_RET_ERROR
if an unspecified error occurs. rcl_ret_t rcl_arguments_copy | ( | const rcl_arguments_t * | args, |
rcl_arguments_t * | args_out | ||
) |
Copy one arguments structure into another.
Attribute | Adherence |
---|---|
Allocates Memory | Yes |
Thread-Safe | No |
Uses Atomics | No |
Lock-Free | Yes |
[in] | args | The structure to be copied. Its allocator is used to copy memory into the new structure. |
[out] | args_out | A zero-initialized arguments structure to be copied into. |
RCL_RET_OK
if the structure was copied successfully, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_BAD_ALLOC
if allocating memory failed, or RCL_RET_ERROR
if an unspecified error occurs. rcl_ret_t rcl_arguments_fini | ( | rcl_arguments_t * | args | ) |
Reclaim resources held inside rcl_arguments_t structure.
Attribute | Adherence |
---|---|
Allocates Memory | No |
Thread-Safe | Yes |
Uses Atomics | No |
Lock-Free | Yes |
[in] | args | The structure to be deallocated. |
RCL_RET_OK
if the memory was successfully freed, or RCL_RET_INVALID_ARGUMENT
if any function arguments are invalid, or RCL_RET_ERROR
if an unspecified error occurs. RCL_LOCAL rcl_ret_t _rcl_parse_remap_fully_qualified_namespace | ( | rcl_lexer_lookahead2_t * | lex_lookahead | ) |
Parses a fully qualified namespace for a namespace replacement rule (ex: /foo/bar
)
RCL_LOCAL rcl_ret_t _rcl_parse_remap_replacement_token | ( | rcl_lexer_lookahead2_t * | lex_lookahead | ) |
Parse either a token or a backreference (ex: bar
, or \7
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_replacement_name | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse the replacement side of a name remapping rule (ex: bar/\1/foo
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_match_token | ( | rcl_lexer_lookahead2_t * | lex_lookahead | ) |
Parse either a token or a wildcard (ex: foobar
, or *
, or **
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_match_name | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse the match side of a name remapping rule (ex: rostopic://foo
)
RCL_LOCAL rcl_ret_t _rcl_parse_remap_name_remap | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse a name remapping rule (ex: rostopic:///foo:=bar
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_namespace_replacement | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse a namespace replacement rule (ex: __ns:=/new/ns
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_nodename_replacement | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse a nodename replacement rule (ex: __node:=new_name
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_nodename_prefix | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Parse a nodename prefix including trailing colon (ex: node_name:
).
RCL_LOCAL rcl_ret_t _rcl_parse_remap_begin_remap_rule | ( | rcl_lexer_lookahead2_t * | lex_lookahead, |
rcl_remap_t * | rule | ||
) |
Start recursive descent parsing of a remap rule.
[in] | lex_lookahead | a lookahead(2) buffer for the parser to use. |
[in,out] | rule | input a zero intialized rule, output a fully initialized one. |