[client] egl: use new util_hasGLExt helper to check extensions

We previously used strstr, which can be prone to false positives when
the name of one extension is a substring of another extension.

This commit creates the helper function util_hasGLExt, which asserts
that the substring found in extension list is bounded by either spaces
or the beginning/end of the string.
This commit is contained in:
Quantum
2021-05-13 16:36:01 -04:00
committed by Geoffrey McRae
parent edbd6f6ade
commit f9a9953071
8 changed files with 47 additions and 7 deletions

View File

@@ -20,6 +20,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#ifndef _H_LG_COMMON_STRINGUTILS
#define _H_LG_COMMON_STRINGUTILS
#include <stdbool.h>
// vsprintf but with buffer allocation
int valloc_sprintf(char ** str, const char * format, va_list ap)
__attribute__ ((format (printf, 2, 0)));
@@ -28,4 +30,7 @@ int valloc_sprintf(char ** str, const char * format, va_list ap)
int alloc_sprintf(char ** str, const char * format, ...)
__attribute__ ((format (printf, 2, 3)));
// Find value in a list separated by delimiter.
bool str_containsValue(const char * list, char delimiter, const char * value);
#endif

View File

@@ -17,9 +17,13 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include "common/stringutils.h"
int valloc_sprintf(char ** str, const char * format, va_list ap)
{
@@ -64,3 +68,23 @@ int alloc_sprintf(char ** str, const char * format, ...)
va_end(ap);
return ret;
}
bool str_containsValue(const char * list, char delimiter, const char * value)
{
size_t len = strlen(value);
const char span[] = {delimiter, '\0'};
while (*list)
{
if (*list == delimiter)
{
++list;
continue;
}
size_t n = strcspn(list, span);
if (n == len && strncmp(value, list, n) == 0)
return true;
list += n;
}
return false;
}