summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libshell/dirname.c
blob: d35e6ea62443a8c065911dd4ca997ebd152a1117 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <string.h>
#include <libgen.h>

/*
       path           dirname        basename
       "/usr/lib"     "/usr"         "lib"
       "/usr/"        "/"            "usr"
       "usr"          "."            "usr"
       "/"            "/"            "/"
       "."            "."            "."
       ".."           "."            ".."
*/

char *dirname(char *path) {
  char *c;
again:
  if (!(c=strrchr(path,'/'))) return ".";
  while (c[1]==0) {	/* remove trailing slashes */
    if (c==path) return c;	/* unless path=='/' */
    *c=0;
    if (*--c!='/') break;
  }
  if (*c=='/') { if (c!=path) *c=0; return path; }
  goto again;
}