* @short_description: File Information and Attributes
* @include: gio/gio.h
* @see_also: #GFile, <link linkend="gio-GFileAttribute">GFileAttribute</link>
- *
+ *
* Functionality for manipulating basic metadata for files. #GFileInfo
- * implements methods for getting information that all files should
- * contain, and allows for manipulation of extended attributes.
+ * implements methods for getting information that all files should
+ * contain, and allows for manipulation of extended attributes.
*
* See <link linkend="gio-GFileAttribute">GFileAttribute</link> for more
* information on how GIO handles file attributes.
*
- * To obtain a #GFileInfo for a #GFile, use g_file_query_info() (or its
- * async variant). To obtain a #GFileInfo for a file input or output
- * stream, use g_file_input_stream_query_info() or
+ * To obtain a #GFileInfo for a #GFile, use g_file_query_info() (or its
+ * async variant). To obtain a #GFileInfo for a file input or output
+ * stream, use g_file_input_stream_query_info() or
* g_file_output_stream_query_info() (or their async variants).
*
- * To change the actual attributes of a file, you should then set the
- * attribute in the #GFileInfo and call g_file_set_attributes_from_info()
+ * To change the actual attributes of a file, you should then set the
+ * attribute in the #GFileInfo and call g_file_set_attributes_from_info()
* or g_file_set_attributes_async() on a GFile.
*
- * However, not all attributes can be changed in the file. For instance,
- * the actual size of a file cannot be changed via g_file_info_set_size().
- * You may call g_file_query_settable_attributes() and
- * g_file_query_writable_namespaces() to discover the settable attributes
+ * However, not all attributes can be changed in the file. For instance,
+ * the actual size of a file cannot be changed via g_file_info_set_size().
+ * You may call g_file_query_settable_attributes() and
+ * g_file_query_writable_namespaces() to discover the settable attributes
* of a particular file at runtime.
*
- * #GFileAttributeMatcher allows for searching through a #GFileInfo for
+ * #GFileAttributeMatcher allows for searching through a #GFileInfo for
* attributes.
**/
#include "gicon.h"
#include "glibintl.h"
-#include "gioalias.h"
/* We use this nasty thing, because NULL is a valid attribute matcher (matches nothing) */
#define NO_ATTRIBUTE_MASK ((GFileAttributeMatcher *)1)
REGISTER_ATTRIBUTE (MOUNTABLE_CAN_UNMOUNT);
REGISTER_ATTRIBUTE (MOUNTABLE_CAN_EJECT);
REGISTER_ATTRIBUTE (MOUNTABLE_UNIX_DEVICE);
+ REGISTER_ATTRIBUTE (MOUNTABLE_UNIX_DEVICE_FILE);
REGISTER_ATTRIBUTE (MOUNTABLE_HAL_UDI);
REGISTER_ATTRIBUTE (MOUNTABLE_CAN_START);
+ REGISTER_ATTRIBUTE (MOUNTABLE_CAN_START_DEGRADED);
REGISTER_ATTRIBUTE (MOUNTABLE_CAN_STOP);
REGISTER_ATTRIBUTE (MOUNTABLE_START_STOP_TYPE);
+ REGISTER_ATTRIBUTE (MOUNTABLE_CAN_POLL);
+ REGISTER_ATTRIBUTE (MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC);
REGISTER_ATTRIBUTE (TIME_MODIFIED);
REGISTER_ATTRIBUTE (TIME_MODIFIED_USEC);
REGISTER_ATTRIBUTE (TIME_ACCESS);
REGISTER_ATTRIBUTE (GVFS_BACKEND);
REGISTER_ATTRIBUTE (SELINUX_CONTEXT);
REGISTER_ATTRIBUTE (TRASH_ITEM_COUNT);
+ REGISTER_ATTRIBUTE (TRASH_ORIG_PATH);
+ REGISTER_ATTRIBUTE (TRASH_DELETION_DATE);
#undef REGISTER_ATTRIBUTE
}
attrs = (GFileAttribute *)info->attributes->data;
for (i = 0; i < info->attributes->len; i++)
_g_file_attribute_value_clear (&attrs[i].value);
- g_array_free (info->attributes, TRUE);
+ g_array_free (info->attributes, TRUE);
if (info->mask != NO_ATTRIBUTE_MASK)
g_file_attribute_matcher_unref (info->mask);
*
* Lists the file info structure's attributes.
*
- * Returns: a null-terminated array of strings of all of the
+ * Returns: (array zero-terminated=1) (transfer full): a null-terminated array of strings of all of the
* possible attribute types for the given @name_space, or
* %NULL on error.
**/
* g_file_info_get_attribute_data:
* @info: a #GFileInfo
* @attribute: a file attribute key
- * @type: return location for the attribute type, or %NULL
- * @value_pp: return location for the attribute value, or %NULL
- * @status: return location for the attribute status, or %NULL
+ * @type: (out) (allow-none): return location for the attribute type, or %NULL
+ * @value_pp: (out) (allow-none): return location for the attribute value, or %NULL
+ * @status: (out) (allow-none): return location for the attribute status, or %NULL
*
* Gets the attribute type, value and status for an attribute key.
*
- * Returns: %TRUE if @info has an attribute named @attribute,
+ * Returns: (transfer none): %TRUE if @info has an attribute named @attribute,
* %FALSE otherwise.
*/
gboolean
{
GFileAttributeValue *val;
- g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
- g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+ g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+ g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
val = g_file_info_find_value_by_name (info, attribute);
if (val)
* Gets the value of a #GObject attribute. If the attribute does
* not contain a #GObject, %NULL will be returned.
*
- * Returns: a #GObject associated with the given @attribute, or
+ * Returns: (transfer none): a #GObject associated with the given @attribute, or
* %NULL otherwise.
**/
GObject *
*
* Returns: the contents of the @attribute value as a stringv, or
* %NULL otherwise. Do not free.
+ *
+ * Since: 2.22
**/
char **
g_file_info_get_attribute_stringv (GFileInfo *info,
}
}
-static GFileAttributeValue *
-g_file_info_create_value_by_name (GFileInfo *info,
- const char *attribute)
+void
+_g_file_info_set_attribute_by_id (GFileInfo *info,
+ guint32 attribute,
+ GFileAttributeType type,
+ gpointer value_p)
{
- guint32 attr_id;
+ GFileAttributeValue *value;
- attr_id = lookup_attribute (attribute);
+ value = g_file_info_create_value (info, attribute);
- return g_file_info_create_value (info, attr_id);
+ if (value)
+ _g_file_attribute_value_set_from_pointer (value, type, value_p, TRUE);
}
/**
GFileAttributeType type,
gpointer value_p)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_by_id (info, lookup_attribute (attribute), type, value_p);
+}
+
+void
+_g_file_info_set_attribute_object_by_id (GFileInfo *info,
+ guint32 attribute,
+ GObject *attr_value)
+{
+ GFileAttributeValue *value;
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_from_pointer (value, type, value_p, TRUE);
+ _g_file_attribute_value_set_object (value, attr_value);
}
/**
const char *attribute,
GObject *attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
g_return_if_fail (G_IS_OBJECT (attr_value));
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_object_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_stringv_by_id (GFileInfo *info,
+ guint32 attribute,
+ char **attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_object (value, attr_value);
+ _g_file_attribute_value_set_stringv (value, attr_value);
}
/**
const char *attribute,
char **attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
g_return_if_fail (attr_value != NULL);
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_stringv_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_string_by_id (GFileInfo *info,
+ guint32 attribute,
+ const char *attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_stringv (value, attr_value);
+ _g_file_attribute_value_set_string (value, attr_value);
}
/**
const char *attribute,
const char *attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
g_return_if_fail (attr_value != NULL);
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_string_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_byte_string_by_id (GFileInfo *info,
+ guint32 attribute,
+ const char *attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_string (value, attr_value);
+ _g_file_attribute_value_set_byte_string (value, attr_value);
}
/**
const char *attribute,
const char *attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
g_return_if_fail (attr_value != NULL);
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_byte_string_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_boolean_by_id (GFileInfo *info,
+ guint32 attribute,
+ gboolean attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_byte_string (value, attr_value);
+ _g_file_attribute_value_set_boolean (value, attr_value);
}
/**
const char *attribute,
gboolean attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_boolean_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_uint32_by_id (GFileInfo *info,
+ guint32 attribute,
+ guint32 attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_boolean (value, attr_value);
+ _g_file_attribute_value_set_uint32 (value, attr_value);
}
/**
const char *attribute,
guint32 attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
- if (value)
- _g_file_attribute_value_set_uint32 (value, attr_value);
+ _g_file_info_set_attribute_uint32_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
}
+void
+_g_file_info_set_attribute_int32_by_id (GFileInfo *info,
+ guint32 attribute,
+ gint32 attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
+ if (value)
+ _g_file_attribute_value_set_int32 (value, attr_value);
+}
/**
* g_file_info_set_attribute_int32:
const char *attribute,
gint32 attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_int32_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_uint64_by_id (GFileInfo *info,
+ guint32 attribute,
+ guint64 attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_int32 (value, attr_value);
+ _g_file_attribute_value_set_uint64 (value, attr_value);
}
/**
const char *attribute,
guint64 attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
+ _g_file_info_set_attribute_uint64_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
+}
+
+void
+_g_file_info_set_attribute_int64_by_id (GFileInfo *info,
+ guint32 attribute,
+ gint64 attr_value)
+{
+ GFileAttributeValue *value;
+
+ value = g_file_info_create_value (info, attribute);
if (value)
- _g_file_attribute_value_set_uint64 (value, attr_value);
+ _g_file_attribute_value_set_int64 (value, attr_value);
}
/**
const char *attribute,
gint64 attr_value)
{
- GFileAttributeValue *value;
-
g_return_if_fail (G_IS_FILE_INFO (info));
g_return_if_fail (attribute != NULL && *attribute != '\0');
- value = g_file_info_create_value_by_name (info, attribute);
- if (value)
- _g_file_attribute_value_set_int64 (value, attr_value);
+ _g_file_info_set_attribute_int64_by_id (info,
+ lookup_attribute (attribute),
+ attr_value);
}
/* Helper getters */
*
* Gets the icon for a file.
*
- * Returns: #GIcon for the given @info.
+ * Returns: (transfer none): #GIcon for the given @info.
**/
GIcon *
g_file_info_get_icon (GFileInfo *info)
g_array_append_val (matcher->more_sub_matchers, s);
}
+GType
+g_file_attribute_matcher_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ GType g_define_type_id =
+ g_boxed_type_register_static (I_("GFileAttributeMatcher"),
+ (GBoxedCopyFunc) g_file_attribute_matcher_ref,
+ (GBoxedFreeFunc) g_file_attribute_matcher_unref);
+
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
/**
* g_file_attribute_matcher_new:
* @attributes: an attribute string to match.
return get_attribute_for_id (sub_matcher->id);
}
}
-
-#define __G_FILE_INFO_C__
-#include "gioaliasdef.c"