1 /** 2 * compat.c - Tweaks for Windows compatibility 3 * 4 * Copyright (c) 2002 Richard Russon 5 * Copyright (c) 2002-2004 Anton Altaparmakov 6 * 7 * This program/include file is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as published 9 * by the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program/include file is distributed in the hope that it will be 13 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program (in the main directory of the Linux-NTFS 19 * distribution in the file COPYING); if not, write to the Free Software 20 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 #ifdef WINDOWS 24 25 #ifdef HAVE_CONFIG_H 26 #include "config.h" 27 #endif 28 29 #include "compat.h" 30 31 /* TODO: Add check for FFS in the configure script... (AIA) */ 32 33 #ifndef HAVE_FFS 34 /** 35 * ffs - Find the first set bit in an int 36 * @x: 37 * 38 * Description... 39 * 40 * Returns: 41 */ 42 int ffs(int x) 43 { 44 int r = 1; 45 46 if (!x) 47 return 0; 48 if (!(x & 0xffff)) { 49 x >>= 16; 50 r += 16; 51 } 52 if (!(x & 0xff)) { 53 x >>= 8; 54 r += 8; 55 } 56 if (!(x & 0xf)) { 57 x >>= 4; 58 r += 4; 59 } 60 if (!(x & 3)) { 61 x >>= 2; 62 r += 2; 63 } 64 if (!(x & 1)) { 65 x >>= 1; 66 r += 1; 67 } 68 return r; 69 } 70 #endif /* HAVE_FFS */ 71 72 #endif /* WINDOWS */ 73