1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker * 5*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*8d67ca89SAndroid Build Coastguard Worker * are met: 8*8d67ca89SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 9*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in 12*8d67ca89SAndroid Build Coastguard Worker * the documentation and/or other materials provided with the 13*8d67ca89SAndroid Build Coastguard Worker * distribution. 14*8d67ca89SAndroid Build Coastguard Worker * 15*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16*8d67ca89SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17*8d67ca89SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18*8d67ca89SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19*8d67ca89SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21*8d67ca89SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22*8d67ca89SAndroid Build Coastguard Worker * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23*8d67ca89SAndroid Build Coastguard Worker * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24*8d67ca89SAndroid Build Coastguard Worker * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25*8d67ca89SAndroid Build Coastguard Worker * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 27*8d67ca89SAndroid Build Coastguard Worker */ 28*8d67ca89SAndroid Build Coastguard Worker 29*8d67ca89SAndroid Build Coastguard Worker #pragma once 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker /** 32*8d67ca89SAndroid Build Coastguard Worker * @file sys/param.h 33*8d67ca89SAndroid Build Coastguard Worker * @brief Various macros. 34*8d67ca89SAndroid Build Coastguard Worker */ 35*8d67ca89SAndroid Build Coastguard Worker 36*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 37*8d67ca89SAndroid Build Coastguard Worker 38*8d67ca89SAndroid Build Coastguard Worker #include <endian.h> 39*8d67ca89SAndroid Build Coastguard Worker #include <limits.h> 40*8d67ca89SAndroid Build Coastguard Worker #include <linux/param.h> 41*8d67ca89SAndroid Build Coastguard Worker 42*8d67ca89SAndroid Build Coastguard Worker /** The unit of `st_blocks` in `struct stat`. */ 43*8d67ca89SAndroid Build Coastguard Worker #define DEV_BSIZE 512 44*8d67ca89SAndroid Build Coastguard Worker 45*8d67ca89SAndroid Build Coastguard Worker /** A historical name for PATH_MAX. Use PATH_MAX in new code. */ 46*8d67ca89SAndroid Build Coastguard Worker #define MAXPATHLEN PATH_MAX 47*8d67ca89SAndroid Build Coastguard Worker 48*8d67ca89SAndroid Build Coastguard Worker /** A historical name for NGROUPS_MAX. Use NGROUPS_MAX in new code. */ 49*8d67ca89SAndroid Build Coastguard Worker #define NGROUPS NGROUPS_MAX 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker #define MAXSYMLINKS 8 52*8d67ca89SAndroid Build Coastguard Worker 53*8d67ca89SAndroid Build Coastguard Worker #ifndef howmany 54*8d67ca89SAndroid Build Coastguard Worker #define howmany(x, y) (((x)+((y)-1))/(y)) 55*8d67ca89SAndroid Build Coastguard Worker #endif 56*8d67ca89SAndroid Build Coastguard Worker #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker /** 59*8d67ca89SAndroid Build Coastguard Worker * Returns true if the binary representation of the argument is all zeros 60*8d67ca89SAndroid Build Coastguard Worker * or has exactly one bit set. Contrary to the macro name, this macro 61*8d67ca89SAndroid Build Coastguard Worker * DOES NOT determine if the provided value is a power of 2. In particular, 62*8d67ca89SAndroid Build Coastguard Worker * this function falsely returns true for powerof2(0) and some negative 63*8d67ca89SAndroid Build Coastguard Worker * numbers. 64*8d67ca89SAndroid Build Coastguard Worker */ 65*8d67ca89SAndroid Build Coastguard Worker #define powerof2(x) \ 66*8d67ca89SAndroid Build Coastguard Worker ({ \ 67*8d67ca89SAndroid Build Coastguard Worker __typeof__(x) _x = (x); \ 68*8d67ca89SAndroid Build Coastguard Worker __typeof__(x) _x2; \ 69*8d67ca89SAndroid Build Coastguard Worker __builtin_add_overflow(_x, -1, &_x2) ? 1 : ((_x2 & _x) == 0); \ 70*8d67ca89SAndroid Build Coastguard Worker }) 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker /** Returns the lesser of its two arguments. */ 73*8d67ca89SAndroid Build Coastguard Worker #define MIN(a,b) (((a)<(b))?(a):(b)) 74*8d67ca89SAndroid Build Coastguard Worker /** Returns the greater of its two arguments. */ 75*8d67ca89SAndroid Build Coastguard Worker #define MAX(a,b) (((a)>(b))?(a):(b)) 76