From b1194186ac2659c168625d7dc12b1a58bc85f737 Mon Sep 17 00:00:00 2001 From: LibretroAdmin Date: Wed, 4 Nov 2026 15:34:35 +0100 Subject: [PATCH] Fix Wii U, dingux and aarch64 build warnings Wii U get_arguments() prints through the argc/argv pointers it was handed, and argv[1] only when there is one. The in-place URL decode passes the string's real size to string_percent_decode(), and Basic auth decodes its own buffer with the length it already has, so LTO no longer sees a SIZE_MAX bound wrapping around. Helpers only some configurations call are compiled for those only: the overlay-only input and menu helpers under HAVE_OVERLAY, the container-only audio_transfer time and movie-header helpers under their container, and the scalar xxh3 long path off NEON. hidraw hands autoconfig the stored vid/pid, rcheevos copies its operand by assignment, and the Qt companion asks QScreen from Qt 5.10 on. --- deps/rcheevos/src/rcheevos/condition.c | 2 +- frontend/drivers/platform_wiiu.c | 7 ++++--- input/drivers_hid/hidraw_hid.c | 2 +- input/input_driver.c | 2 ++ input/input_pointer_frame.h | 2 ++ libretro-common/encodings/encoding_xxh3.c | 2 ++ libretro-common/formats/audio_transfer.c | 8 ++++++++ libretro-common/net/net_http.c | 5 +++-- menu/menu_setting.c | 2 ++ ui/drivers/ui_qt.cpp | 17 ++++++++--------- 10 files changed, 33 insertions(+), 16 deletions(-) diff --git a/deps/rcheevos/src/rcheevos/condition.c b/deps/rcheevos/src/rcheevos/condition.c index 63986812e3..840d1b1b3a 100644 --- a/deps/rcheevos/src/rcheevos/condition.c +++ b/deps/rcheevos/src/rcheevos/condition.c @@ -166,7 +166,7 @@ static int rc_parse_operator(const char** memaddr) { void rc_condition_convert_to_operand(const rc_condition_t* condition, rc_operand_t* operand, rc_parse_state_t* parse) { if (condition->oper == RC_OPERATOR_NONE) { if (operand != &condition->operand1) - memcpy(operand, &condition->operand1, sizeof(*operand)); + *operand = condition->operand1; } else { uint8_t new_size = RC_MEMSIZE_32_BITS; diff --git a/frontend/drivers/platform_wiiu.c b/frontend/drivers/platform_wiiu.c index 3c629e895b..b7d6b12189 100644 --- a/frontend/drivers/platform_wiiu.c +++ b/frontend/drivers/platform_wiiu.c @@ -439,9 +439,10 @@ static void get_arguments(int *argc, char ***argv) ARGV_PTR = NULL; } - DEBUG_VAR(argc); - DEBUG_VAR(argv[0]); - DEBUG_VAR(argv[1]); + DEBUG_VAR(*argc); + DEBUG_VAR((*argv)[0]); + if (*argc > 1) + DEBUG_VAR((*argv)[1]); fflush(stdout); } diff --git a/input/drivers_hid/hidraw_hid.c b/input/drivers_hid/hidraw_hid.c index 7605c7ac91..a8448f4a15 100644 --- a/input/drivers_hid/hidraw_hid.c +++ b/input/drivers_hid/hidraw_hid.c @@ -311,7 +311,7 @@ static void hidraw_hid_add(hidraw_hid_t *hid, const char *devnode) RARCH_LOG("[hidraw] \"%s\" at %s on port %d.\n", name, devnode, dev->slot + 1); input_autoconfigure_connect(name, NULL, NULL, "hid", - dev->slot, vid, pid); + dev->slot, dev->vid, dev->pid); } /* A pad let go: @gone when it left, and is said to have; not when the diff --git a/input/input_driver.c b/input/input_driver.c index fbebe74d78..e4ece74426 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -2722,6 +2722,7 @@ static bool input_gun_button_from_binds(input_driver_t *input, void *data, return true; } +#ifdef HAVE_OVERLAY /* A value from what the driver published, or from the driver. */ static int16_t input_frame_or_driver(input_driver_t *input, void *data, const input_device_driver_t *joypad, @@ -2735,6 +2736,7 @@ static int16_t input_frame_or_driver(input_driver_t *input, void *data, return input->input_state(data, joypad, joypad_info, binds, port, device, idx, id); } +#endif INPUT_NOINLINE static int32_t input_state_wrap_slow( input_driver_t *input, diff --git a/input/input_pointer_frame.h b/input/input_pointer_frame.h index 15f058b694..123b6d3ee4 100644 --- a/input/input_pointer_frame.h +++ b/input/input_pointer_frame.h @@ -383,6 +383,7 @@ static bool input_pointer_frame_pos(unsigned port, unsigned device, return false; } +#ifdef HAVE_OVERLAY /* Finger @idx of the pointer @port reads as @device (RETRO_DEVICE_POINTER * or RARCH_DEVICE_POINTER_SCREEN), down or not and where, packed, at one * look: what reading PRESSED, X and Y in turn gives. 1 down, 0 not; -1 @@ -406,6 +407,7 @@ static int input_pointer_frame_finger(unsigned port, unsigned device, *pos = (device == RARCH_DEVICE_POINTER_SCREEN) ? screen_pos : vp_pos; return down ? 1 : 0; } +#endif /* One value of a mouse, a pointer or a lightgun's aim. False if the * frontend does not hold it and the driver is to be asked. */ diff --git a/libretro-common/encodings/encoding_xxh3.c b/libretro-common/encodings/encoding_xxh3.c index 7c33edad35..8ed07bf8dc 100644 --- a/libretro-common/encodings/encoding_xxh3.c +++ b/libretro-common/encodings/encoding_xxh3.c @@ -403,6 +403,7 @@ static void xxh3_stripe_scalar(uint64_t *a, const uint8_t *p, XXH3_LANE(4); XXH3_LANE(5); XXH3_LANE(6); XXH3_LANE(7); } +#if !defined(XXH3_HAVE_NEON) static uint64_t xxh3_long_scalar(const uint8_t *in, size_t len, uint64_t seed) { const size_t total = len; @@ -433,6 +434,7 @@ static uint64_t xxh3_long_scalar(const uint8_t *in, size_t len, uint64_t seed) xxh3_stripe_scalar(acc, in + len - XXH3_STRIPE, sec + XXH3_LAST_KEY); return xxh3_merge_sec(acc, sec, total); } +#endif /* ---- a stripe at a time, for xxh3_update() ---- * diff --git a/libretro-common/formats/audio_transfer.c b/libretro-common/formats/audio_transfer.c index fb980cb95f..4417e57822 100644 --- a/libretro-common/formats/audio_transfer.c +++ b/libretro-common/formats/audio_transfer.c @@ -623,6 +623,7 @@ static int audio_transfer_time_add(int64_t a, int64_t b, int64_t *out) return 1; } +#if defined(HAVE_RWEBM) || (defined(HAVE_RAAC) && defined(HAVE_RMP4)) static int audio_transfer_time_frames(int64_t ns, unsigned rate, int64_t *out) { const int64_t maximum = (int64_t)((~(uint64_t)0) >> 1); @@ -644,6 +645,7 @@ static int audio_transfer_time_packet(struct audio_transfer_time *t, t->continued = continued; return 1; } +#endif static int audio_transfer_time_map(struct audio_transfer_time *t, size_t skip, size_t frames) @@ -1978,6 +1980,7 @@ static int audio_transfer_vorbis_movie_fill(struct audio_transfer_vorbis *v, int return 1; } +#ifdef HAVE_RWEBM /* Header-only contribution in the original decoder sequence. A seek's * priming packet still occupies that sequence even though decoding it * after reset produces no PCM. */ @@ -1994,6 +1997,7 @@ static int audio_transfer_vorbis_movie_header(struct audio_transfer_vorbis *v, || !audio_transfer_time_add(v->emitted, frames, &v->emitted)) return -1; return frames; } +#endif static int audio_transfer_vorbis_movie_read(struct audio_transfer_vorbis *v, int s16, int16_t *out16, float *outf, size_t frames, size_t *got) @@ -4869,6 +4873,7 @@ static int audio_transfer_opus_movie_read(struct audio_transfer_opus *op, return produced || op->wall || op->yielded ? AUDIO_PROCESS_NEXT : AUDIO_PROCESS_END; } +#ifdef HAVE_RWEBM static int audio_transfer_opus_movie_header(struct audio_transfer_opus *op, const uint8_t *packet, uint32_t size, int64_t pad) { @@ -4893,6 +4898,7 @@ static int audio_transfer_opus_movie_header(struct audio_transfer_opus *op, return (int)frames; } #endif +#endif #ifdef HAVE_RAAC /* The next access unit, wherever this context's come from. Returns 1 @@ -5061,6 +5067,7 @@ static void audio_transfer_aac_to_head(struct audio_transfer_aac *ac) audio_transfer_aac_withdraw_bound(ac); } +#ifdef HAVE_RWEBM static int audio_transfer_aac_movie_header(struct audio_transfer_aac *ac) { size_t frames = raac_frame_len(ac->handle); @@ -5078,6 +5085,7 @@ static int audio_transfer_aac_movie_header(struct audio_transfer_aac *ac) || !audio_transfer_time_add(ac->emitted, (int64_t)frames, &ac->emitted)) return -1; return (int)frames; } +#endif static int audio_transfer_aac_fill(struct audio_transfer_aac *ac); diff --git a/libretro-common/net/net_http.c b/libretro-common/net/net_http.c index 3767661739..24487b6581 100644 --- a/libretro-common/net/net_http.c +++ b/libretro-common/net/net_http.c @@ -734,7 +734,8 @@ int net_http_urldecode(char *dst, size_t dst_size, const char *src) int net_http_urldecode_inplace(char *s) { - return string_percent_decode(s, (size_t)-1, s); + /* Decoding never grows the string, so its own size is the bound */ + return string_percent_decode(s, strlen(s) + 1, s); } /* Base64 "user:pass" for Basic auth, from a URL's userinfo. */ @@ -748,7 +749,7 @@ static char *net_http_basic_auth(const char *userinfo, size_t len) return NULL; memcpy(raw, userinfo, len); raw[len] = '\0'; - out = base64(raw, net_http_urldecode_inplace(raw), &flen); + out = base64(raw, string_percent_decode(raw, len + 1, raw), &flen); free(raw); return out; } diff --git a/menu/menu_setting.c b/menu/menu_setting.c index d6243a6860..45c77037c0 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -8767,6 +8767,7 @@ static size_t setting_get_string_representation_input_rotation( return strlcpy(s, msg_hash_to_str(e), len); } +#ifdef HAVE_OVERLAY static size_t setting_get_string_representation_overlay_contact_method( rarch_setting_t *setting, char *s, size_t len) { @@ -8784,6 +8785,7 @@ static size_t setting_get_string_representation_overlay_contact_method( } return strlcpy(s, msg_hash_to_str(e), len); } +#endif static size_t setting_get_string_representation_socd( rarch_setting_t *setting, char *s, size_t len) diff --git a/ui/drivers/ui_qt.cpp b/ui/drivers/ui_qt.cpp index e171d99af3..e22cd1abf3 100644 --- a/ui/drivers/ui_qt.cpp +++ b/ui/drivers/ui_qt.cpp @@ -3980,13 +3980,13 @@ void MainWindow::saveDockLayout() * the default tabbing / splits are undone and rebuilt from the rows), * tabbed onto their saved partner, sized, and the saved tab raised. */ /* The usable area of the screen a point falls on, for placing windows - * and docks. QScreen and QGuiApplication are Qt 5; QDesktopWidget is - * Qt 4 and Qt 5 and gone in Qt 6. This is the one place the companion - * asks which screen a point is on, so it is the one place that knows - * which Qt it is built against. */ + * and docks. QGuiApplication::screenAt is Qt 5.10 and later; older Qt + * asks QDesktopWidget, which is deprecated from 5.10 and gone in Qt 6. + * This is the one place the companion asks which screen a point is on, + * so it is the one place that knows which Qt it is built against. */ static QRect ui_qt_available_geometry_at(const QPoint &p) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) QScreen *screen = QGuiApplication::screenAt(p); if (!screen) screen = QGuiApplication::primaryScreen(); @@ -5173,10 +5173,9 @@ static void* ui_companion_qt_init(void) handle); qt_companion_core = handle->core; - /* The usable area of the primary screen, asked for the way the rest - * of this file asks: QScreen is Qt 5 and later, QDesktopWidget is - * Qt 4 and Qt 5 and gone in Qt 6. */ -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + /* The usable area of the primary screen: QScreen is Qt 5 and later, + * QDesktopWidget is for Qt 4. */ +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) { QScreen *screen = QGuiApplication::primaryScreen(); if (screen)