yann@962: --- glibc-2.7/sysdeps/unix/sysv/linux/dl-osinfo.h.orig 2007-09-15 23:54:08.000000000 +0100 yann@962: +++ glibc-2.7/sysdeps/unix/sysv/linux/dl-osinfo.h 2008-08-20 09:26:26.000000000 +0100 yann@962: @@ -83,6 +83,10 @@ yann@962: int parts; yann@962: char *cp; yann@962: struct utsname uts; yann@962: + int dotsfound = 0; yann@962: + int versionindex = 0; yann@962: + char *choppoint; yann@962: + yann@962: yann@962: /* Try the uname system call. */ yann@962: if (__uname (&uts)) yann@962: @@ -102,8 +106,34 @@ yann@962: else yann@962: buf = uts.release; yann@962: yann@962: + /* We are only interested in the first three kernel numbers, so */ yann@962: + /* chop off anything past that: */ yann@962: + yann@962: + choppoint = buf; yann@962: + while (1) yann@962: + { yann@962: + versionindex++; yann@962: + if (versionindex == 63) break; yann@962: + if (*choppoint == '.') dotsfound++; yann@962: + choppoint++; yann@962: + if (dotsfound == 2) yann@962: + { yann@962: + if (*choppoint == '0' || *choppoint == '1' yann@962: + || *choppoint == '2' || *choppoint == '3' yann@962: + || *choppoint == '4' || *choppoint == '5' yann@962: + || *choppoint == '6' || *choppoint == '7' yann@962: + || *choppoint == '8' || *choppoint == '9') yann@962: + continue; yann@962: + else yann@962: + { yann@962: + *choppoint = 0; yann@962: + break; yann@962: + } yann@962: + } yann@962: + } yann@962: + yann@962: /* Now convert it into a number. The string consists of at most yann@962: - three parts. */ yann@962: + three parts. Now it does, anyway. ;-) */ yann@962: version = 0; yann@962: parts = 0; yann@962: cp = buf;