From: Eli Zaretskii Date: Mon, 14 Sep 2015 07:02:04 +0000 (+0300) Subject: Implement w32notify-valid-p X-Git-Tag: emacs-25.0.90~1224^2~140 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=12629d2857ba2a7c8a6b6a6b61f28a179d2c92a7;p=emacs.git Implement w32notify-valid-p * src/w32notify.c (Fw32notify_valid_p): New function. (Bug#21432) * lisp/filenotify.el (w32notify-valid-p): No longer an alias for 'identity'. --- diff --git a/lisp/filenotify.el b/lisp/filenotify.el index 9a48c5ee979..002c5a5d584 100644 --- a/lisp/filenotify.el +++ b/lisp/filenotify.el @@ -359,7 +359,6 @@ DESCRIPTOR should be an object returned by `file-notify-add-watch'." ;; Temporary declarations. (defalias 'gfile-valid-p 'identity) -(defalias 'w32notify-valid-p 'identity) (defun file-notify-valid-p (descriptor) "Check a watch specified by its DESCRIPTOR. diff --git a/src/w32notify.c b/src/w32notify.c index ab6cd12ab93..fa4ad01636b 100644 --- a/src/w32notify.c +++ b/src/w32notify.c @@ -628,6 +628,29 @@ w32_get_watch_object (void *desc) return NILP (watch_list) ? Qnil : assoc_no_quit (descriptor, watch_list); } +DEFUN ("w32notify-valid-p", Fw32notify_valid_p, Sw32notify_valid_p, 1, 1, 0, + doc: /* "Check a watch specified by its WATCH-DESCRIPTOR for validity. + +WATCH-DESCRIPTOR should be an object returned by `w32notify-add-watch'. + +A watch can become invalid if the directory it watches is deleted, or if +the watcher thread exits abnormally for any other reason. */) + (Lisp_Object watch_descriptor) +{ + Lisp_Object watch_object = Fassoc (watch_descriptor, watch_list); + + if (!NILP (watch_object)) + { + struct notification *dirwatch = + (struct notification *)XINTPTR (watch_descriptor); + if (w32_valid_pointer_p (dirwatch, sizeof(struct notification)) + && dirwatch->dir != NULL) + return Qt; + } + + return Qnil; +} + void globals_of_w32notify (void) { @@ -648,6 +671,7 @@ syms_of_w32notify (void) defsubr (&Sw32notify_add_watch); defsubr (&Sw32notify_rm_watch); + defsubr (&Sw32notify_valid_p); staticpro (&watch_list);