vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

attribute-util.h (1712B)


      1 // $Id$    --*- c -*--
      2 
      3 // Copyright (C) 2007-2008 Daniel Hokka Zakrisson
      4 //  
      5 // This program is free software; you can redistribute it and/or modify
      6 // it under the terms of the GNU General Public License as published by
      7 // the Free Software Foundation; version 2 of the License.
      8 //  
      9 // This program is distributed in the hope that it will be useful,
     10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 // GNU General Public License for more details.
     13 //  
     14 // You should have received a copy of the GNU General Public License
     15 // along with this program; if not, write to the Free Software
     16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 #ifndef _ATTRIBUTE_UTIL_H
     19 #define _ATTRIBUTE_UTIL_H
     20 
     21 static inline int
     22 ffsull(unsigned long long word)
     23 {
     24   int bit;
     25   for (bit = 0; bit < 64; bit++) {
     26     if (word & (1ULL << bit))
     27       break;
     28   }
     29   if (bit == 64)
     30     bit = 0;
     31   return bit;
     32 }
     33 
     34 #define print_bitfield(fd, type, name, var)	\
     35   do {						\
     36   int first;					\
     37   WRITE_MSG(fd, name ":\n");			\
     38   first = 1;					\
     39   while (1) {					\
     40     char const *i;				\
     41     i = vc_lo ## type ## 2text(var);		\
     42     if (!i)					\
     43       break;					\
     44     if (!first)					\
     45       WRITE_MSG(fd, ",");			\
     46     else					\
     47       first = 0;				\
     48     WRITE_STR(fd, i);				\
     49   }						\
     50   while (*(var)) {				\
     51     int bit = ffsull(*(var));			\
     52     if (!bit)					\
     53       break;					\
     54     if (!first)					\
     55       WRITE_MSG(fd, ",");			\
     56     else					\
     57       first = 0;				\
     58     WRITE_MSG(fd, "^");				\
     59     WRITE_INT(fd, bit);				\
     60     *(var) &= ~(1ULL << bit);			\
     61   }						\
     62   WRITE_MSG(fd, "\n");				\
     63   } while (0)
     64 
     65 #endif