Commit 39adff0d authored by Paul Eggert's avatar Paul Eggert

Fix bugs in file timestamp newness comparisons.

* fileio.c (Ffile_newer_than_file_p):
* lread.c (Fload): Use full timestamp resolution of files,
not just the 1-second resolution, so that files that are only
slightly newer still count as newer.
* fileio.c (Ffile_newer_than_file_p): Don't assume file
timestamps fit in 'int'; this fixes a Y2038 bug on most hosts.
parent dbeed9a6
2012-07-04 Paul Eggert <eggert@cs.ucla.edu>
Fix bugs in file timestamp newness comparisons.
* fileio.c (Ffile_newer_than_file_p):
* lread.c (Fload): Use full timestamp resolution of files,
not just the 1-second resolution, so that files that are only
slightly newer still count as newer.
* fileio.c (Ffile_newer_than_file_p): Don't assume file
timestamps fit in 'int'; this fixes a Y2038 bug on most hosts.
2012-07-03 Paul Eggert <eggert@cs.ucla.edu>
* fileio.c: Improve handling of file time marker. (Bug#11852)
(special_mtime): New function.
(Finsert_file_contents, Fverify_visited_file_modtime):
......
......@@ -3079,8 +3079,7 @@ otherwise, if FILE2 does not exist, the answer is t. */)
(Lisp_Object file1, Lisp_Object file2)
{
Lisp_Object absname1, absname2;
struct stat st;
int mtime1;
struct stat st1, st2;
Lisp_Object handler;
struct gcpro gcpro1, gcpro2;
......@@ -3106,15 +3105,14 @@ otherwise, if FILE2 does not exist, the answer is t. */)
absname2 = ENCODE_FILE (absname2);
UNGCPRO;
if (stat (SSDATA (absname1), &st) < 0)
if (stat (SSDATA (absname1), &st1) < 0)
return Qnil;
mtime1 = st.st_mtime;
if (stat (SSDATA (absname2), &st) < 0)
if (stat (SSDATA (absname2), &st2) < 0)
return Qt;
return (mtime1 > st.st_mtime) ? Qt : Qnil;
return (EMACS_TIME_GT (get_stat_mtime (&st1), get_stat_mtime (&st2))
? Qt : Qnil);
}
#ifndef READ_BUF_SIZE
......
......@@ -26,6 +26,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <limits.h> /* For CHAR_BIT. */
#include <setjmp.h>
#include <stat-time.h>
#include "lisp.h"
#include "intervals.h"
#include "character.h"
......@@ -1214,7 +1215,8 @@ Return t if the file exists and loads successfully. */)
SSET (efound, SBYTES (efound) - 1, 'c');
}
if (result == 0 && s1.st_mtime < s2.st_mtime)
if (result == 0
&& EMACS_TIME_LT (get_stat_mtime (&s1), get_stat_mtime (&s2)))
{
/* Make the progress messages mention that source is newer. */
newer = 1;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment