public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
From: Bastien Nocera <hadess@hadess.net>
To: linux-bluetooth@vger.kernel.org
Subject: [BlueZ v2 4/7] doc: Port coding-style.txt to RST
Date: Tue, 20 Jan 2026 18:18:49 +0100	[thread overview]
Message-ID: <20260120172034.3463151-5-hadess@hadess.net> (raw)
In-Reply-To: <20260120172034.3463151-1-hadess@hadess.net>

---
 doc/coding-style.rst | 349 +++++++++++++++++++++++++++++++++++++++++++
 doc/coding-style.txt | 279 ----------------------------------
 2 files changed, 349 insertions(+), 279 deletions(-)
 create mode 100644 doc/coding-style.rst
 delete mode 100644 doc/coding-style.txt

diff --git a/doc/coding-style.rst b/doc/coding-style.rst
new file mode 100644
index 000000000000..91250e867f09
--- /dev/null
+++ b/doc/coding-style.rst
@@ -0,0 +1,349 @@
+==================
+BlueZ coding style
+==================
+
+Every project has its coding style, and BlueZ is not an exception. This
+document describes the preferred coding style for BlueZ code, in order to keep
+some level of consistency among developers so that code can be easily
+understood and maintained.
+
+First of all, BlueZ coding style must follow every rule for Linux kernel
+(https://www.kernel.org/doc/Documentation/process/coding-style.rst). 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)``. BlueZ does not used ``Signed-off-by`` 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, BlueZ has special flavors for its own.
+Some of them are mandatory (marked as ``M``), while some others are optional
+(marked as ``O``), but generally preferred.
+
+M1: Blank line before and after an if/while/do/for statement
+------------------------------------------------------------
+
+There should be a blank line before ``if`` statement unless the ``if`` is nested and
+not preceded by an expression or variable declaration.
+
+Example:
+1)
+
+.. code-block:: C
+
+        a = 1;
+        if (b) {  // wrong
+
+2)
+
+.. code-block:: C
+
+        a = 1
+
+        if (b) {
+        }
+        a = 2;	// wrong
+
+3)
+
+.. code-block:: C
+
+        if (a) {
+	        if (b)  // correct
+
+4)
+
+.. code-block:: C
+
+        b = 2;
+
+        if (a) {	// correct
+
+        }
+
+        b = 3;
+
+The only exception to this rule applies when a variable is being checked for
+errors as such:
+
+.. code-block:: C
+
+        err = stat(filename, &st);
+        if (err || !S_ISDIR(st.st_mode))
+	        return;
+
+M2: Multiple line comment
+-------------------------
+
+If your comment has more than one line, please start it from the second line.
+
+Example:
+
+.. code-block:: C
+
+        /*
+         * first line comment	// correct
+         * ...
+         * last line comment
+         */
+
+M3: Space before and after operator
+-----------------------------------
+
+There should be a space before and after each operator.
+
+Example:
+
+.. code-block:: C
+
+        a + b;  // correct
+
+
+M4: Wrap long lines
+-------------------
+
+If your condition in ``if``, ``while``, ``for`` statement or a function declaration is too
+long to fit in one line, the new line needs to be indented not aligned with the
+body.
+
+Example:
+1)
+
+.. code-block:: C
+
+        if ((adapter->supported_settings & MGMT_SETTING_SSP) &&
+        	!(adapter->current_settings & MGMT_SETTING_SSP)) // wrong
+
+2)
+
+.. code-block:: C
+
+        if ((adapter->supported_settings & MGMT_SETTING_SSP) &&
+	        			!(adapter->current_settings & MGMT_SETTING_SSP))
+
+3)
+
+.. code-block:: C
+
+        void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
+	        			 btd_adapter_pin_cb_t cb) // wrong
+
+4)
+
+.. code-block:: C
+
+        void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
+	        						btd_adapter_pin_cb_t cb)
+
+The referred style for line wrapping is to indent as far as possible to the
+right without hitting the 80 columns limit.
+
+M5: Space when doing type casting
+---------------------------------
+
+There should be a space between new type and variable.
+
+Example:
+1)
+
+.. code-block:: C
+
+        a = (int *)b;  // wrong
+
+2)
+
+.. code-block:: C
+
+        a = (int *) b;  // correct
+
+
+M6: Don't initialize variable unnecessarily
+-------------------------------------------
+
+When declaring a variable, try not to initialize it unless necessary.
+
+Example:
+
+.. code-block:: C
+
+        int i = 1;  // wrong
+
+        for (i = 0; i < 3; i++) {
+        }
+
+M7: Follow the order of include header elements
+-----------------------------------------------
+
+When writing an include header the various elements should be in the following
+order:
+
+* ``#include``'s
+* forward declarations
+* ``#define``'s
+* ``enum``'s
+* ``typedef``'s
+* function declarations and inline function definitions
+
+M8: Internal headers must not use include guards
+------------------------------------------------
+
+Any time when creating a new header file with non-public API, that header
+must not contain include guards.
+
+M9: Naming of enums
+-------------------
+
+Enums must have a descriptive name.  The enum type should be small caps and
+it should not be ``typedef``'ed.  Enum contents should be in CAPITAL letters and
+prefixed by the ``enum`` type name.
+
+Example:
+
+.. code-block:: C
+
+        enum animal_type {
+        	ANIMAL_TYPE_FOUR_LEGS,
+        	ANIMAL_TYPE_EIGHT_LEGS,
+        	ANIMAL_TYPE_TWO_LEGS,
+        };
+
+If the enum contents have values (e.g. from specification) the formatting
+should be as follows:
+
+.. code-block:: C
+
+        enum animal_type {
+        	ANIMAL_TYPE_FOUR_LEGS =		4,
+        	ANIMAL_TYPE_EIGHT_LEGS =	8,
+        	ANIMAL_TYPE_TWO_LEGS =		2,
+        };
+
+M10: Enum as switch variable
+----------------------------
+
+If the variable of a ``switch`` is an enum, you must include all values in
+switch body even if providing ``default``. This is enforced by compiler option
+enabling extra warning in such case. The reason for this is to ensure that if
+later on the enum is modified and one forget to change the ``switch`` accordingly, the
+compiler will complain the new added type hasn't been handled.
+
+Example:
+
+.. code-block:: C
+
+        enum animal_type {
+        	ANIMAL_TYPE_FOUR_LEGS =		4,
+        	ANIMAL_TYPE_EIGHT_LEGS =	8,
+        	ANIMAL_TYPE_TWO_LEGS =		2,
+        };
+
+        enum animal_type t;
+
+        switch (t) { // OK
+        case ANIMAL_TYPE_FOUR_LEGS:
+        	...
+        	break;
+        case ANIMAL_TYPE_EIGHT_LEGS:
+        	...
+        	break;
+        case ANIMAL_TYPE_TWO_LEGS:
+        	...
+        	break;
+        default:
+        	break;
+        }
+
+        switch (t) { // Wrong
+        case ANIMAL_TYPE_FOUR_LEGS:
+        	...
+        	break;
+        case ANIMAL_TYPE_TWO_LEGS:
+        	...
+        	break;
+        default:
+        	break;
+        }
+
+However if the enum comes from an external header file outside BlueZ, such as
+Android headers, we cannot make any assumption of how the enum is defined and
+this rule might not apply.
+
+M11: Always use parenthesis with sizeof
+---------------------------------------
+
+The expression argument to the ``sizeof`` operator should always be in
+parenthesis, too.
+
+Example:
+1)
+
+.. code-block:: C
+
+        memset(stuff, 0, sizeof(*stuff));
+
+2)
+
+.. code-block:: C
+
+        memset(stuff, 0, sizeof *stuff); // Wrong
+
+M12: Use void if function has no parameters
+-------------------------------------------
+
+A function with no parameters must use ``void`` in the parameter list.
+
+Example:
+1)
+
+.. code-block:: C
+
+        void foo(void)
+        {
+        }
+
+2)
+
+.. code-block:: C
+
+        void foo()	// Wrong
+        {
+        }
+
+O1: Try to avoid complex if body
+--------------------------------
+
+It's better not to have a complicated statement for ``if``. You may judge its
+contrary condition and ``return``, ``break``, ``continue`` or ``goto`` as soon
+as possible.
+
+Example:
+
+1)
+
+.. code-block:: C
+
+        if (device) {  // worse
+        	memset(&eir_data, 0, sizeof(eir_data));
+        	if (eir_len > 0)
+        		eir_parse(&eir_data, ev->eir, eir_len);
+        	...
+        } else {
+        	error("Unable to get device object for %s", addr);
+        	return;
+        }
+
+2)
+
+.. code-block:: C
+
+        if (!device) {
+        	error("Unable to get device object for %s", addr);
+        	return;
+        }
+
+        memset(&eir_data, 0, sizeof(eir_data));
+        if (eir_len > 0)
+        	eir_parse(&eir_data, ev->eir, eir_len);
+        ...
+
diff --git a/doc/coding-style.txt b/doc/coding-style.txt
deleted file mode 100644
index e73158840ff6..000000000000
--- a/doc/coding-style.txt
+++ /dev/null
@@ -1,279 +0,0 @@
-BlueZ coding style
-******************
-
-Every project has its coding style, and BlueZ is not an exception. This
-document describes the preferred coding style for BlueZ code, in order to keep
-some level of consistency among developers so that code can be easily
-understood and maintained.
-
-First of all, BlueZ coding style must follow every rule for Linux kernel
-(https://www.kernel.org/doc/Documentation/process/coding-style.rst). 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)". BlueZ 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, BlueZ has special flavors for its own.
-Some of them are mandatory (marked as 'M'), while some others are optional
-(marked as 'O'), but generally preferred.
-
-M1: Blank line before and after an if/while/do/for statement
-============================================================
-
-There should be a blank line before if statement unless the if is nested and
-not preceded by an expression or variable declaration.
-
-Example:
-1)
-a = 1;
-if (b) {  // wrong
-
-2)
-a = 1
-
-if (b) {
-}
-a = 2;	// wrong
-
-3)
-if (a) {
-	if (b)  // correct
-
-4)
-b = 2;
-
-if (a) {	// correct
-
-}
-
-b = 3;
-
-The only exception to this rule applies when a variable is being checked for
-errors as such:
-
-err = stat(filename, &st);
-if (err || !S_ISDIR(st.st_mode))
-	return;
-
-M2: Multiple line comment
-=========================
-
-If your comment has more than one line, please start it from the second line.
-
-Example:
-/*
- * first line comment	// correct
- * ...
- * last line comment
- */
-
-
-M3: Space before and after operator
-===================================
-
-There should be a space before and after each operator.
-
-Example:
-a + b;  // correct
-
-
-M4: Wrap long lines
-===================
-
-If your condition in if, while, for statement or a function declaration is too
-long to fit in one line, the new line needs to be indented not aligned with the
-body.
-
-Example:
-1)
-if ((adapter->supported_settings & MGMT_SETTING_SSP) &&
-	!(adapter->current_settings & MGMT_SETTING_SSP)) // wrong
-
-2)
-if ((adapter->supported_settings & MGMT_SETTING_SSP) &&
-				!(adapter->current_settings & MGMT_SETTING_SSP))
-
-3)
-void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
-				 btd_adapter_pin_cb_t cb) // wrong
-
-4)
-void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
-							btd_adapter_pin_cb_t cb)
-
-The referred style for line wrapping is to indent as far as possible to the
-right without hitting the 80 columns limit.
-
-M5: Space when doing type casting
-=================================
-
-There should be a space between new type and variable.
-
-Example:
-1)
-a = (int *)b;  // wrong
-2)
-a = (int *) b;  // correct
-
-
-M6: 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++) {
-}
-
-M7: Follow the order of include header elements
-===============================================
-
-When writing an include header the various elements should be in the following
-order:
-	- #includes
-	- forward declarations
-	- #defines
-	- enums
-	- typedefs
-	- function declarations and inline function definitions
-
-M8: Internal headers must not use include guards
-================================================
-
-Any time when creating a new header file with non-public API, that header
-must not contain include guards.
-
-M9: Naming of enums
-===================
-
-Enums must have a descriptive name.  The enum type should be small caps and
-it should not be typedef-ed.  Enum contents should be in CAPITAL letters and
-prefixed by the enum type name.
-
-Example:
-
-enum animal_type {
-	ANIMAL_TYPE_FOUR_LEGS,
-	ANIMAL_TYPE_EIGHT_LEGS,
-	ANIMAL_TYPE_TWO_LEGS,
-};
-
-If the enum contents have values (e.g. from specification) the formatting
-should be as follows:
-
-enum animal_type {
-	ANIMAL_TYPE_FOUR_LEGS =		4,
-	ANIMAL_TYPE_EIGHT_LEGS =	8,
-	ANIMAL_TYPE_TWO_LEGS =		2,
-};
-
-M10: Enum as switch variable
-============================
-
-If the variable of a switch is an enum, you must include all values in
-switch body even if providing default. This is enforced by compiler option
-enabling extra warning in such case. The reason for this is to ensure that if
-later on enum is modified and one forget to change the switch accordingly, the
-compiler will complain the new added type hasn't been handled.
-
-Example:
-
-enum animal_type {
-	ANIMAL_TYPE_FOUR_LEGS =		4,
-	ANIMAL_TYPE_EIGHT_LEGS =	8,
-	ANIMAL_TYPE_TWO_LEGS =		2,
-};
-
-enum animal_type t;
-
-switch (t) { // OK
-case ANIMAL_TYPE_FOUR_LEGS:
-	...
-	break;
-case ANIMAL_TYPE_EIGHT_LEGS:
-	...
-	break;
-case ANIMAL_TYPE_TWO_LEGS:
-	...
-	break;
-default:
-	break;
-}
-
-switch (t) { // Wrong
-case ANIMAL_TYPE_FOUR_LEGS:
-	...
-	break;
-case ANIMAL_TYPE_TWO_LEGS:
-	...
-	break;
-default:
-	break;
-}
-
-However if the enum comes from an external header file outside BlueZ, such as
-Android headers, we cannot make any assumption of how the enum is defined and
-this rule might not apply.
-
-M11: Always use parenthesis with sizeof
-=======================================
-
-The expression argument to the sizeof operator should always be in
-parenthesis, too.
-
-Example:
-1)
-memset(stuff, 0, sizeof(*stuff));
-
-2)
-memset(stuff, 0, sizeof *stuff); // Wrong
-
-M12: Use void if function has no parameters
-===========================================
-
-A function with no parameters must use void in the parameter list.
-
-Example:
-1)
-void foo(void)
-{
-}
-
-2)
-void foo()	// Wrong
-{
-}
-
-O1: Try to avoid complex if body
-================================
-
-It's better not to have a complicated statement for if. You may judge its
-contrary condition and return | break | continue | goto ASAP.
-
-Example:
-1)
-if (device) {  // worse
-	memset(&eir_data, 0, sizeof(eir_data));
-	if (eir_len > 0)
-		eir_parse(&eir_data, ev->eir, eir_len);
-	...
-} else {
-	error("Unable to get device object for %s", addr);
-	return;
-}
-
-2)
-if (!device) {
-	error("Unable to get device object for %s", addr);
-	return;
-}
-
-memset(&eir_data, 0, sizeof(eir_data));
-if (eir_len > 0)
-	eir_parse(&eir_data, ev->eir, eir_len);
-...
-- 
2.52.0


  parent reply	other threads:[~2026-01-20 17:20 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-20 17:18 [BlueZ v2 0/7] Port text docs to RST Bastien Nocera
2026-01-20 17:18 ` [BlueZ v2 1/7] doc: Port assigned-numbers.txt " Bastien Nocera
2026-01-20 18:34   ` Port text docs " bluez.test.bot
2026-01-20 17:18 ` [BlueZ v2 2/7] doc: Port thermometer-api.txt " Bastien Nocera
2026-01-20 17:18 ` [BlueZ v2 3/7] doc: Port security-bugs.txt " Bastien Nocera
2026-01-20 17:18 ` Bastien Nocera [this message]
2026-01-20 17:18 ` [BlueZ v2 5/7] doc: Port sap-api.txt " Bastien Nocera
2026-01-20 17:18 ` [BlueZ v2 6/7] doc: Port maintainer-guidelines.txt " Bastien Nocera
2026-01-20 17:18 ` [BlueZ v2 7/7] doc: Port health-api.txt " Bastien Nocera

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260120172034.3463151-5-hadess@hadess.net \
    --to=hadess@hadess.net \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox