summaryrefslogtreecommitdiff
path: root/src/skaembutils/s6-ln.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/skaembutils/s6-ln.c')
-rw-r--r--src/skaembutils/s6-ln.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/skaembutils/s6-ln.c b/src/skaembutils/s6-ln.c
index 59b85a4..65a650f 100644
--- a/src/skaembutils/s6-ln.c
+++ b/src/skaembutils/s6-ln.c
@@ -19,7 +19,7 @@
#include <skalibs/random.h>
#include <skalibs/skamisc.h>
-#define USAGE "s6-ln [ -s ] [ -f ] [ -L ] [ -P ] src... dest"
+#define USAGE "s6-ln [ -n ] [ -s ] [ -f ] [ -L ] [ -P ] src... dest"
typedef int linkfunc_t (char const *, char const *) ;
typedef linkfunc_t *linkfunc_t_ref ;
@@ -78,15 +78,17 @@ int main (int argc, char const *const *argv)
{
linkfunc_t_ref mylink = &link ; /* default to system behaviour */
ln_t_ref f = &noforce ;
+ int nodir = 0 ;
PROG = "s6-ln" ;
{
subgetopt_t l = SUBGETOPT_ZERO ;
for (;;)
{
- int opt = subgetopt_r(argc, argv, "sfLP", &l) ;
+ int opt = subgetopt_r(argc, argv, "nsfLP", &l) ;
if (opt == -1) break ;
switch (opt)
{
+ case 'n' : nodir = 1 ; break ;
case 's': mylink = &symlink ; break ;
case 'f': f = &force ; break ;
case 'L': if (mylink != &symlink) mylink = &linkderef ; break ;
@@ -120,7 +122,7 @@ int main (int argc, char const *const *argv)
{
struct stat st ;
- if (stat(argv[1], &st) < 0)
+ if (nodir ? lstat(argv[1], &st) : stat(argv[1], &st) < 0)
{
if (errno != ENOENT) strerr_diefu2sys(111, "stat ", argv[1]) ;
(*f)(argv[0], argv[1], mylink) ;