static GSList *check_file_add_uri(GSList *ud_list, GFile *file, char *filename, char *digest) { g_assert(file); g_assert(filename && *filename); g_assert(digest && *digest); char *target_uri = NULL; if (g_path_is_absolute(filename)) { GFile *target = g_file_new_for_path(filename); target_uri = g_file_get_uri(target); g_object_unref(target); } else { // Assume path is relative to the check file GFile *dir = g_file_get_parent(file); char *dir_uri = g_file_get_uri(dir); target_uri = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", dir_uri, filename); g_free(dir_uri); g_object_unref(dir); } g_free(filename); return g_slist_prepend(ud_list, uri_digest_new(target_uri, digest)); }
GSList *uri_digest_list_from_uri_strv(char **uris) { if (!uris) return NULL; GSList *ud_list = NULL; for (int i = 0; uris[i]; i++) ud_list = g_slist_prepend(ud_list, uri_digest_new(uris[i], NULL)); return g_slist_reverse(ud_list); }
GSList *uri_digest_list_from_uri_list(GSList *uris) { if (!uris) return NULL; GSList *ud_list = NULL; do { ud_list = g_slist_prepend(ud_list, uri_digest_new(uris->data, NULL)); } while ((uris = g_slist_next(uris))); return g_slist_reverse(ud_list); }