1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #include "analyze-verify.h"
5 #include "analyze-verify-util.h"
8 #include "tmpfile-util.h"
10 static int process_aliases(char *argv
[], char *tempdir
, char ***ret
) {
11 _cleanup_strv_free_
char **filenames
= NULL
;
19 STRV_FOREACH(filename
, strv_skip(argv
, 1)) {
20 _cleanup_free_
char *src
= NULL
, *dst
= NULL
, *base
= NULL
;
21 const char *parse_arg
;
23 parse_arg
= *filename
;
24 r
= extract_first_word(&parse_arg
, &src
, ":", EXTRACT_DONT_COALESCE_SEPARATORS
|EXTRACT_RETAIN_ESCAPE
);
29 r
= strv_consume(&filenames
, TAKE_PTR(src
));
36 r
= path_extract_filename(parse_arg
, &base
);
40 dst
= path_join(tempdir
, base
);
44 r
= copy_file(src
, dst
, 0, 0644, 0, 0, COPY_REFLINK
);
48 r
= strv_consume(&filenames
, TAKE_PTR(dst
));
53 *ret
= TAKE_PTR(filenames
);
57 int verb_verify(int argc
, char *argv
[], void *userdata
) {
58 _cleanup_strv_free_
char **filenames
= NULL
;
59 _cleanup_(rm_rf_physical_and_freep
) char *tempdir
= NULL
;
62 r
= mkdtemp_malloc("/tmp/systemd-analyze-XXXXXX", &tempdir
);
64 return log_error_errno(r
, "Failed to setup working directory: %m");
66 r
= process_aliases(argv
, tempdir
, &filenames
);
68 return log_error_errno(r
, "Couldn't process aliases: %m");
70 return verify_units(filenames
, arg_scope
, arg_man
, arg_generators
, arg_recursive_errors
, arg_root
);