コード例 #1
0
GHashTable*
gkm_secret_item_get_fields (GkmSecretItem *self)
{
	g_return_val_if_fail (GKM_IS_SECRET_ITEM (self), NULL);
	if (self->fields == NULL)
		self->fields = gkm_secret_fields_new ();
	return self->fields;
}
コード例 #2
0
static gboolean
buffer_get_attributes (EggBuffer *buffer, gsize offset, gsize *next_offset,
                       GHashTable **attributes_out, gboolean hashed)
{
	guint32 list_size;
	GHashTable *attributes;
	char *name;
	guint32 type;
	char *str;
	guint32 val;
	int i;

	attributes = NULL;

	if (!egg_buffer_get_uint32 (buffer, offset, &offset, &list_size))
		goto bail;

	attributes = gkm_secret_fields_new ();
	for (i = 0; i < list_size; i++) {
		if (!buffer_get_utf8_string (buffer, offset, &offset, &name))
			goto bail;
		if (!egg_buffer_get_uint32 (buffer, offset, &offset, &type)) {
			g_free (name);
			goto bail;
		}
		switch (type) {
		case 0: /* A string */
			if (!buffer_get_utf8_string (buffer, offset, &offset, &str)) {
				g_free (name);
				goto bail;
			}
			if (hashed) {
				gkm_secret_fields_add_compat_hashed_string (attributes, name, str);
				g_free (name);
				g_free (str);
			} else {
				gkm_secret_fields_take (attributes, name, str);
			}
			break;
		case 1: /* A uint32 */
			if (!egg_buffer_get_uint32 (buffer, offset, &offset, &val)) {
				g_free (name);
				goto bail;
			}
			if (hashed)
				gkm_secret_fields_add_compat_hashed_uint32 (attributes, name, val);
			else
				gkm_secret_fields_add_compat_uint32 (attributes, name, val);
			g_free (name);
			break;
		default:
			g_free (name);
			goto bail;
		}
	}

	*attributes_out = attributes;
	*next_offset = offset;

	return TRUE;

bail:
	g_hash_table_unref (attributes);
	return FALSE;
}