emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: dired-do-touch


From: Matthew Mundell
Subject: Re: dired-do-touch
Date: 24 Mar 2004 21:59:50 +0000
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50

address@hidden (Kim F. Storm) writes:

> Eli Zaretskii <address@hidden> writes:
>
> > > I think that this is acceptable behaviour on such systems.
> >
> > What is? to signal an error?
>
> Ups -- no, that's not what I meant.
>
> Let me try again:
>
> >    else more-or-less silently ignore errors in this function for
> > directories on such systems.
>
> I think that this is acceptable behaviour on such systems.
>
>
> > > Maybe the function could simply return t if time was modified, nil
> > > otherwise.  Then it would be easier for a programmer to change his
> > > code to deal with systems where the call fails.
> >
> > Yes, a good idea, IMHO.
>
> So let's do it that way.  Matt?

Silently ignoring the error for directories on those systems sounds
like the right approach.  Here is the primitive.  Does the change look
OK?  It needs to be tried on those systems.

===================================================================
RCS file: /cvsroot/emacs/emacs/src/fileio.c,v
diff -u -r1.499 fileio.c
-- src/fileio.c 18 Mar 2004 02:58:45 -0000      1.499
++ src/fileio.c 24 Mar 2004 14:51:31 -0000
@@ -323,6 +323,7 @@
Lisp_Object Qfile_accessible_directory_p;
Lisp_Object Qfile_modes;
Lisp_Object Qset_file_modes;
Lisp_Object Qset_file_times;
Lisp_Object Qfile_newer_than_file_p;
Lisp_Object Qinsert_file_contents;
Lisp_Object Qwrite_region;
@@ -3438,7 +3439,59 @@
  XSETINT (value, (~ realmask) & 0777);
  return value;
}

extern int lisp_time_argument P_ ((Lisp_Object, time_t *, int *));

DEFUN ("set-file-times", Fset_file_times, Sset_file_times, 1, 2, 0,
       doc: /* Set times of file FILENAME to TIME.
Set both access and modification times.
Return t on success, else nil.
Use the current time if TIME is nil.  TIME is in the format of
`current-time'. */)
  (filename, time)
     Lisp_Object filename, time;
{
  Lisp_Object absname, encoded_absname;
  Lisp_Object handler;
  time_t sec;
  int usec;

  if (! lisp_time_argument (time, &sec, &usec))
    error ("Invalid time specification");

  absname = Fexpand_file_name (filename, current_buffer->directory);

  /* If the file name has special constructs in it,
     call the corresponding file handler.  */
  handler = Ffind_file_name_handler (absname, Qset_file_times);
  if (!NILP (handler))
    return call3 (handler, Qset_file_times, absname, time);

  encoded_absname = ENCODE_FILE (absname);

  {
    EMACS_TIME t;

    EMACS_SET_SECS (t, sec);
    EMACS_SET_USECS (t, usec);

    if (set_file_times (SDATA (encoded_absname), t, t))
      {
#ifdef DOS_NT
        struct stat st;

        /* Setting times on a directory always fails.  */
        if (stat (SDATA (encoded_absname), &st) == 0
            && (st.st_mode & S_IFMT) == S_IFDIR)
          return Qnil;
#endif
        report_file_error ("Setting file times", Fcons (absname, Qnil));
        return Qnil;
      }
  }

  return Qt;
}

#ifdef __NetBSD__
#define unix 42
@@ -6339,6 +6392,7 @@
  Qfile_accessible_directory_p = intern ("file-accessible-directory-p");
  Qfile_modes = intern ("file-modes");
  Qset_file_modes = intern ("set-file-modes");
  Qset_file_times = intern ("set-file-times");
  Qfile_newer_than_file_p = intern ("file-newer-than-file-p");
  Qinsert_file_contents = intern ("insert-file-contents");
  Qwrite_region = intern ("write-region");
@@ -6372,6 +6426,7 @@
  staticpro (&Qfile_accessible_directory_p);
  staticpro (&Qfile_modes);
  staticpro (&Qset_file_modes);
  staticpro (&Qset_file_times);
  staticpro (&Qfile_newer_than_file_p);
  staticpro (&Qinsert_file_contents);
  staticpro (&Qwrite_region);
@@ -6595,6 +6650,7 @@
  defsubr (&Sfile_regular_p);
  defsubr (&Sfile_modes);
  defsubr (&Sset_file_modes);
  defsubr (&Sset_file_times);
  defsubr (&Sset_default_file_modes);
  defsubr (&Sdefault_file_modes);
  defsubr (&Sfile_newer_than_file_p);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]