mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-09 20:35:49 +01:00
fileinfo: mark lost+found/ root directory as hidden
This was reported in bug 689800. https://bugzilla.gnome.org/show_bug.cgi?id=689800 Signed-off-by: David Zeuthen <zeuthen@gmail.com>
This commit is contained in:
parent
510ba9b4ef
commit
d77948eadf
@ -1806,6 +1806,46 @@ _g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef G_OS_UNIX
|
||||||
|
gboolean
|
||||||
|
_g_local_file_is_lost_found_dir (const char *path, dev_t path_dev)
|
||||||
|
{
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
gchar *mount_dir = NULL;
|
||||||
|
size_t mount_dir_len;
|
||||||
|
GStatBuf statbuf;
|
||||||
|
|
||||||
|
if (!g_str_has_suffix (path, "/lost+found"))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
mount_dir = find_mountpoint_for (path, path_dev);
|
||||||
|
if (mount_dir == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
mount_dir_len = strlen (mount_dir);
|
||||||
|
/* We special-case rootfs ('/') since it's the only case where
|
||||||
|
* mount_dir ends in '/'
|
||||||
|
*/
|
||||||
|
if (mount_dir_len == 1)
|
||||||
|
mount_dir_len--;
|
||||||
|
if (mount_dir_len + strlen ("/lost+found") != strlen (path))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (g_lstat (path, &statbuf) != 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!(S_ISDIR (statbuf.st_mode) &&
|
||||||
|
statbuf.st_uid == 0 &&
|
||||||
|
statbuf.st_gid == 0))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_free (mount_dir);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
g_local_file_trash (GFile *file,
|
g_local_file_trash (GFile *file,
|
||||||
|
@ -1782,6 +1782,11 @@ _g_local_file_info_get (const char *basename,
|
|||||||
if (stat_ok)
|
if (stat_ok)
|
||||||
set_info_from_stat (info, &statbuf, attribute_matcher);
|
set_info_from_stat (info, &statbuf, attribute_matcher);
|
||||||
|
|
||||||
|
#ifdef G_OS_UNIX
|
||||||
|
if (stat_ok && _g_local_file_is_lost_found_dir (path, statbuf.st_dev))
|
||||||
|
g_file_info_set_is_hidden (info, TRUE);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
#ifndef G_OS_WIN32
|
||||||
if (basename != NULL &&
|
if (basename != NULL &&
|
||||||
(basename[0] == '.' ||
|
(basename[0] == '.' ||
|
||||||
|
@ -58,6 +58,10 @@ typedef struct
|
|||||||
|
|
||||||
gboolean _g_local_file_has_trash_dir (const char *dirname,
|
gboolean _g_local_file_has_trash_dir (const char *dirname,
|
||||||
dev_t dir_dev);
|
dev_t dir_dev);
|
||||||
|
#ifdef G_OS_UNIX
|
||||||
|
gboolean _g_local_file_is_lost_found_dir (const char *path,
|
||||||
|
dev_t path_dev);
|
||||||
|
#endif
|
||||||
void _g_local_file_info_get_parent_info (const char *dir,
|
void _g_local_file_info_get_parent_info (const char *dir,
|
||||||
GFileAttributeMatcher *attribute_matcher,
|
GFileAttributeMatcher *attribute_matcher,
|
||||||
GLocalParentFileInfo *parent_info);
|
GLocalParentFileInfo *parent_info);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user