Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Libretro
tyrquake
Commits
2ca27640
Commit
2ca27640
authored
Feb 22, 2018
by
Libretro-Admin
Browse files
Update libretro-common files
parent
ec1e090e
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
.gitignore
0 → 100644
View file @
2ca27640
*.o
Makefile.common
View file @
2ca27640
...
@@ -101,8 +101,9 @@ ifneq ($(STATIC_LINKING),1)
...
@@ -101,8 +101,9 @@ ifneq ($(STATIC_LINKING),1)
$(CORE_DIR)
/libretro-common/file/retro_dirent.c
\
$(CORE_DIR)
/libretro-common/file/retro_dirent.c
\
$(CORE_DIR)
/libretro-common/encodings/encoding_utf.c
\
$(CORE_DIR)
/libretro-common/encodings/encoding_utf.c
\
$(CORE_DIR)
/libretro-common/string/stdstring.c
\
$(CORE_DIR)
/libretro-common/string/stdstring.c
\
$(CORE_DIR)
/libretro-common/file/
retro_st
at.c
\
$(CORE_DIR)
/libretro-common/file/
file_p
at
h
.c
\
$(CORE_DIR)
/libretro-common/compat/compat_strl.c
\
$(CORE_DIR)
/libretro-common/compat/compat_strl.c
\
$(CORE_DIR)
/libretro-common/compat/compat_strcasestr.c
\
$(CORE_DIR)
/libretro-common/compat/compat_snprintf.c
$(CORE_DIR)
/libretro-common/compat/compat_snprintf.c
endif
endif
...
...
common/libretro.c
View file @
2ca27640
...
@@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
...
@@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "libretro.h"
#include "libretro.h"
#include <retro_miscellaneous.h>
#include <retro_miscellaneous.h>
#include <
retro_st
at.h>
#include <
file/file_p
at
h
.h>
#if defined(_WIN32) && !defined(_XBOX)
#if defined(_WIN32) && !defined(_XBOX)
#include <windows.h>
#include <windows.h>
...
@@ -275,7 +275,7 @@ int Sys_FileTime(const char *path)
...
@@ -275,7 +275,7 @@ int Sys_FileTime(const char *path)
void
Sys_mkdir
(
const
char
*
path
)
void
Sys_mkdir
(
const
char
*
path
)
{
{
mkdir
_norecurse
(
path
);
path_
mkdir
(
path
);
}
}
void
Sys_DebugLog
(
const
char
*
file
,
const
char
*
fmt
,
...)
void
Sys_DebugLog
(
const
char
*
file
,
const
char
*
fmt
,
...)
...
...
libretro-common/
include/retro_stat.h
→
libretro-common/
compat/compat_strcasestr.c
View file @
2ca27640
/* Copyright (C) 2010-201
6
The RetroArch team
/* Copyright (C) 2010-201
7
The RetroArch team
*
*
* ---------------------------------------------------------------------------------------
* ---------------------------------------------------------------------------------------
* The following license statement only applies to this file (
retro_stat.h
).
* The following license statement only applies to this file (
compat_strcasestr.c
).
* ---------------------------------------------------------------------------------------
* ---------------------------------------------------------------------------------------
*
*
* Permission is hereby granted, free of charge,
* Permission is hereby granted, free of charge,
...
@@ -20,44 +20,39 @@
...
@@ -20,44 +20,39 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
*/
#ifndef __RETRO_STAT_H
#include <ctype.h>
#define __RETRO_STAT_H
#include <stdint.h>
#include <compat/strcasestr.h>
#include <stddef.h>
#include <retro_common_api.h>
/* Pretty much strncasecmp. */
static
int
casencmp
(
const
char
*
a
,
const
char
*
b
,
size_t
n
)
{
size_t
i
;
#include <boolean.h>
for
(
i
=
0
;
i
<
n
;
i
++
)
{
int
a_lower
=
tolower
(
a
[
i
]);
int
b_lower
=
tolower
(
b
[
i
]);
if
(
a_lower
!=
b_lower
)
return
a_lower
-
b_lower
;
}
RETRO_BEGIN_DECLS
return
0
;
}
/**
char
*
strcasestr_retro__
(
const
char
*
haystack
,
const
char
*
needle
)
* path_is_directory:
{
* @path : path
size_t
i
,
search_off
;
*
size_t
hay_len
=
strlen
(
haystack
);
* Checks if path is a directory.
size_t
needle_len
=
strlen
(
needle
);
*
* Returns: true (1) if path is a directory, otherwise false (0).
*/
bool
path_is_directory
(
const
char
*
path
);
bool
path_is_character_special
(
const
char
*
path
);
bool
path_is_valid
(
const
char
*
path
);
if
(
needle_len
>
hay_len
)
return
NULL
;
int32_t
path_get_size
(
const
char
*
path
);
/**
* path_mkdir_norecurse:
* @dir : directory
*
* Create directory on filesystem.
*
* Returns: true (1) if directory could be created, otherwise false (0).
**/
bool
mkdir_norecurse
(
const
char
*
dir
);
RETRO_END_DECLS
search_off
=
hay_len
-
needle_len
;
for
(
i
=
0
;
i
<=
search_off
;
i
++
)
if
(
!
casencmp
(
haystack
+
i
,
needle
,
needle_len
))
return
(
char
*
)
haystack
+
i
;
#endif
return
NULL
;
}
libretro-common/file/file_path.c
0 → 100644
View file @
2ca27640
This diff is collapsed.
Click to expand it.
libretro-common/file/retro_stat.c
deleted
100644 → 0
View file @
ec1e090e
/* Copyright (C) 2010-2016 The RetroArch team
*
* ---------------------------------------------------------------------------------------
* The following license statement only applies to this file (retro_stat.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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#if defined(_WIN32)
#ifdef _MSC_VER
#define setmode _setmode
#endif
#ifdef _XBOX
#include <xtl.h>
#define INVALID_FILE_ATTRIBUTES -1
#else
#include <io.h>
#include <fcntl.h>
#include <direct.h>
#include <windows.h>
#endif
#elif defined(VITA)
#define SCE_ERROR_ERRNO_EEXIST 0x80010011
#include <psp2/io/fcntl.h>
#include <psp2/io/dirent.h>
#include <psp2/io/stat.h>
#else
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#endif
#if defined(PSP)
#include <pspkernel.h>
#endif
#ifdef __HAIKU__
#include <kernel/image.h>
#endif
#if defined(__CELLOS_LV2__)
#include <cell/cell_fs.h>
#endif
#if defined(VITA)
#define FIO_S_ISDIR SCE_S_ISDIR
#endif
#if (defined(__CELLOS_LV2__) && !defined(__PSL1GHT__)) || defined(__QNX__) || defined(PSP)
#include <unistd.h>
/* stat() is defined here */
#endif
#include <retro_miscellaneous.h>
#include <boolean.h>
enum
stat_mode
{
IS_DIRECTORY
=
0
,
IS_CHARACTER_SPECIAL
,
IS_VALID
};
static
bool
path_stat
(
const
char
*
path
,
enum
stat_mode
mode
,
int32_t
*
size
)
{
#if defined(VITA) || defined(PSP)
SceIoStat
buf
;
char
*
tmp
=
strdup
(
path
);
size_t
len
=
strlen
(
tmp
);
if
(
tmp
[
len
-
1
]
==
'/'
)
tmp
[
len
-
1
]
=
'\0'
;
if
(
sceIoGetstat
(
tmp
,
&
buf
)
<
0
)
{
free
(
tmp
);
return
false
;
}
free
(
tmp
);
#elif defined(__CELLOS_LV2__)
CellFsStat
buf
;
if
(
cellFsStat
(
path
,
&
buf
)
<
0
)
return
false
;
#elif defined(_WIN32)
WIN32_FILE_ATTRIBUTE_DATA
file_info
;
GET_FILEEX_INFO_LEVELS
fInfoLevelId
=
GetFileExInfoStandard
;
DWORD
ret
=
GetFileAttributesEx
(
path
,
fInfoLevelId
,
&
file_info
);
if
(
ret
==
0
)
return
false
;
#else
struct
stat
buf
;
if
(
stat
(
path
,
&
buf
)
<
0
)
return
false
;
#endif
#if defined(_WIN32)
if
(
size
)
*
size
=
file_info
.
nFileSizeLow
;
#else
if
(
size
)
*
size
=
buf
.
st_size
;
#endif
switch
(
mode
)
{
case
IS_DIRECTORY
:
#if defined(VITA) || defined(PSP)
return
FIO_S_ISDIR
(
buf
.
st_mode
);
#elif defined(__CELLOS_LV2__)
return
((
buf
.
st_mode
&
S_IFMT
)
==
S_IFDIR
);
#elif defined(_WIN32)
return
(
file_info
.
dwFileAttributes
&
FILE_ATTRIBUTE_DIRECTORY
);
#else
return
S_ISDIR
(
buf
.
st_mode
);
#endif
case
IS_CHARACTER_SPECIAL
:
#if defined(VITA) || defined(PSP) || defined(__CELLOS_LV2__) || defined(_WIN32)
return
false
;
#else
return
S_ISCHR
(
buf
.
st_mode
);
#endif
case
IS_VALID
:
return
true
;
}
return
false
;
}
/**
* path_is_directory:
* @path : path
*
* Checks if path is a directory.
*
* Returns: true (1) if path is a directory, otherwise false (0).
*/
bool
path_is_directory
(
const
char
*
path
)
{
return
path_stat
(
path
,
IS_DIRECTORY
,
NULL
);
}
bool
path_is_character_special
(
const
char
*
path
)
{
return
path_stat
(
path
,
IS_CHARACTER_SPECIAL
,
NULL
);
}
bool
path_is_valid
(
const
char
*
path
)
{
return
path_stat
(
path
,
IS_VALID
,
NULL
);
}
int32_t
path_get_size
(
const
char
*
path
)
{
int32_t
filesize
=
0
;
if
(
path_stat
(
path
,
IS_VALID
,
&
filesize
))
return
filesize
;
return
-
1
;
}
/**
* path_mkdir_norecurse:
* @dir : directory
*
* Create directory on filesystem.
*
* Returns: true (1) if directory could be created, otherwise false (0).
**/
bool
mkdir_norecurse
(
const
char
*
dir
)
{
int
ret
;
#if defined(_WIN32)
ret
=
_mkdir
(
dir
);
#elif defined(IOS)
ret
=
mkdir
(
dir
,
0755
);
#elif defined(VITA) || defined(PSP)
ret
=
sceIoMkdir
(
dir
,
0777
);
#else
ret
=
mkdir
(
dir
,
0750
);
#endif
/* Don't treat this as an error. */
#if defined(VITA)
if
((
ret
==
SCE_ERROR_ERRNO_EEXIST
)
&&
path_is_directory
(
dir
))
ret
=
0
;
#elif defined(PSP) || defined(_3DS)
if
((
ret
==
-
1
)
&&
path_is_directory
(
dir
))
ret
=
0
;
#else
if
(
ret
<
0
&&
errno
==
EEXIST
&&
path_is_directory
(
dir
))
ret
=
0
;
#endif
if
(
ret
<
0
)
printf
(
"mkdir(%s) error: %s.
\n
"
,
dir
,
strerror
(
errno
));
return
ret
==
0
;
}
libretro-common/include/file/file_path.h
0 → 100644
View file @
2ca27640
/* Copyright (C) 2010-2017 The RetroArch team
*
* ---------------------------------------------------------------------------------------
* The following license statement only applies to this file (file_path.h).
* ---------------------------------------------------------------------------------------
*
* 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.
*/
#ifndef __LIBRETRO_SDK_FILE_PATH_H
#define __LIBRETRO_SDK_FILE_PATH_H
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <sys/types.h>
#include <retro_common_api.h>
#include <boolean.h>
RETRO_BEGIN_DECLS
/* Order in this enum is equivalent to negative sort order in filelist
* (i.e. DIRECTORY is on top of PLAIN_FILE) */
enum
{
RARCH_FILETYPE_UNSET
,
RARCH_PLAIN_FILE
,
RARCH_COMPRESSED_FILE_IN_ARCHIVE
,
RARCH_COMPRESSED_ARCHIVE
,
RARCH_DIRECTORY
,
RARCH_FILE_UNSUPPORTED
};
/**
* path_is_compressed_file:
* @path : path
*
* Checks if path is a compressed file.
*
* Returns: true (1) if path is a compressed file, otherwise false (0).
**/
bool
path_is_compressed_file
(
const
char
*
path
);
/**
* path_contains_compressed_file:
* @path : path
*
* Checks if path contains a compressed file.
*
* Currently we only check for hash symbol (#) inside the pathname.
* If path is ever expanded to a general URI, we should check for that here.
*
* Example: Somewhere in the path there might be a compressed file
* E.g.: /path/to/file.7z#mygame.img
*
* Returns: true (1) if path contains compressed file, otherwise false (0).
**/
#define path_contains_compressed_file(path) (path_get_archive_delim((path)) != NULL)
/**
* path_get_archive_delim:
* @path : path
*
* Gets 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 compressed file, otherwise NULL.
*/
const
char
*
path_get_archive_delim
(
const
char
*
path
);
/**
* path_get_extension:
* @path : path
*
* Gets extension of file. Only '.'s
* after the last slash are considered.
*
* Returns: extension part from the path.
*/
const
char
*
path_get_extension
(
const
char
*
path
);
/**
* path_remove_extension:
* @path : path
*
* Removes the extension from the path and returns the result.
* Removes all text after and including the last '.'.
* Only '.'s after the last slash are considered.
*
* Returns: path with the extension part removed.
*/
char
*
path_remove_extension
(
char
*
path
);
/**
* path_basename:
* @path : path
*
* Get basename from @path.
*
* Returns: basename from path.
**/
const
char
*
path_basename
(
const
char
*
path
);
/**
* path_basedir:
* @path : path
*
* Extracts base directory by mutating path.
* Keeps trailing '/'.
**/
void
path_basedir
(
char
*
path
);
/**
* path_parent_dir:
* @path : path
*
* Extracts parent directory by mutating path.
* Assumes that path is a directory. Keeps trailing '/'.
**/
void
path_parent_dir
(
char
*
path
);
/**
* path_resolve_realpath:
* @buf : buffer for path
* @size : size of buffer
*
* Turns relative paths into absolute path.
* If relative, rebases on current working dir.
**/
void
path_resolve_realpath
(
char
*
buf
,
size_t
size
);
/**
* path_is_absolute:
* @path : path
*
* Checks if @path is an absolute path or a relative path.
*
* Returns: true if path is absolute, false if path is relative.
**/
bool
path_is_absolute
(
const
char
*
path
);
/**
* fill_pathname:
* @out_path : output path
* @in_path : input path
* @replace : what to replace
* @size : 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"
*/
void
fill_pathname
(
char
*
out_path
,
const
char
*
in_path
,
const
char
*
replace
,
size_t
size
);
/**
* fill_dated_filename:
* @out_filename : output filename
* @ext : extension of output filename
* @size : buffer size of output filename
*
* Creates a 'dated' filename prefixed by 'RetroArch', and
* concatenates extension (@ext) to it.
*
* E.g.:
* out_filename = "RetroArch-{month}{day}-{Hours}{Minutes}.{@ext}"
**/
void
fill_dated_filename
(
char
*
out_filename
,
const
char
*
ext
,
size_t
size
);
/**
* fill_str_dated_filename:
* @out_filename : output filename
* @in_str : input string
* @ext : extension of output filename
* @size : buffer size of output filename
*
* Creates a 'dated' filename prefixed by the string @in_str, and
* concatenates extension (@ext) to it.
*
* E.g.:
* out_filename = "RetroArch-{year}{month}{day}-{Hour}{Minute}{Second}.{@ext}"
**/
void
fill_str_dated_filename
(
char
*
out_filename
,
const
char
*
in_str
,
const
char
*
ext
,
size_t
size
);
/**
* fill_pathname_noext:
* @out_path : output path
* @in_path : input path
* @replace : what to replace
* @size : 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.
*
*/
void
fill_pathname_noext
(
char
*
out_path
,
const
char
*
in_path
,
const
char
*
replace
,
size_t
size
);
/**
* find_last_slash:
* @str : input path
*
* Gets a pointer to the last slash in the input path.
*
* Returns: a pointer to the last slash in the input path.
**/
char
*
find_last_slash
(
const
char
*
str
);
/**
* fill_pathname_dir:
* @in_dir : input directory path
* @in_basename : input basename to be appended to @in_dir
* @replace : replacement to be appended to @in_basename
* @size : 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"
**/
void
fill_pathname_dir
(
char
*
in_dir
,
const
char
*
in_basename
,
const
char
*
replace
,
size_t
size
);
/**
* fill_pathname_base:
* @out : output path
* @in_path : input path
* @size : size of output path
*
* Copies basename of @in_path into @out_path.
**/
void
fill_pathname_base
(
char
*
out_path
,
const
char
*
in_path
,
size_t
size
);
void
fill_pathname_base_noext
(
char
*
out_dir
,
const
char
*
in_path
,
size_t
size
);
void
fill_pathname_base_ext
(
char
*
out
,
const
char
*
in_path
,
const
char
*
ext
,
size_t
size
);
/**
* fill_pathname_basedir:
* @out_dir : output directory
* @in_path : input path
* @size : size of output directory