2015-06-21 18:33:46 +03:00
/*
Simple DirectMedia Layer
2024-01-02 00:15:26 +03:00
Copyright ( C ) 1997 - 2024 Sam Lantinga < slouken @ libsdl . org >
2015-06-21 18:33:46 +03:00
This software is provided ' as - is ' , without any express or implied
warranty . In no event will the authors be held liable for any damages
arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it
freely , subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not
claim that you wrote the original software . If you use this software
in a product , an acknowledgment in the product documentation would be
appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be
misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
*/
/**
2024-05-16 17:44:37 +03:00
* # CategoryFilesystem
2015-06-21 18:33:46 +03:00
*
2024-05-16 17:44:37 +03:00
* SDL Filesystem API .
2015-06-21 18:33:46 +03:00
*/
2016-11-21 08:34:54 +03:00
# ifndef SDL_filesystem_h_
# define SDL_filesystem_h_
2015-06-21 18:33:46 +03:00
2022-11-27 07:43:38 +03:00
# include <SDL3/SDL_stdinc.h>
2024-04-04 19:38:21 +03:00
# include <SDL3/SDL_error.h>
2015-06-21 18:33:46 +03:00
2022-12-22 19:38:59 +03:00
# include <SDL3/SDL_begin_code.h>
2015-06-21 18:33:46 +03:00
/* Set up for C function definitions, even when using C++ */
# ifdef __cplusplus
extern " C " {
# endif
/**
2021-03-21 21:18:39 +03:00
* Get the directory where the application was run from .
2015-06-21 18:33:46 +03:00
*
2024-07-13 20:34:46 +03:00
* SDL caches the result of this call internally , but the first call to this
* function is not necessarily fast , so plan accordingly .
2015-06-21 18:33:46 +03:00
*
2022-11-26 03:01:17 +03:00
* * * macOS and iOS Specific Functionality * * : If the application is in a " .app "
* bundle , this function returns the Resource directory ( e . g .
2021-03-21 21:18:39 +03:00
* MyApp . app / Contents / Resources / ) . This behaviour can be overridden by adding
* a property to the Info . plist file . Adding a string key with the name
* SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the
* behaviour .
2015-06-21 18:33:46 +03:00
*
2021-03-21 21:18:39 +03:00
* Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property ( Given an
* application in / Applications / SDLApp / MyApp . app ) :
2015-06-21 18:33:46 +03:00
*
2021-03-21 21:18:39 +03:00
* - ` resource ` : bundle resource directory ( the default ) . For example :
2021-03-24 17:47:03 +03:00
* ` / Applications / SDLApp / MyApp . app / Contents / Resources `
2021-09-28 20:03:06 +03:00
* - ` bundle ` : the Bundle directory . For example :
2021-03-24 17:47:03 +03:00
* ` / Applications / SDLApp / MyApp . app / `
2021-03-21 21:18:39 +03:00
* - ` parent ` : the containing directory of the bundle . For example :
2021-03-24 17:47:03 +03:00
* ` / Applications / SDLApp / `
2021-03-21 21:18:39 +03:00
*
2022-11-15 01:34:22 +03:00
* * * Nintendo 3 DS Specific Functionality * * : This function returns " romfs "
2022-11-15 08:25:16 +03:00
* directory of the application as it is uncommon to store resources outside
* the executable . As such it is not a writable directory .
2022-11-15 01:34:22 +03:00
*
2023-12-27 23:21:11 +03:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
2021-03-21 21:18:39 +03:00
* Windows , ' / ' on most other platforms ) .
*
* \ returns an absolute path in UTF - 8 encoding to the application data
* directory . NULL will be returned on error or when the platform
* doesn ' t implement this functionality , call SDL_GetError ( ) for more
* information .
*
2022-11-23 01:40:14 +03:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 18:33:46 +03:00
*
* \ sa SDL_GetPrefPath
*/
2024-07-27 04:57:18 +03:00
extern SDL_DECLSPEC const char * SDLCALL SDL_GetBasePath ( void ) ;
2015-06-21 18:33:46 +03:00
/**
2021-03-21 21:18:39 +03:00
* Get the user - and - app - specific path where files can be written .
2015-06-21 18:33:46 +03:00
*
* Get the " pref dir " . This is meant to be where users can write personal
2021-03-21 21:18:39 +03:00
* files ( preferences and save games , etc ) that are specific to your
* application . This directory is unique per user , per application .
2015-06-21 18:33:46 +03:00
*
2021-07-15 00:07:04 +03:00
* This function will decide the appropriate location in the native
* filesystem , create the directory if necessary , and return a string of the
* absolute path to the directory in UTF - 8 encoding .
2015-06-21 18:33:46 +03:00
*
* On Windows , the string might look like :
*
2021-03-21 21:18:39 +03:00
* ` C : \ \ Users \ \ bob \ \ AppData \ \ Roaming \ \ My Company \ \ My Program Name \ \ `
*
2022-07-11 18:44:49 +03:00
* On Linux , the string might look like :
2021-03-21 21:18:39 +03:00
*
* ` / home / bob / . local / share / My Program Name / `
2015-06-21 18:33:46 +03:00
*
2022-11-26 03:00:06 +03:00
* On macOS , the string might look like :
2021-03-21 21:18:39 +03:00
*
* ` / Users / bob / Library / Application Support / My Program Name / `
*
* You should assume the path returned by this function is the only safe place
* to write files ( and that SDL_GetBasePath ( ) , while it might be writable , or
* even the parent of the returned path , isn ' t where you should be writing
* things ) .
*
* Both the org and app strings may become part of a directory name , so please
* follow these rules :
*
* - Try to use the same org string ( _including case - sensitivity_ ) for all
2021-03-24 17:47:03 +03:00
* your applications that use this function .
2021-03-21 21:18:39 +03:00
* - Always use a unique app string for each one , and make sure it never
2021-03-24 17:47:03 +03:00
* changes for an app once you ' ve decided on it .
2024-07-16 03:21:22 +03:00
* - Unicode characters are legal , as long as they are UTF - 8 encoded , but . . .
2021-03-21 21:18:39 +03:00
* - . . . only use letters , numbers , and spaces . Avoid punctuation like " Game
2021-03-24 17:47:03 +03:00
* Name 2 : Bad Guy ' s Revenge ! " ... " Game Name 2 " is sufficient.
2021-03-21 21:18:39 +03:00
*
2023-12-27 23:21:11 +03:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
2021-03-21 21:18:39 +03:00
* Windows , ' / ' on most other platforms ) .
*
2024-06-14 09:09:55 +03:00
* \ param org the name of your organization .
* \ param app the name of your application .
2021-03-21 21:18:39 +03:00
* \ returns a UTF - 8 string of the user directory in platform - dependent
* notation . NULL if there ' s a problem ( creating directory failed ,
2024-07-27 06:59:43 +03:00
* etc . ) . This should be freed with SDL_free ( ) when it is no longer
* needed .
2021-03-21 21:18:39 +03:00
*
2022-11-23 01:40:14 +03:00
* \ since This function is available since SDL 3.0 .0 .
2015-06-21 18:33:46 +03:00
*
* \ sa SDL_GetBasePath
*/
2024-07-28 17:06:22 +03:00
extern SDL_DECLSPEC char * SDLCALL SDL_GetPrefPath ( const char * org , const char * app ) ;
2015-06-21 18:33:46 +03:00
2023-05-04 21:38:11 +03:00
/**
* The type of the OS - provided default folder for a specific purpose .
*
2024-04-09 07:49:23 +03:00
* Note that the Trash folder isn ' t included here , because trashing files
* usually involves extra OS - specific functionality to remember the file ' s
* original location .
2023-05-04 21:38:11 +03:00
*
2023-05-05 19:38:35 +03:00
* The folders supported per platform are :
*
2024-09-06 06:36:16 +03:00
* | | Windows | macOS / iOS | tvOS | Unix ( XDG ) | Haiku | Emscripten |
* | - - - - - - - - - - - | - - - - - - - | - - - - - - - - - | - - - - | - - - - - - - - - - | - - - - - | - - - - - - - - - - |
* | HOME | X | X | | X | X | X |
* | DESKTOP | X | X | | X | X | |
* | DOCUMENTS | X | X | | X | | |
* | DOWNLOADS | Vista + | X | | X | | |
* | MUSIC | X | X | | X | | |
* | PICTURES | X | X | | X | | |
* | PUBLICSHARE | | X | | X | | |
* | SAVEDGAMES | Vista + | | | | | |
* | SCREENSHOTS | Vista + | | | | | |
* | TEMPLATES | X | X | | X | | |
* | VIDEOS | X | X * | | X | | |
2023-05-05 19:38:35 +03:00
*
2024-04-09 05:36:57 +03:00
* Note that on macOS / iOS , the Videos folder is called " Movies " .
2023-05-05 19:38:35 +03:00
*
2024-04-11 20:34:29 +03:00
* \ since This enum is available since SDL 3.0 .0 .
*
2023-07-28 20:45:37 +03:00
* \ sa SDL_GetUserFolder
2023-05-04 21:38:11 +03:00
*/
2024-04-09 05:36:57 +03:00
typedef enum SDL_Folder
2023-05-04 21:38:11 +03:00
{
2024-09-11 18:08:18 +03:00
SDL_FOLDER_HOME , /**< The folder which contains all of the current user's data, preferences, and documents. It usually contains most of the other folders. If a requested folder does not exist, the home folder can be considered a safe fallback to store a user's documents. */
SDL_FOLDER_DESKTOP , /**< The folder of files that are displayed on the desktop. Note that the existence of a desktop folder does not guarantee that the system does show icons on its desktop; certain GNU/Linux distros with a graphical environment may not have desktop icons. */
SDL_FOLDER_DOCUMENTS , /**< User document files, possibly application-specific. This is a good place to save a user's projects. */
SDL_FOLDER_DOWNLOADS , /**< Standard folder for user files downloaded from the internet. */
SDL_FOLDER_MUSIC , /**< Music files that can be played using a standard music player (mp3, ogg...). */
SDL_FOLDER_PICTURES , /**< Image files that can be displayed using a standard viewer (png, jpg...). */
SDL_FOLDER_PUBLICSHARE , /**< Files that are meant to be shared with other users on the same computer. */
SDL_FOLDER_SAVEDGAMES , /**< Save files for games. */
SDL_FOLDER_SCREENSHOTS , /**< Application screenshots. */
SDL_FOLDER_TEMPLATES , /**< Template files to be used when the user requests the desktop environment to create a new file in a certain folder, such as "New Text File.txt". Any file in the Templates folder can be used as a starting point for a new file. */
SDL_FOLDER_VIDEOS , /**< Video files that can be played using a standard video player (mp4, webm...). */
SDL_FOLDER_COUNT /**< Total number of types in this enum, not a folder type by itself. */
2023-05-04 21:38:11 +03:00
} SDL_Folder ;
/**
2024-07-16 03:03:15 +03:00
* Finds the most suitable user folder for a specific purpose .
2023-05-04 21:38:11 +03:00
*
* Many OSes provide certain standard folders for certain purposes , such as
* storing pictures , music or videos for a certain user . This function gives
* the path for many of those special locations .
*
2023-07-28 20:45:37 +03:00
* This function is specifically for _user_ folders , which are meant for the
* user to access and manage . For application - specific folders , meant to hold
* data for the application to manage , see SDL_GetBasePath ( ) and
* SDL_GetPrefPath ( ) .
*
2024-04-30 23:57:17 +03:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
* Windows , ' / ' on most other platforms ) .
*
2023-05-04 21:38:11 +03:00
* If NULL is returned , the error may be obtained with SDL_GetError ( ) .
*
2024-06-14 09:09:55 +03:00
* \ param folder the type of folder to find .
2024-06-14 01:10:28 +03:00
* \ returns either a null - terminated C string containing the full path to the
2023-05-04 21:38:11 +03:00
* folder , or NULL if an error happened .
*
2023-06-22 16:42:51 +03:00
* \ since This function is available since SDL 3.0 .0 .
2023-05-04 21:38:11 +03:00
*/
2024-07-27 04:57:18 +03:00
extern SDL_DECLSPEC const char * SDLCALL SDL_GetUserFolder ( SDL_Folder folder ) ;
2023-05-04 21:38:11 +03:00
2024-03-16 18:15:13 +03:00
/* Abstract filesystem interface */
typedef enum SDL_PathType
{
2024-03-18 18:43:22 +03:00
SDL_PATHTYPE_NONE , /**< path does not exist */
SDL_PATHTYPE_FILE , /**< a normal file */
2024-03-16 18:15:13 +03:00
SDL_PATHTYPE_DIRECTORY , /**< a directory */
2024-03-18 18:43:22 +03:00
SDL_PATHTYPE_OTHER /**< something completely different like a device node (not a symlink, those are always followed) */
2024-03-16 18:15:13 +03:00
} SDL_PathType ;
typedef struct SDL_PathInfo
{
2024-09-11 18:08:18 +03:00
SDL_PathType type ; /**< the path type */
Uint64 size ; /**< the file size in bytes */
SDL_Time create_time ; /**< the time when the path was created */
SDL_Time modify_time ; /**< the last time the path was modified */
SDL_Time access_time ; /**< the last time the path was read */
2024-03-16 18:15:13 +03:00
} SDL_PathInfo ;
2024-05-14 16:47:58 +03:00
/**
* Flags for path matching
*
* \ since This datatype is available since SDL 3.0 .0 .
*
* \ sa SDL_GlobDirectory
* \ sa SDL_GlobStorageDirectory
*/
typedef Uint32 SDL_GlobFlags ;
# define SDL_GLOB_CASEINSENSITIVE (1u << 0)
2024-03-16 18:15:13 +03:00
/**
* Create a directory .
*
2024-06-14 09:09:55 +03:00
* \ param path the path of the directory to create .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 18:15:13 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_CreateDirectory ( const char * path ) ;
2024-03-16 18:15:13 +03:00
2024-03-18 22:31:35 +03:00
/* Callback for directory enumeration. Return 1 to keep enumerating,
0 to stop enumerating ( no error ) , - 1 to stop enumerating and
report an error . ` dirname ` is the directory being enumerated ,
` fname ` is the enumerated entry . */
2024-03-16 19:18:32 +03:00
typedef int ( SDLCALL * SDL_EnumerateDirectoryCallback ) ( void * userdata , const char * dirname , const char * fname ) ;
2024-03-16 18:15:13 +03:00
/**
2024-03-18 22:32:04 +03:00
* Enumerate a directory through a callback function .
*
* This function provides every directory entry through an app - provided
2024-04-04 16:41:27 +03:00
* callback , called once for each directory entry , until all results have been
* provided or the callback returns < = 0.
2024-03-16 18:15:13 +03:00
*
2024-06-14 09:09:55 +03:00
* \ param path the path of the directory to enumerate .
* \ param callback a function that is called for each entry in the directory .
* \ param userdata a pointer that is passed to ` callback ` .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 18:15:13 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_EnumerateDirectory ( const char * path , SDL_EnumerateDirectoryCallback callback , void * userdata ) ;
2024-03-16 18:15:13 +03:00
/**
* Remove a file or an empty directory .
*
2024-06-14 09:09:55 +03:00
* \ param path the path of the directory to enumerate .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 18:15:13 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_RemovePath ( const char * path ) ;
2024-03-16 18:15:13 +03:00
/**
* Rename a file or directory .
*
2024-06-14 09:09:55 +03:00
* \ param oldpath the old path .
* \ param newpath the new path .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 18:15:13 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_RenamePath ( const char * oldpath , const char * newpath ) ;
2024-03-16 18:15:13 +03:00
2024-07-22 05:32:16 +03:00
/**
* Copy a file .
*
* \ param oldpath the old path .
* \ param newpath the new path .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-07-22 05:32:16 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_CopyFile ( const char * oldpath , const char * newpath ) ;
2024-07-22 05:32:16 +03:00
2024-03-16 18:15:13 +03:00
/**
* Get information about a filesystem path .
*
2024-06-14 09:09:55 +03:00
* \ param path the path to query .
2024-03-18 18:57:23 +03:00
* \ param info a pointer filled in with information about the path , or NULL to
2024-06-14 09:09:55 +03:00
* check for the existence of a file .
2024-09-18 18:33:11 +03:00
* \ returns true on success or false if the file doesn ' t exist , or another
* failure ; call SDL_GetError ( ) for more information .
2024-03-16 18:15:13 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
*/
2024-09-18 17:52:28 +03:00
extern SDL_DECLSPEC bool SDLCALL SDL_GetPathInfo ( const char * path , SDL_PathInfo * info ) ;
2024-03-16 18:15:13 +03:00
2024-03-18 22:32:04 +03:00
/**
* Enumerate a directory tree , filtered by pattern , and return a list .
*
* Files are filtered out if they don ' t match the string in ` pattern ` , which
* may contain wildcard characters ' * ' ( match everything ) and ' ? ' ( match one
* character ) . If pattern is NULL , no filtering is done and all results are
* returned . Subdirectories are permitted , and are specified with a path
* separator of ' / ' . Wildcard characters ' * ' and ' ? ' never match a path
* separator .
*
2024-04-04 17:42:26 +03:00
* ` flags ` may be set to SDL_GLOB_CASEINSENSITIVE to make the pattern matching
* case - insensitive .
2024-03-18 22:32:04 +03:00
*
* The returned array is always NULL - terminated , for your iterating
* convenience , but if ` count ` is non - NULL , on return it will contain the
* number of items in the array , not counting the NULL terminator .
*
2024-06-14 09:09:55 +03:00
* \ param path the path of the directory to enumerate .
2024-04-04 16:41:27 +03:00
* \ param pattern the pattern that files in the directory must match . Can be
* NULL .
2024-04-04 17:40:48 +03:00
* \ param flags ` SDL_GLOB_ * ` bitflags that affect this search .
2024-04-04 16:41:27 +03:00
* \ param count on return , will be set to the number of items in the returned
* array . Can be NULL .
2024-03-18 22:32:04 +03:00
* \ returns an array of strings on success or NULL on failure ; call
2024-07-27 06:59:43 +03:00
* SDL_GetError ( ) for more information . This is a single allocation
* that should be freed with SDL_free ( ) when it is no longer needed .
2024-03-18 22:32:04 +03:00
*
* \ threadsafety It is safe to call this function from any thread .
2024-04-04 16:41:27 +03:00
*
* \ since This function is available since SDL 3.0 .0 .
2024-03-18 22:32:04 +03:00
*/
2024-07-28 17:06:22 +03:00
extern SDL_DECLSPEC char * * SDLCALL SDL_GlobDirectory ( const char * path , const char * pattern , SDL_GlobFlags flags , int * count ) ;
2024-03-18 22:32:04 +03:00
2015-06-21 18:33:46 +03:00
/* Ends C function definitions when using C++ */
# ifdef __cplusplus
}
# endif
2022-12-22 19:38:59 +03:00
# include <SDL3/SDL_close_code.h>
2015-06-21 18:33:46 +03:00
2016-11-21 08:34:54 +03:00
# endif /* SDL_filesystem_h_ */