Mesa (master): egl: Add and use make_library_path.
Chia-I Wu
olv at kemper.freedesktop.org
Sun Jan 24 13:25:35 UTC 2010
Module: Mesa
Branch: master
Commit: 21b2c0a6e5ecb6d542bd7d3750c5a0b745104edd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=21b2c0a6e5ecb6d542bd7d3750c5a0b745104edd
Author: Chia-I Wu <olvaffe at gmail.com>
Date: Sun Jan 24 21:04:35 2010 +0800
egl: Add and use make_library_path.
Add a platform specific function to turn a library name to a library
path. It is used to convert EGL_DRIVER or the default driver to a
library path that can be loaded.
---
src/egl/main/egldriver.c | 76 +++++++++++++++++++++++++++++----------------
1 files changed, 49 insertions(+), 27 deletions(-)
diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
index 97550ea..d997326 100644
--- a/src/egl/main/egldriver.c
+++ b/src/egl/main/egldriver.c
@@ -58,6 +58,20 @@ library_suffix(void)
}
+static EGLBoolean
+make_library_path(char *buf, unsigned int size, const char *name)
+{
+ EGLBoolean need_suffix;
+ const char *suffix = ".dll";
+ int ret;
+
+ need_suffix = (strchr(name, '.') == NULL);
+ ret = snprintf(buf, size, "%s%s", name, (need_suffix) ? suffix : "");
+
+ return ((unsigned int) ret < size);
+}
+
+
#elif defined(_EGL_PLATFORM_POSIX)
@@ -85,6 +99,24 @@ library_suffix(void)
}
+static EGLBoolean
+make_library_path(char *buf, unsigned int size, const char *name)
+{
+ EGLBoolean need_dir, need_suffix;
+ const char *suffix = ".so";
+ int ret;
+
+ need_dir = (strchr(name, '/') == NULL);
+ need_suffix = (strchr(name, '.') == NULL);
+
+ ret = snprintf(buf, size, "%s%s%s",
+ (need_dir) ? _EGL_DRIVER_SEARCH_DIR"/" : "", name,
+ (need_suffix) ? suffix : "");
+
+ return ((unsigned int) ret < size);
+}
+
+
#else /* _EGL_PLATFORM_NO_OS */
static const char DefaultDriverName[] = "builtin";
@@ -110,6 +142,14 @@ library_suffix(void)
}
+static EGLBoolean
+make_library_path(char *buf, unsigned int size, const char *name)
+{
+ int ret = snprintf(buf, size, name);
+ return ((unsigned int) ret < size);
+}
+
+
#endif
@@ -288,36 +328,21 @@ _eglPreloadUserDriver(void)
{
#if defined(_EGL_PLATFORM_POSIX) || defined(_EGL_PLATFORM_WINDOWS)
_EGLDriver *drv;
- char *env, *path;
- const char *suffix, *p;
+ char path[1024];
+ char *env;
env = getenv("EGL_DRIVER");
if (!env)
return EGL_FALSE;
- path = env;
- suffix = library_suffix();
-
- /* append suffix if there isn't */
- p = strrchr(path, '.');
- if (!p && suffix) {
- size_t len = strlen(path);
- char *tmp = malloc(len + strlen(suffix) + 2);
- if (tmp) {
- memcpy(tmp, path, len);
- tmp[len++] = '.';
- tmp[len] = '\0';
- strcat(tmp + len, suffix);
-
- path = tmp;
- }
- }
+ if (!make_library_path(path, sizeof(path), env))
+ return EGL_FALSE;
drv = _eglLoadDriver(path, NULL);
- if (path != env)
- free(path);
- if (!drv)
+ if (!drv) {
+ _eglLog(_EGL_WARNING, "EGL_DRIVER is set to an invalid driver");
return EGL_FALSE;
+ }
_eglGlobal.Drivers[_eglGlobal.NumDrivers++] = drv;
@@ -399,12 +424,9 @@ _eglPreloadDefaultDriver(void)
{
_EGLDriver *drv;
char path[1024];
- const char *suffix = library_suffix();
- if (suffix)
- snprintf(path, sizeof(path), "%s.%s", DefaultDriverName, suffix);
- else
- snprintf(path, sizeof(path), DefaultDriverName);
+ if (!make_library_path(path, sizeof(path), DefaultDriverName))
+ return EGL_FALSE;
drv = _eglLoadDriver(path, NULL);
if (!drv)
More information about the mesa-commit
mailing list