diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2023-11-19 21:47:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-19 21:47:34 +0200 |
commit | db61be1897ffe8f4d1a72bed62c8c892d06a1983 (patch) | |
tree | 55372b2fd05926de9c0c6c35acb0554b144ae107 | |
parent | 1fdf240aec17b6525ee2ebc76152ea8109f83595 (diff) | |
parent | 1136f5bd18ce5b1657347dc26b0aa8e3153786ce (diff) | |
download | bindfs-db61be1897ffe8f4d1a72bed62c8c892d06a1983.tar.gz |
Merge pull request #148 from hartwork/fix-warnings
Fix compile warnings (including a serious one) + cover FUSE 2 in CI + add `-Wextra` to `configure.ac`
-rw-r--r-- | .github/workflows/linux.yml | 15 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/bindfs.c | 45 | ||||
-rw-r--r-- | src/misc.c | 11 | ||||
-rw-r--r-- | src/permchain.c | 14 | ||||
-rw-r--r-- | src/usermap.c | 4 | ||||
-rw-r--r-- | tests/odirect_write.c | 2 |
7 files changed, 73 insertions, 20 deletions
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index cef2939..71e0759 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,27 +12,38 @@ on: jobs: linux: - name: Build (${{ matrix.cc }} on ${{ matrix.runs-on }}) + name: Build (${{ matrix.cc }} and ${{ matrix.fuse_package }} on ${{ matrix.runs-on }}) runs-on: ${{ matrix.runs-on }} strategy: fail-fast: false matrix: include: + # FUSE 2 - cc: gcc-13 cxx: g++-13 clang_major_version: null clang_repo_suffix: null runs-on: ubuntu-22.04 + fuse_package: libfuse-dev + # FUSE 3 + - cc: gcc-13 + cxx: g++-13 + clang_major_version: null + clang_repo_suffix: null + runs-on: ubuntu-22.04 + fuse_package: libfuse3-dev - cc: clang-17 cxx: clang++-17 clang_major_version: 17 clang_repo_suffix: -17 runs-on: ubuntu-22.04 + fuse_package: libfuse3-dev - cc: clang-18 cxx: clang++-18 clang_major_version: 18 clang_repo_suffix: runs-on: ubuntu-22.04 + fuse_package: libfuse3-dev steps: - name: Add Clang/LLVM repositories if: "${{ contains(matrix.cxx, 'clang') }}" @@ -48,7 +59,7 @@ jobs: sudo apt-get install --yes --no-install-recommends \ autoconf \ automake \ - libfuse3-dev \ + ${{ matrix.fuse_package }} \ libtool \ pkg-config diff --git a/configure.ac b/configure.ac index 00f8ebc..0598619 100644 --- a/configure.ac +++ b/configure.ac @@ -35,7 +35,7 @@ AM_CONDITIONAL([BUILD_OS_IS_DARWIN], [case $build_os in darwin* ) true ;; * ) fa # _DARWIN_BETTER_REALPATH fixes MacOS realpath() broken around Catalina (#83). my_CPPFLAGS="-D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_XOPEN_SOURCE=700 -D__BSD_VISIBLE=1 -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_DARWIN_BETTER_REALPATH" -my_CFLAGS="-std=c99 -Wall -Wpedantic -fno-common" +my_CFLAGS="-std=c99 -Wall -Wextra -Wpedantic -fno-common" my_LDFLAGS="-pthread" AC_SUBST([my_CPPFLAGS]) AC_SUBST([my_CFLAGS]) diff --git a/src/bindfs.c b/src/bindfs.c index b4a1f5a..5f52395 100644 --- a/src/bindfs.c +++ b/src/bindfs.c @@ -446,9 +446,9 @@ static int getattr_common(const char *procpath, struct stat *stbuf) } /* Report user-defined owner/group if specified */ - if (settings.new_uid != -1) + if (settings.new_uid != (uid_t)-1) stbuf->st_uid = settings.new_uid; - if (settings.new_gid != -1) + if (settings.new_gid != (gid_t)-1) stbuf->st_gid = settings.new_gid; /* Mirrored user? */ @@ -549,12 +549,12 @@ static int chown_new_file(const char *path, struct fuse_context *fc, int (*chown } } - if (settings.create_for_uid != -1) + if (settings.create_for_uid != (uid_t)-1) file_owner = settings.create_for_uid; - if (settings.create_for_gid != -1) + if (settings.create_for_gid != (gid_t)-1) file_group = settings.create_for_gid; - if ((file_owner != -1) || (file_group != -1)) { + if ((file_owner != (uid_t)-1) || (file_group != (gid_t)-1)) { if (chown_func(path, file_owner, file_group) == -1) { DPRINTF("Failed to chown new file or directory (%d)", errno); } @@ -750,6 +750,7 @@ static void *bindfs_init() static void bindfs_destroy(void *private_data) { + (void)private_data; } #ifdef HAVE_FUSE_3 @@ -761,6 +762,9 @@ static int bindfs_getattr(const char *path, struct stat *stbuf) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -827,6 +831,11 @@ static int bindfs_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) #endif { + (void)offset; + (void)fi; +#ifdef HAVE_FUSE_3 + (void)flags; +#endif char *real_path = process_path(path, true); if (real_path == NULL) { return -errno; @@ -1116,6 +1125,9 @@ static int bindfs_chmod(const char *path, mode_t mode) struct stat st; mode_t diff = 0; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1181,8 +1193,11 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif - if (uid != -1) { + if (uid != (uid_t)-1) { switch (settings.chown_policy) { case CHOWN_NORMAL: uid = usermap_get_uid_or_default(settings.usermap_reverse, uid, uid); @@ -1198,7 +1213,7 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) } } - if (gid != -1) { + if (gid != (gid_t)-1) { switch (settings.chgrp_policy) { case CHGRP_NORMAL: gid = usermap_get_gid_or_default(settings.usermap_reverse, gid, gid); @@ -1214,7 +1229,7 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) } } - if (uid != -1 || gid != -1) { + if (uid != (uid_t)-1 || gid != (gid_t)-1) { real_path = process_path(path, true); if (real_path == NULL) return -errno; @@ -1237,6 +1252,9 @@ static int bindfs_truncate(const char *path, off_t size) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1273,6 +1291,9 @@ static int bindfs_utimens(const char *path, const struct timespec ts[2]) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1437,6 +1458,7 @@ static int bindfs_write(const char *path, const char *buf, size_t size, static int bindfs_lock(const char *path, struct fuse_file_info *fi, int cmd, struct flock *lock) { + (void)path; int res = fcntl(fi->fh, cmd, lock); if (res == -1) { return -errno; @@ -1447,6 +1469,7 @@ static int bindfs_lock(const char *path, struct fuse_file_info *fi, int cmd, /* This callback is only installed if lock forwarding is enabled. */ static int bindfs_flock(const char *path, struct fuse_file_info *fi, int op) { + (void)path; int res = flock(fi->fh, op); if (res == -1) { return -errno; @@ -1464,6 +1487,9 @@ static int bindfs_ioctl(const char *path, int cmd, void *arg, void *data) #endif { + (void)path; + (void)arg; + (void)flags; int res = ioctl(fi->fh, cmd, data); if (res == -1) { return -errno; @@ -1891,6 +1917,8 @@ enum OptionKey { static int process_option(void *data, const char *arg, int key, struct fuse_args *outargs) { + (void)data; + (void)outargs; switch ((enum OptionKey)key) { case OPTKEY_HELP: @@ -2322,6 +2350,7 @@ static void setup_signal_handling() static void signal_handler(int sig) { + (void)sig; invalidate_user_cache(); } @@ -19,6 +19,7 @@ #include "misc.h" #include <stdarg.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -166,7 +167,7 @@ bool path_starts_with(const char *path, const char* prefix, size_t prefix_len) const char* path_part = path + (prefix_part - prefix); const char* path_slash = strchr(path_part, '/'); - size_t path_part_len = path_slash ? path_slash - path_part : path_len - (path_part - path); + size_t path_part_len = path_slash ? (size_t)(path_slash - path_part) : path_len - (path_part - path); return prefix_part_len == path_part_len; } @@ -328,12 +329,12 @@ void grow_memory_block(struct memory_block *a, size_t amount) if (new_cap == 0) { new_cap = 8; } else { + if (new_cap > SIZE_MAX / 2) { + fprintf(stderr, "Memory block too large."); + abort(); + } new_cap *= 2; } - if (new_cap < 0) { // Overflow - fprintf(stderr, "Memory block too large."); - abort(); - } } a->ptr = (char *)realloc(a->ptr, new_cap); a->capacity = new_cap; diff --git a/src/permchain.c b/src/permchain.c index b95bd8b..d101aa1 100644 --- a/src/permchain.c +++ b/src/permchain.c @@ -67,6 +67,8 @@ static int add_chmod_rule_to_permchain(const char *start, const char *end, int len = end - start; char *buf = malloc((len + 1) * sizeof(char)); + if (buf == NULL) + return -1; const char *p = buf; enum {LHS, RHS} state = LHS; @@ -149,8 +151,18 @@ error: static int add_octal_rule_to_permchain(const char *start, const char *end, struct permchain *pc) { + // Make [start..end[ available as a null-terminated string to `strtol` + const int len = end - start; + char * const buf = malloc((len + 1) * sizeof(char)); + if (buf == NULL) + return -1; + memcpy(buf, start, len); + buf[len] = '\0'; + struct permchain *newpc = permchain_create(); - long mode = strtol(start, NULL, 8); + + long mode = strtol(buf, NULL, 8); + free(buf); if (mode < 0 || mode > 0777) { permchain_destroy(newpc); diff --git a/src/usermap.c b/src/usermap.c index f745e74..eb7b61c 100644 --- a/src/usermap.c +++ b/src/usermap.c @@ -52,7 +52,7 @@ UsermapStatus usermap_add_uid(UserMap *map, uid_t from, uid_t to) map->user_from = (uid_t*)realloc(map->user_from, map->user_capacity * sizeof(uid_t)); map->user_to = (uid_t*)realloc(map->user_to, map->user_capacity * sizeof(uid_t)); } - if (usermap_get_uid_or_default(map, from, -1) != -1) { + if (usermap_get_uid_or_default(map, from, -1) != (uid_t)-1) { return usermap_status_duplicate_key; } i = map->user_size; @@ -77,7 +77,7 @@ UsermapStatus usermap_add_gid(UserMap *map, gid_t from, gid_t to) map->group_from = (gid_t*)realloc(map->group_from, map->group_capacity * sizeof(gid_t)); map->group_to = (gid_t*)realloc(map->group_to, map->group_capacity * sizeof(gid_t)); } - if (usermap_get_gid_or_default(map, from, -1) != -1) { + if (usermap_get_gid_or_default(map, from, -1) != (gid_t)-1) { return usermap_status_duplicate_key; } i = map->group_size; diff --git a/tests/odirect_write.c b/tests/odirect_write.c index 10b63f9..bc9040f 100644 --- a/tests/odirect_write.c +++ b/tests/odirect_write.c @@ -55,7 +55,7 @@ int main(int argc, char** argv) { perror("failed to write"); return 1; } - if (res != buf_size) { + if ((size_t)res != buf_size) { // Too lazy to write a loop here unless it turns out to be necessary. fprintf(stderr, "Failed to write exactly %lu bytes", (unsigned long)amt_read); } |