All of lore.kernel.org
 help / color / mirror / Atom feed
From: bluez.test.bot@gmail.com
To: linux-bluetooth@vger.kernel.org, gopalkrishna.tiwari@gmail.com
Subject: RE: Fixing memory leak, leaked_handle and use_after
Date: Mon, 30 May 2022 01:40:02 -0700 (PDT)	[thread overview]
Message-ID: <629482e2.1c69fb81.38aba.05b3@mx.google.com> (raw)
In-Reply-To: <20220530081209.560465-2-gopalkrishna.tiwari@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 253011 bytes --]

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=645911

---Test result---

Test Summary:
CheckPatch                    FAIL      13.57 seconds
GitLint                       FAIL      9.50 seconds
Prep - Setup ELL              PASS      52.38 seconds
Build - Prep                  PASS      0.63 seconds
Build - Configure             PASS      10.32 seconds
Build - Make                  FAIL      3.50 seconds
Make Check                    FAIL      0.66 seconds
Make Check w/Valgrind         FAIL      13.32 seconds
Make Distcheck                FAIL      39.97 seconds
Build w/ext ELL - Configure   PASS      10.35 seconds
Build w/ext ELL - Make        FAIL      3.92 seconds
Incremental Build with patchesFAIL      14.83 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[Bluez,01/13] Fixing memory leak issue in gatt.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing the static tool analysis using coverity tool found following reports

/github/workspace/src/12864387.patch total: 0 errors, 1 warnings, 31 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864387.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,02/13] Fixing memory leakage in appkey.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing the static analysis using the coverity tool found following memroy leak reports

WARNING:TYPO_SPELLING: 'memroy' may be misspelled - perhaps 'memory'?
#58: 
While performing the static analysis using the coverity tool found following memroy leak reports
                                                                             ^^^^^^

/github/workspace/src/12864389.patch total: 0 errors, 2 warnings, 17 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864389.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,03/13] Fixing memroy leak in jlink.c
WARNING:TYPO_SPELLING: 'memroy' may be misspelled - perhaps 'memory'?
#45: 
Subject: [Bluez 03/13] Fixing memroy leak in jlink.c
                              ^^^^^^

WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864388.patch total: 0 errors, 2 warnings, 13 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864388.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,04/13] Fixing memory leak in sixaxis.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864390.patch total: 0 errors, 1 warnings, 17 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864390.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,05/13] Fixing leaked_handle in cltest.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864391.patch total: 0 errors, 1 warnings, 7 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864391.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,06/13] Fixing leaked_handle in create-image.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864394.patch total: 0 errors, 1 warnings, 24 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864394.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,07/13] Fixing leaked_handle in l2cap-tester.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864392.patch total: 0 errors, 1 warnings, 7 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864392.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,08/13] Fixing resource leak in mesh/mesh-db.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864393.patch total: 0 errors, 1 warnings, 8 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864393.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,09/13] Fixing leaked_handle in obex-client-tool.c
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#58: 
While performing static tool analysis using coverity found following reports for resouse leak

/github/workspace/src/12864395.patch total: 0 errors, 1 warnings, 7 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12864395.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

[Bluez,11/13] Fixing memory leak in pbap.c
ERROR:TRAILING_WHITESPACE: trailing whitespace
#77: FILE: obexd/client/pbap.c:929:
+^I^Ig_obex_apparam_free(apparam);^I$

/github/workspace/src/12864398.patch total: 1 errors, 0 warnings, 13 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

NOTE: Whitespace errors detected.
      You may wish to use scripts/cleanpatch or scripts/cleanfile

/github/workspace/src/12864398.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - FAIL
Desc: Run gitlint with rule in .gitlint
Output:
[Bluez,01/13] Fixing memory leak issue in gatt.c
5: B1 Line exceeds max length (85>80): "While performing the static tool analysis using coverity tool found following reports"
8: B1 Line exceeds max length (116>80): "bluez-5.64/client/gatt.c:1531: leaked_storage: Variable "service" going out of scope leaks the storage it points to."
11: B1 Line exceeds max length (113>80): "bluez-5.64/client/gatt.c:2626: leaked_storage: Variable "chrc" going out of scope leaks the storage it points to."
14: B1 Line exceeds max length (113>80): "bluez-5.64/client/gatt.c:2906: leaked_storage: Variable "desc" going out of scope leaks the storage it points to."

[Bluez,02/13] Fixing memory leakage in appkey.c
5: B1 Line exceeds max length (96>80): "While performing the static analysis using the coverity tool found following memroy leak reports"
7: B1 Line exceeds max length (111>80): "bluez-5.64/mesh/appkey.c:143: leaked_storage: Variable "key" going out of scope leaks the storage it points to."
10: B1 Line exceeds max length (111>80): "bluez-5.64/mesh/appkey.c:146: leaked_storage: Variable "key" going out of scope leaks the storage it points to."

[Bluez,03/13] Fixing memroy leak in jlink.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (112>80): "bluez-5.64/monitor/jlink.c:111: leaked_storage: Variable "so" going out of scope leaks the storage it points to."
9: B1 Line exceeds max length (112>80): "bluez-5.64/monitor/jlink.c:113: leaked_storage: Variable "so" going out of scope leaks the storage it points to."

[Bluez,04/13] Fixing memory leak in sixaxis.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (125>80): "bluez-5.64/plugins/sixaxis.c:425: alloc_arg: "get_pairing_type_for_device" allocates memory that is stored into "sysfs_path"."
8: B1 Line exceeds max length (122>80): "bluez-5.64/plugins/sixaxis.c:428: leaked_storage: Variable "sysfs_path" going out of scope leaks the storage it points to."

[Bluez,05/13] Fixing leaked_handle in cltest.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (102>80): "bluez-5.64/tools/cltest.c:75: leaked_handle: Handle variable "fd" going out of scope leaks the handle."

[Bluez,06/13] Fixing leaked_handle in create-image.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (118>80): "bluez-5.64/tools/create-image.c:124: leaked_storage: Variable "map" going out of scope leaks the storage it points to."

[Bluez,07/13] Fixing leaked_handle in l2cap-tester.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (114>80): "bluez-5.64/tools/l2cap-tester.c:1712: leaked_handle: Handle variable "new_sk" going out of scope leaks the handle."

[Bluez,08/13] Fixing resource leak in mesh/mesh-db.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (110>80): "bluez-5.64/tools/mesh/mesh-db.c:2388: leaked_handle: Handle variable "fd" going out of scope leaks the handle."
9: B1 Line exceeds max length (119>80): "bluez-5.64/tools/mesh/mesh-db.c:2388: leaked_storage: Variable "str" going out of scope leaks the storage it points to."

[Bluez,09/13] Fixing leaked_handle in obex-client-tool.c
5: B1 Line exceeds max length (93>80): "While performing static tool analysis using coverity found following reports for resouse leak"
7: B1 Line exceeds max length (113>80): "bluez-5.64/tools/obex-client-tool.c:315: leaked_handle: Handle variable "sk" going out of scope leaks the handle."

[Bluez,10/13] Fixing use after free in src/device.c
8: B1 Line exceeds max length (119>80): "bluez-5.64/src/device.c:2962: path: Condition "!dbus_message_get_args(msg, NULL, 0 /* (int)0 */)", taking false branch."
9: B1 Line exceeds max length (85>80): "bluez-5.64/src/device.c:2965: path: Condition "device->bonding", taking false branch."
10: B1 Line exceeds max length (95>80): "bluez-5.64/src/device.c:2968: path: Condition "device->bredr_state.bonded", taking true branch."
12: B1 Line exceeds max length (83>80): "bluez-5.64/src/device.c:2977: path: Condition "state->bonded", taking false branch."
16: B1 Line exceeds max length (85>80): "bluez-5.64/src/device.c:3005: path: Condition "bdaddr_type != 0", taking true branch."
17: B1 Line exceeds max length (86>80): "bluez-5.64/src/device.c:3006: path: Condition "!state->connected", taking true branch."
18: B1 Line exceeds max length (100>80): "bluez-5.64/src/device.c:3006: path: Condition "btd_le_connect_before_pairing()", taking true branch."
19: B1 Line exceeds max length (85>80): "bluez-5.64/src/device.c:3007: freed_arg: "device_connect_le" frees "device->bonding"."
23: B1 Line exceeds max length (135>80): "bluez-5.64/src/device.c:3018: double_free: Calling "bonding_request_free" frees pointer "device->bonding" which has already been freed."

[Bluez,11/13] Fixing memory leak in pbap.c
7: B1 Line exceeds max length (121>80): "bluez-5.64/obexd/client/pbap.c:929: leaked_storage: Variable "apparam" going out of scope leaks the storage it points to."

[Bluez,12/13] Fixing possible use_after_free in meshctl.c
8: B1 Line exceeds max length (117>80): "bluez-5.64/tools/meshctl.c:2018: double_free: Calling "g_free" frees pointer "mesh_dir" which has already been freed."

[Bluez,13/13] Fixing use_after_free in prov-db.c
9: B1 Line exceeds max length (124>80): "bluez-5.64/tools/mesh-gatt/prov-db.c:867: double_free: Calling "g_free" frees pointer "in_str" which has already been freed."


##############################
Test: Build - Make - FAIL
Desc: Build the BlueZ source tree
Output:
client/gatt.c: In function ‘gatt_register_service’:
client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
client/gatt.c:1554:1: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1554 | static struct service *service_find(const char *pattern)
      | ^~~~~~
client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
At top level:
client/gatt.c:3203:6: error: ‘gatt_clone_attribute’ defined but not used [-Werror=unused-function]
 3203 | void gatt_clone_attribute(GDBusProxy *proxy, int argc, char *argv[])
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2961:6: error: ‘gatt_unregister_desc’ defined but not used [-Werror=unused-function]
 2961 | void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2881:6: error: ‘gatt_register_desc’ defined but not used [-Werror=unused-function]
 2881 | void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:2674:6: error: ‘gatt_unregister_chrc’ defined but not used [-Werror=unused-function]
 2674 | void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2603:6: error: ‘gatt_register_chrc’ defined but not used [-Werror=unused-function]
 2603 | void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1638:6: error: ‘gatt_unregister_include’ defined but not used [-Werror=unused-function]
 1638 | void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1608:6: error: ‘gatt_register_include’ defined but not used [-Werror=unused-function]
 1608 | void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1573:6: error: ‘gatt_unregister_service’ defined but not used [-Werror=unused-function]
 1573 | void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7300: client/gatt.o] Error 1
make: *** [Makefile:4324: all] Error 2


##############################
Test: Make Check - FAIL
Desc: Run 'make check'
Output:
client/gatt.c: In function ‘gatt_register_service’:
client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
client/gatt.c:1554:1: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1554 | static struct service *service_find(const char *pattern)
      | ^~~~~~
client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
At top level:
client/gatt.c:3203:6: error: ‘gatt_clone_attribute’ defined but not used [-Werror=unused-function]
 3203 | void gatt_clone_attribute(GDBusProxy *proxy, int argc, char *argv[])
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2961:6: error: ‘gatt_unregister_desc’ defined but not used [-Werror=unused-function]
 2961 | void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2881:6: error: ‘gatt_register_desc’ defined but not used [-Werror=unused-function]
 2881 | void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:2674:6: error: ‘gatt_unregister_chrc’ defined but not used [-Werror=unused-function]
 2674 | void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2603:6: error: ‘gatt_register_chrc’ defined but not used [-Werror=unused-function]
 2603 | void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1638:6: error: ‘gatt_unregister_include’ defined but not used [-Werror=unused-function]
 1638 | void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1608:6: error: ‘gatt_register_include’ defined but not used [-Werror=unused-function]
 1608 | void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1573:6: error: ‘gatt_unregister_service’ defined but not used [-Werror=unused-function]
 1573 | void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7300: client/gatt.o] Error 1
make: *** [Makefile:11320: check] Error 2


##############################
Test: Make Check w/Valgrind - FAIL
Desc: Run 'make check' with Valgrind
Output:
client/gatt.c: In function ‘gatt_register_service’:
client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
client/gatt.c:1554:1: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1554 | static struct service *service_find(const char *pattern)
      | ^~~~~~
client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
At top level:
client/gatt.c:3203:6: error: ‘gatt_clone_attribute’ defined but not used [-Werror=unused-function]
 3203 | void gatt_clone_attribute(GDBusProxy *proxy, int argc, char *argv[])
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2961:6: error: ‘gatt_unregister_desc’ defined but not used [-Werror=unused-function]
 2961 | void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2881:6: error: ‘gatt_register_desc’ defined but not used [-Werror=unused-function]
 2881 | void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:2674:6: error: ‘gatt_unregister_chrc’ defined but not used [-Werror=unused-function]
 2674 | void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2603:6: error: ‘gatt_register_chrc’ defined but not used [-Werror=unused-function]
 2603 | void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1638:6: error: ‘gatt_unregister_include’ defined but not used [-Werror=unused-function]
 1638 | void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1608:6: error: ‘gatt_register_include’ defined but not used [-Werror=unused-function]
 1608 | void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1573:6: error: ‘gatt_unregister_service’ defined but not used [-Werror=unused-function]
 1573 | void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7300: client/gatt.o] Error 1
make: *** [Makefile:4324: all] Error 2


