From bf521f7571996f845ae4b90ef0a48b4f10c611c4 Mon Sep 17 00:00:00 2001
From: Diego Giovane Pasqualin <dpasqualin@inf.ufpr.br>
Date: Thu, 13 Oct 2016 12:10:57 -0300
Subject: [PATCH] Revert "Merge branch 'issue/17' into 'development'"

This reverts merge request !19
---
 src/linux/get_user_count.cpp | 63 ++++++++++++++++++++++++------------
 1 file changed, 43 insertions(+), 20 deletions(-)

diff --git a/src/linux/get_user_count.cpp b/src/linux/get_user_count.cpp
index d90ded2b..b3e95ccf 100644
--- a/src/linux/get_user_count.cpp
+++ b/src/linux/get_user_count.cpp
@@ -38,8 +38,6 @@ struct utmplist *utmplist = NULL;
 char *ufile;        /* Filename of this file */
 time_t lastdate;    /* Last date we've seen */
 struct tm * timeinfo;
-set<string> users;
-char yesterday[7], today[7];
 
 /*
  *  Read one utmp entry, return in new format.
@@ -128,11 +126,17 @@ static int uread(FILE *fp, struct utmp *u, int *quit) {
     return 1;
 }
 
-static void list(struct utmp *p, time_t t, int what) {
+/*
+ *  Show one line of information on screen
+ */
+static struct user_log *list(struct utmp *p, time_t t, int what) {
     time_t tmp;
     struct user_log * u = (struct user_log *)malloc(sizeof(struct user_log));
     char login[25], logout[25], month[3];
 
+    /*
+     *  Calculate times
+     */
     tmp = (time_t)p->ut_time;
     timeinfo = gmtime(&tmp);  // NOLINT(runtime/threadsafe_fn)
     strftime(month, 3, "%m", timeinfo);
@@ -140,10 +144,10 @@ static void list(struct utmp *p, time_t t, int what) {
 
     snprintf(u->user, sizeof(u->user), p->ut_name, 0);
     snprintf(login, sizeof(login), ctime(&tmp), 0);
-    u->login[0] = login[22];
-    u->login[1] = login[23];
     u->login[2] = month[0];
     u->login[3] = month[1];
+    u->login[0] = login[22];
+    u->login[1] = login[23];
     u->login[4] = login[8] == ' '?'0':login[8];
     u->login[5] = login[9];
     u->login[6] = '\0';
@@ -169,16 +173,7 @@ static void list(struct utmp *p, time_t t, int what) {
             u->logout[6] = '\0';
             break;
     }
-
-        if (!strcmp(u->logout, yesterday)) {
-            users.insert(u->user);
-        } else if (!strcmp(u->login, yesterday)) {
-            users.insert(u->user);
-        } else if (( strcmp(u->login, yesterday) &&
-            strcmp(u->login, today)) &&  (!strcmp(u->logout, today) ||
-            !strcmp(u->logout, "999999"))) {
-            users.insert(u->user);
-        }
+    return u;
 }
 
 static struct user_log * last_modified() {
@@ -310,7 +305,9 @@ static struct user_log * last_modified() {
                         /* Show it */
                         if (c == 0) {
                             quit = 0;
-                            list(&ut, p->ut.ut_time, R_NORMAL);
+                            u = list(&ut, p->ut.ut_time, R_NORMAL);
+                            v = u;
+                            v->next = NULL;
                             c = 1;
                         }
                         if (p->next) p->next->prev = p->prev;
@@ -335,7 +332,9 @@ static struct user_log * last_modified() {
                         c = R_PHANTOM;
 
                     quit = 0;
-                    list(&ut, lastboot, c);
+                    u = list(&ut, lastboot, c);
+                    v = u;
+                    v->next = NULL;
                 }
                 /* FALLTHRU */
 
@@ -421,7 +420,11 @@ static struct user_log * last_modified() {
                         /* Show it */
                         if (c == 0) {
                             quit = 0;
-                            list(&ut, p->ut.ut_time, R_NORMAL);
+                            w = list(&ut, p->ut.ut_time, R_NORMAL);
+                            c = 1;
+                            v->next = w;
+                            w->next = NULL;
+                            v = w;
                         }
                         if (p->next) p->next->prev = p->prev;
                         if (p->prev)
@@ -445,7 +448,10 @@ static struct user_log * last_modified() {
                         c = R_PHANTOM;
 
                     quit = 0;
-                    list(&ut, lastboot, c);
+                    w = list(&ut, lastboot, c);
+                    v->next = w;
+                    w->next = NULL;
+                    v = w;
                 }
                 /* FALLTHRU */
 
@@ -470,12 +476,16 @@ static struct user_log * last_modified() {
     }
 
     fclose(fp);
+    return u;
 }
 
 int get_user_count() {
-    last_modified();
+    struct user_log * u = last_modified();
+    struct user_log * i;
 
     time_t rawtime;
+    char yesterday[7], today[7];
+    set<string> users;
 
     time(&rawtime);
     timeinfo = localtime(&rawtime);  // NOLINT(runtime/threadsafe_fn)
@@ -487,5 +497,18 @@ int get_user_count() {
     strftime(yesterday, 7, "%y%m%d", timeinfo);
     yesterday[6] = '\0';
 
+    for (i = u; i; i = u) {
+        if (!strcmp(i->logout, yesterday)) {
+            users.insert(i->user);
+        } else if (!strcmp(i->login, yesterday)) {
+            users.insert(i->user);
+        } else if (( strcmp(i->login, yesterday) &&
+            strcmp(i->login, today)) &&  (!strcmp(i->logout, today) ||
+            !strcmp(i->logout, "999999"))) {
+            users.insert(i->user);
+        }
+        u = i->next;
+        free(i);
+    }
     return users.size();
 }
-- 
GitLab