diff gcc/go/go-sha1.cc @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/go/go-sha1.cc	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,71 @@
+/* go-sha1.cc -- Go frontend interface to gcc backend.
+   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "go-sha1.h"
+#include "sha1.h"
+
+class Gcc_sha1_helper : public Go_sha1_helper
+{
+ public:
+
+  Gcc_sha1_helper() : ctx_(new sha1_ctx) { sha1_init_ctx(this->ctx_); }
+
+  ~Gcc_sha1_helper();
+
+  // Incorporate 'len' bytes from 'buffer' into checksum.
+  void
+  process_bytes(const void* buffer, size_t len);
+
+  // Finalize checksum and return in the form of a string.
+  std::string
+  finish();
+
+ private:
+  sha1_ctx *ctx_;
+};
+
+Gcc_sha1_helper::~Gcc_sha1_helper()
+{
+  delete ctx_;
+}
+
+void
+Gcc_sha1_helper::process_bytes(const void* buffer, size_t len)
+{
+  sha1_process_bytes(buffer, len, this->ctx_);
+}
+
+std::string
+Gcc_sha1_helper::finish()
+{
+  // Use a union to provide the required alignment.
+  union
+  {
+    char checksum[checksum_len];
+    long align;
+  } u;
+  sha1_finish_ctx(this->ctx_, u.checksum);
+  return std::string(u.checksum, checksum_len);
+}
+
+Go_sha1_helper*
+go_create_sha1_helper()
+{
+  return new Gcc_sha1_helper();
+}