Browse Source

ccminer: rename main file and switch to C++

There was a different behavior on linux and visual studio

That was making it hard to link functions correctly

That remove some ifdef / extern "C" requirements

note about x86 releases, x86 nvml.dll is not installed on Windows x64!
master
Tanguy Pruvot 10 years ago
parent
commit
e40a7a720c
  1. 3
      Makefile.am
  2. 18
      api.cpp
  3. 30
      ccminer.cpp
  4. 10
      ccminer.vcxproj
  5. 4
      ccminer.vcxproj.filters
  6. 2
      configure.ac
  7. 8
      cuda.cpp
  8. 12
      hashlog.cpp
  9. 103
      nvml.cpp
  10. 3
      stats.cpp
  11. 4
      util.cpp

3
Makefile.am

@ -17,7 +17,8 @@ bin_PROGRAMS = ccminer @@ -17,7 +17,8 @@ bin_PROGRAMS = ccminer
ccminer_SOURCES = elist.h miner.h compat.h \
compat/inttypes.h compat/stdbool.h compat/unistd.h \
compat/sys/time.h compat/getopt/getopt.h \
cpu-miner.c util.c crc32.c hefty1.c scrypt.c \
crc32.c hefty1.c scrypt.c \
ccminer.cpp util.cpp \
api.cpp hashlog.cpp stats.cpp cuda.cpp \
heavy/heavy.cu \
heavy/cuda_blake512.cu heavy/cuda_blake512.h \

18
api.cpp

