tree-wide: use c99 static for array size declarations
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 4 Jan 2019 11:30:45 +0000 (12:30 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 4 Jan 2019 11:37:25 +0000 (12:37 +0100)
https://hamberg.no/erlend/posts/2013-02-18-static-array-indices.html

This only works with clang, unfortunately gcc doesn't seem to implement the check
(tested with gcc-8.2.1-5.fc29.x86_64).

Simulated error:
[2/3] Compiling C object 'systemd-nspawn@exe/src_nspawn_nspawn.c.o'.
../src/nspawn/nspawn.c:3179:45: warning: array argument is too small; contains 15 elements, callee requires at least 16 [-Warray-bounds]
                        candidate = (uid_t) siphash24(arg_machine, strlen(arg_machine), hash_key);
                                            ^                                           ~~~~~~~~
../src/basic/siphash24.h:24:64: note: callee declares array parameter as static here
uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[static 16]);
                                                               ^~~~~~~~~~~~

13 files changed:
src/basic/fd-util.c
src/basic/fd-util.h
src/basic/siphash24.c
src/basic/siphash24.h
src/basic/string-util.c
src/boot/efi/disk.c
src/boot/efi/disk.h
src/core/dynamic-user.c
src/core/execute.c
src/core/namespace.c
src/core/namespace.h
src/shared/efivars.c
src/socket-proxy/socket-proxyd.c

index c06f2fa..19d6a37 100644 (file)
@@ -70,7 +70,7 @@ int safe_close(int fd) {
         return -1;
 }
 
-void safe_close_pair(int p[]) {
+void safe_close_pair(int p[static 2]) {
         assert(p);
 
         if (p[0] == p[1]) {
index 00303a7..4085a24 100644 (file)
@@ -14,7 +14,7 @@
 
 int close_nointr(int fd);
 int safe_close(int fd);
-void safe_close_pair(int p[]);
+void safe_close_pair(int p[static 2]);
 
 static inline int safe_close_above_stdio(int fd) {
         if (fd < 3) /* Don't close stdin/stdout/stderr, but still invalidate the fd by returning -1 */
index 30c228a..bf365b5 100644 (file)
@@ -48,7 +48,7 @@ static inline void sipround(struct siphash *state) {
         state->v2 = rotate_left(state->v2, 32);
 }
 
-void siphash24_init(struct siphash *state, const uint8_t k[16]) {
+void siphash24_init(struct siphash *state, const uint8_t k[static 16]) {
         uint64_t k0, k1;
 
         assert(state);
@@ -187,7 +187,7 @@ uint64_t siphash24_finalize(struct siphash *state) {
         return state->v0 ^ state->v1 ^ state->v2  ^ state->v3;
 }
 
-uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]) {
+uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[static 16]) {
         struct siphash state;
 
         assert(in);
index 70a4a03..67c4f75 100644 (file)
@@ -15,14 +15,14 @@ struct siphash {
         size_t inlen;
 };
 
-void siphash24_init(struct siphash *state, const uint8_t k[16]);
+void siphash24_init(struct siphash *state, const uint8_t k[static 16]);
 void siphash24_compress(const void *in, size_t inlen, struct siphash *state);
 #define siphash24_compress_byte(byte, state) siphash24_compress((const uint8_t[]) { (byte) }, 1, (state))
 
 uint64_t siphash24_finalize(struct siphash *state);
 
-uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]);
+uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[static 16]);
 
-static inline uint64_t siphash24_string(const char *s, const uint8_t k[16]) {
+static inline uint64_t siphash24_string(const char *s, const uint8_t k[static 16]) {
         return siphash24(s, strlen(s) + 1, k);
 }
index 05469ac..93917bc 100644 (file)
@@ -742,7 +742,7 @@ char *strreplace(const char *text, const char *old_string, const char *new_strin
         return ret;
 }
 
-static void advance_offsets(ssize_t diff, size_t offsets[2], size_t shift[2], size_t size) {
+static void advance_offsets(ssize_t diff, size_t offsets[static 2], size_t shift[static 2], size_t size) {
         if (!offsets)
                 return;
 
index a31b7bb..49ee81b 100644 (file)
@@ -5,7 +5,7 @@
 
 #include "util.h"
 
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]) {
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]) {
         EFI_DEVICE_PATH *device_path;
 
         /* export the device path this image is started from */
index 2a0b8ff..41c4cce 100644 (file)
@@ -1,4 +1,4 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 #pragma once
 
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]);
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]);
index 089461a..530df70 100644 (file)
@@ -35,7 +35,7 @@ static DynamicUser* dynamic_user_free(DynamicUser *d) {
         return mfree(d);
 }
 
