72 Commits
Author SHA1 Message Date
Jonathan Clark b19cc5a5d1 comphelper: fix replaceAt string corruption, potential buffer overflow
comphelper::string::replaceAt contained pointer arithmetic errors. In
testing, this function only worked at all in the trivial append case.
Inserting a non-empty string anywhere else in the buffer would either
only insert part of the string, corrupt the string in the buffer, or
both.

In addition to replacing the implementation, this change adds unit tests
so we can be more confident that this function works in the future.

Change-Id: I97e109dc513b08528d6d20e7dbf6eedb3040670c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205222
Tested-by: Jenkins
Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>
2026-05-15 23:28:19 +02:00
Gabor Kelemen 2ceebbe548 tdf#146619 Run IWYU on comphelper/
Change-Id: If7c9691b5531d079e80ce3115409e60777bd75f7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189789
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
2025-09-12 23:56:34 +02:00
Noel Grandin 10d2f2ebf1 loplugin:ostr in comphelper
Change-Id: Ide07689bf1a68973cb176554e44e9a809d633def
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166851
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-04-30 10:40:14 +02:00
Noel Grandin 7840effb1d use more string_view
found by tweaking the stringview loplugin

Change-Id: I92203ba99642bef7951ffa146184c5562cb31d09
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163744
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-03-08 07:06:13 +01:00
Stephan Bergmann 79e8833305 Extended loplugin:ostr: comphelper
Change-Id: I43baf9248f607b13720da4295eb2827b3f58b3f1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160126
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
2023-11-29 23:23:45 +01:00
Stephan Bergmann 5ac4adaf02 Extended loplugin:ostr: comphelper
Change-Id: I338c3c263e940bbe6071827b2e19763b7dadc2e9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159723
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-11-20 08:31:47 +01:00
Stephan Bergmann e0c33ec15f loplugin:ostr: automatic rewrite
Change-Id: I2d09b2b83e1b50493ec88d0b2c323a83c0c86395
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157647
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Jenkins
2023-10-07 00:47:20 +02:00
Stephan Bergmann 4f3a5acac5 Remove unused comphelper::adjustIndexToStartOfSurrogate
...introduced in 28cc0bff10 "Break
comphelper::adjustIndexToStartOfSurrogate out of o3tl::iterateCodePoints" in
preparation for bd5c358258 "a11y: Fix returning
unpaired surrogates when retrieving characters", but which never picked it up

Change-Id: I5a10a3053d2f51333e27b74a808a41df7c1912ba
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152183
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-05-24 11:05:47 +02:00
Stephan Bergmann 28cc0bff10 Break comphelper::adjustIndexToStartOfSurrogate out of o3tl::iterateCodePoints
...as what they do is orthogonal (and it turned out that the use case that
motivated the addition of o3tl::iterateCodePoints in the first place needs them
independently, anyway)

Change-Id: Id33901a2f7ac627253654ee6d883305dcf5a456f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151415
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-05-05 11:30:12 +02:00
Stephan Bergmann 50d73574b6 Related tdf#104597, tdf#151546: Introduce comphelper::string::reverseCodePoints
69e9925ded "sdext.pdfimport: resolves tdf#104597:
RTL script text runs are reversed" and f6004e1c45
"tdf#151546: RTL text is reversed (Writer pdfimport)" had introduced two calls
to comphelper::string::reverseString into sdext.  That function reverts on the
basis of individual UTF-16 code units, not on the basis of Unicode code points.
And while at least some pre-existing callers of that function want the former
semantics (see below), these two new callers in sdext apparently want the latter
semantics.  Therefore, introduce an additional function
comphelper::string::reverseCodePoints with the latter semantics.

I identified three other places that call comphelper::string::reverseString:
* SbRtl_StrReverse in basic/source/runtime/methods1.cxx apparently implements
  some StrReverse Basic function, where a (presumably non-existing) Basic spec
  would need to decide which of the two semantics is called for.  So leave it
  alone for now.
* SvtFileDialog::IsolateFilterFromPath_Impl in fpicker/source/office/iodlg.cxx
  reverts a string, operates on it, then reverts (parts of) it back.  Whether or
  not that is the most elegant code, using the latter semantics here would
  apparently be wrong, as double invocation of
  comphelper::string::reverseCodePoints is not idempotent when the input is a
  malformed sequence of UTF-16 code units containing a low surrogate followed by
  a high surrogate.
