Hi, Pavel! This patch fixes crushes in built-in editor with incorrect Syntax file(s). Unfortunately I have not time to test it hardly. In worse scenario I will be offline for a 3 weeks, so commit it please if you find it right. I am too harry now to make sure I break nothing.
Regards, Andrew. ChangeLog: * syntax.c (syntax_g_free): New macros. Use to release and NULLify glib allocated memory area(s). (strdup_convert): Rename to ... (convert): ... this. Don't strdup passed string. (get_args): Use convert instead of strdup_convert. (free_args): Make it do notning macros. (open_include_file): Eliminate p array. Use glib functions to construct error_file_name. Use PATH_SEP_STR instead of "/". (edit_read_syntax_rules): Use syntax_g_free to release error_file_name. (edit_load_syntax): Likewise. --- mc-cvs/edit/syntax.c Wed Nov 28 17:15:06 2001 +++ mc/edit/syntax.c Wed Nov 28 17:17:37 2001 @@ -68,6 +68,7 @@ static void *syntax_malloc (size_t x) } #define syntax_free(x) {if(x){free(x);(x)=0;}} +#define syntax_g_free(x) {if(x){g_free(x);(x)=0;}} static long compare_word_to_right (WEdit * edit, long i, char *text, char *whole_left, char *whole_right, int line_start) { @@ -428,10 +429,10 @@ static int read_one_line (char **line, F return r; } -static char *strdup_convert (char *s) +static char *convert (char *s) { char *r, *p; - p = r = (char *) strdup (s); + p = r = s; while (*s) { switch (*s) { case '\\': @@ -503,13 +505,13 @@ static void get_args (char *l, char **ar for (l = p + 1; *l && !whiteness (*l); l++); if (*l) *l++ = '\0'; - *args = strdup_convert (p); + *args = convert (p); (*argc)++; args++; } *args = 0; } - +#if 0 static void free_args (char **args) { while (*args) { @@ -517,6 +519,9 @@ static void free_args (char **args) args++; } } +#else +#define free_args(x) +#endif #define break_a {result=line;break;} #define check_a {if(!*a){result=line;break;}} @@ -557,25 +562,23 @@ extern char *mc_home; static FILE *open_include_file (char *filename) { FILE *f; - char p[MAX_PATH_LEN]; - syntax_free (error_file_name); - error_file_name = (char *) strdup (filename); + + syntax_g_free (error_file_name); + error_file_name = g_strdup (filename); if (*filename == '/') return fopen (filename, "r"); - strcpy (p, home_dir); - strcat (p, EDIT_DIR "/"); - strcat (p, filename); - syntax_free (error_file_name); - error_file_name = (char *) strdup (p); - f = fopen (p, "r"); + + syntax_g_free (error_file_name); + error_file_name = g_strconcat (home_dir, EDIT_DIR PATH_SEP_STR, + filename, NULL); + f = fopen (error_file_name, "r"); if (f) return f; - strcpy (p, mc_home); - strcat (p, "/syntax/"); - strcat (p, filename); - syntax_free (error_file_name); - error_file_name = (char *) strdup (p); - return fopen (p, "r"); + + syntax_g_free (error_file_name); + error_file_name = g_strconcat (mc_home, PATH_SEP_STR "syntax" PATH_SEP_STR, + filename, NULL); + return fopen (error_file_name, "r"); } /* returns line number on error */ @@ -610,7 +613,7 @@ static int edit_read_syntax_rules (WEdit f = g; g = 0; line = save_line + 1; - syntax_free (error_file_name); + syntax_g_free (error_file_name); if (l) syntax_free (l); if (!read_one_line (&l, f)) @@ -631,7 +634,7 @@ static int edit_read_syntax_rules (WEdit g = f; f = open_include_file (args[1]); if (!f) { - syntax_free (error_file_name); + syntax_g_free (error_file_name); result = line; break; } @@ -1001,7 +1004,7 @@ void edit_load_syntax (WEdit * edit, cha message (0, _(" Load syntax file "), _(" Error in file %s on line %d "), error_file_name ? error_file_name : f, r); - syntax_free (error_file_name); + syntax_g_free (error_file_name); return; } } _______________________________________________ Mc-devel mailing list [EMAIL PROTECTED] http://mail.gnome.org/mailman/listinfo/mc-devel