##############################
Test: Make Distcheck - FAIL
Desc: Run distcheck to check the distribution
Output:
../../client/gatt.c: In function ‘gatt_register_service’:
../../client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
../../client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
../../client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
../../client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
../../client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
../../client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
../../client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
../../client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
../../client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
../../client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
../../client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
../../client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
../../client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
../../client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
../../client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
../../client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
../../client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
../../client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
../../client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
../../client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
../../client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
../../client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
../../client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
../../client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
../../client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
../../client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
../../client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
../../client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
../../client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
../../client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
../../client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
../../client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
../../client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
../../client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
../../client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
../../client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
../../client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
../../client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
../../client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
../../client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
../../client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
../../client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
../../client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
../../client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
../../client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
../../client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
../../client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
../../client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from ../../client/gatt.c:33:
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
../../client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
../../client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
../../gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
../../client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
../../client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
../../client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
../../client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from ../../client/gatt.c:33:
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
../../client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
../../client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../gdbus/gdbus.h:146:29: warning: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Wincompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
../../gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
../../client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
../../client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
../../gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
../../client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
../../client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
../../client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
../../client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
../../client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
../../client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
../../client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
../../client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
../../client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
../../client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
../../client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
../../client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
../../client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
../../client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
../../client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
../../client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
../../client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
../../client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
../../client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
../../client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
../../client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
../../client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
../../client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
../../client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
../../client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
../../client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
../../client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
../../client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
../../client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
../../client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
../../client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
make[2]: *** [Makefile:7300: client/gatt.o] Error 1
make[1]: *** [Makefile:4324: all] Error 2
make: *** [Makefile:11241: distcheck] Error 1


##############################
Test: Build w/ext ELL - Make - FAIL
Desc: Build BlueZ source with '--enable-external-ell' configuration
Output:
client/gatt.c: In function ‘gatt_register_service’:
client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
client/gatt.c:1554:1: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1554 | static struct service *service_find(const char *pattern)
      | ^~~~~~
client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
At top level:
client/gatt.c:3203:6: error: ‘gatt_clone_attribute’ defined but not used [-Werror=unused-function]
 3203 | void gatt_clone_attribute(GDBusProxy *proxy, int argc, char *argv[])
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2961:6: error: ‘gatt_unregister_desc’ defined but not used [-Werror=unused-function]
 2961 | void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2881:6: error: ‘gatt_register_desc’ defined but not used [-Werror=unused-function]
 2881 | void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:2674:6: error: ‘gatt_unregister_chrc’ defined but not used [-Werror=unused-function]
 2674 | void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2603:6: error: ‘gatt_register_chrc’ defined but not used [-Werror=unused-function]
 2603 | void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1638:6: error: ‘gatt_unregister_include’ defined but not used [-Werror=unused-function]
 1638 | void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1608:6: error: ‘gatt_register_include’ defined but not used [-Werror=unused-function]
 1608 | void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1573:6: error: ‘gatt_unregister_service’ defined but not used [-Werror=unused-function]
 1573 | void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7300: client/gatt.o] Error 1
make: *** [Makefile:4324: all] Error 2


##############################
Test: Incremental Build with patches - FAIL
Desc: Incremental build per patch in the series
Output:
client/gatt.c: In function ‘gatt_register_service’:
client/gatt.c:1554:24: error: invalid storage class for function ‘service_find’
 1554 | static struct service *service_find(const char *pattern)
      |                        ^~~~~~~~~~~~
client/gatt.c:1554:1: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1554 | static struct service *service_find(const char *pattern)
      | ^~~~~~
client/gatt.c:1594:14: error: invalid storage class for function ‘inc_find’
 1594 | static char *inc_find(struct service  *serv, char *path)
      |              ^~~~~~~~
