diff options
author | Ton Voon <tonvoon@users.sourceforge.net> | 2008-06-17 14:19:17 (GMT) |
---|---|---|
committer | Ton Voon <tonvoon@users.sourceforge.net> | 2008-06-17 14:19:17 (GMT) |
commit | 2968a166e2524c5c1c557a12ae8dd6eaf698d7ea (patch) | |
tree | b1a1f9f71a8a4a69d146dd8a5a00a99c18d89270 | |
parent | d8577e19942b4885ac642513540fc1791a0fa38b (diff) | |
download | monitoring-plugins-2968a166e2524c5c1c557a12ae8dd6eaf698d7ea.tar.gz |
Fixed possible coredump. Removed one level of subroutines (Duncan Ferguson)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@2012 f882894a-f735-0410-b71e-b25c423dba1c
-rw-r--r-- | plugins-root/pst3.c | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/plugins-root/pst3.c b/plugins-root/pst3.c index ee1d180..641a9b8 100644 --- a/plugins-root/pst3.c +++ b/plugins-root/pst3.c | |||
@@ -81,9 +81,8 @@ static char ** myArgv; | |||
81 | * Prototypes | 81 | * Prototypes |
82 | */ | 82 | */ |
83 | 83 | ||
84 | static int output_info(struct proc *proc_kvm, psinfo_t procinfo,char **proc_argv); | 84 | static void output_info(struct proc *proc_kvm,char **proc_argv); |
85 | static psinfo_t get_procinfo(struct proc *proc); | 85 | static void HandleProc(struct proc *proc); |
86 | static int HandleProc(struct proc *proc); | ||
87 | 86 | ||
88 | /*----------------------------------------------------------------------------*/ | 87 | /*----------------------------------------------------------------------------*/ |
89 | 88 | ||
@@ -147,12 +146,11 @@ int main (int argc, char **argv) | |||
147 | 146 | ||
148 | /*----------------------------------------------------------------------------*/ | 147 | /*----------------------------------------------------------------------------*/ |
149 | 148 | ||
150 | static int HandleProc(struct proc *proc) | 149 | static void HandleProc(struct proc *proc) |
151 | { | 150 | { |
152 | struct pid pid; | 151 | struct pid pid; |
153 | struct user *user; | 152 | struct user *user; |
154 | psinfo_t procinfo; | 153 | char **proc_argv = NULL; |
155 | char **proc_argv = 0; | ||
156 | 154 | ||
157 | if(kvm_kread(kd, (unsigned long) proc->p_pidp, (char *) &pid, sizeof pid) == -1) { | 155 | if(kvm_kread(kd, (unsigned long) proc->p_pidp, (char *) &pid, sizeof pid) == -1) { |
158 | perror("kvm_read error"); | 156 | perror("kvm_read error"); |
@@ -162,38 +160,36 @@ static int HandleProc(struct proc *proc) | |||
162 | user = kvm_getu(kd, proc); | 160 | user = kvm_getu(kd, proc); |
163 | 161 | ||
164 | if(kvm_getcmd(kd, proc, user, &proc_argv, NULL) == -1) { | 162 | if(kvm_getcmd(kd, proc, user, &proc_argv, NULL) == -1) { |
165 | return FAIL; | 163 | return; |
164 | } | ||
165 | |||
166 | if(proc_argv == NULL) { | ||
167 | return; | ||
166 | } | 168 | } |
167 | 169 | ||
168 | procinfo = get_procinfo(proc); | 170 | output_info(proc, proc_argv); |
169 | return output_info(proc, procinfo, proc_argv); | 171 | free(proc_argv); |
170 | } | 172 | } |
171 | 173 | ||
172 | static psinfo_t get_procinfo(struct proc *proc) | 174 | static void output_info(struct proc *proc_kvm, char **proc_argv) |
173 | { | 175 | { |
174 | char procpath[MAX_PATH]; | 176 | char procpath[MAX_PATH]; |
175 | psinfo_t procinfo; | 177 | psinfo_t procinfo; |
176 | int fd, len; | 178 | int fd, len; |
179 | char *procname; | ||
180 | int i; | ||
177 | 181 | ||
178 | sprintf(procpath, "/proc/%d/psinfo", proc->p_pidp->pid_id); | 182 | sprintf(procpath, "/proc/%d/psinfo", proc_kvm->p_pidp->pid_id); |
179 | 183 | ||
180 | if ((fd = open(procpath, O_RDONLY)) >= 0) | 184 | if ((fd = open(procpath, O_RDONLY)) >= 0) |
181 | { | 185 | { |
182 | if ((len = read(fd, &procinfo, sizeof(procinfo))) != sizeof(procinfo)) | 186 | if ((len = read(fd, &procinfo, sizeof(procinfo))) != sizeof(procinfo)) |
183 | { | 187 | { |
184 | fprintf(stderr,"%s: Read error of psingo structure (%d)\n", procpath, len); | 188 | fprintf(stderr,"%s: Read error of psinfo structure (%d)\n", procpath, len); |
185 | exit(2); | 189 | exit(2); |
186 | } | 190 | } |
187 | close(fd); | 191 | close(fd); |
188 | } | 192 | } |
189 | return procinfo; | ||
190 | |||
191 | } | ||
192 | |||
193 | static int output_info(struct proc *proc_kvm, psinfo_t procinfo, char **proc_argv) | ||
194 | { | ||
195 | char *procname; | ||
196 | int i; | ||
197 | 193 | ||
198 | if((procname = strrchr(proc_argv[0], '/')) != NULL) | 194 | if((procname = strrchr(proc_argv[0], '/')) != NULL) |
199 | procname++; | 195 | procname++; |
@@ -216,7 +212,5 @@ static int output_info(struct proc *proc_kvm, psinfo_t procinfo, char **proc_arg | |||
216 | } | 212 | } |
217 | 213 | ||
218 | printf("\n"); | 214 | printf("\n"); |
219 | |||
220 | return OK; | ||
221 | } | 215 | } |
222 | 216 | ||