X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fusers.c;h=5ba795906f47faa964805ce2f03ef8fc5df8dfac;hb=5c555deb64c75b2a6f04dc9c6b52756897567483;hp=d833da7a34b02f98908fbbf00d0941aa37b03734;hpb=2e2765393e1e7538771e3fda84546155be28d8a8;p=monky
diff --git a/src/users.c b/src/users.c
index d833da7..5ba7959 100644
--- a/src/users.c
+++ b/src/users.c
@@ -1,4 +1,7 @@
-/* Conky, a system monitor, based on torsmo
+/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
+ * vim: ts=4 sw=4 noet ai cindent syntax=c
+ *
+ * Conky, a system monitor, based on torsmo
*
* Any original torsmo code is licensed under the BSD license
*
@@ -7,7 +10,7 @@
* Please see COPYING for details
*
* Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
- * Copyright (c) 2005-2008 Brenden Matthews, Philip Kovacs, et. al.
+ * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
* (see AUTHORS)
* All rights reserved.
*
@@ -23,13 +26,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
- * $Id$
- *
*/
#include "conky.h"
#include
#include
+#include
#define BUFLEN 512
@@ -76,7 +78,6 @@ static void user_time(char *ptr)
{
const struct utmp *usr;
time_t log_in, real, diff;
- struct tm *dtime;
char buf[BUFLEN] = "";
setutent();
@@ -85,27 +86,34 @@ static void user_time(char *ptr)
log_in = usr->ut_time;
time(&real);
diff = difftime(real, log_in);
- dtime = localtime(&diff);
- dtime->tm_year = dtime->tm_year - 70;
- dtime->tm_mon = dtime->tm_mon - 1;
- dtime->tm_mday = dtime->tm_mday - 1;
- if (dtime->tm_year > 0) {
- strftime(buf, BUFLEN, "%yy %mm %dd %Hh %Mm", dtime);
- } else if (dtime->tm_mon > 0) {
- strftime(buf, BUFLEN, "%mm %dd %Hh %Mm", dtime);
- } else if (dtime->tm_mday > 0) {
- strftime(buf, BUFLEN, "%dd %Hh %Mm", dtime);
- } else if (dtime->tm_hour > 0) {
- strftime(buf, BUFLEN, "%Hh %Mm", dtime);
- } else if (dtime->tm_min > 0) {
- strftime(buf, BUFLEN, "%Mm", dtime);
- }
+ format_seconds(buf, BUFLEN, diff);
if (strlen(ptr) + strlen(buf) + 1 <= BUFLEN) {
- strncat(ptr, buf, BUFLEN);
+ strncat(ptr, buf, BUFLEN-strlen(ptr)-1);
}
}
}
}
+static void tty_user_time(char *ptr, char *tty)
+{
+ time_t real, diff, log_in;
+ char buf[BUFLEN] = "";
+
+ struct utmp *usr, line;
+
+ setutent();
+ strcpy(line.ut_line, tty);
+ usr = getutline(&line);
+ if (usr == NULL ) {
+ return;
+ }
+
+ log_in = usr->ut_time;
+
+ time(&real);
+ diff = difftime(real, log_in);
+ format_seconds(buf, BUFLEN, diff);
+ strncpy(ptr, buf, BUFLEN-1);
+}
static void users_alloc(struct information *ptr)
{
@@ -121,7 +129,35 @@ static void users_alloc(struct information *ptr)
}
}
-void update_users(void)
+void update_user_time(char *tty)
+{
+ struct information *current_info = &info;
+ char temp[BUFLEN] = "";
+
+ if (current_info->users.ctime == NULL) {
+ current_info->users.ctime = malloc(text_buffer_size);
+ }
+
+ tty_user_time(temp, tty);
+
+ if (temp != NULL) {
+ if (current_info->users.ctime) {
+ free(current_info->users.ctime);
+ current_info->users.ctime = 0;
+ }
+ current_info->users.ctime = malloc(text_buffer_size);
+ strncpy(current_info->users.ctime, temp, text_buffer_size);
+ } else {
+ if (current_info->users.ctime) {
+ free(current_info->users.ctime);
+ current_info->users.ctime = 0;
+ }
+ current_info->users.ctime = malloc(text_buffer_size);
+ strncpy(current_info->users.ctime, "broken", text_buffer_size);
+ }
+}
+
+int update_users(void)
{
struct information *current_info = &info;
char temp[BUFLEN] = "";
@@ -185,4 +221,5 @@ void update_users(void)
current_info->users.times = malloc(text_buffer_size);
strncpy(current_info->users.times, "broken", text_buffer_size);
}
+ return 0;
}