123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /* RetroArch - A frontend for libretro.
- * Copyright (C) 2011-2017 - Daniel De Matteis
- * Copyright (C) 2014-2017 - Jean-André Santoni
- * Copyright (C) 2016-2019 - Brad Parker
- * Copyright (C) 2019-2020 - James Leaver
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
- #ifndef __CORE_BACKUP_H
- #define __CORE_BACKUP_H
- #include <retro_common_api.h>
- #include <libretro.h>
- #include <boolean.h>
- RETRO_BEGIN_DECLS
- /* Defines the various types of supported core backup
- * file. Allows us to handle manual core installs
- * (via downloaded/compiled dynamic libraries dropped
- * in the 'downloads' folder) using the same task
- * interface as 'managed'/archived backups */
- enum core_backup_type
- {
- CORE_BACKUP_TYPE_INVALID = 0,
- CORE_BACKUP_TYPE_ARCHIVE,
- CORE_BACKUP_TYPE_LIB
- };
- /* Used to distinguish manual and automatic
- * core backups */
- enum core_backup_mode
- {
- CORE_BACKUP_MODE_MANUAL = 0,
- CORE_BACKUP_MODE_AUTO
- };
- /* Note: These must be kept synchronised with
- * 'enum menu_timedate_date_separator_type' in
- * 'menu_defines.h' */
- enum core_backup_date_separator_type
- {
- CORE_BACKUP_DATE_SEPARATOR_HYPHEN = 0,
- CORE_BACKUP_DATE_SEPARATOR_SLASH,
- CORE_BACKUP_DATE_SEPARATOR_PERIOD,
- CORE_BACKUP_DATE_SEPARATOR_LAST
- };
- /* Holds all timestamp info for a core backup file */
- typedef struct
- {
- unsigned year;
- unsigned month;
- unsigned day;
- unsigned hour;
- unsigned minute;
- unsigned second;
- } core_backup_list_date_t;
- /* Holds all info related to a core backup file */
- typedef struct
- {
- char *backup_path;
- core_backup_list_date_t date; /* unsigned alignment */
- uint32_t crc;
- enum core_backup_mode backup_mode;
- } core_backup_list_entry_t;
- /* Prevent direct access to core_backup_list_t
- * members */
- typedef struct core_backup_list core_backup_list_t;
- /*********************/
- /* Utility Functions */
- /*********************/
- /* Generates a timestamped core backup file path from
- * the specified core path. Returns true if successful */
- bool core_backup_get_backup_path(
- const char *core_path, uint32_t crc, enum core_backup_mode backup_mode,
- const char *dir_core_assets, char *backup_path, size_t len);
- /* Returns detected type of specified core backup file */
- enum core_backup_type core_backup_get_backup_type(const char *backup_path);
- /* Fetches crc value of specified core backup file.
- * Returns true if successful */
- bool core_backup_get_backup_crc(char *backup_path, uint32_t *crc);
- /* Fetches core path associated with specified core
- * backup file. Returns detected type of backup
- * file - CORE_BACKUP_TYPE_INVALID indicates that
- * backup file cannot be restored/installed, or
- * arguments are otherwise invalid */
- enum core_backup_type core_backup_get_core_path(
- const char *backup_path, const char *dir_libretro,
- char *core_path, size_t len);
- /*************************/
- /* Backup List Functions */
- /*************************/
- /**************************************/
- /* Initialisation / De-Initialisation */
- /**************************************/
- /* Creates a new core backup list containing entries
- * for all existing backup files.
- * Returns a handle to a new core_backup_list_t object
- * on success, otherwise returns NULL. */
- core_backup_list_t *core_backup_list_init(
- const char *core_path, const char *dir_core_assets);
- /* Frees specified core backup list */
- void core_backup_list_free(core_backup_list_t *backup_list);
- /***********/
- /* Getters */
- /***********/
- /* Returns number of entries in core backup list */
- size_t core_backup_list_size(core_backup_list_t *backup_list);
- /* Returns number of entries of specified 'backup mode'
- * (manual or automatic) in core backup list */
- size_t core_backup_list_get_num_backups(
- core_backup_list_t *backup_list,
- enum core_backup_mode backup_mode);
- /* Fetches core backup list entry corresponding
- * to the specified entry index.
- * Returns false if index is invalid. */
- bool core_backup_list_get_index(
- core_backup_list_t *backup_list,
- size_t idx,
- const core_backup_list_entry_t **entry);
- /* Fetches core backup list entry corresponding
- * to the specified core crc checksum value.
- * Note that 'manual' and 'auto' backups are
- * considered independent - we only compare
- * crc values for the specified backup_mode.
- * Returns false if entry is not found. */
- bool core_backup_list_get_crc(
- core_backup_list_t *backup_list,
- uint32_t crc, enum core_backup_mode backup_mode,
- const core_backup_list_entry_t **entry);
- /* Fetches a string representation of a backup
- * list entry timestamp.
- * Returns false in the event of an error */
- bool core_backup_list_get_entry_timestamp_str(
- const core_backup_list_entry_t *entry,
- enum core_backup_date_separator_type date_separator,
- char *timestamp, size_t len);
- /* Fetches a string representation of a backup
- * list entry crc value.
- * Returns false in the event of an error */
- bool core_backup_list_get_entry_crc_str(
- const core_backup_list_entry_t *entry,
- char *crc, size_t len);
- RETRO_END_DECLS
- #endif
|