r16208 - gnucash/branches/csv-import/src/import-export/csv - Added a bunch of comments to gnc-csv-import.c.

Benjamin Sperisen lasindi at gmail.com
Wed Jun 27 04:34:10 EDT 2007


Hi Josh and Derek,

Thanks for your helpful suggestions! I've just committed a revision
incorporating them, as well as a number of new comments.

On 6/25/07, Derek Atkins <warlord at mit.edu> wrote:
> >> -static void encoding_selected(GOCharmapSel* selector, const char* enc,
> >> +/* Event handler for a new encoding being selected. */
> >> +static void encoding_selected(GOCharmapSel* selector, const char* encoding,
> >>                                GncCsvPreview* preview)
> >>  {
> >> +  /* This gets called twice everytime a new encoding is selected. The
> >> +   * second call actually passes the correct data; thus, we only do
> >> +   * something the second time this is called. */
> >>    static gboolean second_call = FALSE;
> >> +  /* If this is the second time the function is called ... */
> >>    if(second_call)
> >
> > Ick.  This stateful behavior should be avoided if at all possible.  Is there
> > a way to instead be conditional on the "correctness" of the data?  Or
> > eliminate the double-call?
>
> Or put the state into the parse context and not in the function?  Yes,
> "static" state is BAD.  What happens if you call the importer multiple
> times?  (e.g. you're importing multiple files) The second time you run
> the importer this variable will be set and you're screwed.

Yes, this behavior is indeed ugly. I have tried to find a way to get
the double call to disappear,  since it's the ideal solution, but had
no success. The function is an event handler for the "charmap_changed"
event in the GOCharmapSel object; I don't know why it calls the
handler twice. I think it might be a bug in GOffice, but I'm not sure.
... In any case, I have changed to using a boolean flag in the
GncCsvPreview struct, as Derek suggested.

Benny


More information about the gnucash-devel mailing list