Provide realpath(1)
authorkn <kn@openbsd.org>
Wed, 13 Oct 2021 15:04:53 +0000 (15:04 +0000)
committerkn <kn@openbsd.org>
Wed, 13 Oct 2021 15:04:53 +0000 (15:04 +0000)
A tiny realpath(3) wrapper to make a porter's life easier.

Feedback kettenis deraadt cheloha sthen
OK cheloha martijn deraadt

distrib/sets/lists/base/mi
distrib/sets/lists/man/mi
lib/libc/stdlib/realpath.3
usr.bin/Makefile
usr.bin/readlink/readlink.1
usr.bin/realpath/Makefile [new file with mode: 0644]
usr.bin/realpath/realpath.1 [new file with mode: 0644]
usr.bin/realpath/realpath.c [new file with mode: 0644]

index ab88ca9..dbdb786 100644 (file)
 ./usr/bin/rdist
 ./usr/bin/rdistd
 ./usr/bin/readlink
+./usr/bin/realpath
 ./usr/bin/renice
 ./usr/bin/reset
 ./usr/bin/rev
index 3a28fd1..de5af14 100644 (file)
 ./usr/share/man/man1/rdist.1
 ./usr/share/man/man1/rdistd.1
 ./usr/share/man/man1/readlink.1
+./usr/share/man/man1/realpath.1
 ./usr/share/man/man1/register-plist.1
 ./usr/share/man/man1/rev.1
 ./usr/share/man/man1/rlog.1
index 51abd93..1dec10f 100644 (file)
@@ -28,9 +28,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $OpenBSD: realpath.3,v 1.25 2019/12/11 20:01:50 bluhm Exp $
+.\"    $OpenBSD: realpath.3,v 1.26 2021/10/13 15:04:53 kn Exp $
 .\"
-.Dd $Mdocdate: December 11 2019 $
+.Dd $Mdocdate: October 13 2021 $
 .Dt REALPATH 3
 .Os
 .Sh NAME
@@ -136,6 +136,7 @@ Sufficient storage space is unavailable for allocation.
 .El
 .Sh SEE ALSO
 .Xr readlink 1 ,
+.Xr realpath 1 ,
 .Xr getcwd 3
 .Sh STANDARDS
 The
index 89f72a7..22027a4 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: Makefile,v 1.164 2021/09/01 19:55:53 job Exp $
+#      $OpenBSD: Makefile,v 1.165 2021/10/13 15:04:53 kn Exp $
 
 .include <bsd.own.mk>
 
@@ -20,7 +20,7 @@ SUBDIR= apply arch at aucat audioctl awk banner \
        nfsstat nice nm nl nohup openssl pagesize passwd paste patch pctr \
        pkg-config pkill \
        pr printenv printf quota radioctl rcs rdist rdistd \
-       readlink renice rev rpcgen rpcinfo rs rsync rup rusers rwall \
+       readlink realpath renice rev rpcgen rpcinfo rs rsync rup rusers rwall \
        sdiff script sed sendbug shar showmount signify skey \
        skeyaudit skeyinfo skeyinit sndioctl sndiod snmp \
        sort spell split ssh stat su systat \
index 6807663..fefa737 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: readlink.1,v 1.13 2010/09/03 11:09:29 jmc Exp $
+.\"    $OpenBSD: readlink.1,v 1.14 2021/10/13 15:04:53 kn Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -30,7 +30,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd $Mdocdate: September 3 2010 $
+.Dd $Mdocdate: October 13 2021 $
 .Dt READLINK 1
 .Os
 .Sh NAME
@@ -70,6 +70,7 @@ Do not print a trailing newline character.
 .Sh EXIT STATUS
 .Ex -std readlink
 .Sh SEE ALSO
+.Xr realpath 1 ,
 .Xr readlink 2 ,
 .Xr realpath 3
 .Sh HISTORY
diff --git a/usr.bin/realpath/Makefile b/usr.bin/realpath/Makefile
new file mode 100644 (file)
index 0000000..2eb6537
--- /dev/null
@@ -0,0 +1,5 @@
+#      $OpenBSD: Makefile,v 1.1 2021/10/13 15:04:53 kn Exp $
+
+PROG=  realpath
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/realpath/realpath.1 b/usr.bin/realpath/realpath.1
new file mode 100644 (file)
index 0000000..5bc4d49
--- /dev/null
@@ -0,0 +1,56 @@
+.\"    $OpenBSD: realpath.1,v 1.1 2021/10/13 15:04:53 kn Exp $
+.\"
+.\" Copyright (c) 2021 Klemens Nanni <kn@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate: October 13 2021 $
+.Dt REALPATH 1
+.Os
+.Sh NAME
+.Nm realpath
+.Nd print the canonicalized absolute pathname
+.Sh SYNOPSIS
+.Nm
+.Op Fl q
+.Ar file
+.Sh DESCRIPTION
+The
+.Nm
+utility uses
+.Xr realpath 3
+to resolve all symbolic links, extra
+.Dq /
+characters and references to
+.Pa /./
+and
+.Pa /../
+in
+.Ar file ,
+and prints the absolute pathname on standard output.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl q
+Do not print errors.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr readlink 1 ,
+.Xr realpath 3
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Ox 7.1 .
diff --git a/usr.bin/realpath/realpath.c b/usr.bin/realpath/realpath.c
new file mode 100644 (file)
index 0000000..0f66121
--- /dev/null
@@ -0,0 +1,63 @@
+/*     $OpenBSD: realpath.c,v 1.1 2021/10/13 15:04:53 kn Exp $ */
+/*
+ * Copyright (c) 2021 Klemens Nanni <kn@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <err.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+void __dead
+usage(void)
+{
+       fprintf(stderr, "usage: %s [-q] file\n", getprogname());
+       exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+       int ch, qflag = 0;
+       char *buf;
+
+       if (pledge("stdio rpath", NULL) == -1)
+               err(1, "pledge");
+
+       while ((ch = getopt(argc, argv, "q")) != -1) {
+               switch (ch) {
+               case 'q':
+                       qflag = 1;
+                       break;
+               default:
+                       usage();
+               }
+       }
+       argc -= optind;
+       argv += optind;
+       if (argc != 1)
+               usage();
+
+       buf = realpath(argv[0], NULL);
+       if (buf == NULL) {
+               if (qflag)
+                       return (1);
+               err(1, "%s", argv[0]);
+       }
+
+       printf("%s\n", buf);
+       return (0);
+}