Yaakov Selkowitz | 14 Jul 01:38 2014

[PATCH] default to normal pthread mutexes

Defaulting to ERRORCHECK mutexes (with the various stringencies it 
implies) does not match the behaviour on Linux, where NORMAL mutexes are 
the default.  I have been testing this locally for some time, and I 
believe it affects a lot of software.  Patch and STC attached.

2014-07-13  Yaakov Selkowitz  <yselkowitz <at> ...>

	* thread.cc (pthread_mutex::pthread_mutex): Change default type
	(pthread_mutexattr::pthread_mutexattr): Ditto.
	(pthread_mutex_unlock): Do not fail if mutex is a normal mutex
	* include/pthread.h (PTHREAD_MUTEX_INITIALIZER): Redefine as

Index: thread.cc
RCS file: /cvs/src/src/winsup/cygwin/thread.cc,v
retrieving revision 1.287
diff -u -p -r1.287 thread.cc
--- thread.cc	1 Dec 2013 10:27:16 -0000	1.287
+++ thread.cc	26 Mar 2014 04:24:08 -0000
 <at>  <at>  -1708,7 +1708,7  <at>  <at>  pthread_mutex::pthread_mutex (pthread_mu
   tid (0),
   recursion_counter (0), condwaits (0),
(Continue reading)

Warren Young | 19 Jun 17:51 2014

/packages CGI HTML modernization

The current CGI code that generates the package and file lists for 
http://cygwin.com/packages emits highly redundant HTML, and it is laid 
out using a huge slow-to-render table.  The attached patch shows a 
minimal way to use <ul> instead of <table>, along with some CSS and JS 
to style it in a similar way to the current look.

If JavaScript is verboten on cygwin.com, you can empirically find an 
appropriate value for the width of the package name column and put that 
in the CSS:

     ul.pkglist span {
         float: left;
         width: 185px;

All the jQuery code does is find that width value programmatically, 
which makes it robust in the face of different font sizes and such.

I have also attached a simple example HTML and CSS file, which show the 
basic idea of the change with all the distractions of the real /packages 
page stripped away.  Just put packages.* in a directory and open 
packages.html in your favorite browser.

I lack the ability to generate packages.inc here, but I expect applying 
the same concept to that script as well will have a measurable effect on 
the load time of cygwin.com/packages.  I expect it to roughly halve the 
size of the file and measurably reduce the page render time.

The contents of the attached CSS file should be inserted into one of 
cygwin.com's normal CSS files.
(Continue reading)

Denis Excoffier | 6 Jun 19:08 2014

typo correction in grp.cc


The following patch (or equivalent) is needed in order for /usr/bin/id to return the full set of groups
in case the user given as argument belongs to more than 10 groups:

diff -uNr cygwin-snapshot-20140523-1.original/winsup/cygwin/grp.cc cygwin-snapshot-20140523-1.patched/winsup/cygwin/grp.cc
--- cygwin-snapshot-20140523-1.original/winsup/cygwin/grp.cc	2014-05-23 12:31:13.000000000 +0200
+++ cygwin-snapshot-20140523-1.patched/winsup/cygwin/grp.cc	2014-05-26 15:08:37.542897300 +0200
 <at>  <at>  -656,11 +656,11  <at>  <at> 
 	  groups[cnt] = grp->gr_gid;
-  *ngroups = cnt;
   if (cnt > *ngroups)
     ret = -1;
     ret = cnt;
+  *ngroups = cnt;

   syscall_printf ( "%d = getgrouplist(%s, %u, %p, %d)",
 		  ret, user, gid, groups, *ngroups);

Please apply.


Denis Excoffier.
Christopher Faylor | 25 May 05:53 2014

Re: Rename detached debug info as cygwin1.dll.dbg

On Fri, May 23, 2014 at 04:05:34PM +0200, Corinna Vinschen wrote:
>On May 23 14:40, Jon TURNEY wrote:
>> Not sure if this is wanted, and it obviously has some knock on effects on
>> package and snapshot generation.
>> But, cygport names detached debug info files by appending the .dbg suffix.
>> This is 'obviously correct' as it means that both a foo.exe and foo.dll can
>> exist and have detached debug info.
>> For consistency, the attached patch changes the name of the detached debug
>> info file for cygwin1.dll from cygwin1.dbg to cygwin1.dll.dbg
>As far as releases go, this is ok.  I'll just have to tweak the next
>cygport file slightly.
>Chris might have to tweak the snapshot generation script as well, so
>he probably wants to chime in, too.

It's more than just a tweak.  I've known that there is a discrepancy for
a long time but haven't considered it that big a deal.  I'd prefer that
this change not be made.

David Stacey | 25 May 00:00 2014

[PATCH] cygwin_rexec() returns pointer to deallocated memory

In function cygwin_rexec(), a pointer to local buffer 'ahostbuf' is 
returned through 'ahost'. However, the buffer will have been deallocated 
at the end of the function, and so the contents of 'ahost' will be 
undefined. A trivial patch (attached) fixes the problem by making 
'ahostbuf' static.

This patch fixes Coverity bug ID #60028.

Change Log:
2014-05-24  David Stacey  <drstacey <at> tiscali.co.uk>

         * libc/rexec.cc (cygwin_rexec):
         Corrected returning a pointer to a buffer that will have gone 
out of



--- cygwin-orig/libc/rexec.cc	2013-04-23 10:44:35.000000000 +0100
+++ cygwin/libc/rexec.cc	2014-05-24 22:37:39.764370000 +0100
 <at>  <at>  -317,7 +317,7  <at>  <at> 
 	u_short port = 0;
 	int s, timo = 1, s3;
 	char c;
-	char ahostbuf[INTERNET_MAX_HOST_NAME_LENGTH + 1];
+	static char ahostbuf[INTERNET_MAX_HOST_NAME_LENGTH + 1];
(Continue reading)

David Stacey | 18 May 21:12 2014

[PATCH] Buffer over-run fix for getusershell(3)

This is the first patch resulting from the Coverity Scan analysis of the 
Cygwin source code. The patch fixes Coverity ID 59932. Note that we 
don't have that many bugs in the Cygwin source code - that's just an ID 
that Coverity assigned to this issue. The patch is only a single line, 
so it falls into our definition of 'trivial'.

getusershell(3) returns the next line from the '/etc/shells' file [1]. 
This contains a path to an executable, so it makes sense for 'buf' to 
contain PATH_MAX characters.

Now, the definition of PATH_MAX is the maximum length of the path, 
including the null terminator [2]. So the for() loop should copy 
PATH_MAX-1 characters, in order to allow for the null terminator.

However, by copying PATH_MAX characters, there is a possible buffer 
over-run when the null terminator is applied. The patch (attached) 
corrects this.

Change Log:
2014-05-18  David Stacey  <drstacey <at> tiscali.co.uk>

         * winsup/cygwin/syscalls.cc(getusershell) :
         Fixed theoretical buffer overrun of 'buf' that would occur if
         /etc/shells contained a line longer than 4095 characters.



[1] http://linux.die.net/man/3/getusershell
(Continue reading)

zosrothko | 2 May 15:40 2014

stdio.h patches for g++ -std=c++11


This is a patch for exposing the new stdio functions added by the c++11 
standard. Without this patch the snprintf for example is not exposed as

$ cat hello.cpp
#include <cstdio>

int main(int argc, char** argv) {
char buf[24];
snprintf(buf, 2, "", 2);
return 0;

$ g++ -std=c++11 hello.cpp
hello.cpp: In function ‘int main(int, char**)’:
hello.cpp:4:30: erreur: ‘snprintf’ was not declared in this scope
snprintf("", 2, "", 2);

$ g++ -xc++ -std=c++11 -dM -E - < /dev/null | sort | grep ANSI
#define __STRICT_ANSI__ 1

$ g++ -dM -E - < /dev/null | sort | grep ANSI



(Continue reading)

Jon TURNEY | 21 Apr 19:02 2014

[PATCH] minidumper patches

Attached are a couple of patches for the minidumper utility which could
probably use some review.

The first one changes to direct linkage with dbghelp, rather than using

(This seems to be the current style, I assume since the reasons for not
directly linking (no import libs or Windows versions which don't have the
.dll) are no longer relevant.)

As suggested, the second one changes the default dump type to something with
more information that just MiniDumpNormal, without getting too big.

(This is complicated by the fact that it appears to be an error to call
MiniDumpWriteDump() with an unknown dump flag, but the documentation for which
dump flags are supported by which dbhelp.dll version and how
ImagehlpApiVersionEx() is supposed to work is not totally clear)
Link directly with dbghelp

2014-04-21  Jon TURNEY  <jon.turney <at> dronecode.org.uk>

	* Makefile.in (minidumper.exe): Link directly with dbghelp.
	* minidumper.cc (minidump): Ditto.

 utils/Makefile.in   |    1 +
 utils/minidumper.cc |   47 ++++++++++-------------------------------------
(Continue reading)

Weber, Mark | 20 Mar 22:10 2014

patch for command line containing equals sign

and related.

Thanks for posting how the new behavior is different from the old.
I am having a related issue, with C++ code that parses the command line.

The command line we support is something like -
  program_name   arg1  -option1=val1  -option2=val2  ...

You get the idea.

Now, with the above mentioned Cygwin patch, we are seeing the input arguments

arg1  "-option1=val1"   "-option2=val2"  ...

If this were the extent of the issue, it would be no big deal to strip off the quotes. However, the user may have
put quotes on the command line himself, which Cygwin now moves around.
Such as:
  program_name  arg1  -option1="file name with spaces in it"

Is there any way to reliably tell what the user entered on the command line?

Oleg Kravtsov | 3 Mar 19:34 2014

[PATCH] Fix errno codes set by opendir() in case of problems with the path argument

Currently cygwin has a problem with errno code set by opendir() 
function. It always sets errno to ENOENT.
After applying the path opendir() sets errno to 'ENAMETOOLONG' when path 
or a path component is too long,
'ELOOP' when a loop of symbolic links exits in the path.

Best regards,

2014-02-18  Oleg Kravtsov <Oleg.Kravtsov <at> oktetlabs.ru>

        * dir.cc (opendir): Set errno code depending on the type of an error
        instead of always setting it to ENOENT.

Attachment (opendir_errno_fix.patch): text/x-diff, 858 bytes
Ray Donnelly | 9 Feb 01:25 2014

[PATCH] Expand $CYGWIN error_start processing

I want to use QtCreator as my debugger but the hardcoded
nature of error_start makes that impossible.

This change allows a formatted commandline to be used where
'|' is used to represent spaces and <program-name> and
<process-id> are special tokens.

In my case, I set my CYGWIN env. var to

.. note, QtCreator doesn't work if passed the program name
and must be invoked with the -debug option.

Ray Donnelly (1):
  * winsup/cygwin/exceptions.cc: Expand $CYGWIN error_start          
    processing so that custom commandlines can be passed to          
    the debugger program using '|' as an argument delimiter          
    and <program-name> and <process-id> as special tokens.

 winsup/cygwin/exceptions.cc | 50 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 46 insertions(+), 4 deletions(-)