ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/user_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/user_stats.c (file contents):
Revision 1.7 by pajs, Mon Mar 10 19:01:32 2003 UTC vs.
Revision 1.8 by pajs, Fri Apr 4 13:08:27 2003 UTC

# Line 25 | Line 25
25   #include <stdlib.h>
26   #include <stdio.h>
27   #include <string.h>
28 #include <utmp.h>
28   #include "statgrab.h"
29 + #ifdef FREEBSD
30 + #include <sys/types.h>
31 + #endif
32 + #include <utmp.h>
33  
34   #define START_VAL (5*(1+MAX_LOGIN_NAME_SIZE))
35  
# Line 36 | Line 39 | user_stat_t *get_user_stats(){
39          static user_stat_t user_stats;
40          static int size_of_namelist=-1;
41          char *tmp;
42 + #if defined(SOLARIS) || defined(LINUX)  
43          struct utmp *entry;
44 + #endif
45 + #ifdef FREEBSD
46 +        struct utmp entry;
47 +        FILE *f;
48 + #endif
49  
50          /* First case call */
51          if (size_of_namelist==-1){
# Line 49 | Line 58 | user_stat_t *get_user_stats(){
58  
59          /* Essentially blank the list, or give it a inital starting string */
60          strcpy(user_stats.name_list, "");
61 +
62 + #if defined(SOLARIS) || defined(LINUX)  
63          setutent();
64          while((entry=getutent()) != NULL) {
65                  if(entry->ut_type==USER_PROCESS) {
# Line 68 | Line 79 | user_stat_t *get_user_stats(){
79                  }
80          }
81          endutent();
82 + #endif
83 + #ifdef FREEBSD
84 +        if ((f=fopen(_PATH_UTMP, "r")) == NULL){
85 +                return NULL;
86 +        }
87 +        while((fread(&entry, sizeof(entry),1,f)) != 0){
88 +                if (entry.ut_name[0] == '\0') continue;
89 +                if((strlen(user_stats.name_list)+MAX_LOGIN_NAME_SIZE+2) > size_of_namelist){
90 +                        tmp=user_stats.name_list;
91 +                        user_stats.name_list=realloc(user_stats.name_list, 1+(size_of_namelist*2));
92 +                        if(user_stats.name_list==NULL){
93 +                                user_stats.name_list=tmp;
94 +                                return NULL;
95 +                        }
96 +                        size_of_namelist=1+(size_of_namelist*2);
97 +                        
98 +                }
99 +                strncat(user_stats.name_list, entry.ut_name, MAX_LOGIN_NAME_SIZE);
100 +                strcat(user_stats.name_list, " ");
101 +                num_users++;
102 +        }
103 +        fclose(f);
104  
105 + #endif  
106          /* We want to remove the last " " */
107          if(num_users!=0){
108                  tmp=strrchr(user_stats.name_list, ' ');

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines