aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/args.cc2
-rw-r--r--src/libutil/args.hh2
-rw-r--r--src/libutil/compression.cc2
-rw-r--r--src/libutil/hash.cc70
-rw-r--r--src/libutil/hash.hh33
-rw-r--r--src/libutil/logging.cc18
-rw-r--r--src/libutil/logging.hh88
-rw-r--r--src/libutil/util.cc4
-rw-r--r--src/libutil/util.hh2
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);