* AccessibleCell::getCellName in svx/source/table/accessiblecell.cxx apparently
  always operates on a string consisting only of Latin uppercase letters A--Z,
  for which both semantics are equivalent.  (So we can just as well stick with
  the simpler comphelper::string::reverseString here.)

(Extending the tests in comphelper/qa/string/test_string.cxx ran into an issue
where loplugin:stringliteralvar warns about deliberate uses of sal_Unicode
arrays rather than UTF-16 string literals wrapped in OUStringLiteral, as those
arrays deliberately contain malformed UTF-16 code unit sequences and thus
converting them into UTF-16 string literals might be considered inappropriate,
see the newly added comment at
StringLiteralVar::isPotentiallyInitializedWithMalformedUtf16 in
compilerplugins/clang/stringliteralvar.cxx for details.  So that loplugin had to
be improved here, too.)

Change-Id: I641cc32c76b0c5f6339ae44d8aa85df0022ffb05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142949
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-11-18 19:50:28 +01:00
Stephan Bergmann 6d2a9697c9 Remove unused comphelper::string::reverseString overload
Change-Id: Ic1c56c7be9804685fd37b8f6a13aaab039e07afa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141361
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-10-14 14:22:55 +02:00
Tomaž Vajngerl 09822cf77c comphelper: fix natural string compare function + reorganize tests
Natural string compare function doesn't take into account that
the string can start with a number and in this case it treats it
like a conventional string compare. This change takes this case
into account.

This change also refactores the tests for NaturalStringSorter
class. The previous tet used a mock XBreakIterator and XCollator
implementations to test the functionallity. This is not needed as
we can just use a real one instead, which makes the test more
real as it actually uses a real implementation instead of a mock
implementation, which could differ. This change removes the mock
XCollator and XBreakIterator implementations and moves the test
into a new file - NaturalStringSortTest.cxx

The test is also extended with the new use case where the string
starts with a number.

Change-Id: I32ea055f914c2947e4d979093b32f56170a61102
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134540
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-05-20 01:19:41 +02:00
Noel Grandin 5de2437551 use string_view in comphelper::string::split
Change-Id: I4afe8aee85905ee35ba195b00b454aefa0ba38af
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132486
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-04 13:48:11 +02:00
Noel Grandin 6a0a0a4d78 use more string_view in comphelper::string
Change-Id: I5d27824694e38de540e5f1fcd8704f8777f65140
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114261
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-04-19 15:04:33 +02:00
Stephan Bergmann 35e471bb4d Adapt the remaining OUString functions to std string_view
...for LIBO_INTERNAL_ONLY.  These had been missed by
1b43cceaea "Make many OUString functions take
std::u16string_view parameters" because they did not match the multi-overload
pattern that was addressed there, but they nevertheless benefit from being
changed just as well (witness e.g. the various resulting changes from copy() to
subView()).

This showed a conversion from OStringChar to std::string_view to be missing
(while the corresponding conversion form OUStringChar to std::u16string_view was
already present).

The improvement to loplugin:stringadd became necessary to fix

> [CPT] compilerplugins/clang/test/stringadd.cxx
> error: 'error' diagnostics expected but not seen:
>   File ~/lo/core/compilerplugins/clang/test/stringadd.cxx Line 43 (directive at ~/lo/core/compilerplugins/clang/test/stringadd.cxx:42): simplify by merging with the preceding assignment [loplugin:stringadd]
>   File ~/lo/core/compilerplugins/clang/test/stringadd.cxx Line 61 (directive at ~/lo/core/compilerplugins/clang/test/stringadd.cxx:60): simplify by merging with the preceding assignment [loplugin:stringadd]
> 2 errors generated.

Change-Id: Ie40de0616a66e60e289c1af0ca60aed6f9ecc279
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107602
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-12-11 21:25:10 +01:00
Stephan Bergmann 40fa3a61ac Extend loplugin:elidestringvar to OString
(In VisitVarDecl, filtering out AbstractConditionalOperator avoids an unhelpful

> ~/lo/core/vcl/source/pdf/XmpMetadata.cxx:63:32: error: replace single use of literal 'rtl::OString' variable with a literal [loplugin:elidestringvar]
>             aXmlWriter.content(sPdfConformance);
>                                ^~~~~~~~~~~~~~~
> ~/lo/core/vcl/source/pdf/XmpMetadata.cxx:52:21: note: literal 'rtl::OString' variable defined here [loplugin:elidestringvar]
>             OString sPdfConformance = (mnPDF_A == 1) ? "A" : "B";
>             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

)

Change-Id: I7d0410f04827d79b4b526752917c37d33cad2671
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104911
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-10-28 08:03:52 +01:00
Stephan Bergmann 14b00ade67 Simplify some OUString constructions with universal character names
Change-Id: I16dcaec29de725b4308f2ef3262673e9b9cab1f4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103270
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-09-23 20:37:56 +02:00
Stephan Bergmann 8a9f358538 Upcoming loplugin:elidestringvar: comphelper
Change-Id: Id388af90ca2c3dff435a1a6261e3de0c3c0dbdbd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95376
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-06-03 09:18:55 +02:00
Stephan Bergmann ac2c1fb821 Replace some uses of OUStringChar with string literals
Change-Id: I763f9a3f57efcd47643ca4651e2454e95c6921c9
Reviewed-on: https://gerrit.libreoffice.org/81127
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-10-19 15:36:52 +02:00
Stephan Bergmann 8b4719c29f Rename OUStringLiteral1 to OUStringChar
It started out as a wrapper around character literals, but has by now become a
wrapper around arbitrary single characters.  Besides updating the documentation,
this change is a mechanical

  for i in $(git grep -Fl OUStringLiteral1); do sed -i -e s/OUStringLiteral1/OUStringChar/g "$i"; done

Change-Id: I1b9eaa4b3fbc9025ce4a4bffea3db1c16188b76f
Reviewed-on: https://gerrit.libreoffice.org/80892
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-10-17 07:28:49 +02:00
Gabor Kelemen 2a962cb122 tdf#42949 Fix IWYU warnings in include/comphelper/[m-z]*
Found with bin/find-unneeded-includes
Only removal proposals are dealt with here.

Change-Id: I04c5ba277d5b3398c07de6ae66713d977636088d
Reviewed-on: https://gerrit.libreoffice.org/61347
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
2018-10-08 12:16:44 +02:00
Noel Grandin 23b0844973 loplugin: look for CPPUNIT_ASSERT_EQUALS with params swapped
idea originally from either tml or moggi, can't remember which

Change-Id: Id78d75035036d3aa1666e33469c6eeb38f9e624d
Reviewed-on: https://gerrit.libreoffice.org/55126
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-06-01 09:14:25 +02:00
Stephan Bergmann b088da2a7a More loplugin:cstylecast: comphelper
auto-rewrite with <https://gerrit.libreoffice.org/#/c/47798/> "Enable
loplugin:cstylecast for some more cases" plus
solenv/clang-format/reformat-formatted-files

Change-Id: I71a5092b344f206f2c7de606f2739d3b6e2cf0bb
2018-01-12 20:27:56 +01:00
Stephan Bergmann 4b60d19694 loplugin:includeform: comphelper
Change-Id: I9297bd0449633d1055125e7c2f2f6d215a22ae7d
2017-10-23 22:46:11 +02:00
Arnaud Versini 1fdb0e1897 Replace all OUString("") with OUString()
Change-Id: Ie14c4d76cb61cfbe0410103adfc1afc8ade0f3e0
Reviewed-on: https://gerrit.libreoffice.org/37146
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-05-04 08:39:18 +02:00
Michael Stahl ab4f53eaad sw: plain-text ASCII export: filter out all CH_TXT_ATR_*
These control characters are Writer implementation details and should
not be available via public interfaces.

This filter is also used by SwXTextRange::getString().

Change-Id: If656ee3d451dbefe2f7a905e8b63a44cdb787809
2017-03-29 17:31:49 +02:00
Stephan Bergmann e57ca02849 Remove dynamic exception specifications
...(for now, from LIBO_INTERNAL_CODE only).  See the mail thread starting at
<https://lists.freedesktop.org/archives/libreoffice/2017-January/076665.html>
"Dynamic Exception Specifications" for details.

