From 6046198053788bb081177cef603181a9178bc78e Mon Sep 17 00:00:00 2001 From: Nikolas Garofil Date: Wed, 18 Nov 2009 17:13:20 +0100 Subject: [PATCH] Fix bug in $pid_nice, $pid_priority, $pid_time, $pid_time_kernelmode and $pid_time_usermode --- src/proc.c | 90 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/src/proc.c b/src/proc.c index 7f64cdca..50ee571b 100644 --- a/src/proc.c +++ b/src/proc.c @@ -213,14 +213,18 @@ void print_pid_nice(struct text_object *obj, char *p, int p_max_size) { int bytes_read; long int nice_value; - asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); - strcpy(obj->data.s, buf); - free(buf); - buf = readfile(obj->data.s, &bytes_read, 1); - if(buf != NULL) { - sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*d %*d %*d %ld", &nice_value); - snprintf(p, p_max_size, "%ld", nice_value); + if(*(obj->data.s) != 0) { + asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); + strcpy(obj->data.s, buf); free(buf); + buf = readfile(obj->data.s, &bytes_read, 1); + if(buf != NULL) { + sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*d %*d %*d %ld", &nice_value); + snprintf(p, p_max_size, "%ld", nice_value); + free(buf); + } + } else { + NORM_ERR("$pid_nice didn't receive a argument"); } } @@ -288,14 +292,18 @@ void print_pid_priority(struct text_object *obj, char *p, int p_max_size) { int bytes_read; long int priority; - asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); - strcpy(obj->data.s, buf); - free(buf); - buf = readfile(obj->data.s, &bytes_read, 1); - if(buf != NULL) { - sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*d %*d %ld", &priority); - snprintf(p, p_max_size, "%ld", priority); + if(*(obj->data.s) != 0) { + asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); + strcpy(obj->data.s, buf); free(buf); + buf = readfile(obj->data.s, &bytes_read, 1); + if(buf != NULL) { + sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*d %*d %ld", &priority); + snprintf(p, p_max_size, "%ld", priority); + free(buf); + } + } else { + NORM_ERR("$pid_priority didn't receive a argument"); } } @@ -472,14 +480,18 @@ void print_pid_time_kernelmode(struct text_object *obj, char *p, int p_max_size) int bytes_read; unsigned long int umtime; - asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); - strcpy(obj->data.s, buf); - free(buf); - buf = readfile(obj->data.s, &bytes_read, 1); - if(buf != NULL) { - sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu", &umtime); - snprintf(p, p_max_size, "%.2f", (float) umtime / 100); + if(*(obj->data.s) != 0) { + asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); + strcpy(obj->data.s, buf); free(buf); + buf = readfile(obj->data.s, &bytes_read, 1); + if(buf != NULL) { + sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu", &umtime); + snprintf(p, p_max_size, "%.2f", (float) umtime / 100); + free(buf); + } + } else { + NORM_ERR("$pid_time_kernelmode didn't receive a argument"); } } @@ -488,14 +500,18 @@ void print_pid_time_usermode(struct text_object *obj, char *p, int p_max_size) { int bytes_read; unsigned long int kmtime; - asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); - strcpy(obj->data.s, buf); - free(buf); - buf = readfile(obj->data.s, &bytes_read, 1); - if(buf != NULL) { - sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %lu", &kmtime); - snprintf(p, p_max_size, "%.2f", (float) kmtime / 100); + if(*(obj->data.s) != 0) { + asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); + strcpy(obj->data.s, buf); free(buf); + buf = readfile(obj->data.s, &bytes_read, 1); + if(buf != NULL) { + sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %lu", &kmtime); + snprintf(p, p_max_size, "%.2f", (float) kmtime / 100); + free(buf); + } + } else { + NORM_ERR("$pid_time_usermode didn't receive a argument"); } } @@ -504,14 +520,18 @@ void print_pid_time(struct text_object *obj, char *p, int p_max_size) { int bytes_read; unsigned long int umtime, kmtime; - asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); - strcpy(obj->data.s, buf); - free(buf); - buf = readfile(obj->data.s, &bytes_read, 1); - if(buf != NULL) { - sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu %lu", &umtime, &kmtime); - snprintf(p, p_max_size, "%.2f", (float) (umtime + kmtime) / 100); + if(*(obj->data.s) != 0) { + asprintf(&buf, PROCDIR "/%s/stat", obj->data.s); + strcpy(obj->data.s, buf); free(buf); + buf = readfile(obj->data.s, &bytes_read, 1); + if(buf != NULL) { + sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu %lu", &umtime, &kmtime); + snprintf(p, p_max_size, "%.2f", (float) (umtime + kmtime) / 100); + free(buf); + } + } else { + NORM_ERR("$pid_time didn't receive a argument"); } }