diff options
author | Christian Krämer <uddka@student.kit.edu> | 2018-05-05 13:02:44 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-05-13 13:08:26 +0200 |
commit | c1ecb1b2f1427e5d8616c9177c6962ebf1449a47 (patch) | |
tree | f92b046759de2cc9ab0ff68ab2e1d850ae4f7de3 /kernel/yosys.cc | |
parent | 1167538d265b634d6d4d825e9d92d2211f7beee9 (diff) | |
download | yosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.tar.gz yosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.tar.bz2 yosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.zip |
Add "#ifdef __FreeBSD__"
(Re-commit e3575a8 with corrected author field)
Diffstat (limited to 'kernel/yosys.cc')
-rw-r--r-- | kernel/yosys.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 49d644548..aa5901271 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -46,10 +46,15 @@ # include <unistd.h> # include <dirent.h> # include <sys/types.h> +# include <sys/wait.h> # include <sys/stat.h> # include <glob.h> #endif +#ifdef __FreeBSD__ +# include <sys/sysctl.h> +#endif + #include <limits.h> #include <errno.h> @@ -72,7 +77,7 @@ std::vector<void*> memhasher_store; void memhasher_on() { -#ifdef __linux__ +#if defined(__linux__) || defined(__FreeBSD__) memhasher_rng += time(NULL) << 16 ^ getpid(); #endif memhasher_store.resize(0x10000); @@ -667,6 +672,26 @@ std::string proc_self_dirname() buflen--; return std::string(path, buflen); } +#elif defined(__FreeBSD__) +std::string proc_self_dirname() +{ + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; + size_t buflen; + char *buffer; + std::string path; + if (sysctl(mib, 4, NULL, &buflen, NULL, 0) != 0) + log_error("sysctl failed: %s\n", strerror(errno)); + buffer = (char*)malloc(buflen); + if (buffer == NULL) + log_error("malloc failed: %s\n", strerror(errno)); + if (sysctl(mib, 4, buffer, &buflen, NULL, 0) != 0) + log_error("sysctl failed: %s\n", strerror(errno)); + while (buflen > 0 && buffer[buflen-1] != '/') + buflen--; + path.assign(buffer, buflen); + free(buffer); + return path; +} #elif defined(__APPLE__) std::string proc_self_dirname() { |