ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/tools.c
Revision: 1.12
Committed: Mon Nov 10 21:07:04 2003 UTC (20 years, 6 months ago) by tdb
Content type: text/plain
Branch: MAIN
Changes since 1.11: +9 -2 lines
Log Message:
Add support for cygwin. This is a bit limited, there's a few things that
can't be retrieved on cygwin such as load averages, diskio, network io,
and process stats. The package compiles and runs, and both saidar and
statgrab work.

Taken from a patch submitted by Ron Arts <raarts@netland.nl>. Thanks Ron!

File Contents

# User Rev Content
1 tdb 1.5 /*
2     * i-scream central monitoring system
3 tdb 1.6 * http://www.i-scream.org
4     * Copyright (C) 2000-2003 i-scream
5 tdb 1.5 *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU General Public License
8     * as published by the Free Software Foundation; either version 2
9     * of the License, or (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19     */
20    
21     #ifdef HAVE_CONFIG_H
22     #include "config.h"
23     #endif
24    
25 pajs 1.1 #include <stdio.h>
26     #include <string.h>
27 pajs 1.3 #include <stdlib.h>
28     #include <sys/types.h>
29     #include <regex.h>
30 ats 1.9 #ifdef ALLBSD
31 ats 1.8 #include <fcntl.h>
32     #include <kvm.h>
33     #endif
34 ats 1.9 #ifdef NETBSD
35     #include <uvm/uvm_extern.h>
36     #endif
37 pajs 1.1
38 ats 1.7 #include "tools.h"
39    
40 pajs 1.1 char *f_read_line(FILE *f, const char *string){
41     /* Max line length. 8k should be more than enough */
42     static char line[8192];
43    
44 pajs 1.2 while((fgets(line, sizeof(line), f))!=NULL){
45 pajs 1.1 if(strncmp(string, line, strlen(string))==0){
46     return line;
47     }
48     }
49    
50     return NULL;
51 pajs 1.3 }
52    
53     char *get_string_match(char *line, regmatch_t *match){
54     int len=match->rm_eo - match->rm_so;
55     char *match_string=malloc(len+1);
56    
57     match_string=strncpy(match_string, line+match->rm_so, len);
58     match_string[len]='\0';
59    
60     return match_string;
61     }
62 ats 1.7
63 pajs 1.3 long long get_ll_match(char *line, regmatch_t *match){
64     char *ptr;
65     long long num;
66    
67     ptr=line+match->rm_so;
68 tdb 1.12 #ifdef HAVE_ATOLL
69 pajs 1.3 num=atoll(ptr);
70 tdb 1.12 #else
71     /* Don't have atoll, so use this bodge instead */
72     {
73     long numl;
74     numl=atol(ptr);
75     num=numl;
76     }
77     #endif
78 pajs 1.3
79     return num;
80 ats 1.8 }
81    
82 ats 1.9 #ifdef ALLBSD
83 ats 1.8 kvm_t *get_kvm() {
84     static kvm_t *kvmd = NULL;
85    
86     if (kvmd != NULL) {
87     return kvmd;
88     }
89    
90     kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
91     return kvmd;
92 pajs 1.1 }
93 pajs 1.4 #endif
94 ats 1.9
95     #ifdef NETBSD
96     struct uvmexp *get_uvmexp() {
97     static u_long addr = 0;
98     static struct uvmexp uvm;
99     kvm_t *kvmd = get_kvm();
100    
101     if (kvmd == NULL) {
102     return NULL;
103     }
104    
105     if (addr == 0) {
106     struct nlist symbols[] = {
107     { "_uvmexp" },
108     { NULL }
109     };
110    
111     if (kvm_nlist(kvmd, symbols) != 0) {
112     return NULL;
113     }
114     addr = symbols[0].n_value;
115     }
116    
117     if (kvm_read(kvmd, addr, &uvm, sizeof uvm) != sizeof uvm) {
118     return NULL;
119     }
120     return &uvm;
121     }
122     #endif
123    
124 pajs 1.10 int statgrab_init(){
125 pajs 1.11 #ifdef ALLBSD
126     {
127     kvm_t *kvmd = get_kvm();
128     if (kvmd == NULL) return 1;
129     }
130 pajs 1.10 #endif
131     #ifdef NETBSD
132 pajs 1.11 {
133     struct uvmexp *uvm = get_uvmexp();
134     if (uvm == NULL) return 1;
135     }
136 pajs 1.10 #endif
137     return 0;
138     }