Rev 3425 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3425 | Rev 4377 | ||
---|---|---|---|
Line 91... | Line 91... | ||
91 | char *dirs[255]; |
91 | char *dirs[255]; |
92 | unsigned int absolute = 0, i = 0, ret = 0; |
92 | unsigned int absolute = 0, i = 0, ret = 0; |
93 | 93 | ||
94 | /* Its a good idea to allocate path, plus we (may) need a copy of |
94 | /* Its a good idea to allocate path, plus we (may) need a copy of |
95 | * path to tokenize if parents are specified */ |
95 | * path to tokenize if parents are specified */ |
96 | if (NULL == (tmp = cli_strdup(path))) { |
96 | if (NULL == (tmp = str_dup(path))) { |
97 | cli_error(CL_ENOMEM, "%s: path too big?", cmdname); |
97 | cli_error(CL_ENOMEM, "%s: path too big?", cmdname); |
98 | return 1; |
98 | return 1; |
99 | } |
99 | } |
100 | 100 | ||
101 | if (NULL == (wdp = (char *) malloc(PATH_MAX))) { |
101 | if (NULL == (wdp = (char *) malloc(PATH_MAX))) { |
Line 126... | Line 126... | ||
126 | /* See if path[0] is a slash, if so we have to remember to append it */ |
126 | /* See if path[0] is a slash, if so we have to remember to append it */ |
127 | if (tmp[0] == '/') |
127 | if (tmp[0] == '/') |
128 | absolute = 1; |
128 | absolute = 1; |
129 | 129 | ||
130 | /* TODO: Canonify the path prior to tokenizing it, see below */ |
130 | /* TODO: Canonify the path prior to tokenizing it, see below */ |
131 | dirs[i] = cli_strtok(tmp, "/"); |
131 | dirs[i] = strtok(tmp, "/"); |
132 | while (dirs[i] && i < 255) |
132 | while (dirs[i] && i < 255) |
133 | dirs[++i] = cli_strtok(NULL, "/"); |
133 | dirs[++i] = strtok(NULL, "/"); |
134 | 134 | ||
135 | if (NULL == dirs[0]) |
135 | if (NULL == dirs[0]) |
136 | return 1; |
136 | return 1; |
137 | 137 | ||
138 | if (absolute == 1) { |
138 | if (absolute == 1) { |
Line 147... | Line 147... | ||
147 | } |
147 | } |
148 | 148 | ||
149 | while (dirs[i] != NULL) { |
149 | while (dirs[i] != NULL) { |
150 | /* Sometimes make or scripts conjoin odd paths. Account for something |
150 | /* Sometimes make or scripts conjoin odd paths. Account for something |
151 | * like this: ../../foo/bar/../foo/foofoo/./bar */ |
151 | * like this: ../../foo/bar/../foo/foofoo/./bar */ |
152 | if (!strcmp(dirs[i], "..") || !strcmp(dirs[i], ".")) { |
152 | if (!str_cmp(dirs[i], "..") || !str_cmp(dirs[i], ".")) { |
153 | if (0 != (chdir(dirs[i]))) { |
153 | if (0 != (chdir(dirs[i]))) { |
154 | cli_error(CL_EFAIL, "%s: impossible path: %s", |
154 | cli_error(CL_EFAIL, "%s: impossible path: %s", |
155 | cmdname, path); |
155 | cmdname, path); |
156 | ret ++; |
156 | ret ++; |
157 | goto finit; |
157 | goto finit; |