X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib.h;h=43c38526349f9ae456c819e6d5582d3c7d189443;hb=bd926816f3b9d5982d1c497840c56724520c62dc;hp=5941b9ee856a970fa0eee7221b0b98212df933f6;hpb=7557f6e3a32aca16a33aa72f50601ae8c1e9e8d6;p=wimlib diff --git a/include/wimlib.h b/include/wimlib.h index 5941b9ee..43c38526 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.10.0, a C + * This is the documentation for the library interface of wimlib 1.13.0, 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,7 +408,7 @@ #define WIMLIB_MAJOR_VERSION 1 /** Minor version of the library (for example, the 2 in 1.2.5). */ -#define WIMLIB_MINOR_VERSION 10 +#define WIMLIB_MINOR_VERSION 13 /** Patch version of the library (for example, the 5 in 1.2.5). */ #define WIMLIB_PATCH_VERSION 0 @@ -409,15 +418,18 @@ extern "C" { #endif /* - * To represent file timestamps, wimlib's API uses the POSIX 'struct timespec'. - * This was probably a mistake because it doesn't play well with Visual Studio. - * In old VS versions it isn't present at all; in newer VS versions it is - * supposedly present, but I wouldn't trust it to be the same size as the one - * MinGW uses. The solution is to define a compatible structure ourselves when - * this header is included on Windows and the compiler is not MinGW. - */ -#if defined(_WIN32) && !defined(__GNUC__) -typedef struct { + * 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; @@ -426,9 +438,9 @@ typedef struct { #endif /* Nanoseconds (0-999999999) */ int32_t tv_nsec; -} wimlib_timespec; +}; #else -# define wimlib_timespec struct timespec /* standard definition */ +# define wimlib_timespec timespec /* standard definition */ #endif /** @@ -440,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 '\\' @@ -1582,13 +1594,13 @@ struct wimlib_dir_entry { uint64_t hard_link_group_id; /** Time this file was created. */ - wimlib_timespec creation_time; + struct wimlib_timespec creation_time; /** Time this file was last written to. */ - wimlib_timespec last_write_time; + struct wimlib_timespec last_write_time; /** Time this file was last accessed. */ - wimlib_timespec last_access_time; + struct wimlib_timespec last_access_time; /** The UNIX user ID of this file. This is a wimlib extension. * @@ -1617,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. @@ -1702,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 @@ -1895,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 @@ -2057,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 @@ -2558,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, }; @@ -3028,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, @@ -3246,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 *