- while(read(f, (char *)&wtmp, sizeof(wtmp)) == sizeof(wtmp)) {
- if (SCMPN(wtmp.ut_line, line+5) || wtmp.ut_name[0]==0)
- continue;
- lseek(f, -(long)sizeof(wtmp), 1);
- SCPYN(wtmp.ut_name, "");
- time(&wtmp.ut_time);
- write(f, (char *)&wtmp, sizeof(wtmp));
- found++;
+ fstat(f, &statbf);
+ utmp = (struct utmp *)malloc(statbf.st_size);
+ if (!utmp)
+ syslog(LOG_ERR, "utmp malloc failed");
+ if (statbf.st_size && utmp) {
+ nutmp = read(f, utmp, statbf.st_size);
+ nutmp /= sizeof(struct utmp);
+
+ for (u = utmp ; u < &utmp[nutmp] ; u++) {
+ if (SCMPN(u->ut_line, line+5) ||
+ u->ut_name[0]==0)
+ continue;
+ lseek(f, ((long)u)-((long)utmp), L_SET);
+ SCPYN(u->ut_name, "");
+ SCPYN(u->ut_host, "");
+ time(&u->ut_time);
+ write(f, (char *)u, sizeof(wtmp));
+ found++;
+ }