You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2020/09/22 22:05:22 UTC

[incubator-nuttx] 02/02: Revert "s/dirent: Corrects a problem with opendir() noted by Petteri Aimonen in Bitbucket Issue 132: "opendir() fails for FAT filesystem with trailing slash in path":"

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

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

commit de45e8647a68f5ba7afac563658a6cd297ce1b93
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Tue Sep 22 14:54:59 2020 +0800

    Revert "s/dirent:  Corrects a problem with opendir() noted by Petteri Aimonen in Bitbucket Issue 132: "opendir() fails for FAT filesystem with trailing slash in path":"
    
    because:
    1.The name of directory may terminated by the whitespace
    2.inode_search can handle the trailing '/' correctly
    3.Let fix the issue in FAT filesystem instead
    
    This reverts commit 97b0235d77ff4ee7c8eb5288b2a001a1d12bf707.
---
 fs/dirent/fs_opendir.c | 64 +-------------------------------------------------
 1 file changed, 1 insertion(+), 63 deletions(-)

diff --git a/fs/dirent/fs_opendir.c b/fs/dirent/fs_opendir.c
index 9082aa4..687cc12 100644
--- a/fs/dirent/fs_opendir.c
+++ b/fs/dirent/fs_opendir.c
@@ -26,7 +26,6 @@
 
 #include <stdbool.h>
 #include <string.h>
-#include <ctype.h>
 #include <dirent.h>
 #include <assert.h>
 #include <errno.h>
@@ -217,52 +216,8 @@ FAR DIR *opendir(FAR const char *path)
 #ifndef CONFIG_DISABLE_MOUNTPOINT
   FAR const char *relpath = NULL;
 #endif
-  FAR char *alloc = NULL;
-  int len;
   int ret;
 
-  /* Strip off any trailing whitespace or '/' characters.  In this case we
-   * must make a copy of the user string so we can chop off bytes on the
-   * 'right' without modifying the user's const string.
-   */
-
-  if (path != NULL)
-    {
-      /* Length of the string excludes NUL terminator */
-
-      len = strlen(path);
-
-      /* Check for whitespace or a dangling '/' at the end of the string.
-       * But don't muck with the string any further if it has been reduced
-       * to "/"
-       */
-
-      while (len > 0 && strcmp(path, "/") != 0 &&
-             (isspace(path[len - 1]) || path[len - 1] == '/'))
-        {
-          /* Have we already allocated memory for the modified string? */
-
-          if (alloc == NULL)
-            {
-              alloc = strdup(path); /* Allocates one too many bytes */
-              if (alloc == NULL)
-                {
-                  ret = ENOMEM;
-                  goto errout;
-                }
-
-              /* Use the cloned, writable string instead of the user string */
-
-              path = alloc;
-            }
-
-          /* Chop off the final character */
-
-          len--;
-          alloc[len] = '\0';
-        }
-    }
-
   /* If we are given 'nothing' then we will interpret this as
    * request for the root inode.
    */
@@ -273,7 +228,7 @@ FAR DIR *opendir(FAR const char *path)
   if (ret < 0)
     {
       ret = -ret;
-      goto errout_with_alloc;
+      goto errout;
     }
 
   /* We don't know what to do with relative paths */
@@ -375,14 +330,6 @@ FAR DIR *opendir(FAR const char *path)
 
   RELEASE_SEARCH(&desc);
   inode_semgive();
-
-  /* Free any allocated string memory */
-
-  if (alloc != NULL)
-    {
-      kmm_free(alloc);
-    }
-
   return ((FAR DIR *)dir);
 
   /* Nasty goto's make error handling simpler */
@@ -394,15 +341,6 @@ errout_with_semaphore:
   RELEASE_SEARCH(&desc);
   inode_semgive();
 
-errout_with_alloc:
-
-  /* Free any allocated string memory */
-
-  if (alloc != NULL)
-    {
-      kmm_free(alloc);
-    }
-
 errout:
   set_errno(ret);
   return NULL;