summaryrefslogtreecommitdiffstats
path: root/plugins/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/utils.c')
-rw-r--r--plugins/utils.c243
1 files changed, 147 insertions, 96 deletions
diff --git a/plugins/utils.c b/plugins/utils.c
index 09649429..34335c89 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -89,41 +89,46 @@ bool is_numeric(char *number) {
89 char tmp[1]; 89 char tmp[1];
90 float x; 90 float x;
91 91
92 if (!number) 92 if (!number) {
93 return false; 93 return false;
94 else if (sscanf(number, "%f%c", &x, tmp) == 1) 94 } else if (sscanf(number, "%f%c", &x, tmp) == 1) {
95 return true; 95 return true;
96 else 96 } else {
97 return false; 97 return false;
98 }
98} 99}
99 100
100bool is_positive(char *number) { 101bool is_positive(char *number) {
101 if (is_numeric(number) && atof(number) > 0.0) 102 if (is_numeric(number) && atof(number) > 0.0) {
102 return true; 103 return true;
103 else 104 } else {
104 return false; 105 return false;
106 }
105} 107}
106 108
107bool is_negative(char *number) { 109bool is_negative(char *number) {
108 if (is_numeric(number) && atof(number) < 0.0) 110 if (is_numeric(number) && atof(number) < 0.0) {
109 return true; 111 return true;
110 else 112 } else {
111 return false; 113 return false;
114 }
112} 115}
113 116
114bool is_nonnegative(char *number) { 117bool is_nonnegative(char *number) {
115 if (is_numeric(number) && atof(number) >= 0.0) 118 if (is_numeric(number) && atof(number) >= 0.0) {
116 return true; 119 return true;
117 else 120 } else {
118 return false; 121 return false;
122 }
119} 123}
120 124
121bool is_percentage(char *number) { 125bool is_percentage(char *number) {
122 int x; 126 int x;
123 if (is_numeric(number) && (x = atof(number)) >= 0 && x <= 100) 127 if (is_numeric(number) && (x = atof(number)) >= 0 && x <= 100) {
124 return true; 128 return true;
125 else 129 } else {
126 return false; 130 return false;
131 }
127} 132}
128 133
129bool is_percentage_expression(const char str[]) { 134bool is_percentage_expression(const char str[]) {
@@ -156,36 +161,41 @@ bool is_percentage_expression(const char str[]) {
156bool is_integer(char *number) { 161bool is_integer(char *number) {
157 long int n; 162 long int n;
158 163
159 if (!number || (strspn(number, "-0123456789 ") != strlen(number))) 164 if (!number || (strspn(number, "-0123456789 ") != strlen(number))) {
160 return false; 165 return false;
166 }
161 167
162 n = strtol(number, NULL, 10); 168 n = strtol(number, NULL, 10);
163 169
164 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX) 170 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX) {
165 return true; 171 return true;
166 else 172 } else {
167 return false; 173 return false;
174 }
168} 175}
169 176
170bool is_intpos(char *number) { 177bool is_intpos(char *number) {
171 if (is_integer(number) && atoi(number) > 0) 178 if (is_integer(number) && atoi(number) > 0) {
172 return true; 179 return true;
173 else 180 } else {
174 return false; 181 return false;
182 }
175} 183}
176 184
177bool is_intneg(char *number) { 185bool is_intneg(char *number) {
178 if (is_integer(number) && atoi(number) < 0) 186 if (is_integer(number) && atoi(number) < 0) {
179 return true; 187 return true;
180 else 188 } else {
181 return false; 189 return false;
190 }
182} 191}
183 192
184bool is_intnonneg(char *number) { 193bool is_intnonneg(char *number) {
185 if (is_integer(number) && atoi(number) >= 0) 194 if (is_integer(number) && atoi(number) >= 0) {
186 return true; 195 return true;
187 else 196 } else {
188 return false; 197 return false;
198 }
189} 199}
190 200
191/* 201/*
@@ -247,19 +257,21 @@ bool is_uint64(char *number, uint64_t *target) {
247 257
248bool is_intpercent(char *number) { 258bool is_intpercent(char *number) {
249 int i; 259 int i;
250 if (is_integer(number) && (i = atoi(number)) >= 0 && i <= 100) 260 if (is_integer(number) && (i = atoi(number)) >= 0 && i <= 100) {
251 return true; 261 return true;
252 else 262 } else {
253 return false; 263 return false;
264 }
254} 265}
255 266
256bool is_option(char *str) { 267bool is_option(char *str) {
257 if (!str) 268 if (!str) {
258 return false; 269 return false;
259 else if (strspn(str, "-") == 1 || strspn(str, "-") == 2) 270 } else if (strspn(str, "-") == 1 || strspn(str, "-") == 2) {
260 return true; 271 return true;
261 else 272 } else {
262 return false; 273 return false;
274 }
263} 275}
264 276
265#ifdef NEED_GETTIMEOFDAY 277#ifdef NEED_GETTIMEOFDAY
@@ -288,10 +300,11 @@ void strip(char *buffer) {
288 300
289 for (x = strlen(buffer); x >= 1; x--) { 301 for (x = strlen(buffer); x >= 1; x--) {
290 i = x - 1; 302 i = x - 1;
291 if (buffer[i] == ' ' || buffer[i] == '\r' || buffer[i] == '\n' || buffer[i] == '\t') 303 if (buffer[i] == ' ' || buffer[i] == '\r' || buffer[i] == '\n' || buffer[i] == '\t') {
292 buffer[i] = '\0'; 304 buffer[i] = '\0';
293 else 305 } else {
294 break; 306 break;
307 }
295 } 308 }
296 return; 309 return;
297} 310}
@@ -309,8 +322,9 @@ void strip(char *buffer) {
309 *****************************************************************************/ 322 *****************************************************************************/
310 323
311char *strscpy(char *dest, const char *src) { 324char *strscpy(char *dest, const char *src) {
312 if (src == NULL) 325 if (src == NULL) {
313 return NULL; 326 return NULL;
327 }
314 328
315 xasprintf(&dest, "%s", src); 329 xasprintf(&dest, "%s", src);
316 330
@@ -369,17 +383,21 @@ char *strscpy(char *dest, const char *src) {
369 383
370char *strnl(char *str) { 384char *strnl(char *str) {
371 size_t len; 385 size_t len;
372 if (str == NULL) 386 if (str == NULL) {
373 return NULL; 387 return NULL;
388 }
374 str = strpbrk(str, "\r\n"); 389 str = strpbrk(str, "\r\n");
375 if (str == NULL) 390 if (str == NULL) {
376 return NULL; 391 return NULL;
392 }
377 len = strspn(str, "\r\n"); 393 len = strspn(str, "\r\n");
378 if (str[len] == '\0') 394 if (str[len] == '\0') {
379 return NULL; 395 return NULL;
396 }
380 str += len; 397 str += len;
381 if (strlen(str) == 0) 398 if (strlen(str) == 0) {
382 return NULL; 399 return NULL;
400 }
383 return str; 401 return str;
384} 402}
385 403
@@ -402,15 +420,18 @@ char *strnl(char *str) {
402char *strpcpy(char *dest, const char *src, const char *str) { 420char *strpcpy(char *dest, const char *src, const char *str) {
403 size_t len; 421 size_t len;
404 422
405 if (src) 423 if (src) {
406 len = strcspn(src, str); 424 len = strcspn(src, str);
407 else 425 } else {
408 return NULL; 426 return NULL;
427 }
409 428
410 if (dest == NULL || strlen(dest) < len) 429 if (dest == NULL || strlen(dest) < len) {
411 dest = realloc(dest, len + 1); 430 dest = realloc(dest, len + 1);
412 if (dest == NULL) 431 }
432 if (dest == NULL) {
413 die(STATE_UNKNOWN, _("failed realloc in strpcpy\n")); 433 die(STATE_UNKNOWN, _("failed realloc in strpcpy\n"));
434 }
414 435
415 strncpy(dest, src, len); 436 strncpy(dest, src, len);
416 dest[len] = '\0'; 437 dest[len] = '\0';
@@ -434,10 +455,11 @@ char *strpcpy(char *dest, const char *src, const char *str) {
434char *strpcat(char *dest, const char *src, const char *str) { 455char *strpcat(char *dest, const char *src, const char *str) {
435 size_t len, l2; 456 size_t len, l2;
436 457
437 if (dest) 458 if (dest) {
438 len = strlen(dest); 459 len = strlen(dest);
439 else 460 } else {
440 len = 0; 461 len = 0;
462 }
441 463
442 if (src) { 464 if (src) {
443 l2 = strcspn(src, str); 465 l2 = strcspn(src, str);
@@ -446,8 +468,9 @@ char *strpcat(char *dest, const char *src, const char *str) {
446 } 468 }
447 469
448 dest = realloc(dest, len + l2 + 1); 470 dest = realloc(dest, len + l2 + 1);
449 if (dest == NULL) 471 if (dest == NULL) {
450 die(STATE_UNKNOWN, _("failed malloc in strscat\n")); 472 die(STATE_UNKNOWN, _("failed malloc in strscat\n"));
473 }
451 474
452 strncpy(dest + len, src, l2); 475 strncpy(dest + len, src, l2);
453 dest[len + l2] = '\0'; 476 dest[len + l2] = '\0';
@@ -463,8 +486,9 @@ char *strpcat(char *dest, const char *src, const char *str) {
463 486
464int xvasprintf(char **strp, const char *fmt, va_list ap) { 487int xvasprintf(char **strp, const char *fmt, va_list ap) {
465 int result = vasprintf(strp, fmt, ap); 488 int result = vasprintf(strp, fmt, ap);
466 if (result == -1 || *strp == NULL) 489 if (result == -1 || *strp == NULL) {
467 die(STATE_UNKNOWN, _("failed malloc in xvasprintf\n")); 490 die(STATE_UNKNOWN, _("failed malloc in xvasprintf\n"));
491 }
468 return result; 492 return result;
469} 493}
470 494
@@ -483,126 +507,145 @@ int xasprintf(char **strp, const char *fmt, ...) {
483 * 507 *
484 ******************************************************************************/ 508 ******************************************************************************/
485 509
486char *perfdata(const char *label, long int val, const char *uom, int warnp, long int warn, int critp, long int crit, int minp, 510char *perfdata(const char *label, long int val, const char *uom, bool warnp, long int warn, bool critp, long int crit, bool minp,
487 long int minv, int maxp, long int maxv) { 511 long int minv, bool maxp, long int maxv) {
488 char *data = NULL; 512 char *data = NULL;
489 513
490 if (strpbrk(label, "'= ")) 514 if (strpbrk(label, "'= ")) {
491 xasprintf(&data, "'%s'=%ld%s;", label, val, uom); 515 xasprintf(&data, "'%s'=%ld%s;", label, val, uom);
492 else 516 } else {
493 xasprintf(&data, "%s=%ld%s;", label, val, uom); 517 xasprintf(&data, "%s=%ld%s;", label, val, uom);
518 }
494 519
495 if (warnp) 520 if (warnp) {
496 xasprintf(&data, "%s%ld;", data, warn); 521 xasprintf(&data, "%s%ld;", data, warn);
497 else 522 } else {
498 xasprintf(&data, "%s;", data); 523 xasprintf(&data, "%s;", data);
524 }
499 525
500 if (critp) 526 if (critp) {
501 xasprintf(&data, "%s%ld;", data, crit); 527 xasprintf(&data, "%s%ld;", data, crit);
502 else 528 } else {
503 xasprintf(&data, "%s;", data); 529 xasprintf(&data, "%s;", data);
530 }
504 531
505 if (minp) 532 if (minp) {
506 xasprintf(&data, "%s%ld;", data, minv); 533 xasprintf(&data, "%s%ld;", data, minv);
507 else 534 } else {
508 xasprintf(&data, "%s;", data); 535 xasprintf(&data, "%s;", data);
536 }
509 537
510 if (maxp) 538 if (maxp) {
511 xasprintf(&data, "%s%ld", data, maxv); 539 xasprintf(&data, "%s%ld", data, maxv);
540 }
512 541
513 return data; 542 return data;
514} 543}
515 544
516char *perfdata_uint64(const char *label, uint64_t val, const char *uom, int warnp, /* Warning present */ 545char *perfdata_uint64(const char *label, uint64_t val, const char *uom, bool warnp, /* Warning present */
517 uint64_t warn, int critp, /* Critical present */ 546 uint64_t warn, bool critp, /* Critical present */
518 uint64_t crit, int minp, /* Minimum present */ 547 uint64_t crit, bool minp, /* Minimum present */
519 uint64_t minv, int maxp, /* Maximum present */ 548 uint64_t minv, bool maxp, /* Maximum present */
520 uint64_t maxv) { 549 uint64_t maxv) {
521 char *data = NULL; 550 char *data = NULL;
522 551
523 if (strpbrk(label, "'= ")) 552 if (strpbrk(label, "'= ")) {
524 xasprintf(&data, "'%s'=%" PRIu64 "%s;", label, val, uom); 553 xasprintf(&data, "'%s'=%" PRIu64 "%s;", label, val, uom);
525 else 554 } else {
526 xasprintf(&data, "%s=%" PRIu64 "%s;", label, val, uom); 555 xasprintf(&data, "%s=%" PRIu64 "%s;", label, val, uom);
556 }
527 557
528 if (warnp) 558 if (warnp) {
529 xasprintf(&data, "%s%" PRIu64 ";", data, warn); 559 xasprintf(&data, "%s%" PRIu64 ";", data, warn);
530 else 560 } else {
531 xasprintf(&data, "%s;", data); 561 xasprintf(&data, "%s;", data);
562 }
532 563
533 if (critp) 564 if (critp) {
534 xasprintf(&data, "%s%" PRIu64 ";", data, crit); 565 xasprintf(&data, "%s%" PRIu64 ";", data, crit);
535 else 566 } else {
536 xasprintf(&data, "%s;", data); 567 xasprintf(&data, "%s;", data);
568 }
537 569
538 if (minp) 570 if (minp) {
539 xasprintf(&data, "%s%" PRIu64 ";", data, minv); 571 xasprintf(&data, "%s%" PRIu64 ";", data, minv);
540 else 572 } else {
541 xasprintf(&data, "%s;", data); 573 xasprintf(&data, "%s;", data);
574 }
542 575
543 if (maxp) 576 if (maxp) {
544 xasprintf(&data, "%s%" PRIu64, data, maxv); 577 xasprintf(&data, "%s%" PRIu64, data, maxv);
578 }
545 579
546 return data; 580 return data;
547} 581}
548 582
549char *perfdata_int64(const char *label, int64_t val, const char *uom, int warnp, /* Warning present */ 583char *perfdata_int64(const char *label, int64_t val, const char *uom, bool warnp, /* Warning present */
550 int64_t warn, int critp, /* Critical present */ 584 int64_t warn, bool critp, /* Critical present */
551 int64_t crit, int minp, /* Minimum present */ 585 int64_t crit, bool minp, /* Minimum present */
552 int64_t minv, int maxp, /* Maximum present */ 586 int64_t minv, bool maxp, /* Maximum present */
553 int64_t maxv) { 587 int64_t maxv) {
554 char *data = NULL; 588 char *data = NULL;
555 589
556 if (strpbrk(label, "'= ")) 590 if (strpbrk(label, "'= ")) {
557 xasprintf(&data, "'%s'=%" PRId64 "%s;", label, val, uom); 591 xasprintf(&data, "'%s'=%" PRId64 "%s;", label, val, uom);
558 else 592 } else {
559 xasprintf(&data, "%s=%" PRId64 "%s;", label, val, uom); 593 xasprintf(&data, "%s=%" PRId64 "%s;", label, val, uom);
594 }
560 595
561 if (warnp) 596 if (warnp) {
562 xasprintf(&data, "%s%" PRId64 ";", data, warn); 597 xasprintf(&data, "%s%" PRId64 ";", data, warn);
563 else 598 } else {
564 xasprintf(&data, "%s;", data); 599 xasprintf(&data, "%s;", data);
600 }
565 601
566 if (critp) 602 if (critp) {
567 xasprintf(&data, "%s%" PRId64 ";", data, crit); 603 xasprintf(&data, "%s%" PRId64 ";", data, crit);
568 else 604 } else {
569 xasprintf(&data, "%s;", data); 605 xasprintf(&data, "%s;", data);
606 }
570 607
571 if (minp) 608 if (minp) {
572 xasprintf(&data, "%s%" PRId64 ";", data, minv); 609 xasprintf(&data, "%s%" PRId64 ";", data, minv);
573 else 610 } else {
574 xasprintf(&data, "%s;", data); 611 xasprintf(&data, "%s;", data);
612 }
575 613
576 if (maxp) 614 if (maxp) {
577 xasprintf(&data, "%s%" PRId64, data, maxv); 615 xasprintf(&data, "%s%" PRId64, data, maxv);
616 }
578 617
579 return data; 618 return data;
580} 619}
581 620
582char *fperfdata(const char *label, double val, const char *uom, int warnp, double warn, int critp, double crit, int minp, double minv, 621char *fperfdata(const char *label, double val, const char *uom, bool warnp, double warn, bool critp, double crit, bool minp, double minv,
583 int maxp, double maxv) { 622 bool maxp, double maxv) {
584 char *data = NULL; 623 char *data = NULL;
585 624
586 if (strpbrk(label, "'= ")) 625 if (strpbrk(label, "'= ")) {
587 xasprintf(&data, "'%s'=", label); 626 xasprintf(&data, "'%s'=", label);
588 else 627 } else {
589 xasprintf(&data, "%s=", label); 628 xasprintf(&data, "%s=", label);
629 }
590 630
591 xasprintf(&data, "%s%f", data, val); 631 xasprintf(&data, "%s%f", data, val);
592 xasprintf(&data, "%s%s;", data, uom); 632 xasprintf(&data, "%s%s;", data, uom);
593 633
594 if (warnp) 634 if (warnp) {
595 xasprintf(&data, "%s%f", data, warn); 635 xasprintf(&data, "%s%f", data, warn);
636 }
596 637
597 xasprintf(&data, "%s;", data); 638 xasprintf(&data, "%s;", data);
598 639
599 if (critp) 640 if (critp) {
600 xasprintf(&data, "%s%f", data, crit); 641 xasprintf(&data, "%s%f", data, crit);
642 }
601 643
602 xasprintf(&data, "%s;", data); 644 xasprintf(&data, "%s;", data);
603 645
604 if (minp) 646 if (minp) {
605 xasprintf(&data, "%s%f", data, minv); 647 xasprintf(&data, "%s%f", data, minv);
648 }
606 649
607 if (maxp) { 650 if (maxp) {
608 xasprintf(&data, "%s;", data); 651 xasprintf(&data, "%s;", data);
@@ -612,28 +655,32 @@ char *fperfdata(const char *label, double val, const char *uom, int warnp, doubl
612 return data; 655 return data;
613} 656}
614 657
615char *sperfdata(const char *label, double val, const char *uom, char *warn, char *crit, int minp, double minv, int maxp, double maxv) { 658char *sperfdata(const char *label, double val, const char *uom, char *warn, char *crit, bool minp, double minv, bool maxp, double maxv) {
616 char *data = NULL; 659 char *data = NULL;
617 if (strpbrk(label, "'= ")) 660 if (strpbrk(label, "'= ")) {
618 xasprintf(&data, "'%s'=", label); 661 xasprintf(&data, "'%s'=", label);
619 else 662 } else {
620 xasprintf(&data, "%s=", label); 663 xasprintf(&data, "%s=", label);
664 }
621 665
622 xasprintf(&data, "%s%f", data, val); 666 xasprintf(&data, "%s%f", data, val);
623 xasprintf(&data, "%s%s;", data, uom); 667 xasprintf(&data, "%s%s;", data, uom);
624 668
625 if (warn != NULL) 669 if (warn != NULL) {
626 xasprintf(&data, "%s%s", data, warn); 670 xasprintf(&data, "%s%s", data, warn);
671 }
627 672
628 xasprintf(&data, "%s;", data); 673 xasprintf(&data, "%s;", data);
629 674
630 if (crit != NULL) 675 if (crit != NULL) {
631 xasprintf(&data, "%s%s", data, crit); 676 xasprintf(&data, "%s%s", data, crit);
677 }
632 678
633 xasprintf(&data, "%s;", data); 679 xasprintf(&data, "%s;", data);
634 680
635 if (minp) 681 if (minp) {
636 xasprintf(&data, "%s%f", data, minv); 682 xasprintf(&data, "%s%f", data, minv);
683 }
637 684
638 if (maxp) { 685 if (maxp) {
639 xasprintf(&data, "%s;", data); 686 xasprintf(&data, "%s;", data);
@@ -643,28 +690,32 @@ char *sperfdata(const char *label, double val, const char *uom, char *warn, char
643 return data; 690 return data;
644} 691}
645 692
646char *sperfdata_int(const char *label, int val, const char *uom, char *warn, char *crit, int minp, int minv, int maxp, int maxv) { 693char *sperfdata_int(const char *label, int val, const char *uom, char *warn, char *crit, bool minp, int minv, bool maxp, int maxv) {
647 char *data = NULL; 694 char *data = NULL;
648 if (strpbrk(label, "'= ")) 695 if (strpbrk(label, "'= ")) {
649 xasprintf(&data, "'%s'=", label); 696 xasprintf(&data, "'%s'=", label);
650 else 697 } else {
651 xasprintf(&data, "%s=", label); 698 xasprintf(&data, "%s=", label);
699 }
652 700
653 xasprintf(&data, "%s%d", data, val); 701 xasprintf(&data, "%s%d", data, val);
654 xasprintf(&data, "%s%s;", data, uom); 702 xasprintf(&data, "%s%s;", data, uom);
655 703
656 if (warn != NULL) 704 if (warn != NULL) {
657 xasprintf(&data, "%s%s", data, warn); 705 xasprintf(&data, "%s%s", data, warn);
706 }
658 707
659 xasprintf(&data, "%s;", data); 708 xasprintf(&data, "%s;", data);
660 709
661 if (crit != NULL) 710 if (crit != NULL) {
662 xasprintf(&data, "%s%s", data, crit); 711 xasprintf(&data, "%s%s", data, crit);
712 }
663 713
664 xasprintf(&data, "%s;", data); 714 xasprintf(&data, "%s;", data);
665 715
666 if (minp) 716 if (minp) {
667 xasprintf(&data, "%s%d", data, minv); 717 xasprintf(&data, "%s%d", data, minv);
718 }
668 719
669 if (maxp) { 720 if (maxp) {
670 xasprintf(&data, "%s;", data); 721 xasprintf(&data, "%s;", data);