X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib.h;h=35d2236f8994cf3186958deac7c992f78927d811;hb=38bd45bb7e08f2072e256afd5bcc21ceb0d97b8e;hp=277932d61cc8f340cac5ac6b281d58051fea2aaa;hpb=4e32f48feb64932954953a87f064170500f93221;p=wimlib diff --git a/include/wimlib.h b/include/wimlib.h index 277932d6..35d2236f 100644 --- a/include/wimlib.h +++ b/include/wimlib.h @@ -11,11 +11,11 @@ /** * @mainpage * - * This is the documentation for the library interface of wimlib 1.9.2, a C + * This is the documentation for the library interface of wimlib 1.13.1, a C * library for creating, modifying, extracting, and mounting files in the - * Windows Imaging Format. This documentation is intended for developers only. - * If you have installed wimlib and want to know how to use the @b wimlib-imagex - * program, please see the manual pages and also the README file. * * @section sec_installing Installing @@ -31,13 +31,16 @@ * * Download the Windows binary distribution with the appropriate architecture * (i686 or x86_64 --- also called "x86" and "amd64" respectively) from - * https://wimlib.net. Link your program with the libwim-15.dll file. Make - * sure to also download the source code so you can get wimlib.h, as it is not - * included in the binary distribution. If you need to access the DLL from - * other programming languages, note that the calling convention is "cdecl". + * https://wimlib.net. Link your program with libwim-15.dll. If needed by your + * programming language or development environment, the import library + * libwim.lib and C/C++ header wimlib.h can be found in the directory "devel" in + * the ZIP file. * - * Note that wimlib is developed using MinGW-w64, and there may be a little work - * required if you plan to use the header and DLL with Visual Studio. + * If you need to access the DLL from non-C/C++ programming languages, note that + * the calling convention is "cdecl". + * + * If you want to build wimlib from source on Windows, see README.WINDOWS. This + * is only needed if you are making modifications to wimlib. * * @section sec_examples Examples * @@ -388,8 +391,14 @@ #include #include -#include -#include +#ifndef __cplusplus +# if defined(_MSC_VER) && _MSC_VER < 1800 /* VS pre-2013? */ + typedef unsigned char bool; +# else +# include +# endif +#endif +#include #include /** @addtogroup G_general @@ -399,15 +408,41 @@ #define WIMLIB_MAJOR_VERSION 1 /** Minor version of the library (for example, the 2 in 1.2.5). */ -#define WIMLIB_MINOR_VERSION 9 +#define WIMLIB_MINOR_VERSION 13 /** Patch version of the library (for example, the 5 in 1.2.5). */ -#define WIMLIB_PATCH_VERSION 2 +#define WIMLIB_PATCH_VERSION 1 #ifdef __cplusplus extern "C" { #endif +/* + * To represent file timestamps, wimlib's API originally used the POSIX 'struct + * timespec'. This was a mistake because when building wimlib for 32-bit + * Windows with MinGW we ended up originally using 32-bit time_t which isn't + * year 2038-safe, and therefore we had to later add fields like + * 'creation_time_high' to hold the high 32 bits of each timestamp. Moreover, + * old Visual Studio versions did not define struct timespec, while newer ones + * define it but with 64-bit tv_sec. So to at least avoid a missing or + * incompatible 'struct timespec' definition, define the correct struct + * ourselves when this header is included on Windows. + */ +#ifdef _WIN32 +struct wimlib_timespec { + /* Seconds since start of UNIX epoch (January 1, 1970) */ +#ifdef _WIN64 + int64_t tv_sec; +#else + int32_t tv_sec; +#endif + /* Nanoseconds (0-999999999) */ + int32_t tv_nsec; +}; +#else +# define wimlib_timespec timespec /* standard definition */ +#endif + /** * Opaque structure that represents a WIM, possibly backed by an on-disk file. * See @ref sec_basic_wim_handling_concepts for more information. @@ -417,14 +452,14 @@ typedef struct WIMStruct WIMStruct; #define WIMLIB_WIMSTRUCT_DECLARED #endif -#ifdef __WIN32__ +#ifdef _WIN32 typedef wchar_t wimlib_tchar; #else /** See @ref sec_encodings */ typedef char wimlib_tchar; #endif -#ifdef __WIN32__ +#ifdef _WIN32 /** Path separator for WIM paths passed back to progress callbacks. * This is forward slash on UNIX and backslash on Windows. */ # define WIMLIB_WIM_PATH_SEPARATOR '\\' @@ -1559,13 +1594,13 @@ struct wimlib_dir_entry { uint64_t hard_link_group_id; /** Time this file was created. */ - struct timespec creation_time; + struct wimlib_timespec creation_time; /** Time this file was last written to. */ - struct timespec last_write_time; + struct wimlib_timespec last_write_time; /** Time this file was last accessed. */ - struct timespec last_access_time; + struct wimlib_timespec last_access_time; /** The UNIX user ID of this file. This is a wimlib extension. * @@ -1594,7 +1629,21 @@ struct wimlib_dir_entry { * object_id.object_id is not all zeroes. */ struct wimlib_object_id object_id; - uint64_t reserved[6]; + /** High 32 bits of the seconds portion of the creation timestamp, + * filled in if @p wimlib_timespec.tv_sec is only 32-bit. */ + int32_t creation_time_high; + + /** High 32 bits of the seconds portion of the last write timestamp, + * filled in if @p wimlib_timespec.tv_sec is only 32-bit. */ + int32_t last_write_time_high; + + /** High 32 bits of the seconds portion of the last access timestamp, + * filled in if @p wimlib_timespec.tv_sec is only 32-bit. */ + int32_t last_access_time_high; + + int32_t reserved2; + + uint64_t reserved[4]; /** * Variable-length array of streams that make up this file. @@ -1679,8 +1728,9 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour /** UNIX-like systems only: Store the UNIX owner, group, mode, and device ID * (major and minor number) of each file. In addition, capture special files - * such as device nodes and FIFOs. See the documentation for the - * --unix-data option to wimcapture for more information. */ + * such as device nodes and FIFOs. Since wimlib v1.11.0, on Linux also capture + * extended attributes. See the documentation for the --unix-data option + * to wimcapture for more information. */ #define WIMLIB_ADD_FLAG_UNIX_DATA 0x00000010 /** Do not capture security descriptors. Only has an effect in NTFS-3G capture @@ -1872,9 +1922,8 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour * wimlib_extract_paths() when passed multiple paths. */ #define WIMLIB_EXTRACT_FLAG_NTFS 0x00000001 -/** UNIX-like systems only: Extract special UNIX data captured with - * ::WIMLIB_ADD_FLAG_UNIX_DATA. This flag cannot be combined with - * ::WIMLIB_EXTRACT_FLAG_NTFS. */ +/** UNIX-like systems only: Extract UNIX-specific metadata captured with + * ::WIMLIB_ADD_FLAG_UNIX_DATA. */ #define WIMLIB_EXTRACT_FLAG_UNIX_DATA 0x00000020 /** Do not extract security descriptors. This flag cannot be combined with @@ -2034,8 +2083,7 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour * name, a colon, then the name of the data stream. */ #define WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_WINDOWS 0x00000010 -/** Use UNIX metadata if available in the WIM image. See - * ::WIMLIB_ADD_FLAG_UNIX_DATA. */ +/** Support UNIX owners, groups, modes, and special files. */ #define WIMLIB_MOUNT_FLAG_UNIX_DATA 0x00000020 /** Allow other users to see the mounted filesystem. This passes the @c @@ -2535,6 +2583,8 @@ enum wimlib_error_code { WIMLIB_ERR_DUPLICATE_EXPORTED_IMAGE = 87, WIMLIB_ERR_CONCURRENT_MODIFICATION_DETECTED = 88, WIMLIB_ERR_SNAPSHOT_FAILURE = 89, + WIMLIB_ERR_INVALID_XATTR = 90, + WIMLIB_ERR_SET_XATTR = 91, }; @@ -3005,6 +3055,9 @@ wimlib_extract_image_from_pipe_with_progress(int pipe_fd, * are otherwise delimited by the newline character. However, quotes will be * stripped if present. * + * If @p path_list_file is @c NULL, then the pathlist file is read from standard + * input. + * * The error codes are the same as those returned by wimlib_extract_paths(), * except that wimlib_extract_pathlist() returns an appropriate error code if it * cannot read the path list file (e.g. ::WIMLIB_ERR_OPEN, ::WIMLIB_ERR_STAT, @@ -3223,6 +3276,16 @@ wimlib_get_image_property(const WIMStruct *wim, int image, extern uint32_t wimlib_get_version(void); +/** + * @ingroup G_general + * + * Since wimlib v1.13.0: like wimlib_get_version(), but returns the full + * PACKAGE_VERSION string that was set at build time. (This allows a beta + * release to be distinguished from an official release.) + */ +extern const wimlib_tchar * +wimlib_get_version_string(void); + /** * @ingroup G_wim_information *