static void ensure_checksum(GwySurface *surface) { gdouble *xydata; guint i, n, k; if (surface->priv->cached_checksum) return; n = surface->n; xydata = g_new(gdouble, 2*n); for (i = k = 0; i < n; i++) { xydata[k++] = surface->data[i].x; xydata[k++] = surface->data[i].y; } gwy_md5_get_digest((gchar*)xydata, 2*n*sizeof(gdouble), surface->priv->checksum); g_free(xydata); surface->priv->cached_checksum = TRUE; }
static gchar* gwy_recent_file_thumbnail_name(const gchar *uri) { static const gchar *hex2digit = "0123456789abcdef"; guchar md5sum[16]; gchar buffer[37], *p; gsize i; gwy_md5_get_digest(uri, -1, md5sum); p = buffer; for (i = 0; i < 16; i++) { *p++ = hex2digit[(guint)md5sum[i] >> 4]; *p++ = hex2digit[(guint)md5sum[i] & 0x0f]; } *p++ = '.'; *p++ = 'p'; *p++ = 'n'; *p++ = 'g'; *p = '\0'; return g_build_filename(gwy_recent_file_thumbnail_dir(), "normal", buffer, NULL); }