MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _ipc_msg_fd_new

Function _ipc_msg_fd_new

components/lwp/lwp_ipc.c:423–469  ·  view source on GitHub ↗

* Get fd from file vnode. */

Source from the content-addressed store, hash-verified

421 * Get fd from file vnode.
422 */
423static int _ipc_msg_fd_new(void *file)
424{
425 int fd;
426 struct dfs_file *d;
427 struct dfs_file *df = RT_NULL;
428
429 if (file == RT_NULL)
430 {
431 return -1;
432 }
433
434 df = (struct dfs_file *)file;
435
436 fd = fd_new();
437 if (fd < 0)
438 {
439 return -1;
440 }
441
442 d = fd_get(fd);
443 if (!d)
444 {
445 fd_release(fd);
446 return -1;
447 }
448
449 d->vnode = df->vnode;
450 d->flags = df->flags;
451 d->data = df->data;
452 d->magic = df->magic;
453
454#ifdef RT_USING_DFS_V2
455 d->fops = df->fops;
456 d->mode = df->mode;
457 d->dentry = df->dentry;
458 if (d->dentry)
459 rt_atomic_add(&(d->dentry->ref_count), 1);
460
461 if (d->vnode)
462 rt_atomic_add(&(d->vnode->ref_count), 1);
463#else
464 if (d->vnode)
465 d->vnode->ref_count++;
466#endif
467
468 return fd;
469}
470
471static rt_err_t _do_send_recv_timeout(rt_channel_t ch, rt_channel_msg_t data, int need_reply, rt_channel_msg_t data_ret, rt_int32_t time, rt_ipc_msg_t msg);
472

Callers 1

Calls 3

fd_newFunction · 0.50
fd_getFunction · 0.50
fd_releaseFunction · 0.50

Tested by

no test coverage detected