summaryrefslogtreecommitdiffstats
path: root/src/userlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/userlist.c')
-rw-r--r--src/userlist.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/userlist.c b/src/userlist.c
index fffe772..d4dde86 100644
--- a/src/userlist.c
+++ b/src/userlist.c
@@ -52,7 +52,8 @@ int getUserList( struct user *outbuf, int size )
if ( outbuf[i].user[0] != '\0' ) {
deadzone = i + 1;
}
- outbuf[i].mark = false;
+ outbuf[i].lastOnline = outbuf[i].online;
+ outbuf[i].online = false;
}
struct utmp buffer[100];
ssize_t len = read( fh, buffer, sizeof(buffer) );
@@ -114,7 +115,7 @@ int getUserList( struct user *outbuf, int size )
getSessionData( &outbuf[use] );
outbuf[use].loginctlFails++;
}
- outbuf[use].mark = true;
+ outbuf[use].online = true;
// Reset offset if timestamp changed
// but ONLY if this isn't a known X session
if ( outbuf[use].display[0] == '\0' ) {
@@ -128,11 +129,11 @@ int getUserList( struct user *outbuf, int size )
close( fh );
// Compact
for ( int i = 0; i < deadzone; ++i ) {
- if ( outbuf[i].mark )
- continue; // In use
+ if ( outbuf[i].online || outbuf[i].lastOnline )
+ continue; // In use, or just finished
do {
deadzone--;
- if ( outbuf[deadzone].mark ) {
+ if ( outbuf[deadzone].online || outbuf[deadzone].lastOnline ) {
outbuf[i] = outbuf[deadzone];
outbuf[deadzone].user[0] = '\0';
break;