From af25f47bdce187e76789fa9983096516e25998c0 Mon Sep 17 00:00:00 2001 From: Martin Peres Date: Thu, 15 Oct 2020 08:47:50 +0300 Subject: [PATCH] glx/extensions: split set_glx_extension into find_ and set_ An upcoming commit will require to find an extension in a list. Rather than duplicating part of the code from set_glx_extension, split it into find_extension and set_glx_extension. NOTE: set_glx_extension is a bit of a misnomer since it is also used for gl extensions. This is why the find function is named find_extension rather than find_glx_extension. Reviewed-by: Adam Jackson Reviewed-by: Ian Romanick Signed-off-by: Martin Peres Part-of: --- src/glx/glxextensions.c | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c index f4d3807a810..82fd2c8dde9 100644 --- a/src/glx/glxextensions.c +++ b/src/glx/glxextensions.c @@ -351,6 +351,29 @@ static void __glXProcessServerString(const struct extension_info *ext, const char *server_string, unsigned char *server_support); +/** + * Find an extension in the list based on its name. + * + * \param ext List of extensions where to search. + * \param name Name of the extension. + * \param name_len Length, in characters, of the extension name. + */ +static const struct extension_info * +find_extension(const struct extension_info *ext, const char *name, + unsigned name_len) +{ + unsigned i; + + for (i = 0; ext[i].name != NULL; i++) { + if ((name_len == ext[i].name_len) + && (strncmp(ext[i].name, name, name_len) == 0)) { + return &ext[i]; + } + } + + return NULL; +} + /** * Set the state of a GLX extension. * @@ -360,25 +383,18 @@ static void __glXProcessServerString(const struct extension_info *ext, * \param supported Table in which the state of the extension is to be set. */ static void -set_glx_extension(const struct extension_info *ext, +set_glx_extension(const struct extension_info *ext_list, const char *name, unsigned name_len, GLboolean state, unsigned char *supported) { - unsigned i; + const struct extension_info *ext = find_extension(ext_list, name, name_len); + if (!ext) + return; - - for (i = 0; ext[i].name != NULL; i++) { - if ((name_len == ext[i].name_len) - && (strncmp(ext[i].name, name, name_len) == 0)) { - if (state) { - SET_BIT(supported, ext[i].bit); - } - else { - CLR_BIT(supported, ext[i].bit); - } - - return; - } + if (state) { + SET_BIT(supported, ext->bit); + } else { + CLR_BIT(supported, ext->bit); } }