RetroArch
Enumerations | Functions
file_path.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <boolean.h>
#include <file/file_path.h>
#include <retro_assert.h>
#include <string/stdstring.h>
#include <compat/strl.h>
#include <compat/posix_string.h>
#include <compat/strcasestr.h>
#include <retro_miscellaneous.h>
#include <encodings/utf.h>
#include <sys/types.h>
#include <unistd.h>
Include dependency graph for file_path.c:

Enumerations

enum  stat_mode { IS_DIRECTORY = 0, IS_CHARACTER_SPECIAL, IS_VALID }
 

Functions

static bool path_stat (const char *path, enum stat_mode mode, int32_t *size)
 
bool path_is_directory (const char *path)
 
bool path_is_character_special (const char *path)
 
bool path_is_valid (const char *path)
 
int32_t path_get_size (const char *path)
 
static bool path_mkdir_error (int ret)
 
bool path_mkdir (const char *dir)
 
const char * path_get_archive_delim (const char *path)
 
const char * path_get_extension (const char *path)
 
char * path_remove_extension (char *path)
 
bool path_is_compressed_file (const char *path)
 
void fill_pathname (char *out_path, const char *in_path, const char *replace, size_t size)
 
void fill_pathname_noext (char *out_path, const char *in_path, const char *replace, size_t size)
 
char * find_last_slash (const char *str)
 
void fill_pathname_slash (char *path, size_t size)
 
void fill_pathname_dir (char *in_dir, const char *in_basename, const char *replace, size_t size)
 
void fill_pathname_base (char *out, const char *in_path, size_t size)
 
void fill_pathname_base_noext (char *out, const char *in_path, size_t size)
 
void fill_pathname_base_ext (char *out, const char *in_path, const char *ext, size_t size)
 
void fill_pathname_basedir (char *out_dir, const char *in_path, size_t size)
 
void fill_pathname_basedir_noext (char *out_dir, const char *in_path, size_t size)
 
bool fill_pathname_parent_dir_name (char *out_dir, const char *in_dir, size_t size)
 
void fill_pathname_parent_dir (char *out_dir, const char *in_dir, size_t size)
 
void fill_dated_filename (char *out_filename, const char *ext, size_t size)
 
void fill_str_dated_filename (char *out_filename, const char *in_str, const char *ext, size_t size)
 
void path_basedir (char *path)
 
void path_parent_dir (char *path)
 
const char * path_basename (const char *path)
 
bool path_is_absolute (const char *path)
 
void path_resolve_realpath (char *buf, size_t size)
 
void fill_pathname_resolve_relative (char *out_path, const char *in_refpath, const char *in_path, size_t size)
 
void fill_pathname_join (char *out_path, const char *dir, const char *path, size_t size)
 
void fill_pathname_join_special_ext (char *out_path, const char *dir, const char *path, const char *last, const char *ext, size_t size)
 
void fill_pathname_join_concat_noext (char *out_path, const char *dir, const char *path, const char *concat, size_t size)
 
void fill_pathname_join_concat (char *out_path, const char *dir, const char *path, const char *concat, size_t size)
 
void fill_pathname_join_noext (char *out_path, const char *dir, const char *path, size_t size)
 
void fill_pathname_join_delim (char *out_path, const char *dir, const char *path, const char delim, size_t size)
 
void fill_pathname_join_delim_concat (char *out_path, const char *dir, const char *path, const char delim, const char *concat, size_t size)
 
void fill_short_pathname_representation (char *out_rep, const char *in_path, size_t size)
 
void fill_short_pathname_representation_noext (char *out_rep, const char *in_path, size_t size)
 
void fill_pathname_expand_special (char *out_path, const char *in_path, size_t size)
 
void fill_pathname_abbreviate_special (char *out_path, const char *in_path, size_t size)
 
void path_basedir_wrapper (char *path)
 

Enumeration Type Documentation

◆ stat_mode

enum stat_mode
Enumerator
IS_DIRECTORY 
IS_CHARACTER_SPECIAL 
IS_VALID 

Function Documentation

◆ fill_dated_filename()

void fill_dated_filename ( char *  out_filename,
const char *  ext,
size_t  size 
)

fill_dated_filename: : output filename : extension of output filename : buffer size of output filename

Creates a 'dated' filename prefixed by 'RetroArch', and concatenates extension () to it.

E.g.: out_filename = "RetroArch-{month}{day}-{Hours}{Minutes}.{@ext}"

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname()

void fill_pathname ( char *  out_path,
const char *  in_path,
const char *  replace,
size_t  size 
)

fill_pathname: : output path : input path : what to replace : buffer size of output path

