Back to index

glibc  2.9
sysmacros.h
Go to the documentation of this file.
00001 /* Definitions of macros to access `dev_t' values.
00002    Copyright (C) 1996, 1997, 1999, 2003, 2004, 2007
00003    Free Software Foundation, Inc.
00004    This file is part of the GNU C Library.
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 _SYS_SYSMACROS_H
00022 #define _SYS_SYSMACROS_H    1
00023 
00024 #include <features.h>
00025 
00026 /* If the compiler does not know long long it is out of luck.  We are
00027    not going to hack weird hacks to support the dev_t representation
00028    they need.  */
00029 #ifdef __GLIBC_HAVE_LONG_LONG
00030 __extension__
00031 extern unsigned int gnu_dev_major (unsigned long long int __dev)
00032      __THROW;
00033 __extension__
00034 extern unsigned int gnu_dev_minor (unsigned long long int __dev)
00035      __THROW;
00036 __extension__
00037 extern unsigned long long int gnu_dev_makedev (unsigned int __major,
00038                                           unsigned int __minor)
00039      __THROW;
00040 
00041 # if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES
00042 __extension__ __extern_inline unsigned int
00043 __NTH (gnu_dev_major (unsigned long long int __dev))
00044 {
00045   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
00046 }
00047 
00048 __extension__ __extern_inline unsigned int
00049 __NTH (gnu_dev_minor (unsigned long long int __dev))
00050 {
00051   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
00052 }
00053 
00054 __extension__ __extern_inline unsigned long long int
00055 __NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
00056 {
00057   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
00058          | (((unsigned long long int) (__minor & ~0xff)) << 12)
00059          | (((unsigned long long int) (__major & ~0xfff)) << 32));
00060 }
00061 # endif
00062 
00063 
00064 /* Access the functions with their traditional names.  */
00065 # define major(dev) gnu_dev_major (dev)
00066 # define minor(dev) gnu_dev_minor (dev)
00067 # define makedev(maj, min) gnu_dev_makedev (maj, min)
00068 #endif
00069 
00070 #endif /* sys/sysmacros.h */