1f434fe12SDag-Erling Smørgrav /*- 2f434fe12SDag-Erling Smørgrav * Copyright (c) 1990, 1993 3f434fe12SDag-Erling Smørgrav * The Regents of the University of California. All rights reserved. 4f434fe12SDag-Erling Smørgrav * 5f434fe12SDag-Erling Smørgrav * Redistribution and use in source and binary forms, with or without 6f434fe12SDag-Erling Smørgrav * modification, are permitted provided that the following conditions 7f434fe12SDag-Erling Smørgrav * are met: 8f434fe12SDag-Erling Smørgrav * 1. Redistributions of source code must retain the above copyright 9f434fe12SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer. 10f434fe12SDag-Erling Smørgrav * 2. Redistributions in binary form must reproduce the above copyright 11f434fe12SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer in the 12f434fe12SDag-Erling Smørgrav * documentation and/or other materials provided with the distribution. 13f434fe12SDag-Erling Smørgrav * 3. All advertising materials mentioning features or use of this software 14f434fe12SDag-Erling Smørgrav * must display the following acknowledgement: 15f434fe12SDag-Erling Smørgrav * This product includes software developed by the University of 16f434fe12SDag-Erling Smørgrav * California, Berkeley and its contributors. 17f434fe12SDag-Erling Smørgrav * 4. Neither the name of the University nor the names of its contributors 18f434fe12SDag-Erling Smørgrav * may be used to endorse or promote products derived from this software 19f434fe12SDag-Erling Smørgrav * without specific prior written permission. 20f434fe12SDag-Erling Smørgrav * 21f434fe12SDag-Erling Smørgrav * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22f434fe12SDag-Erling Smørgrav * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23f434fe12SDag-Erling Smørgrav * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24f434fe12SDag-Erling Smørgrav * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25f434fe12SDag-Erling Smørgrav * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26f434fe12SDag-Erling Smørgrav * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27f434fe12SDag-Erling Smørgrav * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28f434fe12SDag-Erling Smørgrav * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29f434fe12SDag-Erling Smørgrav * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30f434fe12SDag-Erling Smørgrav * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31f434fe12SDag-Erling Smørgrav * SUCH DAMAGE. 32f434fe12SDag-Erling Smørgrav */ 33f434fe12SDag-Erling Smørgrav 34f434fe12SDag-Erling Smørgrav #include <sys/cdefs.h> 35f434fe12SDag-Erling Smørgrav __FBSDID("$FreeBSD$"); 36f434fe12SDag-Erling Smørgrav 37f434fe12SDag-Erling Smørgrav #include <strings.h> 38f434fe12SDag-Erling Smørgrav 39f434fe12SDag-Erling Smørgrav /* 40f434fe12SDag-Erling Smørgrav * Find Last Set bit 41f434fe12SDag-Erling Smørgrav */ 42f434fe12SDag-Erling Smørgrav int 43f434fe12SDag-Erling Smørgrav fls(int mask) 44f434fe12SDag-Erling Smørgrav { 45f434fe12SDag-Erling Smørgrav int bit; 46f434fe12SDag-Erling Smørgrav 47f434fe12SDag-Erling Smørgrav if (mask == 0) 48f434fe12SDag-Erling Smørgrav return (0); 49f434fe12SDag-Erling Smørgrav for (bit = 1; mask != 1; bit++) 50f434fe12SDag-Erling Smørgrav (unsigned int)mask >>= 1; 51f434fe12SDag-Erling Smørgrav return (bit); 52f434fe12SDag-Erling Smørgrav } 53