summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorderaadt <>2016-02-25 00:38:51 +0000
committerderaadt <>2016-02-25 00:38:51 +0000
commita27037183b35dae9022d7018dc59d25e7e6d78be (patch)
tree2073f7b63dda714a47cdbe9d478d49abb7cfbfa0 /src
parent7c29ec3c8321ebd24bd96ec1df1ded888768b275 (diff)
downloadopenbsd-a27037183b35dae9022d7018dc59d25e7e6d78be.tar.gz
openbsd-a27037183b35dae9022d7018dc59d25e7e6d78be.tar.bz2
openbsd-a27037183b35dae9022d7018dc59d25e7e6d78be.zip
refactor option letter parsing into a subfunction, to increase clarity
about which options are turned on/off by 's' and 'S' ok tedu
Diffstat (limited to 'src')
-rw-r--r--src/lib/libc/stdlib/malloc.c195
1 files changed, 102 insertions, 93 deletions
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c
index e8e55c079e..d22fb38dae 100644
--- a/src/lib/libc/stdlib/malloc.c
+++ b/src/lib/libc/stdlib/malloc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: malloc.c,v 1.181 2016/01/26 15:44:28 otto Exp $ */ 1/* $OpenBSD: malloc.c,v 1.182 2016/02/25 00:38:51 deraadt Exp $ */
2/* 2/*
3 * Copyright (c) 2008, 2010, 2011 Otto Moerbeek <otto@drijf.net> 3 * Copyright (c) 2008, 2010, 2011 Otto Moerbeek <otto@drijf.net>
4 * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org> 4 * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org>
@@ -470,13 +470,105 @@ map(struct dir_info *d, void *hint, size_t sz, int zero_fill)
470 return p; 470 return p;
471} 471}
472 472
473static void
474omalloc_parseopt(char opt)
475{
476 switch (opt) {
477 case '>':
478 mopts.malloc_cache <<= 1;
479 if (mopts.malloc_cache > MALLOC_MAXCACHE)
480 mopts.malloc_cache = MALLOC_MAXCACHE;
481 break;
482 case '<':
483 mopts.malloc_cache >>= 1;
484 break;
485 case 'a':
486 case 'A':
487 /* ignored */
488 break;
489 case 'c':
490 mopts.malloc_canaries = 0;
491 break;
492 case 'C':
493 mopts.malloc_canaries = sizeof(void *);
494 break;
495#ifdef MALLOC_STATS
496 case 'd':
497 mopts.malloc_stats = 0;
498 break;
499 case 'D':
500 mopts.malloc_stats = 1;
501 break;
502#endif /* MALLOC_STATS */
503 case 'f':
504 mopts.malloc_freenow = 0;
505 mopts.malloc_freeunmap = 0;
506 break;
507 case 'F':
508 mopts.malloc_freenow = 1;
509 mopts.malloc_freeunmap = 1;
510 break;
511 case 'g':
512 mopts.malloc_guard = 0;
513 break;
514 case 'G':
515 mopts.malloc_guard = MALLOC_PAGESIZE;
516 break;
517 case 'h':
518 mopts.malloc_hint = 0;
519 break;
520 case 'H':
521 mopts.malloc_hint = 1;
522 break;
523 case 'j':
524 mopts.malloc_junk = 0;
525 break;
526 case 'J':
527 mopts.malloc_junk = 2;
528 break;
529 case 'n':
530 case 'N':
531 break;
532 case 'p':
533 mopts.malloc_move = 0;
534 break;
535 case 'P':
536 mopts.malloc_move = 1;
537 break;
538 case 'r':
539 mopts.malloc_realloc = 0;
540 break;
541 case 'R':
542 mopts.malloc_realloc = 1;
543 break;
544 case 'u':
545 mopts.malloc_freeunmap = 0;
546 break;
547 case 'U':
548 mopts.malloc_freeunmap = 1;
549 break;
550 case 'x':
551 mopts.malloc_xmalloc = 0;
552 break;
553 case 'X':
554 mopts.malloc_xmalloc = 1;
555 break;
556 default: {
557 static const char q[] = "malloc() warning: "
558 "unknown char in MALLOC_OPTIONS\n";
559 write(STDERR_FILENO, q, sizeof(q) - 1);
560 break;
561 }
562 }
563}
564
473/* 565/*
474 * Initialize a dir_info, which should have been cleared by caller 566 * Initialize a dir_info, which should have been cleared by caller
475 */ 567 */
476static int 568static int
477omalloc_init(struct dir_info **dp) 569omalloc_init(struct dir_info **dp)
478{ 570{
479 char *p, b[64]; 571 char *p, *q, b[64];
480 int i, j; 572 int i, j;
481 size_t d_avail, regioninfo_size; 573 size_t d_avail, regioninfo_size;
482 struct dir_info *d; 574 struct dir_info *d;
@@ -512,103 +604,20 @@ omalloc_init(struct dir_info **dp)
512 604
513 for (; p != NULL && *p != '\0'; p++) { 605 for (; p != NULL && *p != '\0'; p++) {
514 switch (*p) { 606 switch (*p) {
515 case '>':
516 mopts.malloc_cache <<= 1;
517 if (mopts.malloc_cache > MALLOC_MAXCACHE)
518 mopts.malloc_cache = MALLOC_MAXCACHE;
519 break;
520 case '<':
521 mopts.malloc_cache >>= 1;
522 break;
523 case 'a':
524 case 'A':
525 /* ignored */
526 break;
527 case 'c':
528 mopts.malloc_canaries = 0;
529 break;
530 case 'C':
531 mopts.malloc_canaries = sizeof(void *);
532 break;
533#ifdef MALLOC_STATS
534 case 'd':
535 mopts.malloc_stats = 0;
536 break;
537 case 'D':
538 mopts.malloc_stats = 1;
539 break;
540#endif /* MALLOC_STATS */
541 case 'f':
542 mopts.malloc_freenow = 0;
543 mopts.malloc_freeunmap = 0;
544 break;
545 case 'F':
546 mopts.malloc_freenow = 1;
547 mopts.malloc_freeunmap = 1;
548 break;
549 case 'g':
550 mopts.malloc_guard = 0;
551 break;
552 case 'G':
553 mopts.malloc_guard = MALLOC_PAGESIZE;
554 break;
555 case 'h':
556 mopts.malloc_hint = 0;
557 break;
558 case 'H':
559 mopts.malloc_hint = 1;
560 break;
561 case 'j':
562 mopts.malloc_junk = 0;
563 break;
564 case 'J':
565 mopts.malloc_junk = 2;
566 break;
567 case 'n':
568 case 'N':
569 break;
570 case 'p':
571 mopts.malloc_move = 0;
572 break;
573 case 'P':
574 mopts.malloc_move = 1;
575 break;
576 case 'r':
577 mopts.malloc_realloc = 0;
578 break;
579 case 'R':
580 mopts.malloc_realloc = 1;
581 break;
582 case 's':
583 mopts.malloc_freeunmap = mopts.malloc_junk = 0;
584 mopts.malloc_guard = 0;
585 mopts.malloc_cache = MALLOC_DEFAULT_CACHE;
586 break;
587 case 'S': 607 case 'S':
588 mopts.malloc_freeunmap = 1; 608 for (q = "FGJP"; *q != '\0'; q++)
589 mopts.malloc_junk = 2; 609 omalloc_parseopt(*q);
590 mopts.malloc_guard = MALLOC_PAGESIZE;
591 mopts.malloc_cache = 0; 610 mopts.malloc_cache = 0;
592 break; 611 break;
593 case 'u': 612 case 's':
594 mopts.malloc_freeunmap = 0; 613 for (q = "fgj"; *q != '\0'; q++)
595 break; 614 omalloc_parseopt(*q);
596 case 'U': 615 mopts.malloc_cache = MALLOC_DEFAULT_CACHE;
597 mopts.malloc_freeunmap = 1;
598 break;
599 case 'x':
600 mopts.malloc_xmalloc = 0;
601 break;
602 case 'X':
603 mopts.malloc_xmalloc = 1;
604 break; 616 break;
605 default: { 617 default:
606 static const char q[] = "malloc() warning: " 618 omalloc_parseopt(*p);
607 "unknown char in MALLOC_OPTIONS\n";
608 write(STDERR_FILENO, q, sizeof(q) - 1);
609 break; 619 break;
610 } 620 }
611 }
612 } 621 }
613 } 622 }
614 623