Fix failure in configure test for abstract sockets
authorWulf C. Krueger <philantrop@exherbo.org>
Mon, 30 Aug 2010 22:45:12 +0000 (22:45 +0000)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 17 Jan 2011 19:49:06 +0000 (19:49 +0000)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29895
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
configure.in

index ea110987f4764b939b788f81cc53e393f749243e..9debe3b81d9c527fc3351c7321e8661d29ff6ad5 100644 (file)
@@ -694,6 +694,7 @@ AC_CACHE_CHECK([abstract socket namespace],
 #include <errno.h>
 ]],
 [[
+  size_t slen;
   int listen_fd;
   struct sockaddr_un addr;
 
@@ -708,9 +709,13 @@ AC_CACHE_CHECK([abstract socket namespace],
   memset (&addr, '\0', sizeof (addr));
   addr.sun_family = AF_UNIX;
   strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
+  /* SUN_LEN uses strlen() so need to calculate it before adding \0 at the
+   * beginning.
+   */
+  slen = SUN_LEN(&addr);
   addr.sun_path[0] = '\0'; /* this is what makes it abstract */
 
-  if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
+  if (bind (listen_fd, (struct sockaddr*) &addr, slen) < 0)
     {
        fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
                 strerror (errno));