Rev 2770 | Rev 2792 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2770 | Rev 2791 | ||
|---|---|---|---|
| Line 146... | Line 146... | ||
| 146 | if (last < next) |
146 | if (last < next) |
| 147 | last += PLB_SIZE; |
147 | last += PLB_SIZE; |
| 148 | 148 | ||
| 149 | void *par = NULL; |
149 | void *par = NULL; |
| 150 | void *cur = ops->root_get(); |
150 | void *cur = ops->root_get(); |
| 151 | void *tmp = ops->child_get(cur); |
151 | void *tmp; |
| 152 | 152 | ||
| 153 | if (ops->plb_get_char(next) == '/') |
153 | if (ops->plb_get_char(next) == '/') |
| 154 | next++; /* eat slash */ |
154 | next++; /* eat slash */ |
| 155 | 155 | ||
| 156 | char component[NAME_MAX + 1]; |
156 | char component[NAME_MAX + 1]; |
| 157 | int len = 0; |
157 | int len = 0; |
| 158 | while (tmp && next <= last) { |
158 | while (ops->has_children(cur) && next <= last) { |
| 159 | 159 | ||
| 160 | /* collect the component */ |
160 | /* collect the component */ |
| 161 | if (ops->plb_get_char(next) != '/') { |
161 | if (ops->plb_get_char(next) != '/') { |
| 162 | if (len + 1 == NAME_MAX) { |
162 | if (len + 1 == NAME_MAX) { |
| 163 | /* comopnent length overflow */ |
163 | /* comopnent length overflow */ |
| Line 174... | Line 174... | ||
| 174 | component[len] = '\0'; |
174 | component[len] = '\0'; |
| 175 | next++; /* eat slash */ |
175 | next++; /* eat slash */ |
| 176 | len = 0; |
176 | len = 0; |
| 177 | 177 | ||
| 178 | /* match the component */ |
178 | /* match the component */ |
| 179 | while (tmp && !ops->match(cur, tmp, component)) |
179 | tmp = ops->match(cur, component); |
| 180 | tmp = ops->sibling_get(tmp); |
- | |
| 181 | 180 | ||
| 182 | /* handle miss: match amongst siblings */ |
181 | /* handle miss: match amongst siblings */ |
| 183 | if (!tmp) { |
182 | if (!tmp) { |
| 184 | if (next <= last) { |
183 | if (next <= last) { |
| 185 | /* there are unprocessed components */ |
184 | /* there are unprocessed components */ |
| Line 226... | Line 225... | ||
| 226 | } |
225 | } |
| 227 | 226 | ||
| 228 | /* descend one level */ |
227 | /* descend one level */ |
| 229 | par = cur; |
228 | par = cur; |
| 230 | cur = tmp; |
229 | cur = tmp; |
| 231 | tmp = ops->child_get(tmp); |
- | |
| 232 | } |
230 | } |
| 233 | 231 | ||
| 234 | /* handle miss: excessive components */ |
232 | /* handle miss: excessive components */ |
| 235 | if (!tmp && next <= last) { |
233 | if (!ops->has_children(cur) && next <= last) { |
| 236 | if (lflag & (L_CREATE | L_LINK)) { |
234 | if (lflag & (L_CREATE | L_LINK)) { |
| 237 | if (!ops->is_directory(cur)) { |
235 | if (!ops->is_directory(cur)) { |
| 238 | ipc_answer_0(rid, ENOTDIR); |
236 | ipc_answer_0(rid, ENOTDIR); |
| 239 | return; |
237 | return; |
| 240 | } |
238 | } |