mirror of
https://github.com/hashcat/hashcat
synced 2024-12-01 20:18:12 +01:00
Add some useful stuff to main.c
This commit is contained in:
parent
50d2cec912
commit
57cb082fda
@ -21,7 +21,7 @@ int sort_by_dictstat (const void *s1, const void *s2);
|
||||
|
||||
void dictstat_init (dictstat_ctx_t *dictstat_ctx, const user_options_t *user_options, const folder_config_t *folder_config);
|
||||
void dictstat_destroy (dictstat_ctx_t *dictstat_ctx);
|
||||
void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime);
|
||||
void dictstat_read (dictstat_ctx_t *dictstat_ctx);
|
||||
int dictstat_write (dictstat_ctx_t *dictstat_ctx);
|
||||
u64 dictstat_find (dictstat_ctx_t *dictstat_ctx, dictstat_t *d);
|
||||
void dictstat_append (dictstat_ctx_t *dictstat_ctx, dictstat_t *d);
|
||||
|
@ -6,6 +6,9 @@
|
||||
#ifndef _HASHCAT_H
|
||||
#define _HASHCAT_H
|
||||
|
||||
int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv);
|
||||
int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_folder, int argc, char **argv, const int comptime);
|
||||
|
||||
void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx);
|
||||
void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
|
||||
|
||||
#endif // _HASHCAT_H
|
||||
|
@ -23,8 +23,8 @@
|
||||
#include <windows.h>
|
||||
#endif // _WIN
|
||||
|
||||
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx, char *version_tag);
|
||||
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx);
|
||||
void welcome_screen (const user_options_t *user_options, const time_t proc_start, const char *version_tag);
|
||||
void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop);
|
||||
|
||||
int setup_console ();
|
||||
|
||||
|
25
src/Makefile
25
src/Makefile
@ -257,11 +257,8 @@ uninstall:
|
||||
obj/%.NATIVE.o: src/%.c
|
||||
$(CC) $(CFLAGS_NATIVE) -c -o $@ $<
|
||||
|
||||
obj/hashcat.NATIVE.o: src/hashcat.c
|
||||
$(CC) $(CFLAGS_NATIVE) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
$(BINARY_NATIVE): src/main.c $(NATIVE_OBJS)
|
||||
$(CC) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE)
|
||||
$(CC) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
##
|
||||
## cross compiled hashcat for binary release version
|
||||
@ -279,26 +276,14 @@ obj/%.WIN.32.o: src/%.c
|
||||
obj/%.WIN.64.o: src/%.c
|
||||
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $<
|
||||
|
||||
obj/hashcat.LINUX.32.o: src/hashcat.c
|
||||
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
obj/hashcat.LINUX.64.o: src/hashcat.c
|
||||
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
obj/hashcat.WIN.32.o: src/hashcat.c
|
||||
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
|
||||
|
||||
obj/hashcat.WIN.64.o: src/hashcat.c
|
||||
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
|
||||
|
||||
hashcat32.bin: src/main.c $(LINUX_32_OBJS)
|
||||
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX)
|
||||
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
hashcat64.bin: src/main.c $(LINUX_64_OBJS)
|
||||
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX)
|
||||
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
|
||||
|
||||
hashcat32.exe: src/main.c $(WIN_32_OBJS)
|
||||
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN)
|
||||
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
|
||||
|
||||
hashcat64.exe: src/main.c $(WIN_64_OBJS)
|
||||
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN)
|
||||
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
|
||||
|
@ -56,7 +56,7 @@ void dictstat_destroy (dictstat_ctx_t *dictstat_ctx)
|
||||
memset (dictstat_ctx, 0, sizeof (dictstat_ctx_t));
|
||||
}
|
||||
|
||||
void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime)
|
||||
void dictstat_read (dictstat_ctx_t *dictstat_ctx)
|
||||
{
|
||||
if (dictstat_ctx->enabled == false) return;
|
||||
|
||||
@ -69,28 +69,6 @@ void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime)
|
||||
return;
|
||||
}
|
||||
|
||||
hc_stat tmpstat;
|
||||
|
||||
#if defined (_POSIX)
|
||||
fstat (fileno (fp), &tmpstat);
|
||||
#endif
|
||||
|
||||
#if defined (_WIN)
|
||||
_fstat64 (fileno (fp), &tmpstat);
|
||||
#endif
|
||||
|
||||
if (tmpstat.st_mtime < comptime)
|
||||
{
|
||||
/* with v0.15 the format changed so we have to ensure user is using a good version
|
||||
since there is no version-header in the dictstat file */
|
||||
|
||||
fclose (fp);
|
||||
|
||||
unlink (dictstat_ctx->filename);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
while (!feof (fp))
|
||||
{
|
||||
dictstat_t d;
|
||||
|
@ -262,6 +262,8 @@ int folder_config_init (folder_config_t *folder_config, const char *install_fold
|
||||
|
||||
#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
|
||||
|
||||
if (install_folder == NULL) install_folder = "/"; // makes library use easier
|
||||
|
||||
char *resolved_install_folder = realpath (install_folder, NULL);
|
||||
char *resolved_exec_path = realpath (exec_path, NULL);
|
||||
|
||||
|
@ -56,7 +56,7 @@
|
||||
extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_CNT;
|
||||
extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_BUF[];
|
||||
|
||||
static void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
hashcat_ctx->bitmap_ctx = (bitmap_ctx_t *) mymalloc (sizeof (bitmap_ctx_t));
|
||||
hashcat_ctx->combinator_ctx = (combinator_ctx_t *) mymalloc (sizeof (combinator_ctx_t));
|
||||
@ -84,7 +84,7 @@ static void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
hashcat_ctx->wl_data = (wl_data_t *) mymalloc (sizeof (wl_data_t));
|
||||
}
|
||||
|
||||
static void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
|
||||
void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
myfree (hashcat_ctx->bitmap_ctx);
|
||||
myfree (hashcat_ctx->combinator_ctx);
|
||||
@ -847,7 +847,7 @@ static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
|
||||
* dictstat read
|
||||
*/
|
||||
|
||||
dictstat_read (dictstat_ctx, COMPTIME);
|
||||
dictstat_read (dictstat_ctx);
|
||||
|
||||
/**
|
||||
* dictionary pad
|
||||
@ -1713,16 +1713,12 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_folder, int argc, char **argv, const int comptime)
|
||||
{
|
||||
/**
|
||||
* To help users a bit
|
||||
*/
|
||||
|
||||
const int rc_console = setup_console ();
|
||||
|
||||
if (rc_console == -1) return -1;
|
||||
|
||||
setup_environment_variables ();
|
||||
|
||||
setup_umask ();
|
||||
@ -1731,8 +1727,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
* main init
|
||||
*/
|
||||
|
||||
hashcat_ctx_init (hashcat_ctx);
|
||||
|
||||
debugfile_ctx_t *debugfile_ctx = hashcat_ctx->debugfile_ctx;
|
||||
dictstat_ctx_t *dictstat_ctx = hashcat_ctx->dictstat_ctx;
|
||||
folder_config_t *folder_config = hashcat_ctx->folder_config;
|
||||
@ -1762,51 +1756,8 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
* folder
|
||||
*/
|
||||
|
||||
char *install_folder = NULL;
|
||||
char *shared_folder = NULL;
|
||||
|
||||
#if defined (INSTALL_FOLDER)
|
||||
install_folder = INSTALL_FOLDER;
|
||||
#endif
|
||||
|
||||
#if defined (SHARED_FOLDER)
|
||||
shared_folder = SHARED_FOLDER;
|
||||
#endif
|
||||
|
||||
folder_config_init (folder_config, install_folder, shared_folder);
|
||||
|
||||
/**
|
||||
* commandline parameters
|
||||
*/
|
||||
|
||||
user_options_init (user_options);
|
||||
|
||||
const int rc_options_getopt = user_options_getopt (user_options, argc, argv);
|
||||
|
||||
if (rc_options_getopt == -1) return -1;
|
||||
|
||||
const int rc_options_sanity = user_options_sanity (user_options);
|
||||
|
||||
if (rc_options_sanity == -1) return -1;
|
||||
|
||||
/**
|
||||
* some early exits
|
||||
*/
|
||||
|
||||
if (user_options->version == true)
|
||||
{
|
||||
log_info ("%s", VERSION_TAG);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (user_options->usage == true)
|
||||
{
|
||||
usage_big_print (PROGNAME);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* restore
|
||||
*/
|
||||
@ -1829,13 +1780,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
|
||||
setup_seeding (user_options->rp_gen_seed_chgd, user_options->rp_gen_seed);
|
||||
|
||||
/**
|
||||
* Inform user things getting started,
|
||||
* - this is giving us a visual header before preparations start, so we do not need to clear them afterwards
|
||||
*/
|
||||
|
||||
welcome_screen (user_options, status_ctx, VERSION_TAG);
|
||||
|
||||
/**
|
||||
* logfile init
|
||||
*/
|
||||
@ -1938,7 +1882,7 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
* Init OpenCL devices
|
||||
*/
|
||||
|
||||
const int rc_devices_init = opencl_ctx_devices_init (opencl_ctx, user_options, COMPTIME);
|
||||
const int rc_devices_init = opencl_ctx_devices_init (opencl_ctx, user_options, comptime);
|
||||
|
||||
if (rc_devices_init == -1)
|
||||
{
|
||||
@ -2070,8 +2014,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
|
||||
logfile_destroy (logfile_ctx);
|
||||
|
||||
goodbye_screen (user_options, status_ctx);
|
||||
|
||||
user_options_destroy (user_options);
|
||||
|
||||
int rc_final = -1;
|
||||
@ -2083,7 +2025,5 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
|
||||
status_ctx_destroy (status_ctx);
|
||||
|
||||
hashcat_ctx_destroy (hashcat_ctx);
|
||||
|
||||
return rc_final;
|
||||
}
|
||||
|
158
src/main.c
158
src/main.c
@ -1,22 +1,136 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "hashcat.h"
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
hashcat_ctx_t *hashcat_ctx = malloc (sizeof (hashcat_ctx_t));
|
||||
|
||||
const int rc = hashcat (hashcat_ctx, argc, argv);
|
||||
|
||||
free (hashcat_ctx);
|
||||
|
||||
return rc;
|
||||
}
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "user_options.h"
|
||||
#include "hashcat.h"
|
||||
#include "terminal.h" // commandline only
|
||||
#include "usage.h" // commandline only
|
||||
|
||||
#define RUN_AS_COMMANDLINE true
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
// hashcat main context
|
||||
|
||||
hashcat_ctx_t *hashcat_ctx = (hashcat_ctx_t *) malloc (sizeof (hashcat_ctx_t));
|
||||
|
||||
hashcat_ctx_init (hashcat_ctx);
|
||||
|
||||
// initialize the user options with some defaults (you can override them)
|
||||
|
||||
user_options_t *user_options = hashcat_ctx->user_options;
|
||||
|
||||
user_options_init (user_options);
|
||||
|
||||
// initialize the session via getops for commandline use or
|
||||
// alternatively you can set the user_options directly
|
||||
|
||||
int rc_hashcat = 0;
|
||||
|
||||
bool run_as_commandline = RUN_AS_COMMANDLINE;
|
||||
|
||||
if (run_as_commandline == true)
|
||||
{
|
||||
// install and shared folder need to be set to recognize "make install" use
|
||||
|
||||
char *install_folder = NULL;
|
||||
char *shared_folder = NULL;
|
||||
|
||||
#if defined (INSTALL_FOLDER)
|
||||
install_folder = INSTALL_FOLDER;
|
||||
#endif
|
||||
|
||||
#if defined (SHARED_FOLDER)
|
||||
shared_folder = SHARED_FOLDER;
|
||||
#endif
|
||||
|
||||
// sets dos window size (windows only)
|
||||
|
||||
const int rc_console = setup_console ();
|
||||
|
||||
if (rc_console == -1) return -1;
|
||||
|
||||
// parse commandline parameters and check them
|
||||
|
||||
const int rc_options_getopt = user_options_getopt (user_options, argc, argv);
|
||||
|
||||
if (rc_options_getopt == -1) return -1;
|
||||
|
||||
const int rc_options_sanity = user_options_sanity (user_options);
|
||||
|
||||
if (rc_options_sanity == -1) return -1;
|
||||
|
||||
// some early exits
|
||||
|
||||
if (user_options->version == true)
|
||||
{
|
||||
printf ("%s", VERSION_TAG);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (user_options->usage == true)
|
||||
{
|
||||
usage_big_print (PROGNAME);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Inform user things getting started
|
||||
|
||||
time_t proc_start;
|
||||
|
||||
time (&proc_start);
|
||||
|
||||
welcome_screen (user_options, proc_start, VERSION_TAG);
|
||||
|
||||
// now run hashcat
|
||||
|
||||
rc_hashcat = hashcat (hashcat_ctx, install_folder, shared_folder, argc, argv, COMPTIME);
|
||||
|
||||
// Inform user we're done
|
||||
|
||||
time_t proc_stop;
|
||||
|
||||
time (&proc_stop);
|
||||
|
||||
goodbye_screen (user_options, proc_start, proc_stop);
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is a bit ugly, but it's the example you're looking for
|
||||
|
||||
char *hash = "8743b52063cd84097a65d1633f5c74f5";
|
||||
char *mask = "?l?l?l?l?l?l?l";
|
||||
|
||||
char *hc_argv[] = { hash, mask, NULL };
|
||||
|
||||
user_options->hc_argv = hc_argv;
|
||||
user_options->hc_argc = 2;
|
||||
user_options->quiet = true;
|
||||
user_options->potfile_disable = true;
|
||||
user_options->attack_mode = ATTACK_MODE_BF; // this is -a 3
|
||||
user_options->hash_mode = 0; // MD5
|
||||
user_options->workload_profile = 3;
|
||||
|
||||
// now run hashcat
|
||||
|
||||
rc_hashcat = hashcat (hashcat_ctx, NULL, NULL, 0, NULL, 0);
|
||||
}
|
||||
|
||||
// finished with hashcat, clean up
|
||||
|
||||
hashcat_ctx_destroy (hashcat_ctx);
|
||||
|
||||
free (hashcat_ctx);
|
||||
|
||||
return rc_hashcat;
|
||||
}
|
@ -357,6 +357,9 @@ int restore_ctx_init (restore_ctx_t *restore_ctx, user_options_t *user_options,
|
||||
|
||||
init_restore (restore_ctx);
|
||||
|
||||
if (argc == 0) return 0;
|
||||
if (argv == NULL) return 0;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => ";
|
||||
|
||||
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx, char *version_tag)
|
||||
void welcome_screen (const user_options_t *user_options, const time_t proc_start, const char *version_tag)
|
||||
{
|
||||
if (user_options->quiet == true) return;
|
||||
if (user_options->keyspace == true) return;
|
||||
@ -48,7 +48,7 @@ void welcome_screen (const user_options_t *user_options, const status_ctx_t *sta
|
||||
}
|
||||
else
|
||||
{
|
||||
log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&status_ctx->proc_start));
|
||||
log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&proc_start));
|
||||
}
|
||||
}
|
||||
else if (user_options->restore == true)
|
||||
@ -63,7 +63,7 @@ void welcome_screen (const user_options_t *user_options, const status_ctx_t *sta
|
||||
}
|
||||
}
|
||||
|
||||
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx)
|
||||
void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop)
|
||||
{
|
||||
if (user_options->quiet == true) return;
|
||||
if (user_options->keyspace == true) return;
|
||||
@ -71,8 +71,8 @@ void goodbye_screen (const user_options_t *user_options, const status_ctx_t *sta
|
||||
if (user_options->show == true) return;
|
||||
if (user_options->left == true) return;
|
||||
|
||||
log_info_nn ("Started: %s", ctime (&status_ctx->proc_start));
|
||||
log_info_nn ("Stopped: %s", ctime (&status_ctx->proc_stop));
|
||||
log_info_nn ("Started: %s", ctime (&proc_start));
|
||||
log_info_nn ("Stopped: %s", ctime (&proc_stop));
|
||||
}
|
||||
|
||||
int setup_console ()
|
||||
|
Loading…
Reference in New Issue
Block a user