-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
convert all command handlers to variadic functions
Resolves dozens of: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x In traditional C the empty argument list () indicates that a function accepts an arbitrary amount of arguments of arbitary types. A function which takes no arguments must be declared with a (void) prototype instead. nsh has been making elaborate use of this feature by defining command handlers with () and passing arbitrary arguments to handlers depending on the use case. This coding style is not future-proof. In C++, () means "no arguments", the same as (void), and clang is now warning about this C feature going away in C2x, aligning C with C++. Make nsh future-proof by using variadic function prototypes (...) instead of () prototypes. Every handler now uses (int argc, char **argv, ...) as prototype: the argument count, an argument vector, followed by arbitrary arguments which can be extracted using the va_arg(3) function from stdarg.h. The variadic part of the argument list can be used to pass arguments of types other than char * without needing to convert them to strings and back. Using () as function prototype defeats type-checking done by the compiler, and the same is true for variadic arguments. We still need to manually make sure that the correct amount and types of arguments are passed in the variadic part of the handler's argument list. Many handlers already use the argument count + argument vector approach and do not need internal changes, just a new prototype. Some handlers now require use of va_start/va_arg/va_end to access additional arguments. For example, the interfaces handlers were passing an interface name and file descriptor before the argument count/vector. The order of arguments is now swapped, such that interface name and file descriptor get passed as part of the variable argument list. Testing + OK Tom
- Loading branch information
1 parent
c01470d
commit 01bc5d4
Showing
28 changed files
with
894 additions
and
427 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
01bc5d4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks or that