From 7903a6c63210713bcdb5946d164054ba44a70237 Mon Sep 17 00:00:00 2001 From: Sam Maier Date: Wed, 8 Apr 2026 14:17:58 -0400 Subject: [PATCH] Fix deprecated usage of strtok The latest Android NDK marks strtok as deprecated and suggests using strtok_r instead. Bug: 477295731 Change-Id: I2b20a2ae0a9e19ec93e31669ec380802e6902090 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/7739107 Commit-Queue: Frank Barchard Reviewed-by: Wan-Teh Chang Reviewed-by: Frank Barchard --- source/cpu_id.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/cpu_id.cc b/source/cpu_id.cc index 535c4e9e9..8ad35acb1 100644 --- a/source/cpu_id.cc +++ b/source/cpu_id.cc @@ -53,6 +53,11 @@ extern "C" { #define SAFEBUFFERS #endif +#if defined(_MSC_VER) +// MSVC provides strtok_s which is functionally equivalent to strtok_r. +#define strtok_r strtok_s +#endif + // cpu_info_ variable for SIMD instruction sets detected. LIBYUV_API int cpu_info_ = 0; @@ -330,16 +335,17 @@ LIBYUV_API SAFEBUFFERS int RiscvCpuCaps(const char* cpuinfo_name) { // supervisor-level extensions. extensions = strpbrk(isa, "zxs"); if (extensions) { + extensions_len = strlen(extensions); // Multi-letter extensions are seperated by a single underscore // as described in RISC-V User-Level ISA V2.2. - char* ext = strtok(extensions, "_"); - extensions_len = strlen(extensions); + char* saveptr = NULL; + char* ext = strtok_r(extensions, "_", &saveptr); while (ext) { // Search for the ZVFH (Vector FP16) extension. if (!strcmp(ext, "zvfh")) { flag |= kCpuHasRVVZVFH; } - ext = strtok(NULL, "_"); + ext = strtok_r(NULL, "_", &saveptr); } } std_isa_len = isa_len - extensions_len - 5;