/* $Id: gnome-uri.c 20833 2006-04-09 18:08:17Z benny $ */ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_STRING_H #include #endif #include /*** the next three routines are taken straight from gnome-libs so that the gtk-only version can receive drag and drops as well ***/ /** * gnome_uri_list_free_strings: * @list: A GList returned by gnome_uri_list_extract_uris() or gnome_uri_list_extract_filenames() * * Releases all of the resources allocated by @list. */ void gnome_uri_list_free_strings (GList * list) { g_list_foreach (list, (GFunc) g_free, NULL); g_list_free (list); } /** * gnome_uri_list_extract_uris: * @uri_list: an uri-list in the standard format. * * Returns a GList containing strings allocated with g_malloc * that have been splitted from @uri-list. */ GList * gnome_uri_list_extract_uris (const gchar * uri_list) { const gchar *p, *q; gchar *retval; GList *result = NULL; g_return_val_if_fail (uri_list != NULL, NULL); p = uri_list; /* We don't actually try to validate the URI according to RFC * 2396, or even check for allowed characters - we just ignore * comments and trim whitespace off the ends. We also * allow LF delimination as well as the specified CRLF. */ while (p) { if (*p != '#') { while (g_ascii_isspace ((int) (*p))) p++; q = p; while (*q && (*q != '\n') && (*q != '\r')) q++; if (q > p) { q--; while (q > p && g_ascii_isspace ((int) (*q))) q--; retval = (char *) g_malloc (q - p + 2); strncpy (retval, p, q - p + 1); retval[q - p + 1] = '\0'; result = g_list_prepend (result, retval); } } p = strchr (p, '\n'); if (p) p++; } return g_list_reverse (result); } /** * gnome_uri_list_extract_filenames: * @uri_list: an uri-list in the standard format * * Returns a GList containing strings allocated with g_malloc * that contain the filenames in the uri-list. * * Note that unlike gnome_uri_list_extract_uris() function, this * will discard any non-file uri from the result value. */ GList * gnome_uri_list_extract_filenames (const gchar * uri_list) { GList *tmp_list, *node, *result; g_return_val_if_fail (uri_list != NULL, NULL); result = gnome_uri_list_extract_uris (uri_list); tmp_list = result; while (tmp_list) { gchar *s = (char *) tmp_list->data; node = tmp_list; tmp_list = tmp_list->next; if (!strncmp (s, "file:", 5)) { /* added by Jasper Huijsmans remove leading multiple slashes */ if (!strncmp (s + 5, "///", 3)) node->data = g_strdup (s + 7); else node->data = g_strdup (s + 5); } else { node->data = g_strdup (s); } g_free (s); } return result; }