* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
@ 2014-08-05 20:02 Sebastian Andrzej Siewior
0 siblings, 0 replies; 9+ messages in thread
From: Sebastian Andrzej Siewior @ 2014-08-05 20:02 UTC (permalink / raw)
To: jeremie.galarneau; +Cc: 751337, lttng-dev
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 <sebastian@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 0000000..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])
+ break;
+ } else if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL
+ /* OSX/Darwin does this when the buffer is not large enough */
+ && errno != ENOMEM) {
+ int saved_errno = errno;
+ free (hostname);
+ errno = saved_errno;
+ return NULL;
+ }
+ }
+
+ return hostname;
+}
diff --git a/tests/lib/xgethostname.h b/tests/lib/xgethostname.h
new file mode 100644
index 0000000..0177a40
--- /dev/null
+++ b/tests/lib/xgethostname.h
@@ -0,0 +1 @@
+char *xgethostname (void);
--
2.0.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
2014-08-06 7:03 ` Sebastian Andrzej Siewior
2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
@ 2014-08-07 19:07 ` Jérémie Galarneau
2 siblings, 0 replies; 9+ messages in thread
From: Jérémie Galarneau @ 2014-08-07 19:07 UTC (permalink / raw)
To: Sebastian Andrzej Siewior; +Cc: 751337, lttng-dev
Fixed in both master (as of 22843b6) and stable 1.2 (as of 0954670) branches.
On Wed, Aug 6, 2014 at 3:03 AM, Sebastian Andrzej Siewior
<sebastian@breakpoint.cc> wrote:
> 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
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
2014-08-06 7:03 ` Sebastian Andrzej Siewior
@ 2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
2 siblings, 0 replies; 9+ messages in thread
From: Jérémie Galarneau @ 2014-08-07 19:07 UTC (permalink / raw)
To: Sebastian Andrzej Siewior; +Cc: 751337, lttng-dev
Fixed in both master (as of 22843b6) and stable 1.2 (as of 0954670) branches.
On Wed, Aug 6, 2014 at 3:03 AM, Sebastian Andrzej Siewior
<sebastian@breakpoint.cc> wrote:
> 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
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
2014-08-06 7:03 ` Sebastian Andrzej Siewior
2014-08-07 19:07 ` Jérémie Galarneau
@ 2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
2 siblings, 0 replies; 9+ messages in thread
From: Jérémie Galarneau @ 2014-08-07 19:07 UTC (permalink / raw)
To: Sebastian Andrzej Siewior; +Cc: 751337, lttng-dev
Fixed in both master (as of 22843b6) and stable 1.2 (as of 0954670) branches.
On Wed, Aug 6, 2014 at 3:03 AM, Sebastian Andrzej Siewior
<sebastian@breakpoint.cc> wrote:
> 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
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
[not found] ` <20140805201412.GA11272@helmut>
@ 2014-08-06 7:03 ` Sebastian Andrzej Siewior
2014-08-07 19:07 ` Jérémie Galarneau
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Sebastian Andrzej Siewior @ 2014-08-06 7:03 UTC (permalink / raw)
To: 751337, jeremie.galarneau, lttng-dev
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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
[not found] <20140805200251.GA17716@breakpoint.cc>
@ 2014-08-05 20:14 ` Jon Bernard
2014-08-05 20:14 ` Jon Bernard
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Jon Bernard @ 2014-08-05 20:14 UTC (permalink / raw)
To: Sebastian Andrzej Siewior, 751337; +Cc: lttng-dev
* Sebastian Andrzej Siewior <sebastian@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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
[not found] <20140805200251.GA17716@breakpoint.cc>
2014-08-05 20:14 ` Jon Bernard
@ 2014-08-05 20:14 ` Jon Bernard
2014-08-05 20:14 ` Jon Bernard
[not found] ` <20140805201412.GA11272@helmut>
3 siblings, 0 replies; 9+ messages in thread
From: Jon Bernard @ 2014-08-05 20:14 UTC (permalink / raw)
To: Sebastian Andrzej Siewior, 751337; +Cc: jeremie.galarneau, lttng-dev
* Sebastian Andrzej Siewior <sebastian@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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
[not found] <20140805200251.GA17716@breakpoint.cc>
2014-08-05 20:14 ` Jon Bernard
2014-08-05 20:14 ` Jon Bernard
@ 2014-08-05 20:14 ` Jon Bernard
[not found] ` <20140805201412.GA11272@helmut>
3 siblings, 0 replies; 9+ messages in thread
From: Jon Bernard @ 2014-08-05 20:14 UTC (permalink / raw)
To: Sebastian Andrzej Siewior, 751337; +Cc: jeremie.galarneau, lttng-dev
* Sebastian Andrzej Siewior <sebastian@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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX
@ 2014-08-05 20:02 Sebastian Andrzej Siewior
0 siblings, 0 replies; 9+ messages in thread
From: Sebastian Andrzej Siewior @ 2014-08-05 20:02 UTC (permalink / raw)
To: jeremie.galarneau; +Cc: 751337, lttng-dev
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 <sebastian@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 0000000..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])
+ break;
+ } else if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL
+ /* OSX/Darwin does this when the buffer is not large enough */
+ && errno != ENOMEM) {
+ int saved_errno = errno;
+ free (hostname);
+ errno = saved_errno;
+ return NULL;
+ }
+ }
+
+ return hostname;
+}
diff --git a/tests/lib/xgethostname.h b/tests/lib/xgethostname.h
new file mode 100644
index 0000000..0177a40
--- /dev/null
+++ b/tests/lib/xgethostname.h
@@ -0,0 +1 @@
+char *xgethostname (void);
--
2.0.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-08-07 19:07 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-05 20:02 Bug#751337: [PATCH] tests: test_ctf_writer: replace HOST_NAME_MAX Sebastian Andrzej Siewior
[not found] <20140805200251.GA17716@breakpoint.cc>
2014-08-05 20:14 ` Jon Bernard
2014-08-05 20:14 ` Jon Bernard
2014-08-05 20:14 ` Jon Bernard
[not found] ` <20140805201412.GA11272@helmut>
2014-08-06 7:03 ` Sebastian Andrzej Siewior
2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
2014-08-07 19:07 ` Jérémie Galarneau
-- strict thread matches above, loose matches on Subject: below --
2014-08-05 20:02 Sebastian Andrzej Siewior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.