XRdp Coding Style ================= The coding style used by XRdp is described below. The XRdp project uses astyle (artistic style) to format the code. Astyle requires a configuration file that describes how you want your code formatted. This file is present in the XRdp root directory and is named `astyle_config.as`. Here is how we run the astyle command: astyle --options=/path/to/file/astyle_config.as "*.c" This coding style is a work in progress and is still evolving. Language Standard ----------------- Try to make all code compile with both C and C++ compiler. C++ is more strict, which makes the code safer. Indentation ----------- * 4 spaces per indent * No tabs for any indents ☞ if (fd < 0) { return -1; } Line wrapping ------------- * Keep lines not longer than 80 chars * Align wrapped argument to the first argument ☞ log_message("connection aborted: error %d", ret); Variable names -------------- * Use lowercase with underscores as needed * Don't use camelCase * Preprocessor constants should be uppercase ☞ #define BUF_SIZE 1024 int fd; int bytes_in_stream; Variable declaration -------------------- * Each variable is declared on a separate line ☞ int i; int j; Whitespace ---------- * Use blank lines to group statements * Use at most one empty line between statements * For pointers and references, use a single space before * or & but not after * Use one space after a cast * No space before square brackets ☞ char *cptr; int *iptr; cptr = (char *) malloc(1024); write(fd, &buf[12], 16); Function declarations --------------------- * Use newline before function name ☞ static int value_ok(int val) { return (val >= 0); } Braces ------ * Opening brace is always on a separate line * Align braces with the line preceding the opening brace ☞ struct stream { int flags; char *data; }; void process_data(struct stream *s) { if (stream == NULL) { return; } } `if` statements --------------- * Always use braces * Put both braces on separate lines ☞ if (val <= 0xff) { out_uint8(s, val); } else if (val <= 0xffff) { out_uint16_le(s, val); } else { out_uint32_le(s, val); } `for` statements ---------------- * Always use braces * Put both braces on separate lines ☞ for (i = 0; i < 10; i++) { printf("i = %d\n", i); } `while` and `do while` statements --------------------------------- * Always use braces * `while` after the closing brace is on the same line ☞ while (cptr) { cptr—; } do { cptr--; } while (cptr); `switch` statements ------------------- * Indent `case` once * Indent statements under `case` one more time * Put both braces on separate lines ☞ switch (cmd) { case READ: read(fd, buf, 1024); break; default: printf("bad cmd\n"); } Comments -------- Use /* */ for comments Don't use //