# HG changeset patch # User Karl Heuer # Date 783750447 0 # Node ID bc352c8f079c2a9958a959114f42da56ee893c77 # Parent c6270c78178182f7ddfb3470875125cd519b1dbb (Fdecode_time): Fix Lisp_Object vs. integer problems. Don't use tm_gmtoff; it's not portable. diff -r c6270c781781 -r bc352c8f079c src/editfns.c --- a/src/editfns.c Wed Nov 02 02:35:56 1994 +0000 +++ b/src/editfns.c Wed Nov 02 04:27:27 1994 +0000 @@ -39,6 +39,7 @@ #define max(a, b) ((a) > (b) ? (a) : (b)) extern void insert_from_buffer (); +static long difftm (); /* Some static data, and a function to initialize it for each run */ @@ -703,6 +704,7 @@ Lisp_Object specified_time; { time_t time_spec; + struct tm save_tm; struct tm *decoded_time; Lisp_Object list_args[9]; @@ -710,15 +712,22 @@ error ("Invalid time specification"); decoded_time = localtime (&time_spec); - list_args[0] = XFASTINT (decoded_time->tm_sec); - list_args[1] = XFASTINT (decoded_time->tm_min); - list_args[2] = XFASTINT (decoded_time->tm_hour); - list_args[3] = XFASTINT (decoded_time->tm_mday); - list_args[4] = XFASTINT (decoded_time->tm_mon + 1); - list_args[5] = XFASTINT (decoded_time->tm_year + 1900); - list_args[6] = XFASTINT (decoded_time->tm_wday); + XSETFASTINT (list_args[0], decoded_time->tm_sec); + XSETFASTINT (list_args[1], decoded_time->tm_min); + XSETFASTINT (list_args[2], decoded_time->tm_hour); + XSETFASTINT (list_args[3], decoded_time->tm_mday); + XSETFASTINT (list_args[4], decoded_time->tm_mon + 1); + XSETFASTINT (list_args[5], decoded_time->tm_year + 1900); + XSETFASTINT (list_args[6], decoded_time->tm_wday); list_args[7] = (decoded_time->tm_isdst)? Qt : Qnil; - list_args[8] = XINT (decoded_time->tm_gmtoff); + + /* Make a copy, in case gmtime modifies the struct. */ + save_tm = *decoded_time; + decoded_time = gmtime (&time_spec); + if (decoded_time == 0) + list_args[8] = Qnil; + else + XSETINT (list_args[8], difftm (&save_tm, decoded_time)); return Flist (9, list_args); }