Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Unified Diff: core/src/fxcodec/jbig2/JBig2_GsidProc.cpp

Issue 1382613003: Remove gotos in JBig2 code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: address comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.cpp ('k') | core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/src/fxcodec/jbig2/JBig2_GsidProc.cpp
diff --git a/core/src/fxcodec/jbig2/JBig2_GsidProc.cpp b/core/src/fxcodec/jbig2/JBig2_GsidProc.cpp
index b97a2129265f658c839f84fbaf776e926b38e3c2..d89bb8f24940afc6c8dba0a197d3762e359c59c8 100644
--- a/core/src/fxcodec/jbig2/JBig2_GsidProc.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_GsidProc.cpp
@@ -15,15 +15,6 @@
FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
JBig2ArithCtx* gbContext,
IFX_Pause* pPause) {
- CJBig2_Image** GSPLANES;
- int32_t J, K;
- FX_DWORD x, y;
- FX_DWORD* GSVALS;
- GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP);
- GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH);
- JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
- JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
-
nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
pGRD->MMR = GSMMR;
pGRD->GBW = GSW;
@@ -46,105 +37,100 @@ FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
pGRD->GBAT[6] = -2;
pGRD->GBAT[7] = -2;
}
+
+ nonstd::unique_ptr<CJBig2_Image*, FxFreeDeleter> GSPLANES(
+ FX_Alloc(CJBig2_Image*, GSBPP));
+ JBIG2_memset(GSPLANES.get(), 0, sizeof(CJBig2_Image*) * GSBPP);
FXCODEC_STATUS status = pGRD->Start_decode_Arith(
- &GSPLANES[GSBPP - 1], pArithDecoder, gbContext, nullptr);
+ &GSPLANES.get()[GSBPP - 1], pArithDecoder, gbContext, nullptr);
while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
pGRD->Continue_decode(pPause);
}
- if (!GSPLANES[GSBPP - 1]) {
- goto failed;
- }
- J = GSBPP - 2;
+ if (!GSPLANES.get()[GSBPP - 1])
+ return nullptr;
+
+ int32_t J = GSBPP - 2;
while (J >= 0) {
FXCODEC_STATUS status = pGRD->Start_decode_Arith(
- &GSPLANES[J], pArithDecoder, gbContext, nullptr);
+ &GSPLANES.get()[J], pArithDecoder, gbContext, nullptr);
while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
pGRD->Continue_decode(pPause);
}
- if (!GSPLANES[J]) {
- for (K = GSBPP - 1; K > J; K--) {
- delete GSPLANES[K];
- goto failed;
+ if (!GSPLANES.get()[J]) {
+ for (int32_t K = GSBPP - 1; K > J; --K) {
+ delete GSPLANES.get()[K];
+ return nullptr;
}
}
- GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
+ GSPLANES.get()[J]->composeFrom(0, 0, GSPLANES.get()[J + 1],
+ JBIG2_COMPOSE_XOR);
J = J - 1;
}
- for (y = 0; y < GSH; y++) {
- for (x = 0; x < GSW; x++) {
- for (J = 0; J < GSBPP; J++) {
- GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
+ nonstd::unique_ptr<FX_DWORD, FxFreeDeleter> GSVALS(
+ FX_Alloc2D(FX_DWORD, GSW, GSH));
+ JBIG2_memset(GSVALS.get(), 0, sizeof(FX_DWORD) * GSW * GSH);
+ for (FX_DWORD y = 0; y < GSH; ++y) {
+ for (FX_DWORD x = 0; x < GSW; ++x) {
+ for (J = 0; J < GSBPP; ++J) {
+ GSVALS.get()[y * GSW + x] |= GSPLANES.get()[J]->getPixel(x, y) << J;
}
}
}
- for (J = 0; J < GSBPP; J++) {
- delete GSPLANES[J];
+ for (J = 0; J < GSBPP; ++J) {
+ delete GSPLANES.get()[J];
}
- FX_Free(GSPLANES);
- return GSVALS;
-failed:
- FX_Free(GSPLANES);
- FX_Free(GSVALS);
- return nullptr;
+ return GSVALS.release();
}
FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream,
IFX_Pause* pPause) {
- CJBig2_Image** GSPLANES;
- int32_t J, K;
- FX_DWORD x, y;
- FX_DWORD* GSVALS;
- GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP);
- GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH);
- JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
- JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
-
nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
pGRD->MMR = GSMMR;
pGRD->GBW = GSW;
pGRD->GBH = GSH;
+
+ nonstd::unique_ptr<CJBig2_Image*> GSPLANES(FX_Alloc(CJBig2_Image*, GSBPP));
+ JBIG2_memset(GSPLANES.get(), 0, sizeof(CJBig2_Image*) * GSBPP);
FXCODEC_STATUS status =
- pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream, nullptr);
+ pGRD->Start_decode_MMR(&GSPLANES.get()[GSBPP - 1], pStream, nullptr);
while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
pGRD->Continue_decode(pPause);
}
- if (!GSPLANES[GSBPP - 1]) {
- goto failed;
- }
+ if (!GSPLANES.get()[GSBPP - 1])
+ return nullptr;
+
pStream->alignByte();
pStream->offset(3);
- J = GSBPP - 2;
+ int32_t J = GSBPP - 2;
while (J >= 0) {
FXCODEC_STATUS status =
- pGRD->Start_decode_MMR(&GSPLANES[J], pStream, nullptr);
+ pGRD->Start_decode_MMR(&GSPLANES.get()[J], pStream, nullptr);
while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
pGRD->Continue_decode(pPause);
}
- if (!GSPLANES[J]) {
- for (K = GSBPP - 1; K > J; K--) {
- delete GSPLANES[K];
- goto failed;
+ if (!GSPLANES.get()[J]) {
+ for (int32_t K = GSBPP - 1; K > J; --K) {
+ delete GSPLANES.get()[K];
+ return nullptr;
}
}
pStream->alignByte();
pStream->offset(3);
- GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
+ GSPLANES.get()[J]->composeFrom(0, 0, GSPLANES.get()[J + 1],
+ JBIG2_COMPOSE_XOR);
J = J - 1;
}
- for (y = 0; y < GSH; y++) {
- for (x = 0; x < GSW; x++) {
- for (J = 0; J < GSBPP; J++) {
- GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
+ nonstd::unique_ptr<FX_DWORD> GSVALS(FX_Alloc2D(FX_DWORD, GSW, GSH));
+ JBIG2_memset(GSVALS.get(), 0, sizeof(FX_DWORD) * GSW * GSH);
+ for (FX_DWORD y = 0; y < GSH; ++y) {
+ for (FX_DWORD x = 0; x < GSW; ++x) {
+ for (J = 0; J < GSBPP; ++J) {
+ GSVALS.get()[y * GSW + x] |= GSPLANES.get()[J]->getPixel(x, y) << J;
}
}
}
- for (J = 0; J < GSBPP; J++) {
- delete GSPLANES[J];
+ for (J = 0; J < GSBPP; ++J) {
+ delete GSPLANES.get()[J];
}
- FX_Free(GSPLANES);
- return GSVALS;
-failed:
- FX_Free(GSPLANES);
- FX_Free(GSVALS);
- return nullptr;
+ return GSVALS.release();
}
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.cpp ('k') | core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698