SF.net SVN: geany:[4203] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Thu Sep 17 16:47:46 UTC 2009
Revision: 4203
http://geany.svn.sourceforge.net/geany/?rev=4203&view=rev
Author: ntrel
Date: 2009-09-17 16:47:45 +0000 (Thu, 17 Sep 2009)
Log Message:
-----------
Add foreach_dir() API macro.
Update API docs for utils_get_file_list().
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/utils.c
trunk/src/utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-09-17 16:39:11 UTC (rev 4202)
+++ trunk/ChangeLog 2009-09-17 16:47:45 UTC (rev 4203)
@@ -3,6 +3,9 @@
* plugins/filebrowser.c:
Free file list memory whilst iterating the list.
Minor formatting fixes.
+ * src/utils.c, src/utils.h:
+ Add foreach_dir() API macro.
+ Update API docs for utils_get_file_list().
2009-09-16 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2009-09-17 16:39:11 UTC (rev 4202)
+++ trunk/src/utils.c 2009-09-17 16:47:45 UTC (rev 4203)
@@ -1342,23 +1342,30 @@
/**
- * Gets a sorted list of files from the specified directory.
- * Locale encoding is expected for path and used for the file list. The list and the data
- * in the list should be freed after use.
+ * Gets a sorted list of files from the specified directory.
+ * Locale encoding is expected for @a path and used for the file list. The list and the data
+ * in the list should be freed after use, e.g.:
+ * @code
+ * g_slist_foreach(list, (GFunc) g_free, NULL);
+ * g_slist_free(list); @endcode
*
- * @param path The path of the directory to scan, in locale encoding.
- * @param length The location to store the number of non- at c NULL data items in the list,
- * unless @c NULL.
- * @param error The is the location for storing a possible error, or @c NULL.
+ * @note If you don't want sorted filenames you should use the foreach_dir() macro instead -
+ * it's more efficient and perhaps easier to use than freeing the list and its contents.
*
- * @return A newly allocated list or @c NULL if no files found. The list and its data should be
- * freed when no longer needed.
+ * @param path The path of the directory to scan, in locale encoding.
+ * @param length The location to store the number of non- at c NULL data items in the list,
+ * unless @c NULL.
+ * @param error The location for storing a possible error, or @c NULL.
+ *
+ * @return A newly allocated list or @c NULL if no files found. The list and its data should be
+ * freed when no longer needed.
**/
GSList *utils_get_file_list(const gchar *path, guint *length, GError **error)
{
GSList *list = NULL;
guint len = 0;
GDir *dir;
+ const gchar *filename;
if (error)
*error = NULL;
@@ -1370,12 +1377,8 @@
if (dir == NULL)
return NULL;
- while (1)
+ foreach_dir(filename, dir)
{
- const gchar *filename = g_dir_read_name(dir);
- if (filename == NULL)
- break;
-
list = g_slist_insert_sorted(list, g_strdup(filename), (GCompareFunc) utils_str_casecmp);
len++;
}
Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h 2009-09-17 16:39:11 UTC (rev 4202)
+++ trunk/src/utils.h 2009-09-17 16:47:45 UTC (rev 4203)
@@ -91,7 +91,15 @@
#define foreach_slist(node, list) \
foreach_list(node, list)
+/** Iterates through each unsorted filename in a @c GDir.
+ * @param filename (@c const @c gchar*) locale-encoded filename, without path. Do not modify or free.
+ * @param dir @c GDir created with @c g_dir_open(). Call @c g_dir_close() afterwards.
+ * @see utils_get_file_list() if you want a sorted list.
+ * @since Geany 0.19. */
+#define foreach_dir(filename, dir)\
+ for ((filename) = g_dir_read_name(dir); (filename) != NULL; (filename) = g_dir_read_name(dir))
+
void utils_open_browser(const gchar *uri);
gint utils_get_line_endings(const gchar* buffer, glong size);
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