Add function for listing subdirs
This commit is contained in:
parent
06226c0799
commit
b686a24d3b
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue