Annotation of qemu/tests/cris/check_glibc_kernelversion.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Check the lz insn.
                      3:  */
                      4: 
                      5: #include <stdio.h>
                      6: #include <stdlib.h>
                      7: #include <stdint.h>
                      8: #include "sys.h"
                      9: 
                     10: #define __LINUX_KERNEL_VERSION 131584
                     11: 
                     12: #define DL_SYSDEP_OSCHECK(FATAL) \
                     13:   do {                                                                        \
                     14:     /* Test whether the kernel is new enough.  This test is only              \
                     15:        performed if the library is not compiled to run on all                 \
                     16:        kernels.  */                                                           \
                     17:     if (__LINUX_KERNEL_VERSION > 0)                                           \
                     18:       {                                                                       \
                     19:         char bufmem[64];                                                      \
                     20:         char *buf = bufmem;                                                   \
                     21:         unsigned int version;                                                 \
                     22:         int parts;                                                            \
                     23:         char *cp;                                                             \
                     24:         struct utsname uts;                                                   \
                     25:                                                                               \
                     26:         /* Try the uname syscall */                                           \
                     27:         if (__uname (&uts))                                                   \
                     28:           {                                                                   \
                     29:             /* This was not successful.  Now try reading the /proc            \
                     30:                filesystem.  */                                                \
                     31:             ssize_t reslen;                                                   \
                     32:             int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);         \
                     33:             if (fd == -1                                                      \
                     34:                 || (reslen = __read (fd, bufmem, sizeof (bufmem))) <= 0)      \
                     35:               /* This also didn't work.  We give up since we cannot           \
                     36:                  make sure the library can actually work.  */                 \
                     37:               FATAL ("FATAL: cannot determine library version\n");            \
                     38:             __close (fd);                                                     \
                     39:             buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0';          \
                     40:           }                                                                   \
                     41:         else                                                                  \
                     42:           buf = uts.release;                                                  \
                     43:                                                                               \
                     44:         /* Now convert it into a number.  The string consists of at most      \
                     45:            three parts.  */                                                   \
                     46:         version = 0;                                                          \
                     47:         parts = 0;                                                            \
                     48:         cp = buf;                                                             \
                     49:         while ((*cp >= '0') && (*cp <= '9'))                                  \
                     50:           {                                                                   \
                     51:             unsigned int here = *cp++ - '0';                                  \
                     52:                                                                               \
                     53:             while ((*cp >= '0') && (*cp <= '9'))                              \
                     54:               {                                                               \
                     55:                 here *= 10;                                                   \
                     56:                 here += *cp++ - '0';                                          \
                     57:               }                                                               \
                     58:                                                                               \
                     59:             ++parts;                                                          \
                     60:             version <<= 8;                                                    \
                     61:             version |= here;                                                  \
                     62:                                                                               \
                     63:             if (*cp++ != '.')                                                 \
                     64:               /* Another part following?  */                                  \
                     65:               break;                                                          \
                     66:           }                                                                   \
                     67:                                                                               \
                     68:         if (parts < 3)                                                        \
                     69:           version <<= 8 * (3 - parts);                                        \
                     70:                                                                               \
                     71:         /* Now we can test with the required version.  */                     \
                     72:         if (version < __LINUX_KERNEL_VERSION)                                 \
                     73:           /* Not sufficent.  */                                               \
                     74:           FATAL ("FATAL: kernel too old\n");                                  \
                     75:                                                                               \
                     76:         _dl_osversion = version;                                              \
                     77:       }                                                                       \
                     78:   } while (0)
                     79: 
                     80: int main(void)
                     81: {
                     82:         char bufmem[64] = "2.6.22";
                     83:         char *buf = bufmem;
                     84:         unsigned int version;
                     85:         int parts;
                     86:         char *cp;
                     87: 
                     88:         version = 0;
                     89:         parts = 0;
                     90:         cp = buf;
                     91:         while ((*cp >= '0') && (*cp <= '9'))
                     92:           {
                     93:             unsigned int here = *cp++ - '0';
                     94: 
                     95:             while ((*cp >= '0') && (*cp <= '9'))
                     96:               {
                     97:                 here *= 10;
                     98:                 here += *cp++ - '0';
                     99:               }
                    100: 
                    101:             ++parts;
                    102:             version <<= 8;
                    103:             version |= here;
                    104: 
                    105:             if (*cp++ != '.')
                    106:               /* Another part following?  */
                    107:               break;
                    108:           }
                    109: 
                    110:         if (parts < 3)
                    111:           version <<= 8 * (3 - parts);
                    112:        if (version < __LINUX_KERNEL_VERSION)
                    113:                err();
                    114:        pass();
                    115:        exit(0);
                    116: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.