diff --git a/src/fundamental/bootspec-fundamental.c b/src/fundamental/bootspec-fundamental.c index 51078397b6e..9c4aee9744e 100644 --- a/src/fundamental/bootspec-fundamental.c +++ b/src/fundamental/bootspec-fundamental.c @@ -44,7 +44,7 @@ sd_bool bootspec_pick_name_version( good_version = os_image_version ?: (os_version ?: (os_version_id ? : os_build_id)); if (!good_name || !good_version) - return false; + return sd_false; if (ret_name) *ret_name = good_name; @@ -52,5 +52,5 @@ sd_bool bootspec_pick_name_version( if (ret_version) *ret_version = good_version; - return true; + return sd_true; } diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h index c52957a55c3..cd9e60cf60e 100644 --- a/src/fundamental/macro-fundamental.h +++ b/src/fundamental/macro-fundamental.h @@ -85,8 +85,8 @@ #define ONCE __ONCE(UNIQ_T(_once_, UNIQ)) #define __ONCE(o) \ ({ \ - static bool (o) = false; \ - __sync_bool_compare_and_swap(&(o), false, true); \ + static bool (o) = sd_false; \ + __sync_bool_compare_and_swap(&(o), sd_false, sd_true); \ }) #undef MAX @@ -236,7 +236,7 @@ #define IN_SET(x, ...) \ ({ \ - sd_bool _found = false; \ + sd_bool _found = sd_false; \ /* If the build breaks in the line below, you need to extend the case macros. (We use "long double" as \ * type for the array, in the hope that checkers such as ubsan don't complain that the initializers for \ * the array are not representable by the base type. Ideally we'd use typeof(x) as base type, but that \ @@ -245,7 +245,7 @@ assert_cc(ELEMENTSOF(__assert_in_set) <= 20); \ switch(x) { \ FOR_EACH_MAKE_CASE(__VA_ARGS__) \ - _found = true; \ + _found = sd_true; \ break; \ default: \ break; \ diff --git a/src/fundamental/types-fundamental.h b/src/fundamental/types-fundamental.h index 2a9a114bbc0..5977e40c6cb 100644 --- a/src/fundamental/types-fundamental.h +++ b/src/fundamental/types-fundamental.h @@ -1,6 +1,20 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +/* This defines a number of basic types that are one thing in userspace and another in the UEFI environment, + * but mostly the same in concept and behaviour. + * + * Note: if the definition of these types/values has slightly different semantics in userspace and in the + * UEFI environment then please prefix its name with "sd_" to make clear these types have special semantics, + * and *we* defined them. Otherwise, if the types are effectively 100% identical in behaviour in userspace + * and UEFI environment you can omit the prefix. (Examples: sd_char is 8 bit in userspace and 16 bit in UEFI + * space hence it should have the sd_ prefix; but size_t in userspace and UINTN in UEFI environment are 100% + * defined the same way ultimately, hence it's OK to just define size_t as alias to UINTN in UEFI + * environment, so that size_t can be used everywhere, without any "sd_" prefix.) + * + * Note: we generally prefer the userspace names of types and concepts. i.e. if in doubt please name types + * after the userspace vocabulary, and let's keep UEFI vocabulary specific to the UEFI build environment. */ + #ifdef SD_BOOT #include @@ -9,8 +23,8 @@ typedef CHAR16 sd_char; typedef INTN sd_int; typedef UINTN size_t; -#define true TRUE -#define false FALSE +#define sd_true TRUE +#define sd_false FALSE #else #include #include @@ -18,4 +32,8 @@ typedef UINTN size_t; typedef bool sd_bool; typedef char sd_char; typedef int sd_int; + +#define sd_true true +#define sd_false false + #endif