[patch] fix for cygcheck -s if run from /usr/bin

Brian Dessent brian@dessent.net
Thu Mar 24 09:52:00 GMT 2005


Currently, if you run cygcheck -s with the current directory as /usr/bin
you get every cyg*.dll found twice, once with ".\" prefix and the second
time with "\cygwin\bin\" prefix.  The user gets a spurious "Multiple
Cygwin DLLs found" warning even if there is only one present.

The following patch tries to correct this.  In init_paths(), the
paths[1] value is populated by GetCurrentDirectory() instead of just
".".  This causes the existing duplicate checking code in add_path() to
reject a later attempt to add a directory from $PATH that is the same as
CWD.

However, this also means that if "." is in $PATH it will no longer be
rejected by that same duplicate checking code, so init_paths() is also
modified to not add "." since we already have the CWD added explicitly.

Finally, in dump_sysinfo() the loop is changed to check starting with
paths[1] instead of paths[0], since paths[0] is a special "placeholder"
value that is initialized to ".".  paths[1] contains the CWD anyway so
there's no need to examine paths[0].

Brian

===================================================================

2005-03-24  Brian Dessent  <brian@dessent.net>

	* cygcheck.cc (init_paths): Use full path instead of "." for the
	current directory.  Do not add "." if present in $PATH.
	(dump_sysinfo): Skip placeholder first value of paths[].
-------------- next part --------------
Index: cygcheck.cc
===================================================================
RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v
retrieving revision 1.64
diff -u -p -r1.64 cygcheck.cc
--- cygcheck.cc	18 Nov 2004 05:20:23 -0000	1.64
+++ cygcheck.cc	24 Mar 2005 09:41:40 -0000
@@ -158,7 +158,12 @@ init_paths ()
 {
   char tmp[4000], *sl;
   add_path ((char *) ".", 1);	/* to be replaced later */
-  add_path ((char *) ".", 1);	/* the current directory */
+  
+  if (GetCurrentDirectory (4000, tmp))
+    add_path (tmp, strlen (tmp));
+  else
+    display_error ("init_paths: GetCurrentDirectory()");  
+  
   if (GetSystemDirectory (tmp, 4000))
     add_path (tmp, strlen (tmp));
   else
@@ -180,7 +185,8 @@ init_paths ()
       while (1)
 	{
 	  for (e = b; *e && *e != ';'; e++);
-	  add_path (b, e - b);
+	  if (strncmp(b, ".", 1) && strncmp(b, ".\\", 2))
+	    add_path (b, e - b);
 	  if (!*e)
 	    break;
 	  b = e + 1;
@@ -1237,7 +1243,7 @@ dump_sysinfo ()
   if (givehelp)
     printf ("Looking for various Cygnus DLLs...  (-v gives version info)\n");
   int cygwin_dll_count = 0;
-  for (i = 0; i < num_paths; i++)
+  for (i = 1; i < num_paths; i++)
     {
       WIN32_FIND_DATA ffinfo;
       sprintf (tmp, "%s/*.*", paths[i]);



More information about the Cygwin-patches mailing list