This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: get rid of getpwent? (Was: cygwin-1.7.28 getpwent header declaration changes ?)


On 11/02/2014 02:25, Andrey Repin wrote:
Greetings, David Stacey!

Greetings, Andrey Repin! (I've wanted to type that for such a long time...)


  I don't have my "almost everything" Cygwin install here to run it
  against, so unless someone beats me to it, I won't be posting results
  for many hours at least.
  Delighted to oblige. I ran your perl script on all executables and DLLs
  in /bin. Results attached.
Curious that mc is missing from 32-bit list.

You are quite correct. I've looked at the source code for Midnight Commander, and getpwent() is called in three different places. The problem was an assumption made in the 'checkfile' perl script: it was assumed that cygwin1.dll is the first DLL listed by objdump. For mc.exe, this isn't the case - cyggcc_s-1.dll is listed first, with cygwin1.dll second.

I made a quick amendment to said perl script to cater for this, and the new results are attached. The differences between the two lists are mainly due to packages not being available for 64-bit Cygwin (e.g. xemacs, ytree). Guile is worthy of a mention: cygguile-12.dll is in the 32-bit list, but there is no equivalent in the 64-bit list. This is probably because the 64-bit version of guile is at a later version compared to its 32-bit cousin.

Hopefully third time lucky!

Dave.

PS: For reference, the revised perl script is as follows:

#!/usr/bin/perl -w

my ($exe, $symbol) = @ARGV;
my $in_cygdll = 0;

die "usage: $0 exename symbol\n" unless length($symbol);
open my $dump, '-|', "objdump -p '$exe'" or die "Can't dump $exe: $!\n";

while (<$dump>) {
    if (m/DLL Name: cygwin1.dll/) {
        $in_cygdll = 1;
    }
    elsif (m/DLL Name: /) {
        if ($in_cygdll) {
            last;   # Last cygwin1.dll symbol found; on to another DLL
        }
    }
    elsif ($in_cygdll) {
        my @parts = split;
        if (@parts == 3 and $parts[2] eq $symbol) {
            print "$exe\n";
            last;
        }
    }
}


Attachment: cygwin32.txt
Description: Text document

Attachment: cygwin64.txt
Description: Text document

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]