--- Makefile | 1 + realpath.1 | 34 ++++++++++++++++++++++++++++++++++ realpath.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 realpath.1 create mode 100644 realpath.c diff --git a/Makefile b/Makefile index c2d8266..4fae077 100644 --- a/Makefile +++ b/Makefile _AT_@ -124,6 +124,7 @@ BIN =\ printf\ pwd\ readlink\ + realpath\ renice\ rm\ rmdir\ diff --git a/realpath.1 b/realpath.1 new file mode 100644 index 0000000..ce9710d --- /dev/null +++ b/realpath.1 _AT_@ -0,0 +1,34 @@ +.Dd 2015-11-14 +.Dt REALPATH 1 +.Os sbase +.Sh NAME +.Nm realpath +.Nd Print absolute file or directory name +.Sh SYNOPSIS +.Nm +.Op Fl m +.Op Fl q +.Ar file +.Op file ... +.Sh DESCRIPTION +.Nm +prints the absolute canonical path for each given file or directory. All path +components must exist, unless the +.Fl m +flag is given. +.Sh OPTIONS +.Bl -tag -width Ds +.It Fl m +Do not treat a missing file, directory, or directories as an error. +.It Fl q +Suppress error messages. Exit status will indicate if any errors were +encountered. +.El +.Sh EXIT STATUS +.Bl -tag -width Ds +.It 0 +All paths were successfully resolved. +.It 1 +An error was encountered resolving at least one of the given paths. +.Sh SEE ALSO +.Xr realpath 3 diff --git a/realpath.c b/realpath.c new file mode 100644 index 0000000..5f9a892 --- /dev/null +++ b/realpath.c _AT_@ -0,0 +1,50 @@ +/* See LICENSE file for copyright and license details. */ +#include <errno.h> +#include <limits.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "util.h" + +static int haderrors = 0; +static int mflag = 0; +static int qflag = 0; + +static void +usage(void) +{ + eprintf("usage: %s [-mq] file [file ...]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + int i; + char rp[PATH_MAX]; + + ARGBEGIN { + case 'm': + mflag = 1; + break; + case 'q': + qflag = 1; + break; + default: + usage(); + } ARGEND + + if (!argc) + usage(); + + for (i=0; i<argc; i++) { + if (realpath(argv[i], rp) == NULL && !(errno == ENOENT && mflag)) { + if (!qflag) + weprintf("'%s':", argv[i]); + ++haderrors; + } else { + printf("%s\n", rp); + } + } + return(haderrors ? 1 : 0); +} -- 2.3.6 --BOKacYhQ+x31HxR3--Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Mon Nov 16 2015 - 17:00:12 CET