blob: cc15e5710660cea8fdcbd4ef147c2867ec04fd5a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2018-2019 HUAWEI, Inc.
* http://www.huawei.com/
* Created by Li Guifu <bluce.liguifu@huawei.com>
*/
#include <string.h>
#include <stdlib.h>
#include "erofs/print.h"
#include "erofs/internal.h"
#include "liberofs_private.h"
struct erofs_configure cfg;
struct erofs_sb_info sbi;
void erofs_init_configure(void)
{
memset(&cfg, 0, sizeof(cfg));
cfg.c_dbg_lvl = EROFS_WARN;
cfg.c_version = PACKAGE_VERSION;
cfg.c_dry_run = false;
cfg.c_ignore_mtime = false;
cfg.c_compr_level_master = -1;
cfg.c_force_inodeversion = 0;
cfg.c_inline_xattr_tolerance = 2;
cfg.c_unix_timestamp = -1;
cfg.c_uid = -1;
cfg.c_gid = -1;
cfg.c_pclusterblks_max = 1;
cfg.c_pclusterblks_def = 1;
cfg.c_max_decompressed_extent_bytes = -1;
}
void erofs_show_config(void)
{
const struct erofs_configure *c = &cfg;
if (c->c_dbg_lvl < EROFS_WARN)
return;
erofs_dump("\tc_version: [%8s]\n", c->c_version);
erofs_dump("\tc_dbg_lvl: [%8d]\n", c->c_dbg_lvl);
erofs_dump("\tc_dry_run: [%8d]\n", c->c_dry_run);
}
void erofs_exit_configure(void)
{
#ifdef HAVE_LIBSELINUX
if (cfg.sehnd)
selabel_close(cfg.sehnd);
#endif
if (cfg.c_img_path)
free(cfg.c_img_path);
}
static unsigned int fullpath_prefix; /* root directory prefix length */
void erofs_set_fs_root(const char *rootdir)
{
fullpath_prefix = strlen(rootdir);
}
const char *erofs_fspath(const char *fullpath)
{
const char *s = fullpath + fullpath_prefix;
while (*s == '/')
s++;
return s;
}
#ifdef HAVE_LIBSELINUX
int erofs_selabel_open(const char *file_contexts)
{
struct selinux_opt seopts[] = {
{ .type = SELABEL_OPT_PATH, .value = file_contexts }
};
if (cfg.sehnd) {
erofs_info("ignore duplicated file contexts \"%s\"",
file_contexts);
return -EBUSY;
}
cfg.sehnd = selabel_open(SELABEL_CTX_FILE, seopts, 1);
if (!cfg.sehnd) {
erofs_err("failed to open file contexts \"%s\"",
file_contexts);
return -EINVAL;
}
return 0;
}
#endif
|