*/
/* Maximum number of fields that can be displayed */
-#define MAX_FIELDS 64
+#define MAX_FIELDS 128
/* Maximum number of header lines */
#define HDR_LINES 10
fps->params[j].lf->file->interval.tv_sec =
interval;
if (!fps->params[j].print.width)
- fps->params[j].print.width =
+ fps->params[j].print.width =
FIELD_WIDTH_DEFAULT;
- j++;
+
+ if (++j >= MAX_FIELDS - 1) {
+ fprintf(stderr,
+ "WARN: MAX_FIELDS (%d) reached,"
+ " truncating number of keys\n",
+ MAX_FIELDS);
+ goto full;
+ }
}
}
+ full:
fps->num = j;
return 1;
}
}
return 0;
}
-
+
int main(int argc, char **argv)
{
static struct field_params fp;
int num_req_files = 0;
char *req_files[LNSTAT_MAX_FILES];
-
+
/* backwards compatibility mode for old tools */
basename = strrchr(argv[0], '/');
- if (basename)
+ if (basename)
basename += 1; /* name after slash */
else
basename = argv[0]; /* no slash */
num_req_files = 1;
}
- while ((c = getopt_long(argc, argv,"Vc:df:h?i:k:s:w:",
+ while ((c = getopt_long(argc, argv,"Vc:df:h?i:k:s:w:",
opts, NULL)) != -1) {
int i, len = 0;
char *tmp, *tok;
req_files[num_req_files++] = strdup(optarg);
break;
case '?':
- case 'h':
+ case 'h':
usage(argv[0], 0);
break;
case 'i':
for (tok = strtok(tmp, ",");
tok;
tok = strtok(NULL, ",")) {
- if (fp.num >= MAX_FIELDS)
+ if (fp.num >= MAX_FIELDS) {
+ fprintf(stderr,
+ "WARN: too many keys"
+ " requested: (%d max)\n",
+ MAX_FIELDS);
break;
+ }
fp.params[fp.num++].name = tok;
}
break;
if (!map_field_params(lnstat_files, &fp, interval))
exit(1);
-
+
header = build_hdr_string(lnstat_files, &fp, 80);
if (!header)
exit(1);
- if (interval < 1 )
+ if (interval < 1 )
interval=1;
for (i = 0; i < count; i++) {
print_hdr(stdout, header);
lnstat_update(lnstat_files);
print_line(stdout, lnstat_files, &fp);
+ fflush(stdout);
sleep(interval);
}
}