From: Bruno Haible Date: Thu, 25 Sep 2003 10:41:15 +0000 (+0000) Subject: New modules 'xgetdomainname'. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ac8626ab74430f819333b64e198da59a2ac5f54;p=pspp New modules 'xgetdomainname'. --- diff --git a/lib/ChangeLog b/lib/ChangeLog index 8b8266d1d1..1bbc40ef4c 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2003-09-25 Simon Josefsson + + * xgetdomainname.h: New file. + * xgetdomainname.c: New file. + 2003-09-25 Simon Josefsson Bruno Haible diff --git a/lib/xgetdomainname.c b/lib/xgetdomainname.c new file mode 100644 index 0000000000..aaf50a92d1 --- /dev/null +++ b/lib/xgetdomainname.c @@ -0,0 +1,75 @@ +/* xgetdomainname.c -- Return the NIS domain name, without size limitations. + Copyright (C) 1992, 1996, 2000, 2001, 2003 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 2, 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* Based on xgethostname.c, written by Jim Meyering. */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include "xgetdomainname.h" + +/* Get getdomainname. */ +#include "getdomainname.h" + +/* Get errno. */ +#include + +#include "xalloc.h" + +#ifndef INITIAL_DOMAINNAME_LENGTH +# define INITIAL_DOMAINNAME_LENGTH 34 +#endif + +/* Return the NIS domain name of the machine, in malloc'd storage. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string when not using NIS. + If malloc fails, exit. + Upon any other failure, set errno and return NULL. */ +char * +xgetdomainname (void) +{ + char *domainname; + size_t size; + + size = INITIAL_DOMAINNAME_LENGTH; + domainname = xmalloc (size); + while (1) + { + int k = size - 1; + int err; + + errno = 0; + domainname[k] = '\0'; + err = getdomainname (domainname, size); + if (err >= 0 && domainname[k] == '\0') + break; + else if (err < 0 && errno != EINVAL) + { + int saved_errno = errno; + free (domainname); + errno = saved_errno; + return NULL; + } + size *= 2; + domainname = xrealloc (domainname, size); + } + + return domainname; +} diff --git a/lib/xgetdomainname.h b/lib/xgetdomainname.h new file mode 100644 index 0000000000..1266c6c13c --- /dev/null +++ b/lib/xgetdomainname.h @@ -0,0 +1,29 @@ +/* xgetdomainname.h -- Return the NIS domain name, without size limitations. + Copyright (C) 1992, 1996, 2000, 2001, 2003 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 2, 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _XGETDOMAINNAME_H +#define _XGETDOMAINNAME_H + +/* Return the NIS domain name of the machine, in malloc'd storage. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string when not using NIS. + If malloc fails, exit. + Upon any other failure, set errno and return NULL. */ +extern char *xgetdomainname (void); + +#endif /* _XGETDOMAINNAME_H */ diff --git a/modules/xgetdomainname b/modules/xgetdomainname new file mode 100644 index 0000000000..b25a05cfc9 --- /dev/null +++ b/modules/xgetdomainname @@ -0,0 +1,20 @@ +Description: +Return machine's domainname, without size limitations. + +Files: +lib/xgetdomainname.h +lib/xgetdomainname.c + +Depends-on: +getdomainname +xalloc + +configure.ac: + +Makefile.am: +lib_SOURCES += xgetdomainname.h xgetdomainname.c + +Include: + +Maintainer: +Simon Josefsson