common picture: ++exception case.

Fixed load() to return InvalidArgument if the file path is invalid.
This commit is contained in:
Hermet Park 2021-07-02 12:40:39 +09:00 committed by Hermet Park
parent 113ca8b845
commit 8aa941c4ab
4 changed files with 12 additions and 5 deletions

View file

@ -988,7 +988,7 @@ public:
* @param[in] path A path to the picture file. * @param[in] path A path to the picture file.
* *
* @retval Result::Success When succeed. * @retval Result::Success When succeed.
* @retval Result::InvalidArguments In case the @p path is empty. * @retval Result::InvalidArguments In case the @p path is invalid.
* @retval Result::NonSupport When trying to load a file with an unknown extension. * @retval Result::NonSupport When trying to load a file with an unknown extension.
* @retval Result::Unknown If an error occurs at a later stage. * @retval Result::Unknown If an error occurs at a later stage.
* *

View file

@ -131,11 +131,14 @@ bool LoaderMgr::term()
} }
shared_ptr<Loader> LoaderMgr::loader(const string& path) shared_ptr<Loader> LoaderMgr::loader(const string& path, bool* invalid)
{ {
*invalid = false;
if (auto loader = _find(path)) { if (auto loader = _find(path)) {
if (loader->open(path)) return shared_ptr<Loader>(loader); if (loader->open(path)) return shared_ptr<Loader>(loader);
else delete(loader); else delete(loader);
*invalid = true;
} }
return nullptr; return nullptr;
} }

View file

@ -30,7 +30,7 @@ struct LoaderMgr
{ {
static bool init(); static bool init();
static bool term(); static bool term();
static shared_ptr<Loader> loader(const string& path); static shared_ptr<Loader> loader(const string& path, bool* invalid);
static shared_ptr<Loader> loader(const char* data, uint32_t size, bool copy); static shared_ptr<Loader> loader(const char* data, uint32_t size, bool copy);
static shared_ptr<Loader> loader(const uint32_t* data, uint32_t w, uint32_t h, bool copy); static shared_ptr<Loader> loader(const uint32_t* data, uint32_t w, uint32_t h, bool copy);
}; };

View file

@ -167,8 +167,12 @@ struct Picture::Impl
Result load(const string& path) Result load(const string& path)
{ {
if (loader) loader->close(); if (loader) loader->close();
loader = LoaderMgr::loader(path); bool invalid; //Invalid Path
if (!loader) return Result::NonSupport; loader = LoaderMgr::loader(path, &invalid);
if (!loader) {
if (invalid) return Result::InvalidArguments;
return Result::NonSupport;
}
if (!loader->read()) return Result::Unknown; if (!loader->read()) return Result::Unknown;
w = loader->w; w = loader->w;
h = loader->h; h = loader->h;