131 |
|
|
132 |
|
#ifdef LINUX |
133 |
|
if ((f=fopen("/proc/uptime", "r")) == NULL) { |
134 |
< |
sg_set_error(SG_ERROR_OPEN, "/proc/uptime"); |
134 |
> |
sg_set_error_with_errno(SG_ERROR_OPEN, "/proc/uptime"); |
135 |
|
return NULL; |
136 |
|
} |
137 |
|
if((fscanf(f,"%lu %*d",&uptime)) != 1){ |
142 |
|
#endif |
143 |
|
|
144 |
|
if((proc_dir=opendir(PROC_LOCATION))==NULL){ |
145 |
< |
sg_set_error(SG_ERROR_OPENDIR, PROC_LOCATION); |
145 |
> |
sg_set_error_with_errno(SG_ERROR_OPENDIR, PROC_LOCATION); |
146 |
|
return NULL; |
147 |
|
} |
148 |
|
|
307 |
|
mib[2] = KERN_PROC_ALL; |
308 |
|
|
309 |
|
if(sysctl(mib, 3, NULL, &size, NULL, 0) < 0) { |
310 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
310 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, |
311 |
> |
"CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
312 |
|
return NULL; |
313 |
|
} |
314 |
|
|
321 |
|
memset(kp_stats, 0, size); |
322 |
|
|
323 |
|
if(sysctl(mib, 3, kp_stats, &size, NULL, 0) < 0) { |
324 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
324 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, |
325 |
> |
"CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
326 |
|
free(kp_stats); |
327 |
|
return NULL; |
328 |
|
} |
414 |
|
return NULL; |
415 |
|
} |
416 |
|
p = proctitle; |
417 |
+ |
#ifdef OPENBSD |
418 |
+ |
/* On OpenBSD, this value has the argv pointers (which |
419 |
+ |
* are terminated by a NULL) at the front, so we have |
420 |
+ |
* to skip over them to get to the strings. */ |
421 |
+ |
while (*(char ***)p != NULL) { |
422 |
+ |
p += sizeof(char **); |
423 |
+ |
} |
424 |
+ |
p += sizeof(char **); |
425 |
+ |
#endif |
426 |
|
proc_state_ptr->proctitle[0] = '\0'; |
427 |
|
do { |
428 |
|
sg_strlcat(proc_state_ptr->proctitle, p, size+1); |
548 |
|
mib[4] = 0; |
549 |
|
|
550 |
|
if(sysctl(mib, 5, NULL, &size, NULL, 0) < 0) { |
551 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.0"); |
551 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.0"); |
552 |
|
return NULL; |
553 |
|
} |
554 |
|
|
561 |
|
} |
562 |
|
|
563 |
|
if(sysctl(mib, 5, kl_stats, &size, NULL, 0) < 0) { |
564 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.buffersize"); |
564 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.buffersize"); |
565 |
|
return NULL; |
566 |
|
} |
567 |
|
} |
603 |
|
proc_state_ptr->state = SG_PROCESS_STATE_UNKNOWN; |
604 |
|
break; |
605 |
|
} |
606 |
+ |
|
607 |
+ |
free(kl_stats); |
608 |
|
#else |
609 |
|
#ifdef FREEBSD5 |
610 |
|
switch (kp_stats[i].ki_stat) { |