X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Fcommon.c;h=224c4ea6a3d7357738f0de9929679f3cea77dc89;hb=9f7b8f30f440c4ba7d9894458fa92dfa4344db03;hp=f6fa36e32c2c0f8cbbfaeda9f339809c4db1f880;hpb=c0f91cbbb76989eb2e6a7a2185509573b0c3b0cb;p=chaz%2Ftint2 diff --git a/src/util/common.c b/src/util/common.c index f6fa36e..224c4ea 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -22,10 +22,13 @@ #include #include #include +#include +#include #include #include #include #include +#include #include "common.h" #include "../server.h" @@ -342,3 +345,46 @@ void render_image(Drawable d, int x, int y, int w, int h) XRenderFreePicture(server.dsp, pict_image); XRenderFreePicture(server.dsp, pict_drawable); } + +/** + * @brief + * Scan given directory for files which are meet the given mask and sort them alphabetically + * + * @param path - directory path + * @param mask - filename mask + * + * @return files list + */ +GList *dir_scan_alpha(const char *path, const char *mask) +{ + GError *err = NULL; + GList *list = NULL; + const char *n; + gchar *fn; + struct stat st; + + GDir *dir = g_dir_open(path, 0, &err); + + if (!dir) { + fprintf(stderr, "%s\n", err->message); + g_error_free(err); + } else { + // Enumerate files + while ((n = g_dir_read_name(dir))) { + if (!fnmatch(mask, n, FNM_PATHNAME)) { + fn = g_build_filename(path, n, NULL); + + if (stat((char *)fn, &st) < 0) + continue; + + // Only regular files + if (S_ISREG(st.st_mode)) + list = g_list_prepend(list, (gpointer)fn); + } + } + + list = g_list_sort (list, (GCompareFunc) &strcmp); + } + + return list; +}