From 2a0984b6e47b5f714ce4a360afeaadafdb634c36 Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Mon, 18 Nov 2024 15:33:34 +0100 Subject: [PATCH] static variables are initialized to '0' automatically as per C rules --- audio/audio_driver.c | 4 +- frontend/drivers/platform_win32.c | 2 +- gfx/display_servers/dispserv_android.c | 4 +- gfx/drivers/omap_gfx.c | 2 +- gfx/gfx_display.c | 2 +- gfx/gfx_thumbnail.c | 4 +- gfx/gfx_widgets.c | 2 +- gfx/video_crt_switch.c | 8 +- gfx/video_driver.c | 2 +- input/drivers/sdl_input.c | 8 +- input/input_driver.c | 2 +- intl/msg_hash_us.c | 2 +- libretro-common/streams/rzip_stream.c | 6 +- libretro-db/query.c | 10 +- menu/cbs/menu_cbs_ok.c | 2 +- network/wifi_driver.c | 490 +++++++++++------------ playlist.c | 2 +- record/record_driver.c | 2 +- retroarch.c | 8 +- runloop.c | 4 +- ui/drivers/ui_qt.cpp | 2 +- ui/ui_companion_driver.c | 518 ++++++++++++------------- verbosity.c | 2 +- 23 files changed, 544 insertions(+), 544 deletions(-) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 8c3ba0aac64..c2d00a6cfe9 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -172,7 +172,7 @@ audio_driver_t *audio_drivers[] = { NULL, }; -static audio_driver_state_t audio_driver_st = {0}; /* double alignment */ +static audio_driver_state_t audio_driver_st; /* double alignment */ /**************************************/ @@ -1872,7 +1872,7 @@ bool audio_compute_buffer_statistics(audio_statistics_t *stats) #ifdef HAVE_MENU void audio_driver_menu_sample(void) { - static int16_t samples_buf[1024] = {0}; + static int16_t samples_buf[1024]; settings_t *settings = config_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr(); uint32_t runloop_flags = runloop_get_flags(); diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index 26ed25c04fe..3a9c1e61702 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -85,7 +85,7 @@ static uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_POWERSHELL; VOID (WINAPI *DragAcceptFiles_func)(HWND, BOOL); /* TODO/FIXME - static global variables */ -static char win32_cpu_model_name[64] = {0}; +static char win32_cpu_model_name[64]; #ifdef HAVE_DYLIB /* We only load this library once, so we let it be * unloaded at application shutdown, since unloading diff --git a/gfx/display_servers/dispserv_android.c b/gfx/display_servers/dispserv_android.c index 47f008604ea..3e183e95420 100644 --- a/gfx/display_servers/dispserv_android.c +++ b/gfx/display_servers/dispserv_android.c @@ -43,10 +43,10 @@ static void android_display_server_set_screen_orientation(void *data, static void android_display_dpi_get_density(char *s, size_t len) { + static char string[PROP_VALUE_MAX]; + static char string2[PROP_VALUE_MAX]; static bool inited_once = false; static bool inited2_once = false; - static char string[PROP_VALUE_MAX] = {0}; - static char string2[PROP_VALUE_MAX] = {0}; if (!inited_once) { system_property_get("getprop", "ro.sf.lcd_density", string); diff --git a/gfx/drivers/omap_gfx.c b/gfx/drivers/omap_gfx.c index 517f4b410ea..607244d427d 100644 --- a/gfx/drivers/omap_gfx.c +++ b/gfx/drivers/omap_gfx.c @@ -85,7 +85,7 @@ typedef struct omapfb_data static const char *omapfb_get_fb_device(void) { - static char fbname[12] = {0}; + static char fbname[12]; settings_t *settings = config_get_ptr(); const int fbidx = settings->uints.video_monitor_index; diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index d69cb2da1c4..f6452818c7b 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -35,7 +35,7 @@ static uintptr_t gfx_white_texture; /* ptr alignment */ -static gfx_display_t dispgfx_st = {0}; +static gfx_display_t dispgfx_st; gfx_display_t *disp_get_ptr(void) { diff --git a/gfx/gfx_thumbnail.c b/gfx/gfx_thumbnail.c index 5996843b8c8..da91368f16b 100644 --- a/gfx/gfx_thumbnail.c +++ b/gfx/gfx_thumbnail.c @@ -46,7 +46,7 @@ typedef struct gfx_thumbnail_t *thumbnail; } gfx_thumbnail_tag_t; -static gfx_thumbnail_state_t gfx_thumb_st = {0}; /* uint64_t alignment */ +static gfx_thumbnail_state_t gfx_thumb_st; /* uint64_t alignment */ gfx_thumbnail_state_t *gfx_thumb_get_ptr(void) { @@ -289,10 +289,10 @@ void gfx_thumbnail_request( /* Handle on demand thumbnail downloads */ else if (network_on_demand_thumbnails) { + static char last_img_name[NAME_MAX_LENGTH]; enum playlist_thumbnail_name_flags curr_flag; const char *system = NULL; const char *img_name = NULL; - static char last_img_name[NAME_MAX_LENGTH] = {0}; settings_t *settings = config_get_ptr(); if (!playlist) goto end; diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index d7e79d50fa4..f4e918fa68a 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -65,7 +65,7 @@ static const char "menu_achievements.png" }; -static dispgfx_widget_t dispwidget_st = {0}; /* uint64_t alignment */ +static dispgfx_widget_t dispwidget_st; /* uint64_t alignment */ static void INLINE gfx_widgets_font_free(gfx_widget_font_data_t *font_data) { diff --git a/gfx/video_crt_switch.c b/gfx/video_crt_switch.c index b73f28af478..36260306d70 100644 --- a/gfx/video_crt_switch.c +++ b/gfx/video_crt_switch.c @@ -515,12 +515,12 @@ static void crt_rpi_switch(videocrt_switch_t *p_switch, { int w; char buffer[1024]; + static char output1[250]; + static char output2[250]; + static char set_hdmi[250]; + static char set_hdmi_timing[250]; VCHI_INSTANCE_T vchi_instance; VCHI_CONNECTION_T *vchi_connection = NULL; - static char output1[250] = {0}; - static char output2[250] = {0}; - static char set_hdmi[250] = {0}; - static char set_hdmi_timing[250] = {0}; int i = 0; int hfp = 0; int hsp = 0; diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 7fd30956d81..383223dba59 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -3229,10 +3229,10 @@ const char* video_driver_get_gpu_api_version_string(void) bool video_driver_init_internal(bool *video_is_threaded, bool verbosity_enabled) { video_info_t video; + static uint16_t dummy_pixels[32]; unsigned max_dim, scale, width, height; video_viewport_t *custom_vp = NULL; input_driver_t *tmp = NULL; - static uint16_t dummy_pixels[32] = {0}; runloop_state_t *runloop_st = runloop_state_get_ptr(); settings_t *settings = config_get_ptr(); input_driver_state_t *input_st = input_state_get_ptr(); diff --git a/input/drivers/sdl_input.c b/input/drivers/sdl_input.c index 169e92bffa7..996e9209a0d 100644 --- a/input/drivers/sdl_input.c +++ b/input/drivers/sdl_input.c @@ -63,7 +63,7 @@ enum sdl_webos_special_key sdl_webos_spkey_size, }; -static uint8_t sdl_webos_special_keymap[sdl_webos_spkey_size] = {0}; +static uint8_t sdl_webos_special_keymap[sdl_webos_spkey_size]; #endif static void *sdl_input_init(const char *joypad_driver) @@ -249,7 +249,7 @@ static int16_t sdl_input_state( if (idx == 0) { struct video_viewport vp; - bool screen = device == + bool screen = device == RARCH_DEVICE_POINTER_SCREEN; const int edge_detect = 32700; bool inside = false; @@ -275,7 +275,7 @@ static int16_t sdl_input_state( res_y = res_screen_y; } - inside = (res_x >= -edge_detect) + inside = (res_x >= -edge_detect) && (res_y >= -edge_detect) && (res_x <= edge_detect) && (res_y <= edge_detect); @@ -397,7 +397,7 @@ static void sdl_input_poll(void *data) switch ((int) event.key.keysym.scancode) { case SDL_WEBOS_SCANCODE_BACK: - /* Because webOS is sending DOWN/UP at the same time, + /* Because webOS is sending DOWN/UP at the same time, we save this flag for later */ sdl_webos_special_keymap[sdl_webos_spkey_back] |= event.type == SDL_KEYDOWN; code = RETROK_BACKSPACE; diff --git a/input/input_driver.c b/input/input_driver.c index c0581b35307..f186853c89c 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -396,7 +396,7 @@ hid_driver_t *hid_drivers[] = { }; #endif -static input_driver_state_t input_driver_st = {0}; /* double alignment */ +static input_driver_state_t input_driver_st; /* double alignment */ /**************************************/ diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index c38c8881b0c..8bbe22a5940 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -518,7 +518,7 @@ static const char *menu_hash_to_str_us_label_enum(enum msg_hash_enums msg) if ( msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END && msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) { - static char hotkey_lbl[128] = {0}; + static char hotkey_lbl[128]; unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; snprintf(hotkey_lbl, sizeof(hotkey_lbl), "input_hotkey_binds_%d", idx); return hotkey_lbl; diff --git a/libretro-common/streams/rzip_stream.c b/libretro-common/streams/rzip_stream.c index 6f56fa66c66..e0d88dd13d4 100644 --- a/libretro-common/streams/rzip_stream.c +++ b/libretro-common/streams/rzip_stream.c @@ -97,7 +97,7 @@ static bool rzipstream_read_file_header(rzipstream_t *stream) /* Check 'magic numbers' - first 8 bytes * of header */ if ( - (length < RZIP_HEADER_SIZE) || + (length < RZIP_HEADER_SIZE) || (header_bytes[0] != 35) || /* # */ (header_bytes[1] != 82) || /* R */ (header_bytes[2] != 90) || /* Z */ @@ -270,7 +270,7 @@ static bool rzipstream_init_stream( stream->in_buf_size = stream->chunk_size; stream->out_buf_size = stream->chunk_size * 2; /* > Account for minimum zlib overhead - * of 11 bytes... */ + * of 11 bytes... */ stream->out_buf_size = (stream->out_buf_size < (stream->in_buf_size + 11)) ? stream->out_buf_size + 11 : @@ -846,7 +846,7 @@ int rzipstream_putc(rzipstream_t *stream, int c) * in the event of an error */ int rzipstream_vprintf(rzipstream_t *stream, const char* format, va_list args) { - static char buffer[8 * 1024] = {0}; + static char buffer[8 * 1024]; int64_t num_chars = vsnprintf(buffer, sizeof(buffer), format, args); diff --git a/libretro-db/query.c b/libretro-db/query.c index e29be8e2da3..bf348b3bc0a 100644 --- a/libretro-db/query.c +++ b/libretro-db/query.c @@ -211,10 +211,10 @@ static struct rmsgpack_dom_value query_func_between( if (argc != 2) return res; - if ( argv[0].type != AT_VALUE + if ( argv[0].type != AT_VALUE || argv[1].type != AT_VALUE) return res; - if ( argv[0].a.value.type != RDT_INT + if ( argv[0].a.value.type != RDT_INT || argv[1].a.value.type != RDT_INT) return res; @@ -301,7 +301,7 @@ static void query_argument_free(struct argument *arg) } static struct buffer query_parse_integer( - char *s, size_t len, + char *s, size_t len, struct buffer buff, struct rmsgpack_dom_value *value, const char **error) @@ -495,7 +495,7 @@ static struct buffer query_parse_value( } else if ( query_peek(buff, "b", STRLEN_CONST("b")) - || query_peek(buff, "\"", STRLEN_CONST("\"")) + || query_peek(buff, "\"", STRLEN_CONST("\"")) || query_peek(buff, "'", STRLEN_CONST("'"))) buff = query_parse_string(s, len, buff, value, error); @@ -921,7 +921,7 @@ void *libretrodb_query_compile(libretrodb_t *db, { struct buffer buff; /* TODO/FIXME - static local variable */ - static char tmp_error_buff [MAX_ERROR_LEN] = {0}; + static char tmp_error_buff [MAX_ERROR_LEN]; struct query *q = (struct query*)malloc(sizeof(*q)); size_t error_buff_len = sizeof(tmp_error_buff); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index c9a9c9440a2..ca4a7545ea4 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -5212,7 +5212,7 @@ void cb_generic_download(retro_task_t *task, case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_SLANG: #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL) { - static char shaderdir[DIR_MAX_LENGTH] = {0}; + static char shaderdir[DIR_MAX_LENGTH]; const char *dirname = NULL; const char *dir_video_shader = settings->paths.directory_video_shader; diff --git a/network/wifi_driver.c b/network/wifi_driver.c index 70eed13eb11..02f557eedf1 100644 --- a/network/wifi_driver.c +++ b/network/wifi_driver.c @@ -1,245 +1,245 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2014 - Hans-Kristian Arntzen - * Copyright (C) 2011-2021 - Daniel De Matteis - * - * RetroArch 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 Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#include "../driver.h" -#include "../list_special.h" -#include "../retroarch.h" -#include "../runloop.h" -#include "../verbosity.h" - -#include "wifi_driver.h" - -wifi_driver_t wifi_null = { - NULL, /* init */ - NULL, /* free */ - NULL, /* start */ - NULL, /* stop */ - NULL, /* enable */ - NULL, /* connection_info */ - NULL, /* scan */ - NULL, /* get_ssids */ - NULL, /* ssid_is_online */ - NULL, /* connect_ssid */ - NULL, /* disconnect_ssid */ - NULL, /* tether_start_stop */ - "null", -}; - -const wifi_driver_t *wifi_drivers[] = { -#ifdef HAVE_LAKKA - &wifi_connmanctl, -#endif -#ifdef HAVE_WIFI - &wifi_nmcli, -#endif - &wifi_null, - NULL, -}; - -static wifi_driver_state_t wifi_driver_st = {0}; /* double alignment */ - -wifi_driver_state_t *wifi_state_get_ptr(void) -{ - return &wifi_driver_st; -} - -/** - * config_get_wifi_driver_options: - * - * Get an enumerated list of all wifi driver names, - * separated by '|'. - * - * Returns: string listing of all wifi driver names, - * separated by '|'. - **/ -const char* config_get_wifi_driver_options(void) -{ - return char_list_new_special(STRING_LIST_WIFI_DRIVERS, NULL); -} - -void driver_wifi_scan(void) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - wifi_st->drv->scan(wifi_st->data); -} - -bool driver_wifi_enable(bool enabled) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->enable(wifi_st->data, enabled); - return false; -} - -bool driver_wifi_connection_info(wifi_network_info_t *netinfo) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->connection_info(wifi_st->data, netinfo); - return false; -} - -wifi_network_scan_t* driver_wifi_get_ssids(void) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->get_ssids(wifi_st->data); - return NULL; -} - -bool driver_wifi_ssid_is_online(unsigned i) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->ssid_is_online(wifi_st->data, i); - return false; -} - -bool driver_wifi_connect_ssid(const wifi_network_info_t* net) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->connect_ssid(wifi_st->data, net); - return false; -} - -bool driver_wifi_disconnect_ssid(const wifi_network_info_t* net) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - return wifi_st->drv->disconnect_ssid(wifi_st->data, net); - return false; -} - -void driver_wifi_tether_start_stop(bool start, char* configfile) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - if (wifi_st && wifi_st->drv) - wifi_st->drv->tether_start_stop(wifi_st->data, start, configfile); -} - -bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data) -{ - wifi_driver_state_t *wifi_st = &wifi_driver_st; - settings_t *settings = config_get_ptr(); - - switch (state) - { - case RARCH_WIFI_CTL_DESTROY: - wifi_st->active = false; - wifi_st->drv = NULL; - wifi_st->data = NULL; - break; - case RARCH_WIFI_CTL_SET_ACTIVE: - wifi_st->active = true; - break; - case RARCH_WIFI_CTL_FIND_DRIVER: - { - const char *prefix = "wifi driver"; - int i = (int)driver_find_index( - "wifi_driver", - settings->arrays.wifi_driver); - - if (i >= 0) - wifi_st->drv = (const wifi_driver_t*)wifi_drivers[i]; - else - { - if (verbosity_is_enabled()) - { - unsigned d; - RARCH_ERR("Couldn't find any %s named \"%s\"\n", prefix, - settings->arrays.wifi_driver); - RARCH_LOG_OUTPUT("Available %ss are:\n", prefix); - for (d = 0; wifi_drivers[d]; d++) - RARCH_LOG_OUTPUT("\t%s\n", wifi_drivers[d]->ident); - - RARCH_WARN("Going to default to first %s...\n", prefix); - } - - wifi_st->drv = (const wifi_driver_t*)wifi_drivers[0]; - - if (!wifi_st->drv) - retroarch_fail(1, "find_wifi_driver()"); - } - } - break; - case RARCH_WIFI_CTL_UNSET_ACTIVE: - wifi_st->active = false; - break; - case RARCH_WIFI_CTL_IS_ACTIVE: - return wifi_st->active; - case RARCH_WIFI_CTL_DEINIT: - if (wifi_st->data && wifi_st->drv) - { - if (wifi_st->drv->free) - wifi_st->drv->free(wifi_st->data); - } - - wifi_st->data = NULL; - break; - case RARCH_WIFI_CTL_STOP: - if ( wifi_st->drv - && wifi_st->drv->stop - && wifi_st->data) - wifi_st->drv->stop(wifi_st->data); - break; - case RARCH_WIFI_CTL_START: - if ( wifi_st->drv - && wifi_st->data - && wifi_st->drv->start) - { - bool wifi_allow = settings->bools.wifi_allow; - if (wifi_allow) - return wifi_st->drv->start(wifi_st->data); - } - return false; - case RARCH_WIFI_CTL_INIT: - /* Resource leaks will follow if wifi is initialized twice. */ - if (wifi_st->data) - return false; - - wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL); - - if (wifi_st->drv && wifi_st->drv->init) - { - wifi_st->data = wifi_st->drv->init(); - - if (wifi_st->data) - { - wifi_st->drv->enable(wifi_st->data, - settings->bools.wifi_enabled); - } - else - { - RARCH_ERR("Failed to initialize wifi driver. Will continue without wifi.\n"); - wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_ACTIVE, NULL); - } - } - - break; - default: - break; - } - - return false; -} +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2021 - Daniel De Matteis + * + * RetroArch 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 Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include "../driver.h" +#include "../list_special.h" +#include "../retroarch.h" +#include "../runloop.h" +#include "../verbosity.h" + +#include "wifi_driver.h" + +wifi_driver_t wifi_null = { + NULL, /* init */ + NULL, /* free */ + NULL, /* start */ + NULL, /* stop */ + NULL, /* enable */ + NULL, /* connection_info */ + NULL, /* scan */ + NULL, /* get_ssids */ + NULL, /* ssid_is_online */ + NULL, /* connect_ssid */ + NULL, /* disconnect_ssid */ + NULL, /* tether_start_stop */ + "null", +}; + +const wifi_driver_t *wifi_drivers[] = { +#ifdef HAVE_LAKKA + &wifi_connmanctl, +#endif +#ifdef HAVE_WIFI + &wifi_nmcli, +#endif + &wifi_null, + NULL, +}; + +static wifi_driver_state_t wifi_driver_st; /* double alignment */ + +wifi_driver_state_t *wifi_state_get_ptr(void) +{ + return &wifi_driver_st; +} + +/** + * config_get_wifi_driver_options: + * + * Get an enumerated list of all wifi driver names, + * separated by '|'. + * + * Returns: string listing of all wifi driver names, + * separated by '|'. + **/ +const char* config_get_wifi_driver_options(void) +{ + return char_list_new_special(STRING_LIST_WIFI_DRIVERS, NULL); +} + +void driver_wifi_scan(void) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + wifi_st->drv->scan(wifi_st->data); +} + +bool driver_wifi_enable(bool enabled) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->enable(wifi_st->data, enabled); + return false; +} + +bool driver_wifi_connection_info(wifi_network_info_t *netinfo) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->connection_info(wifi_st->data, netinfo); + return false; +} + +wifi_network_scan_t* driver_wifi_get_ssids(void) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->get_ssids(wifi_st->data); + return NULL; +} + +bool driver_wifi_ssid_is_online(unsigned i) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->ssid_is_online(wifi_st->data, i); + return false; +} + +bool driver_wifi_connect_ssid(const wifi_network_info_t* net) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->connect_ssid(wifi_st->data, net); + return false; +} + +bool driver_wifi_disconnect_ssid(const wifi_network_info_t* net) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + return wifi_st->drv->disconnect_ssid(wifi_st->data, net); + return false; +} + +void driver_wifi_tether_start_stop(bool start, char* configfile) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + if (wifi_st && wifi_st->drv) + wifi_st->drv->tether_start_stop(wifi_st->data, start, configfile); +} + +bool wifi_driver_ctl(enum rarch_wifi_ctl_state state, void *data) +{ + wifi_driver_state_t *wifi_st = &wifi_driver_st; + settings_t *settings = config_get_ptr(); + + switch (state) + { + case RARCH_WIFI_CTL_DESTROY: + wifi_st->active = false; + wifi_st->drv = NULL; + wifi_st->data = NULL; + break; + case RARCH_WIFI_CTL_SET_ACTIVE: + wifi_st->active = true; + break; + case RARCH_WIFI_CTL_FIND_DRIVER: + { + const char *prefix = "wifi driver"; + int i = (int)driver_find_index( + "wifi_driver", + settings->arrays.wifi_driver); + + if (i >= 0) + wifi_st->drv = (const wifi_driver_t*)wifi_drivers[i]; + else + { + if (verbosity_is_enabled()) + { + unsigned d; + RARCH_ERR("Couldn't find any %s named \"%s\"\n", prefix, + settings->arrays.wifi_driver); + RARCH_LOG_OUTPUT("Available %ss are:\n", prefix); + for (d = 0; wifi_drivers[d]; d++) + RARCH_LOG_OUTPUT("\t%s\n", wifi_drivers[d]->ident); + + RARCH_WARN("Going to default to first %s...\n", prefix); + } + + wifi_st->drv = (const wifi_driver_t*)wifi_drivers[0]; + + if (!wifi_st->drv) + retroarch_fail(1, "find_wifi_driver()"); + } + } + break; + case RARCH_WIFI_CTL_UNSET_ACTIVE: + wifi_st->active = false; + break; + case RARCH_WIFI_CTL_IS_ACTIVE: + return wifi_st->active; + case RARCH_WIFI_CTL_DEINIT: + if (wifi_st->data && wifi_st->drv) + { + if (wifi_st->drv->free) + wifi_st->drv->free(wifi_st->data); + } + + wifi_st->data = NULL; + break; + case RARCH_WIFI_CTL_STOP: + if ( wifi_st->drv + && wifi_st->drv->stop + && wifi_st->data) + wifi_st->drv->stop(wifi_st->data); + break; + case RARCH_WIFI_CTL_START: + if ( wifi_st->drv + && wifi_st->data + && wifi_st->drv->start) + { + bool wifi_allow = settings->bools.wifi_allow; + if (wifi_allow) + return wifi_st->drv->start(wifi_st->data); + } + return false; + case RARCH_WIFI_CTL_INIT: + /* Resource leaks will follow if wifi is initialized twice. */ + if (wifi_st->data) + return false; + + wifi_driver_ctl(RARCH_WIFI_CTL_FIND_DRIVER, NULL); + + if (wifi_st->drv && wifi_st->drv->init) + { + wifi_st->data = wifi_st->drv->init(); + + if (wifi_st->data) + { + wifi_st->drv->enable(wifi_st->data, + settings->bools.wifi_enabled); + } + else + { + RARCH_ERR("Failed to initialize wifi driver. Will continue without wifi.\n"); + wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_ACTIVE, NULL); + } + } + + break; + default: + break; + } + + return false; +} diff --git a/playlist.c b/playlist.c index 592b065d131..749e8fdddbf 100644 --- a/playlist.c +++ b/playlist.c @@ -1334,7 +1334,7 @@ bool playlist_push(playlist_t *playlist, if (string_is_empty(core_name)) { - static char base_path[NAME_MAX_LENGTH] = {0}; + static char base_path[NAME_MAX_LENGTH]; fill_pathname_base(base_path, real_core_path, sizeof(base_path)); path_remove_extension(base_path); diff --git a/record/record_driver.c b/record/record_driver.c index 63ccd8d0e1a..a5cf9ae9593 100644 --- a/record/record_driver.c +++ b/record/record_driver.c @@ -34,7 +34,7 @@ #include "drivers/record_ffmpeg.h" #include "drivers/record_wav.h" -static recording_state_t recording_state = {0}; +static recording_state_t recording_state; static const record_driver_t record_null = { NULL, /* new */ diff --git a/retroarch.c b/retroarch.c index f5bd2da2b5b..91bd7d58dc1 100644 --- a/retroarch.c +++ b/retroarch.c @@ -330,14 +330,14 @@ struct rarch_state void libnx_apply_overclock(void); #endif -static struct rarch_state rarch_st = {0}; +static struct rarch_state rarch_st; #ifdef HAVE_THREAD_STORAGE static const void *MAGIC_POINTER = (void*)(uintptr_t)0x0DEFACED; #endif -static access_state_t access_state_st = {0}; -static struct global global_driver_st = {0}; /* retro_time_t alignment */ +static access_state_t access_state_st; +static struct global global_driver_st; /* retro_time_t alignment */ static void retro_frame_null(const void *data, unsigned width, unsigned height, size_t pitch) { } @@ -361,7 +361,7 @@ static const location_driver_t *location_drivers[] = { NULL, }; -static location_driver_state_t location_driver_st = {0}; +static location_driver_state_t location_driver_st; location_driver_state_t *location_state_get_ptr(void) { diff --git a/runloop.c b/runloop.c index 0e4bf6b9638..4b77341cb7a 100644 --- a/runloop.c +++ b/runloop.c @@ -322,7 +322,7 @@ #define PERF_LOG_FMT "[PERF]: Avg (%s): %llu ticks, %llu runs.\n" #endif -static runloop_state_t runloop_state = {0}; +static runloop_state_t runloop_state; /* GLOBAL POINTER GETTERS */ runloop_state_t *runloop_state_get_ptr(void) @@ -6740,7 +6740,7 @@ static enum runloop_state_enum runloop_check_state( if (settings->bools.video_shader_watch_files) { - static rarch_timer_t timer = {0}; + static rarch_timer_t timer; static bool need_to_apply = false; if (video_shader_check_for_changes()) diff --git a/ui/drivers/ui_qt.cpp b/ui/drivers/ui_qt.cpp index ca5b3363b78..128c8dd39c8 100644 --- a/ui/drivers/ui_qt.cpp +++ b/ui/drivers/ui_qt.cpp @@ -990,7 +990,7 @@ static unsigned char invader_png[] = { }; static unsigned int invader_png_len = 4008; -static ui_window_qt_t ui_window = {0}; +static ui_window_qt_t ui_window; static const QPixmap getInvader(void) { diff --git a/ui/ui_companion_driver.c b/ui/ui_companion_driver.c index 649891188b8..da02c1119f4 100644 --- a/ui/ui_companion_driver.c +++ b/ui/ui_companion_driver.c @@ -1,259 +1,259 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2014 - Hans-Kristian Arntzen - * Copyright (C) 2011-2021 - Daniel De Matteis - * - * RetroArch 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 Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#include "../list_special.h" -#include "../retroarch.h" -#include "../runloop.h" -#include "../verbosity.h" - -#include "ui_companion_driver.h" - -static ui_companion_driver_t ui_companion_null = { - NULL, /* init */ - NULL, /* deinit */ - NULL, /* toggle */ - NULL, /* event_command */ - NULL, /* notify_refresh */ - NULL, /* msg_queue_push */ - NULL, /* render_messagebox */ - NULL, /* get_main_window */ - NULL, /* log_msg */ - NULL, /* is_active */ - NULL, /* get_app_icons */ - NULL, /* set_app_icon */ - NULL, /* get_app_icon_texture */ - NULL, /* browser_window */ - NULL, /* msg_window */ - NULL, /* window */ - NULL, /* application */ - "null", /* ident */ -}; - -static const ui_companion_driver_t *ui_companion_drivers[] = { -#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) - &ui_companion_win32, -#endif -#if defined(OSX) - &ui_companion_cocoa, -#endif -#if defined(IOS) - &ui_companion_cocoatouch, -#endif - &ui_companion_null, - NULL -}; - - -static uico_driver_state_t uico_driver_st = {0}; /* double alignment */ - -uico_driver_state_t *uico_state_get_ptr(void) -{ - return &uico_driver_st; -} - -uint8_t ui_companion_get_flags(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - if (!uico_st) - return 0; - return uico_st->flags; -} - -void ui_companion_event_command(enum event_command action) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (ui && ui->event_command) - ui->event_command(uico_st->data, action); -#ifdef HAVE_QT - if (ui_companion_qt.toggle && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) - ui_companion_qt.event_command(uico_st->qt_data, action); -#endif -} - -void ui_companion_driver_deinit(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - - if (!ui) - return; - if (ui->deinit) - ui->deinit(uico_st->data); - -#ifdef HAVE_QT - if (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED) - { - ui_companion_qt.deinit(uico_st->qt_data); - uico_st->qt_data = NULL; - } -#endif - uico_st->data = NULL; -} - -void ui_companion_driver_toggle( - bool desktop_menu_enable, - bool ui_companion_toggle, - bool force) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - if (uico_st && uico_st->drv && uico_st->drv->toggle) - uico_st->drv->toggle(uico_st->data, false); - -#ifdef HAVE_QT - if (desktop_menu_enable) - { - if ((ui_companion_toggle || force) && (!(uico_st->flags & UICO_ST_FLAG_QT_IS_INITED))) - { - uico_st->qt_data = ui_companion_qt.init(); - uico_st->flags |= UICO_ST_FLAG_QT_IS_INITED; - } - - if (ui_companion_qt.toggle && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) - ui_companion_qt.toggle(uico_st->qt_data, force); - } -#endif -} - -void ui_companion_driver_init_first(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - settings_t *settings = config_get_ptr(); -#ifdef HAVE_QT - bool desktop_menu_enable = settings->bools.desktop_menu_enable; - bool ui_companion_toggle = settings->bools.ui_companion_toggle; - - if (desktop_menu_enable && ui_companion_toggle) - { - uico_st->qt_data = ui_companion_qt.init(); - uico_st->flags |= UICO_ST_FLAG_QT_IS_INITED; - } -#else - bool desktop_menu_enable = false; - bool ui_companion_toggle = false; -#endif - unsigned ui_companion_start_on_boot = - settings->bools.ui_companion_start_on_boot; - uico_st->drv = (ui_companion_driver_t*)ui_companion_drivers[0]; - - if (!uico_st->drv) - return; - if (!ui_companion_start_on_boot) - return; - if (uico_st->drv->init) - uico_st->data = uico_st->drv->init(); - - ui_companion_driver_toggle(desktop_menu_enable, - ui_companion_toggle, false); -} - -void ui_companion_driver_notify_refresh(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (!ui) - return; - if (ui->notify_refresh) - ui->notify_refresh(uico_st->data); - -#ifdef HAVE_QT - if (config_get_ptr()->bools.desktop_menu_enable) - if (ui_companion_qt.notify_refresh && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) - ui_companion_qt.notify_refresh(uico_st->qt_data); -#endif -} - -const ui_msg_window_t *ui_companion_driver_get_msg_window_ptr(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (ui) - return ui->msg_window; - return NULL; -} - -const ui_window_t *ui_companion_driver_get_window_ptr(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (ui) - return ui->window; - return NULL; -} - -const ui_browser_window_t *ui_companion_driver_get_browser_window_ptr(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (ui) - return ui->browser_window; - return NULL; -} - -void ui_companion_driver_msg_queue_push( - const char *msg, unsigned priority, - unsigned duration, bool flush) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - - if (ui && ui->msg_queue_push) - ui->msg_queue_push(uico_st->data, msg, priority, duration, flush); - -#ifdef HAVE_QT - if (config_get_ptr()->bools.desktop_menu_enable) - if (ui_companion_qt.msg_queue_push && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) - ui_companion_qt.msg_queue_push( - uico_st->qt_data, - msg, priority, duration, flush); -#endif -} - -void *ui_companion_driver_get_main_window(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (!ui || !ui->get_main_window) - return NULL; - return ui->get_main_window(uico_st->data); -} - -const char *ui_companion_driver_get_ident(void) -{ - uico_driver_state_t *uico_st = &uico_driver_st; - const ui_companion_driver_t *ui = uico_st->drv; - if (ui) - return ui->ident; - return "null"; -} - -void ui_companion_driver_log_msg(const char *msg) -{ -#ifdef HAVE_QT - uico_driver_state_t *uico_st= &uico_driver_st; - bool window_is_active = uico_st->qt_data && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED) - && ui_companion_qt.is_active(uico_st->qt_data); - if (config_get_ptr()->bools.desktop_menu_enable) - if (window_is_active) - ui_companion_qt.log_msg(uico_st->qt_data, msg); -#endif -} +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2021 - Daniel De Matteis + * + * RetroArch 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 Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include "../list_special.h" +#include "../retroarch.h" +#include "../runloop.h" +#include "../verbosity.h" + +#include "ui_companion_driver.h" + +static ui_companion_driver_t ui_companion_null = { + NULL, /* init */ + NULL, /* deinit */ + NULL, /* toggle */ + NULL, /* event_command */ + NULL, /* notify_refresh */ + NULL, /* msg_queue_push */ + NULL, /* render_messagebox */ + NULL, /* get_main_window */ + NULL, /* log_msg */ + NULL, /* is_active */ + NULL, /* get_app_icons */ + NULL, /* set_app_icon */ + NULL, /* get_app_icon_texture */ + NULL, /* browser_window */ + NULL, /* msg_window */ + NULL, /* window */ + NULL, /* application */ + "null", /* ident */ +}; + +static const ui_companion_driver_t *ui_companion_drivers[] = { +#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) + &ui_companion_win32, +#endif +#if defined(OSX) + &ui_companion_cocoa, +#endif +#if defined(IOS) + &ui_companion_cocoatouch, +#endif + &ui_companion_null, + NULL +}; + + +static uico_driver_state_t uico_driver_st; /* double alignment */ + +uico_driver_state_t *uico_state_get_ptr(void) +{ + return &uico_driver_st; +} + +uint8_t ui_companion_get_flags(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + if (!uico_st) + return 0; + return uico_st->flags; +} + +void ui_companion_event_command(enum event_command action) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (ui && ui->event_command) + ui->event_command(uico_st->data, action); +#ifdef HAVE_QT + if (ui_companion_qt.toggle && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) + ui_companion_qt.event_command(uico_st->qt_data, action); +#endif +} + +void ui_companion_driver_deinit(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + + if (!ui) + return; + if (ui->deinit) + ui->deinit(uico_st->data); + +#ifdef HAVE_QT + if (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED) + { + ui_companion_qt.deinit(uico_st->qt_data); + uico_st->qt_data = NULL; + } +#endif + uico_st->data = NULL; +} + +void ui_companion_driver_toggle( + bool desktop_menu_enable, + bool ui_companion_toggle, + bool force) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + if (uico_st && uico_st->drv && uico_st->drv->toggle) + uico_st->drv->toggle(uico_st->data, false); + +#ifdef HAVE_QT + if (desktop_menu_enable) + { + if ((ui_companion_toggle || force) && (!(uico_st->flags & UICO_ST_FLAG_QT_IS_INITED))) + { + uico_st->qt_data = ui_companion_qt.init(); + uico_st->flags |= UICO_ST_FLAG_QT_IS_INITED; + } + + if (ui_companion_qt.toggle && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) + ui_companion_qt.toggle(uico_st->qt_data, force); + } +#endif +} + +void ui_companion_driver_init_first(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + settings_t *settings = config_get_ptr(); +#ifdef HAVE_QT + bool desktop_menu_enable = settings->bools.desktop_menu_enable; + bool ui_companion_toggle = settings->bools.ui_companion_toggle; + + if (desktop_menu_enable && ui_companion_toggle) + { + uico_st->qt_data = ui_companion_qt.init(); + uico_st->flags |= UICO_ST_FLAG_QT_IS_INITED; + } +#else + bool desktop_menu_enable = false; + bool ui_companion_toggle = false; +#endif + unsigned ui_companion_start_on_boot = + settings->bools.ui_companion_start_on_boot; + uico_st->drv = (ui_companion_driver_t*)ui_companion_drivers[0]; + + if (!uico_st->drv) + return; + if (!ui_companion_start_on_boot) + return; + if (uico_st->drv->init) + uico_st->data = uico_st->drv->init(); + + ui_companion_driver_toggle(desktop_menu_enable, + ui_companion_toggle, false); +} + +void ui_companion_driver_notify_refresh(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (!ui) + return; + if (ui->notify_refresh) + ui->notify_refresh(uico_st->data); + +#ifdef HAVE_QT + if (config_get_ptr()->bools.desktop_menu_enable) + if (ui_companion_qt.notify_refresh && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) + ui_companion_qt.notify_refresh(uico_st->qt_data); +#endif +} + +const ui_msg_window_t *ui_companion_driver_get_msg_window_ptr(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (ui) + return ui->msg_window; + return NULL; +} + +const ui_window_t *ui_companion_driver_get_window_ptr(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (ui) + return ui->window; + return NULL; +} + +const ui_browser_window_t *ui_companion_driver_get_browser_window_ptr(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (ui) + return ui->browser_window; + return NULL; +} + +void ui_companion_driver_msg_queue_push( + const char *msg, unsigned priority, + unsigned duration, bool flush) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + + if (ui && ui->msg_queue_push) + ui->msg_queue_push(uico_st->data, msg, priority, duration, flush); + +#ifdef HAVE_QT + if (config_get_ptr()->bools.desktop_menu_enable) + if (ui_companion_qt.msg_queue_push && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED)) + ui_companion_qt.msg_queue_push( + uico_st->qt_data, + msg, priority, duration, flush); +#endif +} + +void *ui_companion_driver_get_main_window(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (!ui || !ui->get_main_window) + return NULL; + return ui->get_main_window(uico_st->data); +} + +const char *ui_companion_driver_get_ident(void) +{ + uico_driver_state_t *uico_st = &uico_driver_st; + const ui_companion_driver_t *ui = uico_st->drv; + if (ui) + return ui->ident; + return "null"; +} + +void ui_companion_driver_log_msg(const char *msg) +{ +#ifdef HAVE_QT + uico_driver_state_t *uico_st= &uico_driver_st; + bool window_is_active = uico_st->qt_data && (uico_st->flags & UICO_ST_FLAG_QT_IS_INITED) + && ui_companion_qt.is_active(uico_st->qt_data); + if (config_get_ptr()->bools.desktop_menu_enable) + if (window_is_active) + ui_companion_qt.log_msg(uico_st->qt_data, msg); +#endif +} diff --git a/verbosity.c b/verbosity.c index f3ce94a5e50..cedad2f0e58 100644 --- a/verbosity.c +++ b/verbosity.c @@ -457,7 +457,7 @@ void rarch_log_file_init( char log_file_path[PATH_MAX_LENGTH]; verbosity_state_t *g_verbosity = &main_verbosity_st; static bool log_file_created = false; - static char timestamped_log_file_name[64] = {0}; + static char timestamped_log_file_name[64]; bool logging_to_file = g_verbosity->initialized;