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