diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-11 00:45:25 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-11 00:45:25 +0200 |
| commit | e7670ff81d01d06f8f27ffb3b6e6d5e6f92c8f74 (patch) | |
| tree | a6a13f9d753c590c06299e0c0770992b5faaba03 | |
| parent | 0e5e4eaf7bbfa5d71db1ea410f734c8458a2071e (diff) | |
| download | busybox-w32-e7670ff81d01d06f8f27ffb3b6e6d5e6f92c8f74.tar.gz busybox-w32-e7670ff81d01d06f8f27ffb3b6e6d5e6f92c8f74.tar.bz2 busybox-w32-e7670ff81d01d06f8f27ffb3b6e6d5e6f92c8f74.zip | |
ash: use bbox wrappers for malloc etc instead of homegrown ones
function old new delta
popstring 134 140 +6
ckmalloc 9 - -9
ckstrdup 22 - -22
ckrealloc 24 - -24
ckzalloc 28 - -28
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 1/0 up/down: 6/-83) Total: -77 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | shell/ash.c | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/shell/ash.c b/shell/ash.c index b0b85358f..cc2677126 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -1155,6 +1155,49 @@ errmsg(int e, const char *em) | |||
| 1155 | 1155 | ||
| 1156 | /* ============ Memory allocation */ | 1156 | /* ============ Memory allocation */ |
| 1157 | 1157 | ||
| 1158 | #if 0 | ||
| 1159 | /* I consider these wrappers nearly useless: | ||
| 1160 | * ok, they return you to nearest exception handler, but | ||
| 1161 | * how much memory do you leak in the process, making | ||
| 1162 | * memory starvation worse? | ||
| 1163 | */ | ||
| 1164 | static void * | ||
| 1165 | ckrealloc(void * p, size_t nbytes) | ||
| 1166 | { | ||
| 1167 | p = realloc(p, nbytes); | ||
| 1168 | if (!p) | ||
| 1169 | ash_msg_and_raise_error(bb_msg_memory_exhausted); | ||
| 1170 | return p; | ||
| 1171 | } | ||
| 1172 | |||
| 1173 | static void * | ||
| 1174 | ckmalloc(size_t nbytes) | ||
| 1175 | { | ||
| 1176 | return ckrealloc(NULL, nbytes); | ||
| 1177 | } | ||
| 1178 | |||
| 1179 | static void * | ||
| 1180 | ckzalloc(size_t nbytes) | ||
| 1181 | { | ||
| 1182 | return memset(ckmalloc(nbytes), 0, nbytes); | ||
| 1183 | } | ||
| 1184 | |||
| 1185 | static char * | ||
| 1186 | ckstrdup(const char *s) | ||
| 1187 | { | ||
| 1188 | char *p = strdup(s); | ||
| 1189 | if (!p) | ||
| 1190 | ash_msg_and_raise_error(bb_msg_memory_exhausted); | ||
| 1191 | return p; | ||
| 1192 | } | ||
| 1193 | #else | ||
| 1194 | /* Using bbox equivalents. They exit if out of memory */ | ||
| 1195 | # define ckrealloc xrealloc | ||
| 1196 | # define ckmalloc xmalloc | ||
| 1197 | # define ckzalloc xzalloc | ||
| 1198 | # define ckstrdup xstrdup | ||
| 1199 | #endif | ||
| 1200 | |||
| 1158 | /* | 1201 | /* |
| 1159 | * It appears that grabstackstr() will barf with such alignments | 1202 | * It appears that grabstackstr() will barf with such alignments |
| 1160 | * because stalloc() will return a string allocated in a new stackblock. | 1203 | * because stalloc() will return a string allocated in a new stackblock. |
| @@ -1210,43 +1253,10 @@ extern struct globals_memstack *const ash_ptr_to_globals_memstack; | |||
| 1210 | herefd = -1; \ | 1253 | herefd = -1; \ |
| 1211 | } while (0) | 1254 | } while (0) |
| 1212 | 1255 | ||
| 1256 | |||
| 1213 | #define stackblock() ((void *)g_stacknxt) | 1257 | #define stackblock() ((void *)g_stacknxt) |
| 1214 | #define stackblocksize() g_stacknleft | 1258 | #define stackblocksize() g_stacknleft |
| 1215 | 1259 | ||
| 1216 | |||
| 1217 | static void * | ||
| 1218 | ckrealloc(void * p, size_t nbytes) | ||
| 1219 | { | ||
| 1220 | p = realloc(p, nbytes); | ||
| 1221 | if (!p) | ||
| 1222 | ash_msg_and_raise_error(bb_msg_memory_exhausted); | ||
| 1223 | return p; | ||
| 1224 | } | ||
| 1225 | |||
| 1226 | static void * | ||
| 1227 | ckmalloc(size_t nbytes) | ||
| 1228 | { | ||
| 1229 | return ckrealloc(NULL, nbytes); | ||
| 1230 | } | ||
| 1231 | |||
| 1232 | static void * | ||
| 1233 | ckzalloc(size_t nbytes) | ||
| 1234 | { | ||
| 1235 | return memset(ckmalloc(nbytes), 0, nbytes); | ||
| 1236 | } | ||
| 1237 | |||
| 1238 | /* | ||
| 1239 | * Make a copy of a string in safe storage. | ||
| 1240 | */ | ||
| 1241 | static char * | ||
| 1242 | ckstrdup(const char *s) | ||
| 1243 | { | ||
| 1244 | char *p = strdup(s); | ||
| 1245 | if (!p) | ||
| 1246 | ash_msg_and_raise_error(bb_msg_memory_exhausted); | ||
| 1247 | return p; | ||
| 1248 | } | ||
| 1249 | |||
| 1250 | /* | 1260 | /* |
| 1251 | * Parse trees for commands are allocated in lifo order, so we use a stack | 1261 | * Parse trees for commands are allocated in lifo order, so we use a stack |
| 1252 | * to make this more efficient, and also to avoid all sorts of exception | 1262 | * to make this more efficient, and also to avoid all sorts of exception |