FIXME: Verify

Replaces filename extension with 'replace' and outputs result to out_path. The extension here is considered to be the string from the last '.' to the end.

Only '.'s after the last slash are considered as extensions. If no '.' is present, in_path and replace will simply be concatenated. 'size' is buffer size of 'out_path'. E.g.: in_path = "/foo/bar/baz/boo.c", replace = ".asm" => out_path = "/foo/bar/baz/boo.asm" E.g.: in_path = "/foo/bar/baz/boo.c", replace = "" => out_path = "/foo/bar/baz/boo"

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_abbreviate_special()

void fill_pathname_abbreviate_special ( char *  out_path,
const char *  in_path,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_base()

void fill_pathname_base ( char *  out,
const char *  in_path,
size_t  size 
)

fill_pathname_base: : output path : input path : size of output path

Copies basename of into .

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_base_ext()

void fill_pathname_base_ext ( char *  out,
const char *  in_path,
const char *  ext,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_base_noext()

void fill_pathname_base_noext ( char *  out,
const char *  in_path,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_basedir()

void fill_pathname_basedir ( char *  out_dir,
const char *  in_path,
size_t  size 
)

fill_pathname_basedir: : output directory : input path : size of output directory

Copies base directory of into . If in_path is a path without any slashes (relative current directory), will get path "./".

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_basedir_noext()

void fill_pathname_basedir_noext ( char *  out_dir,
const char *  in_path,
size_t  size 
)
Here is the call graph for this function:

◆ fill_pathname_dir()

void fill_pathname_dir ( char *  in_dir,
const char *  in_basename,
const char *  replace,
size_t  size 
)

fill_pathname_dir: : input directory path : input basename to be appended to : replacement to be appended to : size of buffer

Appends basename of 'in_basename', to 'in_dir', along with 'replace'. Basename of in_basename is the string after the last '/' or '\', i.e the filename without directories.

If in_basename has no '/' or '\', the whole 'in_basename' will be used. 'size' is buffer size of 'in_dir'.

E.g..: in_dir = "/tmp/some_dir", in_basename = "/some_content/foo.c", replace = ".asm" => in_dir = "/tmp/some_dir/foo.c.asm"

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_expand_special()

void fill_pathname_expand_special ( char *  out_path,
const char *  in_path,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join()

void fill_pathname_join ( char *  out_path,
const char *  dir,
const char *  path,
size_t  size 
)
Here is the call graph for this function:

◆ fill_pathname_join_concat()

void fill_pathname_join_concat ( char *  out_path,
const char *  dir,
const char *  path,
const char *  concat,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join_concat_noext()

void fill_pathname_join_concat_noext ( char *  out_path,
const char *  dir,
const char *  path,
const char *  concat,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join_delim()

void fill_pathname_join_delim ( char *  out_path,
const char *  dir,
const char *  path,
const char  delim,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join_delim_concat()

void fill_pathname_join_delim_concat ( char *  out_path,
const char *  dir,
const char *  path,
const char  delim,
const char *  concat,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join_noext()

void fill_pathname_join_noext ( char *  out_path,
const char *  dir,
const char *  path,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_join_special_ext()

void fill_pathname_join_special_ext ( char *  out_path,
const char *  dir,
const char *  path,
const char *  last,
const char *  ext,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_noext()

void fill_pathname_noext ( char *  out_path,
const char *  in_path,
const char *  replace,
size_t  size 
)

fill_pathname_noext: : output path : input path : what to replace : buffer size of output path

Appends a filename extension 'replace' to 'in_path', and outputs result in 'out_path'.

Assumes in_path has no extension. If an extension is still present in 'in_path', it will be ignored.

Here is the caller graph for this function:

◆ fill_pathname_parent_dir()

void fill_pathname_parent_dir ( char *  out_dir,
const char *  in_dir,
size_t  size 
)

fill_pathname_parent_dir: : output directory : input directory : size of output directory

Copies parent directory of into . Assumes is a directory. Keeps trailing '/'.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_parent_dir_name()

bool fill_pathname_parent_dir_name ( char *  out_dir,
const char *  in_dir,
size_t  size 
)

fill_pathname_parent_dir_name: : output directory : input directory : size of output directory

Copies only the parent directory name of into . The two buffers must not overlap. Removes trailing '/'. Returns true on success, false if a slash was not found in the path.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_resolve_relative()

void fill_pathname_resolve_relative ( char *  out_path,
const char *  in_refpath,
const char *  in_path,
size_t  size 
)

fill_pathname_resolve_relative: : output path : input reference path : input path : size of

Joins basedir of together with . If is an absolute path, out_path = in_path. E.g.: in_refpath = "/foo/bar/baz.a", in_path = "foobar.cg", out_path = "/foo/bar/foobar.cg".

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_pathname_slash()

void fill_pathname_slash ( char *  path,
size_t  size 
)

fill_pathname_slash: : path : size of path

Assumes path is a directory. Appends a slash if not already there.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_short_pathname_representation()

void fill_short_pathname_representation ( char *  out_rep,
const char *  in_path,
size_t  size 
)

fill_short_pathname_representation: : output representation : input path : size of output representation

Generates a short representation of path. It should only be used for displaying the result; the output representation is not binding in any meaningful way (for a normal path, this is the same as basename) In case of more complex URLs, this should cut everything except for the main image file.

E.g.: "/path/to/game.img" -> game.img "/path/to/myarchive.7z#folder/to/game.img" -> game.img

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_short_pathname_representation_noext()

void fill_short_pathname_representation_noext ( char *  out_rep,
const char *  in_path,
size_t  size 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_str_dated_filename()

void fill_str_dated_filename ( char *  out_filename,
const char *  in_str,
const char *  ext,
size_t  size 
)

fill_str_dated_filename: : output filename : input string : extension of output filename : buffer size of output filename

Creates a 'dated' filename prefixed by the string , and concatenates extension () to it.

E.g.: out_filename = "RetroArch-{year}{month}{day}-{Hour}{Minute}{Second}.{@ext}"

Here is the call graph for this function:
Here is the caller graph for this function:

◆ find_last_slash()

char* find_last_slash ( const char *  str)

find_last_slash: : input path

Gets a pointer to the last slash in the input path.

Returns: a pointer to the last slash in the input path.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_basedir()

void path_basedir ( char *  path)

path_basedir: : path

Extracts base directory by mutating path. Keeps trailing '/'.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_basedir_wrapper()

void path_basedir_wrapper ( char *  path)

path_basedir: : path

Extracts base directory by mutating path. Keeps trailing '/'.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_basename()

const char* path_basename ( const char *  path)

path_basename: : path

Get basename from .

Returns: basename from path.

Here is the call graph for this function:

◆ path_get_archive_delim()

const char* path_get_archive_delim ( const char *  path)

path_get_archive_delim: : path

Find delimiter of an archive file. Only the first '#' after a compression extension is considered.

Returns: pointer to the delimiter in the path if it contains a path inside a compressed file, otherwise NULL.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_get_extension()

const char* path_get_extension ( const char *  path)

path_get_extension: : path

Gets extension of file. Only '.'s after the last slash are considered.

Returns: extension part from the path.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_get_size()

int32_t path_get_size ( const char *  path)
Here is the call graph for this function:

◆ path_is_absolute()

bool path_is_absolute ( const char *  path)

path_is_absolute: : path

Checks if is an absolute path or a relative path.

Returns: true if path is absolute, false if path is relative.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_is_character_special()

bool path_is_character_special ( const char *  path)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_is_compressed_file()

bool path_is_compressed_file ( const char *  path)

path_is_compressed_file: : path

Checks if path is a compressed file.

Returns: true (1) if path is a compressed file, otherwise false (0).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_is_directory()

bool path_is_directory ( const char *  path)

path_is_directory: : path

Checks if path is a directory.

Returns: true (1) if path is a directory, otherwise false (0).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_is_valid()

bool path_is_valid ( const char *  path)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_mkdir()

bool path_mkdir ( const char *  dir)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_mkdir_error()

static bool path_mkdir_error ( int  ret)
static
Here is the caller graph for this function:

◆ path_parent_dir()

void path_parent_dir ( char *  path)

path_parent_dir: : path

Extracts parent directory by mutating path. Assumes that path is a directory. Keeps trailing '/'.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_remove_extension()

char* path_remove_extension ( char *  path)

path_remove_extension: : path

Mutates path by removing its extension. Removes all text after and including the last '.'. Only '.'s after the last slash are considered.

Returns: 1) If path has an extension, returns path with the extension removed. 2) If there is no extension, returns NULL. 3) If path is empty or NULL, returns NULL

Here is the call graph for this function:
Here is the caller graph for this function:

◆ path_resolve_realpath()

void path_resolve_realpath ( char *  buf,
size_t  size 
)

path_resolve_realpath: : buffer for path : size of buffer

Turns relative paths into absolute path. If relative, rebases on current working dir.

Here is the caller graph for this function:

◆ path_stat()

static bool path_stat ( const char *  path,
enum stat_mode  mode,
int32_t size 
)
static
Here is the call graph for this function:
Here is the caller graph for this function: