diff options
Diffstat (limited to 'REORG.TODO/nis/nis_error.c')
-rw-r--r-- | REORG.TODO/nis/nis_error.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/REORG.TODO/nis/nis_error.c b/REORG.TODO/nis/nis_error.c new file mode 100644 index 0000000000..32b2a100f6 --- /dev/null +++ b/REORG.TODO/nis/nis_error.c @@ -0,0 +1,101 @@ +/* Copyright (c) 1997-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <syslog.h> +#include <string.h> +#include <libintl.h> +#include <rpcsvc/nis.h> +#include <shlib-compat.h> + + +#define MF(line) MF1 (line) +#define MF1(line) str##line +static const union msgstr_t +{ + struct + { +#define S(s) char MF(__LINE__)[sizeof (s)]; +#include "nis_error.h" +#undef S + }; + char str[0]; +} msgstr = + { + { +#define S(s) s, +#include "nis_error.h" +#undef S + } + }; + +static const unsigned short int msgidx[] = + { +#define S(s) offsetof (union msgstr_t, MF (__LINE__)), +#include "nis_error.h" +#undef S + }; + + +const char * +nis_sperrno (const nis_error status) +{ + if (status >= sizeof (msgidx) / sizeof (msgidx[0])) + return "???"; + else + return gettext (msgstr.str + msgidx[status]); +} +libnsl_hidden_nolink_def (nis_sperrno, GLIBC_2_1) + +void +nis_perror (const nis_error status, const char *label) +{ + fprintf (stderr, "%s: %s\n", label, nis_sperrno (status)); +} +libnsl_hidden_nolink_def (nis_perror, GLIBC_2_1) + +void +nis_lerror (const nis_error status, const char *label) +{ + syslog (LOG_ERR, "%s: %s", label, nis_sperrno (status)); +} +libnsl_hidden_nolink_def (nis_lerror, GLIBC_2_1) + +char * +nis_sperror_r (const nis_error status, const char *label, + char *buffer, size_t buflen) +{ + if (snprintf (buffer, buflen, "%s: %s", label, nis_sperrno (status)) + >= buflen) + { + __set_errno (ERANGE); + return NULL; + } + + return buffer; +} +libnsl_hidden_nolink_def (nis_sperror_r, GLIBC_2_1) + +char * +nis_sperror (const nis_error status, const char *label) +{ + static char buffer[NIS_MAXNAMELEN + 1]; + + return nis_sperror_r (status, label, buffer, sizeof (buffer)); +} +libnsl_hidden_nolink_def (nis_sperror, GLIBC_2_1) |