]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
8b835fcc | 2 | |
f2562398 | 3 | #include "analyze.h" |
5f311f8c | 4 | #include "analyze-verify.h" |
f2562398 LP |
5 | #include "analyze-verify-util.h" |
6 | #include "copy.h" | |
7 | #include "rm-rf.h" | |
8 | #include "tmpfile-util.h" | |
3cc3dc77 | 9 | |
f2562398 LP |
10 | static int process_aliases(char *argv[], char *tempdir, char ***ret) { |
11 | _cleanup_strv_free_ char **filenames = NULL; | |
25f17e47 | 12 | int r; |
25f17e47 | 13 | |
f2562398 LP |
14 | assert(argv); |
15 | assert(tempdir); | |
25f17e47 EV |
16 | assert(ret); |
17 | ||
f2562398 LP |
18 | STRV_FOREACH(filename, strv_skip(argv, 1)) { |
19 | _cleanup_free_ char *src = NULL, *dst = NULL, *base = NULL; | |
20 | const char *parse_arg; | |
25f17e47 | 21 | |
f2562398 LP |
22 | parse_arg = *filename; |
23 | r = extract_first_word(&parse_arg, &src, ":", EXTRACT_DONT_COALESCE_SEPARATORS|EXTRACT_RETAIN_ESCAPE); | |
25f17e47 EV |
24 | if (r < 0) |
25 | return r; | |
25f17e47 | 26 | |
f2562398 LP |
27 | if (!parse_arg) { |
28 | r = strv_consume(&filenames, TAKE_PTR(src)); | |
29 | if (r < 0) | |
30 | return r; | |
25f17e47 | 31 | |
f2562398 LP |
32 | continue; |
33 | } | |
8b835fcc | 34 | |
f2562398 LP |
35 | r = path_extract_filename(parse_arg, &base); |
36 | if (r < 0) | |
37 | return r; | |
8b835fcc | 38 | |
f2562398 LP |
39 | dst = path_join(tempdir, base); |
40 | if (!dst) | |
8b835fcc ZJS |
41 | return -ENOMEM; |
42 | ||
f2562398 | 43 | r = copy_file(src, dst, 0, 0644, 0, 0, COPY_REFLINK); |
8b835fcc ZJS |
44 | if (r < 0) |
45 | return r; | |
8b835fcc | 46 | |
f2562398 | 47 | r = strv_consume(&filenames, TAKE_PTR(dst)); |
d941ea22 ZJS |
48 | if (r < 0) |
49 | return r; | |
50 | } | |
8b835fcc | 51 | |
f2562398 | 52 | *ret = TAKE_PTR(filenames); |
8b835fcc ZJS |
53 | return 0; |
54 | } | |
55 | ||
ef38bedb | 56 | int verb_verify(int argc, char *argv[], void *userdata) { |
f2562398 LP |
57 | _cleanup_strv_free_ char **filenames = NULL; |
58 | _cleanup_(rm_rf_physical_and_freep) char *tempdir = NULL; | |
8b835fcc ZJS |
59 | int r; |
60 | ||
f2562398 | 61 | r = mkdtemp_malloc("/tmp/systemd-analyze-XXXXXX", &tempdir); |
23bbb0de | 62 | if (r < 0) |
f2562398 | 63 | return log_error_errno(r, "Failed to setup working directory: %m"); |
8b835fcc | 64 | |
f2562398 | 65 | r = process_aliases(argv, tempdir, &filenames); |
23bbb0de | 66 | if (r < 0) |
f2562398 | 67 | return log_error_errno(r, "Couldn't process aliases: %m"); |
3cc3dc77 | 68 | |
f2562398 | 69 | return verify_units(filenames, arg_scope, arg_man, arg_generators, arg_recursive_errors, arg_root); |
8b835fcc | 70 | } |