Subversion Repositories HelenOS

Rev

Rev 3625 | Rev 4368 | Go to most recent revision | Show entire file | Ignore 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;