From: Michael Tremer Date: Tue, 1 Jul 2025 08:02:20 +0000 (+0000) Subject: arch: Change how the native architecture is being returned X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=ea256abb121caf6ba1c03343c07b642dca90c4a9;p=pakfire.git arch: Change how the native architecture is being returned Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/arch.c b/src/pakfire/arch.c index 02923876..3ba60c2f 100644 --- a/src/pakfire/arch.c +++ b/src/pakfire/arch.c @@ -176,15 +176,21 @@ int __pakfire_arch_buildtarget(char* buffer, size_t length, const char* arch, co return 0; } -const char* pakfire_arch_native(void) { +int pakfire_arch_native(const char** arch) { static struct utsname utsname = {}; + int r; + // Fetch uname() data only once if (!*utsname.machine) { - if (uname(&utsname) < 0) - return NULL; + r = uname(&utsname); + if (r < 0) + return -errno; } - return utsname.machine; + // Return the architecture + *arch = utsname.machine; + + return 0; } int pakfire_arch_is_compatible(const char* name, const char* compatible_arch) { @@ -212,12 +218,18 @@ int pakfire_arch_is_compatible(const char* name, const char* compatible_arch) { which might not be the same as the requested architecture. */ static const char* pakfire_arch_is_natively_supported_by_host(const char* name) { + const char* native_arch = NULL; + int r; + if (!name) { errno = EINVAL; return NULL; } - const char* native_arch = pakfire_arch_native(); + // Fetch the native architecture + r = pakfire_arch_native(&native_arch); + if (r < 0) + return NULL; // All hosts support noarch natively if (pakfire_string_equals(name, "noarch")) diff --git a/src/pakfire/arch.h b/src/pakfire/arch.h index e02a0475..eaf3f4d1 100644 --- a/src/pakfire/arch.h +++ b/src/pakfire/arch.h @@ -23,7 +23,7 @@ int pakfire_arch_supported(const char* name); const char** pakfire_supported_arches(void); -const char* pakfire_arch_native(void); +int pakfire_arch_native(const char** arch); const char* pakfire_arch_is_supported_by_host(const char* name); diff --git a/src/pakfire/root.c b/src/pakfire/root.c index 3f460345..5ffac3cb 100644 --- a/src/pakfire/root.c +++ b/src/pakfire/root.c @@ -981,8 +981,11 @@ int pakfire_root_create(pakfire_root** root, pakfire_ctx* ctx, return -EINVAL; // Default to the native architecture - if (!arch) - arch = pakfire_arch_native(); + if (!arch) { + r = pakfire_arch_native(&arch); + if (r < 0) + return r; + } // Check path if (path) {