From 85a72ed28e91f7f918a439c8678254537a374ac7 Mon Sep 17 00:00:00 2001 From: Congcong Kuo Date: Mon, 20 Oct 2025 15:47:25 +0800 Subject: [PATCH] daemon: Use starts_with() and ends_with() instead of string() or hasSuffix() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * nix/libstore/build.cc (DerivationGoal::tryBuildHook): Use starts_with instead of string() * nix/libstore/builtins.cc (lookupBuiltinBuilder): Same. * nix/libstore/builtins.hh (isBuiltin): Same and fix indentation of the file. * nix/libstore/derivations.cc (DerivationOutput::parseHashInfo, isDerivation): Same and clean header files. * nix/libstore/gc.cc (addPermRoot, LocalStore::isActiveTempFile): Same. * nix/libstore/globals.cc: Same. * nix/libstore/local-store.cc: Same. * nix/libstore/misc.cc: Same. * nix/libstore/store-api.cc (checkStoreName): Same. * nix/libutil/affinity.cc: Same. * nix/libutil/archive.cc: Same. * nix/libutil/spawn.cc: Same. * nix/libutil/util.{cc, hh} (hasSuffix): Removed. Signed-off-by: Ludovic Courtès --- nix/libstore/build.cc | 2 +- nix/libstore/builtins.cc | 2 +- nix/libstore/builtins.hh | 32 ++++++++++++++++---------------- nix/libstore/derivations.cc | 5 ++--- nix/libstore/gc.cc | 6 ++---- nix/libstore/globals.cc | 2 -- nix/libstore/local-store.cc | 2 -- nix/libstore/misc.cc | 1 - nix/libstore/store-api.cc | 2 +- nix/libutil/affinity.cc | 2 +- nix/libutil/archive.cc | 2 -- nix/libutil/spawn.cc | 1 - nix/libutil/util.cc | 7 ------- nix/libutil/util.hh | 4 ---- 14 files changed, 24 insertions(+), 46 deletions(-) diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc index bf2e9150d6a..b3f9c24983c 100644 --- a/nix/libstore/build.cc +++ b/nix/libstore/build.cc @@ -1573,7 +1573,7 @@ HookReply DerivationGoal::tryBuildHook() string reply; while (true) { string s = readLine(worker.hook->fromAgent.readSide); - if (string(s, 0, 2) == "# ") { + if (s.starts_with("# ")) { reply = string(s, 2); break; } diff --git a/nix/libstore/builtins.cc b/nix/libstore/builtins.cc index b1a32480b55..dc0f68a171a 100644 --- a/nix/libstore/builtins.cc +++ b/nix/libstore/builtins.cc @@ -65,7 +65,7 @@ static const std::map builtins = derivationBuilder lookupBuiltinBuilder(const std::string & name) { - if (name.substr(0, 8) == "builtin:") + if (name.starts_with("builtin:")) { auto realName = name.substr(8); auto builder = builtins.find(realName); diff --git a/nix/libstore/builtins.hh b/nix/libstore/builtins.hh index 602a5a1c58d..d5d09e27bc0 100644 --- a/nix/libstore/builtins.hh +++ b/nix/libstore/builtins.hh @@ -25,20 +25,20 @@ namespace nix { - inline bool isBuiltin(const Derivation & drv) - { - return string(drv.builder, 0, 8) == "builtin:"; - } - - /* Build DRV, which lives at DRVPATH. */ - typedef void (*derivationBuilder) (const Derivation &drv, - const std::string &drvPath, - const std::string &output); - - /* Return the built-in builder called BUILDER, or NULL if none was - found. */ - derivationBuilder lookupBuiltinBuilder(const std::string &builder); - - /* Return the list of supported built-in builder names. */ - std::list builtinBuilderNames(); +inline bool isBuiltin(const Derivation & drv) +{ + return drv.builder.starts_with("builtin:"); +} + +/* Build DRV, which lives at DRVPATH. */ +typedef void (*derivationBuilder) (const Derivation &drv, + const std::string &drvPath, + const std::string &output); + +/* Return the built-in builder called BUILDER, or NULL if none was + found. */ +derivationBuilder lookupBuiltinBuilder(const std::string &builder); + +/* Return the list of supported built-in builder names. */ +std::list builtinBuilderNames(); } diff --git a/nix/libstore/derivations.cc b/nix/libstore/derivations.cc index c253a2a438a..f05296702b3 100644 --- a/nix/libstore/derivations.cc +++ b/nix/libstore/derivations.cc @@ -2,7 +2,6 @@ #include "store-api.hh" #include "globals.hh" #include "util.hh" -#include "misc.hh" #include @@ -16,7 +15,7 @@ void DerivationOutput::parseHashInfo(bool & recursive, HashType & hashType, Hash recursive = false; string algo = hashAlgo; - if (string(algo, 0, 2) == "r:") { + if (algo.starts_with("r:")) { recursive = true; algo = string(algo, 2); } @@ -200,7 +199,7 @@ string unparseDerivation(const Derivation & drv) bool isDerivation(const string & fileName) { - return hasSuffix(fileName, drvExtension); + return fileName.ends_with(drvExtension); } diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc index 96440077fb5..efb9fd52cbb 100644 --- a/nix/libstore/gc.cc +++ b/nix/libstore/gc.cc @@ -2,8 +2,6 @@ #include "misc.hh" #include "local-store.hh" -#include -#include #include #include #include @@ -108,7 +106,7 @@ Path addPermRoot(StoreAPI & store, const Path & _storePath, if (!allowOutsideRootsDir) { Path rootsDir = canonPath(std::format("{}/{}", settings.nixStateDir, gcRootsDir)); - if (string(gcRoot, 0, rootsDir.size() + 1) != rootsDir + "/") + if (gcRoot.starts_with(rootsDir + "/")) throw Error(std::format( "path `{}' is not a valid garbage collector root; " "it's not in the directory `{}'", @@ -383,7 +381,7 @@ struct LocalStore::GCState bool LocalStore::isActiveTempFile(const GCState & state, const Path & path, const string & suffix) { - return hasSuffix(path, suffix) + return path.ends_with(suffix) && state.tempRoots.find(string(path, 0, path.size() - suffix.size())) != state.tempRoots.end(); } diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc index 16f43f6abcb..8551fea56c0 100644 --- a/nix/libstore/globals.cc +++ b/nix/libstore/globals.cc @@ -2,10 +2,8 @@ #include "globals.hh" #include "util.hh" -#include "archive.hh" #include -#include #include namespace nix { diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc index f11f48bcf07..161c8d81bda 100644 --- a/nix/libstore/local-store.cc +++ b/nix/libstore/local-store.cc @@ -5,9 +5,7 @@ #include "pathlocks.hh" #include "worker-protocol.hh" #include "derivations.hh" -#include "affinity.hh" -#include #include #include #include diff --git a/nix/libstore/misc.cc b/nix/libstore/misc.cc index 943fb9c9719..88a24d4b822 100644 --- a/nix/libstore/misc.cc +++ b/nix/libstore/misc.cc @@ -2,7 +2,6 @@ #include #include "store-api.hh" #include "local-store.hh" -#include "globals.hh" #include diff --git a/nix/libstore/store-api.cc b/nix/libstore/store-api.cc index 0596678b8b5..1067e44a8e2 100644 --- a/nix/libstore/store-api.cc +++ b/nix/libstore/store-api.cc @@ -60,7 +60,7 @@ void checkStoreName(const string & name) string validChars = "+-._?="; /* Disallow names starting with a dot for possible security reasons (e.g., "." and ".."). */ - if (string(name, 0, 1) == ".") + if (name.starts_with(".")) throw Error(std::format("invalid name: `{}' (can't begin with dot)", name)); for (const auto& i : name) if (!((i >= 'A' && i <= 'Z') || diff --git a/nix/libutil/affinity.cc b/nix/libutil/affinity.cc index d50e9f3e9cd..53500c22ab9 100644 --- a/nix/libutil/affinity.cc +++ b/nix/libutil/affinity.cc @@ -3,7 +3,7 @@ #include "affinity.hh" #include - + #if HAVE_SCHED_H #include #endif diff --git a/nix/libutil/archive.cc b/nix/libutil/archive.cc index 0df5285860b..fa9f4398e3c 100644 --- a/nix/libutil/archive.cc +++ b/nix/libutil/archive.cc @@ -3,8 +3,6 @@ #include "config.h" #include -#include -#include #include #include diff --git a/nix/libutil/spawn.cc b/nix/libutil/spawn.cc index c25c3a681f2..02676d65f97 100644 --- a/nix/libutil/spawn.cc +++ b/nix/libutil/spawn.cc @@ -29,7 +29,6 @@ #include #include #include -#include #include #include diff --git a/nix/libutil/util.cc b/nix/libutil/util.cc index ddce9879cac..22022db51a5 100644 --- a/nix/libutil/util.cc +++ b/nix/libutil/util.cc @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -1343,12 +1342,6 @@ bool statusOk(int status) } -bool hasSuffix(const string & s, const string & suffix) -{ - return s.size() >= suffix.size() && string(s, s.size() - suffix.size()) == suffix; -} - - void expect(std::istream & str, std::string_view s) { std::vector s2(s.size()); diff --git a/nix/libutil/util.hh b/nix/libutil/util.hh index d30dc7801e2..436c378cb6e 100644 --- a/nix/libutil/util.hh +++ b/nix/libutil/util.hh @@ -365,10 +365,6 @@ template bool string2Int(const string & s, N & n) } -/* Return true iff `s' ends in `suffix'. */ -bool hasSuffix(const string & s, const string & suffix); - - /* Read string `s' from stream `str'. */ void expect(std::istream & str, std::string_view s);