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

Comparing projects/libstatgrab/src/libstatgrab/tools.c (file contents):
Revision 1.1 by pajs, Tue Mar 4 18:07:42 2003 UTC vs.
Revision 1.13 by ats, Mon Nov 10 22:46:32 2003 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org
4 + * Copyright (C) 2000-2003 i-scream
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   #include <stdio.h>
26   #include <string.h>
27 + #include <stdlib.h>
28 + #include <sys/types.h>
29 + #include <regex.h>
30 + #ifdef ALLBSD
31 + #include <fcntl.h>
32 + #include <kvm.h>
33 + #endif
34 + #ifdef NETBSD
35 + #include <uvm/uvm_extern.h>
36 + #endif
37  
38 + #include "tools.h"
39 +
40   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 <        while((fgets(line, sizeof(line), f))==NULL){
9 <
44 >        while((fgets(line, sizeof(line), f))!=NULL){
45                  if(strncmp(string, line, strlen(string))==0){
46                          return line;
47                  }
48          }
49  
50          return NULL;
51 + }
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 +
63 + #ifndef HAVE_ATOLL
64 + static long long atoll(const char *s) {
65 +        long long value = 0;
66 +        int isneg = 0;
67 +
68 +        while (*s == ' ' || *s == '\t') {
69 +                s++;
70 +        }
71 +        if (*s == '-') {
72 +                isneg = 1;
73 +                s++;
74 +        }
75 +        while (*s >= '0' && *s <= '9') {
76 +                value = (10 * value) + (*s - '0');
77 +                s++;
78 +        }
79 +        return (isneg ? -value : value);
80 + }
81 + #endif
82 +
83 + long long get_ll_match(char *line, regmatch_t *match){
84 +        char *ptr;
85 +        long long num;
86 +
87 +        ptr=line+match->rm_so;
88 +        num=atoll(ptr);
89 +
90 +        return num;
91 + }
92 +
93 + #ifdef ALLBSD
94 + kvm_t *get_kvm() {
95 +        static kvm_t *kvmd = NULL;
96 +
97 +        if (kvmd != NULL) {
98 +                return kvmd;
99 +        }
100 +
101 +        kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
102 +        return kvmd;
103 + }
104 + #endif
105 +
106 + #ifdef NETBSD
107 + struct uvmexp *get_uvmexp() {
108 +        static u_long addr = 0;
109 +        static struct uvmexp uvm;
110 +        kvm_t *kvmd = get_kvm();
111 +
112 +        if (kvmd == NULL) {
113 +                return NULL;
114 +        }
115 +
116 +        if (addr == 0) {
117 +                struct nlist symbols[] = {
118 +                        { "_uvmexp" },
119 +                        { NULL }
120 +                };
121 +
122 +                if (kvm_nlist(kvmd, symbols) != 0) {
123 +                        return NULL;
124 +                }
125 +                addr = symbols[0].n_value;
126 +        }
127 +
128 +        if (kvm_read(kvmd, addr, &uvm, sizeof uvm) != sizeof uvm) {
129 +                return NULL;
130 +        }
131 +        return &uvm;
132 + }
133 + #endif
134 +
135 + int statgrab_init(){
136 + #ifdef ALLBSD
137 +        {
138 +                kvm_t *kvmd = get_kvm();
139 +                if (kvmd == NULL) return 1;
140 +        }
141 + #endif
142 + #ifdef NETBSD
143 +        {
144 +                struct uvmexp *uvm = get_uvmexp();
145 +                if (uvm == NULL) return 1;
146 +        }
147 + #endif
148 +        return 0;
149   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines