aboutsummaryrefslogtreecommitdiffstats
path: root/src/undo.c
diff options
context:
space:
mode:
authorJoakim Verona2012-07-27 02:22:03 +0200
committerJoakim Verona2012-07-27 02:22:03 +0200
commit5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f (patch)
tree5c55f1096a656a9759f0b53a0b5d1a2289bd366f /src/undo.c
parent0c5c85cf2b350c965bb1ffa5b2d77c2adebc406b (diff)
parent562157c814037dcba58a20cd6908a95992c22283 (diff)
downloademacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.tar.gz
emacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.zip
upstream
Diffstat (limited to 'src/undo.c')
-rw-r--r--src/undo.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/undo.c b/src/undo.c
index 1cb048690ba..c90e7b62405 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -226,7 +226,7 @@ record_first_change (void)
226 base_buffer = base_buffer->base_buffer; 226 base_buffer = base_buffer->base_buffer;
227 227
228 BVAR (current_buffer, undo_list) = 228 BVAR (current_buffer, undo_list) =
229 Fcons (Fcons (Qt, INTEGER_TO_CONS (base_buffer->modtime)), 229 Fcons (Fcons (Qt, make_lisp_time (base_buffer->modtime)),
230 BVAR (current_buffer, undo_list)); 230 BVAR (current_buffer, undo_list));
231} 231}
232 232
@@ -438,8 +438,8 @@ truncate_undo_list (struct buffer *b)
438 unbind_to (count, Qnil); 438 unbind_to (count, Qnil);
439} 439}
440 440
441static void user_error (const char*) NO_RETURN; 441static _Noreturn void
442static void user_error (const char *msg) 442user_error (const char *msg)
443{ 443{
444 xsignal1 (Quser_error, build_string (msg)); 444 xsignal1 (Quser_error, build_string (msg));
445} 445}
@@ -505,10 +505,23 @@ Return what remains of the list. */)
505 cdr = XCDR (next); 505 cdr = XCDR (next);
506 if (EQ (car, Qt)) 506 if (EQ (car, Qt))
507 { 507 {
508 /* Element (t high . low) records previous modtime. */ 508 /* Element (t . TIME) records previous modtime.
509 Preserve any flag of NONEXISTENT_MODTIME_NSECS or
510 UNKNOWN_MODTIME_NSECS. */
509 struct buffer *base_buffer = current_buffer; 511 struct buffer *base_buffer = current_buffer;
510 time_t mod_time; 512 EMACS_TIME mod_time;
511 CONS_TO_INTEGER (cdr, time_t, mod_time); 513
514 if (CONSP (cdr)
515 && CONSP (XCDR (cdr))
516 && CONSP (XCDR (XCDR (cdr)))
517 && CONSP (XCDR (XCDR (XCDR (cdr))))
518 && INTEGERP (XCAR (XCDR (XCDR (XCDR (cdr)))))
519 && XINT (XCAR (XCDR (XCDR (XCDR (cdr))))) < 0)
520 mod_time =
521 (make_emacs_time
522 (0, XINT (XCAR (XCDR (XCDR (XCDR (cdr))))) / 1000));
523 else
524 mod_time = lisp_time_argument (cdr);
512 525
513 if (current_buffer->base_buffer) 526 if (current_buffer->base_buffer)
514 base_buffer = current_buffer->base_buffer; 527 base_buffer = current_buffer->base_buffer;
@@ -516,7 +529,7 @@ Return what remains of the list. */)
516 /* If this records an obsolete save 529 /* If this records an obsolete save
517 (not matching the actual disk file) 530 (not matching the actual disk file)
518 then don't mark unmodified. */ 531 then don't mark unmodified. */
519 if (mod_time != base_buffer->modtime) 532 if (EMACS_TIME_NE (mod_time, base_buffer->modtime))
520 continue; 533 continue;
521#ifdef CLASH_DETECTION 534#ifdef CLASH_DETECTION
522 Funlock_buffer (); 535 Funlock_buffer ();