diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-10-23 09:27:51 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2022-03-03 13:38:06 +0100 |
commit | 49c8a7b96f47071c1a961b334e70b2f5c7c7b288 (patch) | |
tree | 942eb78825cce4ddeb6e53268c53f9fafcf3779b | |
parent | 44bdbe696bc3dc733fd95fc6320ceee22e6f20a5 (diff) |
loplugin:useuniqueptr in LoadDrawingObject
Change-Id: I6d6204128f40a87bc05987fa1ce724cf1d95aac1
Reviewed-on: https://gerrit.libreoffice.org/62220
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit 55f0b65b0568b8a8b1d823578eea1cbf633f4134)
-rw-r--r-- | hwpfilter/source/drawing.h | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/hwpfilter/source/drawing.h b/hwpfilter/source/drawing.h index c720c3b947ff..b6ed1971672a 100644 --- a/hwpfilter/source/drawing.h +++ b/hwpfilter/source/drawing.h @@ -316,17 +316,17 @@ static bool LoadCommonHeader(HWPDrawingObject * hdo, unsigned short * link_info) return hmem->skipBlock(size - common_size ) != 0; } -static HWPDrawingObject *LoadDrawingObject(void) +static std::unique_ptr<HWPDrawingObject> LoadDrawingObject(void) { - HWPDrawingObject *hdo, *head, *prev; + HWPDrawingObject *prev = nullptr; + std::unique_ptr<HWPDrawingObject> hdo, head; unsigned short link_info; - head = prev = nullptr; do { - hdo = new HWPDrawingObject; - if (!LoadCommonHeader(hdo, &link_info)) + hdo.reset(new HWPDrawingObject); + if (!LoadCommonHeader(hdo.get(), &link_info)) { goto error; } @@ -340,7 +340,7 @@ static HWPDrawingObject *LoadDrawingObject(void) } else { - switch (int res = HWPDOFunc(hdo, OBJFUNC_LOAD, nullptr, 0)) + switch (int res = HWPDOFunc(hdo.get(), OBJFUNC_LOAD, nullptr, 0)) { case OBJRET_FILE_ERROR: goto error; @@ -355,22 +355,28 @@ static HWPDrawingObject *LoadDrawingObject(void) } if (link_info & HDOFILE_HAS_CHILD) { - hdo->child.reset( LoadDrawingObject() ); + hdo->child = LoadDrawingObject(); if (hdo->child == nullptr) { goto error; } } if (prev == nullptr) - head = hdo; + { + prev = hdo.get(); + head = std::move(hdo); + } else - prev->next.reset( hdo ); - prev = hdo; + { + prev = hdo.get(); + prev->next = std::move( hdo ); + } } while (link_info & HDOFILE_HAS_NEXT); return head; - error: + +error: // drawing object can be list. // hdo = current item, head = list; @@ -378,8 +384,8 @@ static HWPDrawingObject *LoadDrawingObject(void) { hdo->type = HWPDO_RECT; } - HWPDOFunc(hdo, OBJFUNC_FREE, nullptr, 0); - delete hdo; + HWPDOFunc(hdo.get(), OBJFUNC_FREE, nullptr, 0); + hdo.reset(); if( prev ) { @@ -417,7 +423,7 @@ static bool LoadDrawingObjectBlock(Picture * pic) !hmem->skipBlock(size - HDOFILE_HEADER_SIZE)) return false; - pic->picinfo.picdraw.hdo = LoadDrawingObject(); + pic->picinfo.picdraw.hdo = LoadDrawingObject().release(); if (pic->picinfo.picdraw.hdo == nullptr) return false; return true; |