From 289f3fe96a3aafa0d59fdb093e5a69a2b865fc0a Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 11 Jul 2016 06:32:42 +0200 Subject: [PATCH] Mitigation of resource leaks due to time structures. --- src/rtc.c | 7 ++++--- src/video.c | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/rtc.c b/src/rtc.c index 203b4eaa4..80a66843d 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -185,18 +185,19 @@ static void time_internal(struct tm **time_var) (*time_var)->tm_year = internal_clock.year - 1900; } +time_t cur_time; +struct tm* cur_time_tm; + /* Periodic RTC update function See also: nvr_onesec() in nvr.c */ void time_get(char *nvrram) { - time_t cur_time; - struct tm* cur_time_tm; int dow, mon, year; if (enable_sync) { - cur_time = time(NULL); + time(&cur_time); /* Mingw doesn't support localtime_r */ #if __MINGW32__ diff --git a/src/video.c b/src/video.c index ac11f0e1f..d66c6f475 100644 --- a/src/video.c +++ b/src/video.c @@ -458,36 +458,40 @@ void take_screenshot() { } #else +time_t now; +struct tm *info; +char screenshot_fn[1024]; + void take_screenshot() { - char fn[1024]; - time_t now = time(0); if ((vid_api < 0) || (vid_api > 1)) return; + time(&now); + info = localtime(&now); memset(fn, 0, 1024); pclog("Video API is: %i\n", vid_api); if (vid_api == 1) { - strftime(fn, 1024, "screenshots/%Y%m%d_%H%M%S.png", localtime(&now)); + strftime(screenshot_fn, 1024, "screenshots\\%Y%m%d_%H%M%S.png", info); if (video_fullscreen) { - d3d_fs_take_screenshot(fn); + d3d_fs_take_screenshot(screenshot_fn); } else { pclog("Direct 3D...\n"); - d3d_take_screenshot(fn); + d3d_take_screenshot(screenshot_fn); } } else if (vid_api == 0) { - strftime(fn, 1024, "screenshots/%Y%m%d_%H%M%S.bmp", localtime(&now)); + strftime(fn, 1024, "screenshots\\%Y%m%d_%H%M%S.bmp", info); if (video_fullscreen) { - ddraw_fs_take_screenshot(fn); + ddraw_fs_take_screenshot(screenshot_fn); } else { - ddraw_take_screenshot(fn); + ddraw_take_screenshot(screenshot_fn); } } }