Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libc/net Re-entrant versions of services and prorocols f...
details: https://anonhg.NetBSD.org/src/rev/d0f17d3c9a68
branches: trunk
changeset: 558632:d0f17d3c9a68
user: christos <christos%NetBSD.org@localhost>
date: Thu Feb 19 19:21:44 2004 +0000
description:
Re-entrant versions of services and prorocols functions.
diffstat:
lib/libc/net/getprotobyname_r.c | 72 ++++++++++++++++++
lib/libc/net/getprotobynumber_r.c | 61 +++++++++++++++
lib/libc/net/getprotoent_r.c | 145 ++++++++++++++++++++++++++++++++++++++
lib/libc/net/getservbyname_r.c | 75 +++++++++++++++++++
lib/libc/net/getservbyport_r.c | 65 +++++++++++++++++
lib/libc/net/getservent_r.c | 145 ++++++++++++++++++++++++++++++++++++++
6 files changed, 563 insertions(+), 0 deletions(-)
diffs (truncated from 587 to 300 lines):
diff -r dadfc349f1e8 -r d0f17d3c9a68 lib/libc/net/getprotobyname_r.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/net/getprotobyname_r.c Thu Feb 19 19:21:44 2004 +0000
@@ -0,0 +1,72 @@
+/* $NetBSD: getprotobyname_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static char sccsid[] = "@(#)getprotoname.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: getprotobyname_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+
+#include <assert.h>
+#include <netdb.h>
+#include <string.h>
+
+#ifdef __weak_alias
+__weak_alias(getprotobyname_r,_getprotobyname_r)
+#endif
+
+struct protoent *
+getprotobyname_r(const char *name, struct protoent *pr,
+ struct protoent_data *pd)
+{
+ struct protoent *p;
+ char **cp;
+
+ _DIAGASSERT(name != NULL);
+
+ setprotoent_r(pd->stayopen, pd);
+ while ((p = getprotoent_r(pr, pd)) != NULL) {
+ if (strcmp(p->p_name, name) == 0)
+ break;
+ for (cp = p->p_aliases; *cp != NULL; cp++)
+ if (strcmp(*cp, name) == 0)
+ goto found;
+ }
+found:
+ if (!pd->stayopen)
+ endprotoent_r(pd);
+ return p;
+}
diff -r dadfc349f1e8 -r d0f17d3c9a68 lib/libc/net/getprotobynumber_r.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/net/getprotobynumber_r.c Thu Feb 19 19:21:44 2004 +0000
@@ -0,0 +1,61 @@
+/* $NetBSD: getprotobynumber_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static char sccsid[] = "@(#)getproto.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: getprotobynumber_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include <netdb.h>
+#include <stddef.h>
+
+#ifdef __weak_alias
+__weak_alias(getprotobynumber_r,_getprotobynumber_r)
+#endif
+
+struct protoent *
+getprotobynumber_r(int proto, struct protoent *pr, struct protoent_data *pd)
+{
+ struct protoent *p;
+
+ setprotoent_r(pd->stayopen, pd);
+ while ((p = getprotoent_r(pr, pd)) != NULL)
+ if (p->p_proto == proto)
+ break;
+ if (!pd->stayopen)
+ endprotoent_r(pd);
+ return p;
+}
diff -r dadfc349f1e8 -r d0f17d3c9a68 lib/libc/net/getprotoent_r.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/net/getprotoent_r.c Thu Feb 19 19:21:44 2004 +0000
@@ -0,0 +1,145 @@
+/* $NetBSD: getprotoent_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static char sccsid[] = "@(#)getprotoent.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: getprotoent_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include <netdb.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __weak_alias
+__weak_alias(endprotoent_r,_endprotoent_r)
+__weak_alias(getprotoent_r,_getprotoent_r)
+__weak_alias(setprotoent_r,_setprotoent_r)
+#endif
+
+void
+setprotoent_r(int f, struct protoent_data *pd)
+{
+ if (pd->fp == NULL)
+ pd->fp = fopen(_PATH_PROTOCOLS, "r" );
+ else
+ rewind(pd->fp);
+ pd->stayopen |= f;
+}
+
+void
+endprotoent_r(struct protoent_data *pd)
+{
+ if (pd->fp) {
+ (void)fclose(pd->fp);
+ pd->fp = NULL;
+ }
+ if (pd->aliases) {
+ free(pd->aliases);
+ pd->aliases = NULL;
+ pd->maxaliases = 0;
+ }
+ pd->stayopen = 0;
+}
+
+struct protoent *
+getprotoent_r(struct protoent *pr, struct protoent_data *pd)
+{
+ char *l = NULL, *p, *cp, **q;
+ size_t i = 0;
+ int oerrno;
+
+ if (pd->fp == NULL && (pd->fp = fopen(_PATH_PROTOCOLS, "r" )) == NULL)
+ return NULL;
+
+ for (;;) {
+ if (l)
+ free(l);
+ l = fparseln(pd->fp, NULL, NULL, NULL, FPARSELN_UNESCALL);
+ if (l == NULL)
+ return NULL;
+ pr->p_name = p = l;
+ cp = strpbrk(p, " \t");
+ if (cp == NULL)
+ continue;
+ *cp++ = '\0';
+ while (*cp == ' ' || *cp == '\t')
+ cp++;
+ p = strpbrk(cp, " \t");
+ if (p != NULL)
+ *p++ = '\0';
+ pr->p_proto = atoi(cp);
+ if (pd->aliases == NULL) {
+ pd->aliases = malloc(pd->maxaliases = 10);
+ if (pd->aliases == NULL) {
+ oerrno = errno;
+ endprotoent_r(pd);
+ errno = oerrno;
+ return NULL;
+ }
+ }
+ q = pr->p_aliases = pd->aliases;
+ if (p != NULL) {
+ cp = p;
+ q = pr->p_aliases;
+ while (cp && *cp) {
+ if (*cp == ' ' || *cp == '\t') {
+ cp++;
+ continue;
+ }
+ if (i == pd->maxaliases - 2) {
+ pd->maxaliases *= 2;
+ q = pd->aliases =
+ realloc(q, pd->maxaliases);
+ if (q == NULL) {
+ oerrno = errno;
+ endprotoent_r(pd);
+ errno = oerrno;
+ return NULL;
+ }
+ }
+ q[i++] = cp;
+
+ cp = strpbrk(cp, " \t");
+ if (cp != NULL)
+ *cp++ = '\0';
+ }
+ }
+ q[i] = NULL;
+ return pr;
+ }
+}
diff -r dadfc349f1e8 -r d0f17d3c9a68 lib/libc/net/getservbyname_r.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/net/getservbyname_r.c Thu Feb 19 19:21:44 2004 +0000
@@ -0,0 +1,75 @@
+/* $NetBSD: getservbyname_r.c,v 1.1 2004/02/19 19:21:44 christos Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
Home |
Main Index |
Thread Index |
Old Index