1 /* Optional code to distinguish library flavours.
2    Copyright (C) 2001-2021 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _DL_LIBRECON_H
20 #define _DL_LIBRECON_H	1
21 
22 static inline void __attribute__ ((unused, always_inline))
_dl_osversion_init(char * assume_kernel)23 _dl_osversion_init (char *assume_kernel)
24 {
25   unsigned long int i, j, osversion = 0;
26   char *p = assume_kernel, *q;
27 
28   for (i = 0; i < 3; i++, p = q + 1)
29     {
30       j = _dl_strtoul (p, &q);
31       if (j >= 255 || p == q || (i < 2 && *q && *q != '.'))
32 	{
33 	  osversion = 0;
34 	  break;
35 	}
36       osversion |= j << (16 - 8 * i);
37       if (!*q)
38 	break;
39     }
40   if (osversion)
41     GLRO(dl_osversion) = osversion;
42 }
43 
44 /* Recognizing extra environment variables.  */
45 #define EXTRA_LD_ENVVARS_13 \
46     if (memcmp (envline, "ASSUME_KERNEL", 13) == 0)			      \
47       {									      \
48 	_dl_osversion_init (&envline[14]);				      \
49 	break;								      \
50       }
51 
52 #define DL_OSVERSION_INIT \
53   do {									      \
54     char *assume_kernel = getenv ("LD_ASSUME_KERNEL");			      \
55     if (assume_kernel)							      \
56       _dl_osversion_init (assume_kernel);				      \
57   } while (0)
58 
59 #endif /* dl-librecon.h */
60