OSDN Git Service

avoid stat() in QFileSystemEngine::currentPath()
authorIvailo Monev <xakepa10@laimg.moc>
Thu, 19 Dec 2019 00:13:38 +0000 (00:13 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Thu, 19 Dec 2019 00:13:38 +0000 (00:13 +0000)
both get_current_dir_name() and getcwd() do it internally, atleast in glibc

Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
src/core/io/qfilesystemengine_unix.cpp

index d3d458c..116d9db 100644 (file)
@@ -518,29 +518,27 @@ bool QFileSystemEngine::setCurrentPath(const QFileSystemEntry &path)
 QFileSystemEntry QFileSystemEngine::currentPath()
 {
     QFileSystemEntry result;
-    QT_STATBUF st;
-    if (QT_STAT(".", &st) == 0) {
 #if defined(__GLIBC__)
-        char *currentName = ::get_current_dir_name();
-        if (currentName) {
-            result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
-            ::free(currentName);
-        }
+#define GETCWDFUNCNAME get_current_dir_name
+    char *currentName = ::get_current_dir_name();
+    if (currentName) {
+        result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
+        ::free(currentName);
+    }
 #else
-        char currentName[PATH_MAX+1];
-        if (::getcwd(currentName, PATH_MAX)) {
-            result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
-        }
-# if defined(QT_DEBUG)
-        if (result.isEmpty())
-            qWarning("QFSFileEngine::currentPath: getcwd() failed");
-# endif
-#endif
-    } else {
-# if defined(QT_DEBUG)
-        qWarning("QFSFileEngine::currentPath: stat(\".\") failed");
-# endif
+#define GETCWDFUNCNAME getcwd
+    char currentName[PATH_MAX+1];
+    if (::getcwd(currentName, PATH_MAX)) {
+        result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
     }
+#endif // __GLIBC__
+
+#ifndef QT_NO_DEBUG
+    if (result.isEmpty())
+        qWarning("QFSFileEngine::currentPath: " GETCWDFUNCNAME "() failed");
+#endif
+#undef GETCWDFUNCNAME
+
     return result;
 }
 QT_END_NAMESPACE