mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-01-03 02:02:33 +01:00
client: add network args parser
This commit is contained in:
parent
9e1578d6a9
commit
f1c5134448
@ -67,6 +67,87 @@ void network_connect(const char *path)
|
||||
check_errors_method_callback);
|
||||
}
|
||||
|
||||
static const char *skip_spaces(const char *p)
|
||||
{
|
||||
while (*p == ' ')
|
||||
p++;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
struct network_args *network_parse_args(const char *args)
|
||||
{
|
||||
struct network_args *network_args;
|
||||
char **arg_arr;
|
||||
size_t quoted_len = 0;
|
||||
size_t i;
|
||||
const char *p;
|
||||
|
||||
if (unlikely(!args))
|
||||
return NULL;
|
||||
|
||||
if (args[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
args = skip_spaces(args);
|
||||
p = args;
|
||||
|
||||
network_args = l_new(struct network_args, 1);
|
||||
|
||||
if (*p == '"') {
|
||||
for (++p, i = 0; *p; p++) {
|
||||
i++;
|
||||
|
||||
if (*p != '"')
|
||||
continue;
|
||||
|
||||
quoted_len = i;
|
||||
}
|
||||
|
||||
if (!quoted_len) {
|
||||
p = args;
|
||||
goto split;
|
||||
}
|
||||
|
||||
network_args->name = l_strndup(args + 1, quoted_len - 1);
|
||||
p = args + quoted_len + 1;
|
||||
p = skip_spaces(p);
|
||||
}
|
||||
split:
|
||||
|
||||
arg_arr = l_strsplit(p, ' ');
|
||||
if (!arg_arr || !arg_arr[0])
|
||||
goto done;
|
||||
|
||||
if (quoted_len) {
|
||||
network_args->type = l_strdup(arg_arr[0]);
|
||||
} else {
|
||||
network_args->name = l_strdup(arg_arr[0]);
|
||||
|
||||
i = 1;
|
||||
|
||||
while (arg_arr[i] && *arg_arr[i] == '\0')
|
||||
i++;
|
||||
|
||||
network_args->type = l_strdup(arg_arr[i]);
|
||||
}
|
||||
|
||||
done:
|
||||
l_strfreev(arg_arr);
|
||||
|
||||
return network_args;
|
||||
}
|
||||
|
||||
void network_args_destroy(struct network_args *network_args)
|
||||
{
|
||||
if (unlikely(!network_args))
|
||||
return;
|
||||
|
||||
l_free(network_args->name);
|
||||
l_free(network_args->type);
|
||||
l_free(network_args);
|
||||
}
|
||||
|
||||
static void set_name(void *data, struct l_dbus_message_iter *variant)
|
||||
{
|
||||
struct network *network = data;
|
||||
|
@ -20,5 +20,13 @@
|
||||
*
|
||||
*/
|
||||
|
||||
struct network_args {
|
||||
char *name;
|
||||
char *type;
|
||||
};
|
||||
|
||||
bool network_is_connected(const char *path);
|
||||
void network_connect(const char *path);
|
||||
|
||||
struct network_args *network_parse_args(const char *args);
|
||||
void network_args_destroy(struct network_args *network_args);
|
||||
|
Loading…
Reference in New Issue
Block a user