Another bug report
Daniel Klein
dk0w at andrew.cmu.edu
Tue Apr 7 17:36:42 EDT 2009
Umm... oops. Further testing of my patch found a bug. Here's the complete patch again, which no longer dumps core when you use %f
-Dan
RCS file: common/RCS/argus_util.c,v
retrieving revision 1.1
diff -c -r1.1 common/argus_util.c
*** common/argus_util.c 2009/04/07 02:27:30 1.1
--- common/argus_util.c 2009/04/07 21:33:22
***************
*** 15791,15808 ****
strncpy(timeFormatBuf, parser->RaTimeFormat, 128);
! while ((ptr = strtok(tstr, "%")) != NULL) {
! switch (*ptr) {
case 'f': {
! if (parser->pflag) {
while (isspace((int)buf[strlen(buf) - 1]))
buf[strlen(buf) - 1] = '\0';
! ptr = &buf[strlen(buf)];
! sprintf (ptr, "%06u", (int) tvp->tv_usec);
! ptr[parser->pflag] = '\0';
}
break;
}
case 'z': {
if (parser->ArgusPrintXml) {
char sbuf[16];
--- 16463,16494 ----
strncpy(timeFormatBuf, parser->RaTimeFormat, 128);
! for (ptr=tstr; *ptr; ptr++) {
! if (*ptr != '%') {
! buf[strlen(buf)] = *ptr;
! } else
! switch (*++ptr) {
case 'f': {
! if (parser->pflag) {
! char *p;
while (isspace((int)buf[strlen(buf) - 1]))
buf[strlen(buf) - 1] = '\0';
! p = &buf[strlen(buf)];
! sprintf (p, "%06u", (int) tvp->tv_usec);
! p[parser->pflag] = '\0';
}
break;
}
+ case '%': {
+ buf[strlen(buf)] = '%';
+ break;
+ }
+ case 'E': case 'O': {
+ char sbuf[8];
+ sprintf (sbuf, "%%%.2s", ptr++);
+ strftime (&buf[strlen(buf)], 64, sbuf, tm);
+ break;
+ }
case 'z': {
if (parser->ArgusPrintXml) {
char sbuf[16];
***************
*** 15822,15836 ****
sprintf(&buf[strlen(buf)], "%s", sbuf);
break;
}
}
default: {
char sbuf[8];
! sprintf (sbuf, "%%%s", ptr);
strftime (&buf[strlen(buf)], 64, sbuf, tm);
break;
}
}
- tstr = NULL;
}
if (tvp->tv_sec == 0) {
--- 16508,16522 ----
sprintf(&buf[strlen(buf)], "%s", sbuf);
break;
}
+ /* Fall through to default if %z and not parser->ArgusPrintXml */
}
default: {
char sbuf[8];
! sprintf (sbuf, "%%%c", *ptr);
strftime (&buf[strlen(buf)], 64, sbuf, tm);
break;
}
}
}
if (tvp->tv_sec == 0) {
More information about the argus
mailing list