logo

utils

~/.local/bin tools and git-hooks git clone https://hacktivis.me/git/utils.git
commit: 67d25ca4e1c794c799f15a65ab2fe51ffa43c57c
parent ba6a776b7aa41be52a46bd59b40f34bcedd4d02f
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Mon,  5 Apr 2021 06:04:03 +0200

bin/dirname: New

Diffstat:

Mbin/Makefile.config4++--
Abin/dirname.127+++++++++++++++++++++++++++
Abin/dirname.c14++++++++++++++
Mtest-bin/Makefile1+
Atest-bin/dirname.t20++++++++++++++++++++
5 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/bin/Makefile.config b/bin/Makefile.config @@ -1,2 +1,2 @@ -EXE = args basename date echo lolcat mdate pwd range sizeof xcd -MAN1 = basename.1 date.1 lolcat.1 +EXE = args basename date dirname echo lolcat mdate pwd range sizeof xcd +MAN1 = basename.1 date.1 dirname.1 lolcat.1 diff --git a/bin/dirname.1 b/bin/dirname.1 @@ -0,0 +1,27 @@ +.Dd 2021-04-05 +.Dt DIRNAME 1 +.Os +.Sh NAME +.Nm dirname +.Nd return the parent directory of a file pathname +.Sh SYNOPSIS +.Nm +.Ar string +.Sh DESCRIPTION +Returns the parent directory of +.Ar string . +.Sh EXIT STATUS +.Ex -std +.Sh SEE ALSO +.Xr direname 3 +.Sh STANDARDS +.Nm +is close but not compliant with the +.St -p1003.1-2008 +specification as it uses +.Xr dirname 3 +directly instead of extracting the non-directory portion of +.Ar string +with it's own algorithm. +.Sh AUTHORS +.An Haelwenn (lanodan) Monnier Aq Mt contact@hacktivis.me diff --git a/bin/dirname.c b/bin/dirname.c @@ -0,0 +1,14 @@ +#include <libgen.h> // dirname() +#include <stdio.h> // puts() + +int main(int argc, char *argv[]) +{ + if(argc != 2) + { + fputs("usage: dirname string", stderr); + return 1; + } + + puts(dirname(argv[1])); + return 0; +} diff --git a/test-bin/Makefile b/test-bin/Makefile @@ -1,3 +1,4 @@ test: ./xcd.t ./basename.t + ./dirname.t diff --git a/test-bin/dirname.t b/test-bin/dirname.t @@ -0,0 +1,20 @@ +#!/bin/sh +failed=0 +path=../bin/dirname +status() { + if [ "$2" -eq 0 ]; then + echo "OK: ${1}" + else + echo "FAILED: ${1}" + failed=1 + fi +} +[ "$(${path} 2>/dev/null)" = "" ] ; status "no args" $? +[ "$(${path} /usr/bin)" = "/usr" ] ; status "/usr/bin" $? +[ "$(${path} /usr//bin)" = "/usr" ] ; status "/usr//bin" $? + +## POSIX-tests +#[ "$(${path} //)" = "//" ] ; status "//" $? +#[ "$(${path} ///)" = "///" ] ; status "///" $? + +exit $failed