]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/analyze/analyze-verify.c
strv: make iterator in STRV_FOREACH() declaread in the loop
[thirdparty/systemd.git] / src / analyze / analyze-verify.c
CommitLineData
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
10static 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 56int 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}