Rev 3625 | Rev 4368 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3625 | Rev 4357 | ||
---|---|---|---|
Line 146... | Line 146... | ||
146 | int len; |
146 | int len; |
147 | 147 | ||
148 | if (last < next) |
148 | if (last < next) |
149 | last += PLB_SIZE; |
149 | last += PLB_SIZE; |
150 | 150 | ||
151 | void *par = NULL; |
151 | fs_node_t *par = NULL; |
152 | void *cur = ops->root_get(dev_handle); |
152 | fs_node_t *cur = ops->root_get(dev_handle); |
153 | void *tmp = NULL; |
153 | fs_node_t *tmp = NULL; |
154 | 154 | ||
155 | if (ops->plb_get_char(next) == '/') |
155 | if (ops->plb_get_char(next) == '/') |
156 | next++; /* eat slash */ |
156 | next++; /* eat slash */ |
157 | 157 | ||
158 | while (next <= last && ops->has_children(cur)) { |
158 | while (next <= last && ops->has_children(cur)) { |
Line 187... | Line 187... | ||
187 | /* request to create a new link */ |
187 | /* request to create a new link */ |
188 | if (!ops->is_directory(cur)) { |
188 | if (!ops->is_directory(cur)) { |
189 | ipc_answer_0(rid, ENOTDIR); |
189 | ipc_answer_0(rid, ENOTDIR); |
190 | goto out; |
190 | goto out; |
191 | } |
191 | } |
192 | void *nodep; |
192 | fs_node_t *fn; |
193 | if (lflag & L_CREATE) |
193 | if (lflag & L_CREATE) |
194 | nodep = ops->create(dev_handle, lflag); |
194 | fn = ops->create(dev_handle, lflag); |
195 | else |
195 | else |
196 | nodep = ops->node_get(dev_handle, |
196 | fn = ops->node_get(dev_handle, |
197 | index); |
197 | index); |
198 | if (nodep) { |
198 | if (fn) { |
199 | int rc; |
199 | int rc; |
200 | 200 | ||
201 | rc = ops->link(cur, nodep, component); |
201 | rc = ops->link(cur, fn, component); |
202 | if (rc != EOK) { |
202 | if (rc != EOK) { |
203 | if (lflag & L_CREATE) { |
203 | if (lflag & L_CREATE) { |
204 | (void)ops->destroy( |
204 | (void)ops->destroy(fn); |
205 | nodep); |
- | |
206 | } |
205 | } |
207 | ipc_answer_0(rid, rc); |
206 | ipc_answer_0(rid, rc); |
208 | } else { |
207 | } else { |
209 | ipc_answer_5(rid, EOK, |
208 | ipc_answer_5(rid, EOK, |
210 | fs_handle, dev_handle, |
209 | fs_handle, dev_handle, |
211 | ops->index_get(nodep), |
210 | ops->index_get(fn), |
212 | ops->size_get(nodep), |
211 | ops->size_get(fn), |
213 | ops->lnkcnt_get(nodep)); |
212 | ops->lnkcnt_get(fn)); |
214 | ops->node_put(nodep); |
213 | ops->node_put(fn); |
215 | } |
214 | } |
216 | } else { |
215 | } else { |
217 | ipc_answer_0(rid, ENOSPC); |
216 | ipc_answer_0(rid, ENOSPC); |
218 | } |
217 | } |
219 | goto out; |
218 | goto out; |
Line 261... | Line 260... | ||
261 | next++; /* process next character */ |
260 | next++; /* process next character */ |
262 | } |
261 | } |
263 | assert(len); |
262 | assert(len); |
264 | component[len] = '\0'; |
263 | component[len] = '\0'; |
265 | 264 | ||
266 | void *nodep; |
265 | fs_node_t *fn; |
267 | if (lflag & L_CREATE) |
266 | if (lflag & L_CREATE) |
268 | nodep = ops->create(dev_handle, lflag); |
267 | fn = ops->create(dev_handle, lflag); |
269 | else |
268 | else |
270 | nodep = ops->node_get(dev_handle, index); |
269 | fn = ops->node_get(dev_handle, index); |
271 | if (nodep) { |
270 | if (fn) { |
272 | int rc; |
271 | int rc; |
273 | 272 | ||
274 | rc = ops->link(cur, nodep, component); |
273 | rc = ops->link(cur, fn, component); |
275 | if (rc != EOK) { |
274 | if (rc != EOK) { |
276 | if (lflag & L_CREATE) |
275 | if (lflag & L_CREATE) |
277 | (void)ops->destroy(nodep); |
276 | (void)ops->destroy(fn); |
278 | ipc_answer_0(rid, rc); |
277 | ipc_answer_0(rid, rc); |
279 | } else { |
278 | } else { |
280 | ipc_answer_5(rid, EOK, |
279 | ipc_answer_5(rid, EOK, |
281 | fs_handle, dev_handle, |
280 | fs_handle, dev_handle, |
282 | ops->index_get(nodep), |
281 | ops->index_get(fn), |
283 | ops->size_get(nodep), |
282 | ops->size_get(fn), |
284 | ops->lnkcnt_get(nodep)); |
283 | ops->lnkcnt_get(fn)); |
285 | ops->node_put(nodep); |
284 | ops->node_put(fn); |
286 | } |
285 | } |
287 | } else { |
286 | } else { |
288 | ipc_answer_0(rid, ENOSPC); |
287 | ipc_answer_0(rid, ENOSPC); |
289 | } |
288 | } |
290 | goto out; |
289 | goto out; |