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 2021/06/24 12:21:09 UTC

[incubator-nuttx] 01/02: lic/libgen: Remove g_retchar from basename/dirname

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 5a6e08e2817c56c4b284c6266dffe195d835e48c
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Wed Jun 23 02:00:20 2021 +0800

    lic/libgen: Remove g_retchar from basename/dirname
    
    to avoid the race condtion
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: If55fba8eca7b98d6a8f0fb44393cf4858b9e9ae4
---
 libs/libc/libgen/lib_basename.c | 22 ++++------------------
 libs/libc/libgen/lib_dirname.c  | 27 ++++++---------------------
 2 files changed, 10 insertions(+), 39 deletions(-)

diff --git a/libs/libc/libgen/lib_basename.c b/libs/libc/libgen/lib_basename.c
index 797631b..6173775 100644
--- a/libs/libc/libgen/lib_basename.c
+++ b/libs/libc/libgen/lib_basename.c
@@ -28,12 +28,6 @@
 #include <libgen.h>
 
 /****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static char g_retchar[2];
-
-/****************************************************************************
  * Public Functions
  ****************************************************************************/
 
@@ -65,16 +59,14 @@ static char g_retchar[2];
 
 FAR char *basename(FAR char *path)
 {
-  char *p;
-  int   len;
-  int   ch;
+  FAR char *p;
+  int       len;
 
   /* Handle some corner cases */
 
   if (!path || *path == '\0')
     {
-      ch = '.';
-      goto out_retchar;
+      return ".";
     }
 
   /* Check for trailing slash characters */
@@ -91,8 +83,7 @@ FAR char *basename(FAR char *path)
         }
       else
         {
-          ch = '/';
-          goto out_retchar;
+          return "/";
         }
     }
 
@@ -109,9 +100,4 @@ FAR char *basename(FAR char *path)
   /* There is no '/' in the path */
 
   return path;
-
-out_retchar:
-  g_retchar[0] = ch;
-  g_retchar[1] = '\0';
-  return g_retchar;
 }
diff --git a/libs/libc/libgen/lib_dirname.c b/libs/libc/libgen/lib_dirname.c
index adee1ad..a48ebb6 100644
--- a/libs/libc/libgen/lib_dirname.c
+++ b/libs/libc/libgen/lib_dirname.c
@@ -28,12 +28,6 @@
 #include <libgen.h>
 
 /****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static char g_retchar[2];
-
-/****************************************************************************
  * Public Functions
  ****************************************************************************/
 
@@ -65,16 +59,14 @@ static char g_retchar[2];
 
 FAR char *dirname(FAR char *path)
 {
-  char *p;
-  int   len;
-  int   ch;
+  FAR char *p;
+  int       len;
 
   /* Handle some corner cases */
 
   if (!path || *path == '\0')
     {
-      ch = '.';
-      goto out_retchar;
+      return ".";
     }
 
   /* Check for trailing slash characters */
@@ -91,8 +83,7 @@ FAR char *dirname(FAR char *path)
         }
       else
         {
-          ch = '/';
-          goto out_retchar;
+          return "/";
         }
     }
 
@@ -109,8 +100,7 @@ FAR char *dirname(FAR char *path)
 
       if (p == path)
         {
-          ch = '/';
-          goto out_retchar;
+          return "/";
         }
 
       /* No, the directory component is the substring before the '/'. */
@@ -121,10 +111,5 @@ FAR char *dirname(FAR char *path)
 
   /* There is no '/' in the path */
 
-  ch = '.';
-
-out_retchar:
-  g_retchar[0] = ch;
-  g_retchar[1] = '\0';
-  return g_retchar;
+  return ".";
 }