You are right, passing the '++' to the FIELD_VECTOR macro results in an unexpected incrementation of variable i.


Timo,

Please always send emails about LibreDWG with a copy to [email protected] <mailto:[email protected]>.

So, you think the issue is realloc ing too frequently?

-Felipe

2010/2/22 Timo Lähde <[email protected] <mailto:[email protected]>>

    Hello!

    I was testing testSVG.c with that example.dwg and it crash.

    Variable 'i' isn't the problem, but it's usage in those macros
    because of those too many increments of 'i' in that loop.
    It should happen only once in reallocation in my opinion. After
    that correction that part of code goes past that error.

    I have expanded all those macros to huge decode.c to debug that
    part of code.

    if (_obj->version == 1)
    {
        do
        {
         _obj->sat_data = (char **)realloc(_obj->sat_data, (i + 1) *
    sizeof(char *));
         _obj->block_size = bit_read_BL(dat);
        if (3 >= 3)
        {
          fprintf((&__stderr), "block_size" ": " "%lu" "\n",
    _obj->block_size);
        };
        if (_obj->block_size > 0)
        {
         _obj->sat_data[i] = (char *)malloc(_obj->block_size *
    sizeof(char));
        for (vcount = 0; vcount < _obj->block_size; vcount++)
       {
        _obj->sat_data[i][vcount] = bit_read_RC(dat);
        if (3 >= 3)
        {
          fprintf((&__stderr), "sat_data[i++]" "[%d]: " "%2x" "\n",
    vcount, _obj->sat_data[i][vcount]);
        }
        }
        };
       i++;
       } while (_obj->block_size);
    }
    else

    {
        fprintf((&__stderr), "TODO: Implement parsing of ACIS file in
    entities 37,38 and 39.\n");
    }

    Timo

    2010/2/22 Felipe Sanches <[email protected]
    <mailto:[email protected]>>

        I agree that using this vriable is not the best thing to do.
        But decode3d is not working at all yet. If you want to give it
        a try, feel free. But if you do so, let us know what you're
        doing so that we dont duplicate efforts.

        juca

        PS: I forwarded your message to [email protected]
        <mailto:[email protected]>

        2010/2/21 Timo Lähde <[email protected]
        <mailto:[email protected]>>

            Hello!

            Is this better way to do that, because of variable i :

            dwg.spec line 1244:

            if (FIELD_VALUE(version)==1)
                    {
                      do
                        {
                          //FIELD_VALUE(sat_data) = (BITCODE_RC**)
            realloc(FIELD_VALUE(sat_data), i * sizeof(BITCODE_RC*));
                         FIELD_VALUE(sat_data) = (BITCODE_RC**)
            realloc(FIELD_VALUE(sat_data), (i + 1) * sizeof(BITCODE_RC*));
                          FIELD_BL (block_size);
                          //FIELD_VECTOR (sat_data[i++], RC, block_size);
                          FIELD_VECTOR (sat_data[i], RC, block_size);
                          i++;
                        } while(FIELD_VALUE(block_size));
                    }
                  else
                    {
                      //TODO
                      fprintf(stderr, "TODO: Implement parsing of ACIS
            file in entities 37,38 and 39.\n");
                    }

            regards Timo VJ Lähde











Reply via email to