]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-chase-symlinks.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
8 static char *arg_root
= NULL
;
9 static int arg_flags
= 0;
11 static int parse_argv(int argc
, char *argv
[]) {
16 static const struct option options
[] = {
17 { "help", no_argument
, NULL
, 'h' },
18 { "root", required_argument
, NULL
, ARG_ROOT
},
20 { "prefix-root", no_argument
, NULL
, CHASE_PREFIX_ROOT
},
21 { "nonexistent", no_argument
, NULL
, CHASE_NONEXISTENT
},
22 { "no_autofs", no_argument
, NULL
, CHASE_NO_AUTOFS
},
23 { "safe", no_argument
, NULL
, CHASE_SAFE
},
24 { "open", no_argument
, NULL
, CHASE_OPEN
},
25 { "trail-slash", no_argument
, NULL
, CHASE_TRAIL_SLASH
},
26 { "step", no_argument
, NULL
, CHASE_STEP
},
27 { "nofollow", no_argument
, NULL
, CHASE_NOFOLLOW
},
28 { "warn", no_argument
, NULL
, CHASE_WARN
},
37 while ((c
= getopt_long(argc
, argv
, "", options
, NULL
)) >= 0)
42 " %s [OPTION...] path...\n"
45 for (size_t i
= 0; i
< ELEMENTSOF(options
) - 1; i
++)
46 printf(" --%s\n", options
[i
].name
);
53 case CHASE_PREFIX_ROOT
:
54 case CHASE_NONEXISTENT
:
58 case CHASE_TRAIL_SLASH
:
69 assert_not_reached("Unhandled option");
73 return log_error_errno(SYNTHETIC_ERRNO(EINVAL
), "At least one argument is required.");
78 static int run(int argc
, char **argv
) {
82 log_parse_environment();
85 r
= parse_argv(argc
, argv
);
89 for (int i
= optind
; i
< argc
; i
++) {
90 _cleanup_free_
char *p
= NULL
;
92 printf("%s ", argv
[i
]);
95 r
= chase_symlinks(argv
[i
], arg_root
, arg_flags
, &p
);
97 log_error_errno(r
, "failed: %m");
105 DEFINE_MAIN_FUNCTION(run
);