]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-chase-symlinks.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
9 static char *arg_root
= NULL
;
10 static int arg_flags
= 0;
12 static int parse_argv(int argc
, char *argv
[]) {
17 static const struct option options
[] = {
18 { "help", no_argument
, NULL
, 'h' },
19 { "root", required_argument
, NULL
, ARG_ROOT
},
21 { "prefix-root", no_argument
, NULL
, CHASE_PREFIX_ROOT
},
22 { "nonexistent", no_argument
, NULL
, CHASE_NONEXISTENT
},
23 { "no_autofs", no_argument
, NULL
, CHASE_NO_AUTOFS
},
24 { "safe", no_argument
, NULL
, CHASE_SAFE
},
25 { "open", no_argument
, NULL
, CHASE_OPEN
},
26 { "trail-slash", no_argument
, NULL
, CHASE_TRAIL_SLASH
},
27 { "step", no_argument
, NULL
, CHASE_STEP
},
28 { "nofollow", no_argument
, NULL
, CHASE_NOFOLLOW
},
29 { "warn", no_argument
, NULL
, CHASE_WARN
},
38 while ((c
= getopt_long(argc
, argv
, "", options
, NULL
)) >= 0)
43 " %s [OPTION...] path...\n"
46 for (size_t i
= 0; i
< ELEMENTSOF(options
) - 1; i
++)
47 printf(" --%s\n", options
[i
].name
);
54 case CHASE_PREFIX_ROOT
:
55 case CHASE_NONEXISTENT
:
59 case CHASE_TRAIL_SLASH
:
70 assert_not_reached("Unhandled option");
74 return log_error_errno(SYNTHETIC_ERRNO(EINVAL
), "At least one argument is required.");
79 static int run(int argc
, char **argv
) {
83 log_parse_environment();
86 r
= parse_argv(argc
, argv
);
90 for (int i
= optind
; i
< argc
; i
++) {
91 _cleanup_free_
char *p
= NULL
;
93 printf("%s ", argv
[i
]);
96 r
= chase_symlinks(argv
[i
], arg_root
, arg_flags
, &p
);
98 log_error_errno(r
, "failed: %m");
102 if (FLAGS_SET(arg_flags
, CHASE_OPEN
))
109 DEFINE_MAIN_FUNCTION(run
);