LCOV - code coverage report
Current view: top level - hwdb - hwdb.c (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 32 45 71.1 %
Date: 2019-08-22 15:41:25 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : 
       3             : #include <getopt.h>
       4             : 
       5             : #include "sd-hwdb.h"
       6             : 
       7             : #include "alloc-util.h"
       8             : #include "hwdb-util.h"
       9             : #include "main-func.h"
      10             : #include "pretty-print.h"
      11             : #include "selinux-util.h"
      12             : #include "util.h"
      13             : #include "verbs.h"
      14             : 
      15             : static const char *arg_hwdb_bin_dir = NULL;
      16             : static const char *arg_root = NULL;
      17             : static bool arg_strict = false;
      18             : 
      19           0 : static int verb_query(int argc, char *argv[], void *userdata) {
      20           0 :         return hwdb_query(argv[1]);
      21             : }
      22             : 
      23           2 : static int verb_update(int argc, char *argv[], void *userdata) {
      24           2 :         return hwdb_update(arg_root, arg_hwdb_bin_dir, arg_strict, false);
      25             : }
      26             : 
      27           3 : static int help(void) {
      28           3 :         _cleanup_free_ char *link = NULL;
      29             :         int r;
      30             : 
      31           3 :         r = terminal_urlify_man("systemd-hwdb", "8", &link);
      32           3 :         if (r < 0)
      33           0 :                 return log_oom();
      34             : 
      35           3 :         printf("%s OPTIONS COMMAND\n\n"
      36             :                "Update or query the hardware database.\n\n"
      37             :                "  -h --help       Show this help\n"
      38             :                "     --version    Show package version\n"
      39             :                "  -s --strict     When updating, return non-zero exit value on any parsing error\n"
      40             :                "     --usr        Generate in " UDEVLIBEXECDIR " instead of /etc/udev\n"
      41             :                "  -r --root=PATH  Alternative root path in the filesystem\n\n"
      42             :                "Commands:\n"
      43             :                "  update          Update the hwdb database\n"
      44             :                "  query MODALIAS  Query database and print result\n"
      45             :                "\nSee the %s for details.\n"
      46             :                , program_invocation_short_name
      47             :                , link
      48             :         );
      49             : 
      50           3 :         return 0;
      51             : }
      52             : 
      53           6 : static int parse_argv(int argc, char *argv[]) {
      54             :         enum {
      55             :                 ARG_VERSION = 0x100,
      56             :                 ARG_USR,
      57             :         };
      58             : 
      59             :         static const struct option options[] = {
      60             :                 { "help",     no_argument,       NULL, 'h'         },
      61             :                 { "version",  no_argument,       NULL, ARG_VERSION },
      62             :                 { "usr",      no_argument,       NULL, ARG_USR     },
      63             :                 { "strict",   no_argument,       NULL, 's'         },
      64             :                 { "root",     required_argument, NULL, 'r'         },
      65             :                 {}
      66             :         };
      67             : 
      68             :         int c;
      69             : 
      70           6 :         assert(argc >= 0);
      71           6 :         assert(argv);
      72             : 
      73           8 :         while ((c = getopt_long(argc, argv, "ust:r:h", options, NULL)) >= 0)
      74           6 :                 switch(c) {
      75             : 
      76           3 :                 case 'h':
      77           3 :                         return help();
      78             : 
      79           0 :                 case ARG_VERSION:
      80           0 :                         return version();
      81             : 
      82           0 :                 case ARG_USR:
      83           0 :                         arg_hwdb_bin_dir = UDEVLIBEXECDIR;
      84           0 :                         break;
      85             : 
      86           0 :                 case 's':
      87           0 :                         arg_strict = true;
      88           0 :                         break;
      89             : 
      90           2 :                 case 'r':
      91           2 :                         arg_root = optarg;
      92           2 :                         break;
      93             : 
      94           1 :                 case '?':
      95           1 :                         return -EINVAL;
      96             : 
      97           0 :                 default:
      98           0 :                         assert_not_reached("Unknown option");
      99             :                 }
     100             : 
     101           2 :         return 1;
     102             : }
     103             : 
     104           2 : static int hwdb_main(int argc, char *argv[]) {
     105             :         static const Verb verbs[] = {
     106             :                 { "update", 1, 1, 0, verb_update },
     107             :                 { "query",  2, 2, 0, verb_query  },
     108             :                 {},
     109             :         };
     110             : 
     111           2 :         return dispatch_verb(argc, argv, verbs, NULL);
     112             : }
     113             : 
     114           6 : static int run(int argc, char *argv[]) {
     115             :         int r;
     116             : 
     117           6 :         log_parse_environment();
     118           6 :         log_open();
     119             : 
     120           6 :         r = parse_argv(argc, argv);
     121           6 :         if (r <= 0)
     122           4 :                 return r;
     123             : 
     124           2 :         mac_selinux_init();
     125             : 
     126           2 :         return hwdb_main(argc, argv);
     127             : }
     128             : 
     129           6 : DEFINE_MAIN_FUNCTION(run);

Generated by: LCOV version 1.14