X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Fcommon.c;h=224c4ea6a3d7357738f0de9929679f3cea77dc89;hb=9f7b8f30f440c4ba7d9894458fa92dfa4344db03;hp=545a6be6e29689b723c9846f444dbc364c9afa61;hpb=f779570f7f83c10be6e278b1f3ec3795247260b6;p=chaz%2Ftint2 diff --git a/src/util/common.c b/src/util/common.c index 545a6be..224c4ea 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -3,7 +3,7 @@ * Tint2 : common windows function * * Copyright (C) 2007 PÃ¥l Staurland (staura@gmail.com) -* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) +* Modified (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr) from Omega distribution * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 @@ -22,10 +22,13 @@ #include #include #include +#include +#include #include #include #include - +#include +#include #include "common.h" #include "../server.h" @@ -77,6 +80,23 @@ int parse_line (const char *line, char **key, char **value) } +void tint_exec(const char *command) +{ + if (command) { + pid_t pid; + pid = fork(); + if (pid == 0) { + // change for the fork the signal mask +// sigset_t sigset; +// sigprocmask(SIG_SETMASK, &sigset, 0); +// sigprocmask(SIG_UNBLOCK, &sigset, 0); + execl("/bin/sh", "/bin/sh", "-c", command, NULL); + _exit(0); + } + } +} + + int hex_char_to_int (char c) { int r; @@ -129,6 +149,45 @@ void get_color (char *hex, double *rgb) } +void extract_values (const char *value, char **value1, char **value2, char **value3) +{ + char *b=0, *c=0; + + if (*value1) free (*value1); + if (*value2) free (*value2); + if (*value3) free (*value3); + + if ((b = strchr (value, ' '))) { + b[0] = '\0'; + b++; + } + else { + *value2 = 0; + *value3 = 0; + } + *value1 = strdup (value); + g_strstrip(*value1); + + if (b) { + if ((c = strchr (b, ' '))) { + c[0] = '\0'; + c++; + } + else { + c = 0; + *value3 = 0; + } + *value2 = strdup (b); + g_strstrip(*value2); + } + + if (c) { + *value3 = strdup (c); + g_strstrip(*value3); + } +} + + void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright) { unsigned int x, y; @@ -286,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; +}