Most changes have been done automatically by the rewriting loplugin:dynexcspec
(after enabling the rewriting mode, to be committed shortly).  The way it only
removes exception specs from declarations if it also sees a definition, it
identified some dead declarations-w/o-definitions (that have been removed
manually) and some cases where a definition appeared in multiple include files
(which have also been cleaned up manually).  There's also been cases of macro
paramters (that were used to abstract over exception specs) that have become
unused now (and been removed).

Furthermore, some code needed to be cleaned up manually
(avmedia/source/quicktime/ and connectivity/source/drivers/kab/), as I had no
configurations available that would actually build that code.  Missing @throws
documentation has not been applied in such manual clean-up.

Change-Id: I3408691256c9b0c12bc5332de976743626e13960
Reviewed-on: https://gerrit.libreoffice.org/33574
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2017-01-26 12:54:43 +00:00
Stephan Bergmann 5536aea822 Let OUStringLiteral1 take its arg as ctor arg, not template arg
...which makes it more flexible, can now also be used on non-const arguments.
The drawback of the argument no longer being a compile-time constant is remedied
by making the ctor constexpr.

Change-Id: Ia4903a2cc86791fece92eac0cb8406b6659dd19d
2016-08-30 07:43:52 +02:00
Stephan Bergmann bdd60f1f5e Adapt loplugin:stringconstant to improved OUStringLiteral1
Change-Id: Ibc5128df8bcf8cb5f2f09551c0de6dfdb46bdee0
Reviewed-on: https://gerrit.libreoffice.org/28447
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2016-08-29 11:44:44 +00:00
Miklos Vajna 583e41b9c8 comphelper: fix loplugin:cppunitassertequals warnings
Change-Id: If042462d8f250dbe2e1be278b7524dab243b08e8
Reviewed-on: https://gerrit.libreoffice.org/28012
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
2016-08-10 10:56:02 +00:00
Noel Grandin 7855ea4830 remove comphelper::string::remove
and replace it with OUString/OString::replaceAll

Change-Id: I37b1c3b51251dfd9d749d6f1060c75b3a93d7f1a
Reviewed-on: https://gerrit.libreoffice.org/26850
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
2016-07-04 06:49:52 +00:00
Markus Mohrhard 0d4dcf3800 add comphelper::string::split
Change-Id: Iccc989a786e8e7b8dca1996b635248d7bf7fc5d8
2016-06-18 17:02:08 +02:00
Noel Grandin b14224fe97 loplugin:unusedmethods
using an idea from dtardon:

<dtardon> noelgrandin, hi. could you try to run the unusedmethods clang
plugin with "make build-nocheck"? that would catch functions that are
only used in tests. e.g., i just removed the whole o3tl::range class,
which has not been used in many years, but htere was a test for it...
<noelgrandin> dtardon, interesting idea! Sure, I can do that.

Change-Id: I5653953a426a2186a1e43017212d87ffce520387
Reviewed-on: https://gerrit.libreoffice.org/22041
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2016-02-08 06:08:14 +00:00
Stephan Bergmann b36963c0a6 Replace "SAL_OVERRIDE" with "override" in LIBO_INTERNAL_ONLY code
Change-Id: I2ea407acd763ef2d7dae2d3b8f32525523ac8274
2015-10-12 17:52:29 +02:00
Takeshi Abe a890a7696f tdf#88206 replace cppu::WeakImplHelper* etc.
with the variadic variants, for comphelper.
This also includes extra changes in other modules
required accordingly.

Change-Id: Id1537f46f1c90f760a0d8987a6dafa0e1da03b8f
Reviewed-on: https://gerrit.libreoffice.org/16929
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2015-07-20 07:06:22 +00:00
Stephan Bergmann f8922b67a4 Remove unnecessary comphelper::string::getToken
Change-Id: I49192637121441b9a1980350b9bb32cd995d4386
2015-01-02 14:22:21 +01:00
Tor Lillqvist bbb675d4f5 Some more compareVersionStrings() tests
Change-Id: I5b9dc45352afd63dae4c3952d9647e6e3ec98ef4
2014-11-14 18:27:38 +02:00
Brij Mohan Lal Srivastava d32be3ace8 fdo#86023 - O[U]String needs a 'clear' method
Added clear() method to OString and OUString class, Updated appropriate call-sites.

