Return-Path: Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 46729 invoked by uid 500); 4 Sep 2003 13:32:36 -0000 Received: (qmail 46721 invoked from network); 4 Sep 2003 13:32:36 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 4 Sep 2003 13:32:36 -0000 Received: (qmail 72989 invoked by uid 1526); 4 Sep 2003 12:32:31 -0000 Date: 4 Sep 2003 12:32:31 -0000 Message-ID: <20030904123231.72988.qmail@minotaur.apache.org> From: mturk@apache.org To: jakarta-commons-sandbox-cvs@apache.org Subject: cvs commit: jakarta-commons-sandbox/daemon/src/native/nt/procrun procgui.c X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N mturk 2003/09/04 05:32:31 Modified: daemon/src/native/nt/procrun procgui.c Log: Add the 4000 lines limit to ListView (could be defined at compile time). Fix the log parsing omitting scanf. Revision Changes Path 1.26 +37 -10 jakarta-commons-sandbox/daemon/src/native/nt/procrun/procgui.c Index: procgui.c =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/nt/procrun/procgui.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- procgui.c 3 Sep 2003 03:45:09 -0000 1.25 +++ procgui.c 4 Sep 2003 12:32:31 -0000 1.26 @@ -106,6 +106,8 @@ #define PSH_NOCONTEXTHELP 0x02000000 #endif +#define MAX_LIST_ITEMS 4000 /* maximum items in ListView */ + extern int g_proc_mode; /* The main envronment for services */ extern procrun_t *g_env; @@ -175,8 +177,10 @@ Shell_NotifyIcon(message, &nid); } -static char ac_lv_stat[32] = {0}; -static char ac_lv_class[1024] = {0}; +static char *ac_lv_stat = NULL; +static char ac_lv_clbuf[1024] = {0}; +static char *ac_lv_class = NULL; +static char *ac_lv_clmsg = NULL; static int ac_lv_iicon = 0; static void ac_parse_list_string(const char *str) @@ -186,12 +190,26 @@ int off = 0; if (isdigit(*str)) { - char t[32]; - sscanf(str, "%s %s %s", ac_lv_stat, t, ac_lv_class); - strcat(ac_lv_stat, " "); - strcat(ac_lv_stat, t); - strcpy(ac_lv_class, str + strlen(ac_lv_stat) + strlen(t) + 2); - str += strlen(ac_lv_stat) + strlen(t) + strlen(ac_lv_class) + 3; + char *p; + + strncpy(ac_lv_clbuf, str, 1023); + ac_lv_stat = p = &ac_lv_clbuf[0]; + + while (*p && !isspace(*p)) + ++p; + ++p; + while (*p && !isspace(*p)) + ++p; + *(p++) = 0; + while (*p && isspace(*p)) + ++p; + ac_lv_class = p; + + while (*p && !isspace(*p)) + ++p; + *(p++) = 0; + ac_lv_clmsg = p; + } else { if (STRN_COMPARE(str, "INFO:")) { @@ -210,6 +228,11 @@ ac_lv_iicon = 2; off = STRN_SIZE("SEVERE:") + 1; } + ac_lv_clmsg = (char *)str + off; + + /* skip leading spaces */ + while (*ac_lv_clmsg && isspace(*ac_lv_clmsg)) + ++ac_lv_clmsg; } memset(&lvi, 0, sizeof(LV_ITEM)); lvi.mask = LVIF_IMAGE | LVIF_TEXT; @@ -221,7 +244,7 @@ if (row == -1) return; ListView_SetItemText(ac_list_hwnd, row, 1, ac_lv_class); - ListView_SetItemText(ac_list_hwnd, row, 2, (char *)(str + off)); + ListView_SetItemText(ac_list_hwnd, row, 2, ac_lv_clmsg); ListView_EnsureVisible(ac_list_hwnd, ListView_GetItemCount(ac_list_hwnd) - 1, FALSE); @@ -233,6 +256,7 @@ { static int nqueue = 0; static int nlen = 0, olen = 0; + static int litems = 0; int i; if (str) { @@ -264,8 +288,11 @@ return; if (ac_use_lview) { - for (i = 0; i < nqueue; i++) + for (i = 0; i < nqueue; i++) { ac_parse_list_string(ac_stdout_lines[i]); + if (litems++ > MAX_LIST_ITEMS) + ListView_DeleteItem(ac_list_hwnd, 0); + } } else { for (i = 0; i < nqueue; i++)