Skip to content

Commit

Permalink
Merge retro_stat and file_path
Browse files Browse the repository at this point in the history
  • Loading branch information
inactive123 committed Jun 16, 2017
1 parent 7e8aabd commit 6af5bd0
Show file tree
Hide file tree
Showing 26 changed files with 215 additions and 303 deletions.
1 change: 0 additions & 1 deletion Makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,6 @@ OBJ += frontend/frontend.o \
$(LIBRETRO_COMM_DIR)/streams/file_stream.o \
$(LIBRETRO_COMM_DIR)/streams/interface_stream.o \
$(LIBRETRO_COMM_DIR)/streams/memory_stream.o \
$(LIBRETRO_COMM_DIR)/file/retro_stat.o \
$(LIBRETRO_COMM_DIR)/lists/string_list.o \
$(LIBRETRO_COMM_DIR)/string/stdstring.o \
$(LIBRETRO_COMM_DIR)/memmap/memalign.o \
Expand Down
2 changes: 1 addition & 1 deletion camera/drivers/video4linux2.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#include <retro_miscellaneous.h>
#include <gfx/scaler/scaler.h>
#include <gfx/video_frame.h>
#include <retro_stat.h>
#include <file/file_path.h>

#include <compat/strl.h>

Expand Down
1 change: 0 additions & 1 deletion configuration.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#include <file/file_path.h>
#include <compat/strl.h>
#include <compat/posix_string.h>
#include <retro_stat.h>
#include <retro_assert.h>
#include <string/stdstring.h>

Expand Down
2 changes: 0 additions & 2 deletions core_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
#include <lists/dir_list.h>
#include <file/archive_file.h>

#include <retro_stat.h>

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
Expand Down
1 change: 0 additions & 1 deletion dirs.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <lists/string_list.h>
#include <string/stdstring.h>
#include <retro_assert.h>
#include <retro_stat.h>

#include "dirs.h"
#include "command.h"
Expand Down
1 change: 0 additions & 1 deletion frontend/drivers/platform_emscripten.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

#include <file/config_file.h>
#include <queues/task_queue.h>
#include <retro_stat.h>
#include <file/file_path.h>
#include <string/stdstring.h>

Expand Down
1 change: 0 additions & 1 deletion frontend/drivers/platform_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
#include <retro_inline.h>
#include <compat/strl.h>
#include <rhash.h>
#include <retro_stat.h>
#include <lists/file_list.h>
#include <file/file_path.h>
#include <streams/file_stream.h>
Expand Down
1 change: 0 additions & 1 deletion griffin/griffin.c
Original file line number Diff line number Diff line change
Expand Up @@ -736,7 +736,6 @@ FILE
#include "../libretro-common/streams/file_stream.c"
#include "../libretro-common/streams/interface_stream.c"
#include "../libretro-common/streams/memory_stream.c"
#include "../libretro-common/file/retro_stat.c"
#include "../list_special.c"
#include "../libretro-common/string/stdstring.c"
#include "../libretro-common/file/nbio/nbio_stdio.c"
Expand Down
1 change: 0 additions & 1 deletion libretro-common/file/archive_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
#include <file/archive_file.h>
#include <file/file_path.h>
#include <streams/file_stream.h>
#include <retro_stat.h>
#include <retro_miscellaneous.h>
#include <lists/string_list.h>
#include <string/stdstring.h>
Expand Down
1 change: 0 additions & 1 deletion libretro-common/file/config_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
#include <compat/msvc.h>
#include <file/config_file.h>
#include <file/file_path.h>
#include <retro_stat.h>
#include <lists/string_list.h>
#include <string/stdstring.h>
#include <rhash.h>
Expand Down
190 changes: 187 additions & 3 deletions libretro-common/file/file_path.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

#include <stdio.h>
#include <stdlib.h>
#include <boolean.h>
#include <string.h>
#include <time.h>
#include <errno.h>

#include <sys/stat.h>

#include <boolean.h>
#include <file/file_path.h>

#ifndef __MACH__
Expand All @@ -36,10 +37,193 @@
#endif
#include <compat/strcasestr.h>
#include <retro_assert.h>
#include <retro_stat.h>
#include <retro_miscellaneous.h>
#include <string/stdstring.h>

#if defined(_WIN32)
#ifdef _MSC_VER
#define setmode _setmode
#endif
#include <sys/stat.h>
#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

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)
struct _stat buf;
DWORD file_info = GetFileAttributes(path);

_stat(path, &buf);

if (file_info == INVALID_FILE_ATTRIBUTES)
return false;
#else
struct stat buf;
if (stat(path, &buf) < 0)
return false;
#endif

if (size)
*size = (int32_t)buf.st_size;

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 & 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)
{
#if defined(_WIN32)
int ret = _mkdir(dir);
#elif defined(IOS)
int ret = mkdir(dir, 0755);
#elif defined(VITA) || defined(PSP)
int ret = sceIoMkdir(dir, 0777);
#elif defined(__QNX__)
int ret = mkdir(dir, 0777);
#else
int 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) || defined(WIIU)
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;
}

/**
* path_mkdir:
* @dir : directory
Expand Down Expand Up @@ -98,7 +282,7 @@ bool path_mkdir(const char *dir)
*/
const char *path_get_archive_delim(const char *path)
{
const char *last = find_last_slash(path);
const char *last = find_last_slash(path);
const char *delim = NULL;

if (last)
Expand Down
2 changes: 1 addition & 1 deletion libretro-common/file/retro_dirent.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#include <retro_common.h>

#include <boolean.h>
#include <retro_stat.h>
#include <file/file_path.h>
#include <retro_dirent.h>
#include <encodings/utf.h>

Expand Down
Loading

0 comments on commit 6af5bd0

Please sign in to comment.