fs/fs_dup2: correct check before dup

Change-Id: I2387ab447f0d8ed9429960922a72de35b2730acb
Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
Jiuzhu Dong 2021-03-22 15:08:39 +08:00 committed by Xiang Xiao
parent f57ba35151
commit 554310bd78
1 changed files with 10 additions and 3 deletions

View File

@ -88,14 +88,17 @@ int file_dup2(FAR struct file *filep1, FAR struct file *filep2)
* can maintain the correct open counts. * can maintain the correct open counts.
*/ */
if (inode->u.i_ops && inode->u.i_ops->open) if (inode->u.i_ops)
{ {
#ifndef CONFIG_DISABLE_MOUNTPOINT #ifndef CONFIG_DISABLE_MOUNTPOINT
if (INODE_IS_MOUNTPT(inode)) if (INODE_IS_MOUNTPT(inode))
{ {
/* Dup the open file on the in the new file structure */ /* Dup the open file on the in the new file structure */
ret = inode->u.i_mops->dup(filep1, &temp); if (inode->u.i_mops->dup)
{
ret = inode->u.i_mops->dup(filep1, &temp);
}
} }
else else
#endif #endif
@ -103,7 +106,11 @@ int file_dup2(FAR struct file *filep1, FAR struct file *filep2)
/* (Re-)open the pseudo file or device driver */ /* (Re-)open the pseudo file or device driver */
temp.f_priv = filep1->f_priv; temp.f_priv = filep1->f_priv;
ret = inode->u.i_ops->open(&temp);
if (inode->u.i_ops->open)
{
ret = inode->u.i_ops->open(&temp);
}
} }
/* Handle open failures */ /* Handle open failures */