[geany/geany] 6c6ecc: Check Scintilla status in debug builds

Matthew Brush git-noreply at xxxxx
Fri Aug 4 06:48:30 UTC 2017


Branch:      refs/heads/master
Author:      Matthew Brush <matt at geany.org>
Committer:   Matthew Brush <mbrush at codebrainz.ca>
Date:        Fri, 04 Aug 2017 06:48:30 UTC
Commit:      6c6eccd994dd4af68afe32b6b606b935e7328d2d
             https://github.com/geany/geany/commit/6c6eccd994dd4af68afe32b6b606b935e7328d2d

Log Message:
-----------
Check Scintilla status in debug builds

In the future, this could be moved to release-mode runtime errors which
try and pop-up a dialog message and/or recover gracefully.


Modified Paths:
--------------
    src/sciwrappers.c
    src/sciwrappers.h

Modified: src/sciwrappers.c
26 lines changed, 26 insertions(+), 0 deletions(-)
===================================================================
@@ -42,6 +42,32 @@
 #include <string.h>
 
 
+#ifndef NDEBUG
+sptr_t sci_send_message_internal (const gchar *file, guint line, ScintillaObject *sci,
+	guint msg, uptr_t wparam, sptr_t lparam)
+{
+	sptr_t result;
+	gint status;
+
+	scintilla_send_message(sci, SCI_SETSTATUS, 0, 0);
+	result = scintilla_send_message(sci, msg, wparam, lparam);
+	status = scintilla_send_message(sci, SCI_GETSTATUS, 0, 0);
+
+	if (status != 0)
+	{
+		static const gchar *fmt = "%s:%u: scintilla message '%u' failed "
+			"on instance '%p' with wParam='%llu' and lParam='%llu'";
+		if (status < SC_STATUS_WARN_START)
+			g_critical(fmt, file, line, msg, (gpointer)sci, wparam, lparam);
+		else
+			g_warning(fmt, file, line, msg, (gpointer)sci, wparam, lparam);
+	}
+
+	return result;
+}
+#endif
+
+
 /* line numbers visibility */
 void sci_set_line_numbers(ScintillaObject *sci, gboolean set)
 {


Modified: src/sciwrappers.h
13 lines changed, 9 insertions(+), 4 deletions(-)
===================================================================
@@ -28,13 +28,18 @@
 #include "ScintillaWidget.h" /* for ScintillaObject */
 
 
+G_BEGIN_DECLS
+
 #ifdef GEANY_PRIVATE
-#define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)
+# ifndef NDEBUG
+#  define SSM(s, m, w, l) sci_send_message_internal(__FILE__, __LINE__, s, m, w, l)
+sptr_t sci_send_message_internal (const gchar *file, guint line, ScintillaObject *sci,
+	guint msg, uptr_t wparam, sptr_t lparam);
+# else
+#  define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)
+# endif
 #endif
 
-
-G_BEGIN_DECLS
-
 void 				sci_set_text				(ScintillaObject *sci,  const gchar *text);
 gboolean			sci_has_selection			(ScintillaObject *sci);
 void 				sci_end_undo_action			(ScintillaObject *sci);



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list