From: Yu Watanabe Date: Sat, 3 Nov 2018 16:05:16 +0000 (+0900) Subject: sd-resolve: introduce sd_resolve_query_{get,set}_floating() X-Git-Tag: v240~404^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3ae7237c6cc84953759280ab3fd95933ede7390;p=thirdparty%2Fsystemd.git sd-resolve: introduce sd_resolve_query_{get,set}_floating() --- diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c index dd33314f536..1fbab9dbf97 100644 --- a/src/libsystemd/sd-resolve/sd-resolve.c +++ b/src/libsystemd/sd-resolve/sd-resolve.c @@ -1157,6 +1157,34 @@ _public_ int sd_resolve_query_set_destroy_callback(sd_resolve_query *q, sd_resol return 0; } +_public_ int sd_resolve_query_get_floating(sd_resolve_query *q) { + assert_return(q, -EINVAL); + + return q->floating; +} + +_public_ int sd_resolve_query_set_floating(sd_resolve_query *q, int b) { + assert_return(q, -EINVAL); + + if (q->floating == !!b) + return 0; + + if (!q->resolve) /* Already disconnected */ + return -ESTALE; + + q->floating = b; + + if (b) { + sd_resolve_query_ref(q); + sd_resolve_unref(q->resolve); + } else { + sd_resolve_ref(q->resolve); + sd_resolve_query_unref(q); + } + + return 1; +} + 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 2696562d772..089fcdee376 100644 --- a/src/systemd/sd-resolve.h +++ b/src/systemd/sd-resolve.h @@ -111,6 +111,8 @@ 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); +int sd_resolve_query_get_floating(sd_resolve_query *q); +int sd_resolve_query_set_floating(sd_resolve_query *q, int b); sd_resolve *sd_resolve_query_get_resolve(sd_resolve_query *q);