mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-08-05 10:14:04 +00:00
[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:
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user