diff options
author | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:59:48 +0900 |
---|---|---|
committer | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:59:48 +0900 |
commit | 069da3cbd66c66454606f9d408b697e65f5684f6 (patch) | |
tree | c3e1a89be77e7c7eb3cf899f872bd58ebf0a026f /revpath.c | |
parent | a1a2b2765e25bc20d6f249a467755455b9b3b6b3 (diff) | |
download | imake-069da3cbd66c66454606f9d408b697e65f5684f6.tar.gz imake-069da3cbd66c66454606f9d408b697e65f5684f6.tar.bz2 imake-069da3cbd66c66454606f9d408b697e65f5684f6.zip |
Upload Tizen:Main source
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); +} |