Skip to content

Conversation

@charmitro
Copy link
Contributor

@charmitro charmitro commented Nov 19, 2024

1. Suppress -Wold-style-definition warnings globally since we prefer old-style definitions.
2. Fix hlink.c's cast in qsort() call to properly declare type.
3. Fix pool_alloc.c's function pointer type to match its usage.
4. Fix syscall.c's lseek64 forward declarations.
5. Fix bool typedef conflict in wildtest.c by renaming to rsync_bool.

This cleans up the build with modern compilers (GCC15) while maintaining compatibility with older versions. The qsort comparison function cast in particular is now more type-safe.

Closes #664

Replace unsafe generic function pointer cast with proper type cast for
qsort() comparison function. This fixes a potential type mismatch
warning without changing the behavior.

Signed-off-by: Charalampos Mitrodimas <[email protected]>
@charmitro charmitro changed the title GCC15(-std=gnu23) adjustments GCC15(-std=gnu23) adjustment: Fix function pointer cast in qsort() Nov 20, 2024
@charmitro
Copy link
Contributor Author

PR updated to only fix a pointer cast in qsort() in hlink.c:

rsync/hlink.c

Line 120 in 321dd78

qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)()) hlink_compare_gnum);

hlink.c: In function ‘match_gnums’:
hlink.c:120:56: warning: cast between incompatible function types from ‘int (*)(int *, int *)’ to ‘int (*)(void)’ [-Wcast-function-type]
  120 |         qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)()) hlink_compare_gnum);
      |                                                        ^
hlink.c:120:56: error: passing argument 4 of ‘qsort’ from incompatible pointer type [-Wincompatible-pointer-types]
  120 |         qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)()) hlink_compare_gnum);
      |                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                        |
      |                                                        int (*)(void)
In file included from rsync.h:328,
                 from hlink.c:23:
/usr/include/stdlib.h:971:34: note: expected ‘__compar_fn_t’ {aka ‘int (*)(const void *, const void *)’} but argument is of type ‘int (*)(void)’
  971 |                    __compar_fn_t __compar) __nonnull ((1, 4));
      |                    ~~~~~~~~~~~~~~^~~~~~~~

@tridge tridge merged commit 3621202 into RsyncProject:master Dec 17, 2024
4 checks passed
Copy link

@farshadjanu1 farshadjanu1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.

Copy link

@farshadjanu1 farshadjanu1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build failure with GCC 15 (C23)

4 participants