You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ar...@apache.org on 2021/01/13 08:39:54 UTC

[incubator-nuttx] 02/02: fs: Remove fs_dupfd and fs_dupfd2 internal functions

This is an automated email from the ASF dual-hosted git repository.

archer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit e49bae1300e7b34f11278f492a91746c4154b8c2
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Sun Jan 3 01:50:00 2021 +0800

    fs: Remove fs_dupfd and fs_dupfd2 internal functions
    
    let's call either nx_dup/nx_dup2 or file_dup/file_dup2
    instead just like other fs api: xxx->nx_xxx->file_xxx
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: I1aacfb9e25dc7b3fcb0345ff7b269b1953a01e5b
---
 fs/inode/fs_files.c                |  96 +-------------------------------
 fs/inode/inode.h                   |   4 +-
 fs/vfs/Make.defs                   |   2 +-
 fs/vfs/fs_dup.c                    |  60 ++++++++++++++++++--
 fs/vfs/fs_dup2.c                   |  94 ++++++++++++++++++++++++++++++-
 fs/vfs/fs_dupfd.c                  | 111 -------------------------------------
 fs/vfs/fs_dupfd2.c                 |  68 -----------------------
 include/nuttx/fs/fs.h              |  39 +------------
 sched/group/group_setupidlefiles.c |   4 +-
 9 files changed, 158 insertions(+), 320 deletions(-)

diff --git a/fs/inode/fs_files.c b/fs/inode/fs_files.c
index 5298018..62682e7 100644
--- a/fs/inode/fs_files.c
+++ b/fs/inode/fs_files.c
@@ -117,98 +117,6 @@ void files_releaselist(FAR struct filelist *list)
 }
 
 /****************************************************************************
- * Name: file_dup2
- *
- * Description:
- *   Assign an inode to a specific files structure.  This is the heart of
- *   dup2.
- *
- *   Equivalent to the non-standard fs_dupfd2() function except that it
- *   accepts struct file instances instead of file descriptors and it does
- *   not set the errno variable.
- *
- * Returned Value:
- *   Zero (OK) is returned on success; a negated errno value is return on
- *   any failure.
- *
- ****************************************************************************/
-
-int file_dup2(FAR struct file *filep1, FAR struct file *filep2)
-{
-  FAR struct inode *inode;
-  struct file temp;
-  int ret;
-
-  if (filep1 == NULL || filep1->f_inode == NULL || filep2 == NULL)
-    {
-      return -EBADF;
-    }
-
-  if (filep1 == filep2)
-    {
-      return OK;
-    }
-
-  /* Increment the reference count on the contained inode */
-
-  inode = filep1->f_inode;
-  ret   = inode_addref(inode);
-  if (ret < 0)
-    {
-      return ret;
-    }
-
-  /* Then clone the file structure */
-
-  temp.f_oflags = filep1->f_oflags;
-  temp.f_pos    = filep1->f_pos;
-  temp.f_inode  = inode;
-  temp.f_priv   = NULL;
-
-  /* Call the open method on the file, driver, mountpoint so that it
-   * can maintain the correct open counts.
-   */
-
-  if (inode->u.i_ops && inode->u.i_ops->open)
-    {
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-      if (INODE_IS_MOUNTPT(inode))
-        {
-          /* Dup the open file on the in the new file structure */
-
-          ret = inode->u.i_mops->dup(filep1, &temp);
-        }
-      else
-#endif
-        {
-          /* (Re-)open the pseudo file or device driver */
-
-          ret = inode->u.i_ops->open(&temp);
-        }
-
-      /* Handle open failures */
-
-      if (ret < 0)
-        {
-          inode_release(inode);
-          return ret;
-        }
-    }
-
-  /* If there is already an inode contained in the new file structure,
-   * close the file and release the inode.
-   */
-
-  ret = file_close(filep2);
-  DEBUGASSERT(ret == 0);
-
-  /* Return the file structure */
-
-  memcpy(filep2, &temp, sizeof(temp));
-  return OK;
-}
-
-/****************************************************************************
  * Name: files_allocate
  *
  * Description:
@@ -255,7 +163,7 @@ int files_allocate(FAR struct inode *inode, int oflags, off_t pos,
 }
 
 /****************************************************************************
- * Name: files_dupfd2
+ * Name: files_dup2
  *
  * Description:
  *   Clone a file descriptor to a specific descriptor number.
@@ -266,7 +174,7 @@ int files_allocate(FAR struct inode *inode, int oflags, off_t pos,
  *
  ****************************************************************************/
 
