get rid of getpwent? (Was: cygwin-1.7.28 getpwent header declaration changes ?)
Richard
richard@KarmannGhia.org
Wed Feb 12 17:05:00 GMT 2014
On Wed, 12 Feb 2014, Ken Brown wrote:
> On 2/12/2014 4:08 AM, Corinna Vinschen wrote:
>> On Feb 11 19:06, Eric Blake wrote:
>>> On 02/11/2014 05:06 PM, Warren Young wrote:
>>>> On 2/11/2014 16:25, David Stacey wrote:
>>>>> getpwent() is called in three different places.
>>>>
>>>> To those of you who have investigated these code paths: do any of them
>>>> look like they couldn't be replaced by getpwnam() or other calls that
>>>> would let cygwin1.dll do single-record AD/SAM lookups, rather than
>>>> whole-table/tree scans?
>>>>
>>>> That is, do any of these programs really need to visit every record in
>>>> /etc/passwd?
>>>
>>> libreadline wants to know how to tab-complete ~foo; to do that, it has
>>> to find all usernames beginning with foo. How would you do that without
>>> visiting every single record?
>>
>> This seems to be the major usage of getpwent these days. The question
>> is, how bad is it if only a handful entries, or even only a single one
>> (of oneself) show up?
>>
>> Either way, implementing a full getpwent requires to return the local
>> users, the users of the primary domain, and the users of all trusted
>> domains. I know of domains with 200K users and there are probably
>> bigger ones. How long should a search take when a user presses <TAB>
>> after the ~? And then, shall the process running the getpwent actually
>> cache all of them? This seems really excessive.
>
> What about the following compromise: If /etc/passwd exists, then getpwent
> behaves as it does currently. Otherwise, it returns a handful of entries, or
> possibly just the current user. This gives users a choice. If
> tab-completion in this situation is important to them, they can keep their
> /etc/passwd file.
Works for me! And I'd vote "just the current user" in lieu of "a handful"
because even a handful has a huge overhead associated with it.
Richard
--
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
More information about the Cygwin
mailing list