/* * Find out device-mapper's major version number the first time * this is called and whether or not we support it. */ int dm_check_version(void) { char libversion[64], dmversion[64]; const char *compat = ""; if (_version_checked) return _version_ok; _version_checked = 1; if (_check_version(dmversion, sizeof(dmversion), _dm_compat)) return 1; if (!_dm_compat) goto bad; log_verbose("device-mapper ioctl protocol version %u failed. " "Trying protocol version 1.", _dm_version); _dm_version = 1; if (_check_version(dmversion, sizeof(dmversion), 0)) { log_verbose("Using device-mapper ioctl protocol version 1"); return 1; } compat = "(compat)"; dm_get_library_version(libversion, sizeof(libversion)); log_error("Incompatible libdevmapper %s%s and kernel driver %s", libversion, compat, dmversion); bad: _version_ok = 0; return 0; }
static int dm_lib_prereq (void) { char version[64]; int v[3]; #if defined(LIBDM_API_DEFERRED) int minv[3] = {1, 2, 89}; #elif defined(DM_SUBSYSTEM_UDEV_FLAG0) int minv[3] = {1, 2, 82}; #elif defined(LIBDM_API_COOKIE) int minv[3] = {1, 2, 38}; #else int minv[3] = {1, 2, 8}; #endif dm_get_library_version(version, sizeof(version)); condlog(3, "libdevmapper version %s", version); if (sscanf(version, "%d.%d.%d ", &v[0], &v[1], &v[2]) != 3) { condlog(0, "invalid libdevmapper version %s", version); return 1; } if VERSION_GE(v, minv) return 0; condlog(0, "libdevmapper version must be >= %d.%.2d.%.2d", minv[0], minv[1], minv[2]); return 1; }
static int dm_lib_prereq (void) { char version[64]; int v[3]; int minv[3] = {1, 2, 38}; dm_get_library_version(version, sizeof(version)); condlog(3, "libdevmapper version %s", version); sscanf(version, "%d.%d.%d ", &v[0], &v[1], &v[2]); if VERSION_GE(v, minv) return 0; condlog(0, "libdevmapper version must be >= %d.%.2d.%.2d", minv[0], minv[1], minv[2]); return 1; }