Root/
Source at commit 1406 created 12 years 10 months ago. By meklort, Revert drivers.c so that kexts are only loaded when OSBundleRequired is set and that value is not safe mode. Added some comments about it too. | |
---|---|
1 | /******************************************************************************␊ |
2 | *␊ |
3 | * Copyright (C) 1997-2004 by Dimitri van Heesch.␊ |
4 | *␊ |
5 | * Permission to use, copy, modify, and distribute this software and its␊ |
6 | * documentation under the terms of the GNU General Public License is hereby ␊ |
7 | * granted. No representations are made about the suitability of this software ␊ |
8 | * for any purpose. It is provided "as is" without express or implied warranty.␊ |
9 | * See the GNU General Public License for more details.␊ |
10 | *␊ |
11 | * Documents produced by Doxygen are derivative works derived from the␊ |
12 | * input used in their production; they are not affected by this license.␊ |
13 | *␊ |
14 | */␊ |
15 | ␊ |
16 | #include <stdio.h>␊ |
17 | #include "qgstring.h"␊ |
18 | ␊ |
19 | #include <assert.h>␊ |
20 | ␊ |
21 | #define BLOCK_SIZE 64␊ |
22 | #define ROUND_SIZE(x) ((x)+BLOCK_SIZE-1)&~(BLOCK_SIZE-1)␊ |
23 | ␊ |
24 | #define DBG_STR(x) do { } while(0)␊ |
25 | //#define DBG_STR(x) printf x␊ |
26 | ␊ |
27 | QGString::QGString() // make null string␊ |
28 | : m_data(0), m_len(0), m_memSize(0) ␊ |
29 | {␊ |
30 | DBG_STR(("%p: QGString::QGString() %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
31 | } ␊ |
32 | ␊ |
33 | QGString::QGString(uint size)␊ |
34 | {␊ |
35 | if (size==0)␊ |
36 | {␊ |
37 | m_data=0;␊ |
38 | m_len=0;␊ |
39 | }␊ |
40 | else␊ |
41 | {␊ |
42 | m_memSize = ROUND_SIZE(size+1);␊ |
43 | m_data = (char*)malloc(m_memSize);␊ |
44 | memset(m_data,' ',size);␊ |
45 | m_data[size]='\0';␊ |
46 | m_len=size;␊ |
47 | }␊ |
48 | DBG_STR(("%p: QGString::QGString(uint size=%d) %d:%s\n",␊ |
49 | this,size,m_len,m_data?m_data:"<none>"));␊ |
50 | }␊ |
51 | ␊ |
52 | QGString::QGString( const QGString &s ) ␊ |
53 | { ␊ |
54 | if (s.m_memSize==0)␊ |
55 | {␊ |
56 | m_data = 0;␊ |
57 | m_len = 0;␊ |
58 | m_memSize = 0;␊ |
59 | }␊ |
60 | else␊ |
61 | {␊ |
62 | m_data = (char *)malloc(s.m_memSize); ␊ |
63 | m_len = s.m_len;␊ |
64 | m_memSize = s.m_memSize;␊ |
65 | qstrcpy(m_data,s.m_data);␊ |
66 | }␊ |
67 | DBG_STR(("%p: QGString::QGString(const QGString &) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
68 | } ␊ |
69 | ␊ |
70 | QGString::QGString( const char *str )␊ |
71 | {␊ |
72 | if (str==0)␊ |
73 | {␊ |
74 | m_data=0;␊ |
75 | m_len=0;␊ |
76 | m_memSize=0;␊ |
77 | }␊ |
78 | else␊ |
79 | {␊ |
80 | m_len = qstrlen(str);␊ |
81 | m_memSize = ROUND_SIZE(m_len+1);␊ |
82 | assert(m_memSize>=m_len+1);␊ |
83 | m_data = (char *)malloc(m_memSize);␊ |
84 | qstrcpy(m_data,str);␊ |
85 | }␊ |
86 | DBG_STR(("%p: QGString::QGString(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
87 | }␊ |
88 | ␊ |
89 | QGString::~QGString() ␊ |
90 | { ␊ |
91 | free(m_data); ␊ |
92 | m_data=0; ␊ |
93 | DBG_STR(("%p: QGString::~QGString() %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
94 | }␊ |
95 | ␊ |
96 | bool QGString::resize( uint newlen )␊ |
97 | {␊ |
98 | m_len = 0;␊ |
99 | if (newlen==0)␊ |
100 | {␊ |
101 | if (m_data) { free(m_data); m_data=0; }␊ |
102 | m_memSize=0;␊ |
103 | DBG_STR(("%p: 1.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
104 | return TRUE;␊ |
105 | }␊ |
106 | m_memSize = ROUND_SIZE(newlen+1);␊ |
107 | assert(m_memSize>=newlen+1);␊ |
108 | if (m_data==0)␊ |
109 | {␊ |
110 | m_data = (char *)malloc(m_memSize);␊ |
111 | }␊ |
112 | else␊ |
113 | {␊ |
114 | m_data = (char *)realloc(m_data,m_memSize);␊ |
115 | }␊ |
116 | if (m_data==0) ␊ |
117 | {␊ |
118 | DBG_STR(("%p: 2.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
119 | return FALSE;␊ |
120 | }␊ |
121 | m_data[newlen]='\0';␊ |
122 | m_len = qstrlen(m_data);␊ |
123 | DBG_STR(("%p: 3.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
124 | return TRUE;␊ |
125 | }␊ |
126 | ␊ |
127 | bool QGString::enlarge( uint newlen )␊ |
128 | {␊ |
129 | if (newlen==0)␊ |
130 | {␊ |
131 | if (m_data) { free(m_data); m_data=0; }␊ |
132 | m_memSize=0;␊ |
133 | m_len=0;␊ |
134 | return TRUE;␊ |
135 | }␊ |
136 | uint newMemSize = ROUND_SIZE(newlen+1);␊ |
137 | if (newMemSize==m_memSize) return TRUE;␊ |
138 | m_memSize = newMemSize;␊ |
139 | if (m_data==0)␊ |
140 | {␊ |
141 | m_data = (char *)malloc(m_memSize);␊ |
142 | }␊ |
143 | else␊ |
144 | {␊ |
145 | m_data = (char *)realloc(m_data,m_memSize);␊ |
146 | }␊ |
147 | if (m_data==0) ␊ |
148 | {␊ |
149 | return FALSE;␊ |
150 | }␊ |
151 | m_data[newlen-1]='\0';␊ |
152 | if (m_len>newlen) m_len=newlen;␊ |
153 | return TRUE;␊ |
154 | }␊ |
155 | ␊ |
156 | void QGString::setLen( uint newlen )␊ |
157 | {␊ |
158 | m_len = newlen<=m_memSize ? newlen : m_memSize;␊ |
159 | }␊ |
160 | ␊ |
161 | QGString &QGString::operator=( const QGString &s ) ␊ |
162 | {␊ |
163 | if (m_data) free(m_data);␊ |
164 | if (s.m_memSize==0) // null string␊ |
165 | {␊ |
166 | m_data = 0;␊ |
167 | m_len = 0;␊ |
168 | m_memSize = 0;␊ |
169 | }␊ |
170 | else␊ |
171 | {␊ |
172 | m_len = s.m_len;␊ |
173 | m_memSize = s.m_memSize;␊ |
174 | m_data = (char*)malloc(m_memSize);␊ |
175 | qstrcpy(m_data,s.m_data);␊ |
176 | }␊ |
177 | DBG_STR(("%p: QGString::operator=(const QGString &%p) %d:%s\n",␊ |
178 | this,&s,m_len,m_data?m_data:"<none>"));␊ |
179 | return *this;␊ |
180 | }␊ |
181 | ␊ |
182 | QGString &QGString::operator=( const char *str ) ␊ |
183 | { ␊ |
184 | if (m_data) free(m_data);␊ |
185 | if (str==0) // null string␊ |
186 | {␊ |
187 | m_data = 0;␊ |
188 | m_len = 0;␊ |
189 | m_memSize = 0;␊ |
190 | }␊ |
191 | else␊ |
192 | {␊ |
193 | m_len = qstrlen(str);␊ |
194 | m_memSize = ROUND_SIZE(m_len+1);␊ |
195 | assert(m_memSize>=m_len+1);␊ |
196 | m_data = (char*)malloc(m_memSize);␊ |
197 | qstrcpy(m_data,str);␊ |
198 | }␊ |
199 | DBG_STR(("%p: QGString::operator=(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
200 | return *this;␊ |
201 | }␊ |
202 | ␊ |
203 | QGString &QGString::operator+=( const QGString &s )␊ |
204 | {␊ |
205 | if (s.m_memSize==0) return *this;␊ |
206 | uint len1 = length();␊ |
207 | uint len2 = s.length();␊ |
208 | uint memSize = ROUND_SIZE(len1 + len2 + 1);␊ |
209 | assert(memSize>=len1+len2+1);␊ |
210 | char *newData = memSize!=m_memSize ? (char*)realloc( m_data, memSize ) : m_data;␊ |
211 | m_memSize = memSize;␊ |
212 | if (m_data)␊ |
213 | {␊ |
214 | m_data = newData;␊ |
215 | memcpy( m_data + len1, s, len2 + 1 );␊ |
216 | }␊ |
217 | m_len = len1+len2;␊ |
218 | DBG_STR(("%p: QGString::operator+=(const QGString &) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
219 | return *this;␊ |
220 | }␊ |
221 | ␊ |
222 | QGString &QGString::operator+=( const char *str )␊ |
223 | {␊ |
224 | if (!str) return *this;␊ |
225 | uint len1 = length();␊ |
226 | uint len2 = qstrlen(str);␊ |
227 | uint memSize = ROUND_SIZE(len1 + len2 + 1);␊ |
228 | assert(memSize>=len1+len2+1);␊ |
229 | char *newData = memSize!=m_memSize ? (char *)realloc( m_data, memSize ) : m_data;␊ |
230 | m_memSize = memSize;␊ |
231 | if (newData)␊ |
232 | {␊ |
233 | m_data = newData;␊ |
234 | memcpy( m_data + len1, str, len2 + 1 );␊ |
235 | }␊ |
236 | m_len+=len2;␊ |
237 | DBG_STR(("%p: QGString::operator+=(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
238 | return *this;␊ |
239 | }␊ |
240 | ␊ |
241 | QGString &QGString::operator+=( char c )␊ |
242 | {␊ |
243 | uint len = m_len;␊ |
244 | uint memSize = ROUND_SIZE(len+2);␊ |
245 | assert(memSize>=len+2);␊ |
246 | char *newData = memSize!=m_memSize ? (char *)realloc( m_data, memSize ) : m_data;␊ |
247 | m_memSize = memSize;␊ |
248 | if (newData)␊ |
249 | {␊ |
250 | m_data = newData;␊ |
251 | m_data[len] = c;␊ |
252 | m_data[len+1] = '\0';␊ |
253 | }␊ |
254 | m_len++;␊ |
255 | DBG_STR(("%p: QGString::operator+=(char s) %d:%s\n",this,m_len,m_data?m_data:"<none>"));␊ |
256 | return *this;␊ |
257 | }␊ |
258 | ␊ |
259 |