]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Move _dbus_check_fdleaks_* from dbus-message-util to tests
authorSimon McVittie <smcv@collabora.com>
Sat, 29 Jun 2019 14:59:51 +0000 (15:59 +0100)
committerSimon McVittie <smcv@collabora.com>
Tue, 2 Jul 2019 19:44:33 +0000 (20:44 +0100)
This is only called from test code.

Signed-off-by: Simon McVittie <smcv@collabora.com>
dbus/dbus-message-internal.h
dbus/dbus-message-util.c
test/internals/dbus-message-util.c
test/test-utils.c
test/test-utils.h

index f73d3146b3975122821cfba75239faacd32cc396..adc07f98b5d07c87c0a96fc5fe2e524ab6d57614 100644 (file)
@@ -143,10 +143,6 @@ _dbus_clear_variant (DBusVariant **variant_p)
   _dbus_clear_pointer_impl (DBusVariant, variant_p, _dbus_variant_free);
 }
 
-typedef struct DBusInitialFDs DBusInitialFDs;
-DBusInitialFDs *_dbus_check_fdleaks_enter (void);
-void            _dbus_check_fdleaks_leave (DBusInitialFDs *fds);
-
 DBUS_END_DECLS
 
 #endif /* DBUS_MESSAGE_INTERNAL_H */
index 3ac9437d074d2bf8ae5a245aec75730d77e0668f..d279b1d203c2cfdf37457ce533589fb65db470b9 100644 (file)
@@ -1,9 +1,7 @@
 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 /* dbus-message-util.c Would be in dbus-message.c, but only used by bus/tests
  *
- * Copyright 2009 Red Hat, Inc.
- * Copyright 2011-2017 Collabora Ltd.
- * Copyright 2017 Endless Mobile, Inc.
+ * Copyright 2017 Collabora Ltd.
  *
  * Licensed under the Academic Free License version 2.1
  *
 
 #include <config.h>
 
-#include "dbus-internals.h"
-#include "dbus-test.h"
 #include "dbus-message-private.h"
-#include "dbus-marshal-recursive.h"
-#include "dbus-string.h"
-#ifdef HAVE_UNIX_FD_PASSING
-#include "dbus-sysdeps-unix.h"
-#endif
-#include <dbus/dbus-test-tap.h>
-
-#ifdef __linux__
-/* Necessary for the Linux-specific fd leak checking code only */
-#include <sys/types.h>
-#include <dirent.h>
-#include <stdlib.h>
-#include <errno.h>
-#endif
 
 /**
  * @addtogroup DBusMessage
@@ -63,125 +45,3 @@ _dbus_message_get_n_unix_fds (DBusMessage *message)
   return 0;
 #endif
 }
-
-#ifdef DBUS_ENABLE_EMBEDDED_TESTS
-
-#ifdef __linux__
-struct DBusInitialFDs {
-    fd_set set;
-};
-#endif
-
-DBusInitialFDs *
-_dbus_check_fdleaks_enter (void)
-{
-#ifdef __linux__
-  DIR *d;
-  DBusInitialFDs *fds;
-
-  /* this is plain malloc so it won't interfere with leak checking */
-  fds = malloc (sizeof (DBusInitialFDs));
-  _dbus_assert (fds != NULL);
-
-  /* This works on Linux only */
-
-  if ((d = opendir ("/proc/self/fd")))
-    {
-      struct dirent *de;
-
-      while ((de = readdir(d)))
-        {
-          long l;
-          char *e = NULL;
-          int fd;
-
-          if (de->d_name[0] == '.')
-            continue;
-
-          errno = 0;
-          l = strtol (de->d_name, &e, 10);
-          _dbus_assert (errno == 0 && e && !*e);
-
-          fd = (int) l;
-
-          if (fd < 3)
-            continue;
-
-          if (fd == dirfd (d))
-            continue;
-
-          if (fd >= FD_SETSIZE)
-            {
-              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
-                             "it is leaked\n", fd);
-              continue;
-            }
-
-          FD_SET (fd, &fds->set);
-        }
-
-      closedir (d);
-    }
-
-  return fds;
-#else
-  return NULL;
-#endif
-}
-
-void
-_dbus_check_fdleaks_leave (DBusInitialFDs *fds)
-{
-#ifdef __linux__
-  DIR *d;
-
-  /* This works on Linux only */
-
-  if ((d = opendir ("/proc/self/fd")))
-    {
-      struct dirent *de;
-
-      while ((de = readdir(d)))
-        {
-          long l;
-          char *e = NULL;
-          int fd;
-
-          if (de->d_name[0] == '.')
-            continue;
-
-          errno = 0;
-          l = strtol (de->d_name, &e, 10);
-          _dbus_assert (errno == 0 && e && !*e);
-
-          fd = (int) l;
-
-          if (fd < 3)
-            continue;
-
-          if (fd == dirfd (d))
-            continue;
-
-          if (fd >= FD_SETSIZE)
-            {
-              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
-                             "it is leaked\n", fd);
-              continue;
-            }
-
-          if (FD_ISSET (fd, &fds->set))
-            continue;
-
-          _dbus_test_fatal ("file descriptor %i leaked in %s.", fd, __FILE__);
-        }
-
-      closedir (d);
-    }
-
-  free (fds);
-#else
-  _dbus_assert (fds == NULL);
-#endif
-}
-
-#endif /* DBUS_ENABLE_EMBEDDED_TESTS */
index 2fe1ffd2856040de9d49ebfb1b53a0d117f5863b..3ec62e38f8ed327f928d9abcb8148668f807abcf 100644 (file)
@@ -46,6 +46,8 @@
 
 #include "dbus-message-factory.h"
 