-static int dynamic_user_add(Manager *m, const char *name, int storage_socket[2], DynamicUser **ret) {
+static int dynamic_user_add(Manager *m, const char *name, int storage_socket[static 2], DynamicUser **ret) {
         DynamicUser *d;
         int r;
 
index 976f081..61861f9 100644 (file)
@@ -1595,7 +1595,7 @@ static int apply_lock_personality(const Unit* u, const ExecContext *c) {
 
 #endif
 
-static void do_idle_pipe_dance(int idle_pipe[4]) {
+static void do_idle_pipe_dance(int idle_pipe[static 4]) {
         assert(idle_pipe);
 
         idle_pipe[1] = safe_close(idle_pipe[1]);
@@ -2618,7 +2618,7 @@ out:
         return r;
 }
 
-static void append_socket_pair(int *array, size_t *n, const int pair[2]) {
+static void append_socket_pair(int *array, size_t *n, const int pair[static 2]) {
         assert(array);
         assert(n);
 
@@ -3942,7 +3942,7 @@ const char* exec_context_fdname(const ExecContext *c, int fd_index) {
         }
 }
 
-static int exec_context_named_iofds(const ExecContext *c, const ExecParameters *p, int named_iofds[3]) {
+static int exec_context_named_iofds(const ExecContext *c, const ExecParameters *p, int named_iofds[static 3]) {
         size_t i, targets;
         const char* stdio_fdname[3];
         size_t n_fds;
index c2ca3e0..7f553a4 100644 (file)
@@ -1628,7 +1628,7 @@ int setup_tmp_dirs(const char *id, char **tmp_dir, char **var_tmp_dir) {
         return 0;
 }
 
-int setup_netns(int netns_storage_socket[2]) {
+int setup_netns(int netns_storage_socket[static 2]) {
         _cleanup_close_ int netns = -1;
         int r, q;
 
index 1188c6d..5e0ec97 100644 (file)
@@ -91,7 +91,7 @@ int setup_tmp_dirs(
                 char **tmp_dir,
                 char **var_tmp_dir);
 
-int setup_netns(int netns_storage_socket[2]);
+int setup_netns(int netns_storage_socket[static 2]);
 
 const char* protect_home_to_string(ProtectHome p) _const_;
 ProtectHome protect_home_from_string(const char *s) _pure_;
index cb9e13c..23d38fb 100644 (file)
@@ -630,7 +630,7 @@ int efi_set_boot_order(uint16_t *order, size_t n) {
         return efi_set_variable(EFI_VENDOR_GLOBAL, "BootOrder", order, n * sizeof(uint16_t));
 }
 
-static int boot_id_hex(const char s[4]) {
+static int boot_id_hex(const char s[static 4]) {
         int id = 0, i;
 
         for (i = 0; i < 4; i++)
index f882a66..bac5c16 100644 (file)
@@ -86,7 +86,7 @@ static void context_clear(Context *context) {
         sd_resolve_unref(context->resolve);
 }
 
-static int connection_create_pipes(Connection *c, int buffer[2], size_t *sz) {
+static int connection_create_pipes(Connection *c, int buffer[static 2], size_t *sz) {
         int r;
 
         assert(c);