LCOV - code coverage report
Current view: top level - basic - syslog-util.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 17 36 47.2 %
Date: 2019-08-23 13:36:53 Functions: 4 7 57.1 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 21 62 33.9 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include <string.h>
       4                 :            : #include <syslog.h>
       5                 :            : 
       6                 :            : #include "hexdecoct.h"
       7                 :            : #include "macro.h"
       8                 :            : #include "string-table.h"
       9                 :            : #include "syslog-util.h"
      10                 :            : 
      11                 :         24 : int syslog_parse_priority(const char **p, int *priority, bool with_facility) {
      12                 :         24 :         int a = 0, b = 0, c = 0;
      13                 :            :         const char *end;
      14                 :            :         size_t k;
      15                 :            : 
      16         [ -  + ]:         24 :         assert(p);
      17         [ -  + ]:         24 :         assert(*p);
      18         [ -  + ]:         24 :         assert(priority);
      19                 :            : 
      20         [ +  + ]:         24 :         if ((*p)[0] != '<')
      21                 :          8 :                 return 0;
      22                 :            : 
      23                 :         16 :         end = strchr(*p, '>');
      24         [ -  + ]:         16 :         if (!end)
      25                 :          0 :                 return 0;
      26                 :            : 
      27                 :         16 :         k = end - *p;
      28         [ -  + ]:         16 :         assert(k > 0);
      29                 :            : 
      30         [ -  + ]:         16 :         if (k == 2)
      31                 :          0 :                 c = undecchar((*p)[1]);
      32         [ -  + ]:         16 :         else if (k == 3) {
      33                 :          0 :                 b = undecchar((*p)[1]);
      34                 :          0 :                 c = undecchar((*p)[2]);
      35         [ -  + ]:         16 :         } else if (k == 4) {
      36                 :          0 :                 a = undecchar((*p)[1]);
      37                 :          0 :                 b = undecchar((*p)[2]);
      38                 :          0 :                 c = undecchar((*p)[3]);
      39                 :            :         } else
      40                 :         16 :                 return 0;
      41                 :            : 
      42   [ #  #  #  #  :          0 :         if (a < 0 || b < 0 || c < 0 ||
                   #  # ]
      43   [ #  #  #  #  :          0 :             (!with_facility && (a || b || c > 7)))
             #  #  #  # ]
      44                 :          0 :                 return 0;
      45                 :            : 
      46         [ #  # ]:          0 :         if (with_facility)
      47                 :          0 :                 *priority = a*100 + b*10 + c;
      48                 :            :         else
      49                 :          0 :                 *priority = (*priority & LOG_FACMASK) | c;
      50                 :            : 
      51                 :          0 :         *p += k + 1;
      52                 :          0 :         return 1;
      53                 :            : }
      54                 :            : 
      55                 :            : static const char *const log_facility_unshifted_table[LOG_NFACILITIES] = {
      56                 :            :         [LOG_FAC(LOG_KERN)] = "kern",
      57                 :            :         [LOG_FAC(LOG_USER)] = "user",
      58                 :            :         [LOG_FAC(LOG_MAIL)] = "mail",
      59                 :            :         [LOG_FAC(LOG_DAEMON)] = "daemon",
      60                 :            :         [LOG_FAC(LOG_AUTH)] = "auth",
      61                 :            :         [LOG_FAC(LOG_SYSLOG)] = "syslog",
      62                 :            :         [LOG_FAC(LOG_LPR)] = "lpr",
      63                 :            :         [LOG_FAC(LOG_NEWS)] = "news",
      64                 :            :         [LOG_FAC(LOG_UUCP)] = "uucp",
      65                 :            :         [LOG_FAC(LOG_CRON)] = "cron",
      66                 :            :         [LOG_FAC(LOG_AUTHPRIV)] = "authpriv",
      67                 :            :         [LOG_FAC(LOG_FTP)] = "ftp",
      68                 :            :         [LOG_FAC(LOG_LOCAL0)] = "local0",
      69                 :            :         [LOG_FAC(LOG_LOCAL1)] = "local1",
      70                 :            :         [LOG_FAC(LOG_LOCAL2)] = "local2",
      71                 :            :         [LOG_FAC(LOG_LOCAL3)] = "local3",
      72                 :            :         [LOG_FAC(LOG_LOCAL4)] = "local4",
      73                 :            :         [LOG_FAC(LOG_LOCAL5)] = "local5",
      74                 :            :         [LOG_FAC(LOG_LOCAL6)] = "local6",
      75                 :            :         [LOG_FAC(LOG_LOCAL7)] = "local7"
      76                 :            : };
      77                 :            : 
      78   [ -  +  +  +  :         12 : DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_facility_unshifted, int, LOG_FAC(~0));
          -  +  #  #  #  
                      # ]
      79                 :            : 
      80                 :          0 : bool log_facility_unshifted_is_valid(int facility) {
      81   [ #  #  #  # ]:          0 :         return facility >= 0 && facility <= LOG_FAC(~0);
      82                 :            : }
      83                 :            : 
      84                 :            : static const char *const log_level_table[] = {
      85                 :            :         [LOG_EMERG] = "emerg",
      86                 :            :         [LOG_ALERT] = "alert",
      87                 :            :         [LOG_CRIT] = "crit",
      88                 :            :         [LOG_ERR] = "err",
      89                 :            :         [LOG_WARNING] = "warning",
      90                 :            :         [LOG_NOTICE] = "notice",
      91                 :            :         [LOG_INFO] = "info",
      92                 :            :         [LOG_DEBUG] = "debug"
      93                 :            : };
      94                 :            : 
      95   [ +  +  +  +  :        787 : DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_level, int, LOG_DEBUG);
          +  +  -  +  #  
                      # ]
      96                 :            : 
      97                 :          0 : bool log_level_is_valid(int level) {
      98   [ #  #  #  # ]:          0 :         return level >= 0 && level <= LOG_DEBUG;
      99                 :            : }

Generated by: LCOV version 1.14