X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=CODING_STYLE;h=0340ff0fa31e0beb53248e5c28f957532114c304;hp=ca3b5183f901037a1e6b201e13f231f86fa8b9db;hb=bcf88fc3f14867f1cabc911c27b661d738281df0;hpb=601185b43da638b1c74153deae01dbd518680889 diff --git a/CODING_STYLE b/CODING_STYLE index ca3b5183f..0340ff0fa 100644 --- a/CODING_STYLE +++ b/CODING_STYLE @@ -1,5 +1,9 @@ +- 8ch indent, no tabs, except for files in man/ which are 2ch indent, + and still no tabs -- 8ch indent, no tabs +- Don't break code lines too eagerly. We do *not* force line breaks at + 80ch, all of today's screens should be much larger than that. But + then again, don't overdo it, ~140ch should be enough really. - Variables and functions *must* be static, unless they have a prototype, and are supposed to be exported. @@ -15,7 +19,7 @@ - For robustness reasons, destructors should be able to destruct half-initialized objects, too -- Error codes are returned as negative Exxx. i.e. return -EINVAL. There +- Error codes are returned as negative Exxx. e.g. return -EINVAL. There are some exceptions: for constructors, it is OK to return NULL on OOM. For lookup functions, NULL is fine too for "not found". @@ -54,7 +58,7 @@ doing something wrong! - Stay uniform. For example, always use "usec_t" for time - values. Do not usec mix msec, and usec and whatnot. + values. Do not mix usec and msec, and usec and whatnot. - Make use of _cleanup_free_ and friends. It makes your code much nicer to read! @@ -76,6 +80,17 @@ But it is OK if you do not. +- Single-line "if" blocks should not be enclosed in {}. Use this: + + if (foobar) + waldo(); + + instead of this: + + if (foobar) { + waldo(); + } + - Do not write "foo ()", write "foo()". - Please use streq() and strneq() instead of strcmp(), strncmp() where applicable. @@ -152,7 +167,7 @@ function or a "non-logging" function. "Logging" functions do logging on their own, "non-logging" function never log on their own and expect their callers to log. All functions in "library" code, - i.e. in src/shared/ and suchlike must be "non-logging". Everytime a + i.e. in src/shared/ and suchlike must be "non-logging". Every time a "logging" function calls a "non-logging" function, it should log about the resulting errors. If a "logging" function calls another "logging" function, then it should not generate log messages, so @@ -168,7 +183,32 @@ is_main_thread() to detect whether the calling thread is the main thread. -- Option parsing: +- Command line option parsing: - Do not print full help() on error, be specific about the error. - Do not print messages to stdout on error. - Do not POSIX_ME_HARDER unless necessary, i.e. avoid "+" in option string. + +- Do not write functions that clobber call-by-reference variables on + failure. Use temporary variables for these cases and change the + passed in variables only on success. + +- When you allocate a file descriptor, it should be made O_CLOEXEC + right from the beginning, as none of our files should leak to forked + binaries by default. Hence, whenever you open a file, O_CLOEXEC must + be specified, right from the beginning. This also applies to + sockets. Effectively this means that all invocations to: + + a) open() must get O_CLOEXEC passed + b) socket() and socketpair() must get SOCK_CLOEXEC passed + c) recvmsg() must get MSG_CMSG_CLOEXEC set + d) F_DUPFD_CLOEXEC should be used instead of F_DUPFD, and so on + +- We never use the XDG version of basename(). glibc defines it in + libgen.h. The only reason to include that file is because dirname() + is needed. Everytime you need that please immediately undefine + basename(), and add a comment about it, so that no code ever ends up + using the XDG version! + +- Use the bool type for booleans, not integers. One exception: in public + headers (i.e those in src/systemd/sd-*.h) use integers after all, as "bool" + is C99 and in our public APIs we try to stick to C89 (with a few extension).