summaryrefslogtreecommitdiffstats
path: root/plugins/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/utils.c')
-rw-r--r--plugins/utils.c291
1 files changed, 147 insertions, 144 deletions
diff --git a/plugins/utils.c b/plugins/utils.c
index 6d366e3d..34335c89 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -42,54 +42,6 @@ extern const char *progname;
42 42
43time_t start_time, end_time; 43time_t start_time, end_time;
44 44
45/* **************************************************************************
46 * max_state(STATE_x, STATE_y)
47 * compares STATE_x to STATE_y and returns result based on the following
48 * STATE_UNKNOWN < STATE_OK < STATE_WARNING < STATE_CRITICAL
49 *
50 * Note that numerically the above does not hold
51 ****************************************************************************/
52
53int max_state(int a, int b) {
54 if (a == STATE_CRITICAL || b == STATE_CRITICAL)
55 return STATE_CRITICAL;
56 else if (a == STATE_WARNING || b == STATE_WARNING)
57 return STATE_WARNING;
58 else if (a == STATE_OK || b == STATE_OK)
59 return STATE_OK;
60 else if (a == STATE_UNKNOWN || b == STATE_UNKNOWN)
61 return STATE_UNKNOWN;
62 else if (a == STATE_DEPENDENT || b == STATE_DEPENDENT)
63 return STATE_DEPENDENT;
64 else
65 return max(a, b);
66}
67
68/* **************************************************************************
69 * max_state_alt(STATE_x, STATE_y)
70 * compares STATE_x to STATE_y and returns result based on the following
71 * STATE_OK < STATE_DEPENDENT < STATE_UNKNOWN < STATE_WARNING < STATE_CRITICAL
72 *
73 * The main difference between max_state_alt and max_state it that it doesn't
74 * allow setting a default to UNKNOWN. It will instead prioritixe any valid
75 * non-OK state.
76 ****************************************************************************/
77
78int max_state_alt(int a, int b) {
79 if (a == STATE_CRITICAL || b == STATE_CRITICAL)
80 return STATE_CRITICAL;
81 else if (a == STATE_WARNING || b == STATE_WARNING)
82 return STATE_WARNING;
83 else if (a == STATE_UNKNOWN || b == STATE_UNKNOWN)
84 return STATE_UNKNOWN;
85 else if (a == STATE_DEPENDENT || b == STATE_DEPENDENT)
86 return STATE_DEPENDENT;
87 else if (a == STATE_OK || b == STATE_OK)
88 return STATE_OK;
89 else
90 return max(a, b);
91}
92
93void usage(const char *msg) { 45void usage(const char *msg) {
94 printf("%s\n", msg); 46 printf("%s\n", msg);
95 print_usage(); 47 print_usage();
@@ -137,41 +89,46 @@ bool is_numeric(char *number) {
137 char tmp[1]; 89 char tmp[1];
138 float x; 90 float x;
139 91
140 if (!number) 92 if (!number) {
141 return false; 93 return false;
142 else if (sscanf(number, "%f%c", &x, tmp) == 1) 94 } else if (sscanf(number, "%f%c", &x, tmp) == 1) {
143 return true; 95 return true;
144 else 96 } else {
145 return false; 97 return false;
98 }
146} 99}
147 100
148bool is_positive(char *number) { 101bool is_positive(char *number) {
149 if (is_numeric(number) && atof(number) > 0.0) 102 if (is_numeric(number) && atof(number) > 0.0) {
150 return true; 103 return true;
151 else 104 } else {
152 return false; 105 return false;
106 }
153} 107}
154 108
155bool is_negative(char *number) { 109bool is_negative(char *number) {
156 if (is_numeric(number) && atof(number) < 0.0) 110 if (is_numeric(number) && atof(number) < 0.0) {
157 return true; 111 return true;
158 else 112 } else {
159 return false; 113 return false;
114 }
160} 115}
161 116
162bool is_nonnegative(char *number) { 117bool is_nonnegative(char *number) {
163 if (is_numeric(number) && atof(number) >= 0.0) 118 if (is_numeric(number) && atof(number) >= 0.0) {
164 return true; 119 return true;
165 else 120 } else {
166 return false; 121 return false;
122 }
167} 123}
168 124
169bool is_percentage(char *number) { 125bool is_percentage(char *number) {
170 int x; 126 int x;
171 if (is_numeric(number) && (x = atof(number)) >= 0 && x <= 100) 127 if (is_numeric(number) && (x = atof(number)) >= 0 && x <= 100) {
172 return true; 128 return true;
173 else 129 } else {
174 return false; 130 return false;
131 }
175} 132}
176 133
177bool is_percentage_expression(const char str[]) { 134bool is_percentage_expression(const char str[]) {
@@ -204,36 +161,41 @@ bool is_percentage_expression(const char str[]) {
204bool is_integer(char *number) { 161bool is_integer(char *number) {
205 long int n; 162 long int n;
206 163
207 if (!number || (strspn(number, "-0123456789 ") != strlen(number))) 164 if (!number || (strspn(number, "-0123456789 ") != strlen(number))) {
208 return false; 165 return false;
166 }
209 167
210 n = strtol(number, NULL, 10); 168 n = strtol(number, NULL, 10);
211 169
212 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX) 170 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX) {
213 return true; 171 return true;
214 else 172 } else {
215 return false; 173 return false;
174 }
216} 175}
217 176
218bool is_intpos(char *number) { 177bool is_intpos(char *number) {
219 if (is_integer(number) && atoi(number) > 0) 178 if (is_integer(number) && atoi(number) > 0) {
220 return true; 179 return true;
221 else 180 } else {
222 return false; 181 return false;
182 }
223} 183}
224 184
225bool is_intneg(char *number) { 185bool is_intneg(char *number) {
226 if (is_integer(number) && atoi(number) < 0) 186 if (is_integer(number) && atoi(number) < 0) {
227 return true; 187 return true;
228 else 188 } else {
229 return false; 189 return false;
190 }
230} 191}
231 192
232bool is_intnonneg(char *number) { 193bool is_intnonneg(char *number) {
233 if (is_integer(number) && atoi(number) >= 0) 194 if (is_integer(number) && atoi(number) >= 0) {
234 return true; 195 return true;
235 else 196 } else {
236 return false; 197 return false;
198 }
237} 199}
238 200
239/* 201/*
@@ -295,19 +257,21 @@ bool is_uint64(char *number, uint64_t *target) {
295 257
296bool is_intpercent(char *number) { 258bool is_intpercent(char *number) {
297 int i; 259 int i;
298 if (is_integer(number) && (i = atoi(number)) >= 0 && i <= 100) 260 if (is_integer(number) && (i = atoi(number)) >= 0 && i <= 100) {
299 return true; 261 return true;
300 else 262 } else {
301 return false; 263 return false;
264 }
302} 265}
303 266
304bool is_option(char *str) { 267bool is_option(char *str) {
305 if (!str) 268 if (!str) {
306 return false; 269 return false;
307 else if (strspn(str, "-") == 1 || strspn(str, "-") == 2) 270 } else if (strspn(str, "-") == 1 || strspn(str, "-") == 2) {
308 return true; 271 return true;
309 else 272 } else {
310 return false; 273 return false;
274 }
311} 275}
312 276
313#ifdef NEED_GETTIMEOFDAY 277#ifdef NEED_GETTIMEOFDAY
@@ -336,10 +300,11 @@ void strip(char *buffer) {
336 300
337 for (x = strlen(buffer); x >= 1; x--) { 301 for (x = strlen(buffer); x >= 1; x--) {
338 i = x - 1; 302 i = x - 1;
339 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') {
340 buffer[i] = '\0'; 304 buffer[i] = '\0';
341 else 305 } else {
342 break; 306 break;
307 }
343 } 308 }
344 return; 309 return;
345} 310}
@@ -357,8 +322,9 @@ void strip(char *buffer) {
357 *****************************************************************************/ 322 *****************************************************************************/
358 323
359char *strscpy(char *dest, const char *src) { 324char *strscpy(char *dest, const char *src) {
360 if (src == NULL) 325 if (src == NULL) {
361 return NULL; 326 return NULL;
327 }
362 328
363 xasprintf(&dest, "%s", src); 329 xasprintf(&dest, "%s", src);
364 330
@@ -417,17 +383,21 @@ char *strscpy(char *dest, const char *src) {
417 383
418char *strnl(char *str) { 384char *strnl(char *str) {
419 size_t len; 385 size_t len;
420 if (str == NULL) 386 if (str == NULL) {
421 return NULL; 387 return NULL;
388 }
422 str = strpbrk(str, "\r\n"); 389 str = strpbrk(str, "\r\n");
423 if (str == NULL) 390 if (str == NULL) {
424 return NULL; 391 return NULL;
392 }
425 len = strspn(str, "\r\n"); 393 len = strspn(str, "\r\n");
426 if (str[len] == '\0') 394 if (str[len] == '\0') {
427 return NULL; 395 return NULL;
396 }
428 str += len; 397 str += len;
429 if (strlen(str) == 0) 398 if (strlen(str) == 0) {
430 return NULL; 399 return NULL;
400 }
431 return str; 401 return str;
432} 402}
433 403
@@ -450,15 +420,18 @@ char *strnl(char *str) {
450char *strpcpy(char *dest, const char *src, const char *str) { 420char *strpcpy(char *dest, const char *src, const char *str) {
451 size_t len; 421 size_t len;
452 422
453 if (src) 423 if (src) {
454 len = strcspn(src, str); 424 len = strcspn(src, str);
455 else 425 } else {
456 return NULL; 426 return NULL;
427 }
457 428
458 if (dest == NULL || strlen(dest) < len) 429 if (dest == NULL || strlen(dest) < len) {
459 dest = realloc(dest, len + 1); 430 dest = realloc(dest, len + 1);
460 if (dest == NULL) 431 }
432 if (dest == NULL) {
461 die(STATE_UNKNOWN, _("failed realloc in strpcpy\n")); 433 die(STATE_UNKNOWN, _("failed realloc in strpcpy\n"));
434 }
462 435
463 strncpy(dest, src, len); 436 strncpy(dest, src, len);
464 dest[len] = '\0'; 437 dest[len] = '\0';
@@ -482,10 +455,11 @@ char *strpcpy(char *dest, const char *src, const char *str) {
482char *strpcat(char *dest, const char *src, const char *str) { 455char *strpcat(char *dest, const char *src, const char *str) {
483 size_t len, l2; 456 size_t len, l2;
484 457
485 if (dest) 458 if (dest) {
486 len = strlen(dest); 459 len = strlen(dest);
487 else 460 } else {
488 len = 0; 461 len = 0;
462 }
489 463
490 if (src) { 464 if (src) {
491 l2 = strcspn(src, str); 465 l2 = strcspn(src, str);
@@ -494,8 +468,9 @@ char *strpcat(char *dest, const char *src, const char *str) {
494 } 468 }
495 469
496 dest = realloc(dest, len + l2 + 1); 470 dest = realloc(dest, len + l2 + 1);
497 if (dest == NULL) 471 if (dest == NULL) {
498 die(STATE_UNKNOWN, _("failed malloc in strscat\n")); 472 die(STATE_UNKNOWN, _("failed malloc in strscat\n"));
473 }
499 474
500 strncpy(dest + len, src, l2); 475 strncpy(dest + len, src, l2);
501 dest[len + l2] = '\0'; 476 dest[len + l2] = '\0';
@@ -511,8 +486,9 @@ char *strpcat(char *dest, const char *src, const char *str) {
511 486
512int xvasprintf(char **strp, const char *fmt, va_list ap) { 487int xvasprintf(char **strp, const char *fmt, va_list ap) {
513 int result = vasprintf(strp, fmt, ap); 488 int result = vasprintf(strp, fmt, ap);
514 if (result == -1 || *strp == NULL) 489 if (result == -1 || *strp == NULL) {
515 die(STATE_UNKNOWN, _("failed malloc in xvasprintf\n")); 490 die(STATE_UNKNOWN, _("failed malloc in xvasprintf\n"));
491 }
516 return result; 492 return result;
517} 493}
518 494
@@ -531,126 +507,145 @@ int xasprintf(char **strp, const char *fmt, ...) {
531 * 507 *
532 ******************************************************************************/ 508 ******************************************************************************/
533 509
534char *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,
535 long int minv, int maxp, long int maxv) { 511 long int minv, bool maxp, long int maxv) {
536 char *data = NULL; 512 char *data = NULL;
537 513
538 if (strpbrk(label, "'= ")) 514 if (strpbrk(label, "'= ")) {
539 xasprintf(&data, "'%s'=%ld%s;", label, val, uom); 515 xasprintf(&data, "'%s'=%ld%s;", label, val, uom);
540 else 516 } else {
541 xasprintf(&data, "%s=%ld%s;", label, val, uom); 517 xasprintf(&data, "%s=%ld%s;", label, val, uom);
518 }
542 519
543 if (warnp) 520 if (warnp) {
544 xasprintf(&data, "%s%ld;", data, warn); 521 xasprintf(&data, "%s%ld;", data, warn);
545 else 522 } else {
546 xasprintf(&data, "%s;", data); 523 xasprintf(&data, "%s;", data);
524 }
547 525
548 if (critp) 526 if (critp) {
549 xasprintf(&data, "%s%ld;", data, crit); 527 xasprintf(&data, "%s%ld;", data, crit);
550 else 528 } else {
551 xasprintf(&data, "%s;", data); 529 xasprintf(&data, "%s;", data);
530 }
552 531
553 if (minp) 532 if (minp) {
554 xasprintf(&data, "%s%ld;", data, minv); 533 xasprintf(&data, "%s%ld;", data, minv);
555 else 534 } else {
556 xasprintf(&data, "%s;", data); 535 xasprintf(&data, "%s;", data);
536 }
557 537
558 if (maxp) 538 if (maxp) {
559 xasprintf(&data, "%s%ld", data, maxv); 539 xasprintf(&data, "%s%ld", data, maxv);
540 }
560 541
561 return data; 542 return data;
562} 543}
563 544
564char *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 */
565 uint64_t warn, int critp, /* Critical present */ 546 uint64_t warn, bool critp, /* Critical present */
566 uint64_t crit, int minp, /* Minimum present */ 547 uint64_t crit, bool minp, /* Minimum present */
567 uint64_t minv, int maxp, /* Maximum present */ 548 uint64_t minv, bool maxp, /* Maximum present */
568 uint64_t maxv) { 549 uint64_t maxv) {
569 char *data = NULL; 550 char *data = NULL;
570 551
571 if (strpbrk(label, "'= ")) 552 if (strpbrk(label, "'= ")) {
572 xasprintf(&data, "'%s'=%" PRIu64 "%s;", label, val, uom); 553 xasprintf(&data, "'%s'=%" PRIu64 "%s;", label, val, uom);
573 else 554 } else {
574 xasprintf(&data, "%s=%" PRIu64 "%s;", label, val, uom); 555 xasprintf(&data, "%s=%" PRIu64 "%s;", label, val, uom);
556 }
575 557
576 if (warnp) 558 if (warnp) {
577 xasprintf(&data, "%s%" PRIu64 ";", data, warn); 559 xasprintf(&data, "%s%" PRIu64 ";", data, warn);
578 else 560 } else {
579 xasprintf(&data, "%s;", data); 561 xasprintf(&data, "%s;", data);
562 }
580 563
581 if (critp) 564 if (critp) {
582 xasprintf(&data, "%s%" PRIu64 ";", data, crit); 565 xasprintf(&data, "%s%" PRIu64 ";", data, crit);
583 else 566 } else {
584 xasprintf(&data, "%s;", data); 567 xasprintf(&data, "%s;", data);
568 }
585 569
586 if (minp) 570 if (minp) {
587 xasprintf(&data, "%s%" PRIu64 ";", data, minv); 571 xasprintf(&data, "%s%" PRIu64 ";", data, minv);
588 else 572 } else {
589 xasprintf(&data, "%s;", data); 573 xasprintf(&data, "%s;", data);
574 }
590 575
591 if (maxp) 576 if (maxp) {
592 xasprintf(&data, "%s%" PRIu64, data, maxv); 577 xasprintf(&data, "%s%" PRIu64, data, maxv);
578 }
593 579
594 return data; 580 return data;
595} 581}
596 582
597char *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 */
598 int64_t warn, int critp, /* Critical present */ 584 int64_t warn, bool critp, /* Critical present */
599 int64_t crit, int minp, /* Minimum present */ 585 int64_t crit, bool minp, /* Minimum present */
600 int64_t minv, int maxp, /* Maximum present */ 586 int64_t minv, bool maxp, /* Maximum present */
601 int64_t maxv) { 587 int64_t maxv) {
602 char *data = NULL; 588 char *data = NULL;
603 589
604 if (strpbrk(label, "'= ")) 590 if (strpbrk(label, "'= ")) {
605 xasprintf(&data, "'%s'=%" PRId64 "%s;", label, val, uom); 591 xasprintf(&data, "'%s'=%" PRId64 "%s;", label, val, uom);
606 else 592 } else {
607 xasprintf(&data, "%s=%" PRId64 "%s;", label, val, uom); 593 xasprintf(&data, "%s=%" PRId64 "%s;", label, val, uom);
594 }
608 595
609 if (warnp) 596 if (warnp) {
610 xasprintf(&data, "%s%" PRId64 ";", data, warn); 597 xasprintf(&data, "%s%" PRId64 ";", data, warn);
611 else 598 } else {
612 xasprintf(&data, "%s;", data); 599 xasprintf(&data, "%s;", data);
600 }
613 601
614 if (critp) 602 if (critp) {
615 xasprintf(&data, "%s%" PRId64 ";", data, crit); 603 xasprintf(&data, "%s%" PRId64 ";", data, crit);
616 else 604 } else {
617 xasprintf(&data, "%s;", data); 605 xasprintf(&data, "%s;", data);
606 }
618 607
619 if (minp) 608 if (minp) {
620 xasprintf(&data, "%s%" PRId64 ";", data, minv); 609 xasprintf(&data, "%s%" PRId64 ";", data, minv);
621 else 610 } else {
622 xasprintf(&data, "%s;", data); 611 xasprintf(&data, "%s;", data);
612 }
623 613
624 if (maxp) 614 if (maxp) {
625 xasprintf(&data, "%s%" PRId64, data, maxv); 615 xasprintf(&data, "%s%" PRId64, data, maxv);
616 }
626 617
627 return data; 618 return data;
628} 619}
629 620
630char *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,
631 int maxp, double maxv) { 622 bool maxp, double maxv) {
632 char *data = NULL; 623 char *data = NULL;
633 624
634 if (strpbrk(label, "'= ")) 625 if (strpbrk(label, "'= ")) {
635 xasprintf(&data, "'%s'=", label); 626 xasprintf(&data, "'%s'=", label);
636 else 627 } else {
637 xasprintf(&data, "%s=", label); 628 xasprintf(&data, "%s=", label);
629 }
638 630
639 xasprintf(&data, "%s%f", data, val); 631 xasprintf(&data, "%s%f", data, val);
640 xasprintf(&data, "%s%s;", data, uom); 632 xasprintf(&data, "%s%s;", data, uom);
641 633
642 if (warnp) 634 if (warnp) {
643 xasprintf(&data, "%s%f", data, warn); 635 xasprintf(&data, "%s%f", data, warn);
636 }
644 637
645 xasprintf(&data, "%s;", data); 638 xasprintf(&data, "%s;", data);
646 639
647 if (critp) 640 if (critp) {
648 xasprintf(&data, "%s%f", data, crit); 641 xasprintf(&data, "%s%f", data, crit);
642 }
649 643
650 xasprintf(&data, "%s;", data); 644 xasprintf(&data, "%s;", data);
651 645
652 if (minp) 646 if (minp) {
653 xasprintf(&data, "%s%f", data, minv); 647 xasprintf(&data, "%s%f", data, minv);
648 }
654 649
655 if (maxp) { 650 if (maxp) {
656 xasprintf(&data, "%s;", data); 651 xasprintf(&data, "%s;", data);
@@ -660,28 +655,32 @@ char *fperfdata(const char *label, double val, const char *uom, int warnp, doubl
660 return data; 655 return data;
661} 656}
662 657
663char *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) {
664 char *data = NULL; 659 char *data = NULL;
665 if (strpbrk(label, "'= ")) 660 if (strpbrk(label, "'= ")) {
666 xasprintf(&data, "'%s'=", label); 661 xasprintf(&data, "'%s'=", label);
667 else 662 } else {
668 xasprintf(&data, "%s=", label); 663 xasprintf(&data, "%s=", label);
664 }
669 665
670 xasprintf(&data, "%s%f", data, val); 666 xasprintf(&data, "%s%f", data, val);
671 xasprintf(&data, "%s%s;", data, uom); 667 xasprintf(&data, "%s%s;", data, uom);
672 668
673 if (warn != NULL) 669 if (warn != NULL) {
674 xasprintf(&data, "%s%s", data, warn); 670 xasprintf(&data, "%s%s", data, warn);
671 }
675 672
676 xasprintf(&data, "%s;", data); 673 xasprintf(&data, "%s;", data);
677 674
678 if (crit != NULL) 675 if (crit != NULL) {
679 xasprintf(&data, "%s%s", data, crit); 676 xasprintf(&data, "%s%s", data, crit);
677 }
680 678
681 xasprintf(&data, "%s;", data); 679 xasprintf(&data, "%s;", data);
682 680
683 if (minp) 681 if (minp) {
684 xasprintf(&data, "%s%f", data, minv); 682 xasprintf(&data, "%s%f", data, minv);
683 }
685 684
686 if (maxp) { 685 if (maxp) {
687 xasprintf(&data, "%s;", data); 686 xasprintf(&data, "%s;", data);
@@ -691,28 +690,32 @@ char *sperfdata(const char *label, double val, const char *uom, char *warn, char
691 return data; 690 return data;
692} 691}
693 692
694char *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) {
695 char *data = NULL; 694 char *data = NULL;
696 if (strpbrk(label, "'= ")) 695 if (strpbrk(label, "'= ")) {
697 xasprintf(&data, "'%s'=", label); 696 xasprintf(&data, "'%s'=", label);
698 else 697 } else {
699 xasprintf(&data, "%s=", label); 698 xasprintf(&data, "%s=", label);
699 }
700 700
701 xasprintf(&data, "%s%d", data, val); 701 xasprintf(&data, "%s%d", data, val);
702 xasprintf(&data, "%s%s;", data, uom); 702 xasprintf(&data, "%s%s;", data, uom);
703 703
704 if (warn != NULL) 704 if (warn != NULL) {
705 xasprintf(&data, "%s%s", data, warn); 705 xasprintf(&data, "%s%s", data, warn);
706 }
706 707
707 xasprintf(&data, "%s;", data); 708 xasprintf(&data, "%s;", data);
708 709
709 if (crit != NULL) 710 if (crit != NULL) {
710 xasprintf(&data, "%s%s", data, crit); 711 xasprintf(&data, "%s%s", data, crit);
712 }
711 713
712 xasprintf(&data, "%s;", data); 714 xasprintf(&data, "%s;", data);
713 715
714 if (minp) 716 if (minp) {
715 xasprintf(&data, "%s%d", data, minv); 717 xasprintf(&data, "%s%d", data, minv);
718 }
716 719
717 if (maxp) { 720 if (maxp) {
718 xasprintf(&data, "%s;", data); 721 xasprintf(&data, "%s;", data);