68bff4a07e
Geom utilities (geli(8), glabel(8), gmirror(8), gpart(8), gmirror(8), gmountver(8), etc) all use the geom(8) utility as their back end to process their commands and pass them into the kernel. Creating a new utility requires no more than filling out a template describing the commands and arguments that the utility supports. Consider the specification for the very simple gmountver(8) utility: struct g_command class_commands[] = { { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, { G_OPT_SENTINEL }, "[-v] prov ..." }, { "destroy", G_FLAG_VERBOSE, NULL, { { 'f', "force", NULL, G_TYPE_BOOL }, G_OPT_SENTINEL }, "[-fv] name" }, G_CMD_SENTINEL }; It has just two commands of its own: "create" and "destroy" along with the four standard commands "list", "status", "load", and "unload" provided by the base geom(8) utility. The base geom(8) utility allows each command to use the G_FLAG_VERBOSE flag to specify that a command should accept the -v flag and when the -v flag is given the utility prints "Done." if the command completes successfully. In the above example, both of the commands set the G_FLAG_VERBOSE, so have the -v option available. In addition the "destroy" command accepts the -f boolean flag to force the destruction. If the "destroy" command wanted to also print out verbose information, it would need to explicitly declare its intent by adding a line: { 'v', "verbose", NULL, G_TYPE_BOOL }, Before this change, the geom utility would silently ignore the above line in the configuration file, so it was impossible for the utility to know that the -v flag had been set on the command. With this change a geom command can explicitly specify a -v option with a line as given above and handle it as it would any other option. If both a -v option and G_FLAG_VERBOSE are specified for a command then both types of verbose information will be output when that command is run with -v. MFC after: 1 week Sponsored by: Netflix |
||
---|---|---|
.. | ||
core | ||
misc | ||
Makefile | ||
Makefile.depend |