projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
factor: factor2 variable is unused now, drop it
[oweals/busybox.git]
/
docs
/
keep_data_small.txt
diff --git
a/docs/keep_data_small.txt
b/docs/keep_data_small.txt
index 9fc799646a3ad44a3fcf011d2662a377746c4463..218d4f2eeb6bbae9019713dfc667f8240bc42c3d 100644
(file)
--- a/
docs/keep_data_small.txt
+++ b/
docs/keep_data_small.txt
@@
-59,7
+59,7
@@
wait
Example 1
One example how to reduce global data usage is in
Example 1
One example how to reduce global data usage is in
-archival/libarchive/decompress_unzip.c:
+archival/libarchive/decompress_
g
unzip.c:
/* This is somewhat complex-looking arrangement, but it allows
* to place decompressor state either in bss or in
/* This is somewhat complex-looking arrangement, but it allows
* to place decompressor state either in bss or in
@@
-87,7
+87,7
@@
take a look at archival/gzip.c. Here all global data is replaced by
single global pointer (ptr_to_globals) to allocated storage.
In order to not duplicate ptr_to_globals in every applet, you can
single global pointer (ptr_to_globals) to allocated storage.
In order to not duplicate ptr_to_globals in every applet, you can
-reuse single common one. It is defined in libbb/
message
s.c
+reuse single common one. It is defined in libbb/
ptr_to_global
s.c
as struct globals *const ptr_to_globals, but the struct globals is
NOT defined in libbb.h. You first define your own struct:
as struct globals *const ptr_to_globals, but the struct globals is
NOT defined in libbb.h. You first define your own struct:
@@
-103,7
+103,15
@@
smaller code. In order to assign it, use SET_PTR_TO_GLOBALS macro:
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G)));
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G)));
-Typically it is done in <applet>_main().
+Typically it is done in <applet>_main(). Another variation is
+to use stack:
+
+int <applet>_main(...)
+{
+#undef G
+ struct globals G;
+ memset(&G, 0, sizeof(G));
+ SET_PTR_TO_GLOBALS(&G);
Now you can reference "globals" by G.a, G.buf and so on, in any function.
Now you can reference "globals" by G.a, G.buf and so on, in any function.