From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Elliston To: sid@sources.redhat.com Subject: [RFA] cfgroot usability improvement Date: Sun, 20 May 2001 21:12:00 -0000 Message-id: <15112.38243.488724.630625@scooby.apac.redhat.com> X-SW-Source: 2001-q2/msg00016.html The following patch handles the case whereby foolish users (me!) run sid on a binary file (foo.x) instead of its corresponding configuration file (foo.x.conf). If too many non-printable characters are detected in the input file, sid will stop. Okay to commit? 2001-05-21 Ben Elliston * compConfig.cxx (cfgroot_component::num_invalid_chars): New. (cfgroot_component ctor): Initialise it. (cfgroot_component::consume_token): If num_invalid_chars exceeds 5, emit an error message and stop. Index: compConfig.cxx =================================================================== RCS file: /cvs/cvsfiles/devo/sid/component/cfgroot/compConfig.cxx,v retrieving revision 1.77 diff -u -c -r1.77 compConfig.cxx *** compConfig.cxx 2001/03/26 19:18:38 1.77 --- compConfig.cxx 2001/05/21 04:09:15 *************** *** 107,112 **** --- 107,113 ---- unsigned line_num; bool parse(istream&); string current_token; + int num_invalid_chars; void consume_token(istream&); string next_token(istream&); bool parse_command(istream&); *************** *** 255,260 **** --- 256,266 ---- { if (!isprint(ch)) { + if (++num_invalid_chars > 5) + { + emit_error ("too many invalid characters--possibly a binary file?"); + exit (1); + } emit_error(string("invalid character [") + make_numeric_attribute(host_int_2((unsigned char) ch), ios::hex|ios::showbase) + *************** *** 273,278 **** --- 279,289 ---- } else // control code { + if (++num_invalid_chars > 5) + { + emit_error ("too many invalid characters--possibly a binary file?"); + exit (1); + } emit_error(string("invalid character [") + make_numeric_attribute(host_int_2((unsigned char) ch), ios::hex|ios::showbase) + *************** *** 545,551 **** stop_pin(this, & cfgroot_component::stop), verbose_p (false), autoprint_p (true), ! persistent_p (false) { // suck in libtool preloaded symbols; must be called before lt_dlinit() LTDL_SET_PRELOADED_SYMBOLS (); --- 556,563 ---- stop_pin(this, & cfgroot_component::stop), verbose_p (false), autoprint_p (true), ! persistent_p (false), ! num_invalid_chars (0) { // suck in libtool preloaded symbols; must be called before lt_dlinit() LTDL_SET_PRELOADED_SYMBOLS ();