diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2006-08-04 11:22:40 +0000 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2006-08-04 11:22:40 +0000 |
commit | 929227922afb6a152789c34a0191b8e77872200e (patch) | |
tree | 7c358bd520a664a432f2ede2ec55b82b0b36581f /shell | |
parent | 72e65db7b325837eb2d02e5dedf6d6fe8acc3557 (diff) |
INTEGRATION: CWS kendy10 (1.6.14); FILE MERGED
2006/07/21 15:22:15 hjs 1.6.14.2: #i10000# remove signed/unsigned warning
2006/07/11 13:03:46 kendy 1.6.14.1: #i66510#
Fix recently usedl file list corruption
Diffstat (limited to 'shell')
-rw-r--r-- | shell/source/unix/sysshell/recently_used_file_handler.cxx | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/shell/source/unix/sysshell/recently_used_file_handler.cxx b/shell/source/unix/sysshell/recently_used_file_handler.cxx index 605324119c60..afe608caf7a1 100644 --- a/shell/source/unix/sysshell/recently_used_file_handler.cxx +++ b/shell/source/unix/sysshell/recently_used_file_handler.cxx @@ -4,9 +4,9 @@ * * $RCSfile: recently_used_file_handler.cxx,v $ * - * $Revision: 1.6 $ + * $Revision: 1.7 $ * - * last change: $Author: hr $ $Date: 2006-06-19 14:20:09 $ + * last change: $Author: ihi $ $Date: 2006-08-04 12:22:40 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -49,6 +49,10 @@ #include "rtl/string.hxx" #endif +#ifndef _RTL_STRBUF_HXX_ +#include "rtl/strbuf.hxx" +#endif + #include "osl/thread.h" #ifndef INCLUDED_RECENTLY_USED_FILE_HXX @@ -212,10 +216,33 @@ namespace /* private */ { write_xml_end_tag(TAG_RECENT_ITEM, file); } + static rtl::OString escape_content(const string_t &text) + { + rtl::OStringBuffer aBuf; + for (sal_uInt32 i = 0; i < text.length(); i++) + { +# define MAP(a,b) case a: aBuf.append(b); break + switch (text[i]) + { + MAP ('&', "&"); + MAP ('<', "<"); + MAP ('>', ">"); + MAP ('\'', "'"); + MAP ('"', """); + default: + aBuf.append(text[i]); + break; + } +# undef MAP + } + return aBuf.makeStringAndClear(); + } + void write_xml_tag(const string_t& name, const string_t& value, const recently_used_file& file) const { write_xml_start_tag(name, file); - file.write(value.c_str(), value.length()); + rtl::OString escaped = escape_content (value); + file.write(escaped.getStr(), escaped.getLength()); write_xml_end_tag(name, file); } @@ -541,7 +568,7 @@ const rtl::OUString DEFAULT_CONTEXT = rtl::OUString::createFromAscii("DefaultCon // We need to re-encode file urls because osl_getFileURLFromSystemPath converts // to UTF-8 before encoding non ascii characters, which is not what other apps expect. -rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl) +static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl) { rtl::OUString extUrl; @@ -572,7 +599,7 @@ extern "C" void add_to_recently_used_file_list(const rtl::OUString& file_url, co rtl::OUString externalUrl = translateToExternalUrl(file_url); read_recently_used_items(ruf, item_list); - recently_used_item_list_add(item_list, (externalUrl.getLength()) ? externalUrl : file_url, mime_type); + recently_used_item_list_add(item_list, externalUrl.getLength() ? externalUrl : file_url, mime_type); write_recently_used_items(ruf, item_list); } catch(const char* ex) |