mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-22 22:58:30 +00:00
Some optical change on startup
This commit is contained in:
parent
d57ac912cc
commit
07acd52ed4
@ -3,9 +3,9 @@ hashcat v3.00
|
|||||||
|
|
||||||
** THE VERSION 3.00 IS CURRENTLY STILL IN BETA **
|
** THE VERSION 3.00 IS CURRENTLY STILL IN BETA **
|
||||||
|
|
||||||
AMD users require AMD drivers 14.9 or later (recommended 15.12 or later)
|
AMD users require AMD drivers 14.9 or later (recommended 15.12)
|
||||||
Intel users require Intel OpenCL Runtime 14.2 or later (recommended 15.1 or later)
|
Intel users require Intel OpenCL Runtime 14.2 or later (recommended 16.2 or later)
|
||||||
NVidia users require NVidia drivers 346.59 or later (recommended 361.x or later)
|
NVidia users require NVidia drivers 346.59 or later (recommended 367.27 or later)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Features
|
## Features
|
||||||
@ -238,4 +238,3 @@ NVidia users require NVidia drivers 346.59 or later (recommended 361.x or later)
|
|||||||
- DSP
|
- DSP
|
||||||
- FPGA
|
- FPGA
|
||||||
- Coprocessor
|
- Coprocessor
|
||||||
|
|
||||||
|
@ -118,13 +118,13 @@ typedef uint32_t uint; // we need to get rid of this sooner or later, for consis
|
|||||||
* functions
|
* functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void log_out_nn (FILE *fp, const char *fmt, ...);
|
int log_out_nn (FILE *fp, const char *fmt, ...);
|
||||||
void log_info_nn (const char *fmt, ...);
|
int log_info_nn (const char *fmt, ...);
|
||||||
void log_error_nn (const char *fmt, ...);
|
int log_error_nn (const char *fmt, ...);
|
||||||
|
|
||||||
void log_out (FILE *fp, const char *fmt, ...);
|
int log_out (FILE *fp, const char *fmt, ...);
|
||||||
void log_info (const char *fmt, ...);
|
int log_info (const char *fmt, ...);
|
||||||
void log_error (const char *fmt, ...);
|
int log_error (const char *fmt, ...);
|
||||||
|
|
||||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
|
123
src/hashcat.c
123
src/hashcat.c
@ -1835,6 +1835,26 @@ static void generate_cached_kernel_amp_filename (const uint attack_kern, char *p
|
|||||||
snprintf (cached_file, 255, "%s/kernels/amp_a%d.%s.kernel", profile_dir, attack_kern, device_name_chksum);
|
snprintf (cached_file, 255, "%s/kernels/amp_a%d.%s.kernel", profile_dir, attack_kern, device_name_chksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *filename_from_filepath (char *filepath)
|
||||||
|
{
|
||||||
|
char *ptr = NULL;
|
||||||
|
|
||||||
|
if ((ptr = strrchr (filepath, '/')) != NULL)
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
else if ((ptr = strrchr (filepath, '\\')) != NULL)
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ptr = filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
static uint convert_from_hex (char *line_buf, const uint line_len)
|
static uint convert_from_hex (char *line_buf, const uint line_len)
|
||||||
{
|
{
|
||||||
if (line_len & 1) return (line_len); // not in hex
|
if (line_len & 1) return (line_len); // not in hex
|
||||||
@ -3352,8 +3372,8 @@ static void autotune (hc_device_param_t *device_param)
|
|||||||
{
|
{
|
||||||
clear_prompt ();
|
clear_prompt ();
|
||||||
|
|
||||||
log_info ("Device #%u: autotuned kernel-accel to %u\n"
|
log_info ("- Device #%u: autotuned kernel-accel to %u\n"
|
||||||
"Device #%u: autotuned kernel-loops to %u\n",
|
"- Device #%u: autotuned kernel-loops to %u\n",
|
||||||
device_param->device_id + 1, kernel_accel,
|
device_param->device_id + 1, kernel_accel,
|
||||||
device_param->device_id + 1, kernel_loops);
|
device_param->device_id + 1, kernel_loops);
|
||||||
|
|
||||||
@ -13672,8 +13692,6 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
for (uint platform_id = 0; platform_id < platforms_cnt; platform_id++)
|
for (uint platform_id = 0; platform_id < platforms_cnt; platform_id++)
|
||||||
{
|
{
|
||||||
if ((opencl_platforms_filter & (1 << platform_id)) == 0) continue;
|
|
||||||
|
|
||||||
cl_platform_id platform = platforms[platform_id];
|
cl_platform_id platform = platforms[platform_id];
|
||||||
|
|
||||||
hc_clGetDeviceIDs (data.ocl, platform, CL_DEVICE_TYPE_ALL, DEVICES_MAX, platform_devices, &platform_devices_cnt);
|
hc_clGetDeviceIDs (data.ocl, platform, CL_DEVICE_TYPE_ALL, DEVICES_MAX, platform_devices, &platform_devices_cnt);
|
||||||
@ -13725,6 +13743,33 @@ int main (int argc, char **argv)
|
|||||||
platform_vendor_id = VENDOR_ID_GENERIC;
|
platform_vendor_id = VENDOR_ID_GENERIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint platform_skipped = ((opencl_platforms_filter & (1 << platform_id)) == 0);
|
||||||
|
|
||||||
|
if ((benchmark == 1 || quiet == 0) && (algorithm_pos == 0))
|
||||||
|
{
|
||||||
|
if (machine_readable == 0)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
if (platform_skipped == 0)
|
||||||
|
{
|
||||||
|
len = log_info ("OpenCL Platform #%u: %s", platform_id + 1, platform_vendor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = log_info ("OpenCL Platform #%u: %s, skipped", platform_id + 1, platform_vendor);
|
||||||
|
}
|
||||||
|
|
||||||
|
char line[256] = { 0 };
|
||||||
|
|
||||||
|
for (int i = 0; i < len; i++) line[i] = '=';
|
||||||
|
|
||||||
|
log_info (line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (platform_skipped == 1) continue;
|
||||||
|
|
||||||
for (uint platform_devices_id = 0; platform_devices_id < platform_devices_cnt; platform_devices_id++)
|
for (uint platform_devices_id = 0; platform_devices_id < platform_devices_cnt; platform_devices_id++)
|
||||||
{
|
{
|
||||||
size_t param_value_size = 0;
|
size_t param_value_size = 0;
|
||||||
@ -13918,7 +13963,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (device_endian_little == CL_FALSE)
|
if (device_endian_little == CL_FALSE)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: not little endian device", device_id + 1);
|
log_info ("- Device #%u: WARNING: not little endian device", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -13931,7 +13976,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (device_available == CL_FALSE)
|
if (device_available == CL_FALSE)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device not available", device_id + 1);
|
log_info ("- Device #%u: WARNING: device not available", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -13944,7 +13989,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (device_compiler_available == CL_FALSE)
|
if (device_compiler_available == CL_FALSE)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device no compiler available", device_id + 1);
|
log_info ("- Device #%u: WARNING: device no compiler available", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -13957,7 +14002,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if ((device_execution_capabilities & CL_EXEC_KERNEL) == 0)
|
if ((device_execution_capabilities & CL_EXEC_KERNEL) == 0)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device does not support executing kernels", device_id + 1);
|
log_info ("- Device #%u: WARNING: device does not support executing kernels", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -13974,14 +14019,14 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (strstr (device_extensions, "base_atomics") == 0)
|
if (strstr (device_extensions, "base_atomics") == 0)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device does not support base atomics", device_id + 1);
|
log_info ("- Device #%u: WARNING: device does not support base atomics", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strstr (device_extensions, "byte_addressable_store") == 0)
|
if (strstr (device_extensions, "byte_addressable_store") == 0)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device does not support byte addressable store", device_id + 1);
|
log_info ("- Device #%u: WARNING: device does not support byte addressable store", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -13996,7 +14041,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (device_local_mem_size < 32768)
|
if (device_local_mem_size < 32768)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: device local mem size is too small", device_id + 1);
|
log_info ("- Device #%u: WARNING: device local mem size is too small", device_id + 1);
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
}
|
}
|
||||||
@ -14015,8 +14060,8 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (algorithm_pos == 0)
|
if (algorithm_pos == 0)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: WARNING: not native intel opencl runtime, expect massive speed loss", device_id + 1);
|
log_info ("- Device #%u: WARNING: not native intel opencl runtime, expect massive speed loss", device_id + 1);
|
||||||
log_info (" You can use --force to override this but do not post error reports if you do so");
|
log_info (" You can use --force to override this but do not post error reports if you do so");
|
||||||
}
|
}
|
||||||
|
|
||||||
device_param->skipped = 1;
|
device_param->skipped = 1;
|
||||||
@ -14170,7 +14215,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (device_param->skipped == 0)
|
if (device_param->skipped == 0)
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: %s, %lu/%lu MB allocatable, %uMCU",
|
log_info ("- Device #%u: %s, %lu/%lu MB allocatable, %uMCU",
|
||||||
device_id + 1,
|
device_id + 1,
|
||||||
device_name,
|
device_name,
|
||||||
(unsigned int) (device_maxmem_alloc / 1024 / 1024),
|
(unsigned int) (device_maxmem_alloc / 1024 / 1024),
|
||||||
@ -14179,7 +14224,7 @@ int main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log_info ("Device #%u: %s, skipped",
|
log_info ("- Device #%u: %s, skipped",
|
||||||
device_id + 1,
|
device_id + 1,
|
||||||
device_name);
|
device_name);
|
||||||
}
|
}
|
||||||
@ -14244,8 +14289,8 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (device_param->kernel_exec_timeout != 0)
|
if (device_param->kernel_exec_timeout != 0)
|
||||||
{
|
{
|
||||||
if (data.quiet == 0) log_info ("Device #%u: WARNING! Kernel exec timeout is not disabled, it might cause you errors of code 702", device_id + 1);
|
if (data.quiet == 0) log_info ("- Device #%u: WARNING! Kernel exec timeout is not disabled, it might cause you errors of code 702", device_id + 1);
|
||||||
if (data.quiet == 0) log_info (" See the wiki on how to disable it: https://hashcat.net/wiki/doku.php?id=timeout_patch");
|
if (data.quiet == 0) log_info (" See the wiki on how to disable it: https://hashcat.net/wiki/doku.php?id=timeout_patch");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -14334,6 +14379,14 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
devices_cnt++;
|
devices_cnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((benchmark == 1 || quiet == 0) && (algorithm_pos == 0))
|
||||||
|
{
|
||||||
|
if (machine_readable == 0)
|
||||||
|
{
|
||||||
|
log_info ("");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyspace == 0 && devices_active == 0)
|
if (keyspace == 0 && devices_active == 0)
|
||||||
@ -14361,14 +14414,6 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
data.devices_active = devices_active;
|
data.devices_active = devices_active;
|
||||||
|
|
||||||
if ((benchmark == 1 || quiet == 0) && (algorithm_pos == 0))
|
|
||||||
{
|
|
||||||
if (machine_readable == 0)
|
|
||||||
{
|
|
||||||
log_info ("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HM devices: init
|
* HM devices: init
|
||||||
*/
|
*/
|
||||||
@ -15284,7 +15329,7 @@ int main (int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
if (kernel_accel_max == 0)
|
if (kernel_accel_max == 0)
|
||||||
{
|
{
|
||||||
log_error ("Device #%u: Device does not provide enough allocatable device-memory to handle hash-type %u", device_id + 1, data.hash_mode);
|
log_error ("- Device #%u: Device does not provide enough allocatable device-memory to handle hash-type %u", device_id + 1, data.hash_mode);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -15296,7 +15341,7 @@ int main (int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
if (kernel_accel_max < kernel_accel)
|
if (kernel_accel_max < kernel_accel)
|
||||||
{
|
{
|
||||||
if (quiet == 0) log_info ("Device #%u: Reduced maximum kernel-accel to %u", device_id + 1, kernel_accel_max);
|
if (quiet == 0) log_info ("- Device #%u: Reduced maximum kernel-accel to %u", device_id + 1, kernel_accel_max);
|
||||||
|
|
||||||
device_param->kernel_accel = kernel_accel_max;
|
device_param->kernel_accel = kernel_accel_max;
|
||||||
}
|
}
|
||||||
@ -15342,7 +15387,7 @@ int main (int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
log_info ("Device #%u: build_opts '%s'\n", device_id + 1, build_opts);
|
log_info ("- Device #%u: build_opts '%s'\n", device_id + 1, build_opts);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15396,7 +15441,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (cached == 0)
|
if (cached == 0)
|
||||||
{
|
{
|
||||||
if (quiet == 0) log_info ("Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, cached_file);
|
if (quiet == 0) log_info ("- Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, filename_from_filepath (cached_file));
|
||||||
|
|
||||||
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
||||||
|
|
||||||
@ -15427,7 +15472,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
device_param->skipped = true;
|
device_param->skipped = true;
|
||||||
|
|
||||||
log_info ("Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
log_info ("- Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -15447,7 +15492,7 @@ int main (int argc, char **argv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
log_info ("Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
log_info ("- Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
||||||
@ -15460,7 +15505,7 @@ int main (int argc, char **argv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
log_info ("Device #%u: Kernel %s (%ld bytes)", device_id + 1, source_file, sst.st_size);
|
log_info ("- Device #%u: Kernel %s (%ld bytes)", device_id + 1, source_file, sst.st_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
||||||
@ -15507,7 +15552,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
device_param->skipped = true;
|
device_param->skipped = true;
|
||||||
|
|
||||||
log_info ("Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
log_info ("- Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15566,7 +15611,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (cached == 0)
|
if (cached == 0)
|
||||||
{
|
{
|
||||||
if (quiet == 0) log_info ("Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, cached_file);
|
if (quiet == 0) log_info ("- Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, filename_from_filepath (cached_file));
|
||||||
if (quiet == 0) log_info ("");
|
if (quiet == 0) log_info ("");
|
||||||
|
|
||||||
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
||||||
@ -15579,7 +15624,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
device_param->skipped = true;
|
device_param->skipped = true;
|
||||||
|
|
||||||
log_info ("Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
log_info ("- Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -15599,7 +15644,7 @@ int main (int argc, char **argv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
log_info ("Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
log_info ("- Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
||||||
@ -15668,7 +15713,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
if (cached == 0)
|
if (cached == 0)
|
||||||
{
|
{
|
||||||
if (quiet == 0) log_info ("Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, cached_file);
|
if (quiet == 0) log_info ("- Device #%u: Kernel %s not found in cache! Building may take a while...", device_id + 1, filename_from_filepath (cached_file));
|
||||||
if (quiet == 0) log_info ("");
|
if (quiet == 0) log_info ("");
|
||||||
|
|
||||||
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (source_file, 1, kernel_lengths, kernel_sources);
|
||||||
@ -15681,7 +15726,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
device_param->skipped = true;
|
device_param->skipped = true;
|
||||||
|
|
||||||
log_info ("Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
log_info ("- Device #%u: Kernel %s build failure. Proceed without this device.", device_id + 1, source_file);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -15701,7 +15746,7 @@ int main (int argc, char **argv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (quiet == 0) log_info ("Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
if (quiet == 0) log_info ("- Device #%u: Kernel %s (%ld bytes)", device_id + 1, cached_file, cst.st_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
load_kernel (cached_file, 1, kernel_lengths, kernel_sources);
|
||||||
|
52
src/shared.c
52
src/shared.c
@ -83,7 +83,7 @@ u64 byte_swap_64 (const u64 n)
|
|||||||
|
|
||||||
int last_len = 0;
|
int last_len = 0;
|
||||||
|
|
||||||
void log_final (FILE *fp, const char *fmt, va_list ap)
|
int log_final (FILE *fp, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
if (last_len)
|
if (last_len)
|
||||||
{
|
{
|
||||||
@ -110,84 +110,96 @@ void log_final (FILE *fp, const char *fmt, va_list ap)
|
|||||||
fflush (fp);
|
fflush (fp);
|
||||||
|
|
||||||
last_len = len;
|
last_len = len;
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_out_nn (FILE *fp, const char *fmt, ...)
|
int log_out_nn (FILE *fp, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (fp, fmt, ap);
|
const int len = log_final (fp, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_info_nn (const char *fmt, ...)
|
int log_info_nn (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (stdout, fmt, ap);
|
const int len = log_final (stdout, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_error_nn (const char *fmt, ...)
|
int log_error_nn (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (stderr, fmt, ap);
|
const int len = log_final (stderr, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_out (FILE *fp, const char *fmt, ...)
|
int log_out (FILE *fp, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (fp, fmt, ap);
|
const int len = log_final (fp, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
fputc ('\n', fp);
|
fputc ('\n', fp);
|
||||||
|
|
||||||
last_len = 0;
|
last_len = 0;
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_info (const char *fmt, ...)
|
int log_info (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (stdout, fmt, ap);
|
const int len = log_final (stdout, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
fputc ('\n', stdout);
|
fputc ('\n', stdout);
|
||||||
|
|
||||||
last_len = 0;
|
last_len = 0;
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_error (const char *fmt, ...)
|
int log_error (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
if (SUPPRESS_OUTPUT) return;
|
if (SUPPRESS_OUTPUT) return 0;
|
||||||
|
|
||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
@ -196,7 +208,7 @@ void log_error (const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
log_final (stderr, fmt, ap);
|
const int len = log_final (stderr, fmt, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
@ -204,6 +216,8 @@ void log_error (const char *fmt, ...)
|
|||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
|
|
||||||
last_len = 0;
|
last_len = 0;
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user