LCOV - code coverage report
Current view: top level - shared - ip-protocol-list.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 28 29 96.6 %
Date: 2019-08-23 13:36:53 Functions: 3 3 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 17 20 85.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include <errno.h>
       4                 :            : #include <netinet/in.h>
       5                 :            : 
       6                 :            : #include "alloc-util.h"
       7                 :            : #include "ip-protocol-list.h"
       8                 :            : #include "macro.h"
       9                 :            : #include "parse-util.h"
      10                 :            : #include "string-util.h"
      11                 :            : 
      12                 :            : static const struct ip_protocol_name* lookup_ip_protocol(register const char *str, register GPERF_LEN_TYPE len);
      13                 :            : 
      14                 :            : #include "ip-protocol-from-name.h"
      15                 :            : #include "ip-protocol-to-name.h"
      16                 :            : 
      17                 :         80 : const char *ip_protocol_to_name(int id) {
      18                 :            : 
      19         [ +  + ]:         80 :         if (id < 0)
      20                 :         16 :                 return NULL;
      21                 :            : 
      22         [ +  + ]:         64 :         if ((size_t) id >= ELEMENTSOF(ip_protocol_names))
      23                 :         16 :                 return NULL;
      24                 :            : 
      25                 :         48 :         return ip_protocol_names[id];
      26                 :            : }
      27                 :            : 
      28                 :        100 : int ip_protocol_from_name(const char *name) {
      29                 :            :         const struct ip_protocol_name *sc;
      30                 :            : 
      31         [ -  + ]:        100 :         assert(name);
      32                 :            : 
      33                 :        100 :         sc = lookup_ip_protocol(name, strlen(name));
      34         [ +  + ]:        100 :         if (!sc)
      35                 :         56 :                 return -EINVAL;
      36                 :            : 
      37                 :         44 :         return sc->id;
      38                 :            : }
      39                 :            : 
      40                 :         68 : int parse_ip_protocol(const char *s) {
      41                 :         68 :         _cleanup_free_ char *str = NULL;
      42                 :            :         int i, r;
      43                 :            : 
      44         [ -  + ]:         68 :         assert(s);
      45                 :            : 
      46         [ +  + ]:         68 :         if (isempty(s))
      47                 :          4 :                 return IPPROTO_IP;
      48                 :            : 
      49                 :            :         /* Do not use strdupa() here, as the input string may come from *
      50                 :            :          * command line or config files. */
      51                 :         64 :         str = strdup(s);
      52         [ -  + ]:         64 :         if (!str)
      53                 :          0 :                 return -ENOMEM;
      54                 :            : 
      55                 :         64 :         i = ip_protocol_from_name(ascii_strlower(str));
      56         [ +  + ]:         64 :         if (i >= 0)
      57                 :         20 :                 return i;
      58                 :            : 
      59                 :         44 :         r = safe_atoi(str, &i);
      60         [ +  + ]:         44 :         if (r < 0)
      61                 :          4 :                 return r;
      62                 :            : 
      63         [ +  + ]:         40 :         if (!ip_protocol_to_name(i))
      64                 :         24 :                 return -EINVAL;
      65                 :            : 
      66                 :         16 :         return i;
      67                 :            : }

Generated by: LCOV version 1.14