Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/docs
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- Location:
- branches/2.2.9/mindi-busybox/docs
- Files:
-
- 10 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/docs/busybox_footer.pod
r1765 r2725 34 34 listed here so you can obtain your bit of eternal glory. If you should be 35 35 listed here, or the description of what you have done needs more detail, or is 36 incor ect, please send in an update.36 incorrect, please send in an update. 37 37 38 38 … … 40 40 41 41 Emanuele Aina <emanuele.aina@tiscali.it> 42 42 run-parts 43 43 44 44 =for html <br> … … 98 98 Jordan Crouse <jordan@cosmicpenguin.net> 99 99 100 100 ipcalc 101 101 102 102 =for html <br> … … 147 147 Stephan Linz <linz@li-pro.net> 148 148 149 149 ipcalc, Red Hat equivalence 150 150 151 151 =for html <br> … … 159 159 Glenn McGrath <bug1@iinet.net.au> 160 160 161 Common unarch ving code and unarchiving applets, ifupdown, ftpgetput,161 Common unarchiving code and unarchiving applets, ifupdown, ftpgetput, 162 162 nameif, sed, patch, fold, install, uudecode. 163 163 Various bugfixes, review and apply numerous patches. … … 251 251 Tito Ragusa <farmatito@tiscali.it> 252 252 253 devfsd and size optimizations in strings, openvt and deallocvt. 253 devfsd and size optimizations in strings, openvt and deallocvt. 254 255 =for html <br> 256 257 Paul Fox <pgf@foxharp.boston.ma.us> 258 259 vi editing mode for ash, various other patches/fixes 260 261 =for html <br> 262 263 Roberto A. Foglietta <me@roberto.foglietta.name> 264 265 port: dnsd 266 267 =for html <br> 268 269 Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> 270 271 misc 272 273 =for html <br> 274 275 Mike Frysinger <vapier@gentoo.org> 276 277 initial e2fsprogs, printenv, setarch, sum, misc 278 279 =for html <br> 280 281 Jie Zhang <jie.zhang@analog.com> 282 283 fixed two bugs in msh and hush (exitcode of killed processes) 254 284 255 285 =cut 256 -
branches/2.2.9/mindi-busybox/docs/busybox_header.pod
r1765 r2725 7 7 =head1 SYNTAX 8 8 9 BusyBox <function> [arguments...] # or9 busybox <applet> [arguments...] # or 10 10 11 < function> [arguments...]# if symlinked11 <applet> [arguments...] # if symlinked 12 12 13 13 =head1 DESCRIPTION … … 46 46 is just a single BusyBox binary, but that single binary acts like a large 47 47 number of utilities. This allows BusyBox to be smaller since all the built-in 48 utility programs (we call them applets) can share code for many common operations. 48 utility programs (we call them applets) can share code for many common 49 operations. 49 50 50 51 You can also invoke BusyBox by issuing a command as an argument on the … … 73 74 =head1 COMMON OPTIONS 74 75 75 Most BusyBox commands support the B<--help> argument to provide a terse runtime76 Most BusyBox applets support the B<--help> argument to provide a terse runtime 76 77 description of their behavior. If the CONFIG_FEATURE_VERBOSE_USAGE option has 77 78 been enabled, more detailed usage information will also be available. … … 79 80 =head1 COMMANDS 80 81 81 Currently defined functions include: 82 82 Currently available applets include: -
branches/2.2.9/mindi-busybox/docs/contributing.txt
r821 r2725 18 18 19 19 20 Checkout the Latest Code from CVS21 ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~20 Checkout the Latest Code 21 ~~~~~~~~~~~~~~~~~~~~~~~~ 22 22 23 23 This is a necessary first step. Please do not try to work with the last … … 26 26 Don't make your work obsolete before you start! 27 27 28 For information on how to check out Busybox from CVS, please look at the28 For information on how to check out Busybox development tree, please look at the 29 29 following links: 30 30 31 http://busybox.net/cvs_anon.html 32 http://busybox.net/cvs_howto.html 31 http://busybox.net/source.html 33 32 34 33 … … 88 87 filesystem under the sun. (fsck_minix.c and mkfs_minix.c are living on 89 88 borrowed time.) There are far too many of these tools out there. Use 90 the upstream version. Not everything has to be part of Busybox. 91 92 - Any partitioning tools: Partitioning a device is typically done once and 93 only once, and tools which do this generally do not need to reside on the 94 target device (esp a flash device). If you need a partitioning tool, grab 95 one (such as fdisk, sfdisk, or cfdisk from util-linux) and use that, but 96 don't try to merge it into busybox. These are nasty and complex and we 97 don't want to maintain them. 89 the upstream version. Rationale: bugs in these tools can destroy 90 vast amounts of data. Keeping up with filesystem format development 91 is impractical (especially in the area of keeping fsck tool safe 92 and up-to-date). 98 93 99 94 - Any disk, device, or media-specific tools: Use the -utils or -tools package … … 103 98 independent. Do not send us tools that cannot be used across multiple 104 99 platforms / arches. 105 106 - Any daemons that are not essential to basic system operation. To date, only107 syslogd and klogd meet this requirement. We do not need a web server, an108 ftp daemon, a dhcp server, a mail transport agent or a dns resolver. If you109 need one of those, you are welcome to ask the folks on the mailing list for110 recommendations, but please don't bloat up Busybox with any of these.111 100 112 101 … … 136 125 137 126 $ date 138 llegal instruction127 Illegal instruction 139 128 140 129 I am using Debian unstable, kernel version 2.4.19-rmk1 on an Netwinder, 141 and the latest uClibc from CVS. Thanks for the wonderful program!130 and the latest uClibc from CVS. 142 131 143 132 -Diligent … … 200 189 These are dirty jobs, but somebody's gotta do 'em. 201 190 202 - Converting applets to use getopt() for option processing. Type 'find -name203 '*.c'|grep -L getopt' to get a listing of the applets that currently don't204 use getopt. If a .c file processes no options, it should have a line that205 reads: /* no options, no getopt */ somewhere in the file.206 207 - Replace any "naked" calls to malloc, calloc, realloc, str[n]dup, fopen with208 the x* equivalents found in libbb/xfuncs.c.209 210 191 - Security audits: 211 192 http://www.securityfocus.com/popups/forums/secprog/intro.shtml … … 236 217 Other useful links: 237 218 238 - the comp.lang.c FAQ: http:// web.onetelnet.ch/~twolf/tw/c/index.html#Sources219 - the comp.lang.c FAQ: http://home.datacomm.ch/t_wolf/tw/c/index.html#Sources 239 220 240 221 … … 249 230 ~~~~~~~~~~~~~~ 250 231 251 If you've got anonymous CVS access set up, making a patch is simple. Just make 252 sure you're in the busybox/ directory and type 'cvs diff -bwu > mychanges.patch'. 232 If you've got anonymous Git access set up, making a patch is simple. Just make 233 sure you're in the busybox/ directory and type: 234 235 git diff -b -w > mychanges.patch 236 253 237 You can send the resulting .patch file to the mailing list with a description 254 238 of what it does. (But not before you test it! See the next section for some … … 258 242 Also, feel free to help test other people's patches and reply to them with 259 243 comments. You can apply a patch by saving it into your busybox/ directory and 260 typing 'patch < mychanges.patch'. Then you can recompile, see if it runs, test 261 if it works as advertised, and post your findings to the mailing list. 244 typing: 245 246 patch -p1 < mychanges.patch 247 248 Then you can recompile, see if it runs, test if it works as advertised, and 249 post your findings to the mailing list. 262 250 263 251 NOTE: Please do not include extraneous or irrelevant changes in your patches. … … 272 260 273 261 It's considered good form to test your new feature before you submit a patch 274 to the mailing list, and especially before you commit a change to CVS. Here262 to the mailing list, and especially before you push a change to Git. Here 275 263 are some guidelines on how to test your changes. 276 264 … … 368 356 369 357 We've made strident efforts to put a useful "collaboration" infrastructure in 370 place in the form of mailing lists, the bug tracking system, and CVS. Please358 place in the form of mailing lists, the bug tracking system, and Git. Please 371 359 use these resources. 372 360 … … 393 381 394 382 395 Committing Changes to CVS 396 ---------------------- ---383 Pushing Changes to Git 384 ---------------------- 397 385 398 386 If you submit several patches that demonstrate that you are a skilled and wise 399 coder, you may be invited to become a committer, thus enabling you to commit400 changes directly to CVS. This is nice because you don't have to wait for401 someone else to commityour change for you, you can just do it yourself.387 coder, you may be invited to become a committer, thus enabling you to push 388 changes directly to Git. This is nice because you don't have to wait for 389 someone else to push your change for you, you can just do it yourself. 402 390 403 391 But note that this is a privilege that comes with some responsibilities. You 404 should test your changes before you committhem. You should also talk to an392 should test your changes before you push them. You should also talk to an 405 393 applet maintainer before you make any kind of sweeping changes to somebody 406 394 else's code. Big changes should still go to the mailing list first. Remember, 407 395 being wise, polite, and discreet is more important than being clever. 408 396 409 410 When To Commit 411 ~~~~~~~~~~~~~~ 412 413 Generally, you should feel free to commit a change if: 397 For more information on Git push access, see: 398 399 http://busybox.net/developer.html 400 401 402 When To Push 403 ~~~~~~~~~~~~ 404 405 Generally, you should feel free to push a change if: 414 406 415 407 - Your changes are small and don't touch many files … … 418 410 - It's obviously the Right Thing 419 411 420 The more of the above are true, the better it is to just commita change421 directly to CVS.422 423 424 When Not To Commit425 ~~~~~~~~~~~~~~~~ ~~426 427 Even if you have commit rights, you should probably still post a patch to the412 The more of the above are true, the better it is to just push a change 413 directly to Git. 414 415 416 When Not To Push 417 ~~~~~~~~~~~~~~~~ 418 419 Even if you have push access, you should probably still post a patch to the 428 420 mailing list if: 429 421 … … 434 426 435 427 The more of the above are true, the better it is to post a patch to the 436 mailing list instead of committing.428 mailing list instead of pushing. 437 429 438 430 … … 446 438 good-natured bunch and will work with you to help get your patches into shape 447 439 or help you make contributions. 448 449 -
branches/2.2.9/mindi-busybox/docs/keep_data_small.txt
r1765 r2725 60 60 61 61 One example how to reduce global data usage is in 62 archival/lib unarchive/decompress_unzip.c:62 archival/libarchive/decompress_unzip.c: 63 63 64 64 /* This is somewhat complex-looking arrangement, but it allows … … 100 100 ptr_to_globals is declared as constant pointer. 101 101 This helps gcc understand that it won't change, resulting in noticeably 102 smaller code. In order to assign it, use PTR_TO_GLOBALS macro:103 104 PTR_TO_GLOBALS = xzalloc(sizeof(G));102 smaller code. In order to assign it, use SET_PTR_TO_GLOBALS macro: 103 104 SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); 105 105 106 106 Typically it is done in <applet>_main(). … … 144 144 one of above methods is not worth the resulting code obfuscation. 145 145 If you have less than ~300 bytes of global data - don't bother. 146 147 148 Finding non-shared duplicated strings 149 150 strings busybox | sort | uniq -c | sort -nr 146 151 147 152 … … 215 220 634416 2736 23856 661008 a1610 busybox 216 221 632580 2672 22944 658196 a0b14 busybox_noalign 222 223 224 225 Keeping code small 226 227 Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once", 228 produce "make bloatcheck", see the biggest auto-inlined functions. 229 Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE 230 to some of these functions. In 1.16.x timeframe, the results were 231 (annotated "make bloatcheck" output): 232 233 function old new delta 234 expand_vars_to_list - 1712 +1712 win 235 lzo1x_optimize - 1429 +1429 win 236 arith_apply - 1326 +1326 win 237 read_interfaces - 1163 +1163 loss, leave w/o NOINLINE 238 logdir_open - 1148 +1148 win 239 check_deps - 1148 +1148 loss 240 rewrite - 1039 +1039 win 241 run_pipe 358 1396 +1038 win 242 write_status_file - 1029 +1029 almost the same, leave w/o NOINLINE 243 dump_identity - 987 +987 win 244 mainQSort3 - 921 +921 win 245 parse_one_line - 916 +916 loss 246 summarize - 897 +897 almost the same 247 do_shm - 884 +884 win 248 cpio_o - 863 +863 win 249 subCommand - 841 +841 loss 250 receive - 834 +834 loss 251 252 855 bytes saved in total. 253 254 scripts/mkdiff_obj_bloat may be useful to automate this process: run 255 "scripts/mkdiff_obj_bloat NORMALLY_BUILT_TREE FORCED_NOINLINE_TREE" 256 and select modules which shrank. -
branches/2.2.9/mindi-busybox/docs/mdev.txt
r1765 r2725 16 16 17 17 Here's a typical code snippet from the init script: 18 [0] mount -t proc proc /proc 18 19 [1] mount -t sysfs sysfs /sys 19 [2] echo / bin/mdev > /proc/sys/kernel/hotplug20 [2] echo /sbin/mdev > /proc/sys/kernel/hotplug 20 21 [3] mdev -s 22 23 Alternatively, without procfs the above becomes: 24 [1] mount -t sysfs sysfs /sys 25 [2] sysctl -w kernel.hotplug=/sbin/mdev 26 [3] mdev -s 27 21 28 22 29 Of course, a more "full" setup would entail executing this before the previous 23 30 code snippet: 24 [4] mount -t tmpfs mdev/dev31 [4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev 25 32 [5] mkdir /dev/pts 26 33 [6] mount -t devpts devpts /dev/pts 27 34 28 35 The simple explanation here is that [1] you need to have /sys mounted before 29 executing mdev. Then you [2] instruct the kernel to execute / bin/mdev whenever36 executing mdev. Then you [2] instruct the kernel to execute /sbin/mdev whenever 30 37 a device is added or removed so that the device node can be created or 31 38 destroyed. Then you [3] seed /dev with all the device nodes that were created … … 45 52 46 53 The file has the format: 47 <device regex> <uid>:<gid> <octal permissions> 54 <device regex> <uid>:<gid> <permissions> 55 or @<maj[,min1[-min2]]> <uid>:<gid> <permissions> 56 48 57 For example: 49 58 hd[a-z][0-9]* 0:3 660 50 59 51 60 The config file parsing stops at the first matching line. If no line is … … 54 63 .* 1:1 777 55 64 65 You can rename/move device nodes by using the next optional field. 66 <device regex> <uid>:<gid> <permissions> [=path] 67 So if you want to place the device node into a subdirectory, make sure the path 68 has a trailing /. If you want to rename the device node, just place the name. 69 hda 0:3 660 =drives/ 70 This will move "hda" into the drives/ subdirectory. 71 hdb 0:3 660 =cdrom 72 This will rename "hdb" to "cdrom". 73 74 Similarly, ">path" renames/moves the device but it also creates 75 a direct symlink /dev/DEVNAME to the renamed/moved device. 76 77 You can also prevent creation of device nodes with the 4th field as "!": 78 tty[a-z]. 0:0 660 ! 79 pty[a-z]. 0:0 660 ! 80 56 81 If you also enable support for executing your own commands, then the file has 57 82 the format: 58 <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] 83 <device regex> <uid>:<gid> <permissions> [=path] [@|$|*<command>] 84 or 85 <device regex> <uid>:<gid> <permissions> [>path] [@|$|*<command>] 86 or 87 <device regex> <uid>:<gid> <permissions> [!] [@|$|*<command>] 88 89 For example: 90 ---8<--- 91 # block devices 92 ([hs]d[a-z]) root:disk 660 >disk/%1/0 93 ([hs]d[a-z])([0-9]+) root:disk 660 >disk/%1/%2 94 mmcblk([0-9]+) root:disk 660 >disk/mmc/%1/0 95 mmcblk([0-9]+)p([0-9]+) root:disk 660 >disk/mmc/%1/%2 96 # network devices 97 (tun|tap) root:network 660 >net/%1 98 ---8<--- 99 59 100 The special characters have the meaning: 60 101 @ Run after creating the device. … … 63 104 64 105 The command is executed via the system() function (which means you're giving a 65 command to the shell), so make sure you have a shell installed at /bin/sh. 106 command to the shell), so make sure you have a shell installed at /bin/sh. You 107 should also keep in mind that the kernel executes hotplug helpers with stdin, 108 stdout, and stderr connected to /dev/null. 66 109 67 110 For your convenience, the shell env var $MDEV is set to the device name. So if 68 the device 'hdc'was matched, MDEV would be set to "hdc".111 the device "hdc" was matched, MDEV would be set to "hdc". 69 112 70 113 ---------- … … 77 120 filename of the firmware which mdev will load out of /lib/firmware/ and into 78 121 the kernel via the sysfs interface. The exact filename is hardcoded in the 79 kernel, so look there if you need to want to know what to name the file in 80 userspace. 122 kernel, so look there if you need to know how to name the file in userspace. 123 124 ------------ 125 SEQUENCING 126 ------------ 127 128 Kernel does not serialize hotplug events. It increments SEQNUM environmental 129 variable for each successive hotplug invocation. Normally, mdev doesn't care. 130 This may reorder hotplug and hot-unplug events, with typical symptoms of 131 device nodes sometimes not created as expected. 132 133 However, if /dev/mdev.seq file is found, mdev will compare its 134 contents with SEQNUM. It will retry up to two seconds, waiting for them 135 to match. If they match exactly (not even trailing '\n' is allowed), 136 or if two seconds pass, mdev runs as usual, then it rewrites /dev/mdev.seq 137 with SEQNUM+1. 138 139 IOW: this will serialize concurrent mdev invocations. 140 141 If you want to activate this feature, execute "echo >/dev/mdev.seq" prior to 142 setting mdev to be the hotplug handler. This writes single '\n' to the file. 143 NB: mdev recognizes /dev/mdev.seq consisting of single '\n' character 144 as a special case. IOW: this will not make your first hotplug event 145 to stall for two seconds. -
branches/2.2.9/mindi-busybox/docs/new-applet-HOWTO.txt
r1765 r2725 9 9 Thomas Lundquist - Trying to keep it updated. 10 10 11 When doing this you should consider using the latest svn trunk.12 This is a good thing if you plan to getting it commit ed into mainline.11 When doing this you should consider using the latest git HEAD. 12 This is a good thing if you plan to getting it committed into mainline. 13 13 14 14 Initial Write … … 20 20 And be sure to put it in <applet>.c. Usage does not have to be taken care of by 21 21 your applet. 22 Make sure to #include "libbb.h" as the first include file in your applet so 23 the bb_config.h and appropriate platform specific files are included properly. 22 Make sure to #include "libbb.h" as the first include file in your applet. 24 23 25 24 For a new applet mu, here is the code that would go in mu.c: … … 37 36 * Copyright (C) [YEAR] by [YOUR NAME] <YOUR EMAIL> 38 37 * 39 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.38 * Licensed under GPLv2, see file LICENSE in this source tree. 40 39 */ 41 40 … … 43 42 #include "other.h" 44 43 45 int mu_main(int argc, char **argv) ;44 int mu_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 46 45 int mu_main(int argc, char **argv) 47 46 { 48 47 int fd; 48 ssize_t n; 49 49 char mu; 50 50 … … 99 99 100 100 Add <function_name>.o in the right alphabetically sorted place 101 in libbb/Kbuild. You should look at the conditional part of102 libbb/Kbuild aswell.101 in libbb/Kbuild.src. You should look at the conditional part of 102 libbb/Kbuild.src as well. 103 103 104 104 You should also try to find a suitable place in include/libbb.h for … … 106 106 ifdefs to include or not. 107 107 108 You can look at libbb/Config. inand try to find out if the function is109 tun eable and add it there if it is.108 You can look at libbb/Config.src and try to find out if the function is 109 tunable and add it there if it is. 110 110 111 111 … … 118 118 sorted alphabetically. 119 119 120 Add the applet to Kbuild in the chosen directory:120 Add the applet to Kbuild.src in the chosen directory: 121 121 122 122 lib-$(CONFIG_MU) += mu.o 123 123 124 Add the applet to Config. inin the chosen directory:124 Add the applet to Config.src in the chosen directory: 125 125 126 config CONFIG_MU126 config MU 127 127 bool "MU" 128 128 default n … … 134 134 --------------- 135 135 136 Next, add usage information for you applet to include/usage. h.136 Next, add usage information for you applet to include/usage.src.h. 137 137 This should look like the following: 138 138 … … 149 149 line (-[abcde]) and a detailed description of each flag should go in the 150 150 mu_full_usage section, one flag per line. (Numerous examples of this 151 currently exist in usage. h.)151 currently exist in usage.src.h.) 152 152 153 153 … … 155 155 ------------ 156 156 157 Next, add an entry to include/applets. h. Be *sure* to keep the list157 Next, add an entry to include/applets.src.h. Be *sure* to keep the list 158 158 in alphabetical order, or else it will break the binary-search lookup 159 159 algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily: 160 160 161 Be sure to read the top of applets. h before adding your applet.161 Be sure to read the top of applets.src.h before adding your applet. 162 162 163 163 /* all programs above here are alphabetically "less than" 'mu' */ 164 USE_MU(APPLET(mu, _BB_DIR_USR_BIN, _BB_SUID_NEVER))164 IF_MU(APPLET(mu, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 165 165 /* all programs below here are alphabetically "greater than" 'mu' */ 166 166 … … 169 169 ---------------------- 170 170 171 Then create a diff by adding the new files with svn(remember your libbb files)172 svnadd <where you put it>/mu.c171 Then create a diff by adding the new files to git (remember your libbb files) 172 git add <where you put it>/mu.c 173 173 eventually also: 174 svnadd libbb/function.c174 git add libbb/function.c 175 175 then 176 svn diff 176 git commit 177 git format-patch HEAD^ 177 178 and send it to the mailing list: 178 179 busybox@busybox.net -
branches/2.2.9/mindi-busybox/docs/nofork_noexec.txt
r1765 r2725 3 3 Unix shells traditionally execute some commands internally in the attempt 4 4 to dramatically speed up execution. It will be slow as hell if for every 5 "echo blah" shell will fork and exec /bin/echo. Forthis end, shells5 "echo blah" shell will fork and exec /bin/echo. To this end, shells 6 6 have to _reimplement_ these commands internally. 7 7 … … 12 12 13 13 Applet will be subject to NOFORK/NOEXEC tricks if it is marked as such 14 in applets.h. CONFIG_FEATURE_PREFER_APPLETS is a config option which14 in applets.h. FEATURE_PREFER_APPLETS is a config option which 15 15 globally enables usage of NOFORK/NOEXEC tricks. 16 If it is enabled, FEATURE_SH_STANDALONE can be enabled too, 17 and then shells will use NOFORK/NOEXEC tricks for ordinary commands. 18 NB: shell builtins use these tricks regardless of FEATURE_SH_STANDALONE 19 or FEATURE_PREFER_APPLETS. 16 20 17 If you want to call a program and wait for it, use spawn_and_wait(argv). 18 It will check whether argv[0] is an applet name and will optionally 19 do NOFORK/NOEXEC thing. 21 In C, if you want to call a program and wait for it, use 22 spawn_and_wait(argv), BB_EXECVP(prog,argv) or BB_EXECLP(prog,argv0,...). 23 They check whether program name is an applet name and optionally 24 do NOFORK/NOEXEC thing depending on configuration. 20 25 21 NOEXEC 26 27 NOEXEC 22 28 23 29 NOEXEC applet should work correctly if another applet forks and then … … 33 39 34 40 NOEXEC applets save only one half of fork+exec overhead. 35 NOEXEC trick is disabled for NOMMU compile.41 NOEXEC trick is disabled for NOMMU build. 36 42 37 NOFORK 43 44 NOFORK 38 45 39 46 NOFORK applet should work correctly if another applet simply runs … … 56 63 allocation. All other allocations should use malloc[_or_warn](). 57 64 After first allocation, you cannot use any xfuncs. 65 Otherwise, failing xfunc will return to caller applet 66 without freeing malloced data! 58 67 * All allocated data, opened files, signal handlers, termios settings, 59 68 O_NONBLOCK flags etc should be freed/closed/restored prior to return. -
branches/2.2.9/mindi-busybox/docs/style-guide.txt
r1765 r2725 253 253 254 254 - Enums, macros, and constant variables are occasionally written in all 255 upper-case with words optionally sep eratedyby underscores (i.e. FIFO_TYPE,255 upper-case with words optionally separated by underscores (i.e. FIFO_TYPE, 256 256 ISBLKDEV()). 257 257 … … 423 423 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 424 424 425 There's a right way and a wrong way to test for st ing equivalence with425 There's a right way and a wrong way to test for string equivalence with 426 426 strcmp(): 427 427
Note:
See TracChangeset
for help on using the changeset viewer.