~ruther/guix-local

85a72ed28e91f7f918a439c8678254537a374ac7 — Congcong Kuo 5 months ago 4951783
daemon: Use starts_with() and ends_with() instead of string() or hasSuffix()

* 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 <ludo@gnu.org>
M nix/libstore/build.cc => nix/libstore/build.cc +1 -1
@@ 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;
        }

M nix/libstore/builtins.cc => nix/libstore/builtins.cc +1 -1
@@ 65,7 65,7 @@ static const std::map<std::string, derivationBuilder> 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);

M nix/libstore/builtins.hh => nix/libstore/builtins.hh +16 -16
@@ 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<std::string> 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<std::string> builtinBuilderNames();
}

M nix/libstore/derivations.cc => nix/libstore/derivations.cc +2 -3
@@ 2,7 2,6 @@
#include "store-api.hh"
#include "globals.hh"
#include "util.hh"
#include "misc.hh"

#include <format>



@@ 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);
}



M nix/libstore/gc.cc => nix/libstore/gc.cc +2 -4
@@ 2,8 2,6 @@
#include "misc.hh"
#include "local-store.hh"

#include <functional>
#include <queue>
#include <random>
#include <algorithm>
#include <format>


@@ 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();
}


M nix/libstore/globals.cc => nix/libstore/globals.cc +0 -2
@@ 2,10 2,8 @@

#include "globals.hh"
#include "util.hh"
#include "archive.hh"

#include <map>
#include <algorithm>
#include <format>

namespace nix {

M nix/libstore/local-store.cc => nix/libstore/local-store.cc +0 -2
@@ 5,9 5,7 @@
#include "pathlocks.hh"
#include "worker-protocol.hh"
#include "derivations.hh"
#include "affinity.hh"

#include <iostream>
#include <algorithm>
#include <format>
#include <cstring>

M nix/libstore/misc.cc => nix/libstore/misc.cc +0 -1
@@ 2,7 2,6 @@
#include <math.h>
#include "store-api.hh"
#include "local-store.hh"
#include "globals.hh"

#include <format>


M nix/libstore/store-api.cc => nix/libstore/store-api.cc +1 -1
@@ 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') ||

M nix/libutil/affinity.cc => nix/libutil/affinity.cc +1 -1
@@ 3,7 3,7 @@
#include "affinity.hh"

#include <format>
 

#if HAVE_SCHED_H
#include <sched.h>
#endif

M nix/libutil/archive.cc => nix/libutil/archive.cc +0 -2
@@ 3,8 3,6 @@
#include "config.h"

#include <cerrno>
#include <algorithm>
#include <vector>
#include <map>
#include <format>


M nix/libutil/spawn.cc => nix/libutil/spawn.cc +0 -1
@@ 29,7 29,6 @@
#include <fcntl.h>
#include <cstring>
#include <cstdlib>
#include <cstdint>
#include <cassert>
#include <format>


M nix/libutil/util.cc => nix/libutil/util.cc +0 -7
@@ 7,7 7,6 @@
#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <cassert>
#include <format>


@@ 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<char> s2(s.size());

M nix/libutil/util.hh => nix/libutil/util.hh +0 -4
@@ 365,10 365,6 @@ template<class N> 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);