diff --git a/Makefile.common b/Makefile.common index 1ad64094..96fd2268 100644 --- a/Makefile.common +++ b/Makefile.common @@ -243,5 +243,6 @@ ifneq ($(STATIC_LINKING), 1) $(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \ $(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c \ $(LIBRETRO_COMM_DIR)/memmap/memalign.c \ - $(LIBRETRO_COMM_DIR)/string/stdstring.c + $(LIBRETRO_COMM_DIR)/string/stdstring.c \ + $(LIBRETRO_COMM_DIR)/time/rtime.c endif diff --git a/deps/zlib/gzguts.h b/deps/zlib/gzguts.h index ee3f281a..b9ef1109 100644 --- a/deps/zlib/gzguts.h +++ b/deps/zlib/gzguts.h @@ -3,6 +3,9 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +#ifndef GZGUTS_H +#define GZGUTS_H + #ifdef _LARGEFILE64_SOURCE # ifndef _LARGEFILE_SOURCE # define _LARGEFILE_SOURCE 1 @@ -191,3 +194,5 @@ char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); unsigned ZLIB_INTERNAL gz_intmax OF((void)); # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) #endif + +#endif /* GZGUTS_H */ diff --git a/deps/zlib/inffast.h b/deps/zlib/inffast.h index e5c1aa4c..fc799ad4 100644 --- a/deps/zlib/inffast.h +++ b/deps/zlib/inffast.h @@ -8,4 +8,9 @@ subject to change. Applications should only use zlib.h. */ +#ifndef INFFAST_H +#define INFFAST_H + void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); + +#endif /* INFFAST_H */ diff --git a/deps/zlib/inflate.h b/deps/zlib/inflate.h index 95f4986d..2fc83e59 100644 --- a/deps/zlib/inflate.h +++ b/deps/zlib/inflate.h @@ -12,6 +12,10 @@ trailer decoding by inflate(). NO_GZIP would be used to avoid linking in the crc code when it is not needed. For shared libraries, gzip decoding should be left enabled. */ + +#ifndef INFLATE_H +#define INFLATE_H + #ifndef NO_GZIP # define GUNZIP #endif @@ -120,3 +124,5 @@ struct inflate_state { int back; /* bits back of last unprocessed length/lit */ unsigned was; /* initial length of match */ }; + +#endif /* INFLATE_H */ diff --git a/deps/zlib/inftrees.h b/deps/zlib/inftrees.h index baa53a0b..de40c8d0 100644 --- a/deps/zlib/inftrees.h +++ b/deps/zlib/inftrees.h @@ -8,6 +8,9 @@ subject to change. Applications should only use zlib.h. */ +#ifndef INFTREES_H +#define INFTREES_H + /* Structure for decoding tables. Each entry provides either the information needed to do the operation requested by the code that indexed that table entry, or it provides a pointer to another @@ -60,3 +63,5 @@ typedef enum { int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)); + +#endif /* INFTREES_H */ diff --git a/libretro-common/cdrom/cdrom.c b/libretro-common/cdrom/cdrom.c index cb5ff8c1..75c63e52 100644 --- a/libretro-common/cdrom/cdrom.c +++ b/libretro-common/cdrom/cdrom.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2019 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (cdrom.c). @@ -96,6 +96,7 @@ void increment_msf(unsigned char *min, unsigned char *sec, unsigned char *frame) *frame = (*frame < 74) ? (*frame + 1) : 0; } +#ifdef CDROM_DEBUG static void cdrom_print_sense_data(const unsigned char *sense, size_t len) { unsigned i; @@ -252,6 +253,7 @@ static void cdrom_print_sense_data(const unsigned char *sense, size_t len) fflush(stdout); } +#endif #if defined(_WIN32) && !defined(_XBOX) static int cdrom_send_command_win32(const libretro_vfs_implementation_file *stream, CDROM_CMD_Direction dir, void *buf, size_t len, unsigned char *cmd, size_t cmd_len, unsigned char *sense, size_t sense_len) @@ -519,7 +521,9 @@ static int cdrom_send_command(libretro_vfs_implementation_file *stream, CDROM_CM } else { +#ifdef CDROM_DEBUG cdrom_print_sense_data(sense, sizeof(sense)); +#endif /* INQUIRY/TEST/SENSE should never fail, don't retry. */ /* READ ATIP seems to fail outright on some drives with pressed discs, skip retries. */ @@ -672,7 +676,9 @@ int cdrom_get_sense(libretro_vfs_implementation_file *stream, unsigned char *sen if (rv) return 1; +#ifdef CDROM_DEBUG cdrom_print_sense_data(buf, sizeof(buf)); +#endif return 0; } @@ -1336,22 +1342,26 @@ struct string_list* cdrom_get_available_drives(void) for (i = 0; i < (int)dir_list->size; i++) { - if (strstr(dir_list->elems[i].data, "/dev/sg")) + if (string_starts_with_size(dir_list->elems[i].data, "/dev/sg", + STRLEN_CONST("/dev/sg"))) { - char drive_model[32] = {0}; - char drive_string[33] = {0}; - union string_list_elem_attr attr = {0}; - int dev_index = 0; - RFILE *file = filestream_open(dir_list->elems[i].data, RETRO_VFS_FILE_ACCESS_READ, 0); libretro_vfs_implementation_file *stream; - bool is_cdrom = false; + char drive_model[32] = {0}; + char drive_string[33] = {0}; + union string_list_elem_attr attr = {0}; + int dev_index = 0; + RFILE *file = filestream_open( + dir_list->elems[i].data, RETRO_VFS_FILE_ACCESS_READ, 0); + bool is_cdrom = false; found = true; if (!file) { +#ifdef CDROM_DEBUG printf("[CDROM] Could not open %s, please check permissions.\n", dir_list->elems[i].data); fflush(stdout); +#endif continue; } @@ -1362,10 +1372,11 @@ struct string_list* cdrom_get_available_drives(void) if (!is_cdrom) continue; - sscanf(dir_list->elems[i].data + strlen("/dev/sg"), "%d", &dev_index); + sscanf(dir_list->elems[i].data + STRLEN_CONST("/dev/sg"), + "%d", &dev_index); dev_index = '0' + dev_index; - attr.i = dev_index; + attr.i = dev_index; if (!string_is_empty(drive_model)) strlcat(drive_string, drive_model, sizeof(drive_string)); @@ -1378,29 +1389,34 @@ struct string_list* cdrom_get_available_drives(void) if (!found) { - char *buf = NULL; + char *buf = NULL; int64_t len = 0; if (filestream_read_file("/proc/modules", (void**)&buf, &len)) { - struct string_list *mods = string_split(buf, "\n"); - bool found = false; +#ifdef CDROM_DEBUG + bool found = false; +#endif + struct string_list mods = {0}; - if (mods) + string_list_initialize(&mods); + + if (string_split_noalloc(&mods, buf, "\n")) { - - for (i = 0; i < mods->size; i++) + for (i = 0; i < mods.size; i++) { - if (strcasestr(mods->elems[i].data, "sg ")) + if (strcasestr(mods.elems[i].data, "sg ")) { +#ifdef CDROM_DEBUG found = true; +#endif break; } } - - string_list_free(mods); } + string_list_deinitialize(&mods); +#ifdef CDROM_DEBUG if (found) { printf("[CDROM] No sg devices found but kernel module is loaded.\n"); @@ -1411,12 +1427,15 @@ struct string_list* cdrom_get_available_drives(void) printf("[CDROM] No sg devices found and sg kernel module is not loaded.\n"); fflush(stdout); } +#endif } +#ifdef CDROM_DEBUG else { printf("[CDROM] No sg devices found, could not check if sg kernel module is loaded.\n"); fflush(stdout); } +#endif } string_list_free(dir_list); diff --git a/libretro-common/compat/compat_posix_string.c b/libretro-common/compat/compat_posix_string.c index 33a30e57..6a2f07ee 100644 --- a/libretro-common/compat/compat_posix_string.c +++ b/libretro-common/compat/compat_posix_string.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (compat_posix_string.c). diff --git a/libretro-common/compat/compat_snprintf.c b/libretro-common/compat/compat_snprintf.c index b69ad047..5b0a34e0 100644 --- a/libretro-common/compat/compat_snprintf.c +++ b/libretro-common/compat/compat_snprintf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (compat_snprintf.c). diff --git a/libretro-common/compat/compat_strcasestr.c b/libretro-common/compat/compat_strcasestr.c index 54c93a48..4129dab2 100644 --- a/libretro-common/compat/compat_strcasestr.c +++ b/libretro-common/compat/compat_strcasestr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (compat_strcasestr.c). diff --git a/libretro-common/compat/compat_strl.c b/libretro-common/compat/compat_strl.c index 94cb39b6..31723107 100644 --- a/libretro-common/compat/compat_strl.c +++ b/libretro-common/compat/compat_strl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (compat_strl.c). diff --git a/libretro-common/compat/fopen_utf8.c b/libretro-common/compat/fopen_utf8.c index 893afb83..ea169615 100644 --- a/libretro-common/compat/fopen_utf8.c +++ b/libretro-common/compat/fopen_utf8.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (fopen_utf8.c). diff --git a/libretro-common/encodings/encoding_utf.c b/libretro-common/encodings/encoding_utf.c index b6ad2f96..2760824d 100644 --- a/libretro-common/encodings/encoding_utf.c +++ b/libretro-common/encodings/encoding_utf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2018 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (encoding_utf.c). @@ -37,6 +37,8 @@ #include #endif +#define UTF8_WALKBYTE(string) (*((*(string))++)) + static unsigned leading_ones(uint8_t c) { unsigned ones = 0; @@ -89,13 +91,14 @@ size_t utf8_conv_utf32(uint32_t *out, size_t out_chars, bool utf16_conv_utf8(uint8_t *out, size_t *out_chars, const uint16_t *in, size_t in_size) { - static uint8_t kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - size_t out_pos = 0; - size_t in_pos = 0; + size_t out_pos = 0; + size_t in_pos = 0; + static const + uint8_t utf8_limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; for (;;) { - unsigned numAdds; + unsigned num_adds; uint32_t value; if (in_pos == in_size) @@ -124,21 +127,21 @@ bool utf16_conv_utf8(uint8_t *out, size_t *out_chars, value = (((value - 0xD800) << 10) | (c2 - 0xDC00)) + 0x10000; } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((uint32_t)1) << (numAdds * 5 + 6))) + for (num_adds = 1; num_adds < 5; num_adds++) + if (value < (((uint32_t)1) << (num_adds * 5 + 6))) break; if (out) - out[out_pos] = (char)(kUtf8Limits[numAdds - 1] - + (value >> (6 * numAdds))); + out[out_pos] = (char)(utf8_limits[num_adds - 1] + + (value >> (6 * num_adds))); out_pos++; do { - numAdds--; + num_adds--; if (out) out[out_pos] = (char)(0x80 - + ((value >> (6 * numAdds)) & 0x3F)); + + ((value >> (6 * num_adds)) & 0x3F)); out_pos++; - }while (numAdds != 0); + }while (num_adds != 0); } *out_chars = out_pos; @@ -166,13 +169,15 @@ size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars) while (*sb && chars-- > 0) { sb++; - while ((*sb & 0xC0) == 0x80) sb++; + while ((*sb & 0xC0) == 0x80) + sb++; } if ((size_t)(sb - sb_org) > d_len-1 /* NUL */) { sb = sb_org + d_len-1; - while ((*sb & 0xC0) == 0x80) sb--; + while ((*sb & 0xC0) == 0x80) + sb--; } memcpy(d, sb_org, sb-sb_org); @@ -184,14 +189,18 @@ size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars) const char *utf8skip(const char *str, size_t chars) { const uint8_t *strb = (const uint8_t*)str; + if (!chars) return str; + do { strb++; - while ((*strb & 0xC0)==0x80) strb++; + while ((*strb & 0xC0)==0x80) + strb++; chars--; - } while(chars); + }while (chars); + return (const char*)strb; } @@ -211,24 +220,22 @@ size_t utf8len(const char *string) return ret; } -#define utf8_walkbyte(string) (*((*(string))++)) - /* Does not validate the input, returns garbage if it's not UTF-8. */ uint32_t utf8_walk(const char **string) { - uint8_t first = utf8_walkbyte(string); + uint8_t first = UTF8_WALKBYTE(string); uint32_t ret = 0; if (first < 128) return first; - ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F); + ret = (ret << 6) | (UTF8_WALKBYTE(string) & 0x3F); if (first >= 0xE0) { - ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F); + ret = (ret << 6) | (UTF8_WALKBYTE(string) & 0x3F); if (first >= 0xF0) { - ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F); + ret = (ret << 6) | (UTF8_WALKBYTE(string) & 0x3F); return ret | (first & 7) << 18; } return ret | (first & 15) << 12; @@ -277,9 +284,7 @@ bool utf16_to_char_string(const uint16_t *in, char *s, size_t len) static char *mb_to_mb_string_alloc(const char *str, enum CodePage cp_in, enum CodePage cp_out) { - char *path_buf = NULL; wchar_t *path_buf_wide = NULL; - int path_buf_len = 0; int path_buf_wide_len = MultiByteToWideChar(cp_in, 0, str, -1, NULL, 0); /* Windows 95 will return 0 from these functions with @@ -292,54 +297,51 @@ static char *mb_to_mb_string_alloc(const char *str, * MultiByteToWideChar also supports CP_UTF7 and CP_UTF8. */ - if (path_buf_wide_len) + if (!path_buf_wide_len) + return strdup(str); + + path_buf_wide = (wchar_t*) + calloc(path_buf_wide_len + sizeof(wchar_t), sizeof(wchar_t)); + + if (path_buf_wide) { - path_buf_wide = (wchar_t*) - calloc(path_buf_wide_len + sizeof(wchar_t), sizeof(wchar_t)); + MultiByteToWideChar(cp_in, 0, + str, -1, path_buf_wide, path_buf_wide_len); - if (path_buf_wide) + if (*path_buf_wide) { - MultiByteToWideChar(cp_in, 0, - str, -1, path_buf_wide, path_buf_wide_len); + int path_buf_len = WideCharToMultiByte(cp_out, 0, + path_buf_wide, -1, NULL, 0, NULL, NULL); - if (*path_buf_wide) + if (path_buf_len) { - path_buf_len = WideCharToMultiByte(cp_out, 0, - path_buf_wide, -1, NULL, 0, NULL, NULL); + char *path_buf = (char*) + calloc(path_buf_len + sizeof(char), sizeof(char)); - if (path_buf_len) + if (path_buf) { - path_buf = (char*) - calloc(path_buf_len + sizeof(char), sizeof(char)); + WideCharToMultiByte(cp_out, 0, + path_buf_wide, -1, path_buf, + path_buf_len, NULL, NULL); - if (path_buf) - { - WideCharToMultiByte(cp_out, 0, - path_buf_wide, -1, path_buf, - path_buf_len, NULL, NULL); - - free(path_buf_wide); + free(path_buf_wide); - if (*path_buf) - return path_buf; + if (*path_buf) + return path_buf; - free(path_buf); - return NULL; - } - } - else - { - free(path_buf_wide); - return strdup(str); + free(path_buf); + return NULL; } } + else + { + free(path_buf_wide); + return strdup(str); + } } - } - else - return strdup(str); - if (path_buf_wide) free(path_buf_wide); + } return NULL; } @@ -379,13 +381,13 @@ char* local_to_utf8_string_alloc(const char *str) wchar_t* utf8_to_utf16_string_alloc(const char *str) { #ifdef _WIN32 - int len = 0; - int out_len = 0; + int len = 0; + int out_len = 0; #else - size_t len = 0; + size_t len = 0; size_t out_len = 0; #endif - wchar_t *buf = NULL; + wchar_t *buf = NULL; if (!str || !*str) return NULL; diff --git a/libretro-common/file/file_path.c b/libretro-common/file/file_path.c index 65b8f5b9..3dd53c98 100644 --- a/libretro-common/file/file_path.c +++ b/libretro-common/file/file_path.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2019 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this file (file_path.c). @@ -32,8 +32,7 @@ #include #include #include -#define VFS_FRONTEND -#include +#include