The following commit has been merged in the master branch: commit e54f318cef911eab70753583be922c9ec35d531d Author: Slava Zanko <slavaza...@gmail.com> Date: Fri Feb 6 14:01:28 2009 +0200
Completely removed MHL stuff Changed all source files relative to remove MHL Some string-related functions moved into src/util.c This stable fix. diff --git a/edit/choosesyntax.c b/edit/choosesyntax.c index f4137e3..78a7718 100644 --- a/edit/choosesyntax.c +++ b/edit/choosesyntax.c @@ -18,9 +18,6 @@ #include <config.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "edit.h" #include "../src/global.h" #include "../src/wtools.h" diff --git a/edit/edit.c b/edit/edit.c index 12f5b72..3697bb5 100644 --- a/edit/edit.c +++ b/edit/edit.c @@ -32,9 +32,6 @@ #include <sys/stat.h> #include <stdlib.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "edit.h" diff --git a/edit/editcmd.c b/edit/editcmd.c index 26930c6..257ab6e 100644 --- a/edit/editcmd.c +++ b/edit/editcmd.c @@ -38,9 +38,6 @@ #include <sys/stat.h> #include <stdlib.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/history.h" @@ -277,10 +274,10 @@ edit_save_file (WEdit *edit, const char *filename) const char *slashpos; slashpos = strrchr (filename, PATH_SEP); if (slashpos) { - savedir = mhl_str_dup (filename); + savedir = g_strdup (filename); savedir[slashpos - filename + 1] = '\0'; } else - savedir = mhl_str_dup ("."); + savedir = g_strdup ("."); saveprefix = concat_dir_and_file (savedir, "cooledit"); g_free (savedir); fd = mc_mkstemps (&savename, saveprefix, NULL); @@ -1850,9 +1847,9 @@ edit_replace_cmd (WEdit *edit, int again) goto cleanup; } - g_free (saved1), saved1 = mhl_str_dup (input1); - g_free (saved2), saved2 = mhl_str_dup (input2); - g_free (saved3), saved3 = mhl_str_dup (input3); + g_free (saved1), saved1 = g_strdup (input1); + g_free (saved2), saved2 = g_strdup (input2); + g_free (saved3), saved3 = g_strdup (input3); } { diff --git a/edit/editlock.c b/edit/editlock.c index a33b1d6..c9434a2 100644 --- a/edit/editlock.c +++ b/edit/editlock.c @@ -36,9 +36,6 @@ #include <sys/stat.h> #include <stdlib.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "edit.h" diff --git a/edit/editwidget.c b/edit/editwidget.c index 89e0a5a..e23f097 100644 --- a/edit/editwidget.c +++ b/edit/editwidget.c @@ -35,9 +35,6 @@ #include <sys/stat.h> #include <stdlib.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "edit.h" diff --git a/edit/syntax.c b/edit/syntax.c index 427d24e..b517b4a 100644 --- a/edit/syntax.c +++ b/edit/syntax.c @@ -32,9 +32,6 @@ #include <sys/stat.h> #include <stdlib.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "edit.h" @@ -471,7 +468,7 @@ static struct syntax_rule edit_get_rule (WEdit * edit, long byte_index) break; } s = edit->syntax_marker->next; - MHL_PTR_FREE (edit->syntax_marker); + MC_PTR_FREE (edit->syntax_marker); edit->syntax_marker = s; } } @@ -666,8 +663,8 @@ static FILE *open_include_file (const char *filename) { FILE *f; - MHL_PTR_FREE (error_file_name); - error_file_name = mhl_str_dup (filename); + MC_PTR_FREE (error_file_name); + error_file_name = g_strdup (filename); if (*filename == PATH_SEP) return fopen (filename, "r"); @@ -725,8 +722,8 @@ edit_read_syntax_rules (WEdit *edit, FILE *f, char **args, int args_size) f = g; g = 0; line = save_line + 1; - MHL_PTR_FREE (error_file_name); - MHL_PTR_FREE (l); + MC_PTR_FREE (error_file_name); + MC_PTR_FREE (l); if (!read_one_line (&l, f)) break; } else { @@ -745,7 +742,7 @@ edit_read_syntax_rules (WEdit *edit, FILE *f, char **args, int args_size) g = f; f = open_include_file (args[1]); if (!f) { - MHL_PTR_FREE (error_file_name); + MC_PTR_FREE (error_file_name); result = line; break; } @@ -922,10 +919,10 @@ edit_read_syntax_rules (WEdit *edit, FILE *f, char **args, int args_size) break_a; } free_args (args); - MHL_PTR_FREE (l); + MC_PTR_FREE (l); } free_args (args); - MHL_PTR_FREE (l); + MC_PTR_FREE (l); /* Terminate context array. */ if (num_contexts > 0) { @@ -934,7 +931,7 @@ edit_read_syntax_rules (WEdit *edit, FILE *f, char **args, int args_size) } if (!edit->rules[0]) - MHL_PTR_FREE (edit->rules); + MC_PTR_FREE (edit->rules); if (result) return result; @@ -976,34 +973,34 @@ void edit_free_syntax_rules (WEdit * edit) return; edit_get_rule (edit, -1); - MHL_PTR_FREE (edit->syntax_type); + MC_PTR_FREE (edit->syntax_type); edit->syntax_type = 0; for (i = 0; edit->rules[i]; i++) { if (edit->rules[i]->keyword) { for (j = 0; edit->rules[i]->keyword[j]; j++) { - MHL_PTR_FREE (edit->rules[i]->keyword[j]->keyword); - MHL_PTR_FREE (edit->rules[i]->keyword[j]->whole_word_chars_left); - MHL_PTR_FREE (edit->rules[i]->keyword[j]->whole_word_chars_right); - MHL_PTR_FREE (edit->rules[i]->keyword[j]); + MC_PTR_FREE (edit->rules[i]->keyword[j]->keyword); + MC_PTR_FREE (edit->rules[i]->keyword[j]->whole_word_chars_left); + MC_PTR_FREE (edit->rules[i]->keyword[j]->whole_word_chars_right); + MC_PTR_FREE (edit->rules[i]->keyword[j]); } } - MHL_PTR_FREE (edit->rules[i]->left); - MHL_PTR_FREE (edit->rules[i]->right); - MHL_PTR_FREE (edit->rules[i]->whole_word_chars_left); - MHL_PTR_FREE (edit->rules[i]->whole_word_chars_right); - MHL_PTR_FREE (edit->rules[i]->keyword); - MHL_PTR_FREE (edit->rules[i]->keyword_first_chars); - MHL_PTR_FREE (edit->rules[i]); + MC_PTR_FREE (edit->rules[i]->left); + MC_PTR_FREE (edit->rules[i]->right); + MC_PTR_FREE (edit->rules[i]->whole_word_chars_left); + MC_PTR_FREE (edit->rules[i]->whole_word_chars_right); + MC_PTR_FREE (edit->rules[i]->keyword); + MC_PTR_FREE (edit->rules[i]->keyword_first_chars); + MC_PTR_FREE (edit->rules[i]); } while (edit->syntax_marker) { struct _syntax_marker *s = edit->syntax_marker->next; - MHL_PTR_FREE (edit->syntax_marker); + MC_PTR_FREE (edit->syntax_marker); edit->syntax_marker = s; } - MHL_PTR_FREE (edit->rules); + MC_PTR_FREE (edit->rules); } /* returns -1 on file error, line number on error in file syntax */ @@ -1036,7 +1033,7 @@ edit_read_syntax_file (WEdit * edit, char ***pnames, const char *syntax_file, args[0] = 0; for (;;) { line++; - MHL_PTR_FREE (l); + MC_PTR_FREE (l); if (!read_one_line (&l, f)) break; (void)get_args (l, args, 1023); /* Final NULL */ @@ -1117,8 +1114,8 @@ edit_read_syntax_file (WEdit * edit, char ***pnames, const char *syntax_file, else result = line_error; } else { - MHL_PTR_FREE (edit->syntax_type); - edit->syntax_type = mhl_str_dup (syntax_type); + MC_PTR_FREE (edit->syntax_type); + edit->syntax_type = g_strdup (syntax_type); /* if there are no rules then turn off syntax highlighting for speed */ if (!g && !edit->rules[1]) if (!edit->rules[0]->keyword[1] && !edit->rules[0]->spelling) { @@ -1135,7 +1132,7 @@ edit_read_syntax_file (WEdit * edit, char ***pnames, const char *syntax_file, } } } - MHL_PTR_FREE (l); + MC_PTR_FREE (l); fclose (f); return result; } @@ -1200,7 +1197,7 @@ edit_load_syntax (WEdit *edit, char ***pnames, const char *type) message (D_ERROR, _(" Load syntax file "), _(" Error in file %s on line %d "), error_file_name ? error_file_name : f, r); - MHL_PTR_FREE (error_file_name); + MC_PTR_FREE (error_file_name); } else { /* succeeded */ } diff --git a/edit/usermap.c b/edit/usermap.c index bb8e0db..1f5a8b7 100644 --- a/edit/usermap.c +++ b/edit/usermap.c @@ -30,10 +30,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "edit.h" diff --git a/mhl/.gitignore b/mhl/.gitignore deleted file mode 100644 index e995588..0000000 --- a/mhl/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.deps -Makefile -Makefile.in diff --git a/mhl/README b/mhl/README deleted file mode 100644 index 1a51be7..0000000 --- a/mhl/README +++ /dev/null @@ -1,103 +0,0 @@ - -Micro helper library. --- - -This is a tiny library of helper functions/macros. - - * MACRO-FUNC: macro w/ function syntax. (might become inline func) - * INLINE-FUNC: inline function (might become macro func) - * MACRO: strictly a macro (may never become a inline func) - --- - -mhl/memory.h: Memory management functions - - * mhl_mem_alloc_u(sz) [MACRO-FUNC] - - Allocate sz bytes on stack, unitialized - - * mhl_mem_alloc_z(sz) [INLINE-FUNC] - - Allocate sz bytes on stack, zero'ed - - * g_free(ptr) [INLINE-FUNC] - - Free chunk @ptr (MUST be allocated w/ mhl_mem_alloc_*()), - passing NULL is graciously allowed - - * mhl_mem_realloc(ptr,newsize) -> returns newptr - - Re-allocates a heap chunk, just like realloc() - - * MHL_PTR_FREE(ptr) [MACRO-ONLY] - - like g_free(), but with ptr as a variable that gets cleared - (use this as shortcut to "g_free(foo); foo = NULL") - -mhl/string.h: String helpers - - * mhl_str_dup(const char*s) -> char* - - [MACRO-FUNC] Safe version of strdup(), when NULL passed, returns strdup("") - - * mhl_str_ndup(const char* s) -> char* - - [MACRO-FUNC] Safe version of strndup(), when NULL passed, returns strdup("") - - * mhl_str_trim(char* s) -> char* - - [INLINE-FUNC] Trims the string (removing leading and trailing whitespacs), - WITHIN the passed buffer, returning the string s itself. - When NULL passed returns NULL. - - * mhl_str_toupper(char* s) -> char* - - [INLINE-FUNC] Converts the string in passed buffer to uppercase, returns that - buffer. When NULL passed returns NULL. - - * mhl_str_concat_1(const char* base, const char* one) -> char* - - [INLINE-FUNC] Concatenates the string one onto the string base and returns the - result in a newly allocated buffer (free it w/ g_free()). - For NULL strings, "" is assumed. - - * mhl_str_concat_2(const char* base,const char* one,const char* two) -> char* - mhl_str_concat_3(const char* base,const char* one,const char* two,const char* three) -> char* - mhl_str_concat_4(const char* base,const char* one,const char* two,const char* three,const char* four) -> char* - mhl_str_concat_5(const char* base,const char* one,const char* two,const char* three,const char* four,const char* five) -> char* - mhl_str_concat_6(const char* base,const char* one,const char* two,const char* three,const char* four,const char* five,const char* six) -> char* - mhl_str_concat_7(const char* base,const char* one,const char* two,const char* three,const char* four,const char* five,const char* six,const char* seven) -> char* - - [INLINE-FUNC] Like str_concat_1() but adding more strings. - - * mhl_str_reverse(char* str) -> char* - - [INLINE-FUNC] Reverses the string in passed buffer and returns the buffer ptr itself. - If NULL is passed, returns NULL. - -mhl/escape.h: Shell-style string escaping - - * mhl_shell_escape_toesc(char c) -> bool - - [MACRO-FUNC] returns true when given char has to be escaped - - * mhl_shell_escape_nottoesc(char c) -> bool - - [MACRO-FUNC] opposite of mhl_shell_escape_toesc() - - * mhl_shell_escape_dup(const char* s) -> char* - - [INLINE-FUNC] escapes an string and returns the result in a malloc()'ed chunk - Passing NULL returns an empty malloc()ed string. - - * mhl_shell_unescape_buf(char* s) -> char* - - [INLINE-FUNC] unescapes the string into given buffer (changes buffer!) and - returns ptr to the buffer itself. When NULL passed returns NULL. - -mhl/env.h: Environment variable helpers - - * mhl_getenv_dup(const char* n) -> char* - - [MACRO-FUNC] like getenv() but returns an strdup()'ed copy. When NULL passed, - returns strdup("") diff --git a/mhl/env.h b/mhl/env.h deleted file mode 100644 index 6598e0c..0000000 --- a/mhl/env.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef MHL_ENV_H -#define MHL_ENV_H - -#include <mhl/string.h> - -#define mhl_getenv_dup(name) (mhl_str_dup(name ? getenv(name) : "")) - -#endif diff --git a/mhl/escape.h b/mhl/escape.h deleted file mode 100644 index 3f07d62..0000000 --- a/mhl/escape.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef MHL_ESCAPE_H -#define MHL_ESCAPE_H - -/* Micro helper library: shell escaping functions */ - -#include <string.h> -#include <stdlib.h> -#include <stdbool.h> - -#define mhl_shell_escape_toesc(x) \ - (((x)==' ')||((x)=='!')||((x)=='#')||((x)=='$')||((x)=='%')|| \ - ((x)=='(')||((x)==')')||((x)=='\'')||((x)=='&')||((x)=='~')|| \ - ((x)=='{')||((x)=='}')||((x)=='[')||((x)==']')||((x)=='`')|| \ - ((x)=='?')||((x)=='|')||((x)=='<')||((x)=='>')||((x)==';')|| \ - ((x)=='*')||((x)=='\\')||((x)=='"')) - -#define mhl_shell_escape_nottoesc(x) \ - (((x)!=0) && (!mhl_shell_escape_toesc((x)))) - -/** To be compatible with the general posix command lines we have to escape - strings for the command line - - /params const char * in - string for escaping - /returns - return escaped string (later need to free) - */ -static inline char* mhl_shell_escape_dup(const char* src) -{ - if ((src==NULL)||(!(*src))) - return strdup(""); - - char* buffer = calloc(1, strlen(src)*2+2); - char* ptr = buffer; - - /* look for the first char to escape */ - while (1) - { - char c; - /* copy over all chars not to escape */ - while ((c=(*src)) && mhl_shell_escape_nottoesc(c)) - { - *ptr = c; - ptr++; - src++; - } - - /* at this point we either have an \0 or an char to escape */ - if (!c) - return buffer; - - *ptr = '\\'; - ptr++; - *ptr = c; - ptr++; - src++; - } -} - -/** Unescape paths or other strings for e.g the internal cd - shell-unescape within a given buffer (writing to it!) - - /params const char * src - string for unescaping - /returns - return unescaped string -*/ -static inline char* mhl_shell_unescape_buf(char* text) -{ - if (!text) - return NULL; - - /* look for the first \ - that's quick skipover if there's nothing to escape */ - char* readptr = text; - while ((*readptr) && ((*readptr)!='\\')) readptr++; - if (!(*readptr)) return text; - - /* if we're here, we're standing on the first '\' */ - char* writeptr = readptr; - char c; - while ((c = *readptr)) - { - if (c=='\\') - { - readptr++; - switch ((c = *readptr)) - { - case 'n': (*writeptr) = '\n'; writeptr++; break; - case 'r': (*writeptr) = '\r'; writeptr++; break; - case 't': (*writeptr) = '\t'; writeptr++; break; - - case ' ': - case '\\': - case '#': - case '$': - case '%': - case '(': - case ')': - case '[': - case ']': - case '{': - case '}': - case '<': - case '>': - case '!': - case '*': - case '?': - case '~': - case '`': - case '"': - case ';': - case '\0': /* end of string! malformed escape string */ - goto out; - default: - (*writeptr) = c; writeptr++; break; - } - } - else /* got a normal character */ - { - (*writeptr) = *readptr; - writeptr++; - } - readptr++; - } -out: - *writeptr = 0; - - return text; -} - -/** Check if char in pointer contain escape'd chars - - /params const char * in - string for checking - /returns - return TRUE if string contain escaped chars - otherwise return FALSE - */ -static inline bool -mhl_shell_is_char_escaped ( const char *in ) -{ - if (in == NULL || !*in || in[0] != '\\') - return false; - if (mhl_shell_escape_toesc(in[1])) - return true; - return false; -} - -#endif diff --git a/mhl/memory.h b/mhl/memory.h deleted file mode 100644 index 3268e93..0000000 --- a/mhl/memory.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef MHL_MEMORY_H -#define MHL_MEMORY_H - -#include <memory.h> -#include <stdlib.h> - -/* allocate a chunk of stack memory, uninitialized */ -#define mhl_mem_alloc_u(sz) (malloc(sz)) - -/* allocate a chunk of stack memory, zeroed */ -#define mhl_mem_alloc_z(sz) (calloc(1,sz)) - -/* free a chunk of memory from stack, passing NULL does no harm */ -static inline void mhl_mem_free(void* ptr) -{ - if (ptr) free(ptr); -} - -/* free an ptr and NULL it */ -#define MHL_PTR_FREE(ptr) do { mhl_mem_free(ptr); (ptr) = NULL; } while (0) - -/* allocate a chunk on stack - automatically free'd on function exit */ -#define mhl_stack_alloc(sz) (alloca(sz)) - -/* re-alloc memory chunk */ -#define mhl_mem_realloc(ptr,sz) (realloc(ptr,sz)) - -#endif diff --git a/mhl/strhash.h b/mhl/strhash.h deleted file mode 100644 index 423ff09..0000000 --- a/mhl/strhash.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef MHL_STRHASH_H -#define MHL_STRHASH_H - -#include <hash.h> -#include <mhl/memory.h> - -static void __mhl_strhash_free_key(void* ptr) -{ - g_free(ptr); -} - -static void __mhl_strhash_free_dummy(void* ptr) -{ -} - -typedef hash MHL_STRHASH; - -#define MHL_STRHASH_DECLARE(n) MHL_STRHASH n; - -#define MHL_STRHASH_INIT(h) \ - hash_initialise(h, 997U, \ - hash_hash_string, \ - hash_compare_string, \ - hash_copy_string, \ - __mhl_strhash_free_key, \ - __mhl_strhash_free_dummy) - -#define MHL_STRHASH_DECLARE_INIT(n) \ - MHL_STRHASH_DECLARE(n); \ - MHL_STRHASH_INIT(&n); - -#define MHL_STRHASH_DEINIT(ht) \ - hash_deinitialise(ht) - -static inline void mhl_strhash_addkey(MHL_STRHASH* ht, const char* key, void* value) -{ - hash_insert(ht, (char*)key, value); -} - -static inline void* mhl_strhash_lookup(MHL_STRHASH* ht, const char* key) -{ - void* retptr; - if (hash_retrieve(ht, (char*)key, &retptr)) - return retptr; - else - return NULL; -} - -#endif diff --git a/mhl/string.h b/mhl/string.h deleted file mode 100644 index 3b4c421..0000000 --- a/mhl/string.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef MHL_STRING_H -#define MHL_STRING_H - -#include <ctype.h> -#include <stdarg.h> -#include <assert.h> -#include <mhl/memory.h> - -#define mhl_str_dup(str) ((str ? strdup(str) : strdup(""))) -#define mhl_str_ndup(str,len) ((str ? strndup(str,len) : strdup(""))) -#define mhl_str_len(str) ((str ? strlen(str) : 0)) - -#define ISSPACE(c) isspace((unsigned char)(c)) -#define TOUPPER(c) toupper((unsigned char)(c)) - -static inline char * mhl_str_dup_range(const char * s_start, const char * s_bound) -{ - return mhl_str_ndup(s_start, s_bound - s_start); -} - -static inline char* mhl_str_trim(char* str) -{ - if (!str) return NULL; /* NULL string ?! bail out. */ - - /* find the first non-space */ - char* start; for (start=str; ((*str) && (!ISSPACE(*str))); str++); - - /* only spaces ? */ - if (!(*str)) { *str = 0; return str; } - - /* get the size (cannot be empty - caught above) */ - size_t _sz = strlen(str); - - /* find the proper end */ - char* end; - for (end=(str+_sz-1); ((end>str) && (ISSPACE(*end))); end--); - end[1] = 0; /* terminate, just to be sure */ - - /* if we have no leading spaces, just trucate */ - if (start==str) { end++; *end = 0; return str; } - - /* if it's only one char, dont need memmove for that */ - if (start==end) { str[0]=*start; str[1]=0; return str; } - - /* by here we have a (non-empty) region between start and end */ - memmove(str,start,(end-start+1)); - return str; -} - -static inline void mhl_str_toupper(char* str) -{ - if (str) - for (;*str;str++) - *str = TOUPPER(*str); -} - -/* note: we use ((char*)(1)) as terminator - NULL is a valid argument ! */ -static const char * mhl_s_c_sep__ = (const char *)1; -/* _NEVER_ call this function directly ! */ -static inline char* mhl_str_concat_hlp__(const char* va_start_dummy, ...) -{ - char * result; - size_t result_len = 0; - char * p; - const char * chunk; - - va_list args; - va_start(args,va_start_dummy); - while ((chunk = va_arg(args, const char*)) != mhl_s_c_sep__) - { - if (chunk) - { - result_len += strlen (chunk); - } - } - va_end(args); - - if (result_len == 0) - return mhl_str_dup(""); - - /* now as we know how much to copy, allocate the buffer + '\0'*/ - result = (char*)mhl_mem_alloc_u (result_len + 1); - - p = result; - - va_start(args,va_start_dummy); - while ((chunk = va_arg(args, const char*)) != mhl_s_c_sep__) - { - if (chunk) - { - size_t chunk_len = strlen (chunk); - memcpy (p, chunk, chunk_len); - p += chunk_len; - } - } - va_end(args); - - *p = '\0'; - return result; -} - -#define mhl_str_concat(...) (mhl_str_concat_hlp__(mhl_s_c_sep__, __VA_ARGS__, mhl_s_c_sep__)) - -static inline char* mhl_str_reverse(char* ptr) -{ - if (!ptr) return NULL; /* missing string */ - if (!(ptr[0] && ptr[1])) return ptr; /* empty or 1-ch string */ - - size_t _sz = strlen(ptr); - char* start = ptr; - char* end = ptr+_sz-1; - - while (start<end) - { - char c = *start; - *start = *end; - *end = c; - start++; - end--; - } - - return ptr; -} - -/* - * strcpy is unsafe on overlapping memory areas, so define memmove-alike - * string function. Has sense only when dest <= src. - */ -static inline char * mhl_strmove(char * dest, const char * src) -{ - size_t n = strlen (src) + 1; /* + '\0' */ - - /* strictly speaking, this invokes undefined behavior as soon as dest and src are pointers into different objects. */ - assert (dest<=src); - - return memmove(dest, src, n); -} - -static inline char* mhl_str_dir_plus_file(const char* dirname, const char* filename) -{ - /* make sure we have valid strings */ - if (!dirname) - dirname=""; - - if (!filename) - filename=""; - - /* skip leading slashes on filename */ - while (*filename == '/') - filename++; - - /* skip trailing slashes on dirname */ - size_t dnlen = strlen(dirname); - while ((dnlen != 0) && (dirname[dnlen-1]=='/')) - dnlen--; - - size_t fnlen = strlen(filename); - char* buffer = mhl_mem_alloc_z(dnlen+fnlen+2); /* enough space for dirname, /, filename, zero */ - char* ptr = buffer; - - memcpy(ptr, dirname, dnlen); - ptr+=dnlen; - *ptr = '/'; - ptr++; - memcpy(ptr, filename, fnlen); - ptr+=fnlen; - *ptr = 0; - - return buffer; -} - -#endif /* MHL_STRING_H */ diff --git a/mhl/types.h b/mhl/types.h deleted file mode 100644 index 977c27a..0000000 --- a/mhl/types.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - - Micro Helper Library: generic type declarations - -*/ - -#ifndef MHL_TYPES_H -#define MHL_TYPES_H - -#if !defined(__bool_true_false_are_defined) && !defined(false) && !defined(true) && !defined(bool) -typedef enum -{ - false = 0, - true = 1 -} bool; -#endif - -#endif diff --git a/src/boxes.c b/src/boxes.c index a950f3d..f5eae40 100644 --- a/src/boxes.c +++ b/src/boxes.c @@ -30,9 +30,6 @@ #include <sys/types.h> #include <sys/stat.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "win.h" /* Our window tools */ diff --git a/src/charsets.c b/src/charsets.c index 10bbefc..5666c23 100644 --- a/src/charsets.c +++ b/src/charsets.c @@ -27,8 +27,6 @@ #include <iconv.h> -#include <mhl/string.h> - #include "global.h" #include "charsets.h" diff --git a/src/cmd.c b/src/cmd.c index 048037d..84f6e07 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -34,9 +34,6 @@ #endif #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "cmd.h" /* Our definitions */ #include "fileopctx.h" /* file_op_context_new() */ diff --git a/src/color.c b/src/color.c index 7d07760..1ef19d7 100644 --- a/src/color.c +++ b/src/color.c @@ -22,9 +22,6 @@ #include <stdlib.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "setup.h" /* For the externs */ diff --git a/src/command.c b/src/command.c index a21da8c..137ce39 100644 --- a/src/command.c +++ b/src/command.c @@ -27,10 +27,6 @@ #include <errno.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> -#include <mhl/escape.h> - #include "global.h" /* home_dir */ #include "tty.h" #include "widget.h" /* WInput */ diff --git a/src/complete.c b/src/complete.c index 44858c3..4cf71e1 100644 --- a/src/complete.c +++ b/src/complete.c @@ -30,10 +30,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/escape.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "win.h" diff --git a/src/dialog.c b/src/dialog.c index 7ef1eef..f8467b9 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -24,9 +24,6 @@ #include <stdio.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "mouse.h" diff --git a/src/dir.c b/src/dir.c index bf732ba..b87cd70 100644 --- a/src/dir.c +++ b/src/dir.c @@ -24,9 +24,6 @@ #include <string.h> #include <sys/stat.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "dir.h" diff --git a/src/ecs.c b/src/ecs.c index 89ef8e0..8c75827 100644 --- a/src/ecs.c +++ b/src/ecs.c @@ -27,9 +27,6 @@ #include <assert.h> #include <ctype.h> -#include <mhl/types.h> -#include <mhl/string.h> - #include "global.h" #include "ecs.h" diff --git a/src/execute.c b/src/execute.c index 35b4d4b..970a177 100644 --- a/src/execute.c +++ b/src/execute.c @@ -19,9 +19,6 @@ #include <signal.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "win.h" diff --git a/src/ext.c b/src/ext.c index 827e8a2..27d2909 100644 --- a/src/ext.c +++ b/src/ext.c @@ -27,9 +27,6 @@ #include <string.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "user.h" diff --git a/src/file.c b/src/file.c index dd0e8f1..81de8da 100644 --- a/src/file.c +++ b/src/file.c @@ -50,10 +50,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/escape.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "eregex.h" @@ -1805,13 +1801,13 @@ panel_operate (void *source_panel, FileOperation operation, */ if (force_single) /* just copy */ - dest_dir_ = mhl_str_dup (dest_dir); + dest_dir_ = g_strdup (dest_dir); else /* add trailing separator */ if (*dest_dir && strcmp(&dest_dir[strlen(dest_dir)-1], PATH_SEP_STR)) { - dest_dir_ = mhl_str_concat (dest_dir, PATH_SEP_STR); + dest_dir_ = g_strconcat (dest_dir, PATH_SEP_STR); } else { - dest_dir_ = mhl_str_dup (dest_dir); + dest_dir_ = g_strdup (dest_dir); } if (!dest_dir_) { file_op_context_destroy (ctx); diff --git a/src/filegui.c b/src/filegui.c index 87ea36c..343e22a 100644 --- a/src/filegui.c +++ b/src/filegui.c @@ -52,9 +52,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "setup.h" /* verbose */ #include "dialog.h" /* do_refresh() */ diff --git a/src/filenot.c b/src/filenot.c index c83c7d8..f614ce1 100644 --- a/src/filenot.c +++ b/src/filenot.c @@ -27,9 +27,6 @@ #include <errno.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" static char * diff --git a/src/find.c b/src/find.c index 48c73a2..cdd193b 100644 --- a/src/find.c +++ b/src/find.c @@ -27,10 +27,6 @@ #include <string.h> #include <sys/stat.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "win.h" diff --git a/src/help.c b/src/help.c index b06c188..49cf8a2 100644 --- a/src/help.c +++ b/src/help.c @@ -48,9 +48,6 @@ #include <sys/types.h> #include <sys/stat.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "color.h" diff --git a/src/hotlist.c b/src/hotlist.c index 28b94cf..1d6c4df 100644 --- a/src/hotlist.c +++ b/src/hotlist.c @@ -36,9 +36,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" /* COLS */ #include "color.h" /* dialog_colors */ diff --git a/src/info.c b/src/info.c index 7d5a578..0a0d04a 100644 --- a/src/info.c +++ b/src/info.c @@ -20,9 +20,6 @@ #include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> - #include "global.h" #include "tty.h" #include "mouse.h" /* Gpm_Event */ diff --git a/src/key.c b/src/key.c index 60da653..6d30026 100644 --- a/src/key.c +++ b/src/key.c @@ -32,10 +32,6 @@ #include <sys/types.h> #include <unistd.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "mouse.h" diff --git a/src/layout.c b/src/layout.c index 37298a9..a77cb3a 100644 --- a/src/layout.c +++ b/src/layout.c @@ -42,9 +42,6 @@ #endif #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" /* COLS */ #include "win.h" diff --git a/src/logging.c b/src/logging.c index d057e8a..bfd48e0 100644 --- a/src/logging.c +++ b/src/logging.c @@ -26,9 +26,6 @@ #include <stdarg.h> #include <stdio.h> -#include <mhl/memory.h> -#include <mhl/types.h> - #include "global.h" #include "logging.h" #include "setup.h" diff --git a/src/main.c b/src/main.c index 5bdc7e9..4dcee7c 100644 --- a/src/main.c +++ b/src/main.c @@ -33,9 +33,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "dir.h" diff --git a/src/menu.c b/src/menu.c index ba25bf7..f6348d4 100644 --- a/src/menu.c +++ b/src/menu.c @@ -23,9 +23,6 @@ #include <string.h> #include <sys/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "menu.h" diff --git a/src/panelize.c b/src/panelize.c index d79d2b9..5bbf643 100644 --- a/src/panelize.c +++ b/src/panelize.c @@ -29,9 +29,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" /* attrset() */ #include "win.h" diff --git a/src/profile.c b/src/profile.c index 49871da..88b566f 100644 --- a/src/profile.c +++ b/src/profile.c @@ -28,9 +28,6 @@ #include <string.h> #include <sys/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "profile.h" diff --git a/src/screen.c b/src/screen.c index 6321720..482b8b7 100644 --- a/src/screen.c +++ b/src/screen.c @@ -27,9 +27,6 @@ #include <string.h> #include <unistd.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "dir.h" diff --git a/src/setup.c b/src/setup.c index d434996..dee0ec0 100644 --- a/src/setup.c +++ b/src/setup.c @@ -23,9 +23,6 @@ #include <sys/types.h> #include <sys/stat.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "dir.h" @@ -415,14 +412,14 @@ panel_load_setup (WPanel *panel, const char *section) /* User formats */ g_free (panel->user_format); - panel->user_format = mhl_str_dup (get_profile_string (section, "user_format", + panel->user_format = g_strdup (get_profile_string (section, "user_format", DEFAULT_USER_FORMAT, profile_name)); for (i = 0; i < LIST_TYPES; i++){ g_free (panel->user_status_format [i]); g_snprintf (buffer, sizeof (buffer), "user_status%d", i); panel->user_status_format [i] = - mhl_str_dup (get_profile_string (section, buffer, + g_strdup (get_profile_string (section, buffer, DEFAULT_USER_FORMAT, profile_name)); } diff --git a/src/subshell.c b/src/subshell.c index fe2ae68..99cf28c 100644 --- a/src/subshell.c +++ b/src/subshell.c @@ -44,9 +44,6 @@ # include <stropts.h> /* For I_PUSH */ #endif /* HAVE_STROPTS_H */ -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" /* LINES */ #include "panel.h" /* current_panel */ diff --git a/src/treestore.c b/src/treestore.c index f492d9f..915ae42 100644 --- a/src/treestore.c +++ b/src/treestore.c @@ -41,10 +41,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "treestore.h" #include "profile.h" diff --git a/src/user.c b/src/user.c index f3881cd..e47b842 100644 --- a/src/user.c +++ b/src/user.c @@ -23,9 +23,6 @@ #include <stdio.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "color.h" diff --git a/src/util.c b/src/util.c index 22c172a..9924f35 100644 --- a/src/util.c +++ b/src/util.c @@ -34,10 +34,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/escape.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "profile.h" #include "main.h" /* mc_home */ @@ -1550,12 +1546,14 @@ Q_ (const char *s) /** To be compatible with the general posix command lines we have to escape strings for the command line - /params const char * in + \params in string for escaping - /returns + + \returns return escaped string (later need to free) */ -static char* shell_escape(const char* src) +char* +shell_escape(const char* src) { if ((src==NULL)||(!(*src))) return strdup(""); @@ -1590,12 +1588,14 @@ static char* shell_escape(const char* src) /** Unescape paths or other strings for e.g the internal cd shell-unescape within a given buffer (writing to it!) - /params const char * src + \params src string for unescaping - /returns + + \returns return unescaped string */ -static char* shell_unescape(char* text) +char* +shell_unescape(char* text) { if (!text) return NULL; @@ -1660,53 +1660,20 @@ out: /** Check if char in pointer contain escape'd chars - /params const char * in + \params in string for checking - /returns + + \returns return TRUE if string contain escaped chars otherwise return FALSE */ -static gboolean - shell_is_char_escaped ( const char *in ) +gboolean +shell_is_char_escaped ( const char *in ) { if (in == NULL || !*in || in[0] != '\\') - return false; + return FALSE; if (shell_escape_toesc(in[1])) return TRUE; return FALSE; } -/*FIXME: move back to concat_dir_and_file */ -static char* str_dir_plus_file(const char* dirname, const char* filename) -{ - /* make sure we have valid strings */ - if (!dirname) - dirname=""; - - if (!filename) - filename=""; - - /* skip leading slashes on filename */ - while (*filename == '/') - filename++; - - /* skip trailing slashes on dirname */ - size_t dnlen = strlen(dirname); - while ((dnlen != 0) && (dirname[dnlen-1]=='/')) - dnlen--; - - size_t fnlen = strlen(filename); - /*TODO: was previously calloc(1,dnlen+fnlen+2) - please review*/ - char* buffer = g_malloc(dnlen+fnlen+2); /* enough space for dirname, /, filename, zero */ - char* ptr = buffer; - - memcpy(ptr, dirname, dnlen); - ptr+=dnlen; - *ptr = '/'; - ptr++; - memcpy(ptr, filename, fnlen); - ptr+=fnlen; - *ptr = 0; - - return buffer; -} \ No newline at end of file diff --git a/src/util.h b/src/util.h index f681566..e5daccb 100644 --- a/src/util.h +++ b/src/util.h @@ -3,6 +3,7 @@ #include <sys/types.h> + /* Returns its argument as a "modifiable" string. This function is * intended to pass strings to legacy libraries that don't know yet * about the "const" modifier. The return value of this function @@ -256,4 +257,14 @@ extern int ascii_alpha_to_cntrl (int ch); #undef Q_ const char *Q_ (const char *s); + +gboolean shell_is_char_escaped ( const char * ); +char *shell_unescape( char * ); +char *shell_escape( const char * ); + +#define str_dup_range(s_start, s_bound) (g_strndup(s_start, s_bound - s_start)) +#define str_move(dest, src) (g_strlcpy(dest,src,strlen(src))) + +#define MC_PTR_FREE(ptr) do { g_free(ptr); (ptr) = NULL; } while (0) + #endif diff --git a/src/utilunix.c b/src/utilunix.c index 1a778b0..8837a47 100644 --- a/src/utilunix.c +++ b/src/utilunix.c @@ -41,10 +41,6 @@ #endif #include <unistd.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "execute.h" #include "wtools.h" /* message() */ @@ -430,7 +426,7 @@ canonicalize_pathname (char *path) if (p[0] == PATH_SEP && p[1] == PATH_SEP) { s = p + 1; while (*(++s) == PATH_SEP); - mhl_strmove (p + 1, s); + str_move (p + 1, s); } p++; } @@ -439,7 +435,7 @@ canonicalize_pathname (char *path) p = lpath; while (*p) { if (p[0] == PATH_SEP && p[1] == '.' && p[2] == PATH_SEP) - mhl_strmove (p, p + 2); + str_move (p, p + 2); else p++; } @@ -455,7 +451,7 @@ canonicalize_pathname (char *path) lpath[1] = 0; return; } else { - mhl_strmove (lpath, lpath + 2); + str_move (lpath, lpath + 2); } } @@ -501,10 +497,10 @@ canonicalize_pathname (char *path) if (p[3] != 0) { if (s == lpath && *s == PATH_SEP) { /* "/../foo" -> "/foo" */ - mhl_strmove (s + 1, p + 4); + str_move (s + 1, p + 4); } else { /* "token/../foo" -> "foo" */ - mhl_strmove (s, p + 4); + str_move (s, p + 4); } p = (s > lpath) ? s - 1 : s; continue; diff --git a/src/view.c b/src/view.c index f58b263..b86ca99 100644 --- a/src/view.c +++ b/src/view.c @@ -43,10 +43,6 @@ #include <sys/stat.h> #include <unistd.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "cmd.h" /* For view_other_cmd */ diff --git a/src/widget.c b/src/widget.c index 3896be2..f0eb95b 100644 --- a/src/widget.c +++ b/src/widget.c @@ -34,10 +34,6 @@ #include <string.h> #include <sys/types.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "color.h" diff --git a/src/wtools.c b/src/wtools.c index c9b8ba8..ba317e9 100644 --- a/src/wtools.c +++ b/src/wtools.c @@ -29,9 +29,6 @@ #include <stdio.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "global.h" #include "tty.h" #include "color.h" /* dialog_colors */ diff --git a/vfs/cpio.c b/vfs/cpio.c index 42e8f11..26f81a4 100644 --- a/vfs/cpio.c +++ b/vfs/cpio.c @@ -22,9 +22,6 @@ #include <errno.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/direntry.c b/vfs/direntry.c index 227739d..c2fff86 100644 --- a/vfs/direntry.c +++ b/vfs/direntry.c @@ -28,9 +28,6 @@ #include <errno.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/extfs.c b/vfs/extfs.c index d0de1bd..e4a36d5 100644 --- a/vfs/extfs.c +++ b/vfs/extfs.c @@ -36,9 +36,6 @@ #endif #include <errno.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/fish.c b/vfs/fish.c index 0aa4e5b..e4a6b9d 100644 --- a/vfs/fish.c +++ b/vfs/fish.c @@ -42,6 +42,7 @@ #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ #include "../src/main.h" /* print_vfs_message */ +#include "../src/util.h" #include "utilvfs.h" #include "xdirentry.h" #include "vfs.h" @@ -50,9 +51,6 @@ #include "tcputil.h" #include "../src/unixcompat.h" #include "fish.h" -#include "../mhl/memory.h" -#include "../mhl/string.h" -#include "../mhl/escape.h" int fish_directory_timeout = 900; @@ -524,10 +522,10 @@ fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) --linkname_bound; // skip trailing " } - ent->name = mhl_str_dup_range(filename, filename_bound); + ent->name = str_dup_range(filename, filename_bound); shell_unescape(ent->name); - ent->ino->linkname = mhl_str_dup_range(linkname, linkname_bound); + ent->ino->linkname = str_dup_range(linkname, linkname_bound); shell_unescape(ent->ino->linkname); } else { // we expect: "escaped-name" @@ -541,7 +539,7 @@ fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) --filename_bound; } - ent->name = mhl_str_dup_range(filename, filename_bound); + ent->name = str_dup_range(filename, filename_bound); shell_unescape(ent->name); } break; diff --git a/vfs/ftpfs.c b/vfs/ftpfs.c index 0c475fa..7737e93 100644 --- a/vfs/ftpfs.c +++ b/vfs/ftpfs.c @@ -69,9 +69,6 @@ What to do with this? #include <errno.h> #include <ctype.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/gc.c b/vfs/gc.c index aff2390..a0376d8 100644 --- a/vfs/gc.c +++ b/vfs/gc.c @@ -31,9 +31,6 @@ #include <signal.h> #include <ctype.h> /* is_digit() */ -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/local.c b/vfs/local.c index 0185285..4c56f6b 100644 --- a/vfs/local.c +++ b/vfs/local.c @@ -5,9 +5,6 @@ #include <stdio.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/sfs.c b/vfs/sfs.c index 8c30b29..0770482 100644 --- a/vfs/sfs.c +++ b/vfs/sfs.c @@ -34,9 +34,6 @@ #include <stdio.h> #include <string.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/undelfs.c b/vfs/undelfs.c index 718238f..010e7d5 100644 --- a/vfs/undelfs.c +++ b/vfs/undelfs.c @@ -51,9 +51,6 @@ #include <ext2fs/ext2fs.h> #include <ctype.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ diff --git a/vfs/utilvfs.c b/vfs/utilvfs.c index cc55d7d..b2c45a1 100644 --- a/vfs/utilvfs.c +++ b/vfs/utilvfs.c @@ -22,10 +22,6 @@ #include <ctype.h> -#include <mhl/types.h> -#include <mhl/memory.h> -#include <mhl/string.h> - #include "../src/global.h" #include "../src/tty.h" /* enable/disable interrupt key */ #include "../src/wtools.h" /* message() */ -- Midnight Commander Development _______________________________________________ Mc-devel mailing list http://mail.gnome.org/mailman/listinfo/mc-devel