summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-10-23 09:27:51 +0200
committerMichael Stahl <michael.stahl@allotropia.de>2022-03-03 13:38:06 +0100
commit49c8a7b96f47071c1a961b334e70b2f5c7c7b288 (patch)
tree942eb78825cce4ddeb6e53268c53f9fafcf3779b
parent44bdbe696bc3dc733fd95fc6320ceee22e6f20a5 (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.h34
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;