Add function for listing subdirs

This commit is contained in:
Berke Viktor 2012-10-18 20:09:15 +02:00
parent 06226c0799
commit b686a24d3b
2 changed files with 59 additions and 0 deletions

View File

@ -1908,3 +1908,61 @@ hextray_mode ()
return 0;
#endif
}
/* Routine for listing subfolders of a given folder. ALWAYS free correctly after use, e.g.
void display_list (GSList *list)
{
GSList *iterator = NULL;
for (iterator = list; iterator; iterator = iterator->next)
{
printf ("%s\t", (char *) iterator->data);
}
}
int main (int argc, char *argv[])
{
GSList *list;
list = get_subdirs ("foo");
display_list (list);
#if GLIB_CHECK_VERSION(2,28,0)
g_slist_free_full (list, (GFunc) g_free);
#else
g_slist_foreach (list, (GFunc) g_free, NULL);
g_slist_free (list);
#endif
return 0;
}
*/
GSList *
get_subdirs (const char *path)
{
DIR *dir;
struct dirent *entry;
GSList *dirlist = NULL;
if (!path)
{
path = ".";
}
dir = opendir (path);
if (!dir)
{
return NULL;
}
entry = readdir (dir);
while (entry != NULL)
{
if (entry->d_type == DT_DIR && strcmp (entry->d_name, ".") != 0 && strcmp (entry->d_name, "..") != 0)
{
dirlist = g_slist_append (dirlist, g_strdup (entry->d_name));
}
entry = readdir (dir);
}
return dirlist;
}

View File

@ -60,5 +60,6 @@ void safe_strcpy (char *dest, const char *src, int bytes_left);
void canonalize_key (char *key);
int portable_mode ();
int hextray_mode ();
GSList *get_subdirs (const char *path);
#endif