About bRdFlag in SgfVectFilter method (vcl module)

julien2412 serval2412 at yahoo.fr
Sat Oct 12 00:02:03 CEST 2013


Hello,

Cppcheck reported this:
468	variableScope	style	The scope of the variable 'bRdFlag' can be reduced.

Indeed: (see
http://opengrok.libreoffice.org/xref/core/vcl/source/filter/sgfbram.cxx#460)
    462 bool SgfVectFilter(SvStream& rInp, GDIMetaFile& rMtf)
    463 {
    464     sal_uLong     nFileStart;            // Offset des SgfHeaders.
Im allgemeinen 0.
    465     SgfHeader aHead;
    466     SgfEntry  aEntr;
    467     sal_uLong     nNext;
    468     bool      bRdFlag=false;         // Grafikentry gelesen ?
    469     bool      bRet=false;            // Returncode
    470 
    471     nFileStart=rInp.Tell();
    472     rInp>>aHead;
    473     if (aHead.ChkMagic() && aHead.Typ==SGF_SIMPVECT) {
    474         nNext=aHead.GetOffset();
    475         while (nNext && !bRdFlag && !rInp.GetError()) {
    476             rInp.Seek(nFileStart+nNext);
    477             rInp>>aEntr;
    478             nNext=aEntr.GetOffset();
    479             if (aEntr.Typ==aHead.Typ) {
    480                 bRet=SgfFilterVect(rInp,aHead,aEntr,rMtf);
    481             }
    482         } // while(nNext)
    483         if (bRdFlag) {
    484             if (!rInp.GetError()) bRet=true;  // Scheinbar Ok
    485         }
    486     }
    487     return(bRet);

But bRdFlag is never updated so we never pass in l484 and, above all, the
while loop line 475 keeps on.

If we take the example above (see
http://opengrok.libreoffice.org/xref/core/vcl/source/filter/sgfbram.cxx#326)
    326 bool SgfBMapFilter(SvStream& rInp, SvStream& rOut)
    327 {
    328     sal_uLong     nFileStart;            // Offset des SgfHeaders.
Im allgemeinen 0.
    329     SgfHeader aHead;
    330     SgfEntry  aEntr;
    331     sal_uLong     nNext;
    332     bool      bRdFlag=false;         // Grafikentry gelesen ?
    333     bool      bRet=false;            // Returncode
    334 
    335     nFileStart=rInp.Tell();
    336     rInp>>aHead;
    337     if (aHead.ChkMagic() && (aHead.Typ==SgfBitImag0 ||
aHead.Typ==SgfBitImag1 ||
    338                              aHead.Typ==SgfBitImag2 ||
aHead.Typ==SgfBitImgMo)) {
    339         nNext=aHead.GetOffset();
    340         while (nNext && !bRdFlag && !rInp.GetError() &&
!rOut.GetError()) {
    341             rInp.Seek(nFileStart+nNext);
    342             rInp>>aEntr;
    343             nNext=aEntr.GetOffset();
    344             if (aEntr.Typ==aHead.Typ) {
    345                 bRdFlag=true;
    346                 switch(aEntr.Typ) {
    347                     case SgfBitImag0:
    348                     case SgfBitImag1:
    349                     case SgfBitImag2:
    350                     case SgfBitImgMo:
bRet=SgfFilterBMap(rInp,rOut,aHead,aEntr); break;
    351                 }
    352             }
    353         } // while(nNext)
    354     }
    355     if (rInp.GetError()) bRet=false;
    356     return(bRet);
    357 }
bRdFlag is put at true line 345.

So what about get rid of bRdFlag and put some breaks instead + test GetError
at the end for both?
it should give this patch:
 diff --git a/vcl/source/filter/sgfbram.cxx b/vcl/source/filter/sgfbram.cxx
index 8c4a6ad..8079f27 100644
--- a/vcl/source/filter/sgfbram.cxx
+++ b/vcl/source/filter/sgfbram.cxx
@@ -329,7 +329,6 @@ bool SgfBMapFilter(SvStream& rInp, SvStream& rOut)
     SgfHeader aHead;
     SgfEntry  aEntr;
     sal_uLong     nNext;
-    bool      bRdFlag=false;         // Grafikentry gelesen ?
     bool      bRet=false;            // Returncode
 
     nFileStart=rInp.Tell();
@@ -337,12 +336,11 @@ bool SgfBMapFilter(SvStream& rInp, SvStream& rOut)
     if (aHead.ChkMagic() && (aHead.Typ==SgfBitImag0 ||
aHead.Typ==SgfBitImag1 ||
                              aHead.Typ==SgfBitImag2 ||
aHead.Typ==SgfBitImgMo)) {
         nNext=aHead.GetOffset();
-        while (nNext && !bRdFlag && !rInp.GetError() && !rOut.GetError()) {
+        while (nNext && !rInp.GetError() && !rOut.GetError()) {
             rInp.Seek(nFileStart+nNext);
             rInp>>aEntr;
             nNext=aEntr.GetOffset();
             if (aEntr.Typ==aHead.Typ) {
-                bRdFlag=true;
                 switch(aEntr.Typ) {
                     case SgfBitImag0:
                     case SgfBitImag1:
@@ -465,25 +463,23 @@ bool SgfVectFilter(SvStream& rInp, GDIMetaFile& rMtf)
     SgfHeader aHead;
     SgfEntry  aEntr;
     sal_uLong     nNext;
-    bool      bRdFlag=false;         // Grafikentry gelesen ?
     bool      bRet=false;            // Returncode
 
     nFileStart=rInp.Tell();
     rInp>>aHead;
     if (aHead.ChkMagic() && aHead.Typ==SGF_SIMPVECT) {
         nNext=aHead.GetOffset();
-        while (nNext && !bRdFlag && !rInp.GetError()) {
+        while (nNext && !rInp.GetError()) {
             rInp.Seek(nFileStart+nNext);
             rInp>>aEntr;
             nNext=aEntr.GetOffset();
             if (aEntr.Typ==aHead.Typ) {
                 bRet=SgfFilterVect(rInp,aHead,aEntr,rMtf);
+                break;
             }
         } // while(nNext)
-        if (bRdFlag) {
-            if (!rInp.GetError()) bRet=true;  // Scheinbar Ok
-        }
     }--
+    if (rInp.GetError()) bRet=false;
     return(bRet);
 }

Julien



--
View this message in context: http://nabble.documentfoundation.org/About-bRdFlag-in-SgfVectFilter-method-vcl-module-tp4077705.html
Sent from the Dev mailing list archive at Nabble.com.


More information about the LibreOffice mailing list