client/gatt.c:1666:17: error: invalid storage class for function ‘chrc_get_handle’
 1666 | static gboolean chrc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:1676:13: error: invalid storage class for function ‘chrc_set_handle’
 1676 | static void chrc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:1695:17: error: invalid storage class for function ‘chrc_get_uuid’
 1695 | static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:1705:17: error: invalid storage class for function ‘chrc_get_service’
 1705 | static gboolean chrc_get_service(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~
client/gatt.c:1716:17: error: invalid storage class for function ‘chrc_get_value’
 1716 | static gboolean chrc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1732:17: error: invalid storage class for function ‘chrc_get_notifying’
 1732 | static gboolean chrc_get_notifying(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~
client/gatt.c:1745:17: error: invalid storage class for function ‘chrc_get_flags’
 1745 | static gboolean chrc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:1763:17: error: invalid storage class for function ‘chrc_get_write_acquired’
 1763 | static gboolean chrc_get_write_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1776:17: error: invalid storage class for function ‘chrc_write_acquired_exists’
 1776 | static gboolean chrc_write_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1793:17: error: invalid storage class for function ‘chrc_get_notify_acquired’
 1793 | static gboolean chrc_get_notify_acquired(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1806:17: error: invalid storage class for function ‘chrc_notify_acquired_exists’
 1806 | static gboolean chrc_notify_acquired_exists(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1824:19: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:1824:19: note: (near initialization for ‘chrc_properties[0].get’)
client/gatt.c:1824:36: error: initializer element is not constant
 1824 |  { "Handle", "q", chrc_get_handle, chrc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:1824:36: note: (near initialization for ‘chrc_properties[0].set’)
client/gatt.c:1825:17: error: initializer element is not constant
 1825 |  { "UUID", "s", chrc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:1825:17: note: (near initialization for ‘chrc_properties[1].get’)
client/gatt.c:1826:20: error: initializer element is not constant
 1826 |  { "Service", "o", chrc_get_service, NULL, NULL },
      |                    ^~~~~~~~~~~~~~~~
client/gatt.c:1826:20: note: (near initialization for ‘chrc_properties[2].get’)
client/gatt.c:1827:19: error: initializer element is not constant
 1827 |  { "Value", "ay", chrc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1827:19: note: (near initialization for ‘chrc_properties[3].get’)
client/gatt.c:1828:22: error: initializer element is not constant
 1828 |  { "Notifying", "b", chrc_get_notifying, NULL, NULL },
      |                      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1828:22: note: (near initialization for ‘chrc_properties[4].get’)
client/gatt.c:1829:19: error: initializer element is not constant
 1829 |  { "Flags", "as", chrc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:1829:19: note: (near initialization for ‘chrc_properties[5].get’)
client/gatt.c:1830:26: error: initializer element is not constant
 1830 |  { "WriteAcquired", "b", chrc_get_write_acquired, NULL,
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1830:26: note: (near initialization for ‘chrc_properties[6].get’)
client/gatt.c:1831:6: error: initializer element is not constant
 1831 |      chrc_write_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1831:6: note: (near initialization for ‘chrc_properties[6].exists’)
client/gatt.c:1832:27: error: initializer element is not constant
 1832 |  { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1832:27: note: (near initialization for ‘chrc_properties[7].get’)
client/gatt.c:1833:6: error: initializer element is not constant
 1833 |      chrc_notify_acquired_exists },
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1833:6: note: (near initialization for ‘chrc_properties[7].exists’)
client/gatt.c:1837:20: error: invalid storage class for function ‘path_to_address’
 1837 | static const char *path_to_address(const char *path)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:1851:12: error: invalid storage class for function ‘parse_options’
 1851 | static int parse_options(DBusMessageIter *iter, uint16_t *offset, uint16_t *mtu,
      |            ^~~~~~~~~~~~~
client/gatt.c:1911:21: error: invalid storage class for function ‘read_value’
 1911 | static DBusMessage *read_value(DBusMessage *msg, uint8_t *value,
      |                     ^~~~~~~~~~
client/gatt.c:1934:13: error: invalid storage class for function ‘authorize_read_response’
 1934 | static void authorize_read_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1967:13: error: invalid storage class for function ‘is_device_trusted’
 1967 | static bool is_device_trusted(const char *path)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:1986:13: error: invalid storage class for function ‘proxy_read_reply’
 1986 | static void proxy_read_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2033:13: error: invalid storage class for function ‘proxy_read_setup’
 2033 | static void proxy_read_setup(DBusMessageIter *iter, void *user_data)
      |             ^~~~~~~~~~~~~~~~
client/gatt.c:2051:21: error: invalid storage class for function ‘proxy_read_value’
 2051 | static DBusMessage *proxy_read_value(struct GDBusProxy *proxy, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2070:21: error: invalid storage class for function ‘chrc_read_value’
 2070 | static DBusMessage *chrc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2121:12: error: invalid storage class for function ‘parse_value_arg’
 2121 | static int parse_value_arg(DBusMessageIter *iter, uint8_t **value, int *len)
      |            ^~~~~~~~~~~~~~~
client/gatt.c:2134:12: error: invalid storage class for function ‘write_value’
 2134 | static int write_value(size_t *dst_len, uint8_t **dst_value, uint8_t *src_val,
      |            ^~~~~~~~~~~
client/gatt.c:2150:13: error: invalid storage class for function ‘authorize_write_response’
 2150 | static void authorize_write_response(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2221:13: error: invalid storage class for function ‘proxy_write_reply’
 2221 | static void proxy_write_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~
client/gatt.c:2240:21: error: invalid storage class for function ‘proxy_write_value’
 2240 | static DBusMessage *proxy_write_value(struct GDBusProxy *proxy,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2264:21: error: invalid storage class for function ‘chrc_write_value’
 2264 | static DBusMessage *chrc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2340:21: error: invalid storage class for function ‘create_sock’
 2340 | static DBusMessage *create_sock(struct chrc *chrc, DBusMessage *msg)
      |                     ^~~~~~~~~~~
client/gatt.c:2379:21: error: invalid storage class for function ‘chrc_acquire_write’
 2379 | static DBusMessage *chrc_acquire_write(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~
client/gatt.c:2411:21: error: invalid storage class for function ‘chrc_acquire_notify’
 2411 | static DBusMessage *chrc_acquire_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~~~
client/gatt.c:2449:13: error: invalid storage class for function ‘proxy_notify_reply’
 2449 | static void proxy_notify_reply(DBusMessage *message, void *user_data)
      |             ^~~~~~~~~~~~~~~~~~
client/gatt.c:2483:21: error: invalid storage class for function ‘proxy_notify’
 2483 | static DBusMessage *proxy_notify(struct chrc *chrc, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
client/gatt.c:2507:21: error: invalid storage class for function ‘chrc_start_notify’
 2507 | static DBusMessage *chrc_start_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~~
client/gatt.c:2527:21: error: invalid storage class for function ‘chrc_stop_notify’
 2527 | static DBusMessage *chrc_stop_notify(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
client/gatt.c:2547:21: error: invalid storage class for function ‘chrc_confirm’
 2547 | static DBusMessage *chrc_confirm(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2559:36: note: in expansion of macro ‘GDBUS_ARGS’
 2559 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2560:6: note: in expansion of macro ‘GDBUS_ARGS’
 2560 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2561:6: error: initializer element is not constant
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2561:6: note: (near initialization for ‘chrc_methods[0].function’)
 2561 |      chrc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2562:37: note: in expansion of macro ‘GDBUS_ARGS’
 2562 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2564:12: error: initializer element is not constant
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2564:12: note: (near initialization for ‘chrc_methods[1].function’)
 2564 |      NULL, chrc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[2].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2565:33: note: in expansion of macro ‘GDBUS_ARGS’
 2565 |  { GDBUS_METHOD("AcquireWrite", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                 ^~~~~~~~~~
client/gatt.c:2566:12: error: initializer element is not constant
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2566:12: note: (near initialization for ‘chrc_methods[2].function’)
 2566 |      NULL, chrc_acquire_write) },
      |            ^~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusPropertyTable *’ {aka ‘const struct GDBusPropertyTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘chrc_methods[3].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:150:13: note: in definition of macro ‘GDBUS_METHOD’
  150 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2567:34: note: in expansion of macro ‘GDBUS_ARGS’
 2567 |  { GDBUS_METHOD("AcquireNotify", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                  ^~~~~~~~~~
client/gatt.c:2568:12: error: initializer element is not constant
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2568:12: note: (near initialization for ‘chrc_methods[3].function’)
 2568 |      NULL, chrc_acquire_notify) },
      |            ^~~~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2569:50: error: initializer element is not constant
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2569:50: note: (near initialization for ‘chrc_methods[4].function’)
 2569 |  { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, chrc_start_notify) },
      |                                                  ^~~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2570:43: error: initializer element is not constant
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2570:43: note: (near initialization for ‘chrc_methods[5].function’)
 2570 |  { GDBUS_METHOD("StopNotify", NULL, NULL, chrc_stop_notify) },
      |                                           ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: error: initializer element is not constant
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2571:40: note: (near initialization for ‘chrc_methods[6].function’)
 2571 |  { GDBUS_METHOD("Confirm", NULL, NULL, chrc_confirm) },
      |                                        ^~~~~~~~~~~~
./gdbus/gdbus.h:152:14: note: in definition of macro ‘GDBUS_METHOD’
  152 |  .function = _function
      |              ^~~~~~~~~
client/gatt.c:2575:13: error: invalid storage class for function ‘chrc_set_value’
 2575 | static void chrc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2591:17: error: invalid storage class for function ‘attr_authorization_flag_exists’
 2591 | static gboolean attr_authorization_flag_exists(char **flags)
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:2649:21: error: invalid storage class for function ‘chrc_find’
 2649 | static struct chrc *chrc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2692:21: error: invalid storage class for function ‘desc_read_value’
 2692 | static DBusMessage *desc_read_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~
client/gatt.c:2718:21: error: invalid storage class for function ‘desc_write_value’
 2718 | static DBusMessage *desc_write_value(DBusConnection *conn, DBusMessage *msg,
      |                     ^~~~~~~~~~~~~~~~
In file included from client/gatt.c:33:
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2761:36: note: in expansion of macro ‘GDBUS_ARGS’
 2761 |  { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }),
      |                                    ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[0].out_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:157:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  157 |  .out_args = _out_args, \
      |              ^~~~~~~~~
client/gatt.c:2762:6: note: in expansion of macro ‘GDBUS_ARGS’
 2762 |      GDBUS_ARGS({ "value", "ay" }),
      |      ^~~~~~~~~~
client/gatt.c:2763:6: error: initializer element is not constant
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2763:6: note: (near initialization for ‘desc_methods[0].function’)
 2763 |      desc_read_value) },
      |      ^~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
./gdbus/gdbus.h:146:29: error: initialization of ‘const GDBusArgInfo *’ {aka ‘const struct GDBusArgInfo *’} from incompatible pointer type ‘const GDBusMethodTable *’ {aka ‘const struct GDBusMethodTable *’} [-Werror=incompatible-pointer-types]
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: error: initializer element is not constant
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
./gdbus/gdbus.h:146:29: note: (near initialization for ‘desc_methods[1].in_args’)
  146 | #define GDBUS_ARGS(args...) (const GDBusArgInfo[]) { args, { } }
      |                             ^
./gdbus/gdbus.h:156:13: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  156 |  .in_args = _in_args, \
      |             ^~~~~~~~
client/gatt.c:2764:37: note: in expansion of macro ‘GDBUS_ARGS’
 2764 |  { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" },
      |                                     ^~~~~~~~~~
client/gatt.c:2766:12: error: initializer element is not constant
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2766:12: note: (near initialization for ‘desc_methods[1].function’)
 2766 |      NULL, desc_write_value) },
      |            ^~~~~~~~~~~~~~~~
./gdbus/gdbus.h:158:14: note: in definition of macro ‘GDBUS_ASYNC_METHOD’
  158 |  .function = _function, \
      |              ^~~~~~~~~
client/gatt.c:2770:17: error: invalid storage class for function ‘desc_get_handle’
 2770 | static gboolean desc_get_handle(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~~
client/gatt.c:2780:13: error: invalid storage class for function ‘desc_set_handle’
 2780 | static void desc_set_handle(const GDBusPropertyTable *property,
      |             ^~~~~~~~~~~~~~~
client/gatt.c:2799:17: error: invalid storage class for function ‘desc_get_uuid’
 2799 | static gboolean desc_get_uuid(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2809:17: error: invalid storage class for function ‘desc_get_chrc’
 2809 | static gboolean desc_get_chrc(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~
client/gatt.c:2820:17: error: invalid storage class for function ‘desc_get_value’
 2820 | static gboolean desc_get_value(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2838:17: error: invalid storage class for function ‘desc_get_flags’
 2838 | static gboolean desc_get_flags(const GDBusPropertyTable *property,
      |                 ^~~~~~~~~~~~~~
client/gatt.c:2857:19: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                   ^~~~~~~~~~~~~~~
client/gatt.c:2857:19: note: (near initialization for ‘desc_properties[0].get’)
client/gatt.c:2857:36: error: initializer element is not constant
 2857 |  { "Handle", "q", desc_get_handle, desc_set_handle, NULL },
      |                                    ^~~~~~~~~~~~~~~
client/gatt.c:2857:36: note: (near initialization for ‘desc_properties[0].set’)
client/gatt.c:2858:17: error: initializer element is not constant
 2858 |  { "UUID", "s", desc_get_uuid, NULL, NULL },
      |                 ^~~~~~~~~~~~~
client/gatt.c:2858:17: note: (near initialization for ‘desc_properties[1].get’)
client/gatt.c:2859:27: error: initializer element is not constant
 2859 |  { "Characteristic", "o", desc_get_chrc, NULL, NULL },
      |                           ^~~~~~~~~~~~~
client/gatt.c:2859:27: note: (near initialization for ‘desc_properties[2].get’)
client/gatt.c:2860:19: error: initializer element is not constant
 2860 |  { "Value", "ay", desc_get_value, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2860:19: note: (near initialization for ‘desc_properties[3].get’)
client/gatt.c:2861:19: error: initializer element is not constant
 2861 |  { "Flags", "as", desc_get_flags, NULL, NULL },
      |                   ^~~~~~~~~~~~~~
client/gatt.c:2861:19: note: (near initialization for ‘desc_properties[4].get’)
client/gatt.c:2865:13: error: invalid storage class for function ‘desc_set_value’
 2865 | static void desc_set_value(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~~
client/gatt.c:2931:21: error: invalid storage class for function ‘desc_find’
 2931 | static struct desc *desc_find(const char *pattern)
      |                     ^~~~~~~~~
client/gatt.c:2979:20: error: invalid storage class for function ‘select_service’
 2979 | static GDBusProxy *select_service(GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:2994:13: error: invalid storage class for function ‘proxy_property_changed’
 2994 | static void proxy_property_changed(GDBusProxy *proxy, const char *name,
      |             ^~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:3020:13: error: invalid storage class for function ‘clone_chrc’
 3020 | static void clone_chrc(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~
client/gatt.c:3073:13: error: invalid storage class for function ‘clone_chrcs’
 3073 | static void clone_chrcs(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~
client/gatt.c:3086:13: error: invalid storage class for function ‘clone_service’
 3086 | static void clone_service(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~~
client/gatt.c:3131:13: error: invalid storage class for function ‘clone_device’
 3131 | static void clone_device(struct GDBusProxy *proxy)
      |             ^~~~~~~~~~~~
client/gatt.c:3144:13: error: invalid storage class for function ‘service_clone’
 3144 | static void service_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~~
client/gatt.c:3160:13: error: invalid storage class for function ‘device_clone’
 3160 | static void device_clone(const char *input, void *user_data)
      |             ^~~~~~~~~~~~
client/gatt.c:3174:20: error: invalid storage class for function ‘proxy_get_name’
 3174 | static const char *proxy_get_name(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~
client/gatt.c:3190:20: error: invalid storage class for function ‘proxy_get_alias’
 3190 | static const char *proxy_get_alias(struct GDBusProxy *proxy)
      |                    ^~~~~~~~~~~~~~~
client/gatt.c:3232:1: error: expected declaration or statement at end of input
 3232 | }
      | ^
At top level:
client/gatt.c:3203:6: error: ‘gatt_clone_attribute’ defined but not used [-Werror=unused-function]
 3203 | void gatt_clone_attribute(GDBusProxy *proxy, int argc, char *argv[])
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2961:6: error: ‘gatt_unregister_desc’ defined but not used [-Werror=unused-function]
 2961 | void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2881:6: error: ‘gatt_register_desc’ defined but not used [-Werror=unused-function]
 2881 | void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:2674:6: error: ‘gatt_unregister_chrc’ defined but not used [-Werror=unused-function]
 2674 | void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~
client/gatt.c:2603:6: error: ‘gatt_register_chrc’ defined but not used [-Werror=unused-function]
 2603 | void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~
client/gatt.c:1638:6: error: ‘gatt_unregister_include’ defined but not used [-Werror=unused-function]
 1638 | void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1608:6: error: ‘gatt_register_include’ defined but not used [-Werror=unused-function]
 1608 | void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~
client/gatt.c:1573:6: error: ‘gatt_unregister_service’ defined but not used [-Werror=unused-function]
 1573 | void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
      |      ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7300: client/gatt.o] Error 1
make: *** [Makefile:4324: all] Error 2




---
Regards,
Linux Bluetooth


  reply	other threads:[~2022-05-30  8:40 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-30  8:11 [Bluez 00/13] Fixing memory leak, leaked_handle and use_after Gopal Tiwari
2022-05-30  8:11 ` [Bluez 01/13] Fixing memory leak issue in gatt.c Gopal Tiwari
2022-05-30  8:40   ` bluez.test.bot [this message]
2022-05-30  8:11 ` [Bluez 02/13] Fixing memory leakage in appkey.c Gopal Tiwari
2022-05-30  8:11 ` [Bluez 03/13] Fixing memroy leak in jlink.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 04/13] Fixing memory leak in sixaxis.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 05/13] Fixing leaked_handle in cltest.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 06/13] Fixing leaked_handle in create-image.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 07/13] Fixing leaked_handle in l2cap-tester.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 08/13] Fixing resource leak in mesh/mesh-db.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 09/13] Fixing leaked_handle in obex-client-tool.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 10/13] Fixing use after free in src/device.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 11/13] Fixing memory leak in pbap.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 12/13] Fixing possible use_after_free in meshctl.c Gopal Tiwari
2022-05-30  8:12 ` [Bluez 13/13] Fixing use_after_free in prov-db.c Gopal Tiwari

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=629482e2.1c69fb81.38aba.05b3@mx.google.com \
    --to=bluez.test.bot@gmail.com \
    --cc=gopalkrishna.tiwari@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.