mirror of
https://github.com/albfan/miraclecast.git
synced 2025-02-12 18:31:55 +00:00
Update to new libsystemd API
The upstream API changed (isn't released, yet!). Update our code to use the new systemd-211 API. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
parent
3bd83f1572
commit
06be8854c5
7 changed files with 135 additions and 49 deletions
|
@ -128,4 +128,90 @@ static inline int64_t now(clockid_t clock_id)
|
|||
(int64_t)ts.tv_nsec / 1000LL;
|
||||
}
|
||||
|
||||
static inline char hexchar(int x)
|
||||
{
|
||||
static const char table[16] = "0123456789abcdef";
|
||||
return table[x & 15];
|
||||
}
|
||||
|
||||
static inline int unhexchar(char c)
|
||||
{
|
||||
if (c >= '0' && c <= '9')
|
||||
return c - '0';
|
||||
|
||||
if (c >= 'a' && c <= 'f')
|
||||
return c - 'a' + 10;
|
||||
|
||||
if (c >= 'A' && c <= 'F')
|
||||
return c - 'A' + 10;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline char *bus_label_escape(const char *s)
|
||||
{
|
||||
char *r, *t;
|
||||
const char *f;
|
||||
|
||||
if (*s == 0)
|
||||
return strdup("_");
|
||||
|
||||
r = calloc(sizeof(char), strlen(s)*3 + 1);
|
||||
if (!r)
|
||||
return NULL;
|
||||
|
||||
for (f = s, t = r; *f; f++) {
|
||||
|
||||
/* Escape everything that is not a-zA-Z0-9. We also
|
||||
* escape 0-9 if it's the first character */
|
||||
|
||||
if (!(*f >= 'A' && *f <= 'Z') &&
|
||||
!(*f >= 'a' && *f <= 'z') &&
|
||||
!(f > s && *f >= '0' && *f <= '9')) {
|
||||
*(t++) = '_';
|
||||
*(t++) = hexchar(*f >> 4);
|
||||
*(t++) = hexchar(*f);
|
||||
} else
|
||||
*(t++) = *f;
|
||||
}
|
||||
|
||||
*t = 0;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline char *bus_label_unescape(const char *f)
|
||||
{
|
||||
char *r, *t;
|
||||
|
||||
/* Special case for the empty string */
|
||||
if (!strcmp(f, "_"))
|
||||
return strdup("");
|
||||
|
||||
r = calloc(sizeof(char), strlen(f) + 1);
|
||||
if (!r)
|
||||
return NULL;
|
||||
|
||||
for (t = r; *f; f++) {
|
||||
|
||||
if (*f == '_') {
|
||||
int a, b;
|
||||
|
||||
if ((a = unhexchar(f[1])) < 0 ||
|
||||
(b = unhexchar(f[2])) < 0) {
|
||||
/* Invalid escape code, let's take it literal then */
|
||||
*(t++) = '_';
|
||||
} else {
|
||||
*(t++) = (char) ((a << 4) | b);
|
||||
f += 2;
|
||||
}
|
||||
} else
|
||||
*(t++) = *f;
|
||||
}
|
||||
|
||||
*t = 0;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* MIRACLE_H */
|
||||
|
|
|
@ -404,10 +404,10 @@ static int cli_init(void)
|
|||
sigprocmask(SIG_BLOCK, &mask, NULL);
|
||||
|
||||
r = sd_event_add_signal(cli_event,
|
||||
&cli_sigs[i],
|
||||
sigs[i],
|
||||
cli_signal_fn,
|
||||
NULL,
|
||||
&cli_sigs[i]);
|
||||
NULL);
|
||||
if (r < 0) {
|
||||
cli_vERR(r);
|
||||
goto error;
|
||||
|
@ -415,11 +415,11 @@ static int cli_init(void)
|
|||
}
|
||||
|
||||
r = sd_event_add_io(cli_event,
|
||||
&cli_stdin,
|
||||
fileno(stdin),
|
||||
EPOLLHUP | EPOLLERR | EPOLLIN,
|
||||
cli_stdin_fn,
|
||||
NULL,
|
||||
&cli_stdin);
|
||||
NULL);
|
||||
if (r < 0) {
|
||||
cli_vERR(r);
|
||||
goto error;
|
||||
|
@ -559,7 +559,7 @@ static int cmd_list_links(sd_bus_message *m)
|
|||
}
|
||||
|
||||
free(link);
|
||||
link = sd_bus_label_unescape(obj);
|
||||
link = bus_label_unescape(obj);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -634,7 +634,7 @@ static int cmd_list_peer(sd_bus_message *m,
|
|||
"/org/freedesktop/miracle/link/");
|
||||
if (obj) {
|
||||
free(link);
|
||||
link = sd_bus_label_unescape(obj);
|
||||
link = bus_label_unescape(obj);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
}
|
||||
|
@ -717,7 +717,7 @@ static int cmd_list_peers(sd_bus_message *m, const char *link_filter)
|
|||
}
|
||||
|
||||
free(peer);
|
||||
peer = sd_bus_label_unescape(obj);
|
||||
peer = bus_label_unescape(obj);
|
||||
if (!peer)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -806,7 +806,7 @@ static int cmd_select(char **args, unsigned int n)
|
|||
return 0;
|
||||
}
|
||||
|
||||
name = sd_bus_label_escape(args[0]);
|
||||
name = bus_label_escape(args[0]);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -855,7 +855,7 @@ static int cmd_show_link(char **args, unsigned int n)
|
|||
else if (!(arg_link = selected_link))
|
||||
return log_error("no link selected"), -EINVAL;
|
||||
|
||||
name = sd_bus_label_escape(arg_link);
|
||||
name = bus_label_escape(arg_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -955,7 +955,7 @@ static int cmd_show_peer(char **args, unsigned int n)
|
|||
const char *t;
|
||||
int r, is_connected = false;
|
||||
|
||||
name = sd_bus_label_escape(args[0]);
|
||||
name = bus_label_escape(args[0]);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -995,7 +995,7 @@ static int cmd_show_peer(char **args, unsigned int n)
|
|||
"/org/freedesktop/miracle/link/");
|
||||
if (t) {
|
||||
free(link);
|
||||
link = sd_bus_label_unescape(t);
|
||||
link = bus_label_unescape(t);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
}
|
||||
|
@ -1115,7 +1115,7 @@ static int cmd_add_link(char **args, unsigned int n)
|
|||
if (r < 0)
|
||||
return cli_log_parser(r);
|
||||
|
||||
link = sd_bus_label_unescape(name);
|
||||
link = bus_label_unescape(name);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1171,7 +1171,7 @@ static int cmd_set_link_name(char **args, unsigned int n)
|
|||
arg_name = args[0];
|
||||
}
|
||||
|
||||
name = sd_bus_label_escape(arg_link);
|
||||
name = bus_label_escape(arg_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1180,11 +1180,11 @@ static int cmd_set_link_name(char **args, unsigned int n)
|
|||
return cli_ENOMEM();
|
||||
|
||||
r = sd_bus_message_new_method_call(bus,
|
||||
&m,
|
||||
"org.freedesktop.miracle",
|
||||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"Set",
|
||||
&m);
|
||||
"Set");
|
||||
if (r < 0)
|
||||
return log_bus_create(r);
|
||||
|
||||
|
@ -1233,7 +1233,7 @@ static int cmd_start_scan(char **args, unsigned int n)
|
|||
else if (!(arg_link = selected_link))
|
||||
return log_error("no link selected"), -EINVAL;
|
||||
|
||||
name = sd_bus_label_escape(arg_link);
|
||||
name = bus_label_escape(arg_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1275,7 +1275,7 @@ static int cmd_stop_scan(char **args, unsigned int n)
|
|||
else if (!(arg_link = selected_link))
|
||||
return log_error("no link selected"), -EINVAL;
|
||||
|
||||
name = sd_bus_label_escape(arg_link);
|
||||
name = bus_label_escape(arg_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1316,7 +1316,7 @@ static int cmd_scan_stop(bool async)
|
|||
if (!scan_link)
|
||||
return 0;
|
||||
|
||||
name = sd_bus_label_escape(scan_link);
|
||||
name = bus_label_escape(scan_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1390,7 +1390,7 @@ static int cmd_scan(char **args, unsigned int n)
|
|||
else if (!(arg_link = selected_link))
|
||||
return log_error("no link selected"), -EINVAL;
|
||||
|
||||
name = sd_bus_label_escape(arg_link);
|
||||
name = bus_label_escape(arg_link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1436,7 +1436,7 @@ static int cmd_allow(char **args, unsigned int n)
|
|||
if (n > 1)
|
||||
pin = args[1];
|
||||
|
||||
name = sd_bus_label_escape(args[0]);
|
||||
name = bus_label_escape(args[0]);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1473,7 +1473,7 @@ static int cmd_reject(char **args, unsigned int n)
|
|||
_shl_cleanup_free_ char *name = NULL, *path = NULL;
|
||||
int r;
|
||||
|
||||
name = sd_bus_label_escape(args[0]);
|
||||
name = bus_label_escape(args[0]);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1515,7 +1515,7 @@ static int cmd_connect(char **args, unsigned int n)
|
|||
prov = (n > 1) ? args[1] : "";
|
||||
pin = (n > 2) ? args[2] : "";
|
||||
|
||||
name = sd_bus_label_escape(peer);
|
||||
name = bus_label_escape(peer);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1552,7 +1552,7 @@ static int cmd_disconnect(char **args, unsigned int n)
|
|||
_shl_cleanup_free_ char *name = NULL, *path = NULL;
|
||||
int r;
|
||||
|
||||
name = sd_bus_label_escape(args[0]);
|
||||
name = bus_label_escape(args[0]);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1602,7 +1602,7 @@ static int filters_show_peer(const char *peer)
|
|||
const char *t;
|
||||
int r;
|
||||
|
||||
name = sd_bus_label_escape(peer);
|
||||
name = bus_label_escape(peer);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1642,7 +1642,7 @@ static int filters_show_peer(const char *peer)
|
|||
"/org/freedesktop/miracle/link/");
|
||||
if (t) {
|
||||
free(link);
|
||||
link = sd_bus_label_unescape(t);
|
||||
link = bus_label_unescape(t);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
}
|
||||
|
@ -1686,7 +1686,7 @@ static int filters_show_link(const char *link)
|
|||
const char *t;
|
||||
int r;
|
||||
|
||||
name = sd_bus_label_escape(link);
|
||||
name = bus_label_escape(link);
|
||||
if (!name)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1767,7 +1767,7 @@ static int filters_object_fn(sd_bus *bus,
|
|||
|
||||
t = shl_startswith(obj, "/org/freedesktop/miracle/peer/");
|
||||
if (t) {
|
||||
peer = sd_bus_label_unescape(t);
|
||||
peer = bus_label_unescape(t);
|
||||
if (!peer)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1783,7 +1783,7 @@ static int filters_object_fn(sd_bus *bus,
|
|||
|
||||
t = shl_startswith(obj, "/org/freedesktop/miracle/link/");
|
||||
if (t) {
|
||||
link = sd_bus_label_unescape(t);
|
||||
link = bus_label_unescape(t);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1861,14 +1861,14 @@ static int filters_props_fn(sd_bus *bus,
|
|||
path = sd_bus_message_get_path(m);
|
||||
t = shl_startswith(path, "/org/freedesktop/miracle/peer/");
|
||||
if (t) {
|
||||
peer = sd_bus_label_unescape(t);
|
||||
peer = bus_label_unescape(t);
|
||||
if (!peer)
|
||||
return cli_ENOMEM();
|
||||
}
|
||||
|
||||
t = shl_startswith(path, "/org/freedesktop/miracle/link/");
|
||||
if (t) {
|
||||
link = sd_bus_label_unescape(t);
|
||||
link = bus_label_unescape(t);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
}
|
||||
|
@ -1928,7 +1928,7 @@ static int filters_peer_fn(sd_bus *bus,
|
|||
if (!path)
|
||||
return 0;
|
||||
|
||||
peer = sd_bus_label_unescape(path);
|
||||
peer = bus_label_unescape(path);
|
||||
if (!peer)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
@ -1969,7 +1969,7 @@ static int filters_link_fn(sd_bus *bus,
|
|||
if (!path)
|
||||
return 0;
|
||||
|
||||
link = sd_bus_label_unescape(path);
|
||||
link = bus_label_unescape(path);
|
||||
if (!link)
|
||||
return cli_ENOMEM();
|
||||
|
||||
|
|
|
@ -685,7 +685,7 @@ static int manager_dbus_remove_link(sd_bus *bus, sd_bus_message *msg,
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
link = sd_bus_label_escape(name);
|
||||
link = bus_label_escape(name);
|
||||
if (!link)
|
||||
return log_ENOMEM();
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ int link_make_name(unsigned int type, const char *interface, char **out)
|
|||
if (!name)
|
||||
return log_ENOMEM();
|
||||
|
||||
res = sd_bus_label_escape(name);
|
||||
res = bus_label_escape(name);
|
||||
free(name);
|
||||
if (!res)
|
||||
return log_ENOMEM();
|
||||
|
@ -236,20 +236,20 @@ static int link_wifi_init(struct link *l)
|
|||
return r;
|
||||
|
||||
r = sd_event_add_child(l->m->event,
|
||||
&l->wpa_child_source,
|
||||
wifi_get_supplicant_pid(l->w),
|
||||
WEXITED,
|
||||
link_wifi_child_fn,
|
||||
l,
|
||||
&l->wpa_child_source);
|
||||
l);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_event_add_monotonic(l->m->event,
|
||||
&l->wpa_startup_source,
|
||||
now(CLOCK_MONOTONIC) + 200 * 1000,
|
||||
0,
|
||||
link_wifi_startup_fn,
|
||||
l,
|
||||
&l->wpa_startup_source);
|
||||
l);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ int peer_make_name(unsigned int id, char **out)
|
|||
return 0;
|
||||
|
||||
snprintf(buf, sizeof(buf) - 1, "%u", id);
|
||||
name = sd_bus_label_escape(buf);
|
||||
name = bus_label_escape(buf);
|
||||
if (!name)
|
||||
return log_ENOMEM();
|
||||
|
||||
|
|
|
@ -766,11 +766,11 @@ int wifi_new(sd_event *event, wifi_event_t event_fn, void *data,
|
|||
goto error;
|
||||
|
||||
r = sd_event_add_io(w->event,
|
||||
&w->wpa_source,
|
||||
wfd_wpa_ctrl_get_fd(w->wpa),
|
||||
EPOLLHUP | EPOLLERR | EPOLLIN,
|
||||
wifi_wpa_fd_fn,
|
||||
w,
|
||||
&w->wpa_source);
|
||||
w);
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
|
@ -1335,22 +1335,22 @@ static int wifi_dev_start(struct wifi_dev *d, const char *ifname,
|
|||
}
|
||||
|
||||
r = sd_event_add_io(d->w->event,
|
||||
&d->dhcp_comm_source,
|
||||
d->dhcp_comm,
|
||||
EPOLLHUP | EPOLLERR | EPOLLIN,
|
||||
wifi_dev_comm_fn,
|
||||
d,
|
||||
&d->dhcp_comm_source);
|
||||
d);
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
}
|
||||
|
||||
r = sd_event_add_child(d->w->event,
|
||||
&d->dhcp_pid_source,
|
||||
d->dhcp_pid,
|
||||
WEXITED,
|
||||
wifi_dev_pid_fn,
|
||||
d,
|
||||
&d->dhcp_pid_source);
|
||||
d);
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
|
|
|
@ -248,10 +248,10 @@ static int manager_new(struct manager **out)
|
|||
sigprocmask(SIG_BLOCK, &mask, NULL);
|
||||
|
||||
r = sd_event_add_signal(m->event,
|
||||
&m->sigs[i],
|
||||
sigs[i],
|
||||
manager_signal_fn,
|
||||
m,
|
||||
&m->sigs[i]);
|
||||
m);
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
|
@ -285,11 +285,11 @@ static int manager_new(struct manager **out)
|
|||
}
|
||||
|
||||
r = sd_event_add_io(m->event,
|
||||
&m->udev_mon_source,
|
||||
udev_monitor_get_fd(m->udev_mon),
|
||||
EPOLLHUP | EPOLLERR | EPOLLIN,
|
||||
manager_udev_fn,
|
||||
m,
|
||||
&m->udev_mon_source);
|
||||
m);
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
|
|
Loading…
Reference in a new issue