Package: apachetop Severity: normal Tags: patch Hello. The attached patch adds support for more than 50 files.
-- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable'), (50, 'experimental') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.13-mm1 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
diff -puriN apachetop-0.12.5/src/apachetop.cc apachetop-0.12.5-new/src/apachetop.cc --- apachetop-0.12.5/src/apachetop.cc 2005-10-12 17:03:04 +0200 +++ apachetop-0.12.5-new/src/apachetop.cc 2005-10-12 17:08:35 +0200 @@ -40,6 +40,7 @@ struct input *in; WINDOW *win; #if (POLLING_METHOD == USING_KQUEUE) +struct kevent *ev; int kq; #elif (POLLING_METHOD == USING_FAM) /* master fd for talking to FAM */ @@ -58,7 +59,7 @@ int main(int argc, char *argv[]) #if (POLLING_METHOD == USING_KQUEUE) /* we have and are using kqueue */ struct timespec stv; - struct kevent *ev, *evptr; + struct kevent *evptr; #elif (POLLING_METHOD == USING_FAM) /* we have and are using FAM */ int fam_fd; @@ -107,8 +108,7 @@ int main(int argc, char *argv[]) cf.hostfilter = new Filter(); /* }}} */ - /* support MAX_INPUT_FILES input files */ - in = (struct input *)calloc(MAX_INPUT_FILES, sizeof(struct input)); + in = NULL; #if (POLLING_METHOD == USING_KQUEUE) /* then create kqueue {{{ */ if ((kq = kqueue()) < 0) @@ -118,7 +118,7 @@ int main(int argc, char *argv[]) } /* space in ev for all inputs */ - ev = (struct kevent *)calloc(MAX_INPUT_FILES, sizeof(struct kevent)); + ev = NULL; /* }}} */ #elif (POLLING_METHOD == USING_FAM) /* open FAM connection */ if (FAMOpen(&fc)) @@ -312,7 +312,7 @@ int main(int argc, char *argv[]) } /* if we have any input files waiting to be opened, try to */ - for (x = 0 ; x < MAX_INPUT_FILES ; ++x) + for (x = 0 ; x < cf.input_count ; ++x) { /* for each entry in input .. */ curfile = &in[x]; @@ -347,7 +347,7 @@ int main(int argc, char *argv[]) #if (POLLING_METHOD == USING_KQUEUE) /* {{{ */ /* every 1/10th of a second */ stv.tv_sec = 0; stv.tv_nsec = 10000000; - x = kevent(kq, NULL, 0, ev, MAX_INPUT_FILES, &stv); + x = kevent(kq, NULL, 0, ev, cf.input_count, &stv); // if (x == 0) continue; /* timeout, nothing happened */ if (x < 0) break; /* error */ @@ -407,7 +407,7 @@ int main(int argc, char *argv[]) select(NULL, NULL, NULL, NULL, &tv); /* check every file */ - for (x = 0 ; x < MAX_INPUT_FILES ; ++x) + for (x = 0 ; x < cf.input_count ; ++x) { curfile = &in[x]; fd = curfile->fd; @@ -504,7 +504,7 @@ int main(int argc, char *argv[]) } /* while ((nl - buf) < buflen && nl) */ } /* for(evptr = ev ; evptr->filter ; evptr++) */ /* while (FAMPending(&fc) == 1 && FAMNextEvent(&fc, &fe)) */ - /* for (i = 0 ; i < MAX_INPUT_FILES ; ++i) */ + /* for (i = 0 ; i < cf.input_count ; ++i) */ /* check for keypresses */ if ((ch = wgetch(win)) != ERR) @@ -996,10 +996,16 @@ int new_file(char *filename, bool do_see if (input_element == -1) { - /* new open, make sure we have room in our arrays */ - if (cf.input_count == MAX_INPUT_FILES) + /* Realloc structure */ + in = (struct input *)realloc(in, (cf.input_count + 1) * sizeof(struct input)); +#if (POLLING_METHOD == USING_KQUEUE) + ev = (struct kevent *)realloc(ev, (cf.input_count + 1) * sizeof(struct kevent)); + if (!ev || !in) +#else + if (!in) +#endif { - DIE_N("Only 50 files are supported at the moment"); + DIE_N("Could not allocate memory"); } /* add it on at the end */ diff -puriN apachetop-0.12.5/src/apachetop.h apachetop-0.12.5-new/src/apachetop.h --- apachetop-0.12.5/src/apachetop.h 2005-10-12 17:03:04 +0200 +++ apachetop-0.12.5-new/src/apachetop.h 2005-10-12 17:03:49 +0200 @@ -261,8 +261,6 @@ struct gstat { #define COLS_RESERVED 25 #define LINES_RESERVED 7 -#define MAX_INPUT_FILES 50 - int recordstats(struct logbits l); int read_key(int ch);