diff options
Diffstat (limited to 'revpath.c')
-rw-r--r-- | revpath.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/revpath.c b/revpath.c new file mode 100644 index 0000000..db88393 --- /dev/null +++ b/revpath.c @@ -0,0 +1,47 @@ +/* + * Copyright 1999 by The XFree86 Project, Inc. + */ +/* $XFree86: xc/config/util/revpath.c,v 1.2 1999/02/01 11:55:49 dawes Exp $ */ + +/* + * Reverse a pathname. It returns a relative path that can be used to undo + * 'cd argv[1]'. + * + * It is impossible to do this in general, but this handles the cases that + * come up in imake. Maybe imake should use an absolute path for $(TOP) + * instead of a relative path so that this problem can be avoided? + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +int +main(int argc, char *argv[]) +{ + int levels = 0; + char *p; + + /* Silently ignore invalid usage */ + if (argc != 2) + exit(0); + + /* Split the path and count the levels */ + p = strtok(argv[1], "/"); + while (p) { + if (strcmp(p, ".") == 0) + ; + else if (strcmp(p, "..") == 0) + levels--; + else + levels++; + p = strtok(NULL, "/"); + } + + while (levels-- > 0) + printf("../"); + + printf("\n"); + + exit(0); +} |