61 Commits
Author SHA1 Message Date
Noel Grandin aeb099ec66 loplugin:ostr in shell
Change-Id: Ia3b9f7dc0ae67f420c3bed370f549a492251156b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167705
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-16 08:49:30 +02:00
Mahdi Tizabi cab4fd84ff tdf#42982 Improved UNO API error reporting
Making `RuntimeException` instances's messages in  'SyncDbusSessionHelper.hxx' more clear.

Change-Id: I40105102f8785536d29e103a44d20d11c68943bb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136629
Tested-by: Jenkins
Reviewed-by: Hossein <hossein@libreoffice.org>
2022-09-15 15:10:35 +02:00
Stephan Bergmann a93c3f2eb0 GError::message is UTF-8
This caused CppunitTest_sw_dialogs_test to fail for LO_TEST_LOCALE=or hitting

> sal/rtl/ustring.cxx:530: void rtl_uString_newFromAscii(rtl_uString**, const char*): Assertion `static_cast<unsigned char>(*pCharStr) < 0x80' failed.

at

> #4  0x00007fd18a844f74 in rtl_uString_newFromAscii(rtl_uString**, char const*) (ppThis=0x7ffcb73e6e90, pCharStr=0x6191180 "ସମୟ ସୀମା ପହଞ୍ଚିଯାଇଛି") at sal/rtl/ustring.cxx:530
> #5  0x00007fd1525af9c1 in rtl::OUString::createFromAscii(char const*) (value=0x6191180 "ସମୟ ସୀମା ପହଞ୍ଚିଯାଇଛି") at include/rtl/ustring.hxx:3328
> #6  0x00007fd1525ad026 in (anonymous namespace)::GErrorWrapper::~GErrorWrapper() (this=0x7ffcb73e6f38, __in_chrg=<optimized out>) at shell/source/sessioninstall/SyncDbusSessionHelper.cxx:35
> #7  0x00007fd1525ad6a5 in (anonymous namespace)::request(char const*, com::sun::star::uno::Sequence<rtl::OUString> const&, std::u16string_view) (method=0x7fd1525b481d "InstallFontconfigResources", resources=uno::Sequence of length 1 = {...}, interaction=u"hide-finished") at shell/source/sessioninstall/SyncDbusSessionHelper.cxx:91
> #8  0x00007fd1525ada9d in shell::sessioninstall::SyncDbusSessionHelper::InstallFontconfigResources(com::sun::star::uno::Sequence<rtl::OUString> const&, rtl::OUString const&) (this=0x5d22380, resources=uno::Sequence of length 1 = {...}, interaction="hide-finished") at shell/source/sessioninstall/SyncDbusSessionHelper.cxx:158
> #9  0x00007fd178670daa in psp::PrintFontManager::autoInstallFontLangSupport(Timer*) (this=0x2e3ed90) at vcl/unx/generic/fontmanager/fontconfig.cxx:962
> #10 0x00007fd178670cd9 in psp::PrintFontManager::LinkStubautoInstallFontLangSupport(void*, Timer*) (instance=0x2e3ed90, data=0x2e3efa0) at vcl/unx/generic/fontmanager/fontconfig.cxx:956
> #11 0x00007fd178341e03 in Link<Timer*, void>::Call(Timer*) const (this=0x2e3efc0, data=0x2e3efa0) at include/tools/link.hxx:111
[...]

(But probably better to use the lenient OUString-from-rtl_TextEncoding ctor
rather than OUString::fromUtf8, in case GError::message happens to not contain
proper UTF-8 after all, which would make the latter assert.)

Change-Id: I61fede4576988c5f7f35bb071ab3f2c0e7a15aa1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122599
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2021-09-24 20:53:42 +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 62128cda92 Strength-reduce some OUStringToOString("..."+...)
...to "..."+OUStringToOString(...), in preparation of making OUStringToOString
take a std::u16string_view

Change-Id: Ic01ca249d4d0eb58ac959ffdf96471308a3715dc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107600
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-12-11 17:33:57 +01:00
Noel Grandin ae777762c1 shell/sessioninstall: create instances with uno constructors
See tdf#74608 for motivation.

Change-Id: I1878cf052b3f250927d5bb72ddd523af28cf9337
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98917
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-07-17 08:48:02 +02:00
Gabor Kelemen 1a6a794745 tdf#42949 Fix IWYU warnings in shell/
Except for MAC/WIN specific parts (i.e. most of it)

Found with bin/find-unneeded-includes
Only removal proposals are dealt with here.

Change-Id: Ia14fb27c047e0e69f81386212aa25344f1297e05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95663
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2020-06-10 16:34:06 +02:00
Stephan Bergmann fe6cce01c8 Fix loplugin:simplifypointertobool for libstdc++ std::shared_ptr
...where the get member function is defined on a std::__shared_ptr base class,
so loplugin:simplifypointertobool used to miss those until now.  (While e.g.
using libc++ on macOS found those cases.)

366d08f2f6 "new loplugin:simplifypointertobool"
was mistaken in breaking isSmartPointerType(const clang::Type* t) out of
isSmartPointerType(const Expr* e); c874294ad9 "Fix
detection of std::unique_ptr/shared_ptr in loplugin:redundantpointerops" had
introduced that indivisible two-step algorithm on purpose.

The amount of additional hits (on Linux) apparently asked for turning
loplugin:simplifypointertobool into a rewriting plugin.  Which in turn showed
that the naive adivce to just "drop the get()" is not sufficient in places that
are not contextually converted to bool, as those places need to be wrapped in a
bool(...) functional cast now.  If the expression was already wrapped in
parentheses, those could be reused as part of the functional cast, but
implementing that showed that such cases are not yet found at all by the
existing loplugin:simplifypointertobool.  Lets leave that TODO for another
commit.

Besides the changes to compilerplugins/ itself, this change has been generated
fully automatically with the rewriting plugin on Linux.

Change-Id: I83107d6f634fc9ac232986f49044d7017df83e2a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94888
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Jenkins
2020-05-26 22:33:02 +02:00
Noel Grandin c37fe8886d compact namespace in sal..svgio
Change-Id: I7e70614ea5a1cb1a1dc0ef8e9fb6fd48e85c3562
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93904
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-05-10 12:03:13 +02:00
Noel Grandin c82efb610b clang-tidy modernize-concat-nested-namespace
Change-Id: Iab35a8b85b3ba1df791c774f40b037f9420a071a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86708
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-01-31 18:36:09 +01:00
Noel Grandin 011dae60e2 sal_Char->char in sfx2..slideshow
Change-Id: I59667664fc097989e0a78d8876f2be8353911236
Reviewed-on: https://gerrit.libreoffice.org/85701
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-12-22 18:04:27 +01:00
Stephan Bergmann 7ceee0f1ec Extend loplugin:redundantinline to catch inline functions w/o external linkage
...where "inline" (in its meaning of "this function can be defined in multiple
translation units") thus doesn't make much sense.  (As discussed in
compilerplugins/clang/redundantinline.cxx, exempt such "static inline" functions
in include files for now.)

All the rewriting has been done automatically by the plugin, except for one
instance in sw/source/ui/frmdlg/column.cxx that used to involve an #if), plus
some subsequent solenv/clang-format/reformat-formatted-files.

Change-Id: Ib8b996b651aeafc03bbdc8890faa05ed50517224
Reviewed-on: https://gerrit.libreoffice.org/61573
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-10-09 14:47:17 +02:00
Noel Grandin 24a57e2b85 Keep strings alive again as necessary
regression from
    commit 49eb02f07a
    new loplugin:unusedvariablemore

Change-Id: If92be219368a0dc33f40cd425efc6028c28c5e53
2018-04-12 09:12:10 +02:00
Noel Grandin 49eb02f07a new loplugin:unusedvariablemore
collection of heuristics to look for local variables that are never read
from i.e. do not contribute to the surrounding logic

This is an expensive plugin, since it walks up the parent tree,
so it is off by default.

Change-Id: Ib8ba292241bd16adf299e8bba4502cb473513a06
Reviewed-on: https://gerrit.libreoffice.org/52450
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-11 09:48:10 +02:00
Caolán McNamara 9d6b6fc967 InstallPrinteDrivers->InstallPrinterDrivers
Change-Id: Ieb161ca1f183611449f9d7eaf67b2505d870da48
Reviewed-on: https://gerrit.libreoffice.org/47662
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-01-11 14:30:26 +01:00
Caolán McNamara b71660540e [API CHANGE] migrate PackageKit usage to Modify2
xid dropped in favour of application_id

Change-Id: Id1eb43aa9c8dfb4eac82f99eff0f84c5320e0da0
Reviewed-on: https://gerrit.libreoffice.org/47661
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-01-11 14:29:22 +01:00
Caolán McNamara 054dac27e0 call g_variant_unref on return value
Change-Id: If8f0e443738060f51c8822783558ea14fb34b8ce
Reviewed-on: https://gerrit.libreoffice.org/46962
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-12-22 20:07:50 +01:00
Caolán McNamara 5b272bf4b9 fix indent vs other functions
Change-Id: I276dc315404932288da3addaf23418ab3e4deb65
Reviewed-on: https://gerrit.libreoffice.org/46967
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-12-22 12:27:09 +01:00
Noel Grandin 3af500580b loplugin:salcall fix functions
since cdecl is the default calling convention on Windows for
such functions, the annotation is redundant.

Change-Id: I1a85fa27e5ac65ce0e04a19bde74c90800ffaa2d
Reviewed-on: https://gerrit.libreoffice.org/46164
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-11 12:13:46 +01:00
Andrea Gelmini d71bcc4dc5 Fix typos
Change-Id: Ia544298334364ece3b3963a4adc00c5e01189b91
Reviewed-on: https://gerrit.libreoffice.org/44654
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mark Page <aptitude@btconnect.com>
2017-11-13 08:43:17 +01:00
Stephan Bergmann 7666da05ee loplugin:includeform: shell
Change-Id: I73be2f09a4b27509b62936daa414efb51977277f
2017-10-23 22:45:53 +02:00
Noel Grandin 4511431fb6 improve "unnecessary user-declared destructor" check
to look for inline&empty destructors, where we can just let
the compiler do it's thing

Change-Id: Ibde8800bdfed6b77649c30ebc19921167c33dec3
Reviewed-on: https://gerrit.libreoffice.org/32999
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-01-27 09:49:04 +00: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 9b37930e8a New loplugin:externvar: shell
Change-Id: I280df3f20a45763d6d615ee9104a19c58ff4a046
2017-01-09 15:40:47 +01:00
Stephan Bergmann 91dd2db17b loplugin:override: No more need for the "MSVC dtor override" workaround
The issue of 362d4f0cd4 "Explicitly mark
overriding destructors as 'virtual'" appears to no longer be a problem with
MSVC 2013.

(The little change in the rewriting code of compilerplugins/clang/override.cxx
was necessary to prevent an endless loop when adding "override" to

  OOO_DLLPUBLIC_CHARTTOOLS    virtual ~CloseableLifeTimeManager();

in chart2/source/inc/LifeTime.hxx, getting stuck in the leading
OOO_DLLPUBLIC_CHARTTOOLS macro.  Can't remember what that
isAtEndOfImmediateMacroExpansion thing was originally necessary for, anyway.)

Change-Id: I534c634504d7216b9bb632c2775c04eaf27e927e
2016-09-13 13:19:22 +02:00
Noel Grandin 20c14c812c loplugin:constantparam in sfx2
Change-Id: If5d401001abb7bf3fc642d47f537b57836e6d9c5
Reviewed-on: https://gerrit.libreoffice.org/28772
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2016-09-09 12:42:25 +00:00
Wastack eea3f508c3 tdf#97966 Drop 'static' keywords
Including no keywords from extern "C" blocks

Change-Id: I87f2ed75888b51ec9e0cb75566bf7c2351b479b4
Reviewed-on: https://gerrit.libreoffice.org/23675
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2016-04-01 06:46:02 +00:00
Stephan Bergmann 21f98618d8 -Werror=terminate (GCC 6)
...when throwing an exception from implicitly noexcept ~GErrorWrapper.  So make
~GErrorWrapper noexcept(false) and see that no code executed while a
GErrorWrapper instance is active on the stack would throw an exception.  But the
design of GErrorWrapper, to throw an exception from a dtor, is very brittle and
should be fixed.

Change-Id: Ib04ff2b0497c160dc7ee44c3354fa9619285ec88
2016-01-19 10:37:55 +01:00
Stephan Bergmann b8793748b0 Seems more natural to pass a homogenous list by initializer_list
...than by template parameter pack (even if that requires using ServiceDecl*, as
initializer_list cannot take reference types)

Change-Id: Ia986201b52d8daedfe925f132ebc79bc2c0ba378
2015-11-20 13:39:52 +01:00
Stephan Bergmann 7a8d48f57d loplugin:nullptr (automatic rewrite)
Change-Id: Ied61699170bd5d2c3878135b1a43b4dc1deff4d4
2015-11-10 10:31:39 +01:00
Noel Grandin 56c4032272 com::sun::star->css in shell
Change-Id: Id74a5e79764f37944afab4d2a0dcfc7dbfc9b295
Reviewed-on: https://gerrit.libreoffice.org/19663
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2015-10-29 08:44:12 +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
Stephan Bergmann bff4c13475 Replace "SAL_DELETED_FUNCTION" with "= delete" in LIBO_INTERNAL_ONLY code
Change-Id: I328ac7a95ccc87732efae48b567a0556865928f3
2015-10-12 17:52:26 +02:00
Takeshi Abe cfaebe5de9 shell: tdf#88206 replace cppu::WeakImplHelper* etc.
with the variadic variants.

Change-Id: I0eb2efbd123198c7d8a99e9dd7c613f9b2b23c2d
Reviewed-on: https://gerrit.libreoffice.org/18286
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
2015-09-03 17:55:02 +00:00
Noel Grandin 46791546a8 cppcheck:noExplicitConstructor
Change-Id: I940714e303b905b756ba077eeda6c41746bd421f
2015-08-07 08:14:34 +02:00
Stephan Bergmann 4bf8384d97 loplugin:simplifybool
Change-Id: I822967265cbe9f58641e2d9bd1260fd724df8ad1
2015-07-16 14:00:20 +02:00
Noel Grandin 1afb790a11 inline COMPHELPER_SERVICEDECL_ macro
it was not adding any value

Change-Id: I6a911aac81e883f9155ed0cf24bfb7904efb3f92
2015-06-15 09:46:14 +02:00
Stephan Bergmann 2633a2a34e boost::shared_ptr -> std::shared_ptr
Change-Id: Iff798bd2ae4fec97f0f1647ea33f6f6ff1f3b208
2015-05-18 12:16:32 +02:00
Stephan Bergmann 2527a4d5a7 Implement some more XModify methods
Change-Id: I1345d6a3d62f1e5c3353c5412024f6b47f824f7a
2015-05-13 16:45:09 +02:00
Stephan Bergmann fe5644984a loplugin:deletedspecial
Change-Id: I2a3d9deb9c71bb4dfe3ad9076d7202636001e0bb
2015-02-07 12:36:02 +01:00
Noel Grandin 0371a63365 remove unnecessary 'using namespace rtl' declarations
It turns out that almost none of them were necessary.

Change-Id: I1311ed28409c682b57ea8d149bcbaf2c49133e83
Reviewed-on: https://gerrit.libreoffice.org/12133
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2014-10-29 11:28:54 +00:00
Stephan Bergmann 83ac0fd7bd Fix *_component_getFactory function type
Change-Id: I406e0b659f551f347a8fa9ae2a57ec7965ba7ea0
2014-08-28 17:35:03 +02:00
Noel Grandin e2080e70fe new compilerplugin returnbyref
Find places where we are returning a pointer to something, where we can
be returning a reference.
e.g.
   class A {
     struct X x;
     public X* getX() { return &x; }
   }
which can be:
     public X& getX() { return x; }

Change-Id: I796fd23fd36a18aedf6e36bc28f8fab4f518c6c7
2014-06-24 11:34:21 +02:00
Noel Grandin f0ae48b684 remove unnecessary NULL parameter passed to UNO Exception
.. now that we have a default value for that parameter

Change-Id: I54d6b0a0a01ce2f2e5168ada0c427424de0477bc
2014-05-29 09:01:40 +02:00
Noel Grandin 5babf1b903 remove unnecessary scope qualifier from sal_Bool uses
i.e. convert "::sal_Bool" to "sal_Bool"

Change-Id: Ie5943aee4fee617bf2670655558927ed25b7e067
2014-04-03 13:54:02 +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
Noel Grandin 86a32589e9 Find places where OUString and OString are passed by value.
It's not very efficient, because we generally end up copying it twice -
once into the parameter and again into the destination OUString.

So I create a clang plugin that finds such places and generates a
warning so that we can convert them to pass-by-reference.

Change-Id: I5341a6ea9e3190f4b4c05c42c85595e3dcd83361
2014-03-18 08:32:26 +02:00
Stephan Bergmann 5e21a413c7 cppuhelper: retrofit std::exception into overriding exception specs
Change-Id: I56e32131b7991ee9948ce46765632eb823d463b3
2014-02-26 18:22:20 +01:00
Stephan Bergmann 9ed364774c Adapt all (non-extension, SharedLibrary) .components to environment="..."
Change-Id: I56f38bd786f3a026cb2908f28540dc9c4003af83
2013-12-17 11:06:00 +01:00
Marcos Paulo de Souza bcb51cff22 fdo#63020: Replace ::comphelper::stl_begin()...
And use some templates inside include/com/sun/star/uno/Sequence.hxx

Change-Id: I48875fa1517751fc4cb0cf2b6c08b88975a29b47
Reviewed-on: https://gerrit.libreoffice.org/6599
Tested-by: LibreOffice gerrit bot <gerrit@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
2013-11-07 10:43:34 -06:00