* General For this project, we are using the Linux kernel coding style, with a bit of latitude, as described below. The kernel style can be quickly summarized like this: - text width is 80 columns - indentation by tabs - tab width is 8 spaces - identifiers are lower case with underscores - macros are upper case - braces and spacing follow K&R style * Using checkpatch.pl You can use the Linux kernel's checkpatch.pl script to sanity check your work. Sometimes that script warns about code which is in fact fine, so use your good taste. I use the following code as my pre-commit hook. #+BEGIN_EXAMPLE if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi git diff --cached $against -- | ../linux/scripts/checkpatch.pl \ --ignore BRACES \ --ignore PREFER_PR_LEVEL \ --no-signoff \ - #+END_EXAMPLE * Exceptions ** Use of lowerCamelCase and UpperCamelCase The messages and data sets in the PTP and gPTP standards are full of stuff that looks a bit like C-language pseudo code, and all this is unfortunately in camel case. In those cases where the linuxptp code is closely related to these fields, we retain the camel case, even though it hurts our eyes to look at. The alternative would have been to convert the field names into lower case underscore, but that would have over extended the already ridiculously long names, such as logMinPdelayReqInterval and observedParentOffsetScaledLogVariance. The exception permitting CamelCase applies primarily to the declarations found in the following header files. - ddt.h - ds.h - msg.h - pdt.h - tlv.h ** Braces around single if-else bodies In the Linux kernel style, if-else bodies containing just a single line are not placed within curly braces. Therefore you will often see code like the following example. #+BEGIN_EXAMPLE if (!x) do_zero(); else do_nonzero(); #+END_EXAMPLE In this situation we still like to see the braces, the rationale being that the if-else bodies tend to accumulate new statements over time, especially on the error path. Using the strict kernel style thus results in patches (and annotated views) that show a bogus change in the test expression, and this requires extra mental effort when reviewing patches, just to realize that no logical change has occurred. Additionally, having the braces hardly uses up more vertical space than not having them, so we generally include them as shown in the following example. #+BEGIN_EXAMPLE if (!x) { do_zero(); } else { do_nonzero(); } #+END_EXAMPLE ** Line lengths We try to keep the line length to 80 characters wide. However, sometimes it happens that, no matter how hard we try, we find ourselves going a bit over that limit. This is especially true in connection with the long CamelCase identifiers mentioned above. Breaking a statement over two lines can look even worse than having one line too long, so please exercise judgement when applying the line length rule.