Back to index

glibc  2.9
dl-librecon.h
Go to the documentation of this file.
00001 /* Optional code to distinguish library flavours.
00002    Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004    Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
00005 
00006    The GNU C Library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Lesser General Public
00008    License as published by the Free Software Foundation; either
00009    version 2.1 of the License, or (at your option) any later version.
00010 
00011    The GNU C Library is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014    Lesser General Public License for more details.
00015 
00016    You should have received a copy of the GNU Lesser General Public
00017    License along with the GNU C Library; if not, write to the Free
00018    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00019    02111-1307 USA.  */
00020 
00021 #ifndef _DL_LIBRECON_H
00022 #define _DL_LIBRECON_H      1
00023 
00024 static inline void __attribute__ ((unused, always_inline))
00025 _dl_osversion_init (char *assume_kernel)
00026 {
00027   unsigned long int i, j, osversion = 0;
00028   char *p = assume_kernel, *q;
00029 
00030   for (i = 0; i < 3; i++, p = q + 1)
00031     {
00032       j = __strtoul_internal (p, &q, 0, 0);
00033       if (j >= 255 || p == q || (i < 2 && *q && *q != '.'))
00034        {
00035          osversion = 0;
00036          break;
00037        }
00038       osversion |= j << (16 - 8 * i);
00039       if (!*q)
00040        break;
00041     }
00042   if (osversion)
00043     GLRO(dl_osversion) = osversion;
00044 }
00045 
00046 /* Recognizing extra environment variables.  */
00047 #define EXTRA_LD_ENVVARS_13 \
00048     if (memcmp (envline, "ASSUME_KERNEL", 13) == 0)                         \
00049       {                                                                     \
00050        _dl_osversion_init (&envline[14]);                            \
00051        break;                                                        \
00052       }
00053 
00054 #define DL_OSVERSION_INIT \
00055   do {                                                               \
00056     char *assume_kernel = getenv ("LD_ASSUME_KERNEL");                      \
00057     if (assume_kernel)                                                      \
00058       _dl_osversion_init (assume_kernel);                            \
00059   } while (0)
00060 
00061 #endif /* dl-librecon.h */