diff options
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/args.cc | 2 | ||||
-rw-r--r-- | src/libutil/args.hh | 2 | ||||
-rw-r--r-- | src/libutil/compression.cc | 2 | ||||
-rw-r--r-- | src/libutil/hash.cc | 70 | ||||
-rw-r--r-- | src/libutil/hash.hh | 33 | ||||
-rw-r--r-- | src/libutil/logging.cc | 18 | ||||
-rw-r--r-- | src/libutil/logging.hh | 88 | ||||
-rw-r--r-- | src/libutil/util.cc | 4 | ||||
-rw-r--r-- | src/libutil/util.hh | 2 |
9 files changed, 116 insertions, 105 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc index ba15ea571..8fd437f26 100644 --- a/src/libutil/args.cc +++ b/src/libutil/args.cc @@ -164,7 +164,7 @@ Args::FlagMaker & Args::FlagMaker::mkHashTypeFlag(HashType * ht) description("hash algorithm ('md5', 'sha1', 'sha256', or 'sha512')"); handler([ht](std::string s) { *ht = parseHashType(s); - if (*ht == htUnknown) + if (*ht == HashType::Unknown) throw UsageError("unknown hash type '%1%'", s); }); return *this; diff --git a/src/libutil/args.hh b/src/libutil/args.hh index 967efbe1c..afa493663 100644 --- a/src/libutil/args.hh +++ b/src/libutil/args.hh @@ -10,7 +10,7 @@ namespace nix { MakeError(UsageError, Error); -enum HashType : char; +enum struct HashType : char; class Args { diff --git a/src/libutil/compression.cc b/src/libutil/compression.cc index 860b04adb..75e889f41 100644 --- a/src/libutil/compression.cc +++ b/src/libutil/compression.cc @@ -314,7 +314,7 @@ struct XzCompressionSink : CompressionSink ret = lzma_stream_encoder_mt(&strm, &mt_options); done = true; #else - printMsg(lvlError, "warning: parallel XZ compression requested but not supported, falling back to single-threaded compression"); + printMsg(Verbosity::Error, "warning: parallel XZ compression requested but not supported, falling back to single-threaded compression"); #endif } diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc index 7caee1da7..5e6edeec3 100644 --- a/src/libutil/hash.cc +++ b/src/libutil/hash.cc @@ -18,10 +18,10 @@ namespace nix { void Hash::init() { - if (type == htMD5) hashSize = md5HashSize; - else if (type == htSHA1) hashSize = sha1HashSize; - else if (type == htSHA256) hashSize = sha256HashSize; - else if (type == htSHA512) hashSize = sha512HashSize; + if (type == HashType::MD5) hashSize = md5HashSize; + else if (type == HashType::SHA1) hashSize = sha1HashSize; + else if (type == HashType::SHA256) hashSize = sha256HashSize; + else if (type == HashType::SHA512) hashSize = sha512HashSize; else abort(); assert(hashSize <= maxHashSize); memset(hash, 0, maxHashSize); @@ -98,26 +98,26 @@ static string printHash32(const Hash & hash) string printHash16or32(const Hash & hash) { - return hash.to_string(hash.type == htMD5 ? Base16 : Base32, false); + return hash.to_string(hash.type == HashType::MD5 ? Base::Base16 : Base::Base32, false); } std::string Hash::to_string(Base base, bool includeType) const { std::string s; - if (base == SRI || includeType) { + if (base == Base::SRI || includeType) { s += printHashType(type); - s += base == SRI ? '-' : ':'; + s += base == Base::SRI ? '-' : ':'; } switch (base) { - case Base16: + case Base::Base16: s += printHash16(*this); break; - case Base32: + case Base::Base32: s += printHash32(*this); break; - case Base64: - case SRI: + case Base::Base64: + case Base::SRI: s += base64Encode(std::string((const char *) hash, hashSize)); break; } @@ -136,16 +136,16 @@ Hash::Hash(const std::string & s, HashType type) sep = s.find('-'); if (sep != string::npos) { isSRI = true; - } else if (type == htUnknown) + } else if (type == HashType::Unknown) throw BadHash("hash '%s' does not include a type", s); } if (sep != string::npos) { string hts = string(s, 0, sep); this->type = parseHashType(hts); - if (this->type == htUnknown) + if (this->type == HashType::Unknown) throw BadHash("unknown hash type '%s'", hts); - if (type != htUnknown && type != this->type) + if (type != HashType::Unknown && type != this->type) throw BadHash("hash '%s' should have type '%s'", s, printHashType(type)); pos = sep + 1; } @@ -217,29 +217,29 @@ union Ctx static void start(HashType ht, Ctx & ctx) { - if (ht == htMD5) MD5_Init(&ctx.md5); - else if (ht == htSHA1) SHA1_Init(&ctx.sha1); - else if (ht == htSHA256) SHA256_Init(&ctx.sha256); - else if (ht == htSHA512) SHA512_Init(&ctx.sha512); + if (ht == HashType::MD5) MD5_Init(&ctx.md5); + else if (ht == HashType::SHA1) SHA1_Init(&ctx.sha1); + else if (ht == HashType::SHA256) SHA256_Init(&ctx.sha256); + else if (ht == HashType::SHA512) SHA512_Init(&ctx.sha512); } static void update(HashType ht, Ctx & ctx, const unsigned char * bytes, size_t len) { - if (ht == htMD5) MD5_Update(&ctx.md5, bytes, len); - else if (ht == htSHA1) SHA1_Update(&ctx.sha1, bytes, len); - else if (ht == htSHA256) SHA256_Update(&ctx.sha256, bytes, len); - else if (ht == htSHA512) SHA512_Update(&ctx.sha512, bytes, len); + if (ht == HashType::MD5) MD5_Update(&ctx.md5, bytes, len); + else if (ht == HashType::SHA1) SHA1_Update(&ctx.sha1, bytes, len); + else if (ht == HashType::SHA256) SHA256_Update(&ctx.sha256, bytes, len); + else if (ht == HashType::SHA512) SHA512_Update(&ctx.sha512, bytes, len); } static void finish(HashType ht, Ctx & ctx, unsigned char * hash) { - if (ht == htMD5) MD5_Final(hash, &ctx.md5); - else if (ht == htSHA1) SHA1_Final(hash, &ctx.sha1); - else if (ht == htSHA256) SHA256_Final(hash, &ctx.sha256); - else if (ht == htSHA512) SHA512_Final(hash, &ctx.sha512); + if (ht == HashType::MD5) MD5_Final(hash, &ctx.md5); + else if (ht == HashType::SHA1) SHA1_Final(hash, &ctx.sha1); + else if (ht == HashType::SHA256) SHA256_Final(hash, &ctx.sha256); + else if (ht == HashType::SHA512) SHA512_Final(hash, &ctx.sha512); } @@ -320,20 +320,20 @@ Hash compressHash(const Hash & hash, unsigned int newSize) HashType parseHashType(const string & s) { - if (s == "md5") return htMD5; - else if (s == "sha1") return htSHA1; - else if (s == "sha256") return htSHA256; - else if (s == "sha512") return htSHA512; - else return htUnknown; + if (s == "md5") return HashType::MD5; + else if (s == "sha1") return HashType::SHA1; + else if (s == "sha256") return HashType::SHA256; + else if (s == "sha512") return HashType::SHA512; + else return HashType::Unknown; } string printHashType(HashType ht) { - if (ht == htMD5) return "md5"; - else if (ht == htSHA1) return "sha1"; - else if (ht == htSHA256) return "sha256"; - else if (ht == htSHA512) return "sha512"; + if (ht == HashType::MD5) return "md5"; + else if (ht == HashType::SHA1) return "sha1"; + else if (ht == HashType::SHA256) return "sha256"; + else if (ht == HashType::SHA512) return "sha512"; else abort(); } diff --git a/src/libutil/hash.hh b/src/libutil/hash.hh index ea9fca3e7..0fe6e7677 100644 --- a/src/libutil/hash.hh +++ b/src/libutil/hash.hh @@ -10,7 +10,13 @@ namespace nix { MakeError(BadHash, Error); -enum HashType : char { htUnknown, htMD5, htSHA1, htSHA256, htSHA512 }; +enum struct HashType : char { + Unknown, + MD5, + SHA1, + SHA256, + SHA512, +}; const int md5HashSize = 16; @@ -20,7 +26,12 @@ const int sha512HashSize = 64; extern const string base32Chars; -enum Base : int { Base64, Base32, Base16, SRI }; +enum struct Base : int { + Base64, + Base32, + Base16, + SRI, +}; struct Hash @@ -29,7 +40,7 @@ struct Hash unsigned int hashSize = 0; unsigned char hash[maxHashSize] = {}; - HashType type = htUnknown; + HashType type = HashType::Unknown; /* Create an unset hash object. */ Hash() { }; @@ -40,14 +51,14 @@ struct Hash /* Initialize the hash from a string representation, in the format "[<type>:]<base16|base32|base64>" or "<type>-<base64>" (a Subresource Integrity hash expression). If the 'type' argument - is htUnknown, then the hash type must be specified in the + is HashType::Unknown, then the hash type must be specified in the string. */ - Hash(const std::string & s, HashType type = htUnknown); + Hash(const std::string & s, HashType type = HashType::Unknown); void init(); /* Check whether a hash is set. */ - operator bool () const { return type != htUnknown; } + operator bool () const { return type != HashType::Unknown; } /* Check whether two hash are equal. */ bool operator == (const Hash & h2) const; @@ -79,18 +90,18 @@ struct Hash /* Return a string representation of the hash, in base-16, base-32 or base-64. By default, this is prefixed by the hash type (e.g. "sha256:"). */ - std::string to_string(Base base = Base32, bool includeType = true) const; + std::string to_string(Base base = Base::Base32, bool includeType = true) const; std::string gitRev() const { - assert(type == htSHA1); - return to_string(Base16, false); + assert(type == HashType::SHA1); + return to_string(Base::Base16, false); } std::string gitShortRev() const { - assert(type == htSHA1); - return std::string(to_string(Base16, false), 0, 7); + assert(type == HashType::SHA1); + return std::string(to_string(Base::Base16, false), 0, 7); } }; diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc index fa5c84a27..54c73a913 100644 --- a/src/libutil/logging.cc +++ b/src/libutil/logging.cc @@ -21,7 +21,7 @@ Logger * logger = makeDefaultLogger(); void Logger::warn(const std::string & msg) { - log(lvlWarn, ANSI_YELLOW "warning:" ANSI_NORMAL " " + msg); + log(Verbosity::Warn, ANSI_YELLOW "warning:" ANSI_NORMAL " " + msg); } class SimpleLogger : public Logger @@ -45,10 +45,10 @@ public: if (systemd) { char c; switch (lvl) { - case lvlError: c = '3'; break; - case lvlWarn: c = '4'; break; - case lvlInfo: c = '5'; break; - case lvlTalkative: case lvlChatty: c = '6'; break; + case Verbosity::Error: c = '3'; break; + case Verbosity::Warn: c = '4'; break; + case Verbosity::Info: c = '5'; break; + case Verbosity::Talkative: case Verbosity::Chatty: c = '6'; break; default: c = '7'; } prefix = std::string("<") + c + ">"; @@ -66,7 +66,7 @@ public: } }; -Verbosity verbosity = lvlInfo; +Verbosity verbosity = Verbosity::Info; void warnOnce(bool & haveWarned, const FormatOrString & fs) { @@ -123,7 +123,7 @@ struct JSONLogger : Logger void write(const nlohmann::json & json) { - prevLogger.log(lvlError, "@nix " + json.dump()); + prevLogger.log(Verbosity::Error, "@nix " + json.dump()); } void log(Verbosity lvl, const FormatOrString & fs) override @@ -198,7 +198,7 @@ bool handleJSONLogMessage(const std::string & msg, if (action == "start") { auto type = (ActivityType) json["type"]; - if (trusted || type == actDownload) + if (trusted || type == ActivityType::Download) activities.emplace(std::piecewise_construct, std::forward_as_tuple(json["id"]), std::forward_as_tuple(*logger, (Verbosity) json["level"], type, @@ -216,7 +216,7 @@ bool handleJSONLogMessage(const std::string & msg, else if (action == "setPhase") { std::string phase = json["phase"]; - act.result(resSetPhase, phase); + act.result(ResultType::SetPhase, phase); } else if (action == "msg") { diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh index beb5e6b64..cde525358 100644 --- a/src/libutil/logging.hh +++ b/src/libutil/logging.hh @@ -4,41 +4,41 @@ namespace nix { -typedef enum { - lvlError = 0, - lvlWarn, - lvlInfo, - lvlTalkative, - lvlChatty, - lvlDebug, - lvlVomit -} Verbosity; - -typedef enum { - actUnknown = 0, - actCopyPath = 100, - actDownload = 101, - actRealise = 102, - actCopyPaths = 103, - actBuilds = 104, - actBuild = 105, - actOptimiseStore = 106, - actVerifyPaths = 107, - actSubstitute = 108, - actQueryPathInfo = 109, - actPostBuildHook = 110, -} ActivityType; - -typedef enum { - resFileLinked = 100, - resBuildLogLine = 101, - resUntrustedPath = 102, - resCorruptedPath = 103, - resSetPhase = 104, - resProgress = 105, - resSetExpected = 106, - resPostBuildLogLine = 107, -} ResultType; +enum struct Verbosity : uint64_t { + Error = 0, + Warn, + Info, + Talkative, + Chatty, + Debug, + Vomit, +}; + +enum struct ActivityType : uint64_t { + Unknown = 0, + CopyPath = 100, + Download = 101, + Realise = 102, + CopyPaths = 103, + Builds = 104, + Build = 105, + OptimiseStore = 106, + VerifyPaths = 107, + Substitute = 108, + QueryPathInfo = 109, + PostBuildHook = 110, +}; + +enum struct ResultType : uint64_t { + FileLinked = 100, + BuildLogLine = 101, + UntrustedPath = 102, + CorruptedPath = 103, + SetPhase = 104, + Progress = 105, + SetExpected = 106, + PostBuildLogLine = 107, +}; typedef uint64_t ActivityId; @@ -67,7 +67,7 @@ public: void log(const FormatOrString & fs) { - log(lvlInfo, fs); + log(Verbosity::Info, fs); } virtual void warn(const std::string & msg); @@ -94,17 +94,17 @@ struct Activity Activity(Logger & logger, ActivityType type, const Logger::Fields & fields = {}, ActivityId parent = getCurActivity()) - : Activity(logger, lvlError, type, "", fields, parent) { }; + : Activity(logger, Verbosity::Error, type, "", fields, parent) { }; Activity(const Activity & act) = delete; ~Activity(); void progress(uint64_t done = 0, uint64_t expected = 0, uint64_t running = 0, uint64_t failed = 0) const - { result(resProgress, done, expected, running, failed); } + { result(ResultType::Progress, done, expected, running, failed); } void setExpected(ActivityType type2, uint64_t expected) const - { result(resSetExpected, type2, expected); } + { result(ResultType::SetExpected, (uint64_t)type2, expected); } template<typename... Args> void result(ResultType type, const Args & ... args) const @@ -151,11 +151,11 @@ extern Verbosity verbosity; /* suppress msgs > this */ } \ } while (0) -#define printError(args...) printMsg(lvlError, args) -#define printInfo(args...) printMsg(lvlInfo, args) -#define printTalkative(args...) printMsg(lvlTalkative, args) -#define debug(args...) printMsg(lvlDebug, args) -#define vomit(args...) printMsg(lvlVomit, args) +#define printError(args...) printMsg(Verbosity::Error, args) +#define printInfo(args...) printMsg(Verbosity::Info, args) +#define printTalkative(args...) printMsg(Verbosity::Talkative, args) +#define debug(args...) printMsg(Verbosity::Debug, args) +#define vomit(args...) printMsg(Verbosity::Vomit, args) template<typename... Args> inline void warn(const std::string & fs, const Args & ... args) diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 097ff210a..8cabbb503 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -430,7 +430,7 @@ void deletePath(const Path & path) void deletePath(const Path & path, unsigned long long & bytesFreed) { - //Activity act(*logger, lvlDebug, format("recursively deleting path '%1%'") % path); + //Activity act(*logger, Verbosity::Debug, format("recursively deleting path '%1%'") % path); bytesFreed = 0; _deletePath(path, bytesFreed); } @@ -1410,7 +1410,7 @@ string base64Decode(const string & s) char digit = decode[(unsigned char) c]; if (digit == -1) - throw Error("invalid character in Base64 string"); + throw Error("invalid character in Base::Base64 string"); bits += 6; d = d << 6 | digit; diff --git a/src/libutil/util.hh b/src/libutil/util.hh index 7c3a30242..e04ce3701 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -468,7 +468,7 @@ std::string filterANSIEscapes(const std::string & s, unsigned int width = std::numeric_limits<unsigned int>::max()); -/* Base64 encoding/decoding. */ +/* Base::Base64 encoding/decoding. */ string base64Encode(const string & s); string base64Decode(const string & s); |