diff options
author | jdgleaver | 2021-09-17 10:37:49 +0100 |
---|---|---|
committer | jdgleaver | 2021-09-17 10:37:49 +0100 |
commit | 7d871ab87d45e535d1512a5834b627cbbce2e66c (patch) | |
tree | 8b6932a6eb0f786ea8e922701a0182396a80a7cc /libretro-common/time | |
parent | f53deef14f98c659fe9bbd7684656ee88977acbd (diff) | |
download | snes9x2005-7d871ab87d45e535d1512a5834b627cbbce2e66c.tar.gz snes9x2005-7d871ab87d45e535d1512a5834b627cbbce2e66c.tar.bz2 snes9x2005-7d871ab87d45e535d1512a5834b627cbbce2e66c.zip |
Replace direct direct file access with VFS routines
Diffstat (limited to 'libretro-common/time')
-rw-r--r-- | libretro-common/time/rtime.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/libretro-common/time/rtime.c b/libretro-common/time/rtime.c new file mode 100644 index 0000000..d66c228 --- /dev/null +++ b/libretro-common/time/rtime.c @@ -0,0 +1,81 @@ +/* Copyright (C) 2010-2020 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (rtime.c). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_THREADS +#include <rthreads/rthreads.h> +#include <retro_assert.h> +#include <stdlib.h> +#endif + +#include <string.h> +#include <time/rtime.h> + +#ifdef HAVE_THREADS +/* TODO/FIXME - global */ +slock_t *rtime_localtime_lock = NULL; +#endif + +/* Must be called before using rtime_localtime() */ +void rtime_init(void) +{ + rtime_deinit(); +#ifdef HAVE_THREADS + if (!rtime_localtime_lock) + rtime_localtime_lock = slock_new(); + + retro_assert(rtime_localtime_lock); +#endif +} + +/* Must be called upon program termination */ +void rtime_deinit(void) +{ +#ifdef HAVE_THREADS + if (rtime_localtime_lock) + { + slock_free(rtime_localtime_lock); + rtime_localtime_lock = NULL; + } +#endif +} + +/* Thread-safe wrapper for localtime() */ +struct tm *rtime_localtime(const time_t *timep, struct tm *result) +{ + struct tm *time_info = NULL; + + /* Lock mutex */ +#ifdef HAVE_THREADS + slock_lock(rtime_localtime_lock); +#endif + + time_info = localtime(timep); + if (time_info) + memcpy(result, time_info, sizeof(struct tm)); + + /* Unlock mutex */ +#ifdef HAVE_THREADS + slock_unlock(rtime_localtime_lock); +#endif + + return result; +} |