]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-chase-symlinks.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #include "chase-symlinks.h"
9 static char *arg_root
= NULL
;
10 static int arg_flags
= 0;
11 static bool arg_open
= false;
13 static int parse_argv(int argc
, char *argv
[]) {
19 static const struct option options
[] = {
20 { "help", no_argument
, NULL
, 'h' },
21 { "root", required_argument
, NULL
, ARG_ROOT
},
22 { "open", no_argument
, NULL
, ARG_OPEN
},
24 { "prefix-root", no_argument
, NULL
, CHASE_PREFIX_ROOT
},
25 { "nonexistent", no_argument
, NULL
, CHASE_NONEXISTENT
},
26 { "no_autofs", no_argument
, NULL
, CHASE_NO_AUTOFS
},
27 { "safe", no_argument
, NULL
, CHASE_SAFE
},
28 { "trail-slash", no_argument
, NULL
, CHASE_TRAIL_SLASH
},
29 { "step", no_argument
, NULL
, CHASE_STEP
},
30 { "nofollow", no_argument
, NULL
, CHASE_NOFOLLOW
},
31 { "warn", no_argument
, NULL
, CHASE_WARN
},
40 while ((c
= getopt_long(argc
, argv
, "", options
, NULL
)) >= 0)
45 " %s [OPTION...] path...\n"
48 for (size_t i
= 0; i
< ELEMENTSOF(options
) - 1; i
++)
49 printf(" --%s\n", options
[i
].name
);
60 case CHASE_PREFIX_ROOT
:
61 case CHASE_NONEXISTENT
:
64 case CHASE_TRAIL_SLASH
:
79 return log_error_errno(SYNTHETIC_ERRNO(EINVAL
), "At least one argument is required.");
84 static int run(int argc
, char **argv
) {
89 r
= parse_argv(argc
, argv
);
93 for (int i
= optind
; i
< argc
; i
++) {
94 _cleanup_free_
char *p
= NULL
;
95 _cleanup_close_
int fd
= -EBADF
;
97 printf("%s ", argv
[i
]);
100 r
= chase_symlinks(argv
[i
], arg_root
, arg_flags
, &p
, arg_open
? &fd
: NULL
);
102 log_error_errno(r
, "failed: %m");
108 assert_se(fd
== -EBADF
);
115 DEFINE_MAIN_FUNCTION(run
);