184c3054670fe58f9bef3e19fd921cced23c8e63
[WebKit-https.git] / Source / bmalloc / bmalloc / Environment.cpp
1 /*
2  * Copyright (C) 2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "Environment.h"
27 #include <cstdlib>
28 #include <cstring>
29
30 namespace bmalloc {
31
32 static bool isMallocEnvironmentVariableSet()
33 {
34     const char* list[] = {
35         "Malloc",
36         "MallocLogFile",
37         "MallocGuardEdges",
38         "MallocDoNotProtectPrelude",
39         "MallocDoNotProtectPostlude",
40         "MallocStackLogging",
41         "MallocStackLoggingNoCompact",
42         "MallocStackLoggingDirectory",
43         "MallocScribble",
44         "MallocCheckHeapStart",
45         "MallocCheckHeapEach",
46         "MallocCheckHeapSleep",
47         "MallocCheckHeapAbort",
48         "MallocErrorAbort",
49         "MallocCorruptionAbort",
50         "MallocHelp"
51     };
52     size_t size = sizeof(list) / sizeof(const char*);
53     
54     for (size_t i = 0; i < size; ++i) {
55         if (getenv(list[i]))
56             return true;
57     }
58
59     return false;
60 }
61
62 static bool isLibgmallocEnabled()
63 {
64     char* variable = getenv("DYLD_INSERT_LIBRARIES");
65     if (!variable)
66         return false;
67     if (!strstr(variable, "libgmalloc"))
68         return false;
69     return true;
70 }
71
72 Environment::Environment()
73     : m_isBmallocEnabled(computeIsBmallocEnabled())
74 {
75 }
76
77 bool Environment::computeIsBmallocEnabled()
78 {
79     if (isMallocEnvironmentVariableSet())
80         return false;
81     if (isLibgmallocEnabled())
82         return false;
83     return true;
84 }
85
86 } // namespace bmalloc