| /* |
| * Copyright (C) 2002 Manuel Novoa III |
| * Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org> |
| * |
| * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. |
| */ |
| |
| #include "_string.h" |
| #include <libgen.h> |
| |
| char *dirname(char *path) |
| { |
| static const char null_or_empty_or_noslash[] = "."; |
| register char *s; |
| register char *last; |
| char *first; |
| |
| last = s = path; |
| |
| if (s != NULL) { |
| |
| LOOP: |
| while (*s && (*s != '/')) ++s; |
| first = s; |
| while (*s == '/') ++s; |
| if (*s) { |
| last = first; |
| goto LOOP; |
| } |
| |
| if (last == path) { |
| if (*last != '/') { |
| goto DOT; |
| } |
| if ((*++last == '/') && (last[1] == 0)) { |
| ++last; |
| } |
| } |
| *last = 0; |
| return path; |
| } |
| DOT: |
| return (char *) null_or_empty_or_noslash; |
| } |