]> git.eshelyaron.com Git - emacs.git/commitdiff
Report file-notify-error in w32notify.c
authorEli Zaretskii <eliz@gnu.org>
Mon, 14 Sep 2015 07:31:17 +0000 (10:31 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 14 Sep 2015 07:31:17 +0000 (10:31 +0300)
* src/w32notify.c (report_w32notify_error): New function.
(Fw32notify_add_watch, Fw32notify_rm_watch): Use it to report
errors, instead of calling report_file_error.  (Bug#21432)

src/w32notify.c

index fa4ad01636b3033bde7c0f156ffb0285067c56d4..efd9e56e10569a79316942f2500b7d51c7939868 100644 (file)
@@ -464,6 +464,21 @@ filter_list_to_flags (Lisp_Object filter_list)
   return flags;
 }
 
+/* Like report_file_error, but reports a file-notify-error instead.  */
+static void
+report_w32notify_error (const char *string, Lisp_Object name)
+{
+  Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name);
+  synchronize_system_messages_locale ();
+  char *str = strerror (errno);
+  Lisp_Object errstring
+    = code_convert_string_norecord (build_unibyte_string (str),
+                                   Vlocale_coding_system, 0);
+  Lisp_Object errdata = Fcons (errstring, data);
+
+  xsignal (Qfile_notify_error, Fcons (build_string (string), errdata));
+}
+
 DEFUN ("w32notify-add-watch", Fw32notify_add_watch,
        Sw32notify_add_watch, 3, 3, 0,
        doc: /* Add a watch for filesystem events pertaining to FILE.
@@ -528,8 +543,8 @@ generate notifications correctly, though.  */)
       || (w32_major_version == 5 && w32_major_version < 1))
     {
       errno = ENOSYS;
-      report_file_error ("Watching filesystem events is not supported",
-                        Qnil);
+      report_w32notify_error ("Watching filesystem events is not supported",
+                             Qnil);
     }
 
   /* filenotify.el always passes us a directory, either the parent
@@ -573,11 +588,11 @@ generate notifications correctly, though.  */)
                                              Vlocale_coding_system, 0);
          else
            lisp_errstr = build_string (errstr);
-         report_file_error ("Cannot watch file",
-                            Fcons (lisp_errstr, Fcons (file, Qnil)));
+         report_w32notify_error ("Cannot watch file",
+                                 Fcons (lisp_errstr, Fcons (file, Qnil)));
        }
       else
-       report_file_error ("Cannot watch file", Fcons (file, Qnil));
+       report_w32notify_error ("Cannot watch file", Fcons (file, Qnil));
     }
   /* Store watch object in watch list. */
   watch_descriptor = make_pointer_integer (dirwatch);
@@ -611,8 +626,8 @@ WATCH-DESCRIPTOR should be an object returned by `w32notify-add-watch'.  */)
     }
 
   if (status == -1)
-    report_file_error ("Invalid watch descriptor", Fcons (watch_descriptor,
-                                                         Qnil));
+    report_w32notify_error ("Invalid watch descriptor", Fcons (watch_descriptor,
+                                                              Qnil));
 
   return Qnil;
 }