aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2004-04-27 13:30:11 +0000
committerEli Zaretskii2004-04-27 13:30:11 +0000
commit819da85b3b5a034c2bfb6cdcf682dff417b32c4d (patch)
tree225310570342c33d95a8b08f538622c8af6595be /src
parent5c5718b6f64642b7acb8a8856b1252741c204d5c (diff)
downloademacs-819da85b3b5a034c2bfb6cdcf682dff417b32c4d.tar.gz
emacs-819da85b3b5a034c2bfb6cdcf682dff417b32c4d.zip
(Fset_file_times): New function.
(syms_of_fileio): Intern and staticpro it.
Diffstat (limited to 'src')
-rw-r--r--src/fileio.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/fileio.c b/src/fileio.c
index c0195558a3c..1f7fd5753b5 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -323,6 +323,7 @@ Lisp_Object Qfile_regular_p;
323Lisp_Object Qfile_accessible_directory_p; 323Lisp_Object Qfile_accessible_directory_p;
324Lisp_Object Qfile_modes; 324Lisp_Object Qfile_modes;
325Lisp_Object Qset_file_modes; 325Lisp_Object Qset_file_modes;
326Lisp_Object Qset_file_times;
326Lisp_Object Qfile_newer_than_file_p; 327Lisp_Object Qfile_newer_than_file_p;
327Lisp_Object Qinsert_file_contents; 328Lisp_Object Qinsert_file_contents;
328Lisp_Object Qwrite_region; 329Lisp_Object Qwrite_region;
@@ -3438,7 +3439,59 @@ The value is an integer. */)
3438 XSETINT (value, (~ realmask) & 0777); 3439 XSETINT (value, (~ realmask) & 0777);
3439 return value; 3440 return value;
3440} 3441}
3442
3443extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *));
3444
3445DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0,
3446 doc: /* Set times of file FILENAME to TIME.
3447Set both access and modification times.
3448Return t on success, else nil.
3449Use the current time if TIME is nil. TIME is in the format of
3450`current-time'. */)
3451 (filename, time)
3452 Lisp_Object filename, time;
3453{
3454 Lisp_Object absname, encoded_absname;
3455 Lisp_Object handler;
3456 time_t sec;
3457 int usec;
3458
3459 if (! lisp_time_argument (time, &sec, &usec))
3460 error ("Invalid time specification");
3461
3462 absname = Fexpand_file_name (filename, current_buffer->directory);
3463
3464 /* If the file name has special constructs in it,
3465 call the corresponding file handler. */
3466 handler = Ffind_file_name_handler (absname, Qset_file_times);
3467 if (!NILP (handler))
3468 return call3 (handler, Qset_file_times, absname, time);
3469
3470 encoded_absname = ENCODE_FILE (absname);
3441 3471
3472 {
3473 EMACS_TIME t;
3474
3475 EMACS_SET_SECS (t, sec);
3476 EMACS_SET_USECS (t, usec);
3477
3478 if (set_file_times (SDATA (encoded_absname), t, t))
3479 {
3480#ifdef DOS_NT
3481 struct stat st;
3482
3483 /* Setting times on a directory always fails. */
3484 if (stat (SDATA (encoded_absname), &st) == 0
3485 && (st.st_mode & S_IFMT) == S_IFDIR)
3486 return Qnil;
3487#endif
3488 report_file_error ("Setting file times", Fcons (absname, Qnil));
3489 return Qnil;
3490 }
3491 }
3492
3493 return Qt;
3494}
3442 3495
3443#ifdef __NetBSD__ 3496#ifdef __NetBSD__
3444#define unix 42 3497#define unix 42
@@ -6342,6 +6395,7 @@ syms_of_fileio ()
6342 Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); 6395 Qfile_accessible_directory_p = intern ("file-accessible-directory-p");
6343 Qfile_modes = intern ("file-modes"); 6396 Qfile_modes = intern ("file-modes");
6344 Qset_file_modes = intern ("set-file-modes"); 6397 Qset_file_modes = intern ("set-file-modes");
6398 Qset_file_times = intern ("set-file-times");
6345 Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); 6399 Qfile_newer_than_file_p = intern ("file-newer-than-file-p");
6346 Qinsert_file_contents = intern ("insert-file-contents"); 6400 Qinsert_file_contents = intern ("insert-file-contents");
6347 Qwrite_region = intern ("write-region"); 6401 Qwrite_region = intern ("write-region");
@@ -6375,6 +6429,7 @@ syms_of_fileio ()
6375 staticpro (&Qfile_accessible_directory_p); 6429 staticpro (&Qfile_accessible_directory_p);
6376 staticpro (&Qfile_modes); 6430 staticpro (&Qfile_modes);
6377 staticpro (&Qset_file_modes); 6431 staticpro (&Qset_file_modes);
6432 staticpro (&Qset_file_times);
6378 staticpro (&Qfile_newer_than_file_p); 6433 staticpro (&Qfile_newer_than_file_p);
6379 staticpro (&Qinsert_file_contents); 6434 staticpro (&Qinsert_file_contents);
6380 staticpro (&Qwrite_region); 6435 staticpro (&Qwrite_region);
@@ -6598,6 +6653,7 @@ a non-nil value. */);
6598 defsubr (&Sfile_regular_p); 6653 defsubr (&Sfile_regular_p);
6599 defsubr (&Sfile_modes); 6654 defsubr (&Sfile_modes);
6600 defsubr (&Sset_file_modes); 6655 defsubr (&Sset_file_modes);
6656 defsubr (&Sset_file_times);
6601 defsubr (&Sset_default_file_modes); 6657 defsubr (&Sset_default_file_modes);
6602 defsubr (&Sdefault_file_modes); 6658 defsubr (&Sdefault_file_modes);
6603 defsubr (&Sfile_newer_than_file_p); 6659 defsubr (&Sfile_newer_than_file_p);