/* mz_os.h -- System functions part of the minizip-ng project Copyright (C) 2010-2021 Nathan Moinvaziri https://github.com/zlib-ng/minizip-ng This program is distributed under the terms of the same license as zlib. See the accompanying LICENSE file for the full text of the license. */ #ifndef MZ_OS_H #define MZ_OS_H #ifdef __cplusplus extern "C" { #endif /***************************************************************************/ #if defined(__APPLE__) # define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_OSX_DARWIN) #elif defined(__riscos__) # define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_RISCOS) #elif defined(_WIN32) # define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_WINDOWS_NTFS) #else # define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_UNIX) #endif #if defined(HAVE_LZMA) || defined(HAVE_LIBCOMP) # define MZ_VERSION_MADEBY_ZIP_VERSION (63) #elif defined(HAVE_WZAES) # define MZ_VERSION_MADEBY_ZIP_VERSION (51) #elif defined(HAVE_BZIP2) # define MZ_VERSION_MADEBY_ZIP_VERSION (46) #else # define MZ_VERSION_MADEBY_ZIP_VERSION (45) #endif #define MZ_VERSION_MADEBY ((MZ_VERSION_MADEBY_HOST_SYSTEM << 8) | \ (MZ_VERSION_MADEBY_ZIP_VERSION)) #define MZ_PATH_SLASH_UNIX ('/') #if defined(_WIN32) # define MZ_PATH_SLASH_PLATFORM ('\\') #else # define MZ_PATH_SLASH_PLATFORM (MZ_PATH_SLASH_UNIX) #endif /***************************************************************************/ #if defined(_WIN32) struct dirent { char d_name[256]; }; typedef void* DIR; #else #include #endif /***************************************************************************/ /* Shared functions */ int32_t mz_path_combine(char *path, const char *join, int32_t max_path); /* Combines two paths */ int32_t mz_path_append_slash(char *path, int32_t max_path, char slash); /* Appends a path slash on to the end of the path */ int32_t mz_path_remove_slash(char *path); /* Removes a path slash from the end of the path */ int32_t mz_path_has_slash(const char *path); /* Returns whether or not the path ends with slash */ int32_t mz_path_convert_slashes(char *path, char slash); /* Converts the slashes in a path */ int32_t mz_path_compare_wc(const char *path, const char *wildcard, uint8_t ignore_case); /* Compare two paths with wildcard */ int32_t mz_path_resolve(const char *path, char *target, int32_t max_target); /* Resolves path */ int32_t mz_path_remove_filename(char *path); /* Remove the filename from a path */ int32_t mz_path_remove_extension(char *path); /* Remove the extension from a path */ int32_t mz_path_get_filename(const char *path, const char **filename); /* Get the filename from a path */ int32_t mz_dir_make(const char *path); /* Creates a directory recursively */ int32_t mz_file_get_crc(const char *path, uint32_t *result_crc); /* Gets the crc32 hash of a file */ /***************************************************************************/ /* Platform specific functions */ wchar_t *mz_os_unicode_string_create(const char *string, int32_t encoding); /* Create unicode string from a utf8 string */ void mz_os_unicode_string_delete(wchar_t **string); /* Delete a unicode string that was created */ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding); /* Create a utf8 string from a string with another encoding */ void mz_os_utf8_string_delete(uint8_t **string); /* Delete a utf8 string that was created */ int32_t mz_os_rand(uint8_t *buf, int32_t size); /* Random number generator (not cryptographically secure) */ int32_t mz_os_rename(const char *source_path, const char *target_path); /* Rename a file */ int32_t mz_os_unlink(const char *path); /* Delete an existing file */ int32_t mz_os_file_exists(const char *path); /* Check to see if a file exists */ int64_t mz_os_get_file_size(const char *path); /* Gets the length of a file */ int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *accessed_date, time_t *creation_date); /* Gets a file's modified, access, and creation dates if supported */ int32_t mz_os_set_file_date(const char *path, time_t modified_date, time_t accessed_date, time_t creation_date); /* Sets a file's modified, access, and creation dates if supported */ int32_t mz_os_get_file_attribs(const char *path, uint32_t *attributes); /* Gets a file's attributes */ int32_t mz_os_set_file_attribs(const char *path, uint32_t attributes); /* Sets a file's attributes */ int32_t mz_os_make_dir(const char *path); /* Recursively creates a directory */ DIR* mz_os_open_dir(const char *path); /* Opens a directory for listing */ struct dirent* mz_os_read_dir(DIR *dir); /* Reads a directory listing entry */ int32_t mz_os_close_dir(DIR *dir); /* Closes a directory that has been opened for listing */ int32_t mz_os_is_dir(const char *path); /* Checks to see if path is a directory */ int32_t mz_os_is_symlink(const char *path); /* Checks to see if path is a symbolic link */ int32_t mz_os_make_symlink(const char *path, const char *target_path); /* Creates a symbolic link pointing to a target */ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_target_path); /* Gets the target path for a symbolic link */ uint64_t mz_os_ms_time(void); /* Gets the time in milliseconds */ /***************************************************************************/ #ifdef __cplusplus } #endif #endif