]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: make macros for converting fds to pointers and back generic and use them...
authorLennart Poettering <lennart@poettering.net>
Mon, 16 Nov 2015 23:51:24 +0000 (00:51 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 16 Nov 2015 23:52:10 +0000 (00:52 +0100)
src/basic/async.c
src/basic/fd-util.h
src/basic/fdset.c
src/import/curl-util.c
src/journal/mmap-cache.c
src/login/pam_systemd.c

index c3135f0efe2c8abdaca148e5209e6a7b294671bc..cfc5d224e1997061fb43158c9fd2421ccbe20ef5 100644 (file)
@@ -68,7 +68,7 @@ int asynchronous_sync(void) {
 }
 
 static void *close_thread(void *p) {
-        assert_se(close_nointr(PTR_TO_INT(p)) != -EBADF);
+        assert_se(close_nointr(PTR_TO_FD(p)) != -EBADF);
         return NULL;
 }
 
@@ -84,7 +84,7 @@ int asynchronous_close(int fd) {
         if (fd >= 0) {
                 PROTECT_ERRNO;
 
-                r = asynchronous_job(close_thread, INT_TO_PTR(fd));
+                r = asynchronous_job(close_thread, FD_TO_PTR(fd));
                 if (r < 0)
                          assert_se(close_nointr(fd) != -EBADF);
         }
index 1ca10f03830bc9f10e0c6934c02526348b3a547f..0e9182d75be165fbc2a59892ac281ac6785f3fba 100644 (file)
 
 #include "macro.h"
 
+/* Make sure we can distinguish fd 0 and NULL */
+#define FD_TO_PTR(fd) INT_TO_PTR((fd)+1)
+#define PTR_TO_FD(p) (PTR_TO_INT(p)-1)
+
 int close_nointr(int fd);
 int safe_close(int fd);
 void safe_close_pair(int p[]);
index fd2e1149f52ee46095b5a9058f3d211d4c2f8d0e..e5452f3bb0e246a7b76032ffc6f967dbf760b573 100644 (file)
 #define MAKE_SET(s) ((Set*) s)
 #define MAKE_FDSET(s) ((FDSet*) s)
 
-/* Make sure we can distinguish fd 0 and NULL */
-#define FD_TO_PTR(fd) INT_TO_PTR((fd)+1)
-#define PTR_TO_FD(p) (PTR_TO_INT(p)-1)
-
 FDSet *fdset_new(void) {
         return MAKE_FDSET(set_new(NULL));
 }
index 4278466df120ee1bac9077761f86cebf27c913b8..8e531a64fa99f0a615b8ce0d26b1c6b0968e6546 100644 (file)
@@ -48,9 +48,7 @@ static int curl_glue_on_io(sd_event_source *s, int fd, uint32_t revents, void *u
         assert(s);
         assert(g);
 
-        translated_fd = PTR_TO_INT(hashmap_get(g->translate_fds, INT_TO_PTR(fd+1)));
-        assert(translated_fd > 0);
-        translated_fd--;
+        translated_fd = PTR_TO_FD(hashmap_get(g->translate_fds, FD_TO_PTR(fd)));
 
         if ((revents & (EPOLLIN|EPOLLOUT)) == (EPOLLIN|EPOLLOUT))
                 action = CURL_POLL_INOUT;
@@ -79,7 +77,7 @@ static int curl_glue_socket_callback(CURLM *curl, curl_socket_t s, int action, v
         assert(curl);
         assert(g);
 
-        io = hashmap_get(g->ios, INT_TO_PTR(s+1));
+        io = hashmap_get(g->ios, FD_TO_PTR(s));
 
         if (action == CURL_POLL_REMOVE) {
                 if (io) {
@@ -91,8 +89,8 @@ static int curl_glue_socket_callback(CURLM *curl, curl_socket_t s, int action, v
                         sd_event_source_set_enabled(io, SD_EVENT_OFF);
                         sd_event_source_unref(io);
 
-                        hashmap_remove(g->ios, INT_TO_PTR(s+1));
-                        hashmap_remove(g->translate_fds, INT_TO_PTR(fd+1));
+                        hashmap_remove(g->ios, FD_TO_PTR(s));
+                        hashmap_remove(g->translate_fds, FD_TO_PTR(fd));
 
                         safe_close(fd);
                 }
@@ -143,17 +141,17 @@ static int curl_glue_socket_callback(CURLM *curl, curl_socket_t s, int action, v
 
                 sd_event_source_set_description(io, "curl-io");
 
-                r = hashmap_put(g->ios, INT_TO_PTR(s+1), io);
+                r = hashmap_put(g->ios, FD_TO_PTR(s), io);
                 if (r < 0) {
                         log_oom();
                         sd_event_source_unref(io);
                         return -1;
                 }
 
-                r = hashmap_put(g->translate_fds, INT_TO_PTR(fd+1), INT_TO_PTR(s+1));
+                r = hashmap_put(g->translate_fds, FD_TO_PTR(fd), FD_TO_PTR(s));
                 if (r < 0) {
                         log_oom();
-                        hashmap_remove(g->ios, INT_TO_PTR(s+1));
+                        hashmap_remove(g->ios, FD_TO_PTR(s));
                         sd_event_source_unref(io);
                         return -1;
                 }
@@ -229,7 +227,7 @@ CurlGlue *curl_glue_unref(CurlGlue *g) {
                 fd = sd_event_source_get_io_fd(io);
                 assert(fd >= 0);
 
-                hashmap_remove(g->translate_fds, INT_TO_PTR(fd+1));
+                hashmap_remove(g->translate_fds, FD_TO_PTR(fd));
 
                 safe_close(fd);
                 sd_event_source_unref(io);
index 95402578957a5344fac78f8f32d616d15410345b..5a07ddda764552df5f4275ec273d71b5e1d4a858 100644 (file)
@@ -24,6 +24,7 @@
 #include <sys/mman.h>
 
 #include "alloc-util.h"
+#include "fd-util.h"
 #include "hashmap.h"
 #include "list.h"
 #include "log.h"
@@ -289,7 +290,7 @@ static void fd_free(FileDescriptor *f) {
                 window_free(f->windows);
 
         if (f->cache)
-                assert_se(hashmap_remove(f->cache->fds, INT_TO_PTR(f->fd + 1)));
+                assert_se(hashmap_remove(f->cache->fds, FD_TO_PTR(f->fd)));
 
         free(f);
 }
@@ -301,7 +302,7 @@ static FileDescriptor* fd_add(MMapCache *m, int fd) {
         assert(m);
         assert(fd >= 0);
 
-        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+        f = hashmap_get(m->fds, FD_TO_PTR(fd));
         if (f)
                 return f;
 
@@ -316,7 +317,7 @@ static FileDescriptor* fd_add(MMapCache *m, int fd) {
         f->cache = m;
         f->fd = fd;
 
-        r = hashmap_put(m->fds, UINT_TO_PTR(fd + 1), f);
+        r = hashmap_put(m->fds, FD_TO_PTR(fd), f);
         if (r < 0) {
                 free(f);
                 return NULL;
@@ -429,7 +430,7 @@ static int find_mmap(
         assert(fd >= 0);
         assert(size > 0);
 
-        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+        f = hashmap_get(m->fds, FD_TO_PTR(fd));
         if (!f)
                 return 0;
 
@@ -679,7 +680,7 @@ bool mmap_cache_got_sigbus(MMapCache *m, int fd) {
 
         mmap_cache_process_sigbus(m);
 
-        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+        f = hashmap_get(m->fds, FD_TO_PTR(fd));
         if (!f)
                 return false;
 
@@ -698,7 +699,7 @@ void mmap_cache_close_fd(MMapCache *m, int fd) {
 
         mmap_cache_process_sigbus(m);
 
-        f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+        f = hashmap_get(m->fds, FD_TO_PTR(fd));
         if (!f)
                 return;
 
index 3f7cbb78df04bd64c31f60db5a2b32ff3f0f3827..ed4f7c726f3c056e2cc6cac4999906b8c770eb03 100644 (file)
@@ -493,7 +493,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
                         return PAM_SESSION_ERR;
                 }
 
-                r = pam_set_data(handle, "systemd.session-fd", INT_TO_PTR(session_fd+1), NULL);
+                r = pam_set_data(handle, "systemd.session-fd", FD_TO_PTR(session_fd), NULL);
                 if (r != PAM_SUCCESS) {
                         pam_syslog(handle, LOG_ERR, "Failed to install session fd.");
                         safe_close(session_fd);