1
0
Fork 0
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:
David Herrmann 2014-03-12 11:53:57 +01:00
parent 3bd83f1572
commit 06be8854c5
7 changed files with 135 additions and 49 deletions

View file

@ -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 */

View file

@ -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();

View file

@ -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();

View file

@ -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;

View file

@ -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();

View file

@ -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;

View file

@ -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;