vo_opengl: check extensions properly

With the previous commit, we have no need anymore to check a part of an
extension string (for ignoring a prefix). So check the extension string
properly, instead of just using the broken old strstr() method, which
could accidentally ignore prefixes or suffixes. Do this by extending
the check to whether the extension name is properly delimited by spaces
or string start/end.
This commit is contained in:
wm4 2015-03-25 12:36:31 +01:00
parent 85c21ae409
commit 6d9f15a8ab
1 changed files with 9 additions and 1 deletions

View File

@ -79,6 +79,14 @@ static void GLAPIENTRY dummy_glBindFramebuffer(GLenum target, GLuint framebuffer
assert(framebuffer == 0);
}
static bool check_ext(GL *gl, const char *name)
{
const char *exts = gl->extensions;
char *s = strstr(exts, name);
char *e = s ? s + strlen(name) : NULL;
return s && (s == exts || s[-1] == ' ') && (e[0] == ' ' || !e[0]);
}
#define FN_OFFS(name) offsetof(GL, name)
#define DEF_FN(name) {FN_OFFS(name), {"gl" # name}}
@ -418,7 +426,7 @@ void mpgl_load_functions2(GL *gl, void *(*get_fn)(void *ctx, const char *n),
if (ver_core)
must_exist = version >= ver_core;
if (section->extension && strstr(gl->extensions, section->extension))
if (section->extension && check_ext(gl, section->extension))
exists = true;
exists |= must_exist;