mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-24 14:36:13 +01:00
Add string vector attribute type to GFileInfo
This is needed for the new metadata backend since nautilus has a string-list metadata type, and we want to use this for nautilus.
This commit is contained in:
parent
c1ab6454fe
commit
0ed9201ad2
@ -39,6 +39,7 @@ typedef struct {
|
||||
guint64 uint64;
|
||||
char *string;
|
||||
GObject *obj;
|
||||
char **stringv;
|
||||
} u;
|
||||
} GFileAttributeValue;
|
||||
|
||||
@ -60,6 +61,7 @@ gint32 _g_file_attribute_value_get_int32 (const GFileAttribu
|
||||
guint64 _g_file_attribute_value_get_uint64 (const GFileAttributeValue *attr);
|
||||
gint64 _g_file_attribute_value_get_int64 (const GFileAttributeValue *attr);
|
||||
GObject * _g_file_attribute_value_get_object (const GFileAttributeValue *attr);
|
||||
char ** _g_file_attribute_value_get_stringv (const GFileAttributeValue *attr);
|
||||
|
||||
void _g_file_attribute_value_set_from_pointer(GFileAttributeValue *attr,
|
||||
GFileAttributeType type,
|
||||
@ -81,6 +83,8 @@ void _g_file_attribute_value_set_int64 (GFileAttributeValu
|
||||
gint64 value);
|
||||
void _g_file_attribute_value_set_object (GFileAttributeValue *attr,
|
||||
GObject *obj);
|
||||
void _g_file_attribute_value_set_stringv (GFileAttributeValue *attr,
|
||||
char **value);
|
||||
|
||||
|
||||
GFileAttributeValue *_g_file_info_get_attribute_value (GFileInfo *info,
|
||||
|
@ -243,6 +243,9 @@ _g_file_attribute_value_clear (GFileAttributeValue *attr)
|
||||
attr->type == G_FILE_ATTRIBUTE_TYPE_BYTE_STRING)
|
||||
g_free (attr->u.string);
|
||||
|
||||
if (attr->type == G_FILE_ATTRIBUTE_TYPE_STRINGV)
|
||||
g_strfreev (attr->u.stringv);
|
||||
|
||||
if (attr->type == G_FILE_ATTRIBUTE_TYPE_OBJECT &&
|
||||
attr->u.obj != NULL)
|
||||
g_object_unref (attr->u.obj);
|
||||
@ -271,6 +274,9 @@ _g_file_attribute_value_set (GFileAttributeValue *attr,
|
||||
attr->type == G_FILE_ATTRIBUTE_TYPE_BYTE_STRING)
|
||||
attr->u.string = g_strdup (attr->u.string);
|
||||
|
||||
if (attr->type == G_FILE_ATTRIBUTE_TYPE_STRINGV)
|
||||
attr->u.stringv = g_strdupv (attr->u.stringv);
|
||||
|
||||
if (attr->type == G_FILE_ATTRIBUTE_TYPE_OBJECT &&
|
||||
attr->u.obj != NULL)
|
||||
g_object_ref (attr->u.obj);
|
||||
@ -300,6 +306,8 @@ _g_file_attribute_value_peek_as_pointer (GFileAttributeValue *attr)
|
||||
case G_FILE_ATTRIBUTE_TYPE_STRING:
|
||||
case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
|
||||
return attr->u.string;
|
||||
case G_FILE_ATTRIBUTE_TYPE_STRINGV:
|
||||
return attr->u.stringv;
|
||||
case G_FILE_ATTRIBUTE_TYPE_OBJECT:
|
||||
return attr->u.obj;
|
||||
default:
|
||||
@ -408,6 +416,8 @@ escape_byte_string (const char *str)
|
||||
char *
|
||||
_g_file_attribute_value_as_string (const GFileAttributeValue *attr)
|
||||
{
|
||||
GString *s;
|
||||
int i;
|
||||
char *str;
|
||||
|
||||
g_return_val_if_fail (attr != NULL, NULL);
|
||||
@ -417,6 +427,17 @@ _g_file_attribute_value_as_string (const GFileAttributeValue *attr)
|
||||
case G_FILE_ATTRIBUTE_TYPE_STRING:
|
||||
str = g_strdup (attr->u.string);
|
||||
break;
|
||||
case G_FILE_ATTRIBUTE_TYPE_STRINGV:
|
||||
s = g_string_new ("[");
|
||||
for (i = 0; attr->u.stringv[i] != NULL; i++)
|
||||
{
|
||||
g_string_append (s, attr->u.stringv[i]);
|
||||
if (attr->u.stringv[i+1] != NULL)
|
||||
g_string_append (s, ", ");
|
||||
}
|
||||
g_string_append (s, "]");
|
||||
str = g_string_free (s, FALSE);
|
||||
break;
|
||||
case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
|
||||
str = escape_byte_string (attr->u.string);
|
||||
break;
|
||||
@ -489,6 +510,17 @@ _g_file_attribute_value_get_byte_string (const GFileAttributeValue *attr)
|
||||
return attr->u.string;
|
||||
}
|
||||
|
||||
char **
|
||||
_g_file_attribute_value_get_stringv (const GFileAttributeValue *attr)
|
||||
{
|
||||
if (attr == NULL)
|
||||
return NULL;
|
||||
|
||||
g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_STRINGV, NULL);
|
||||
|
||||
return attr->u.stringv;
|
||||
}
|
||||
|
||||
/*
|
||||
* _g_file_attribute_value_get_boolean:
|
||||
* @attr: a #GFileAttributeValue.
|
||||
@ -628,6 +660,13 @@ _g_file_attribute_value_set_from_pointer (GFileAttributeValue *value,
|
||||
value->u.string = value_p;
|
||||
break;
|
||||
|
||||
case G_FILE_ATTRIBUTE_TYPE_STRINGV:
|
||||
if (dup)
|
||||
value->u.stringv = g_strdupv (value_p);
|
||||
else
|
||||
value->u.stringv = value_p;
|
||||
break;
|
||||
|
||||
case G_FILE_ATTRIBUTE_TYPE_OBJECT:
|
||||
if (dup)
|
||||
value->u.obj = g_object_ref (value_p);
|
||||
@ -698,6 +737,19 @@ _g_file_attribute_value_set_byte_string (GFileAttributeValue *attr,
|
||||
attr->u.string = g_strdup (string);
|
||||
}
|
||||
|
||||
void
|
||||
_g_file_attribute_value_set_stringv (GFileAttributeValue *attr,
|
||||
char **value)
|
||||
{
|
||||
g_return_if_fail (attr != NULL);
|
||||
g_return_if_fail (value != NULL);
|
||||
|
||||
_g_file_attribute_value_clear (attr);
|
||||
attr->type = G_FILE_ATTRIBUTE_TYPE_STRINGV;
|
||||
attr->u.stringv = g_strdupv (value);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* _g_file_attribute_value_set_boolean:
|
||||
* @attr: a #GFileAttributeValue.
|
||||
|
@ -751,6 +751,30 @@ g_file_info_get_attribute_byte_string (GFileInfo *info,
|
||||
return _g_file_attribute_value_get_byte_string (value);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_file_info_get_attribute_stringv:
|
||||
* @info: a #GFileInfo.
|
||||
* @attribute: a file attribute key.
|
||||
*
|
||||
* Gets the value of a stringv attribute. If the attribute does
|
||||
* not contain a stringv, %NULL will be returned.
|
||||
*
|
||||
* Returns: the contents of the @attribute value as a stringv, or
|
||||
* %NULL otherwise. Do not free.
|
||||
**/
|
||||
char **
|
||||
g_file_info_get_attribute_stringv (GFileInfo *info,
|
||||
const char *attribute)
|
||||
{
|
||||
GFileAttributeValue *value;
|
||||
|
||||
g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
|
||||
g_return_val_if_fail (attribute != NULL && *attribute != '\0', NULL);
|
||||
|
||||
value = g_file_info_find_value_by_name (info, attribute);
|
||||
return _g_file_attribute_value_get_stringv (value);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_file_info_get_attribute_boolean:
|
||||
* @info: a #GFileInfo.
|
||||
@ -960,6 +984,33 @@ g_file_info_set_attribute_object (GFileInfo *info,
|
||||
_g_file_attribute_value_set_object (value, attr_value);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_file_info_set_attribute_stringv:
|
||||
* @info: a #GFileInfo.
|
||||
* @attribute: a file attribute key.
|
||||
* @attr_value: a %NULL terminated string array
|
||||
*
|
||||
* Sets the @attribute to contain the given @attr_value,
|
||||
* if possible.
|
||||
*
|
||||
* Sinze: 2.22
|
||||
**/
|
||||
void
|
||||
g_file_info_set_attribute_stringv (GFileInfo *info,
|
||||
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);
|
||||
if (value)
|
||||
_g_file_attribute_value_set_stringv (value, attr_value);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_file_info_set_attribute_string:
|
||||
* @info: a #GFileInfo.
|
||||
|
@ -780,6 +780,8 @@ gint64 g_file_info_get_attribute_int64 (GFileInfo *info,
|
||||
const char *attribute);
|
||||
GObject * g_file_info_get_attribute_object (GFileInfo *info,
|
||||
const char *attribute);
|
||||
char ** g_file_info_get_attribute_stringv (GFileInfo *info,
|
||||
const char *attribute);
|
||||
|
||||
void g_file_info_set_attribute (GFileInfo *info,
|
||||
const char *attribute,
|
||||
@ -809,6 +811,9 @@ void g_file_info_set_attribute_int64 (GFileInfo *info,
|
||||
void g_file_info_set_attribute_object (GFileInfo *info,
|
||||
const char *attribute,
|
||||
GObject *attr_value);
|
||||
void g_file_info_set_attribute_stringv (GFileInfo *info,
|
||||
const char *attribute,
|
||||
char **attr_value);
|
||||
|
||||
void g_file_info_clear_status (GFileInfo *info);
|
||||
|
||||
|
@ -391,6 +391,7 @@ g_file_info_get_attribute_int32
|
||||
g_file_info_get_attribute_uint64
|
||||
g_file_info_get_attribute_int64
|
||||
g_file_info_get_attribute_object
|
||||
g_file_info_get_attribute_stringv
|
||||
g_file_info_set_attribute
|
||||
g_file_info_set_attribute_string
|
||||
g_file_info_set_attribute_byte_string
|
||||
@ -400,6 +401,7 @@ g_file_info_set_attribute_int32
|
||||
g_file_info_set_attribute_uint64
|
||||
g_file_info_set_attribute_int64
|
||||
g_file_info_set_attribute_object
|
||||
g_file_info_set_attribute_stringv
|
||||
g_file_info_clear_status
|
||||
g_file_info_get_file_type
|
||||
g_file_info_get_is_hidden
|
||||
|
@ -92,6 +92,7 @@ typedef enum {
|
||||
* @G_FILE_ATTRIBUTE_TYPE_UINT64: an unsigned 8-byte/64-bit integer.
|
||||
* @G_FILE_ATTRIBUTE_TYPE_INT64: a signed 8-byte/64-bit integer.
|
||||
* @G_FILE_ATTRIBUTE_TYPE_OBJECT: a #GObject.
|
||||
* @G_FILE_ATTRIBUTE_TYPE_STRINGV: a %NULL terminated char **. Since 2.22
|
||||
*
|
||||
* The data types for file attributes.
|
||||
**/
|
||||
@ -104,7 +105,8 @@ typedef enum {
|
||||
G_FILE_ATTRIBUTE_TYPE_INT32,
|
||||
G_FILE_ATTRIBUTE_TYPE_UINT64,
|
||||
G_FILE_ATTRIBUTE_TYPE_INT64,
|
||||
G_FILE_ATTRIBUTE_TYPE_OBJECT
|
||||
G_FILE_ATTRIBUTE_TYPE_OBJECT,
|
||||
G_FILE_ATTRIBUTE_TYPE_STRINGV
|
||||
} GFileAttributeType;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user