142 GChecksum *sha1; |
142 GChecksum *sha1; |
143 guint8 digest[20]; |
143 guint8 digest[20]; |
144 gsize digest_size = 20; |
144 gsize digest_size = 20; |
145 gchar *hash, *old_hash = NULL; |
145 gchar *hash, *old_hash = NULL; |
146 caps *old_caps; |
146 caps *old_caps; |
147 unsigned int i; |
|
148 caps *c = g_hash_table_lookup(caps_cache, ""); |
147 caps *c = g_hash_table_lookup(caps_cache, ""); |
149 |
148 |
150 g_hash_table_steal(caps_cache, ""); |
149 g_hash_table_steal(caps_cache, ""); |
151 sha1 = g_checksum_new(G_CHECKSUM_SHA1); |
150 sha1 = g_checksum_new(G_CHECKSUM_SHA1); |
152 identity = g_strdup_printf("%s/%s/%s<", c->category, c->type, c->name); |
151 identity = g_strdup_printf("%s/%s//%s<", c->category, c->type, c->name); |
153 g_checksum_update(sha1, (guchar*)identity, -1); |
152 g_checksum_update(sha1, (guchar*)identity, -1); |
154 g_free(identity); |
153 g_free(identity); |
155 |
154 |
156 features = g_list_copy(g_hash_table_get_values(c->features)); |
155 features = g_hash_table_get_values(c->features); |
157 features = g_list_sort(features, _strcmp_sort); |
156 features = g_list_sort(features, _strcmp_sort); |
158 for (i=0; i < g_list_length(features); i++) { |
157 { |
159 g_checksum_update(sha1, g_list_nth_data(features, i), -1); |
158 GList *feature; |
160 g_checksum_update(sha1, (guchar *)"<", -1); |
159 for (feature=features; feature; feature=feature->next) { |
|
160 g_checksum_update(sha1, feature->data, -1); |
|
161 g_checksum_update(sha1, (guchar *)"<", -1); |
|
162 } |
161 } |
163 } |
162 g_list_free(features); |
164 g_list_free(features); |
163 |
165 |
164 g_checksum_get_digest(sha1, digest, &digest_size); |
166 g_checksum_get_digest(sha1, digest, &digest_size); |
165 hash = g_base64_encode(digest, digest_size); |
167 hash = g_base64_encode(digest, digest_size); |