summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-07-26 17:29:59 +0200
committerMax Kellermann <max@musicpd.org>2018-07-26 17:46:56 +0200
commit7db7568dcf4efe91fa878c809bb8e82aa35b6fe2 (patch)
tree17b56c74978200cb2198e2299283bfe86d30c2cc /src
parent409d3c7136a62d9b73706f05aaefc04e60652164 (diff)
lib/gcrypt/MD5: move code to util/HexFormat.cxx
Diffstat (limited to 'src')
-rw-r--r--src/lib/gcrypt/MD5.cxx11
-rw-r--r--src/util/HexFormat.cxx43
-rw-r--r--src/util/HexFormat.hxx64
3 files changed, 109 insertions, 9 deletions
diff --git a/src/lib/gcrypt/MD5.cxx b/src/lib/gcrypt/MD5.cxx
index 621c8c29e..e31fa67a8 100644
--- a/src/lib/gcrypt/MD5.cxx
+++ b/src/lib/gcrypt/MD5.cxx
@@ -29,6 +29,7 @@
#include "MD5.hxx"
#include "Hash.hxx"
+#include "util/HexFormat.hxx"
#include <stdio.h>
@@ -42,13 +43,5 @@ StringBuffer<33>
MD5Hex(ConstBuffer<void> input) noexcept
{
const auto raw = MD5(input);
- StringBuffer<33> result;
-
- char *p = result.data();
- for (const auto i : raw) {
- sprintf(p, "%02x", i);
- p += 2;
- }
-
- return result;
+ return HexFormatBuffer<raw.size()>(&raw.front());
}
diff --git a/src/util/HexFormat.cxx b/src/util/HexFormat.cxx
new file mode 100644
index 000000000..1a048eb23
--- /dev/null
+++ b/src/util/HexFormat.cxx
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "HexFormat.hxx"
+
+#include <stdio.h>
+
+char *
+HexFormat(char *dest, ConstBuffer<uint8_t> src) noexcept
+{
+ for (auto i : src) {
+ sprintf(dest, "%02x", i);
+ dest += 2;
+ }
+
+ return dest;
+}
diff --git a/src/util/HexFormat.hxx b/src/util/HexFormat.hxx
new file mode 100644
index 000000000..d46903d3a
--- /dev/null
+++ b/src/util/HexFormat.hxx
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef HEX_FORMAT_HXX
+#define HEX_FORMAT_HXX
+
+#include "ConstBuffer.hxx"
+#include "StringBuffer.hxx"
+#include "Compiler.h"
+
+#include <stdint.h>
+
+/**
+ * Format the given byte sequence into a null-terminated hexadecimal
+ * string.
+ *
+ * @param dest the destination buffer; must be large enough to hold
+ * all hex digits plus the null terminator
+ * @return a pointer to the generated null terminator
+ */
+char *
+HexFormat(char *dest, ConstBuffer<uint8_t> src) noexcept;
+
+/**
+ * Like HexFormat(), but return a #StringBuffer with exactly the
+ * required size.
+ */
+template<size_t size>
+gcc_pure
+auto
+HexFormatBuffer(const uint8_t *src) noexcept
+{
+ StringBuffer<size * 2 + 1> dest;
+ HexFormat(dest.data(), {src, size});
+ return dest;
+}
+
+#endif