diff options
author | Benjamin Otte <otte@gnome.org> | 2009-12-20 23:54:47 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2009-12-20 23:54:47 +0100 |
commit | 1cafd48efea10b476df13ee468206292b01010c4 (patch) | |
tree | 538c24ddcc9fe7cfc86cd040f87cc577f191dc15 /libsoup/soup-directory-input-stream.c | |
parent | b34b9c6ea77470461604d67fc8ef4f45d4ec6955 (diff) | |
download | libsoup-new-io.tar.gz |
Add URI to directory stream so it can generate absolute URLsnew-io
Diffstat (limited to 'libsoup/soup-directory-input-stream.c')
-rw-r--r-- | libsoup/soup-directory-input-stream.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libsoup/soup-directory-input-stream.c b/libsoup/soup-directory-input-stream.c index 48fcfd06..43990f19 100644 --- a/libsoup/soup-directory-input-stream.c +++ b/libsoup/soup-directory-input-stream.c @@ -15,6 +15,7 @@ #include <string.h> #include "soup-message-body.h" +#include "soup-uri.h" #define INIT_STRING "<html><head><title>OMG!</title></head><body><table>" @@ -29,23 +30,26 @@ soup_directory_input_stream_parse_info (SoupDirectoryInputStream *stream, SoupBuffer *buffer; GString *string; const char *s; - char *escaped, *xml_string; + char *escaped, *path, *xml_string; if (!g_file_info_get_name (info)) return NULL; - string = g_string_new ("<tr>"); s = g_file_info_get_display_name (info); if (!s) { s = g_file_info_get_name (info); - /* FIXME: convert somehow */ + /* FIXME: convert somehow? */ if (!g_utf8_validate (s, -1, NULL)) - s = "Invalid filename"; + return NULL; } - escaped = g_uri_escape_string (s, NULL, FALSE); - xml_string = g_markup_escape_text (g_file_info_get_display_name (info), -1); - g_string_append_printf (string, "<td><a href=\"%s\">%s</a></td>", escaped, xml_string); + string = g_string_new ("<tr>"); + + xml_string = g_markup_escape_text (s, -1); + escaped = g_uri_escape_string (g_file_info_get_name (info), NULL, FALSE); + path = g_strconcat (stream->uri, "/", escaped, NULL); g_free (escaped); + g_string_append_printf (string, "<td><a href=\"%s\">%s</a></td>", path, xml_string); + g_free (path); g_free (xml_string); g_string_append (string, "</tr>"); @@ -142,6 +146,9 @@ soup_directory_input_stream_close (GInputStream *input, error); g_object_unref (stream->enumerator); stream->enumerator = NULL; + + g_free (stream->uri); + stream->uri = NULL; return result; } @@ -164,15 +171,18 @@ soup_directory_input_stream_init (SoupDirectoryInputStream *stream) } GInputStream * -soup_directory_input_stream_new (GFileEnumerator *enumerator) +soup_directory_input_stream_new (GFileEnumerator *enumerator, + SoupURI *uri) { GInputStream *stream; g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL); + g_return_val_if_fail (uri != NULL, NULL); stream = g_object_new (SOUP_TYPE_DIRECTORY_INPUT_STREAM, NULL); SOUP_DIRECTORY_INPUT_STREAM (stream)->enumerator = g_object_ref (enumerator); + SOUP_DIRECTORY_INPUT_STREAM (stream)->uri = soup_uri_to_string (uri, FALSE); return stream; } |