Commit | Line | Data |
---|---|---|
0e542ab6 WJ |
1 | /* strippath.c -- remove unnecessary components from a path specifier |
2 | Copyright (C) 1992 Free Software Foundation, Inc. | |
3 | ||
4 | This program is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU General Public License as published by | |
6 | the Free Software Foundation; either version 2, or (at your option) | |
7 | any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU General Public License | |
15 | along with this program; if not, write to the Free Software | |
16 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
17 | ||
18 | #if defined(STDC_HEADERS) || defined(USG) | |
19 | #include <string.h> | |
20 | #ifndef index | |
21 | #define index strchr | |
22 | #endif | |
23 | #else | |
24 | #include <strings.h> | |
25 | #endif | |
26 | ||
27 | #include <stdio.h> | |
28 | ||
29 | #if __STDC__ | |
30 | static void remove_component(char *beginc, char *endc); | |
31 | void strip_trailing_slashes(char *path); | |
32 | #else | |
33 | static void remove_component(); | |
34 | void strip_trailing_slashes(); | |
35 | #endif /* __STDC__ */ | |
36 | ||
37 | /* Remove unnecessary components from PATH. */ | |
38 | ||
39 | void | |
40 | strip_path (path) | |
41 | char *path; | |
42 | { | |
43 | int stripped = 0; | |
44 | char *cp, *slash; | |
45 | ||
46 | for (cp = path; (slash = index(cp, '/')) != NULL; cp = slash) | |
47 | { | |
48 | *slash = '\0'; | |
49 | if ((!*cp && (cp != path || stripped)) || | |
50 | strcmp(cp, ".") == 0 || strcmp(cp, "/") == 0) | |
51 | { | |
52 | stripped = 1; | |
53 | remove_component(cp, slash); | |
54 | slash = cp; | |
55 | } | |
56 | else | |
57 | { | |
58 | *slash++ = '/'; | |
59 | } | |
60 | } | |
61 | strip_trailing_slashes(path); | |
62 | } | |
63 | ||
64 | /* Remove the component delimited by BEGINC and ENDC from the path */ | |
65 | ||
66 | static void | |
67 | remove_component (beginc, endc) | |
68 | char *beginc; | |
69 | char *endc; | |
70 | { | |
71 | for (endc++; *endc; endc++) | |
72 | *beginc++ = *endc; | |
73 | *beginc = '\0'; | |
74 | } |