summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-11-04 00:56:58 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-11-05 13:19:02 +0900
commita8319dea1d34f4117ea57ea32d85e0eb528358d0 (patch)
tree37a86aac7cce627f02f2aed19086bc9adb8eb453 /src
parent201bf07f7c5467928a0dd6c91ef298f144151740 (diff)
downloadsystemd-a8319dea1d34f4117ea57ea32d85e0eb528358d0.tar.gz
sd-resolve: introduce sd_resolve_query_{get,set}_destroy_callback()
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd/sd-resolve/sd-resolve.c20
-rw-r--r--src/systemd/sd-resolve.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c
index 61876781c0..dd33314f53 100644
--- a/src/libsystemd/sd-resolve/sd-resolve.c
+++ b/src/libsystemd/sd-resolve/sd-resolve.c
@@ -94,6 +94,7 @@ struct sd_resolve_query {
};
void *userdata;
+ sd_resolve_destroy_t destroy_callback;
LIST_FIELDS(sd_resolve_query, queries);
};
@@ -1095,6 +1096,9 @@ static sd_resolve_query *resolve_query_free(sd_resolve_query *q) {
resolve_query_disconnect(q);
+ if (q->destroy_callback)
+ q->destroy_callback(q->userdata);
+
resolve_freeaddrinfo(q->addrinfo);
free(q->host);
free(q->serv);
@@ -1137,6 +1141,22 @@ _public_ sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q) {
return q->resolve;
}
+_public_ int sd_resolve_query_get_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t *destroy_callback) {
+ assert_return(q, -EINVAL);
+
+ if (destroy_callback)
+ *destroy_callback = q->destroy_callback;
+
+ return !!q->destroy_callback;
+}
+
+_public_ int sd_resolve_query_set_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t destroy_callback) {
+ assert_return(q, -EINVAL);
+
+ q->destroy_callback = destroy_callback;
+ return 0;
+}
+
static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
sd_resolve *resolve = userdata;
int r;
diff --git a/src/systemd/sd-resolve.h b/src/systemd/sd-resolve.h
index 5695119b40..2696562d77 100644
--- a/src/systemd/sd-resolve.h
+++ b/src/systemd/sd-resolve.h
@@ -42,6 +42,7 @@ typedef struct sd_resolve_query sd_resolve_query;
/* A callback on completion */
typedef int (*sd_resolve_getaddrinfo_handler_t)(sd_resolve_query *q, int ret, const struct addrinfo *ai, void *userdata);
typedef int (*sd_resolve_getnameinfo_handler_t)(sd_resolve_query *q, int ret, const char *host, const char *serv, void *userdata);
+typedef void (*sd_resolve_destroy_t)(void *userdata);
enum {
SD_RESOLVE_GET_HOST = 1 << 0,
@@ -108,6 +109,8 @@ int sd_resolve_query_is_done(sd_resolve_query*q);
void *sd_resolve_query_get_userdata(sd_resolve_query *q);
void *sd_resolve_query_set_userdata(sd_resolve_query *q, void *userdata);
+int sd_resolve_query_get_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t *destroy_callback);
+int sd_resolve_query_set_destroy_callback(sd_resolve_query *q, sd_resolve_destroy_t destroy_callback);
sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q);