diff options
author | Richard Wilson <rjw@netsurf-browser.org> | 2005-08-03 17:01:40 +0000 |
---|---|---|
committer | Richard Wilson <rjw@netsurf-browser.org> | 2005-08-03 17:01:40 +0000 |
commit | d8e290a7a142414e364b9f107b81c3abfda0b0a0 (patch) | |
tree | 56c7f65c9c98c1f376e6055ed718a9c64a4061f4 /riscos/gui.c | |
parent | 75c056c88157439a3f5d67f88dbdbec0e037890c (diff) | |
download | netsurf-d8e290a7a142414e364b9f107b81c3abfda0b0a0.tar.gz netsurf-d8e290a7a142414e364b9f107b81c3abfda0b0a0.tar.bz2 |
[project @ 2005-08-03 17:01:40 by rjw]
Give an unique filename each time 'View Source' is used.
svn path=/import/netsurf/; revision=1837
Diffstat (limited to 'riscos/gui.c')
-rw-r--r-- | riscos/gui.c | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/riscos/gui.c b/riscos/gui.c index ab9f3a1b0..26a868eb8 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -1946,16 +1946,57 @@ void ro_gui_open_help_page(const char *page) void ro_gui_view_source(struct content *content) { + os_error *error; + char *temp_name, *full_name; + if (!content || !content->source_data) { warn_user("MiscError", "No document source"); return; } + + /* We cannot release the requested filename until after it has finished + being used. As we can't easily find out when this is, we simply don't + bother releasing it and simply allow it to be re-used next time NetSurf + is started. The memory overhead from doing this is under 1 byte per + filename. */ + temp_name = ro_filename_request(); + if (!temp_name) { + warn_user("NoMemory", 0); + return; + } + full_name = malloc(strlen(temp_name) + strlen(CACHE_FILENAME_PREFIX) + 12); + if (!full_name) { + warn_user("NoMemory", 0); + return; + } + sprintf(full_name, "Filer_Run %s.%s", CACHE_FILENAME_PREFIX, temp_name); - xosfile_save_stamped("<Wimp$Scrap>", 0xfff, + error = xosfile_save_stamped(full_name + 10, 0xfff, content->source_data, content->source_data + content->source_size); - xos_cli("Filer_Run <Wimp$Scrap>"); - xosfile_set_type("<Wimp$Scrap>", ro_content_filetype(content)); + if (error) { + LOG(("xosfile_save_stamped failed: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("MiscErr", error->errmess); + free(full_name); + return; + } + error = xosfile_set_type(full_name + 10, ro_content_filetype(content)); + if (error) { + LOG(("xosfile_set_type failed: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("MiscErr", error->errmess); + free(full_name); + return; + } + error = xos_cli(full_name); + free(full_name); + if (error) { + LOG(("xos_cli: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("MiscErr", error->errmess); + return; + } } |