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 -0000 1.77 >+++ cygcheck.cc 7 Dec 2005 01:38:07 -0000 >@@ -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/