Imported version parsing from EGL branch.
diff --git a/src/opengl.c b/src/opengl.c
index 273d2c5..8c28fec 100644
--- a/src/opengl.c
+++ b/src/opengl.c
@@ -30,6 +30,7 @@
 
 #include "internal.h"
 
+#include <stdio.h>
 #include <string.h>
 #include <limits.h>
 
@@ -40,47 +41,38 @@
 
 static GLboolean parseGLVersion(int* major, int* minor, int* rev)
 {
-    GLuint _major, _minor = 0, _rev = 0;
-    const GLubyte* version;
-    const GLubyte* ptr;
-    const char* glesPrefix = "OpenGL ES ";
+    int i, _major, _minor = 0, _rev = 0;
+    const char* version;
+    const char* prefixes[] =
+    {
+        "OpenGL ES ",
+        NULL
+    };
 
-    version = glGetString(GL_VERSION);
+    version = (const char*) glGetString(GL_VERSION);
     if (!version)
     {
         _glfwSetError(GLFW_PLATFORM_ERROR, "Failed to retrieve version string");
-        return;
+        return GL_FALSE;
     }
 
-    if (strncmp((const char*) version, glesPrefix, strlen(glesPrefix)) == 0)
+    for (i = 0;  prefixes[i];  i++)
     {
-        // The version string on OpenGL ES has a prefix before the version
-        // number, so we skip past it and then continue as normal
+        const size_t length = strlen(prefixes[i]);
 
-        version += strlen(glesPrefix);
-    }
-
-    // Parse version from string
-
-    ptr = version;
-    for (_major = 0;  *ptr >= '0' && *ptr <= '9';  ptr++)
-        _major = 10 * _major + (*ptr - '0');
-
-    if (*ptr == '.')
-    {
-        ptr++;
-        for (_minor = 0;  *ptr >= '0' && *ptr <= '9';  ptr++)
-            _minor = 10 * _minor + (*ptr - '0');
-
-        if (*ptr == '.')
+        if (strncmp(version, prefixes[i], length) == 0)
         {
-            ptr++;
-            for (_rev = 0;  *ptr >= '0' && *ptr <= '9';  ptr++)
-                _rev = 10 * _rev + (*ptr - '0');
+            version += length;
+            break;
         }
     }
 
-    // Store result
+    if (!sscanf(version, "%d.%d.%d", &_major, &_minor, &_rev))
+    {
+        _glfwSetError(GLFW_PLATFORM_ERROR, "No version found in version string");
+        return GL_FALSE;
+    }
+
     *major = _major;
     *minor = _minor;
     *rev = _rev;