Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX

2014-08-06 Thread Sebastian Andrzej Siewior
On 2014-08-05 16:14:12 [-0400], Jon Bernard wrote:
 This may also work as well:
 
 diff --git a/configure.ac b/configure.ac
 index 80eba33..248044e 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -50,6 +50,17 @@ AC_C_INLINE
  AC_TYPE_PID_T
  AC_TYPE_SIZE_T
 
 +# FreeBSD does not define HOST_NAME_MAX
 +AC_CHECK_DECL(HOST_NAME_MAX,,
 +   [
 +AC_CHECK_DECL(_POSIX_HOST_NAME_MAX,
 +  AC_DEFINE(HOST_NAME_MAX, _POSIX_HOST_NAME_MAX, []),
 +  AC_DEFINE(HOST_NAME_MAX, 256, [Define to 256 if 
 neither have HOST_NAME_MAX nor _POSIX_HOST_NAME_MAX]),
 +  [[#include limits.h]])
 +   ],
 +   [[#include limits.h]]
 +)

Sure it will. I have no strong opinion on how it gets fixed :)

 +
  # Checks for library functions.
  AC_FUNC_MALLOC
  AC_FUNC_MMAP
 

Sebastian


-- 
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX

2014-08-05 Thread Sebastian Andrzej Siewior
This patch replaces HOST_NAME_MAX by xgethostname() which is a wrapper
around malloc() + gethostname() to get a large enough buffer to fit the
hostname.
xgethostname.c was stolen from coreutils and slightly changed so it
works without xreallocte().

This should fix Debian #751337 where the package does not build KFreeBSD
due to missing HOST_NAME_MAX.

The test suite passed.

Signed-off-by: Sebastian Andrzej Siewior sebast...@breakpoint.cc
---
 tests/lib/Makefile.am   |  3 +-
 tests/lib/test_ctf_writer.c | 10 --
 tests/lib/xgethostname.c| 76 +
 tests/lib/xgethostname.h|  1 +
 4 files changed, 87 insertions(+), 3 deletions(-)
 create mode 100644 tests/lib/xgethostname.c
 create mode 100644 tests/lib/xgethostname.h

diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am
index 7c96e4a..e3543af 100644
--- a/tests/lib/Makefile.am
+++ b/tests/lib/Makefile.am
@@ -24,7 +24,8 @@ noinst_PROGRAMS = test_seek test_bitfield test_ctf_writer
 
 test_seek_SOURCES = test_seek.c
 test_bitfield_SOURCES = test_bitfield.c
-test_ctf_writer_SOURCES = test_ctf_writer.c
+test_ctf_writer_SOURCES = test_ctf_writer.c \
+ xgethostname.c xgethostname.h
 
 SCRIPT_LIST = test_seek_big_trace \
test_seek_empty_packet \
diff --git a/tests/lib/test_ctf_writer.c b/tests/lib/test_ctf_writer.c
index c642933..b80f543 100644
--- a/tests/lib/test_ctf_writer.c
+++ b/tests/lib/test_ctf_writer.c
@@ -39,6 +39,7 @@
 #include fcntl.h
 #include dirent.h
 #include tap/tap.h
+#include xgethostname.h
 #include math.h
 #include float.h
 
@@ -1406,7 +1407,7 @@ int main(int argc, char **argv)
char *metadata_string;
struct bt_ctf_writer *writer;
struct utsname name;
-   char hostname[HOST_NAME_MAX];
+   char *hostname;
struct bt_ctf_clock *clock, *ret_clock;
struct bt_ctf_stream_class *stream_class;
struct bt_ctf_stream *stream1;
@@ -1432,10 +1433,15 @@ int main(int argc, char **argv)
ok(writer, bt_ctf_create succeeds in creating trace with path);
 
/* Add environment context to the trace */
-   gethostname(hostname, HOST_NAME_MAX);
+   hostname = xgethostname();
+   if (!hostname) {
+   perror(xgethostname());
+   return -1;
+   }
ok(bt_ctf_writer_add_environment_field(writer, host, hostname) == 0,
Add host (%s) environment field to writer instance,
hostname);
+   free(hostname);
ok(bt_ctf_writer_add_environment_field(NULL, test_field,
test_value),
bt_ctf_writer_add_environment_field error with NULL writer);
diff --git a/tests/lib/xgethostname.c b/tests/lib/xgethostname.c
new file mode 100644
index 000..26ee7ed
--- /dev/null
+++ b/tests/lib/xgethostname.c
@@ -0,0 +1,76 @@
+/* xgethostname.c -- return current hostname with unlimited length
+
+   Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 2009-2013 Free Software
+   Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.  */
+
+/* written by Jim Meyering */
+
+#include config.h
+
+/* Specification.  */
+#include xgethostname.h
+
+#include stdlib.h
+#include errno.h
+#include unistd.h
+
+#ifndef INITIAL_HOSTNAME_LENGTH
+# define INITIAL_HOSTNAME_LENGTH 34
+#endif
+
+/* Return the current hostname in malloc'd storage.
+   If malloc fails, exit.
+   Upon any other failure, return NULL and set errno.  */
+char *xgethostname (void)
+{
+   char *hostname = NULL;
+   size_t size = INITIAL_HOSTNAME_LENGTH;
+
+   while (1) {
+   char *new_hn;
+   /* Use SIZE_1 here rather than SIZE to work around the bug in
+* SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME
+* even when the name is as long as the supplied buffer.
+*/
+   size_t size_1;
+
+   new_hn = realloc(hostname, size);
+   if (!new_hn) {
+   free(hostname);
+   return NULL;
+
+   } else {
+   hostname = new_hn;
+   }
+   size_1 = size - 1;
+   hostname[size_1 - 1] = '\0';
+   errno = 0;
+
+   if (gethostname (hostname, size_1) == 0) {
+   if (!hostname[size_1 - 1])
+

Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX

2014-08-05 Thread Jon Bernard
* Sebastian Andrzej Siewior sebast...@breakpoint.cc wrote:
 This patch replaces HOST_NAME_MAX by xgethostname() which is a wrapper
 around malloc() + gethostname() to get a large enough buffer to fit the
 hostname.
 xgethostname.c was stolen from coreutils and slightly changed so it
 works without xreallocte().
 
 This should fix Debian #751337 where the package does not build KFreeBSD
 due to missing HOST_NAME_MAX.

This may also work as well:

diff --git a/configure.ac b/configure.ac
index 80eba33..248044e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -50,6 +50,17 @@ AC_C_INLINE
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T

+# FreeBSD does not define HOST_NAME_MAX
+AC_CHECK_DECL(HOST_NAME_MAX,,
+   [
+AC_CHECK_DECL(_POSIX_HOST_NAME_MAX,
+  AC_DEFINE(HOST_NAME_MAX, _POSIX_HOST_NAME_MAX, []),
+  AC_DEFINE(HOST_NAME_MAX, 256, [Define to 256 if 
neither have HOST_NAME_MAX nor _POSIX_HOST_NAME_MAX]),
+  [[#include limits.h]])
+   ],
+   [[#include limits.h]]
+)
+
 # Checks for library functions.
 AC_FUNC_MALLOC
 AC_FUNC_MMAP

-- 
Jon


-- 
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org