Hello! > > > I want to continue discussion about displaying unprintable > > characters. > > The problem has arised when I tried to use new experimental > > feature "Support for charset selection and > > conversion" (--enable-charset). I set c_y_r_i_l_l_i_c input encodings > > and decided to view any binary file. After few strokes on PgDn MC screen > > was completely crashed and I saw invitation to search strange regex. > > I guess that it's exactly the problem that I noticed immediately in the > charset patch. It relies on charset conversion doing filtering of > unprintable characters. > > That's precisely the reason why the charset patch is experimental and is > disabled by default. > > I promise to look into that before releasing the next version (unless the > release is forced by security issues). > > > #ifdef HAVE_CHARSET > > - if (display_codepage < 0) { > > +/* Because of broken printable[] in charset.c */ > > +/* we still need in filtering characters #127 and #155 */ > > Exactly!
I applied patch below to CVS: ChangeLog: * util.c [HAVE_CHARSET] (is_printable): Eliminate printable. * setup.c [HAVE_CHARSET] (load_setup): Don't use init_printable_table(). * charset.c (printable): Removed. (init_printable_table): Removed. Index: util.c =================================================================== RCS file: /cvs/gnome/mc/src/util.c,v retrieving revision 1.57 diff -u -p -r1.57 util.c --- util.c 2002/01/17 07:17:54 1.57 +++ util.c 2002/02/04 17:48:13 @@ -78,13 +78,10 @@ int is_printable (int c) c &= 0xff; #ifdef HAVE_CHARSET - if (display_codepage < 0) { - if (xterm_flag) - return xterm_printable[c]; - else - return (c > 31 && c != 127 && c != 155); - } else - return printable[ c ]; + if (xterm_flag) + return xterm_printable[c]; + else + return (c > 31 && c != 127 && c != 155); #else if (eight_bit_clean){ if (full_eight_bits){ Index: charsets.c =================================================================== RCS file: /cvs/gnome/mc/src/charsets.c,v retrieving revision 1.12 diff -u -p -r1.12 charsets.c --- charsets.c 2002/01/29 15:10:00 1.12 +++ charsets.c 2002/02/04 17:48:14 @@ -15,7 +15,6 @@ struct codepage_desc *codepages; uchar conv_displ[256]; uchar conv_input[256]; -uchar printable[256]; int load_codepages_list(void) { @@ -142,21 +141,6 @@ char errbuf[255]; * in mc.charsets */ #define CP_ASCII 0 - -char* init_printable_table( int cpdisplay ) -{ - int i; - - /* Fill printable characters table */ - for (i=0; i<=127; ++i) - printable[i] = (i > 31 && i != 127); - - for (i=128; i<=255; ++i) { - printable[i] = 1; - } - - return NULL; -} char* init_translation_table( int cpsource, int cpdisplay ) { Index: setup.c =================================================================== RCS file: /cvs/gnome/mc/src/setup.c,v retrieving revision 1.57 diff -u -p -r1.57 setup.c --- setup.c 2002/01/17 07:17:54 1.57 +++ setup.c 2002/02/04 17:48:15 @@ -573,7 +573,6 @@ load_setup (void) display_codepage = get_codepage_index( cpname ); } - init_printable_table( display_codepage ); init_translation_table( source_codepage, display_codepage ); #endif /* HAVE_CHARSET */ } _______________________________________________ Mc-devel mailing list [EMAIL PROTECTED] http://mail.gnome.org/mailman/listinfo/mc-devel