@ -114,8 +114,6 @@ extern uint32_t rejected_count; @@ -114,8 +114,6 @@ extern uint32_t rejected_count;
static void gpustatus(int thr_id)
{
char buf[MYBUFSIZ];
float gt;
int gp, gf;
if (thr_id >= 0 && thr_id < gpu_threads) {
struct cgpu_info *cgpu = &thr_info[thr_id].gpu;
@ -125,16 +123,12 @@ static void gpustatus(int thr_id) @@ -125,16 +123,12 @@ static void gpustatus(int thr_id)
#ifdef USE_WRAPNVML
// todo
if (1 || cgpu->has_monitoring) {
gf = gpu_fanpercent(cgpu);
gt = gpu_temp(cgpu);
gp = gpu_power(cgpu);
// gpu_clock(cgpu);
cgpu->gpu_temp = gpu_temp(cgpu);
cgpu->gpu_fan = gpu_fanpercent(cgpu);
cgpu->gpu_power = gpu_power(cgpu);
//cgpu->gpu_clock = gpu_clock(cgpu);
}
else
#endif
{
gt = 0.0; gf = gp = 0;
}
// todo: can be 0 if set by algo (auto)
if (opt_intensity == 0 && opt_work_size) {
@ -155,7 +149,7 @@ static void gpustatus(int thr_id) @@ -155,7 +149,7 @@ static void gpustatus(int thr_id)
sprintf(buf, "GPU=%d;TEMP=%.1f;FAN=%d;POWER=%d;KHS=%.2f;"
"HWF=%d;I=%d|",
thr_id, gt, gf, gp, cgpu->khashes,
thr_id, cgpu->gpu_temp, cgpu->gpu_fan, cgpu->gpu_power, cgpu->khashes,
cgpu->hw_errors, cgpu->intensity);
strcat(buffer, buf);
@ -174,7 +168,7 @@ static char *getsummary(char *params) @@ -174,7 +168,7 @@ static char *getsummary(char *params)
*buffer = '\0';
sprintf(buffer, "NAME=%s;VER=%s;API=%s;"
"ALGO=%s;KHS=%.2f;ACC=%d;REJ=%d;ACCMN=%.3f;UPTIME=%.1f|",
"ALGO=%s;KHS=%.2f;ACC=%d;REJ=%d;ACCMN=%.3f;UPTIME=%.0f|",
PACKAGE_NAME, PACKAGE_VERSION, APIVERSION,
algo, (double)global_hashrate / 1000.0,
accepted_count, rejected_count,

30
cpu-miner.c → ccminer.cpp

@ -9,7 +9,6 @@ @@ -9,7 +9,6 @@
*/
#include "cpuminer-config.h"
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
@ -56,21 +55,15 @@ BOOL WINAPI ConsoleHandler(DWORD); @@ -56,21 +55,15 @@ BOOL WINAPI ConsoleHandler(DWORD);
#define HEAVYCOIN_BLKHDR_SZ 84
#define MNR_BLKHDR_SZ 80
// from cuda.cu
#ifdef __cplusplus
extern "C"
{
#endif
// from cuda.cpp
int cuda_num_devices();
void cuda_devicenames();
void cuda_devicereset();
int cuda_finddevice(char *name);
#ifdef __cplusplus
}
#endif
#ifdef USE_WRAPNVML
#include "nvml.h"
wrap_nvml_handle *hnvml = NULL;
#endif
#ifdef __linux /* Linux specific policy and affinity management */
@ -247,10 +240,6 @@ uint32_t opt_work_size = 0; /* default */ @@ -247,10 +240,6 @@ uint32_t opt_work_size = 0; /* default */
char *opt_api_allow = "127.0.0.1"; /* 0.0.0.0 for all ips */
int opt_api_listen = 4068; /* 0 to disable */
#ifdef USE_WRAPNVML
wrap_nvml_handle *nvmlh = NULL;
#endif
#ifdef HAVE_GETOPT_LONG
#include <getopt.h>
#else
@ -429,8 +418,8 @@ void proper_exit(int reason) @@ -429,8 +418,8 @@ void proper_exit(int reason)
timeEndPeriod(1); // else never executed
#endif
#ifdef USE_WRAPNVML
if (nvmlh)
wrap_nvml_destroy(nvmlh);
if (hnvml)
wrap_nvml_destroy(hnvml);
#endif
exit(reason);
}
@ -463,11 +452,11 @@ static bool work_decode(const json_t *val, struct work *work) @@ -463,11 +452,11 @@ static bool work_decode(const json_t *val, struct work *work)
if (unlikely(!jobj_binary(val, "data", work->data, sizeof(work->data)))) {
applog(LOG_ERR, "JSON inval data");
goto err_out;
return false;
}
if (unlikely(!jobj_binary(val, "target", work->target, sizeof(work->target)))) {
applog(LOG_ERR, "JSON inval target");
goto err_out;
return false;
}
if (opt_algo == ALGO_HEAVY) {
if (unlikely(!jobj_binary(val, "maxvote", &work->maxvote, sizeof(work->maxvote)))) {
@ -494,9 +483,6 @@ static bool work_decode(const json_t *val, struct work *work) @@ -494,9 +483,6 @@ static bool work_decode(const json_t *val, struct work *work)
cbin2hex(work->job_id, (const char*)&work->data[17], 4);
return true;
err_out:
return false;
}
/**
@ -2140,8 +2126,8 @@ int main(int argc, char *argv[]) @@ -2140,8 +2126,8 @@ int main(int argc, char *argv[])
}
#ifdef USE_WRAPNVML
nvmlh = wrap_nvml_create();
if (nvmlh) {
hnvml = wrap_nvml_create();
if (hnvml) {
// todo: link threads info gpu
applog(LOG_INFO, "NVML GPU monitoring enabled.");
} else {

10
ccminer.vcxproj

@ -230,18 +230,18 @@ @@ -230,18 +230,18 @@
<ClCompile Include="compat\jansson\utf.c" />
<ClCompile Include="compat\jansson\value.c" />
<ClCompile Include="compat\winansi.c" />
<ClCompile Include="cpu-miner.c">
<AdditionalOptions>/Tp %(AdditionalOptions)</AdditionalOptions>
<ClCompile Include="ccminer.cpp">
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
<Optimization Condition="'$(Configuration)'=='Release'">Full</Optimization>
</ClCompile>
<ClCompile Include="crc32.c" />
<ClCompile Include="util.cpp" />
<ClCompile Include="fuguecoin.cpp" />
<ClCompile Include="groestlcoin.cpp" />
<ClCompile Include="hashlog.cpp" />
<ClCompile Include="stats.cpp" />
<ClCompile Include="nvml.cpp" />
<ClCompile Include="api.cpp" />
<ClCompile Include="crc32.c" />
<ClCompile Include="hefty1.c" />
<ClCompile Include="myriadgroestl.cpp" />
<ClCompile Include="scrypt.c">
@ -274,10 +274,6 @@ @@ -274,10 +274,6 @@
<ClCompile Include="sph\hamsi.c" />
<ClCompile Include="sph\hamsi_helper.c" />
<ClCompile Include="sph\whirlpool.c" />
<ClCompile Include="util.c">
<AdditionalOptions>/Tp %(AdditionalOptions)</AdditionalOptions>
<Optimization Condition="'$(Configuration)'=='Release'">Full</Optimization>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="compat.h" />

4
ccminer.vcxproj.filters

@ -93,10 +93,10 @@ @@ -93,10 +93,10 @@
<ClCompile Include="compat\gettimeofday.c">
<Filter>Source Files\gettimeofday</Filter>
</ClCompile>
<ClCompile Include="util.c">
<ClCompile Include="util.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="cpu-miner.c">
<ClCompile Include="ccminer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="crc32.c">

2
configure.ac

@ -2,7 +2,7 @@ AC_INIT([ccminer], [1.4.9]) @@ -2,7 +2,7 @@ AC_INIT([ccminer], [1.4.9])
AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM
AC_CONFIG_SRCDIR([cpu-miner.c])
AC_CONFIG_SRCDIR([ccminer.cpp])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AC_CONFIG_HEADERS([cpuminer-config.h])

8
cuda.cpp

@ -27,7 +27,7 @@ extern int device_map[8]; @@ -27,7 +27,7 @@ extern int device_map[8];
extern int device_sm[8];
// CUDA Devices on the System
extern "C" int cuda_num_devices()
int cuda_num_devices()
{
int version;
cudaError_t err = cudaDriverGetVersion(&version);
@ -54,7 +54,7 @@ extern "C" int cuda_num_devices() @@ -54,7 +54,7 @@ extern "C" int cuda_num_devices()
return GPU_N;
}
extern "C" void cuda_devicenames()
void cuda_devicenames()
{
cudaError_t err;
int GPU_N;
@ -76,7 +76,7 @@ extern "C" void cuda_devicenames() @@ -76,7 +76,7 @@ extern "C" void cuda_devicenames()
}
// Can't be called directly in cpu-miner.c
extern "C" void cuda_devicereset()
void cuda_devicereset()
{
cudaDeviceReset();
}
@ -103,7 +103,7 @@ static bool substringsearch(const char *haystack, const char *needle, int &match @@ -103,7 +103,7 @@ static bool substringsearch(const char *haystack, const char *needle, int &match
}
// CUDA Gerät nach Namen finden (gibt Geräte-Index zurück oder -1)
extern "C" int cuda_finddevice(char *name)
int cuda_finddevice(char *name)
{
int num = cuda_num_devices();
int match = 0;

12
hashlog.cpp

@ -63,8 +63,7 @@ extern "C" uint32_t hashlog_already_submittted(char* jobid, uint32_t nonce) @@ -63,8 +63,7 @@ extern "C" uint32_t hashlog_already_submittted(char* jobid, uint32_t nonce)
extern "C" void hashlog_remember_submit(char* jobid, uint32_t nonce, uint32_t scanned_from)
{
uint64_t njobid = hextouint(jobid);
uint64_t keyall = (njobid << 32);
uint64_t key = keyall + nonce;
uint64_t key = (njobid << 32) + nonce;
hashlog_data data;
memset(&data, 0, sizeof(data));
@ -80,12 +79,12 @@ extern "C" void hashlog_remember_submit(char* jobid, uint32_t nonce, uint32_t sc @@ -80,12 +79,12 @@ extern "C" void hashlog_remember_submit(char* jobid, uint32_t nonce, uint32_t sc
extern "C" void hashlog_remember_scan_range(char* jobid, uint32_t scanned_from, uint32_t scanned_to)
{
uint64_t njobid = hextouint(jobid);
uint64_t keyall = (njobid << 32);
uint64_t key = (njobid << 32);
uint64_t range = hashlog_get_scan_range(jobid);
hashlog_data data;
// global scan range of a job
data = tlastshares[keyall];
data = tlastshares[key];
if (range == 0) {
memset(&data, 0, sizeof(data));
} else {
@ -110,7 +109,7 @@ extern "C" void hashlog_remember_scan_range(char* jobid, uint32_t scanned_from, @@ -110,7 +109,7 @@ extern "C" void hashlog_remember_scan_range(char* jobid, uint32_t scanned_from,
data.tm_upd = (uint32_t) time(NULL);
tlastshares[keyall] = data;
tlastshares[key] = data;
/* applog(LOG_BLUE, "job %s range : %x %x -> %x %x", jobid,
scanned_from, scanned_to, data.scanned_from, data.scanned_to); */
}
@ -124,13 +123,14 @@ extern "C" uint64_t hashlog_get_scan_range(char* jobid) @@ -124,13 +123,14 @@ extern "C" uint64_t hashlog_get_scan_range(char* jobid)
uint64_t ret = 0;
uint64_t njobid = hextouint(jobid);
uint64_t keypfx = (njobid << 32);
uint64_t keymsk = (0xffffffffULL << 32);
hashlog_data data;
data.scanned_from = 0;
data.scanned_to = 0;
std::map<uint64_t, hashlog_data>::iterator i = tlastshares.begin();
while (i != tlastshares.end()) {
if ((keypfx & i->first) == keypfx && i->second.scanned_to > ret) {
if ((keymsk & i->first) == keypfx && i->second.scanned_to > ret) {
if (i->second.scanned_to > data.scanned_to)
data.scanned_to = i->second.scanned_to;
if (i->second.scanned_from < data.scanned_from || data.scanned_from == 0)

103
nvml.cpp

@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#ifndef _MSC_VER
#include <libgen.h>
#endif
@ -28,13 +28,21 @@ @@ -28,13 +28,21 @@
#include "cuda_runtime.h"
#include "nvml.h"
extern wrap_nvml_handle *hnvml;
extern int device_map[8];
/*
* Wrappers to emulate dlopen() on other systems like Windows
*/
#if defined(_MSC_VER) || defined(_WIN32) || defined(_WIN64)
#include <windows.h>
static void *wrap_dlopen(const char *filename) {
return (void *)LoadLibrary(filename);
HMODULE h = LoadLibrary(filename);
if (!h && opt_debug) {
applog(LOG_DEBUG, "dlopen(%d): failed to load %s",
GetLastError(), filename);
}
return (void*)h;
}
static void *wrap_dlsym(void *h, const char *sym) {
return (void *)GetProcAddress((HINSTANCE)h, sym);
@ -46,9 +54,16 @@ @@ -46,9 +54,16 @@
#else
/* assume we can use dlopen itself... */
#include <dlfcn.h>
#include <errno.h>
static void *wrap_dlopen(const char *filename) {
return dlopen(filename, RTLD_NOW);
void *h = dlopen(filename, RTLD_NOW);
if (h == NULL && opt_debug) {
applog(LOG_DEBUG, "dlopen(%d): failed to load %s",
errno, filename);
}
return (void*)h;
}
static void *wrap_dlsym(void *h, const char *sym) {
return dlsym(h, sym);
}
@ -57,7 +72,7 @@ @@ -57,7 +72,7 @@
}
#endif
#if defined(__cplusplus)
#ifdef __cplusplus
extern "C" {
#endif
@ -66,51 +81,27 @@ wrap_nvml_handle * wrap_nvml_create() @@ -66,51 +81,27 @@ wrap_nvml_handle * wrap_nvml_create()
int i=0;
wrap_nvml_handle *nvmlh = NULL;
/*
* We use hard-coded library installation locations for the time being...
* No idea where or if libnvidia-ml.so is installed on MacOS X, a
* deep scouring of the filesystem on one of the Mac CUDA build boxes
* I used turned up nothing, so for now it's not going to work on OSX.
*/
#if defined(_WIN64)
/* 64-bit Windows */
#define libnvidia_ml "%PROGRAMFILES%/NVIDIA Corporation/NVSMI/nvml.dll"
#elif defined(_WIN32) || defined(_MSC_VER)
/* 32-bit Windows */
#define libnvidia_ml "%PROGRAMFILES%/NVIDIA Corporation/NVSMI/nvml.dll"
#elif defined(__linux) && (defined(__i386__) || defined(__ARM_ARCH_7A__))
/* 32-bit linux assumed */
#define libnvidia_ml "/usr/lib32/libnvidia-ml.so"
#elif defined(__linux)
/* 64-bit linux assumed */
#define libnvidia_ml "/usr/lib/libnvidia-ml.so"
#if defined(WIN32)
/* Windows (do not use slashes, else ExpandEnvironmentStrings will mix them) */
#define libnvidia_ml "%PROGRAMFILES%\\NVIDIA Corporation\\NVSMI\\nvml.dll"
#else
#error "Unrecognized platform: need NVML DLL path for this platform..."
/* linux assumed */
#define libnvidia_ml "libnvidia-ml.so"
#endif
#if WIN32
char tmp[512];
ExpandEnvironmentStringsA(libnvidia_ml, tmp, sizeof(tmp));
#ifdef WIN32
ExpandEnvironmentStrings(libnvidia_ml, tmp, sizeof(tmp));
#else
char tmp[512] = libnvidia_ml;
strcpy(tmp, libnvidia_ml);
#endif
void *nvml_dll = wrap_dlopen(tmp);
if (nvml_dll == NULL) {
#ifdef WIN32
char lib[] = "nvml.dll";
#else
char lib[64] = { '\0' };
snprintf(lib, sizeof(lib), "%s", basename(tmp));
/* try dlopen without path, here /usr/lib/nvidia-340/libnvidia-ml.so */
nvml_dll = wrap_dlopen("nvml.dll");
if (nvml_dll == NULL)
#endif
nvml_dll = wrap_dlopen(lib);
if (opt_debug)
applog(LOG_DEBUG, "dlopen: %s=%p", lib, nvml_dll);
}
if (nvml_dll == NULL) {
if (opt_debug)
applog(LOG_DEBUG, "dlopen(%d): failed to load %s", errno, tmp);
return NULL;
}
@ -120,9 +111,10 @@ wrap_nvml_handle * wrap_nvml_create() @@ -120,9 +111,10 @@ wrap_nvml_handle * wrap_nvml_create()
nvmlh->nvmlInit = (wrap_nvmlReturn_t (*)(void))
wrap_dlsym(nvmlh->nvml_dll, "nvmlInit_v2");
if (!nvmlh->nvmlInit)
if (!nvmlh->nvmlInit) {
nvmlh->nvmlInit = (wrap_nvmlReturn_t (*)(void))
wrap_dlsym(nvmlh->nvml_dll, "nvmlInit");
}
nvmlh->nvmlDeviceGetCount = (wrap_nvmlReturn_t (*)(int *))
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetCount_v2");
nvmlh->nvmlDeviceGetHandleByIndex = (wrap_nvmlReturn_t (*)(int, wrap_nvmlDevice_t *))
@ -153,11 +145,10 @@ wrap_nvml_handle * wrap_nvml_create() @@ -153,11 +145,10 @@ wrap_nvml_handle * wrap_nvml_create()
nvmlh->nvmlDeviceGetPciInfo == NULL ||
nvmlh->nvmlDeviceGetName == NULL ||
nvmlh->nvmlDeviceGetTemperature == NULL ||
nvmlh->nvmlDeviceGetFanSpeed == NULL ||
nvmlh->nvmlDeviceGetPowerUsage == NULL)
nvmlh->nvmlDeviceGetFanSpeed == NULL)
{
if (opt_debug)
applog(LOG_DEBUG, "Failed to obtain all required NVML function pointers");
applog(LOG_DEBUG, "Failed to obtain required NVML function pointers");
wrap_dlclose(nvmlh->nvml_dll);
free(nvmlh);
return NULL;
@ -342,14 +333,11 @@ int wrap_nvml_destroy(wrap_nvml_handle *nvmlh) @@ -342,14 +333,11 @@ int wrap_nvml_destroy(wrap_nvml_handle *nvmlh)
/* api functions */
extern wrap_nvml_handle *nvmlh;
extern int device_map[8];
unsigned int gpu_fanpercent(struct cgpu_info *gpu)
{
unsigned int pct = 0;
if (nvmlh) {
wrap_nvml_get_fanpcnt(nvmlh, device_map[gpu->thr_id], &pct);
if (hnvml) {
wrap_nvml_get_fanpcnt(hnvml, device_map[gpu->thr_id], &pct);
}
return pct;
}
@ -357,9 +345,9 @@ unsigned int gpu_fanpercent(struct cgpu_info *gpu) @@ -357,9 +345,9 @@ unsigned int gpu_fanpercent(struct cgpu_info *gpu)
double gpu_temp(struct cgpu_info *gpu)
{
double tc = 0.0;
if (nvmlh) {
if (hnvml) {
unsigned int tmp = 0;
wrap_nvml_get_tempC(nvmlh, device_map[gpu->thr_id], &tmp);
wrap_nvml_get_tempC(hnvml, device_map[gpu->thr_id], &tmp);
tc = (double) tmp;
}
return tc;
@ -368,8 +356,8 @@ double gpu_temp(struct cgpu_info *gpu) @@ -368,8 +356,8 @@ double gpu_temp(struct cgpu_info *gpu)
unsigned int gpu_clock(struct cgpu_info *gpu)
{
unsigned int freq = 0;
if (nvmlh) {
wrap_nvml_get_clock(nvmlh, device_map[gpu->thr_id], NVML_CLOCK_SM, &freq);
if (hnvml) {
wrap_nvml_get_clock(hnvml, device_map[gpu->thr_id], NVML_CLOCK_SM, &freq);
}
return freq;
}
@ -377,8 +365,8 @@ unsigned int gpu_clock(struct cgpu_info *gpu) @@ -377,8 +365,8 @@ unsigned int gpu_clock(struct cgpu_info *gpu)
unsigned int gpu_power(struct cgpu_info *gpu)
{
unsigned int mw = 0;
if (nvmlh) {
wrap_nvml_get_power_usage(nvmlh, device_map[gpu->thr_id], &mw);
if (hnvml) {
wrap_nvml_get_power_usage(hnvml, device_map[gpu->thr_id], &mw);
}
return mw;
}
@ -386,9 +374,8 @@ unsigned int gpu_power(struct cgpu_info *gpu) @@ -386,9 +374,8 @@ unsigned int gpu_power(struct cgpu_info *gpu)
int gpu_pstate(struct cgpu_info *gpu)
{
int pstate = 0;
if (nvmlh) {
wrap_nvml_get_pstate(nvmlh, device_map[gpu->thr_id], &pstate);
//gpu->gpu_pstate = pstate;
if (hnvml) {
wrap_nvml_get_pstate(hnvml, device_map[gpu->thr_id], &pstate);
}
return pstate;
}
@ -433,7 +420,7 @@ int gpu_pstate(struct cgpu_info *gpu) @@ -433,7 +420,7 @@ int gpu_pstate(struct cgpu_info *gpu)
* nvmlDeviceGetFanSpeed
nvmlDeviceGetGpuOperationMode
nvmlDeviceGetHandleByIndex
nvmlDeviceGetHandleByIndex_v2
* nvmlDeviceGetHandleByIndex_v2
nvmlDeviceGetHandleByPciBusId
nvmlDeviceGetHandleByPciBusId_v2
nvmlDeviceGetHandleBySerial
@ -450,7 +437,7 @@ int gpu_pstate(struct cgpu_info *gpu) @@ -450,7 +437,7 @@ int gpu_pstate(struct cgpu_info *gpu)
nvmlDeviceGetMinorNumber
nvmlDeviceGetMultiGpuBoard
nvmlDeviceGetName
nvmlDeviceGetPciInfo
* nvmlDeviceGetPciInfo
nvmlDeviceGetPciInfo_v2
* nvmlDeviceGetPerformanceState
nvmlDeviceGetPersistenceMode

3
stats.cpp

@ -72,13 +72,14 @@ extern "C" double stats_get_speed(int thr_id) @@ -72,13 +72,14 @@ extern "C" double stats_get_speed(int thr_id)
{
uint64_t thr = (0xff && thr_id);
uint64_t keypfx = (thr << 56);
uint64_t keymsk = (0xffULL << 56);
double speed = 0.0;
int records = 0;
std::map<uint64_t, stats_data>::reverse_iterator i = tlastscans.rbegin();
while (i != tlastscans.rend() && records < opt_statsavg) {
if (!i->second.ignored)
if (thr_id == -1 || (keypfx & i->first) == keypfx) {
if (thr_id == -1 || (keymsk & i->first) == keypfx) {
if (i->second.hashcount > 1000) {
speed += i->second.hashrate;
records++;

4
util.c → util.cpp

@ -90,7 +90,7 @@ void applog(int prio, const char *fmt, ...) @@ -90,7 +90,7 @@ void applog(int prio, const char *fmt, ...)
va_copy(ap2, ap);
len = vsnprintf(NULL, 0, fmt, ap2) + 1;
va_end(ap2);
buf = alloca(len);
buf = (char*) alloca(len);
if (vsnprintf(buf, len, fmt, ap) >= 0)
syslog(prio, "%s", buf);
}
@ -1473,7 +1473,7 @@ extern void applog_compare_hash(uchar *hash, uchar *hash2) @@ -1473,7 +1473,7 @@ extern void applog_compare_hash(uchar *hash, uchar *hash2)
char s[256] = "";
int len = 0;
for (int i=0; i < 32; i += 4) {
char *color = memcmp(hash+i, hash2+i, 4) ? CL_WHT : CL_GRY;
const char *color = memcmp(hash+i, hash2+i, 4) ? CL_WHT : CL_GRY;
len += sprintf(s+len, "%s%02x%02x%02x%02x " CL_GRY, color,
hash[i], hash[i+1], hash[i+2], hash[i+3]);
s[len] = '\0';
Loading…
Cancel
Save