Re: cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)

2005-12-06 Thread Yitzchak Scott-Thoennes
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)

2005-12-06 Thread Igor Pechtchanski
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)

2005-12-06 Thread Christopher Faylor
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)

2005-12-05 Thread Igor Pechtchanski
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/