Sure, why the heck not? Why didn't I think of that? So this instead, right?
tm_returned = localtime_r(&current_time, &mtm);
g_return_if_fail(tm_returned != NULL);

And get rid of the next line: mtm = *tm_returned;



On Fri, Jul 31, 2009 at 2:37 PM, Derek Atkins <warl...@mit.edu> wrote:

> Hi,
>
> As I said in my last message, I'm catching up on lots of changesets.
> Is there any reason not to use localtime_r() here?  We already make
> sure it exists by using AC_REPLACE_FUNCS().
>
> -derek
>
> Charles Day <ceda...@cvs.gnucash.org> writes:
>
> > Author: cedayiv
> > Date: 2008-08-08 19:38:45 -0400 (Fri, 08 Aug 2008)
> > New Revision: 17459
> > Trac: http://svn.gnucash.org/trac/changeset/17459
> >
> > Modified:
> >    gnucash/trunk/src/gnome-utils/gnc-date-edit.c
> > Log:
> > Bug #545722: Get the GNCDateEdit control working on Win32 again. Don't
> assume that the content returned by localtime() will not be changed out from
> under you.
> > BP
> >
> >
> > Modified: gnucash/trunk/src/gnome-utils/gnc-date-edit.c
> > ===================================================================
> > --- gnucash/trunk/src/gnome-utils/gnc-date-edit.c     2008-08-08 21:36:48
> UTC (rev 17458)
> > +++ gnucash/trunk/src/gnome-utils/gnc-date-edit.c     2008-08-08 23:38:45
> UTC (rev 17459)
> > @@ -307,7 +307,8 @@
> >  fill_time_popup (GtkWidget *widget, GNCDateEdit *gde)
> >  {
> >       GtkWidget *menu;
> > -     struct tm *mtm;
> > +     struct tm *tm_returned;
> > +     struct tm mtm;
> >       time_t current_time;
> >       int i, j;
> >
> > @@ -318,21 +319,25 @@
> >       gtk_option_menu_set_menu (GTK_OPTION_MENU (gde->time_popup), menu);
> >
> >       time (&current_time);
> > -     mtm = localtime (&current_time);
> > +     tm_returned = localtime (&current_time);
> > +     g_return_if_fail(tm_returned != NULL);
> > +        /* The return value points to statically allocated, shared
> memory.
> > +         * Copy the contents so we don't risk unexpected changes. */
> > +        mtm = *tm_returned;
> >
> >       for (i = gde->lower_hour; i <= gde->upper_hour; i++){
> >               GtkWidget *item, *submenu;
> >               hour_info_t *hit;
> >               char buffer [40];
> >
> > -             mtm->tm_hour = i;
> > -             mtm->tm_min  = 0;
> > +             mtm.tm_hour = i;
> > +             mtm.tm_min  = 0;
> >               hit = g_new (hour_info_t, 1);
> >
> >               if (gde->flags & GNC_DATE_EDIT_24_HR)
> > -                     qof_strftime (buffer, sizeof (buffer), "%H:00",
> mtm);
> > +                     qof_strftime (buffer, sizeof (buffer), "%H:00",
> &mtm);
> >               else
> > -                     qof_strftime (buffer, sizeof (buffer), "%I:00 %p ",
> mtm);
> > +                     qof_strftime (buffer, sizeof (buffer), "%I:00 %p ",
> &mtm);
> >               hit->hour = g_strdup (buffer);
> >               hit->gde  = gde;
> >
> > @@ -351,14 +356,14 @@
> >               for (j = 0; j < 60; j += 15){
> >                       GtkWidget *mins;
> >
> > -                     mtm->tm_min = j;
> > +                     mtm.tm_min = j;
> >                       hit = g_new (hour_info_t, 1);
> >                       if (gde->flags & GNC_DATE_EDIT_24_HR)
> >                               qof_strftime (buffer, sizeof (buffer),
> > -                                           "%H:%M", mtm);
> > +                                           "%H:%M", &mtm);
> >                       else
> >                               qof_strftime (buffer, sizeof (buffer),
> > -                                           "%I:%M %p", mtm);
> > +                                           "%I:%M %p", &mtm);
> >                       hit->hour = g_strdup (buffer);
> >                       hit->gde  = gde;
> >
> > @@ -529,7 +534,8 @@
> >  void
> >  gnc_date_edit_set_time (GNCDateEdit *gde, time_t the_time)
> >  {
> > -     struct tm *mytm;
> > +     struct tm *tm_returned;
> > +     struct tm tm_to_set;
> >
> >       g_return_if_fail (gde != NULL);
> >          g_return_if_fail (GNC_IS_DATE_EDIT (gde));
> > @@ -545,8 +551,14 @@
> >          else
> >            gde->initial_time = the_time;
> >
> > -     mytm = localtime (&the_time);
> > -     gnc_date_edit_set_time_tm(gde, mytm);
> > +        /* Convert time_t to tm. */
> > +     tm_returned = localtime (&the_time);
> > +     g_return_if_fail(tm_returned != NULL);
> > +        /* The return value points to statically allocated, shared
> memory.
> > +         * Copy the contents so we don't risk unexpected changes. */
> > +        tm_to_set = *tm_returned;
> > +
> > +     gnc_date_edit_set_time_tm(gde, &tm_to_set);
> >  }
> >
> >  void
> >
> > _______________________________________________
> > gnucash-changes mailing list
> > gnucash-chan...@gnucash.org
> > https://lists.gnucash.org/mailman/listinfo/gnucash-changes
> >
> >
>
> --
>        Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
>       Member, MIT Student Information Processing Board  (SIPB)
>       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
>       warl...@mit.edu                        PGP key available
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel@gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
>
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to