aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/ethereum/ethash/src/libethash/io_posix.c
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-10-29 01:05:01 +0800
committerFelix Lange <fjl@twurst.com>2016-10-29 01:05:01 +0800
commit289b30715d097edafd5562f66cb3567a70b2d330 (patch)
tree7eaaa6da97c84727469303b986e364606ece57ce /vendor/github.com/ethereum/ethash/src/libethash/io_posix.c
parent77703045765343c489ded2f43e3ed0f332c5f148 (diff)
downloaddexon-289b30715d097edafd5562f66cb3567a70b2d330.tar
dexon-289b30715d097edafd5562f66cb3567a70b2d330.tar.gz
dexon-289b30715d097edafd5562f66cb3567a70b2d330.tar.bz2
dexon-289b30715d097edafd5562f66cb3567a70b2d330.tar.lz
dexon-289b30715d097edafd5562f66cb3567a70b2d330.tar.xz
dexon-289b30715d097edafd5562f66cb3567a70b2d330.tar.zst
dexon-289b30715d097edafd5562f66cb3567a70b2d330.zip
Godeps, vendor: convert dependency management to trash (#3198)
This commit converts the dependency management from Godeps to the vendor folder, also switching the tool from godep to trash. Since the upstream tool lacks a few features proposed via a few PRs, until those PRs are merged in (if), use github.com/karalabe/trash. You can update dependencies via trash --update. All dependencies have been updated to their latest version. Parts of the build system are reworked to drop old notions of Godeps and invocation of the go vet command so that it doesn't run against the vendor folder, as that will just blow up during vetting. The conversion drops OpenCL (and hence GPU mining support) from ethash and our codebase. The short reasoning is that there's noone to maintain and having opencl libs in our deps messes up builds as go install ./... tries to build them, failing with unsatisfied link errors for the C OpenCL deps. golang.org/x/net/context is not vendored in. We expect it to be fetched by the user (i.e. using go get). To keep ci.go builds reproducible the package is "vendored" in build/_vendor.
Diffstat (limited to 'vendor/github.com/ethereum/ethash/src/libethash/io_posix.c')
-rw-r--r--vendor/github.com/ethereum/ethash/src/libethash/io_posix.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/vendor/github.com/ethereum/ethash/src/libethash/io_posix.c b/vendor/github.com/ethereum/ethash/src/libethash/io_posix.c
new file mode 100644
index 000000000..c9a17d845
--- /dev/null
+++ b/vendor/github.com/ethereum/ethash/src/libethash/io_posix.c
@@ -0,0 +1,111 @@
+/*
+ This file is part of ethash.
+
+ ethash 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 of the License, or
+ (at your option) any later version.
+
+ ethash 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 ethash. If not, see <http://www.gnu.org/licenses/>.
+*/
+/** @file io_posix.c
+ * @author Lefteris Karapetsas <lefteris@ethdev.com>
+ * @date 2015
+ */
+
+#include "io.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <pwd.h>
+
+FILE* ethash_fopen(char const* file_name, char const* mode)
+{
+ return fopen(file_name, mode);
+}
+
+char* ethash_strncat(char* dest, size_t dest_size, char const* src, size_t count)
+{
+ return strlen(dest) + count + 1 <= dest_size ? strncat(dest, src, count) : NULL;
+}
+
+bool ethash_mkdir(char const* dirname)
+{
+ int rc = mkdir(dirname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+ return rc != -1 || errno == EEXIST;
+}
+
+int ethash_fileno(FILE *f)
+{
+ return fileno(f);
+}
+
+char* ethash_io_create_filename(
+ char const* dirname,
+ char const* filename,
+ size_t filename_length
+)
+{
+ size_t dirlen = strlen(dirname);
+ size_t dest_size = dirlen + filename_length + 1;
+ if (dirname[dirlen] != '/') {
+ dest_size += 1;
+ }
+ char* name = malloc(dest_size);
+ if (!name) {
+ return NULL;
+ }
+
+ name[0] = '\0';
+ ethash_strncat(name, dest_size, dirname, dirlen);
+ if (dirname[dirlen] != '/') {
+ ethash_strncat(name, dest_size, "/", 1);
+ }
+ ethash_strncat(name, dest_size, filename, filename_length);
+ return name;
+}
+
+bool ethash_file_size(FILE* f, size_t* ret_size)
+{
+ struct stat st;
+ int fd;
+ if ((fd = fileno(f)) == -1 || fstat(fd, &st) != 0) {
+ return false;
+ }
+ *ret_size = st.st_size;
+ return true;
+}
+
+bool ethash_get_default_dirname(char* strbuf, size_t buffsize)
+{
+ static const char dir_suffix[] = ".ethash/";
+ strbuf[0] = '\0';
+ char* home_dir = getenv("HOME");
+ if (!home_dir || strlen(home_dir) == 0)
+ {
+ struct passwd* pwd = getpwuid(getuid());
+ if (pwd)
+ home_dir = pwd->pw_dir;
+ }
+
+ size_t len = strlen(home_dir);
+ if (!ethash_strncat(strbuf, buffsize, home_dir, len)) {
+ return false;
+ }
+ if (home_dir[len] != '/') {
+ if (!ethash_strncat(strbuf, buffsize, "/", 1)) {
+ return false;
+ }
+ }
+ return ethash_strncat(strbuf, buffsize, dir_suffix, sizeof(dir_suffix));
+}