From: Robin Gareus Date: Mon, 26 Jun 2017 17:39:40 +0000 (+0200) Subject: Add convenience fn to compute a file's sha1sum X-Git-Tag: 5.11~408 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=007f3cdbba01b58dc37ec214836ab0960ee13f82;p=ardour.git Add convenience fn to compute a file's sha1sum --- diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h index 1208d9ce77..77dc8236a7 100644 --- a/libs/ardour/ardour/utils.h +++ b/libs/ardour/ardour/utils.h @@ -106,6 +106,8 @@ LIBARDOUR_API bool matching_unsuffixed_filename_exists_in (const std::string& di LIBARDOUR_API uint32_t how_many_dsp_threads (); +LIBARDOUR_API std::string compute_sha1_of_file (std::string path); + template boost::shared_ptr route_list_to_control_list (boost::shared_ptr rl, boost::shared_ptr (Stripable::*get_control)() const) { boost::shared_ptr cl (new ControlList); if (!rl) { return cl; } diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index f73f206d29..31a94702e1 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -52,6 +52,7 @@ #include "pbd/stacktrace.h" #include "pbd/xml++.h" #include "pbd/basename.h" +#include "pbd/scoped_file_descriptor.h" #include "pbd/strsplit.h" #include "pbd/replace_all.h" @@ -719,6 +720,29 @@ ARDOUR::slider_position_to_gain_with_max (double g, double max_gain) return position_to_gain (g) * max_gain / 2.0; } +#include "sha1.c" + +std::string +ARDOUR::compute_sha1_of_file (std::string path) +{ + PBD::ScopedFileDescriptor fd (g_open (path.c_str(), O_RDONLY, 0444)); + if (fd < 0) { + return std::string (); + } + char buf[4096]; + ssize_t n_read; + char hash[41]; + Sha1Digest s; + sha1_init (&s); + + while ((n_read = ::read(fd, buf, sizeof(buf))) > 0) { + sha1_write (&s, (const uint8_t*) buf, n_read); + } + + sha1_result_hash (&s, hash); + return std::string (hash); +} + extern "C" { void c_stacktrace() { stacktrace (cerr); } }