]> git.ipfire.org Git - thirdparty/util-linux.git/blame_incremental - libmount/src/init.c
textual: harmonize the messages for invalid count and timeout values
[thirdparty/util-linux.git] / libmount / src / init.c
... / ...
CommitLineData
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * This file is part of libmount from util-linux project.
4 *
5 * Copyright (C) 2008-2018 Karel Zak <kzak@redhat.com>
6 *
7 * libmount is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 2.1 of the License, or
10 * (at your option) any later version.
11 */
12
13/**
14 * SECTION: init
15 * @title: Library initialization
16 * @short_description: initialize debugging
17 */
18
19#include <stdarg.h>
20
21#include "mountP.h"
22
23UL_DEBUG_DEFINE_MASK(libmount);
24UL_DEBUG_DEFINE_MASKNAMES(libmount) =
25{
26 { "all", MNT_DEBUG_ALL, "info about all subsystems" },
27 { "cache", MNT_DEBUG_CACHE, "paths and tags cache" },
28 { "cxt", MNT_DEBUG_CXT, "library context (handler)" },
29 { "diff", MNT_DEBUG_DIFF, "mountinfo changes tracking" },
30 { "fs", MNT_DEBUG_FS, "FS abstraction" },
31 { "help", MNT_DEBUG_HELP, "this help" },
32 { "hook", MNT_DEBUG_HOOK, "hooks functionality" },
33 { "locks", MNT_DEBUG_LOCKS, "mtab and utab locking" },
34 { "loop", MNT_DEBUG_LOOP, "loop devices routines" },
35 { "options", MNT_DEBUG_OPTIONS, "mount options parsing" },
36 { "optlist", MNT_DEBUG_OPTLIST, "mount options container" },
37 { "tab", MNT_DEBUG_TAB, "fstab, mtab, mountinfo routines" },
38 { "update", MNT_DEBUG_UPDATE, "mtab, utab updates" },
39 { "utils", MNT_DEBUG_UTILS, "misc library utils" },
40 { "monitor", MNT_DEBUG_MONITOR, "mount tables monitor" },
41 { "btrfs", MNT_DEBUG_BTRFS, "btrfs specific routines" },
42 { "verity", MNT_DEBUG_VERITY, "verity specific routines" },
43
44 { NULL, 0 }
45};
46
47/**
48 * mnt_init_debug:
49 * @mask: debug mask (0xffff to enable full debugging)
50 *
51 * If the @mask is not specified, then this function reads
52 * the LIBMOUNT_DEBUG environment variable to get the mask.
53 *
54 * Already initialized debugging stuff cannot be changed. Calling
55 * this function twice has no effect.
56 */
57void mnt_init_debug(int mask)
58{
59 if (libmount_debug_mask)
60 return;
61
62 __UL_INIT_DEBUG_FROM_ENV(libmount, MNT_DEBUG_, mask, LIBMOUNT_DEBUG);
63
64 if (libmount_debug_mask != MNT_DEBUG_INIT
65 && libmount_debug_mask != (MNT_DEBUG_HELP|MNT_DEBUG_INIT)) {
66 const char *ver = NULL;
67 const char **features = NULL, **p;
68
69 mnt_get_library_version(&ver);
70 mnt_get_library_features(&features);
71
72 DBG(INIT, ul_debug("library debug mask: 0x%06x", libmount_debug_mask));
73 DBG(INIT, ul_debug("library version: %s", ver));
74 p = features;
75 while (p && *p)
76 DBG(INIT, ul_debug(" feature: %s", *p++));
77 }
78
79 ON_DBG(HELP, ul_debug_print_masks("LIBMOUNT_DEBUG",
80 UL_DEBUG_MASKNAMES(libmount)));
81}
82
83#ifdef TEST_PROGRAM
84
85#include <errno.h>
86#include <stdlib.h>
87int main(int argc, char *argv[])
88{
89 if (argc == 2) {
90 int mask;
91
92 errno = 0;
93 mask = strtoul(argv[1], 0, 0);
94
95 if (errno)
96 return 1;
97
98 mnt_init_debug(mask);
99 }
100 else if (argc == 1) {
101 mnt_init_debug(0);
102 } else
103 return 1;
104
105 return 0;
106}
107#endif /* TEST_PROGRAM */
108