-int files_dupfd2(int fd1, int fd2)
+int files_dup2(int fd1, int fd2)
 {
   FAR struct filelist *list;
   int ret;
diff --git a/fs/inode/inode.h b/fs/inode/inode.h
index f2c696e..07681e9 100644
--- a/fs/inode/inode.h
+++ b/fs/inode/inode.h
@@ -390,7 +390,7 @@ int files_allocate(FAR struct inode *inode, int oflags, off_t pos,
                    FAR void *priv, int minfd);
 
 /****************************************************************************
- * Name: files_dupfd2
+ * Name: files_dup2
  *
  * Description:
  *   Clone a file descriptor to a specific descriptor number.
@@ -401,7 +401,7 @@ int files_allocate(FAR struct inode *inode, int oflags, off_t pos,
  *
  ****************************************************************************/
 
-int files_dupfd2(int fd1, int fd2);
+int files_dup2(int fd1, int fd2);
 
 /****************************************************************************
  * Name: files_close
diff --git a/fs/vfs/Make.defs b/fs/vfs/Make.defs
index 8a664be..3b92ef6 100644
--- a/fs/vfs/Make.defs
+++ b/fs/vfs/Make.defs
@@ -35,7 +35,7 @@
 
 # Common file/socket descriptor support
 
-CSRCS += fs_close.c fs_dup.c fs_dup2.c fs_fcntl.c fs_dupfd.c fs_dupfd2.c
+CSRCS += fs_close.c fs_dup.c fs_dup2.c fs_fcntl.c
 CSRCS += fs_epoll.c fs_fstat.c fs_fstatfs.c fs_getfilep.c fs_ioctl.c
 CSRCS += fs_lseek.c fs_mkdir.c fs_open.c fs_poll.c  fs_read.c fs_rename.c
 CSRCS += fs_rmdir.c fs_statfs.c fs_stat.c fs_select.c fs_unlink.c fs_write.c
diff --git a/fs/vfs/fs_dup.c b/fs/vfs/fs_dup.c
index 5848877..2dd3d55 100644
--- a/fs/vfs/fs_dup.c
+++ b/fs/vfs/fs_dup.c
@@ -51,6 +51,47 @@
  ****************************************************************************/
 
 /****************************************************************************
+ * Name: file_dup
+ *
+ * Description:
+ *   Equivalent to the standard dup() function except that it
+ *   accepts a struct file instance instead of a file descriptor.
+ *
+ * Returned Value:
+ *   The new file descriptor is returned on success; a negated errno value
+ *   is returned on any failure.
+ *
+ ****************************************************************************/
+
+int file_dup(FAR struct file *filep, int minfd)
+{
+  struct file filep2;
+  int fd2;
+  int ret;
+
+  /* Let file_dup2() do the real work */
+
+  memset(&filep2, 0, sizeof(filep2));
+  ret = file_dup2(filep, &filep2);
+  if (ret < 0)
+    {
+      return ret;
+    }
+
+  /* Then allocate a new file descriptor for the inode */
+
+  fd2 = files_allocate(filep2.f_inode, filep2.f_oflags,
+                       filep2.f_pos, filep2.f_priv, minfd);
+  if (fd2 < 0)
+    {
+      file_close(&filep2);
+      return fd2;
+    }
+
+  return fd2;
+}
+
+/****************************************************************************
  * Name: nx_dup
  *
  * Description:
@@ -74,11 +115,22 @@ int nx_dup(int fd)
 
   if (fd < CONFIG_NFILE_DESCRIPTORS)
     {
-      /* Its a valid file descriptor.. dup the file descriptor using any
-       * other file descriptor.
-       */
+      FAR struct file *filep;
+      int ret;
+
+      /* Get the file structure corresponding to the file descriptor. */
+
+      ret = fs_getfilep(fd, &filep);
+      if (ret < 0)
+        {
+          return ret;
+        }
+
+      DEBUGASSERT(filep != NULL);
+
+      /* Let file_dup() do the real work */
 
-      return fs_dupfd(fd, 0);
+      return file_dup(filep, 0);
     }
   else
     {
diff --git a/fs/vfs/fs_dup2.c b/fs/vfs/fs_dup2.c
index 33ccf8f..c59b04a 100644
--- a/fs/vfs/fs_dup2.c
+++ b/fs/vfs/fs_dup2.c
@@ -51,6 +51,98 @@
  ****************************************************************************/
 
 /****************************************************************************
+ * Name: file_dup2
+ *
+ * Description:
+ *   Assign an inode to a specific files structure.  This is the heart of
+ *   dup2.
+ *
+ *   Equivalent to the non-standard dup2() function except that it
+ *   accepts struct file instances instead of file descriptors and it does
+ *   not set the errno variable.
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; a negated errno value is return on
+ *   any failure.
+ *
+ ****************************************************************************/
+
+int file_dup2(FAR struct file *filep1, FAR struct file *filep2)
+{
+  FAR struct inode *inode;
+  struct file temp;
+  int ret;
+
+  if (filep1 == NULL || filep1->f_inode == NULL || filep2 == NULL)
+    {
+      return -EBADF;
+    }
+
+  if (filep1 == filep2)
+    {
+      return OK;
+    }
+
+  /* Increment the reference count on the contained inode */
+
+  inode = filep1->f_inode;
+  ret   = inode_addref(inode);
+  if (ret < 0)
+    {
+      return ret;
+    }
+
+  /* Then clone the file structure */
+
+  temp.f_oflags = filep1->f_oflags;
+  temp.f_pos    = filep1->f_pos;
+  temp.f_inode  = inode;
+  temp.f_priv   = NULL;
+
+  /* Call the open method on the file, driver, mountpoint so that it
+   * can maintain the correct open counts.
+   */
+
+  if (inode->u.i_ops && inode->u.i_ops->open)
+    {
+#ifndef CONFIG_DISABLE_MOUNTPOINT
+      if (INODE_IS_MOUNTPT(inode))
+        {
+          /* Dup the open file on the in the new file structure */
+
+          ret = inode->u.i_mops->dup(filep1, &temp);
+        }
+      else
+#endif
+        {
+          /* (Re-)open the pseudo file or device driver */
+
+          ret = inode->u.i_ops->open(&temp);
+        }
+
+      /* Handle open failures */
+
+      if (ret < 0)
+        {
+          inode_release(inode);
+          return ret;
+        }
+    }
+
+  /* If there is already an inode contained in the new file structure,
+   * close the file and release the inode.
+   */
+
+  ret = file_close(filep2);
+  DEBUGASSERT(ret == 0);
+
+  /* Return the file structure */
+
+  memcpy(filep2, &temp, sizeof(temp));
+  return OK;
+}
+
+/****************************************************************************
  * Name: nx_dup2
  *
  * Description:
@@ -98,7 +190,7 @@ int nx_dup2(int fd1, int fd2)
       /* Its a valid file descriptor.. dup the file descriptor.
        */
 
-      return fs_dupfd2(fd1, fd2);
+      return files_dup2(fd1, fd2);
     }
 }
 