Change-Id: I0ba97fa6dc7af3e31b605953089a4e8e9c3e61ac
Signed-off-by: Stephan Bergmann <sbergman@redhat.com>
2014-11-14 09:20:38 +01:00
Tor Lillqvist ca2fefb879 Add a function to compare version number strings
Change-Id: I88d3d9040f70e84752ade19001a699f60e9e7636
2014-11-11 19:01:58 +02:00
Thomas Arnhold 6d2de44a54 fix-includes.pl: comphelper
Change-Id: I0b4cd8320881b2b1f7984c86e58915217bcd0d5f
2014-05-11 01:55:37 +02:00
Stephan Bergmann 70cc2b191b First batch of adding SAL_OVERRRIDE to overriding function declarations
...mostly done with a rewriting Clang plugin, with just some manual tweaking
necessary to fix poor macro usage.

Change-Id: I71fa20213e86be10de332ece0aa273239df7b61a
2014-03-26 16:39:26 +01:00
Stephan Bergmann 5e21a413c7 cppuhelper: retrofit std::exception into overriding exception specs
Change-Id: I56e32131b7991ee9948ce46765632eb823d463b3
2014-02-26 18:22:20 +01:00
Luboš Luňák 1946794ae0 mass removal of rtl:: prefixes for O(U)String*
Modules sal, salhelper, cppu, cppuhelper, codemaker (selectively) and odk
have kept them, in order not to break external API (the automatic using declaration
is LO-internal).

Change-Id: I588fc9e0c45b914f824f91c0376980621d730f09
2013-04-07 14:23:11 +02:00
Chr. Rossmanith be9d9fee66 RTL_CONSTASCII_(U)STRINGPARAM removed in comphelper
Change-Id: Ib068c06956bc9f04bb7c468375aacd2e6e9db77d
2013-01-31 10:21:07 +01:00
Michael Meeks 2005a34318 re-base on ALv2 code. 2012-06-29 15:51:49 +01:00
Michael Meeks 328e2263fb targetted re-work of cppunit pieces. 2012-06-27 19:13:11 +01:00
Caolán McNamara 8e01e88145 add a route to compare a O[U]String to one code unit
Seems very awkward to create an entire temporary O[U]String just to compare it
to another when we want to know if that other contains just one char of a given
value

Change-Id: Iacd4e0d87dc5c5211fa06c61c55e1ed85b1e91f3
2012-06-18 15:13:51 +01:00
Caolán McNamara e2cd6a77ea drop String::Reverse
Change-Id: Ie06635dc1f242241d48f9d6de4f592898e605bf2
2012-06-06 14:38:42 +01:00
Stephan Bergmann 9ab0b38e95 Various string function clean up
Added:
* rtl::OString::matchL
* rtl::OString::endsWith
* rtl::OString::endsWithL
* rtl::OString::indexOfL
* rtl::OString::replaceFirst
* rtl::OString::replaceAll
* rtl::OString::getToken
* rtl::OUString::endsWith
* rtl::OUString::replaceFirst
* rtl::OUString::replaceFirstAsciiL
* rtl::OUString::replaceFirstAsciiLAsciiL
* rtl::OUString::replaceAll
* rtl::OUString::replaceAllAsciiL
* rtl::OUString::replaceAllAsciiLAsciiL
* rtl::OUString::getToken
plus underlying C functions where necessary

Deprecated:
* comphelper::string::remove
* comphelper::string::getToken

Removed:
* comphelper::string::searchAndReplaceAsciiL
* comphelper::string::searchAndReplaceAllAsciiWithAscii
* comphelper::string::searchAndReplaceAsciiI
* comphelper::string::replace
* comphelper::string::matchL
* comphelper::string::matchIgnoreAsciiCaseL
* comphelper::string::indexOfL

Also fixed some apparent misuses of RTL_CONSTASCII_USTRINGPARAM ->
RTL_CONSTASCII_STRINGPARAM.
2012-02-15 15:41:09 +01:00
Caolán McNamara 740cf4a590 bah, we don't need these after all 2012-02-10 14:20:52 +00:00