X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fglocalfileinfo.c;h=7c46837cee5689294bbc76cadb109b3b1e965b06;hb=7103484017ff000d01ed94567539d37fa09b32b2;hp=92bd35fac1a5a10f40a31be996de0fa09a1b7528;hpb=3902006a5b043ad418ff5ee1542d54c678280db8;p=platform%2Fupstream%2Fglib.git
diff --git a/gio/glocalfileinfo.c b/gio/glocalfileinfo.c
index 92bd35f..7c46837 100644
--- a/gio/glocalfileinfo.c
+++ b/gio/glocalfileinfo.c
@@ -15,30 +15,25 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see .
*
* Author: Alexander Larsson
*/
#include "config.h"
+#include
+
#ifdef HAVE_SYS_TIME_H
#include
#endif
#include
#include
#include
-#ifdef HAVE_UNISTD_H
-#include
-#endif
#include
#include
-#ifdef HAVE_GRP_H
+#ifdef G_OS_UNIX
#include
-#endif
-#ifdef HAVE_PWD_H
#include
#endif
#ifdef HAVE_SELINUX
@@ -62,11 +57,13 @@
#include
#include
-#ifndef G_OS_WIN32
+#ifdef G_OS_UNIX
+#include
#include "glib-unix.h"
#include "glib-private.h"
#endif
-#include "glibintl.h"
+
+#include "thumbnail-verify.h"
#ifdef G_OS_WIN32
#include
@@ -95,6 +92,7 @@
#include "gioerror.h"
#include "gthemedicon.h"
#include "gcontenttypeprivate.h"
+#include "glibintl.h"
struct ThumbMD5Context {
@@ -664,6 +662,7 @@ get_xattrs_from_fd (int fd,
g_free (escaped_attr);
get_one_xattr_from_fd (fd, info, gio_attr, attr);
+ g_free (gio_attr);
}
len = strlen (attr) + 1;
@@ -1098,6 +1097,7 @@ lookup_uid_data (uid_t uid)
if (pwbufp->pw_name != NULL && pwbufp->pw_name[0] != 0)
data->user_name = convert_pwd_string_to_utf8 (pwbufp->pw_name);
+#ifndef __BIONIC__
gecos = pwbufp->pw_gecos;
if (gecos)
@@ -1107,6 +1107,7 @@ lookup_uid_data (uid_t uid)
*comma = 0;
data->real_name = convert_pwd_string_to_utf8 (gecos);
}
+#endif
}
/* Default fallbacks */
@@ -1276,9 +1277,11 @@ get_content_type (const char *basename,
}
+/* @stat_buf is the pre-calculated result of stat(path), or %NULL if that failed. */
static void
-get_thumbnail_attributes (const char *path,
- GFileInfo *info)
+get_thumbnail_attributes (const char *path,
+ GFileInfo *info,
+ const GLocalFileStat *stat_buf)
{
GChecksum *checksum;
char *uri;
@@ -1289,8 +1292,6 @@ get_thumbnail_attributes (const char *path,
checksum = g_checksum_new (G_CHECKSUM_MD5);
g_checksum_update (checksum, (const guchar *) uri, strlen (uri));
-
- g_free (uri);
basename = g_strconcat (g_checksum_get_string (checksum), ".png", NULL);
g_checksum_free (checksum);
@@ -1300,7 +1301,11 @@ get_thumbnail_attributes (const char *path,
NULL);
if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
- _g_file_info_set_attribute_byte_string_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_PATH, filename);
+ {
+ _g_file_info_set_attribute_byte_string_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_PATH, filename);
+ _g_file_info_set_attribute_boolean_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_IS_VALID,
+ thumbnail_verify (filename, uri, stat_buf));
+ }
else
{
g_free (filename);
@@ -1309,7 +1314,11 @@ get_thumbnail_attributes (const char *path,
NULL);
if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
- _g_file_info_set_attribute_byte_string_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_PATH, filename);
+ {
+ _g_file_info_set_attribute_byte_string_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_PATH, filename);
+ _g_file_info_set_attribute_boolean_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_IS_VALID,
+ thumbnail_verify (filename, uri, stat_buf));
+ }
else
{
g_free (filename);
@@ -1320,11 +1329,16 @@ get_thumbnail_attributes (const char *path,
NULL);
if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
- _g_file_info_set_attribute_boolean_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAILING_FAILED, TRUE);
+ {
+ _g_file_info_set_attribute_boolean_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAILING_FAILED, TRUE);
+ _g_file_info_set_attribute_boolean_by_id (info, G_FILE_ATTRIBUTE_ID_THUMBNAIL_IS_VALID,
+ thumbnail_verify (filename, uri, stat_buf));
+ }
}
}
g_free (basename);
g_free (filename);
+ g_free (uri);
}
#ifdef G_OS_WIN32
@@ -1441,7 +1455,7 @@ read_hidden_file (const gchar *dirname)
gchar *filename;
filename = g_build_path ("/", dirname, ".hidden", NULL);
- g_file_get_contents (filename, &contents, NULL, NULL);
+ (void) g_file_get_contents (filename, &contents, NULL, NULL);
g_free (filename);
if (contents != NULL)
@@ -1567,6 +1581,7 @@ _g_local_file_info_get_nostat (GFileInfo *info,
static const char *
get_icon_name (const char *path,
+ const char *content_type,
gboolean use_symbolic,
gboolean *with_fallbacks_out)
{
@@ -1611,6 +1626,10 @@ get_icon_name (const char *path,
{
name = use_symbolic ? "folder-videos-symbolic" : "folder-videos";
}
+ else if (g_strcmp0 (content_type, "inode/directory") == 0)
+ {
+ name = use_symbolic ? "folder-symbolic" : "folder";
+ }
else
{
name = NULL;
@@ -1625,14 +1644,13 @@ get_icon_name (const char *path,
static GIcon *
get_icon (const char *path,
const char *content_type,
- gboolean is_folder,
gboolean use_symbolic)
{
GIcon *icon = NULL;
const char *icon_name;
gboolean with_fallbacks;
- icon_name = get_icon_name (path, use_symbolic, &with_fallbacks);
+ icon_name = get_icon_name (path, content_type, use_symbolic, &with_fallbacks);
if (icon_name != NULL)
{
if (with_fallbacks)
@@ -1646,11 +1664,6 @@ get_icon (const char *path,
icon = g_content_type_get_symbolic_icon (content_type);
else
icon = g_content_type_get_icon (content_type);
-
- if (G_IS_THEMED_ICON (icon) && is_folder)
- {
- g_themed_icon_append_name (G_THEMED_ICON (icon), use_symbolic ? "folder-symbolic" : "folder");
- }
}
return icon;
@@ -1838,7 +1851,7 @@ _g_local_file_info_get (const char *basename,
GIcon *icon;
/* non symbolic icon */
- icon = get_icon (path, content_type, S_ISDIR (statbuf.st_mode), FALSE);
+ icon = get_icon (path, content_type, FALSE);
if (icon != NULL)
{
g_file_info_set_icon (info, icon);
@@ -1846,7 +1859,7 @@ _g_local_file_info_get (const char *basename,
}
/* symbolic icon */
- icon = get_icon (path, content_type, S_ISDIR (statbuf.st_mode), TRUE);
+ icon = get_icon (path, content_type, TRUE);
if (icon != NULL)
{
g_file_info_set_symbolic_icon (info, icon);
@@ -1933,7 +1946,12 @@ _g_local_file_info_get (const char *basename,
if (_g_file_attribute_matcher_matches_id (attribute_matcher,
G_FILE_ATTRIBUTE_ID_THUMBNAIL_PATH))
- get_thumbnail_attributes (path, info);
+ {
+ if (stat_ok)
+ get_thumbnail_attributes (path, info, &statbuf);
+ else
+ get_thumbnail_attributes (path, info, NULL);
+ }
vfs = g_vfs_get_default ();
class = G_VFS_GET_CLASS (vfs);
@@ -2136,7 +2154,7 @@ set_unix_mode (char *filename,
return TRUE;
}
-#ifdef HAVE_CHOWN
+#ifdef G_OS_UNIX
static gboolean
set_unix_uid_gid (char *filename,
const GFileAttributeValue *uid_value,
@@ -2420,7 +2438,7 @@ _g_local_file_info_set_attribute (char *filename,
if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_MODE) == 0)
return set_unix_mode (filename, flags, &value, error);
-#ifdef HAVE_CHOWN
+#ifdef G_OS_UNIX
else if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_UID) == 0)
return set_unix_uid_gid (filename, &value, NULL, flags, error);
else if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_GID) == 0)
@@ -2497,13 +2515,11 @@ _g_local_file_info_set_attributes (char *filename,
GError **error)
{
GFileAttributeValue *value;
-#ifdef HAVE_CHOWN
+#ifdef G_OS_UNIX
GFileAttributeValue *uid, *gid;
-#endif
#ifdef HAVE_UTIMES
GFileAttributeValue *mtime, *mtime_usec, *atime, *atime_usec;
#endif
-#if defined (HAVE_CHOWN) || defined (HAVE_UTIMES)
GFileAttributeStatus status;
#endif
gboolean res;
@@ -2533,7 +2549,7 @@ _g_local_file_info_set_attributes (char *filename,
}
#endif
-#ifdef HAVE_CHOWN
+#ifdef G_OS_UNIX
/* Group uid and gid setting into one call
* Change ownership before permissions, since ownership changes can
change permissions (e.g. setuid)