diff --git a/fs/vfs/fs_dupfd.c b/fs/vfs/fs_dupfd.c
deleted file mode 100644
index fdf73d9..0000000
--- a/fs/vfs/fs_dupfd.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
- * fs/vfs/fs_dupfd.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sched.h>
-#include <errno.h>
-#include <assert.h>
-
-#include <nuttx/fs/fs.h>
-
-#include "inode/inode.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: file_dup
- *
- * Description:
- *   Equivalent to the non-standard fs_dupfd() function except that it
- *   accepts a struct file instance instead of a file descriptor.
- *
- * Returned Value:
- *   The new file descriptor is returned on success; a negated errno value
- *   is returned on any failure.
- *
- ****************************************************************************/
-
-int file_dup(FAR struct file *filep, int minfd)
-{
-  struct file filep2;
-  int fd2;
-  int ret;
-
-  /* Let file_dup2() do the real work */
-
-  memset(&filep2, 0, sizeof(filep2));
-  ret = file_dup2(filep, &filep2);
-  if (ret < 0)
-    {
-      return ret;
-    }
-
-  /* Then allocate a new file descriptor for the inode */
-
-  fd2 = files_allocate(filep2.f_inode, filep2.f_oflags,
-                       filep2.f_pos, filep2.f_priv, minfd);
-  if (fd2 < 0)
-    {
-      file_close(&filep2);
-      return fd2;
-    }
-
-  return fd2;
-}
-
-/****************************************************************************
- * Name: fs_dupfd
- *
- * Description:
- *   Clone a file descriptor 'fd' to an arbitrary descriptor number (any
- *   value greater than or equal to 'minfd').
- *
- * Returned Value:
- *   The new file descriptor is returned on success; a negated errno value
- *   is returned on any failure.
- *
- ****************************************************************************/
-
-int fs_dupfd(int fd, int minfd)
-{
-  FAR struct file *filep;
-  int ret;
-
-  /* Get the file structure corresponding to the file descriptor. */
-
-  ret = fs_getfilep(fd, &filep);
-  if (ret < 0)
-    {
-      return ret;
-    }
-
-  DEBUGASSERT(filep != NULL);
-
-  /* Let file_dup() do the real work */
-
-  return file_dup(filep, minfd);
-}
diff --git a/fs/vfs/fs_dupfd2.c b/fs/vfs/fs_dupfd2.c
deleted file mode 100644
index 68fcc54..0000000
--- a/fs/vfs/fs_dupfd2.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
- * fs/vfs/fs_dupfd2.c
- *
- *   Copyright (C) 2007-2009, 2011-2014, 2017 Gregory Nutt. All rights
- *     reserved.
- *   Author: Gregory Nutt <gn...@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- *    used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <unistd.h>
-#include <sched.h>
-#include <errno.h>
-
-#include "inode/inode.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: fs_dupfd2
- *
- * Description:
- *   Clone a file descriptor to a specific descriptor number.
- *
- * Returned Value:
- *   Zero (OK) is returned on success; a negated errno value is return on
- *   any failure.
- *
- ****************************************************************************/
-
-int fs_dupfd2(int fd1, int fd2)
-{
-  return files_dupfd2(fd1, fd2);
-}
diff --git a/include/nuttx/fs/fs.h b/include/nuttx/fs/fs.h
index 5087ee9..4bba51a 100644
--- a/include/nuttx/fs/fs.h
+++ b/include/nuttx/fs/fs.h
@@ -714,7 +714,7 @@ void files_releaselist(FAR struct filelist *list);
  * Name: file_dup
  *
  * Description:
- *   Equivalent to the non-standard fs_dupfd() function except that it
+ *   Equivalent to the standard dup() function except that it
  *   accepts a struct file instance instead of a file descriptor.
  *
  * Returned Value:
@@ -726,24 +726,6 @@ void files_releaselist(FAR struct filelist *list);
 int file_dup(FAR struct file *filep, int minfd);
 
 /****************************************************************************
- * Name: fs_dupfd
- *
- * Description:
- *   Clone a file descriptor 'fd' to an arbitrary descriptor number (any
- *   value greater than or equal to 'minfd').
- *
- *   This alternative naming is used when dup could operate on both file and
- *   socket descriptors to avoid drawing unused socket support into the link.
- *
- * Returned Value:
- *   Zero (OK) is returned on success; a negated errno value is returned on
- *   any failure.
- *
- ****************************************************************************/
-
-int fs_dupfd(int fd, int minfd);
-
-/****************************************************************************
  * Name: nx_dup
  *
  * Description:
@@ -768,7 +750,7 @@ int nx_dup(int fd);
  *   Assign an inode to a specific files structure.  This is the heart of
  *   dup2.
  *
- *   Equivalent to the non-standard fs_dupfd2() function except that it
+ *   Equivalent to the non-standard dup2() function except that it
  *   accepts struct file instances instead of file descriptors.
  *
  * Returned Value:
@@ -780,23 +762,6 @@ int nx_dup(int fd);
 int file_dup2(FAR struct file *filep1, FAR struct file *filep2);
 
 /****************************************************************************
- * Name: fs_dupfd2
- *
- * Description:
- *   Clone a file descriptor to a specific descriptor number.
- *
- *   This alternative naming is used when dup2 could operate on both file and
- *   socket descriptors to avoid drawing unused socket support into the link.
- *
- * Returned Value:
- *   Zero (OK) is returned on success; a negated errno value is return on
- *   any failure.
- *
- ****************************************************************************/
-
-int fs_dupfd2(int fd1, int fd2);
-
-/****************************************************************************
  * Name: nx_dup2
  *
  * Description:
diff --git a/sched/group/group_setupidlefiles.c b/sched/group/group_setupidlefiles.c
index b1a0a9d..ff8e8c5 100644
--- a/sched/group/group_setupidlefiles.c
+++ b/sched/group/group_setupidlefiles.c
@@ -101,8 +101,8 @@ int group_setupidlefiles(FAR struct task_tcb_s *tcb)
     {
       /* Successfully opened /dev/console as stdin (fd == 0) */
 
-      fs_dupfd2(0, 1);
-      fs_dupfd2(0, 2);
+      nx_dup2(0, 1);
+      nx_dup2(0, 2);
     }
   else
     {