[comp.sources.bugs] Speeding up top in a large YP environment

george@CIS.OHIO-STATE.EDU (George M. Jones) (02/14/90)

The following are the diffs to a change that I made to top.c that had
the effect of changing the startup time from 45-90 seconds to 6.
The problem was that top was using getpwent(3) to spin through most or
all of the 2000+ entries in our YP passsword file rather than simply
reading those entries that are needed via a call to getpwuid(3).

Enjoy.  You millage may vary.

---George Jones
OSU Computer & Inf. Science 2036 Neil Ave.,Columbus,Ohio 43210. 614-292-7325
george@cis.ohio-state.edu or ...!osu-cis!george
X windows. You'd better sit down.

-----------------------------top.c.diff-----------------------------
138c138
< struct passwd *getpwuid();
---
> struct passwd *getpwent();
1174,1180c1174,1182
<     if ((pwd = getpwuid(uid)) == NULL)
<       {
< 	fprintf(stderr, "getpwuid(%d) failed\n", uid);
< 	quit(11);
<       }
< 
<    return(enter_user(pwd->pw_uid, pwd->pw_name));
---
>     while ((pwd = getpwent()) != NULL)
>     {
> 	last_index = enter_user(pwd->pw_uid, pwd->pw_name);
> 	if (pwd->pw_uid == uid)
> 	{
> 	    return(last_index);
> 	}
>     }
>     return(enter_user(uid, itoa7(uid)));