1 |
|
/* |
2 |
< |
* i-scream central monitoring system |
2 |
> |
* i-scream libstatgrab |
3 |
|
* http://www.i-scream.org |
4 |
|
* Copyright (C) 2000-2004 i-scream |
5 |
|
* |
45 |
|
#endif |
46 |
|
|
47 |
|
#include "tools.h" |
48 |
+ |
#include "statgrab.h" |
49 |
|
|
50 |
|
#ifdef SOLARIS |
51 |
|
#ifdef HAVE_LIBDEVINFO_H |
172 |
|
char *value; |
173 |
|
int instance; |
174 |
|
if ((root_node = di_init("/", DINFOCPYALL)) == DI_NODE_NIL) { |
175 |
< |
return 1; |
175 |
> |
return -1; |
176 |
|
} |
177 |
|
node = di_drv_first_node(alias, root_node); |
178 |
|
while (node != DI_NODE_NIL) { |
214 |
|
int found; |
215 |
|
|
216 |
|
if ((kc = kstat_open()) == NULL) { |
217 |
< |
return 1; |
217 |
> |
return -1; |
218 |
|
} |
219 |
|
|
220 |
|
for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) { |
236 |
|
if (x>=BIG_ENOUGH){ |
237 |
|
/* We've got bigger than we thought was massive */ |
238 |
|
/* If we hit this.. Make big enough bigger */ |
239 |
< |
return 1; |
239 |
> |
return -1; |
240 |
|
} |
241 |
|
if( !strncmp(driver_list[x], device_name, BIG_ENOUGH)){ |
242 |
|
found = 1; |
246 |
|
|
247 |
|
if(!found){ |
248 |
|
if((get_alias(device_name)) != 0){ |
249 |
< |
return 1; |
249 |
> |
return -1; |
250 |
|
} |
251 |
|
strncpy(driver_list[x], device_name, BIG_ENOUGH); |
252 |
|
list_entries++; |
462 |
|
#if defined(NETBSD) || defined(OPENBSD) |
463 |
|
struct uvmexp *sg_get_uvmexp() { |
464 |
|
int mib[2]; |
465 |
< |
size_t size; |
466 |
< |
static struct uvmexp *uvm = NULL; |
465 |
> |
size_t size = sizeof(struct uvmexp); |
466 |
> |
static struct uvmexp uvm; |
467 |
|
struct uvmexp *new; |
468 |
|
|
469 |
|
mib[0] = CTL_VM; |
470 |
|
mib[1] = VM_UVMEXP; |
471 |
|
|
472 |
< |
if (sysctl(mib, 2, NULL, &size, NULL, 0) < 0) { |
472 |
> |
if (sysctl(mib, 2, &uvm, &size, NULL, 0) < 0) { |
473 |
|
return NULL; |
474 |
|
} |
475 |
|
|
476 |
< |
new = realloc(uvm, size); |
476 |
< |
if (new == NULL) { |
477 |
< |
return NULL; |
478 |
< |
} |
479 |
< |
uvm = new; |
480 |
< |
|
481 |
< |
if (sysctl(mib, 2, uvm, &size, NULL, 0) < 0) { |
482 |
< |
return NULL; |
483 |
< |
} |
484 |
< |
|
485 |
< |
return uvm; |
476 |
> |
return &uvm; |
477 |
|
} |
478 |
|
#endif |
479 |
|
|
480 |
|
int sg_init(){ |
481 |
|
#if (defined(FREEBSD) && !defined(FREEBSD5)) || defined(DFBSD) |
482 |
|
if (sg_get_kvm() == NULL) { |
483 |
< |
return 1; |
483 |
> |
return -1; |
484 |
|
} |
485 |
|
if (sg_get_kvm2() == NULL) { |
486 |
< |
return 1; |
486 |
> |
return -1; |
487 |
|
} |
488 |
|
#endif |
498 |
– |
#if defined(NETBSD) || defined(OPENBSD) |
499 |
– |
/* This should always succeed, but it seems that on some |
500 |
– |
* versions of NetBSD the first call to get_uvmexp will return |
501 |
– |
* a non-filled-in structure; this is a workaround for that. |
502 |
– |
*/ |
503 |
– |
if (sg_get_uvmexp() == NULL) return 1; |
504 |
– |
#endif |
489 |
|
#ifdef SOLARIS |
490 |
|
/* On solaris 7, this will fail if you are not root. But, everything |
491 |
|
* will still work, just no disk mappings. So we will ignore the exit |
502 |
|
if (setegid(getgid()) != 0) return -1; |
503 |
|
if (seteuid(getuid()) != 0) return -1; |
504 |
|
return 0; |
505 |
+ |
} |
506 |
+ |
|
507 |
+ |
void *sg_realloc(void *ptr, size_t size) { |
508 |
+ |
void *tmp = NULL; |
509 |
+ |
tmp = realloc(ptr, size); |
510 |
+ |
if(tmp == NULL) { |
511 |
+ |
sg_set_error(SG_ERROR_MALLOC_FAILED, NULL); |
512 |
+ |
} |
513 |
+ |
return tmp; |
514 |
|
} |
515 |
|
|