diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h index 88b2c0f7..737d0540 100644 --- a/include/private/vkd3d_common.h +++ b/include/private/vkd3d_common.h @@ -231,16 +231,19 @@ static inline bool is_power_of_two(unsigned int x) return x && !(x & (x -1)); } -static inline void vkd3d_parse_version(const char *version, int *major, int *minor) +static inline void vkd3d_parse_version(const char *version, int *major, int *minor, int *patch) { - *major = atoi(version); + char *end; - while (isdigit(*version)) - ++version; + *major = strtol(version, &end, 10); + version = end; if (*version == '.') ++version; - - *minor = atoi(version); + *minor = strtol(version, &end, 10); + version = end; + if (*version == '.') + ++version; + *patch = strtol(version, NULL, 10); } static inline uint32_t float_bits_to_uint32(float f) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 301194ae..78d8d6e7 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -48,11 +48,11 @@ static const void *vkd3d_find_struct_(const struct vkd3d_struct *chain, static uint32_t vkd3d_get_vk_version(void) { - int major, minor; + int major, minor, patch; - vkd3d_parse_version(PACKAGE_VERSION, &major, &minor); - INFO("vkd3d-proton - applicationVersion: %d.%d.0.\n", major, minor); - return VK_MAKE_VERSION(major, minor, 0); + vkd3d_parse_version(PACKAGE_VERSION, &major, &minor, &patch); + INFO("vkd3d-proton - applicationVersion: %d.%d.%d.\n", major, minor, patch); + return VK_MAKE_VERSION(major, minor, patch); } struct vkd3d_optional_extension_info