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