SF.net SVN: geany: [2561] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu May 8 14:16:36 UTC 2008


Revision: 2561
          http://geany.svn.sourceforge.net/geany/?rev=2561&view=rev
Author:   ntrel
Date:     2008-05-08 07:16:35 -0700 (Thu, 08 May 2008)

Log Message:
-----------
Fix C headers getting detected as C++ files (iterate through
filetypes_array, not filetypes_hash as the order is not consistent
with the filetype_id enum).
Add static function filetypes_find_source().

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/filetypes.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-05-07 16:32:23 UTC (rev 2560)
+++ trunk/ChangeLog	2008-05-08 14:16:35 UTC (rev 2561)
@@ -1,3 +1,12 @@
+2008-05-08  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/filetypes.c:
+   Fix C headers getting detected as C++ files (iterate through
+   filetypes_array, not filetypes_hash as the order is not consistent
+   with the filetype_id enum).
+   Add static function filetypes_find_source().
+
+
 2008-05-07  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/templates.c, src/build.c, src/utils.c, src/win32.c,

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2008-05-07 16:32:23 UTC (rev 2560)
+++ trunk/src/filetypes.c	2008-05-08 14:16:35 UTC (rev 2561)
@@ -537,17 +537,34 @@
 }
 
 
-static gboolean match_basename(G_GNUC_UNUSED gpointer key, gpointer value, gpointer user_data)
+typedef gboolean FileTypesPredicate(filetype *ft, gpointer user_data);
+
+/* Find a filetype that predicate returns TRUE for, otherwise return NULL.
+ * Only search source file filetypes. */
+static filetype *filetypes_find_source(FileTypesPredicate predicate, gpointer user_data)
 {
-	filetype *ft = value;
+	guint i;
+
+	for (i = 0; i < filetypes_array->len; i++)
+	{
+		filetype *ft = filetypes[i];
+
+		if (i == GEANY_FILETYPES_NONE)
+			continue;	/* None is not for source files */
+
+		if (predicate(ft, user_data))
+			return ft;
+	}
+	return NULL;
+}
+
+
+static gboolean match_basename(filetype *ft, gpointer user_data)
+{
 	const gchar *base_filename = user_data;
 	gint j;
 	gboolean ret = FALSE;
 
-	/* Don't match '*' because it comes before any custom filetypes */
-	if (ft->id == GEANY_FILETYPES_NONE)
-		return FALSE;
-
 	for (j = 0; ft->pattern[j] != NULL; j++)
 	{
 		GPatternSpec *pattern = g_pattern_spec_new(ft->pattern[j]);
@@ -578,7 +595,7 @@
 	setptr(base_filename, g_utf8_strdown(base_filename, -1));
 #endif
 
-	ft = g_hash_table_find(filetypes_hash, match_basename, base_filename);
+	ft = filetypes_find_source(match_basename, base_filename);
 	if (ft == NULL)
 		ft = filetypes[GEANY_FILETYPES_NONE];
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list