+#include "test/test-utils.h"
+
 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
 /**
  * Reads arguments from a message iterator given a variable argument
index 60948a712ae3935d1fc3f5958933d9c1b03f5d57..1838c0a73e00e19ddaa1f257e2acd598619944c8 100644 (file)
@@ -1,6 +1,7 @@
 /*
- * Copyright 2002-2008 Red Hat Inc.
+ * Copyright 2002-2009 Red Hat Inc.
  * Copyright 2011-2017 Collabora Ltd.
+ * Copyright 2017 Endless Mobile, Inc.
  *
  * SPDX-License-Identifier: MIT
  *
 # include <dbus/dbus-sysdeps-win.h>
 #endif
 
+#ifdef __linux__
+/* Necessary for the Linux-specific fd leak checking code only */
+#include <dirent.h>
+#include <errno.h>
+#endif
+
 #include "dbus/dbus-message-internal.h"
 #include "dbus/dbus-test-tap.h"
 
@@ -526,6 +533,124 @@ _dbus_test_append_different_uid (DBusString *uid)
 
 #endif /* !defined(DBUS_UNIX) */
 
+#ifdef __linux__
+struct DBusInitialFDs {
+    fd_set set;
+};
+#endif
+
+DBusInitialFDs *
+_dbus_check_fdleaks_enter (void)
+{
+#ifdef __linux__
+  DIR *d;
+  DBusInitialFDs *fds;
+
+  /* this is plain malloc so it won't interfere with leak checking */
+  fds = malloc (sizeof (DBusInitialFDs));
+  _dbus_assert (fds != NULL);
+
+  /* This works on Linux only */
+
+  if ((d = opendir ("/proc/self/fd")))
+    {
+      struct dirent *de;
+
+      while ((de = readdir(d)))
+        {
+          long l;
+          char *e = NULL;
+          int fd;
+
+          if (de->d_name[0] == '.')
+            continue;
+
+          errno = 0;
+          l = strtol (de->d_name, &e, 10);
+          _dbus_assert (errno == 0 && e && !*e);
+
+          fd = (int) l;
+
+          if (fd < 3)
+            continue;
+
+          if (fd == dirfd (d))
+            continue;
+
+          if (fd >= FD_SETSIZE)
+            {
+              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
+                             "it is leaked\n", fd);
+              continue;
+            }
+
+          FD_SET (fd, &fds->set);
+        }
+
+      closedir (d);
+    }
+
+  return fds;
+#else
+  return NULL;
+#endif
+}
+
+void
+_dbus_check_fdleaks_leave (DBusInitialFDs *fds)
+{
+#ifdef __linux__
+  DIR *d;
+
+  /* This works on Linux only */
+
+  if ((d = opendir ("/proc/self/fd")))
+    {
+      struct dirent *de;
+
+      while ((de = readdir(d)))
+        {
+          long l;
+          char *e = NULL;
+          int fd;
+
+          if (de->d_name[0] == '.')
+            continue;
+
+          errno = 0;
+          l = strtol (de->d_name, &e, 10);
+          _dbus_assert (errno == 0 && e && !*e);
+
+          fd = (int) l;
+
+          if (fd < 3)
+            continue;
+
+          if (fd == dirfd (d))
+            continue;
+
+          if (fd >= FD_SETSIZE)
+            {
+              _dbus_verbose ("FD %d unexpectedly large; cannot track whether "
+                             "it is leaked\n", fd);
+              continue;
+            }
+
+          if (FD_ISSET (fd, &fds->set))
+            continue;
+
+          _dbus_test_fatal ("file descriptor %i leaked in %s.", fd, __FILE__);
+        }
+
+      closedir (d);
+    }
+
+  free (fds);
+#else
+  _dbus_assert (fds == NULL);
+#endif
+}
+
 /*
  * _dbus_test_main:
  * @argc: number of command-line arguments
index 8c3c171f83070aa24b2cb31124343308941dd19a..579fd42527569947f6350bd2ece608f48e2cd1ca 100644 (file)
@@ -1,6 +1,7 @@
 /*
- * Copyright 2002-2008 Red Hat Inc.
+ * Copyright 2002-2009 Red Hat Inc.
  * Copyright 2011-2017 Collabora Ltd.
+ * Copyright 2017 Endless Mobile, Inc.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -96,4 +97,8 @@ _DBUS_WARN_UNUSED_RESULT
 dbus_bool_t _dbus_test_append_different_username (DBusString *username);
 #endif
 
+typedef struct DBusInitialFDs DBusInitialFDs;
+DBusInitialFDs *_dbus_check_fdleaks_enter (void);
+void            _dbus_check_fdleaks_leave (DBusInitialFDs *fds);
+
 #endif