Mercurial > hg
changeset 1675:c73b31124fa6
Use glob() in source command
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Mon, 18 Jan 2010 16:36:55 +0200 |
parents | f02e7076ccec |
children | 96b5484423af |
files | mcabber/doc/help/en/hlp_source.txt mcabber/doc/help/fr/hlp_source.txt mcabber/doc/help/ru/hlp_source.txt mcabber/doc/help/uk/hlp_source.txt mcabber/mcabber/commands.c |
diffstat | 5 files changed, 44 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/doc/help/en/hlp_source.txt Mon Jan 18 17:49:30 2010 +0200 +++ b/mcabber/doc/help/en/hlp_source.txt Mon Jan 18 16:36:55 2010 +0200 @@ -1,4 +1,4 @@ - /SOURCE file + /SOURCE pattern -Read a configuration file. +Read configuration files, that match glob pattern (sorted in alphabetical order).
--- a/mcabber/doc/help/fr/hlp_source.txt Mon Jan 18 17:49:30 2010 +0200 +++ b/mcabber/doc/help/fr/hlp_source.txt Mon Jan 18 16:36:55 2010 +0200 @@ -1,4 +1,4 @@ /SOURCE fichier -Cette commande permet de lire un fichier de configuration. +Cette commande permet de lire un fichier de configuration. Il est possible d'utiliser un motif, auquel cas les fichiers sont lus dans l'ordre alphabétique.
--- a/mcabber/doc/help/ru/hlp_source.txt Mon Jan 18 17:49:30 2010 +0200 +++ b/mcabber/doc/help/ru/hlp_source.txt Mon Jan 18 16:36:55 2010 +0200 @@ -1,4 +1,4 @@ - /SOURCE имя_файла + /SOURCE шаблон -Загружает конфигурационный файл. +Загружает все файлы, которые соответствуют данному шаблону (в алфавитном порядке).
--- a/mcabber/doc/help/uk/hlp_source.txt Mon Jan 18 17:49:30 2010 +0200 +++ b/mcabber/doc/help/uk/hlp_source.txt Mon Jan 18 16:36:55 2010 +0200 @@ -1,5 +1,5 @@ - /SOURCE файл + /SOURCE шаблон -Читає налаштування з файлу. +Читає налаштування з файлів, що відповідають вказаному шаблону (у алфавітному порядку). Примітка: у під'єднаному до сервера стані команда розуміє й звичайні команди (як то say, group та інші) це можна використати у hook-post-connect (див. mcabberrc).
--- a/mcabber/mcabber/commands.c Mon Jan 18 17:49:30 2010 +0200 +++ b/mcabber/mcabber/commands.c Mon Jan 18 16:36:55 2010 +0200 @@ -24,6 +24,8 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <errno.h> +#include <glob.h> #include "commands.h" #include "help.h" @@ -3782,10 +3784,17 @@ readline_disable_chat_mode(show_roster); } +static int source_print_error(const char *path, int eerrno) +{ + scr_LogPrint(LPRINT_DEBUG, "Source: glob (%s) error: %s.", path, strerror(eerrno)); + return 0; +} + static void do_source(char *arg) { static int recur_level; gchar *filename, *expfname; + glob_t flist; if (!*arg) { scr_LogPrint(LPRINT_NORMAL, "Missing filename."); return; @@ -3797,10 +3806,35 @@ filename = g_strdup(arg); strip_arg_special_chars(filename); expfname = expand_filename(filename); - recur_level++; - cfg_read_file(expfname, FALSE); - recur_level--; g_free(filename); + // match + flist.gl_offs = 0; + if (glob(expfname, 0, source_print_error, &flist)) { + scr_LogPrint(LPRINT_LOGNORM, "Source: error: %s.", strerror (errno)); + } else { + int i; + // sort list + for (i = 1; i < flist.gl_pathc; ++i) { + int j; + for (j = i-1; j > 0; --j) { + char *a = flist.gl_pathv[j+1]; + char *b = flist.gl_pathv[j]; + if (strcmp(a, b) < 0) { + flist.gl_pathv[j] = a; + flist.gl_pathv[j+1] = b; + } else + break; + } + } + // source files in list + for (i=0; i < flist.gl_pathc; ++i) { + recur_level++; + cfg_read_file(flist.gl_pathv[i], FALSE); + recur_level--; + } + // free + globfree(&flist); + } g_free(expfname); }