Prechádzať zdrojové kódy

LibGUI+FileManager: Try better to detect executables

We will now consider a file to be an executable if any of the executable
permission bits are set.
Sergey Bugaev 5 rokov pred
rodič
commit
f9b4d981a8

+ 3 - 2
Applications/FileManager/DirectoryView.cpp

@@ -68,8 +68,9 @@ void DirectoryView::handle_activation(const GModelIndex& index)
         return;
     }
 
-    // FIXME: This doesn't seem like the right way to fully detect executability.
-    if (st.st_mode & S_IXUSR) {
+    ASSERT(!S_ISLNK(st.st_mode));
+
+    if (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
         if (fork() == 0) {
             int rc = execl(path.characters(), path.characters(), nullptr);
             if (rc < 0)

+ 1 - 1
Libraries/LibGUI/GFileSystemModel.cpp

@@ -415,7 +415,7 @@ GIcon GFileSystemModel::icon_for_file(const mode_t mode, const String& name) con
         return m_symlink_icon;
     if (S_ISSOCK(mode))
         return m_socket_icon;
-    if (mode & S_IXUSR)
+    if (mode & (S_IXUSR | S_IXGRP | S_IXOTH))
         return m_executable_icon;
     if (name.to_lowercase().ends_with(".wav"))
         return m_filetype_sound_icon;

+ 1 - 1
Libraries/LibGUI/GFileSystemModel.h

@@ -73,7 +73,7 @@ public:
 
         mutable RefPtr<GraphicsBitmap> thumbnail;
         bool is_directory() const { return S_ISDIR(mode); }
-        bool is_executable() const { return mode & S_IXUSR; }
+        bool is_executable() const { return mode & (S_IXUSR | S_IXGRP | S_IXOTH); }
 
         String full_path(const GFileSystemModel&) const;