]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sbin/ipf/libipf/getportproto.c
ipfilter userland: Style(9) requires a space after return
[FreeBSD/FreeBSD.git] / sbin / ipf / libipf / getportproto.c
1 /*      $FreeBSD$       */
2
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * $Id$
9  */
10
11 #include <ctype.h>
12 #include "ipf.h"
13
14 int
15 getportproto(char *name, int proto)
16 {
17         struct servent *s;
18         struct protoent *p;
19
20         if (ISDIGIT(*name)) {
21                 int number;
22                 char *s;
23
24                 for (s = name; *s != '\0'; s++)
25                         if (!ISDIGIT(*s))
26                                 return (-1);
27
28                 number = atoi(name);
29                 if (number < 0 || number > 65535)
30                         return (-1);
31                 return (htons(number));
32         }
33
34         p = getprotobynumber(proto);
35         s = getservbyname(name, p ? p->p_name : NULL);
36         if (s != NULL)
37                 return (s->s_port);
38         return (-1);
39 }