mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 14:58:01 +00:00
remove varargs from logging/quit/in general as much as possible
This commit is contained in:
parent
736dfb4075
commit
7eba963477
42
cgminer.c
42
cgminer.c
@ -385,13 +385,16 @@ void get_timestamp(char *f, struct timeval *tv)
|
||||
tm->tm_sec);
|
||||
}
|
||||
|
||||
static char exit_buf[512];
|
||||
|
||||
static void applog_and_exit(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vapplog(LOG_ERR, fmt, ap);
|
||||
vsnprintf(exit_buf, sizeof(exit_buf), fmt, ap);
|
||||
va_end(ap);
|
||||
_applog(LOG_ERR, exit_buf);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -2233,24 +2236,16 @@ static void switch_logsize(void)
|
||||
}
|
||||
|
||||
/* For mandatory printing when mutex is already locked */
|
||||
void wlog(const char *f, ...)
|
||||
void _wlog(const char *str)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, f);
|
||||
vw_printw(logwin, f, ap);
|
||||
va_end(ap);
|
||||
wprintw(logwin, "%s", str);
|
||||
}
|
||||
|
||||
/* Mandatory printing */
|
||||
void wlogprint(const char *f, ...)
|
||||
void _wlogprint(const char *str)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (curses_active_locked()) {
|
||||
va_start(ap, f);
|
||||
vw_printw(logwin, f, ap);
|
||||
va_end(ap);
|
||||
wprintw(logwin, "%s", str);
|
||||
unlock_curses();
|
||||
}
|
||||
}
|
||||
@ -2261,7 +2256,7 @@ static void switch_logsize(void)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CURSES
|
||||
bool log_curses_only(int prio, const char *f, va_list ap)
|
||||
bool log_curses_only(int prio, const char *datetime, const char *str)
|
||||
{
|
||||
bool high_prio;
|
||||
|
||||
@ -2269,7 +2264,7 @@ bool log_curses_only(int prio, const char *f, va_list ap)
|
||||
|
||||
if (curses_active_locked()) {
|
||||
if (!opt_loginput || high_prio) {
|
||||
vw_printw(logwin, f, ap);
|
||||
wprintw(logwin, "%s%s\n", datetime, str);
|
||||
if (high_prio) {
|
||||
touchwin(logwin);
|
||||
wrefresh(logwin);
|
||||
@ -4242,7 +4237,7 @@ updated:
|
||||
}
|
||||
retry:
|
||||
wlogprint("\nCurrent pool management strategy: %s\n",
|
||||
strategies[pool_strategy]);
|
||||
strategies[pool_strategy].s);
|
||||
if (pool_strategy == POOL_ROTATE)
|
||||
wlogprint("Set to rotate every %d minutes\n", opt_rotate_period);
|
||||
wlogprint("[F]ailover only %s\n", opt_fail_only ? "enabled" : "disabled");
|
||||
@ -4313,7 +4308,7 @@ retry:
|
||||
goto updated;
|
||||
} else if (!strncasecmp(&input, "c", 1)) {
|
||||
for (i = 0; i <= TOP_STRATEGY; i++)
|
||||
wlogprint("%d: %s\n", i, strategies[i]);
|
||||
wlogprint("%d: %s\n", i, strategies[i].s);
|
||||
selected = curses_int("Select strategy number type");
|
||||
if (selected < 0 || selected > TOP_STRATEGY) {
|
||||
wlogprint("Invalid selection\n");
|
||||
@ -6736,15 +6731,8 @@ static void clean_up(void)
|
||||
curl_global_cleanup();
|
||||
}
|
||||
|
||||
void quit(int status, const char *format, ...)
|
||||
void _quit(int status)
|
||||
{
|
||||
if (format) {
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
vapplog(LOG_ERR, format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
clean_up();
|
||||
|
||||
#if defined(unix) || defined(__APPLE__)
|
||||
@ -7180,12 +7168,10 @@ bool add_cgpu(struct cgpu_info *cgpu)
|
||||
struct device_drv *copy_drv(struct device_drv *drv)
|
||||
{
|
||||
struct device_drv *copy;
|
||||
char buf[100];
|
||||
|
||||
if (unlikely(!(copy = malloc(sizeof(*copy))))) {
|
||||
sprintf(buf, "Failed to allocate device_drv copy of %s (%s)",
|
||||
quit(1, "Failed to allocate device_drv copy of %s (%s)",
|
||||
drv->name, drv->copy ? "copy" : "original");
|
||||
quit(1, buf);
|
||||
}
|
||||
memcpy(copy, drv, sizeof(*copy));
|
||||
copy->copy = true;
|
||||
|
@ -337,7 +337,6 @@ static int avalon_reset(struct cgpu_info *avalon, bool initial)
|
||||
static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
int *asic_count, int *timeout, int *frequency)
|
||||
{
|
||||
char err_buf[BUFSIZ+1];
|
||||
char buf[BUFSIZ+1];
|
||||
char *ptr, *comma, *colon, *colon2, *colon3, *colon4;
|
||||
size_t max;
|
||||
@ -388,10 +387,8 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
*baud = 19200;
|
||||
break;
|
||||
default:
|
||||
sprintf(err_buf,
|
||||
"Invalid avalon-options for baud (%s) "
|
||||
quit(1, "Invalid avalon-options for baud (%s) "
|
||||
"must be 115200, 57600, 38400 or 19200", buf);
|
||||
quit(1, err_buf);
|
||||
}
|
||||
|
||||
if (colon && *colon) {
|
||||
@ -404,11 +401,9 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
if (tmp > 0 && tmp <= AVALON_DEFAULT_MINER_NUM) {
|
||||
*miner_count = tmp;
|
||||
} else {
|
||||
sprintf(err_buf,
|
||||
"Invalid avalon-options for "
|
||||
quit(1, "Invalid avalon-options for "
|
||||
"miner_count (%s) must be 1 ~ %d",
|
||||
colon, AVALON_DEFAULT_MINER_NUM);
|
||||
quit(1, err_buf);
|
||||
}
|
||||
}
|
||||
|
||||
@ -421,11 +416,9 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
if (tmp > 0 && tmp <= AVALON_DEFAULT_ASIC_NUM)
|
||||
*asic_count = tmp;
|
||||
else {
|
||||
sprintf(err_buf,
|
||||
"Invalid avalon-options for "
|
||||
quit(1, "Invalid avalon-options for "
|
||||
"asic_count (%s) must be 1 ~ %d",
|
||||
colon2, AVALON_DEFAULT_ASIC_NUM);
|
||||
quit(1, err_buf);
|
||||
}
|
||||
|
||||
if (colon3 && *colon3) {
|
||||
@ -437,11 +430,9 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
if (tmp > 0 && tmp <= 0xff)
|
||||
*timeout = tmp;
|
||||
else {
|
||||
sprintf(err_buf,
|
||||
"Invalid avalon-options for "
|
||||
quit(1, "Invalid avalon-options for "
|
||||
"timeout (%s) must be 1 ~ %d",
|
||||
colon3, 0xff);
|
||||
quit(1, err_buf);
|
||||
}
|
||||
if (colon4 && *colon4) {
|
||||
tmp = atoi(colon4);
|
||||
@ -453,10 +444,8 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
|
||||
*frequency = tmp;
|
||||
break;
|
||||
default:
|
||||
sprintf(err_buf,
|
||||
"Invalid avalon-options for "
|
||||
quit(1, "Invalid avalon-options for "
|
||||
"frequency must be 256/270/282/300");
|
||||
quit(1, err_buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -595,7 +595,6 @@ static void set_timing_mode(int this_option_offset, struct cgpu_info *icarus)
|
||||
|
||||
static uint32_t mask(int work_division)
|
||||
{
|
||||
char err_buf[BUFSIZ+1];
|
||||
uint32_t nonce_mask = 0x7fffffff;
|
||||
|
||||
// yes we can calculate these, but this way it's easy to see what they are
|
||||
@ -613,8 +612,7 @@ static uint32_t mask(int work_division)
|
||||
nonce_mask = 0x1fffffff;
|
||||
break;
|
||||
default:
|
||||
sprintf(err_buf, "Invalid2 icarus-options for work_division (%d) must be 1, 2, 4 or 8", work_division);
|
||||
quit(1, err_buf);
|
||||
quit(1, "Invalid2 icarus-options for work_division (%d) must be 1, 2, 4 or 8", work_division);
|
||||
}
|
||||
|
||||
return nonce_mask;
|
||||
@ -622,7 +620,6 @@ static uint32_t mask(int work_division)
|
||||
|
||||
static void get_options(int this_option_offset, struct cgpu_info *icarus, int *baud, int *work_division, int *fpga_count)
|
||||
{
|
||||
char err_buf[BUFSIZ+1];
|
||||
char buf[BUFSIZ+1];
|
||||
char *ptr, *comma, *colon, *colon2;
|
||||
size_t max;
|
||||
@ -691,8 +688,7 @@ static void get_options(int this_option_offset, struct cgpu_info *icarus, int *b
|
||||
*baud = 57600;
|
||||
break;
|
||||
default:
|
||||
sprintf(err_buf, "Invalid icarus-options for baud (%s) must be 115200 or 57600", buf);
|
||||
quit(1, err_buf);
|
||||
quit(1, "Invalid icarus-options for baud (%s) must be 115200 or 57600", buf);
|
||||
}
|
||||
}
|
||||
|
||||
@ -707,8 +703,7 @@ static void get_options(int this_option_offset, struct cgpu_info *icarus, int *b
|
||||
*work_division = tmp;
|
||||
*fpga_count = tmp; // default to the same
|
||||
} else {
|
||||
sprintf(err_buf, "Invalid icarus-options for work_division (%s) must be 1, 2, 4 or 8", colon);
|
||||
quit(1, err_buf);
|
||||
quit(1, "Invalid icarus-options for work_division (%s) must be 1, 2, 4 or 8", colon);
|
||||
}
|
||||
}
|
||||
|
||||
@ -717,8 +712,7 @@ static void get_options(int this_option_offset, struct cgpu_info *icarus, int *b
|
||||
if (tmp > 0 && tmp <= *work_division)
|
||||
*fpga_count = tmp;
|
||||
else {
|
||||
sprintf(err_buf, "Invalid icarus-options for fpga_count (%s) must be >0 and <=work_division (%d)", colon2, *work_division);
|
||||
quit(1, err_buf);
|
||||
quit(1, "Invalid icarus-options for fpga_count (%s) must be >0 and <=work_division (%d)", colon2, *work_division);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -53,7 +53,6 @@ extern bool have_opencl;
|
||||
extern void *miner_thread(void *userdata);
|
||||
extern int dev_from_id(int thr_id);
|
||||
extern void tailsprintf(char *f, const char *fmt, ...);
|
||||
extern void wlog(const char *f, ...);
|
||||
extern void decay_time(double *f, double fadd);
|
||||
|
||||
/**********************************************/
|
||||
|
93
logging.c
93
logging.c
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2011-2012 Con Kolivas
|
||||
* Copyright 2013 Andrew Smith
|
||||
*
|
||||
* This program 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
|
||||
@ -13,7 +14,6 @@
|
||||
|
||||
#include "logging.h"
|
||||
#include "miner.h"
|
||||
// #include "util.h"
|
||||
|
||||
bool opt_debug = false;
|
||||
bool opt_log_output = false;
|
||||
@ -21,66 +21,40 @@ bool opt_log_output = false;
|
||||
/* per default priorities higher than LOG_NOTICE are logged */
|
||||
int opt_log_level = LOG_NOTICE;
|
||||
|
||||
static void my_log_curses(__maybe_unused int prio, char *f, va_list ap)
|
||||
static void my_log_curses(int prio, const char *datetime, const char *str)
|
||||
{
|
||||
if (opt_quiet && prio != LOG_ERR)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_CURSES
|
||||
extern bool use_curses;
|
||||
if (use_curses && log_curses_only(prio, f, ap))
|
||||
if (use_curses && log_curses_only(prio, datetime, str))
|
||||
;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
int len = strlen(f);
|
||||
|
||||
strcpy(f + len - 1, " \n");
|
||||
|
||||
mutex_lock(&console_lock);
|
||||
vprintf(f, ap);
|
||||
printf("%s%s%s\n", datetime, str, " \n");
|
||||
mutex_unlock(&console_lock);
|
||||
}
|
||||
}
|
||||
|
||||
static void log_generic(int prio, const char *fmt, va_list ap);
|
||||
|
||||
void vapplog(int prio, const char *fmt, va_list ap)
|
||||
{
|
||||
if (!opt_debug && prio == LOG_DEBUG)
|
||||
return;
|
||||
if (use_syslog || opt_log_output || prio <= LOG_NOTICE)
|
||||
log_generic(prio, fmt, ap);
|
||||
}
|
||||
|
||||
void _applog(int prio, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vapplog(prio, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
|
||||
/* high-level logging functions, based on global opt_log_level */
|
||||
/* high-level logging function, based on global opt_log_level */
|
||||
|
||||
/*
|
||||
* generic log function used by priority specific ones
|
||||
* equals vapplog() without additional priority checks
|
||||
* log function
|
||||
*/
|
||||
static void log_generic(int prio, const char *fmt, va_list ap)
|
||||
void _applog(int prio, const char *str)
|
||||
{
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
if (use_syslog) {
|
||||
vsyslog(prio, fmt, ap);
|
||||
syslog(prio, "%s", str);
|
||||
}
|
||||
#else
|
||||
if (0) {}
|
||||
#endif
|
||||
else {
|
||||
char *f;
|
||||
int len;
|
||||
char datetime[64];
|
||||
struct timeval tv = {0, 0};
|
||||
struct tm *tm;
|
||||
|
||||
@ -89,59 +63,20 @@ static void log_generic(int prio, const char *fmt, va_list ap)
|
||||
const time_t tmp_time = tv.tv_sec;
|
||||
tm = localtime(&tmp_time);
|
||||
|
||||
len = 40 + strlen(fmt) + 22;
|
||||
f = alloca(len);
|
||||
sprintf(f, " [%d-%02d-%02d %02d:%02d:%02d] %s\n",
|
||||
sprintf(datetime, " [%d-%02d-%02d %02d:%02d:%02d] ",
|
||||
tm->tm_year + 1900,
|
||||
tm->tm_mon + 1,
|
||||
tm->tm_mday,
|
||||
tm->tm_hour,
|
||||
tm->tm_min,
|
||||
tm->tm_sec,
|
||||
fmt);
|
||||
tm->tm_sec);
|
||||
|
||||
/* Only output to stderr if it's not going to the screen as well */
|
||||
if (!isatty(fileno((FILE *)stderr))) {
|
||||
va_list apc;
|
||||
|
||||
va_copy(apc, ap);
|
||||
vfprintf(stderr, f, apc); /* atomic write to stderr */
|
||||
va_end(apc);
|
||||
fprintf(stderr, "%s%s\n", datetime, str); /* atomic write to stderr */
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
my_log_curses(prio, f, ap);
|
||||
my_log_curses(prio, datetime, str);
|
||||
}
|
||||
}
|
||||
/* we can not generalize variable argument list */
|
||||
#define LOG_TEMPLATE(PRIO) \
|
||||
if (PRIO <= opt_log_level) { \
|
||||
va_list ap; \
|
||||
va_start(ap, fmt); \
|
||||
vapplog(PRIO, fmt, ap); \
|
||||
va_end(ap); \
|
||||
}
|
||||
|
||||
void log_error(const char *fmt, ...)
|
||||
{
|
||||
LOG_TEMPLATE(LOG_ERR);
|
||||
}
|
||||
|
||||
void log_warning(const char *fmt, ...)
|
||||
{
|
||||
LOG_TEMPLATE(LOG_WARNING);
|
||||
}
|
||||
|
||||
void log_notice(const char *fmt, ...)
|
||||
{
|
||||
LOG_TEMPLATE(LOG_NOTICE);
|
||||
}
|
||||
|
||||
void log_info(const char *fmt, ...)
|
||||
{
|
||||
LOG_TEMPLATE(LOG_INFO);
|
||||
}
|
||||
|
||||
void log_debug(const char *fmt, ...)
|
||||
{
|
||||
LOG_TEMPLATE(LOG_DEBUG);
|
||||
}
|
||||
|
51
logging.h
51
logging.h
@ -17,7 +17,7 @@ enum {
|
||||
};
|
||||
#endif
|
||||
|
||||
/* original / legacy debug flags */
|
||||
/* debug flags */
|
||||
extern bool opt_debug;
|
||||
extern bool opt_log_output;
|
||||
extern bool opt_realquiet;
|
||||
@ -26,22 +26,43 @@ extern bool want_per_device_stats;
|
||||
/* global log_level, messages with lower or equal prio are logged */
|
||||
extern int opt_log_level;
|
||||
|
||||
/* low-level logging functions with priority parameter */
|
||||
extern void vapplog(int prio, const char *fmt, va_list ap);
|
||||
extern void _applog(int prio, const char *fmt, ...);
|
||||
#define LOGBUFSIZ 256
|
||||
|
||||
extern void _applog(int prio, const char *str);
|
||||
|
||||
#define applog(prio, fmt, ...) do { \
|
||||
char *tmp42; \
|
||||
if (0) \
|
||||
sprintf(tmp42, fmt, ##__VA_ARGS__); \
|
||||
else \
|
||||
_applog(prio, fmt, ##__VA_ARGS__); \
|
||||
if (opt_debug || prio != LOG_DEBUG) { \
|
||||
if (use_syslog || opt_log_output || prio <= opt_log_level) { \
|
||||
char tmp42[LOGBUFSIZ]; \
|
||||
snprintf(tmp42, sizeof(tmp42), fmt, ##__VA_ARGS__); \
|
||||
_applog(prio, tmp42); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* high-level logging functions with implicit priority */
|
||||
extern void log_error(const char *fmt, ...);
|
||||
extern void log_warning(const char *fmt, ...);
|
||||
extern void log_notice(const char *fmt, ...);
|
||||
extern void log_info(const char *fmt, ...);
|
||||
extern void log_debug(const char *fmt, ...);
|
||||
#define quit(status, fmt, ...) do { \
|
||||
if (fmt) { \
|
||||
char tmp42[LOGBUFSIZ]; \
|
||||
snprintf(tmp42, sizeof(tmp42), fmt, ##__VA_ARGS__); \
|
||||
_applog(LOG_ERR, tmp42); \
|
||||
} \
|
||||
_quit(status); \
|
||||
} while (0)
|
||||
|
||||
#ifdef HAVE_CURSES
|
||||
|
||||
#define wlog(fmt, ...) do { \
|
||||
char tmp42[LOGBUFSIZ]; \
|
||||
snprintf(tmp42, sizeof(tmp42), fmt, ##__VA_ARGS__); \
|
||||
_wlog(tmp42); \
|
||||
} while (0)
|
||||
|
||||
#define wlogprint(fmt, ...) do { \
|
||||
char tmp42[LOGBUFSIZ]; \
|
||||
snprintf(tmp42, sizeof(tmp42), fmt, ##__VA_ARGS__); \
|
||||
_wlogprint(tmp42); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __LOGGING_H__ */
|
||||
|
7
miner.h
7
miner.h
@ -713,7 +713,7 @@ endian_flip128(void __maybe_unused *dest_p, const void __maybe_unused *src_p)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void quit(int status, const char *format, ...);
|
||||
extern void _quit(int status);
|
||||
|
||||
static inline void mutex_lock(pthread_mutex_t *lock)
|
||||
{
|
||||
@ -1281,7 +1281,8 @@ extern struct work *find_queued_work_bymidstate(struct cgpu_info *cgpu, char *mi
|
||||
extern void work_completed(struct cgpu_info *cgpu, struct work *work);
|
||||
extern void hash_queued_work(struct thr_info *mythr);
|
||||
extern void tailsprintf(char *f, const char *fmt, ...);
|
||||
extern void wlogprint(const char *f, ...);
|
||||
extern void _wlog(const char *str);
|
||||
extern void _wlogprint(const char *str);
|
||||
extern int curses_int(const char *query);
|
||||
extern char *curses_input(const char *query);
|
||||
extern void kill_work(void);
|
||||
@ -1292,7 +1293,7 @@ extern void write_config(FILE *fcfg);
|
||||
extern void zero_bestshare(void);
|
||||
extern void zero_stats(void);
|
||||
extern void default_save_file(char *filename);
|
||||
extern bool log_curses_only(int prio, const char *f, va_list ap);
|
||||
extern bool log_curses_only(int prio, const char *datetime, const char *str);
|
||||
extern void clear_logwin(void);
|
||||
extern void logwin_update(void);
|
||||
extern bool pool_tclear(struct pool *pool, bool *var);
|
||||
|
@ -2247,7 +2247,7 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro
|
||||
USBDEBUG("USB debug: _usb_read(%s (nodev=%s),ep=%d,buf=%p,bufsiz=%zu,proc=%p,timeout=%u,end=%s,cmd=%s,ftdi=%s,readonce=%s)", cgpu->drv->name, bool_str(cgpu->usbinfo.nodev), ep, buf, bufsiz, processed, timeout, end ? (char *)str_text((char *)end) : "NULL", usb_cmdname(cmd), bool_str(ftdi), bool_str(readonce));
|
||||
|
||||
if (bufsiz > USB_MAX_READ)
|
||||
quit(1, "%s USB read request %d too large (max=%d)", cgpu->drv->name, bufsiz, USB_MAX_READ);
|
||||
quit(1, "%s USB read request %zu too large (max=%d)", cgpu->drv->name, bufsiz, USB_MAX_READ);
|
||||
|
||||
if (timeout == DEVTIMEOUT)
|
||||
timeout = usbdev->found->timeout;
|
||||
|
Loading…
Reference in New Issue
Block a user