|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/3] Add proto* functions
Hey,
This should actually go to lwip since proto.c includes netdb.h which is
not provided by newlib.
On 6/11/19 4:44 AM, Vlad-Andrei BĂDOIU (78692) wrote:
> This patch adds endprotoent, setprotoent, getprotoent, getprotobyname and
> getprotobynumber from musl release 1.1.14.
>
> Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
> ---
> Makefile.uk | 1 +
> proto.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 114 insertions(+)
> create mode 100644 proto.c
>
> diff --git a/Makefile.uk b/Makefile.uk
> index 9d1b275..5450ed2 100644
> --- a/Makefile.uk
> +++ b/Makefile.uk
> @@ -115,6 +115,7 @@ LIBNEWLIBGLUE_SRCS-y += $(LIBNEWLIBC_BASE)/time.c|glue
> LIBNEWLIBGLUE_SRCS-y += $(LIBNEWLIBC_BASE)/locale.c
> LIBNEWLIBGLUE_SRCS-y += $(LIBNEWLIBC_BASE)/dev.c
> LIBNEWLIBGLUE_SRCS-y += $(LIBNEWLIBC_BASE)/signal.c
> +LIBNEWLIBGLUE_SRCS-y += $(LIBNEWLIBC_BASE)/proto.c
>
>
> ################################################################################
> # Newlib/libc code -- argz
> diff --git a/proto.c b/proto.c
> new file mode 100644
> index 0000000..a16dc3b
> --- /dev/null
> +++ b/proto.c
> @@ -0,0 +1,113 @@
> +/* SPDX-License-Identifier: MIT */
> +/* ----------------------------------------------------------------------
> + * Copyright © 2005-2014 Rich Felker, et al.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining
> + * a copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sublicense, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + * ----------------------------------------------------------------------
> + */
> +/* Taken from musl */
> +
> +#include <netdb.h>
> +#include <string.h>
> +
> +static int idx;
> +static const unsigned char protos[] = {
> + "\000ip\0"
> + "\001icmp\0"
> + "\002igmp\0"
> + "\003ggp\0"
> + "\004ipencap\0"
> + "\005st\0"
> + "\006tcp\0"
> + "\010egp\0"
> + "\014pup\0"
> + "\021udp\0"
> + "\024hmp\0"
> + "\026xns-idp\0"
> + "\033rdp\0"
> + "\035iso-tp4\0"
> + "\044xtp\0"
> + "\045ddp\0"
> + "\046idpr-cmtp\0"
> + "\051ipv6\0"
> + "\053ipv6-route\0"
> + "\054ipv6-frag\0"
> + "\055idrp\0"
> + "\056rsvp\0"
> + "\057gre\0"
> + "\062esp\0"
> + "\063ah\0"
> + "\071skip\0"
> + "\072ipv6-icmp\0"
> + "\073ipv6-nonxt\0"
> + "\074ipv6-opts\0"
> + "\111rspf\0"
> + "\121vmtp\0"
> + "\131ospf\0"
> + "\136ipip\0"
> + "\142encap\0"
> + "\147pim\0"
> + "\377raw"
> +};
> +
> +void endprotoent(void)
> +{
> + idx = 0;
> +}
> +
> +void setprotoent(int stayopen)
> +{
> + idx = 0;
> +}
> +
> +struct protoent *getprotoent(void)
> +{
> + static struct protoent p;
> + static const char *aliases;
> +
> + if (idx >= sizeof(protos))
> + return NULL;
> + p.p_proto = protos[idx];
> + p.p_name = (char *)&protos[idx+1];
> + p.p_aliases = (char **)&aliases;
> + idx += strlen(p.p_name) + 2;
> + return &p;
> +}
> +
> +struct protoent *getprotobyname(const char *name)
> +{
> + struct protoent *p;
> +
> + endprotoent();
> + do p = getprotoent();
> + while (p && strcmp(name, p->p_name));
> + return p;
> +}
> +
> +struct protoent *getprotobynumber(int num)
> +{
> + struct protoent *p;
> +
> + endprotoent();
> + do p = getprotoent();
> + while (p && p->p_proto != num);
> + return p;
> +}
> +
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |