2006-07-06 04:07:11 +04:00
|
|
|
/*
|
|
|
|
* Copyright 2006 Richard Wilson <info@tinct.net>
|
2007-08-08 20:16:03 +04:00
|
|
|
*
|
|
|
|
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
|
|
|
*
|
|
|
|
* NetSurf is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; version 2 of the License.
|
|
|
|
*
|
|
|
|
* NetSurf is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2006-07-06 04:07:11 +04:00
|
|
|
*/
|
|
|
|
|
|
|
|
/** \file
|
|
|
|
* Content for directory listings (implementation).
|
|
|
|
*/
|
|
|
|
|
Merged revisions 5309-5406,5409-5422 via svnmerge from
svn://svn.netsurf-browser.org/branches/vince/netsurf-fb
........
r5309 | vince | 2008-09-13 10:59:10 +0100 (Sat, 13 Sep 2008) | 2 lines
first stab at framebuffer frontend
........
r5313 | vince | 2008-09-14 15:08:52 +0100 (Sun, 14 Sep 2008) | 2 lines
add line plotters
........
r5314 | vince | 2008-09-14 15:28:12 +0100 (Sun, 14 Sep 2008) | 2 lines
add rectangle plot to 16bpp plotters
........
r5315 | vince | 2008-09-14 19:58:57 +0100 (Sun, 14 Sep 2008) | 2 lines
improve 16bpp image plot
........
r5316 | vince | 2008-09-15 00:35:32 +0100 (Mon, 15 Sep 2008) | 2 lines
abstract the os specific framebuffer init
........
r5317 | vince | 2008-09-15 11:18:51 +0100 (Mon, 15 Sep 2008) | 2 lines
first cut of linux frontend
........
r5318 | vince | 2008-09-15 12:01:00 +0100 (Mon, 15 Sep 2008) | 2 lines
remove junk includes
........
r5319 | vince | 2008-09-15 12:09:02 +0100 (Mon, 15 Sep 2008) | 2 lines
make plotters OS agnostic again
........
r5322 | vince | 2008-09-15 15:55:01 +0100 (Mon, 15 Sep 2008) | 2 lines
Linux frontend operates
........
r5323 | vince | 2008-09-15 16:32:47 +0100 (Mon, 15 Sep 2008) | 2 lines
abstract out OS specific input
........
r5326 | vince | 2008-09-15 19:21:01 +0100 (Mon, 15 Sep 2008) | 2 lines
Improve linux mode setting
........
r5329 | vince | 2008-09-15 21:13:33 +0100 (Mon, 15 Sep 2008) | 2 lines
improve text clipping
........
r5339 | vince | 2008-09-16 00:07:57 +0100 (Tue, 16 Sep 2008) | 2 lines
possibly fix text clipping issue
........
r5342 | vince | 2008-09-16 00:39:36 +0100 (Tue, 16 Sep 2008) | 2 lines
consolidate polygon plotters
........
r5344 | dsilvers | 2008-09-16 10:21:06 +0100 (Tue, 16 Sep 2008) | 1 line
Fix up the framebuffer target makefile a bit more, add some config options for it
........
r5345 | dsilvers | 2008-09-16 10:22:19 +0100 (Tue, 16 Sep 2008) | 1 line
Ensure the appropriate frontend is selected when building framebuffer
........
r5346 | dsilvers | 2008-09-16 10:27:16 +0100 (Tue, 16 Sep 2008) | 1 line
Update build system to support targetting separate framebuffer frontends in different build trees, update executable to be nsfb-blah
........
r5350 | vince | 2008-09-16 17:15:04 +0100 (Tue, 16 Sep 2008) | 1 line
Add -g to provide symbols for framebuffer link
........
r5351 | vince | 2008-09-16 17:17:09 +0100 (Tue, 16 Sep 2008) | 1 line
framebuffer scheduler now works, plotters tweaked, gui tracks window redraw requirements better, keypresses not duplicated under linux fb
........
r5352 | dsilvers | 2008-09-16 17:38:53 +0100 (Tue, 16 Sep 2008) | 1 line
Ensure we only allow one fetcher at a time
........
r5361 | vince | 2008-09-17 11:48:44 +0100 (Wed, 17 Sep 2008) | 2 lines
initial cursor support
........
r5362 | vince | 2008-09-17 13:56:47 +0100 (Wed, 17 Sep 2008) | 2 lines
add mouse handling
........
r5363 | vince | 2008-09-17 14:14:44 +0100 (Wed, 17 Sep 2008) | 2 lines
add framebuffer resources
........
r5364 | vince | 2008-09-17 17:12:21 +0100 (Wed, 17 Sep 2008) | 2 lines
add reasonable pointer
........
r5366 | vince | 2008-09-17 17:17:25 +0100 (Wed, 17 Sep 2008) | 2 lines
fix pointer alpha
........
r5370 | vince | 2008-09-18 13:43:53 +0100 (Thu, 18 Sep 2008) | 2 lines
warning squash and cleanup ready for trunk merge
........
r5375 | vince | 2008-09-19 14:58:43 +0100 (Fri, 19 Sep 2008) | 2 lines
Working mouse navigation
........
r5377 | vince | 2008-09-20 14:06:22 +0100 (Sat, 20 Sep 2008) | 2 lines
Improve scrolling
........
r5378 | vince | 2008-09-20 14:46:46 +0100 (Sat, 20 Sep 2008) | 2 lines
fix redraw issues with scrolling
........
r5380 | vince | 2008-09-20 17:08:43 +0100 (Sat, 20 Sep 2008) | 3 lines
Alter panning to use its own flag so it doesnt cause invalid redraw
operations
........
r5381 | vince | 2008-09-20 21:52:45 +0100 (Sat, 20 Sep 2008) | 2 lines
add dummy framebuffer
........
r5383 | vince | 2008-09-21 00:00:15 +0100 (Sun, 21 Sep 2008) | 2 lines
fix segfault when cursor is off teh bottom of teh screen
........
r5384 | vince | 2008-09-21 00:06:08 +0100 (Sun, 21 Sep 2008) | 2 lines
fix off by one in pointer fix
........
r5385 | vince | 2008-09-21 00:25:09 +0100 (Sun, 21 Sep 2008) | 2 lines
when fixing bloody silly off by one errors remember to fix *both* references
........
r5387 | vince | 2008-09-21 00:38:13 +0100 (Sun, 21 Sep 2008) | 2 lines
last try at stopping the pointer segfault
........
r5388 | vince | 2008-09-21 16:24:18 +0100 (Sun, 21 Sep 2008) | 2 lines
improve vertical text clipping
........
r5392 | vince | 2008-09-21 23:11:51 +0100 (Sun, 21 Sep 2008) | 2 lines
Improve text plotters
........
r5393 | vince | 2008-09-21 23:34:38 +0100 (Sun, 21 Sep 2008) | 2 lines
fix 32bpp line plotting
........
r5394 | vince | 2008-09-22 00:00:03 +0100 (Mon, 22 Sep 2008) | 2 lines
Fix off by one error in line plotting clipping
........
r5397 | vince | 2008-09-22 13:46:22 +0100 (Mon, 22 Sep 2008) | 2 lines
Fix bitmap tileing
........
r5398 | vince | 2008-09-22 17:46:02 +0100 (Mon, 22 Sep 2008) | 2 lines
enable knockout renderer
........
r5399 | vince | 2008-09-22 18:43:48 +0100 (Mon, 22 Sep 2008) | 2 lines
ensure clipping region lies within window, caused by knockout renderer
........
r5400 | vince | 2008-09-22 19:20:25 +0100 (Mon, 22 Sep 2008) | 2 lines
update cursor to one swiped from X windows
........
r5405 | vince | 2008-09-23 09:09:05 +0100 (Tue, 23 Sep 2008) | 2 lines
fix vertical scroll limit
........
r5412 | dsilvers | 2008-09-23 10:53:14 +0100 (Tue, 23 Sep 2008) | 1 line
Revert noisy fetcher patch
........
r5413 | dsilvers | 2008-09-23 10:58:00 +0100 (Tue, 23 Sep 2008) | 1 line
Add header guards
........
r5414 | dsilvers | 2008-09-23 11:31:31 +0100 (Tue, 23 Sep 2008) | 1 line
Tidy the region clipping slightly
........
r5416 | dsilvers | 2008-09-23 12:05:00 +0100 (Tue, 23 Sep 2008) | 1 line
Rationalise how the framebuffer frontend finds resources and options
........
r5418 | dsilvers | 2008-09-23 13:59:00 +0100 (Tue, 23 Sep 2008) | 1 line
Ensure options are overridden after load, and squash an fb_gui.c warning
........
r5419 | dsilvers | 2008-09-23 14:20:07 +0100 (Tue, 23 Sep 2008) | 1 line
Support fb_mode and fb_device options
........
r5420 | dsilvers | 2008-09-23 14:21:48 +0100 (Tue, 23 Sep 2008) | 1 line
Support option_fb_device in the able frontend
........
r5421 | dsilvers | 2008-09-23 14:25:17 +0100 (Tue, 23 Sep 2008) | 1 line
Ensure target_blank is disabled
........
r5422 | dsilvers | 2008-09-23 14:39:00 +0100 (Tue, 23 Sep 2008) | 1 line
Rework linux fb frontend to support scanning and opening all event devices for input
........
svn path=/trunk/netsurf/; revision=5423
2008-09-23 18:00:40 +04:00
|
|
|
#include <sys/types.h>
|
2006-07-06 04:07:11 +04:00
|
|
|
#include <dirent.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <time.h>
|
2010-03-28 16:56:39 +04:00
|
|
|
#include "content/content_protected.h"
|
2007-05-31 02:39:54 +04:00
|
|
|
#include "render/directory.h"
|
|
|
|
#include "render/html.h"
|
|
|
|
#include "utils/messages.h"
|
|
|
|
#include "utils/url.h"
|
2006-07-06 04:07:11 +04:00
|
|
|
|
|
|
|
#define MAX_LENGTH 2048
|
|
|
|
|
|
|
|
static const char header[] = "<html>\n<head>\n<title>\n";
|
|
|
|
static const char footer[] = "</pre>\n</body>\n</html>\n";
|
|
|
|
|
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
bool directory_create(struct content *c, const struct http_parameter *params) {
|
|
|
|
if (!html_create(c, params))
|
2006-07-06 04:07:11 +04:00
|
|
|
/* html_create() must have broadcast MSG_ERROR already, so we
|
|
|
|
* don't need to. */
|
|
|
|
return false;
|
2008-09-23 06:19:50 +04:00
|
|
|
|
|
|
|
binding_parse_chunk(c->data.html.parser_binding,
|
|
|
|
(uint8_t *) header, sizeof(header) - 1);
|
|
|
|
|
2007-03-29 02:56:54 +04:00
|
|
|
return true;
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
|
|
|
|
2010-03-30 02:33:21 +04:00
|
|
|
bool directory_convert(struct content *c) {
|
2006-07-06 04:07:11 +04:00
|
|
|
char *path;
|
|
|
|
DIR *parent;
|
|
|
|
struct dirent *entry;
|
|
|
|
union content_msg_data msg_data;
|
|
|
|
char buffer[MAX_LENGTH];
|
|
|
|
char *nice_path, *cnv, *tmp;
|
|
|
|
url_func_result res;
|
|
|
|
bool compare;
|
|
|
|
char *up;
|
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
path = url_to_path(content__get_url(c));
|
2006-07-06 04:07:11 +04:00
|
|
|
if (!path) {
|
|
|
|
msg_data.error = messages_get("NoMemory");
|
|
|
|
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
|
2006-11-27 18:35:18 +03:00
|
|
|
return false;
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
|
|
|
nice_path = malloc(strlen(path) * 4 + 1);
|
|
|
|
if (!nice_path) {
|
|
|
|
msg_data.error = messages_get("MiscErr");
|
|
|
|
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
|
2007-03-29 02:56:54 +04:00
|
|
|
return false;
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
2008-03-19 20:41:38 +03:00
|
|
|
for (cnv = nice_path, tmp = path; *tmp != '\0'; tmp++) {
|
2007-03-29 02:56:54 +04:00
|
|
|
if (*tmp == '<') {
|
|
|
|
*cnv++ = '&';
|
|
|
|
*cnv++ = 'l';
|
|
|
|
*cnv++ = 't';
|
|
|
|
*cnv++ = ';';
|
|
|
|
} else if (*tmp == '>') {
|
|
|
|
*cnv++ = '&';
|
|
|
|
*cnv++ = 'g';
|
|
|
|
*cnv++ = 't';
|
|
|
|
*cnv++ = ';';
|
|
|
|
} else {
|
|
|
|
*cnv++ = *tmp;
|
|
|
|
}
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
2009-05-28 15:48:32 +04:00
|
|
|
*cnv = '\0';
|
2006-07-06 04:07:11 +04:00
|
|
|
snprintf(buffer, sizeof(buffer), "Index of %s</title>\n</head>\n"
|
|
|
|
"<body>\n<h1>\nIndex of %s</h1>\n<hr><pre>",
|
|
|
|
nice_path, nice_path);
|
|
|
|
free(nice_path);
|
2008-09-23 06:19:50 +04:00
|
|
|
|
2009-05-28 15:48:32 +04:00
|
|
|
binding_parse_chunk(c->data.html.parser_binding,
|
2008-08-13 18:11:05 +04:00
|
|
|
(uint8_t *) buffer, strlen(buffer));
|
2006-07-06 04:07:11 +04:00
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
res = url_parent(content__get_url(c), &up);
|
2006-07-06 04:07:11 +04:00
|
|
|
if (res == URL_FUNC_OK) {
|
2010-03-28 16:56:39 +04:00
|
|
|
res = url_compare(content__get_url(c), up, false, &compare);
|
2008-02-03 15:04:48 +03:00
|
|
|
if ((res == URL_FUNC_OK) && !compare) {
|
2006-07-06 04:07:11 +04:00
|
|
|
snprintf(buffer, sizeof(buffer),
|
|
|
|
"<a href=\"..\">[..]</a>\n");
|
2008-09-23 06:19:50 +04:00
|
|
|
|
|
|
|
binding_parse_chunk(c->data.html.parser_binding,
|
|
|
|
(uint8_t *) buffer, strlen(buffer));
|
2007-03-29 02:56:54 +04:00
|
|
|
}
|
|
|
|
free(up);
|
|
|
|
}
|
2006-07-06 04:07:11 +04:00
|
|
|
|
|
|
|
if ((parent = opendir(path)) == NULL) {
|
|
|
|
msg_data.error = messages_get("EmptyErr");
|
|
|
|
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
|
2007-03-29 02:56:54 +04:00
|
|
|
return false;
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
|
|
|
while ((entry = readdir(parent)) != NULL) {
|
2007-01-30 01:27:15 +03:00
|
|
|
if (!strcmp(entry->d_name, ".") ||
|
|
|
|
!strcmp(entry->d_name, ".."))
|
2006-07-06 04:07:11 +04:00
|
|
|
continue;
|
2006-11-27 18:35:18 +03:00
|
|
|
|
2006-07-06 04:07:11 +04:00
|
|
|
snprintf(buffer, sizeof(buffer), "<a href=\"%s/%s\">%s</a>\n",
|
2010-03-28 16:56:39 +04:00
|
|
|
content__get_url(c), entry->d_name,
|
|
|
|
entry->d_name);
|
2008-09-23 06:19:50 +04:00
|
|
|
|
|
|
|
binding_parse_chunk(c->data.html.parser_binding,
|
2008-08-13 18:11:05 +04:00
|
|
|
(uint8_t *) buffer, strlen(buffer));
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
|
|
|
closedir(parent);
|
2006-11-27 18:35:18 +03:00
|
|
|
|
2008-09-23 06:19:50 +04:00
|
|
|
binding_parse_chunk(c->data.html.parser_binding,
|
Merged revisions 4859-5013,5016-5018 via svnmerge from
svn://source.netsurf-browser.org/branches/takkaria/netsurf-hubbub
........
r4860 | takkaria | 2008-08-02 03:51:35 +0100 (Sat, 02 Aug 2008) | 2 lines
A really horribly rough first go at integrating hubbub with NetSurf. Segfaults, but I'm not sure what I've done wrong.
........
r4861 | jmb | 2008-08-02 05:01:19 +0100 (Sat, 02 Aug 2008) | 3 lines
Fix segfault caused by mismatched struct layout expectations.
Fix warnings, too.
........
r4862 | jmb | 2008-08-02 05:11:02 +0100 (Sat, 02 Aug 2008) | 2 lines
Destroy parser as soon as it's no longer needed, and flag this so that html_destroy doesn't cause things to trample all over the heap.
........
r4863 | takkaria | 2008-08-02 15:30:34 +0100 (Sat, 02 Aug 2008) | 2 lines
Remove deugging printf()s, add Aliases file, add script { display: none; } block.
........
r4868 | takkaria | 2008-08-02 22:14:55 +0100 (Sat, 02 Aug 2008) | 2 lines
Fix a segfault bug.
........
r4869 | takkaria | 2008-08-02 22:17:58 +0100 (Sat, 02 Aug 2008) | 2 lines
Add gtk/res/Aliases as a symlink to the one in !NS/Resources
........
r4870 | takkaria | 2008-08-02 22:26:31 +0100 (Sat, 02 Aug 2008) | 2 lines
Fix symlink.
........
r4885 | jmb | 2008-08-03 23:26:54 +0100 (Sun, 03 Aug 2008) | 2 lines
Make multiple parallel parser instances work correctly.
........
r4886 | tlsa | 2008-08-04 00:21:29 +0100 (Mon, 04 Aug 2008) | 1 line
Don't display contents of STYLE.
........
r4891 | jmb | 2008-08-04 01:18:07 +0100 (Mon, 04 Aug 2008) | 5 lines
Fix reparent_children to actually work
Make get_parent_node pay attention to the element_only flag
Fixup node referencing when appending a text child
Make clone_node clone attributes and namespace information in the non-deep case
........
r4918 | jmb | 2008-08-05 15:27:03 +0100 (Tue, 05 Aug 2008) | 2 lines
Fix debug target
........
r4944 | takkaria | 2008-08-07 12:56:50 +0100 (Thu, 07 Aug 2008) | 2 lines
Use talloc to allocate space for Hubbub.
........
r4993 | takkaria | 2008-08-10 17:49:47 +0100 (Sun, 10 Aug 2008) | 2 lines
Stub out the encoding change callback so NS-hubbub compiles again.
........
r4994 | takkaria | 2008-08-10 18:02:33 +0100 (Sun, 10 Aug 2008) | 2 lines
Tell Hubbub the encoding that HTTP gives us, if we have one.
........
r5001 | takkaria | 2008-08-11 02:53:24 +0100 (Mon, 11 Aug 2008) | 2 lines
First go at implementing proper <meta charset> support in NetSurf, amongst some refactoring. Probably works, but I have no pages around to test it on.
........
r5002 | takkaria | 2008-08-11 02:56:35 +0100 (Mon, 11 Aug 2008) | 2 lines
Fix (I hope) a 64-bit compiler warning.
........
r5012 | takkaria | 2008-08-11 08:40:28 +0100 (Mon, 11 Aug 2008) | 2 lines
Fix some nits from jmb. (Remove const from html->encoding, set encoding_source to something about right.)
........
r5013 | takkaria | 2008-08-11 08:48:50 +0100 (Mon, 11 Aug 2008) | 2 lines
Properly fix <meta charset> handling, by passing in the right thing as the context. No idea how this worked before. :) (credit: jmb)
........
r5017 | jmb | 2008-08-11 09:13:22 +0100 (Mon, 11 Aug 2008) | 7 lines
Pedantic typo fix.
Make Hubbub YES when building for RISC OS.
Make Hubbub AUTO when building for GTK
Ignore the presence of Hubbub on other platforms.
Remove the explicit libparserutils pkg-config stuff from the makefile (see r5016)
Add some logic that means Hubbub gets enabled correctly when building on RISC OS and when cross-compiling for it. (This is ugly and will go away when pkg-config is available on RO)
........
svn path=/trunk/netsurf/; revision=5019
2008-08-11 12:17:48 +04:00
|
|
|
(uint8_t *) footer, sizeof(footer) - 1);
|
2008-09-23 06:19:50 +04:00
|
|
|
|
2006-07-06 04:07:11 +04:00
|
|
|
c->type = CONTENT_HTML;
|
2010-03-30 02:33:21 +04:00
|
|
|
return html_convert(c);
|
2006-07-06 04:07:11 +04:00
|
|
|
}
|
2007-03-29 02:56:54 +04:00
|
|
|
|
|
|
|
void directory_destroy(struct content *c)
|
|
|
|
{
|
|
|
|
/* This will only get called if the content is destroyed before
|
|
|
|
* content_convert() is called. Simply force the type to HTML and
|
|
|
|
* delegate the cleanup to html_destroy() */
|
|
|
|
|
|
|
|
c->type = CONTENT_HTML;
|
|
|
|
|
|
|
|
html_destroy(c);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
2010-04-04 16:41:19 +04:00
|
|
|
|
|
|
|
bool directory_clone(const struct content *old, struct content *new_content)
|
|
|
|
{
|
|
|
|
/* This will only get called if the content is cloned before
|
|
|
|
* content_convert() is called. Simply replay creation. */
|
|
|
|
if (directory_create(new_content, NULL) == false)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|