/* Determine callback function. */
monitor_object = make_pointer_integer (monitor);
- eassert (FIXNUMP (monitor_object));
watch_object = assq_no_quit (monitor_object, watch_list);
if (CONSP (watch_object))
if (! monitor)
xsignal2 (Qfile_notify_error, build_string ("Cannot watch file"), file);
- Lisp_Object watch_descriptor = make_pointer_integer (monitor);
+ Lisp_Object watch_descriptor = make_pointer_integer_unsafe (monitor);
- /* Check the dicey assumption that make_pointer_integer is safe. */
- if (! FIXNUMP (watch_descriptor))
+ if (! (FIXNUMP (watch_descriptor)
+ && XFIXNUMPTR (watch_descriptor) == monitor))
{
g_object_unref (monitor);
xsignal2 (Qfile_notify_error, build_string ("Unsupported file watcher"),
return XUNTAG (a, Lisp_Int0, char);
}
+INLINE Lisp_Object
+make_pointer_integer_unsafe (void *p)
+{
+ return TAG_PTR (Lisp_Int0, p);
+}
+
INLINE Lisp_Object
make_pointer_integer (void *p)
{
- Lisp_Object a = TAG_PTR (Lisp_Int0, p);
+ Lisp_Object a = make_pointer_integer_unsafe (p);
eassert (FIXNUMP (a) && XFIXNUMPTR (a) == p);
return a;
}