Exemple #1
0
void
LoaderInit(void)
{
    xf86MsgVerb(X_INFO, 2, "Loader magic: %p\n", (void *) xorg_symbols);
    xf86MsgVerb(X_INFO, 2, "Module ABI versions:\n");
    xf86ErrorFVerb(2, "\t%s: %d.%d\n", ABI_CLASS_ANSIC,
                   GET_ABI_MAJOR(LoaderVersionInfo.ansicVersion),
                   GET_ABI_MINOR(LoaderVersionInfo.ansicVersion));
    xf86ErrorFVerb(2, "\t%s: %d.%d\n", ABI_CLASS_VIDEODRV,
                   GET_ABI_MAJOR(LoaderVersionInfo.videodrvVersion),
                   GET_ABI_MINOR(LoaderVersionInfo.videodrvVersion));
    xf86ErrorFVerb(2, "\t%s : %d.%d\n", ABI_CLASS_XINPUT,
                   GET_ABI_MAJOR(LoaderVersionInfo.xinputVersion),
                   GET_ABI_MINOR(LoaderVersionInfo.xinputVersion));
    xf86ErrorFVerb(2, "\t%s : %d.%d\n", ABI_CLASS_EXTENSION,
                   GET_ABI_MAJOR(LoaderVersionInfo.extensionVersion),
                   GET_ABI_MINOR(LoaderVersionInfo.extensionVersion));

}
Exemple #2
0
void
LoaderInit(void)
{
#ifndef XORG_NO_SDKSYMS
    LogMessageVerb(X_INFO, 2, "Loader magic: %p\n", (void *) xorg_symbols);
#endif
    LogMessageVerb(X_INFO, 2, "Module ABI versions:\n");
    LogWrite(2, "\t%s: %d.%d\n", ABI_CLASS_ANSIC,
             GET_ABI_MAJOR(LoaderVersionInfo.ansicVersion),
             GET_ABI_MINOR(LoaderVersionInfo.ansicVersion));
    LogWrite(2, "\t%s: %d.%d\n", ABI_CLASS_VIDEODRV,
             GET_ABI_MAJOR(LoaderVersionInfo.videodrvVersion),
             GET_ABI_MINOR(LoaderVersionInfo.videodrvVersion));
    LogWrite(2, "\t%s : %d.%d\n", ABI_CLASS_XINPUT,
             GET_ABI_MAJOR(LoaderVersionInfo.xinputVersion),
             GET_ABI_MINOR(LoaderVersionInfo.xinputVersion));
    LogWrite(2, "\t%s : %d.%d\n", ABI_CLASS_EXTENSION,
             GET_ABI_MAJOR(LoaderVersionInfo.extensionVersion),
             GET_ABI_MINOR(LoaderVersionInfo.extensionVersion));

}
Exemple #3
0
static Bool
CheckVersion(const char *module, XF86ModuleVersionInfo * data,
             const XF86ModReqInfo * req)
{
    int vercode[4];
    long ver = data->xf86version;
    MessageType errtype;

    xf86Msg(X_INFO, "Module %s: vendor=\"%s\"\n",
            data->modname ? data->modname : "UNKNOWN!",
            data->vendor ? data->vendor : "UNKNOWN!");

    vercode[0] = ver / 10000000;
    vercode[1] = (ver / 100000) % 100;
    vercode[2] = (ver / 1000) % 100;
    vercode[3] = ver % 1000;
    xf86ErrorF("\tcompiled for %d.%d.%d", vercode[0], vercode[1], vercode[2]);
    if (vercode[3] != 0)
        xf86ErrorF(".%d", vercode[3]);
    xf86ErrorF(", module version = %d.%d.%d\n", data->majorversion,
               data->minorversion, data->patchlevel);

    if (data->moduleclass)
        xf86ErrorFVerb(2, "\tModule class: %s\n", data->moduleclass);

    ver = -1;
    if (data->abiclass) {
        int abimaj, abimin;
        int vermaj, vermin;

        if (!strcmp(data->abiclass, ABI_CLASS_ANSIC))
            ver = LoaderVersionInfo.ansicVersion;
        else if (!strcmp(data->abiclass, ABI_CLASS_VIDEODRV))
            ver = LoaderVersionInfo.videodrvVersion;
        else if (!strcmp(data->abiclass, ABI_CLASS_XINPUT))
            ver = LoaderVersionInfo.xinputVersion;
        else if (!strcmp(data->abiclass, ABI_CLASS_EXTENSION))
            ver = LoaderVersionInfo.extensionVersion;
        else if (!strcmp(data->abiclass, ABI_CLASS_FONT))
            ver = LoaderVersionInfo.fontVersion;

        abimaj = GET_ABI_MAJOR(data->abiversion);
        abimin = GET_ABI_MINOR(data->abiversion);
        xf86ErrorFVerb(2, "\tABI class: %s, version %d.%d\n",
                       data->abiclass, abimaj, abimin);
        if (ver != -1) {
            vermaj = GET_ABI_MAJOR(ver);
            vermin = GET_ABI_MINOR(ver);
            if (abimaj != vermaj) {
                if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
                    errtype = X_WARNING;
                else
                    errtype = X_ERROR;
                xf86MsgVerb(errtype, 0,
                            "module ABI major version (%d) doesn't"
                            " match the server's version (%d)\n",
                            abimaj, vermaj);
                if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
                    return FALSE;
            }
            else if (abimin > vermin) {
                if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
                    errtype = X_WARNING;
                else
                    errtype = X_ERROR;
                xf86MsgVerb(errtype, 0,
                            "module ABI minor version (%d) is "
                            "newer than the server's version "
                            "(%d)\n", abimin, vermin);
                if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
                    return FALSE;
            }
        }
    }

    /* Check against requirements that the caller has specified */
    if (req) {
        if (req->majorversion != MAJOR_UNSPEC) {
            if (data->majorversion != req->majorversion) {
                xf86MsgVerb(X_WARNING, 2, "module major version (%d) "
                            "doesn't match required major version (%d)\n",
                            data->majorversion, req->majorversion);
                return FALSE;
            }
            else if (req->minorversion != MINOR_UNSPEC) {
                if (data->minorversion < req->minorversion) {
                    xf86MsgVerb(X_WARNING, 2, "module minor version (%d) "
                                "is less than the required minor version (%d)\n",
                                data->minorversion, req->minorversion);
                    return FALSE;
                }
                else if (data->minorversion == req->minorversion &&
                         req->patchlevel != PATCH_UNSPEC) {
                    if (data->patchlevel < req->patchlevel) {
                        xf86MsgVerb(X_WARNING, 2, "module patch level (%d) "
                                    "is less than the required patch level (%d)\n",
                                    data->patchlevel, req->patchlevel);
                        return FALSE;
                    }
                }
            }
        }
        if (req->moduleclass) {
            if (!data->moduleclass ||
                strcmp(req->moduleclass, data->moduleclass)) {
                xf86MsgVerb(X_WARNING, 2, "Module class (%s) doesn't match "
                            "the required class (%s)\n",
                            data->moduleclass ? data->moduleclass : "<NONE>",
                            req->moduleclass);
                return FALSE;
            }
        }
        else if (req->abiclass != ABI_CLASS_NONE) {
            if (!data->abiclass || strcmp(req->abiclass, data->abiclass)) {
                xf86MsgVerb(X_WARNING, 2, "ABI class (%s) doesn't match the "
                            "required ABI class (%s)\n",
                            data->abiclass ? data->abiclass : "<NONE>",
                            req->abiclass);
                return FALSE;
            }
        }
        if ((req->abiclass != ABI_CLASS_NONE) &&
            req->abiversion != ABI_VERS_UNSPEC) {
            int reqmaj, reqmin, maj, min;

            reqmaj = GET_ABI_MAJOR(req->abiversion);
            reqmin = GET_ABI_MINOR(req->abiversion);
            maj = GET_ABI_MAJOR(data->abiversion);
            min = GET_ABI_MINOR(data->abiversion);
            if (maj != reqmaj) {
                xf86MsgVerb(X_WARNING, 2, "ABI major version (%d) doesn't "
                            "match the required ABI major version (%d)\n",
                            maj, reqmaj);
                return FALSE;
            }
            /* XXX Maybe this should be the other way around? */
            if (min > reqmin) {
                xf86MsgVerb(X_WARNING, 2, "module ABI minor version (%d) "
                            "is newer than that available (%d)\n", min, reqmin);
                return FALSE;
            }
        }
    }
    return TRUE;
}
static Bool
CheckRequirements(const XF86ModuleVersionInfo * data,
		  const XF86ModReqInfo * req)
{
    if (!req)
	return TRUE;

    if (!data) {
	xf86MsgVerb(X_WARNING, 2, "No version information to verify\n");
	return FALSE;
    }

    if (req->majorversion != MAJOR_UNSPEC) {
	if (data->majorversion != req->majorversion) {
	    xf86MsgVerb(X_WARNING, 2, "Module major version (%d) doesn't match"
			" required major version (%d)\n",
			data->majorversion, req->majorversion);
	    return FALSE;
	}

	if (req->minorversion != MINOR_UNSPEC) {
	    if (data->minorversion < req->minorversion) {
		xf86MsgVerb(X_WARNING, 2, "Module minor version (%d) is less"
			    " than the required minor version (%d)\n",
			    data->minorversion, req->minorversion);
		return FALSE;
	    }

	    if ((data->minorversion == req->minorversion) &&
		(req->patchlevel != PATCH_UNSPEC) &&
		(data->patchlevel < req->patchlevel)) {
		xf86MsgVerb(X_WARNING, 2, "Module patch level (%d) is less"
			    " than the required patch level (%d)\n",
			    data->patchlevel, req->patchlevel);
		return FALSE;
	    }
	}
    }

    if (req->moduleclass) {
	if (!data->moduleclass ||
	    strcmp(req->moduleclass, data->moduleclass)) {
	    xf86MsgVerb(X_WARNING, 2, "Module class (%s) doesn't match the"
			" required class (%s)\n",
			data->moduleclass ? data->moduleclass : "<NONE>",
			req->moduleclass);
	    return FALSE;
	}
    } else if (req->abiclass != ABI_CLASS_NONE) {
	if (!data->abiclass || strcmp(req->abiclass, data->abiclass)) {
	    xf86MsgVerb(X_WARNING, 2, "ABI class (%s) doesn't match the"
			" required ABI class (%s)\n",
			data->abiclass ? data->abiclass : "<NONE>",
			req->abiclass);
	    return FALSE;
	}
    }

    if ((req->abiclass != ABI_CLASS_NONE) &&
	(req->abiversion != ABI_VERS_UNSPEC)) {
	int reqmaj, reqmin, maj, min;

	reqmaj = GET_ABI_MAJOR(req->abiversion);
	maj = GET_ABI_MAJOR(data->abiversion);
	if (maj != reqmaj) {
	    xf86MsgVerb(X_WARNING, 2, "ABI major version (%d) doesn't match"
			" the required ABI major version (%d)\n",
			maj, reqmaj);
	    return FALSE;
	}

	reqmin = GET_ABI_MINOR(req->abiversion);
	min = GET_ABI_MINOR(data->abiversion);
	if (min < reqmin) {
	    xf86MsgVerb(X_WARNING, 2, "Module ABI minor version (%d) is older"
			" than that required (%d)\n", min, reqmin);
	    return FALSE;
	}
    }

    return TRUE;
}