| Every project has its coding style, and kmod is not an exception. This | |
| document describes the preferred coding style for kmod code, in order to keep | |
| some level of consistency among developers so that code can be easily | |
| understood and maintained, and also to help your code survive under | |
| maintainer's fastidious eyes so that you can get a passport for your patch | |
| ASAP. | |
| First of all, kmod coding style must follow every rule for Linux kernel | |
| (http://www.kernel.org/doc/Documentation/CodingStyle). There also exists a tool | |
| named checkpatch.pl to help you check the compliance with it. Just type | |
| "checkpatch.pl --no-tree patch_name" to check your patch. In theory, you need | |
| to clean up all the warnings and errors except this one: "ERROR: Missing | |
| Signed-off-by: line(s)". kmod does not used Signed-Off lines, so including | |
| them is actually an error. In certain circumstances one can ignore the 80 | |
| character per line limit. This is generally only allowed if the alternative | |
| would make the code even less readable. | |
| Besides the kernel coding style above, kmod coding style is heavily based on | |
| oFono's and BlueZ's. Below some basic rules: | |
| 1) Wrap line at 80 char limit. | |
| There are a few exceptions: | |
| - Headers may or may not wrap | |
| - If it's a string that is hitting the limit, it's preferred not to break | |
| in order to be able to grep for that string. E.g: | |
| err = my_function(ctx, "this is a long string that will pass the 80chr limit"); | |
| - If code would become unreadable if line is wrapped | |
| - If there's only one argument to the function, don't put it alone in a | |
| new line. | |
| Align the wrapped line either with tabs (BlueZ, oFono, etc) or tab + spaces | |
| (kernel), at your discretion. Kernel's is preferred. | |
| 2) It's better to return/exit early in a function than having a really long | |
| "if (...) { }". Example: | |
| if (x) { // worse | if (!x) // better | |
| ... | return b; | |
| ... | | |
| ... | ... | |
| ... | ... | |
| ... | ... | |
| ... | ... | |
| ... | ... | |
| ... | ... | |
| } else { | ... | |
| return b; | return a; | |
| } | | |
| | | |
| return a; | | |
| 3) Don't initialize variable unnecessarily | |
| When declaring a variable, try not to initialize it unless necessary. | |
| Example: | |
| int i = 1; // wrong | |
| for (i = 0; i < 3; i++) { | |
| } |