[GRASS-dev] Re: [GRASS GIS] #869: Compile libs with -fexception

Radim Blazek radim.blazek at gmail.com
Thu Jan 14 11:16:02 EST 2010


Thanks for the suggestion. The title of
http://trac.osgeo.org/qgis/ticket/1878 is however "remove
setjmp/longjmp in grass plugin&provider and use exceptions instead" so
the intention was to remove setjmp/longjmp.
I don't know exactly if there were problems with setjmp/longjmp or it
was just attempt to improve the code. Using exceptions is certainly
better.

Radim

On Thu, Jan 14, 2010 at 4:59 PM, Soeren Gebbert
<soerengebbert at googlemail.com> wrote:
> I use in vtk.grass-bridge (C++ -VTK GRASS wrapper) a different approach.
> http://code.google.com/p/vtk-grass-bridge/
>
> Replacing the G_fatal_error() function and using the setjmp/longjmp
> construct allows you to catch all errors from grass, inclusively stack
> restoration. Glynn made this suggestion. :)
>
> This function replace G_fatal_error(), to set with
> G_set_error_routine(vgb_error_handler);:
>
> int vgb_error_handler(const char *msg, int fatal)
> {
>    if (fatal == 0)
>    {
>        fprintf(stderr, "%s\n", msg);
>        return 1;
>    }
>    else
>    {
>        fprintf(stderr, "\n############## Exceptiont called ###########\n");
>        vgb_error_message = msg;
>        longjmp(vgb_stack_buffer, 1);
>    }
>    return 1;
> }
>
>
> This is an example how to handle fatal errors (old example, still
> check for return value):
>    if (!setjmp(vgb_stack_buffer))
>    {
>        if (Rast_get_row(this->Map, this->RasterBuff, idx, this->MapType) < 0)
>        {
>            error = 1;
>        }
>    }
>    else
>    {
>        this->InsertNextError(vgb_error_message);
>        return NULL;
>    }
>
> Code examples from:
> http://code.google.com/p/vtk-grass-bridge/source/browse/trunk/Common/vtkGRASSDefines.h
> http://code.google.com/p/vtk-grass-bridge/source/browse/trunk/Common/vtkGRASSInit.cxx
> http://code.google.com/p/vtk-grass-bridge/source/browse/trunk/Raster/vtkGRASSRasterMapBase.cxx
>
> Soeren
>
>
> 2010/1/14 GRASS GIS <trac at osgeo.org>:
>> #869: Compile libs with -fexception
>> --------------------------+-------------------------------------------------
>>  Reporter:  rblazek      |       Owner:  grass-dev at lists.osgeo.org
>>      Type:  defect       |      Status:  closed
>>  Priority:  normal       |   Milestone:  6.5.0
>>  Component:  Compiling    |     Version:  unspecified
>> Resolution:  worksforme   |    Keywords:
>>  Platform:  Unspecified  |         Cpu:  All
>> --------------------------+-------------------------------------------------
>> Comment (by rblazek):
>>
>>  Replying to [comment:8 hamish]:
>>  > fwiw, wrt. -fexceptions, Francesco commented on the DebianGIS list:
>>  >
>>  {{{
>>  This would be required for any C library linked by Qgis. This is out of
>>  discussion.
>>  Qgis has to manage correctly C libraries by providing wrappers to raise
>>  execeptions
>>  when C calls fail, else people will start asking that libc too supports
>>  exceptions, soon or later...
>>  }}}
>>
>>  Probably he does not know, that GRASS libraries can call exit(). No
>>  wrapper can help in that situation AFAIK.
>>
>> --
>> Ticket URL: <https://trac.osgeo.org/grass/ticket/869#comment:9>
>> GRASS GIS <http://grass.osgeo.org>
>>
>> _______________________________________________
>> grass-dev mailing list
>> grass-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-dev
>>
> _______________________________________________
> grass-dev mailing list
> grass-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-dev
>


More information about the grass-dev mailing list