Re: cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)
On Mon, Dec 05, 2005 at 09:40:01AM -0500, Igor Pechtchanski wrote: Running cygcheck under strace shows that after listing all the available services, it invokes cygrunsrv --query grunsrv.exe --list, which results in the above message. I think this may be because the output of cygrunsrv --list doesn't contain a trailing '\n', and so strtok gets confused. The following patch (against a slightly older cygcheck) fixes it for me, but I haven't had the time to test it extensively: Index: cygcheck.cc === RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v retrieving revision 1.77 diff -u -p -r1.77 cygcheck.cc --- cygcheck.cc 17 Aug 2005 00:52:43 - 1.77 +++ cygcheck.cc 5 Dec 2005 14:37:58 - @@ -950,8 +950,8 @@ dump_sysinfo_services () else { /* read the output of --list, and then run --query for each service */ - size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f); - buf[nchars] = 0; + size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 2, f); + buf[nchars] = buf[nchars+1] = 0; That needs a comment in the code. -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
Re: [PATCH] cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)
On Tue, 6 Dec 2005, Yitzchak Scott-Thoennes wrote: On Mon, Dec 05, 2005 at 09:40:01AM -0500, Igor Pechtchanski wrote: Running cygcheck under strace shows that after listing all the available services, it invokes cygrunsrv --query grunsrv.exe --list, which results in the above message. I think this may be because the output of cygrunsrv --list doesn't contain a trailing '\n', and so strtok gets confused. The following patch (against a slightly older cygcheck) fixes it for me, but I haven't had the time to test it extensively: [snip] - buf[nchars] = 0; + buf[nchars] = buf[nchars+1] = 0; That needs a comment in the code. Fair enough: Index: cygcheck.cc === RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v retrieving revision 1.77 diff -u -p -r1.77 cygcheck.cc --- cygcheck.cc 17 Aug 2005 00:52:43 - 1.77 +++ cygcheck.cc 7 Dec 2005 01:38:07 - @@ -950,8 +950,10 @@ dump_sysinfo_services () else { /* read the output of --list, and then run --query for each service */ - size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f); - buf[nchars] = 0; + size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 2, f); + /* Add two nulls to avoid confusing strtok() when the trailing separator + is missing */ + buf[nchars] = buf[nchars+1] = 0; pclose (f); if (nchars 0) I'll even add a ChangeLog of sorts :-) 2005-12-06 Igor Pechtchanski [EMAIL PROTECTED] * cygcheck.cc (dump_sysinfo_services): Add an extra NUL to mollify strtok() when the trailing newline is missing. HTH, Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_[EMAIL PROTECTED] ZZZzz /,`.-'`'-. ;-;;,_[EMAIL PROTECTED] |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D. '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! If there's any real truth it's that the entire multidimensional infinity of the Universe is almost certainly being run by a bunch of maniacs. /DA -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
Re: [PATCH] cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)
On Tue, Dec 06, 2005 at 08:41:24PM -0500, Igor Pechtchanski wrote: On Tue, 6 Dec 2005, Yitzchak Scott-Thoennes wrote: On Mon, Dec 05, 2005 at 09:40:01AM -0500, Igor Pechtchanski wrote: Running cygcheck under strace shows that after listing all the available services, it invokes cygrunsrv --query grunsrv.exe --list, which results in the above message. I think this may be because the output of cygrunsrv --list doesn't contain a trailing '\n', and so strtok gets confused. The following patch (against a slightly older cygcheck) fixes it for me, but I haven't had the time to test it extensively: [snip] - buf[nchars] = 0; + buf[nchars] = buf[nchars+1] = 0; That needs a comment in the code. Fair enough: Index: cygcheck.cc === RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v retrieving revision 1.77 diff -u -p -r1.77 cygcheck.cc --- cygcheck.cc 17 Aug 2005 00:52:43 - 1.77 +++ cygcheck.cc 7 Dec 2005 01:38:07 - @@ -950,8 +950,10 @@ dump_sysinfo_services () else { /* read the output of --list, and then run --query for each service */ - size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f); - buf[nchars] = 0; + size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 2, f); + /* Add two nulls to avoid confusing strtok() when the trailing separator + is missing */ + buf[nchars] = buf[nchars+1] = 0; pclose (f); if (nchars 0) I'll even add a ChangeLog of sorts :-) 2005-12-06 Igor Pechtchanski [EMAIL PROTECTED] * cygcheck.cc (dump_sysinfo_services): Add an extra NUL to mollify strtok() when the trailing newline is missing. How about a testcase which shows that the MSVCRT strtok needs two trailing NUL bytes to work around problems when there is no trailing separator? I would find that much more interesting than a comment which simply asserts that behavior. cgf -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)
On Sun, 4 Dec 2005, Mark Piper wrote: P.S. Here is the full output from cygcheck $ /bin/cygcheck.exe -s Cygwin Configuration Diagnostics [snip] 1265k 2005/07/03 C:\cygwin\bin\cygwin1.dll Cygwin DLL version info: DLL version: 1.5.18 DLL epoch: 19 DLL bad signal mask: 19005 DLL old termios: 5 DLL malloc env: 28 API major: 0 API minor: 132 Shared data: 4 DLL identifier: cygwin1 Mount /usr/bin/cygrunsrv: Exactly one of --install, --remove, --start, --stop, --query, or --list is required Try `/usr/bin/cygrunsrv --help' for more information. registry: 2 Cygnus registry name: Cygnus Solutions Cygwin registry name: Cygwin Program options name: Program Options Cygwin mount registry name: mounts v2 Cygdrive flags: cygdrive flags Cygdrive prefix: cygdrive prefix Cygdrive default prefix: Build date: Sat Jul 2 20:30:04 EDT 2005 Shared id: cygwin1S4 Service : sshd Display name: CYGWIN sshd Current State : Running Controls Accepted : Stop Command : /usr/sbin/sshd -D Note the cygrunsrv error message above. I was able to reproduce it in non-verbose mode. Running cygcheck under strace shows that after listing all the available services, it invokes cygrunsrv --query grunsrv.exe --list, which results in the above message. I think this may be because the output of cygrunsrv --list doesn't contain a trailing '\n', and so strtok gets confused. The following patch (against a slightly older cygcheck) fixes it for me, but I haven't had the time to test it extensively: Index: cygcheck.cc === RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v retrieving revision 1.77 diff -u -p -r1.77 cygcheck.cc --- cygcheck.cc 17 Aug 2005 00:52:43 - 1.77 +++ cygcheck.cc 5 Dec 2005 14:37:58 - @@ -950,8 +950,8 @@ dump_sysinfo_services () else { /* read the output of --list, and then run --query for each service */ - size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f); - buf[nchars] = 0; + size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 2, f); + buf[nchars] = buf[nchars+1] = 0; pclose (f); if (nchars 0) HTH, Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_[EMAIL PROTECTED] ZZZzz /,`.-'`'-. ;-;;,_[EMAIL PROTECTED] |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D. '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! If there's any real truth it's that the entire multidimensional infinity of the Universe is almost certainly being run by a bunch of maniacs. /DA -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/