| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 | 
							- Platform Helpers
 
- ================
 
- These functions/structures/types are used to perform actions that
 
- typically don't have shared functions across different operating systems
 
- and platforms.
 
- .. code:: cpp
 
-    #include <util/platform.h>
 
- File Functions
 
- --------------
 
- .. function:: FILE *os_wfopen(const wchar_t *path, const char *mode)
 
-    Opens a file with a wide string path.
 
- ----------------------
 
- .. function:: FILE *os_fopen(const char *path, const char *mode)
 
-    Opens a file with a UTF8 string path.
 
- ----------------------
 
- .. function:: int64_t os_fgetsize(FILE *file)
 
-    Returns a file's size.
 
- ----------------------
 
- .. function:: int os_stat(const char *file, struct stat *st)
 
-    Equivalent to the posix *stat* function.
 
- ----------------------
 
- .. function:: int os_fseeki64(FILE *file, int64_t offset, int origin)
 
-    Equivalent to fseek.
 
- ----------------------
 
- .. function:: int64_t os_ftelli64(FILE *file)
 
-    Gets the current file position.
 
- ----------------------
 
- .. function:: size_t os_fread_utf8(FILE *file, char **pstr)
 
-    Reads a UTF8 encoded file and allocates a pointer to the UTF8 string.
 
- ----------------------
 
- .. function:: char *os_quick_read_utf8_file(const char *path)
 
-    Reads a UTF8 encoded file and returns an allocated pointer to the
 
-    string.
 
- ----------------------
 
- .. function:: bool os_quick_write_utf8_file(const char *path, const char *str, size_t len, bool marker)
 
-    Writes a UTF8 encoded file.
 
- ----------------------
 
- .. function:: bool os_quick_write_utf8_file_safe(const char *path, const char *str, size_t len, bool marker, const char *temp_ext, const char *backup_ext)
 
-    Writes a UTF8 encoded file with overwrite corruption prevention.
 
- ----------------------
 
- .. function:: int64_t os_get_file_size(const char *path)
 
-    Gets a file's size.
 
- ----------------------
 
- .. function:: int64_t os_get_free_space(const char *path)
 
-    Gets free space of a specific file path.
 
- ---------------------
 
- String Conversion Functions
 
- ---------------------------
 
- .. function:: size_t os_utf8_to_wcs(const char *str, size_t len, wchar_t *dst, size_t dst_size)
 
-    Converts a UTF8 string to a wide string.
 
- ----------------------
 
- .. function:: size_t os_wcs_to_utf8(const wchar_t *str, size_t len, char *dst, size_t dst_size)
 
-    Converts a wide string to a UTF8 string.
 
- ----------------------
 
- .. function:: size_t os_utf8_to_wcs_ptr(const char *str, size_t len, wchar_t **pstr)
 
-    Gets an bmalloc-allocated wide string converted from a UTF8 string.
 
- ----------------------
 
- .. function:: size_t os_wcs_to_utf8_ptr(const wchar_t *str, size_t len, char **pstr)
 
-    Gets an bmalloc-allocated UTF8 string converted from a wide string.
 
- ---------------------
 
- Number/String Conversion Functions
 
- ----------------------------------
 
- .. function:: double os_strtod(const char *str)
 
-    Converts a string to a double.
 
- ----------------------
 
- .. function:: int os_dtostr(double value, char *dst, size_t size)
 
-    Converts a double to a string.
 
- ---------------------
 
- Dynamic Link Library Functions
 
- ------------------------------
 
- These functions are roughly equivalent to dlopen/dlsym/dlclose.
 
- .. function:: void *os_dlopen(const char *path)
 
-    Opens a dynamic library.
 
- ----------------------
 
- .. function:: void *os_dlsym(void *module, const char *func)
 
-    Returns a symbol from a dynamic library.
 
- ----------------------
 
- .. function:: void os_dlclose(void *module)
 
-    Closes a dynamic library.
 
- ---------------------
 
- .. function:: bool os_is_obs_plugin(const char *path)
 
-    Returns true if the path is a dynamic library that looks like an OBS plugin.
 
-    Currently only needed on Windows for performance reasons.
 
- ---------------------
 
- CPU Usage Functions
 
- -------------------
 
- .. function:: os_cpu_usage_info_t *os_cpu_usage_info_start(void)
 
-    Creates a CPU usage information object.
 
- ----------------------
 
- .. function:: double              os_cpu_usage_info_query(os_cpu_usage_info_t *info)
 
-    Queries the current CPU usage.
 
- ----------------------
 
- .. function:: void                os_cpu_usage_info_destroy(os_cpu_usage_info_t *info)
 
-    Destroys a CPU usage information object.
 
- ---------------------
 
- Sleep/Time Functions
 
- --------------------
 
- .. function:: bool os_sleepto_ns(uint64_t time_target)
 
-    Sleeps to a specific time with high precision, in nanoseconds.
 
- ---------------------
 
- .. function:: bool os_sleepto_ns_fast(uint64_t time_target)
 
-    Sleeps to a specific time without high precision, in nanoseconds.
 
-    The function won't return until reaching the specific time.
 
- ---------------------
 
- .. function:: void os_sleep_ms(uint32_t duration)
 
-    Sleeps for a specific number of milliseconds.
 
- ---------------------
 
- .. function:: uint64_t os_gettime_ns(void)
 
-    Gets the current high-precision system time, in nanoseconds.
 
- ---------------------
 
- Other Path/File Functions
 
- -------------------------
 
- .. function:: int os_get_config_path(char *dst, size_t size, const char *name)
 
-               char *os_get_config_path_ptr(const char *name)
 
-    Gets the user-specific application configuration data path.
 
- ---------------------
 
- .. function:: int os_get_program_data_path(char *dst, size_t size, const char *name)
 
-               char *os_get_program_data_path_ptr(const char *name)
 
-    Gets the application configuration data path.
 
- ---------------------
 
- .. function:: bool os_file_exists(const char *path)
 
-    Returns true if a file/directory exists, false otherwise.
 
- ---------------------
 
- .. function:: size_t os_get_abs_path(const char *path, char *abspath, size_t size)
 
-               char *os_get_abs_path_ptr(const char *path)
 
-    Converts a relative path to an absolute path.
 
- ---------------------
 
- .. function:: const char *os_get_path_extension(const char *path)
 
-    Returns the extension portion of a path string.
 
- ---------------------
 
- .. type:: typedef struct os_dir os_dir_t
 
-    A directory object.
 
- .. type:: struct os_dirent
 
-    A directory entry record.
 
- .. member:: char os_dirent.d_name[256]
 
-    The directory entry name.
 
- .. member:: bool os_dirent.directory
 
-    *true* if the entry is a directory.
 
- ---------------------
 
- .. function:: os_dir_t *os_opendir(const char *path)
 
-    Opens a directory object to enumerate files within the directory.
 
- ---------------------
 
- .. function:: struct os_dirent *os_readdir(os_dir_t *dir)
 
-    Returns the linked list of directory entries.
 
- ---------------------
 
- .. function:: void os_closedir(os_dir_t *dir)
 
-    Closes a directory object.
 
- ---------------------
 
- .. type:: struct os_globent
 
-    A glob entry.
 
-    
 
- .. member:: char *os_globent.path
 
-    The full path to the glob entry.
 
- .. member:: bool os_globent.directory
 
-    *true* if the glob entry is a directory, *false* otherwise.
 
- .. type:: struct os_glob_info
 
-    A glob object.
 
- .. member:: size_t             os_glob_info.gl_pathc
 
-    Number of glob entries.
 
- .. member:: struct os_globent *os_glob_info.gl_pathv
 
-    Array of glob entries.
 
- .. type:: typedef struct os_glob_info os_glob_t
 
- ---------------------
 
- .. function:: int os_glob(const char *pattern, int flags, os_glob_t **pglob)
 
-    Enumerates files based upon a glob string.
 
- ---------------------
 
- .. function:: void os_globfree(os_glob_t *pglob)
 
-    Frees a glob object.
 
- ---------------------
 
- .. function:: int os_unlink(const char *path)
 
-    Deletes a file.
 
- ---------------------
 
- .. function:: int os_rmdir(const char *path)
 
-    Deletes a directory.
 
- ---------------------
 
- .. function:: char *os_getcwd(char *path, size_t size)
 
-    Returns a new bmalloc-allocated path to the current working
 
-    directory.
 
- ---------------------
 
- .. function:: int os_chdir(const char *path)
 
-    Changes the current working directory.
 
- ---------------------
 
- .. function:: int os_mkdir(const char *path)
 
-    Creates a directory.
 
- ---------------------
 
- .. function:: int os_mkdirs(const char *path)
 
-    Creates a full directory path if it doesn't exist.
 
- ---------------------
 
- .. function:: int os_rename(const char *old_path, const char *new_path)
 
-    Renames a file.
 
- ---------------------
 
- .. function:: int os_copyfile(const char *file_in, const char *file_out)
 
-    Copies a file.
 
- ---------------------
 
- .. function:: int os_safe_replace(const char *target_path, const char *from_path, const char *backup_path)
 
-    Safely replaces a file.
 
- ---------------------
 
- .. function:: char *os_generate_formatted_filename(const char *extension, bool space, const char *format)
 
-    Returns a new bmalloc-allocated filename generated from specific
 
-    formatting.
 
- ---------------------
 
- Sleep-Inhibition Functions
 
- --------------------------
 
- These functions/types are used to inhibit the computer from going to
 
- sleep.
 
- .. type:: struct os_inhibit_info
 
- .. type:: typedef struct os_inhibit_info os_inhibit_t
 
- ---------------------
 
- .. function:: os_inhibit_t *os_inhibit_sleep_create(const char *reason)
 
-    Creates a sleep inhibition object.
 
- ---------------------
 
- .. function:: bool os_inhibit_sleep_set_active(os_inhibit_t *info, bool active)
 
-    Activates/deactivates a sleep inhibition object.
 
- ---------------------
 
- .. function:: void os_inhibit_sleep_destroy(os_inhibit_t *info)
 
-    Destroys a sleep inhibition object.  If the sleep inhibition object
 
-    was active, it will be deactivated.
 
- ---------------------
 
- Other Functions
 
- ---------------
 
- .. function:: void os_breakpoint(void)
 
-    Triggers a debugger breakpoint (or crashes the program if no debugger
 
-    present).
 
- ---------------------
 
- .. function:: int os_get_physical_cores(void)
 
-    Returns the number of physical cores available.
 
- ---------------------
 
- .. function:: int os_get_logical_cores(void)
 
-    Returns the number of logical cores available.
 
- ---------------------
 
- .. function:: uint64_t os_get_sys_free_size(void)
 
-    Returns the amount of memory available.
 
- ---------------------
 
- .. type:: struct os_proc_memory_usage
 
-    Memory usage structure.
 
- .. member:: uint64_t os_proc_memory_usage.resident_size
 
-    Resident size.
 
- .. member:: uint64_t os_proc_memory_usage.virtual_size
 
-    Virtual size.
 
- .. type:: typedef struct os_proc_memory_usage os_proc_memory_usage_t
 
- ---------------------
 
- .. function:: bool os_get_proc_memory_usage(os_proc_memory_usage_t *usage)
 
-    Gets memory usage of the current process.
 
- ---------------------
 
- .. function:: uint64_t os_get_proc_resident_size(void)
 
-    Returns the resident memory size of the current process.
 
- ---------------------
 
- .. function:: uint64_t os_get_proc_virtual_size(void)
 
-    Returns the virtual memory size of the current process.
 
- ---------------------
 
- .. function:: bool os_get_emulation_status(void)
 
-    Returns true if the current process is a x64 binary and is being emulated or translated
 
-    by the host operating system. On macOS, it returns true when a x64 binary is 
 
-    being translated by Rosetta and running on Apple Silicon Macs. This function is not yet
 
-    implemented on Windows and Linux and will always return false on those platforms.
 
 
  |