diff options
| author | Eli Zaretskii | 2004-04-27 13:30:11 +0000 |
|---|---|---|
| committer | Eli Zaretskii | 2004-04-27 13:30:11 +0000 |
| commit | 819da85b3b5a034c2bfb6cdcf682dff417b32c4d (patch) | |
| tree | 225310570342c33d95a8b08f538622c8af6595be /src/fileio.c | |
| parent | 5c5718b6f64642b7acb8a8856b1252741c204d5c (diff) | |
| download | emacs-819da85b3b5a034c2bfb6cdcf682dff417b32c4d.tar.gz emacs-819da85b3b5a034c2bfb6cdcf682dff417b32c4d.zip | |
(Fset_file_times): New function.
(syms_of_fileio): Intern and staticpro it.
Diffstat (limited to 'src/fileio.c')
| -rw-r--r-- | src/fileio.c | 56 |
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; | |||
| 323 | Lisp_Object Qfile_accessible_directory_p; | 323 | Lisp_Object Qfile_accessible_directory_p; |
| 324 | Lisp_Object Qfile_modes; | 324 | Lisp_Object Qfile_modes; |
| 325 | Lisp_Object Qset_file_modes; | 325 | Lisp_Object Qset_file_modes; |
| 326 | Lisp_Object Qset_file_times; | ||
| 326 | Lisp_Object Qfile_newer_than_file_p; | 327 | Lisp_Object Qfile_newer_than_file_p; |
| 327 | Lisp_Object Qinsert_file_contents; | 328 | Lisp_Object Qinsert_file_contents; |
| 328 | Lisp_Object Qwrite_region; | 329 | Lisp_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 | |||
| 3443 | extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *)); | ||
| 3444 | |||
| 3445 | DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0, | ||
| 3446 | doc: /* Set times of file FILENAME to TIME. | ||
| 3447 | Set both access and modification times. | ||
| 3448 | Return t on success, else nil. | ||
| 3449 | Use 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); |