mirror of
https://github.com/sheumann/hush.git
synced 2024-11-05 21:04:56 +00:00
Added some words on use of getopt in applets.
This commit is contained in:
parent
323434be42
commit
9ead68975c
@ -197,6 +197,11 @@ Janitorial Work
|
|||||||
|
|
||||||
These are dirty jobs, but somebody's gotta do 'em.
|
These are dirty jobs, but somebody's gotta do 'em.
|
||||||
|
|
||||||
|
- Converting applets to use getopt() for option processing. Type 'grep -L
|
||||||
|
getopt *.c' to get a listing of the applets that currently don't use
|
||||||
|
getopt. If a .c file processes no options, it should have a line that
|
||||||
|
reads: /* no options, no getopt */ somewhere in the file.
|
||||||
|
|
||||||
- Security audits:
|
- Security audits:
|
||||||
http://www.securityfocus.com/frames/?content=/forums/secprog/secure-programming.html
|
http://www.securityfocus.com/frames/?content=/forums/secprog/secure-programming.html
|
||||||
|
|
||||||
|
@ -26,7 +26,9 @@ Here is the order in which code should be laid out in a file:
|
|||||||
- commented author name and email address(es)
|
- commented author name and email address(es)
|
||||||
- commented GPL boilerplate
|
- commented GPL boilerplate
|
||||||
- commented longer description / notes for the program (if needed)
|
- commented longer description / notes for the program (if needed)
|
||||||
- #includes and #defines
|
- #includes of .h files with angle brackets (<>) around them
|
||||||
|
- #includes of .h files with quotes ("") around them
|
||||||
|
- #defines (if any, note the section below titled "Avoid the Preprocessor")
|
||||||
- const and global variables
|
- const and global variables
|
||||||
- function declarations (if necessary)
|
- function declarations (if necessary)
|
||||||
- function implementations
|
- function implementations
|
||||||
@ -607,3 +609,45 @@ illustrates emphasizing logical blocks:
|
|||||||
/* clean up */
|
/* clean up */
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Processing Options with getopt
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If your applet needs to process command-line switches, please use getopt() to
|
||||||
|
do so. Numerous examples can be seen in many of the existing applets, but
|
||||||
|
basically it boils down to two things: at the top of the .c file, have this
|
||||||
|
line in the midst of your #includes:
|
||||||
|
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
|
And a code block similar to the following near the top of your applet_main()
|
||||||
|
routine:
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "abc")) > 0) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'a':
|
||||||
|
do_a_opt = 1;
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
do_b_opt = 1;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
do_c_opt = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
show_usage(); /* in utility.c */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
If your applet takes no options (such as 'init'), there should be a line
|
||||||
|
somewhere in the file reads:
|
||||||
|
|
||||||
|
/* no options, no getopt */
|
||||||
|
|
||||||
|
That way, when people go grepping to see which applets need to be converted to
|
||||||
|
use getopt, they won't get false positives.
|
||||||
|
|
||||||
|
Additional Note: Do not use the getopt_long library function and do not try to
|
||||||
|
hand-roll your own long option parsing. Busybox applets should only support
|
||||||
|
short options, plus explanations and examples in usage.h.
|
||||||
|
Loading…
Reference in New Issue
Block a user