bitops.c revision 50e1e10fa0ac12a3e2a9d20a75ee9041873cda96
1/* 2 * bitops.c --- Bitmap frobbing code. See bitops.h for the inlined 3 * routines. 4 * 5 * Copyright (C) 1993, 1994 Theodore Ts'o. This file may be 6 * redistributed under the terms of the GNU Public License. 7 * 8 * Taken from <asm/bitops.h>, Copyright 1992, Linus Torvalds. 9 */ 10 11#include <stdio.h> 12#include <sys/types.h> 13 14#include <linux/ext2_fs.h> 15 16#include "ext2fs.h" 17 18#ifndef _EXT2_HAVE_ASM_BITOPS_ 19 20/* 21 * For the benefit of those who are trying to port Linux to another 22 * architecture, here are some C-language equivalents. You should 23 * recode these in the native assmebly language, if at all possible. 24 * 25 * C language equivalents written by Theodore Ts'o, 9/26/92. 26 * Modified by Pete A. Zaitcev 7/14/95 to be portable to big endian 27 * systems, as well as non-32 bit systems. 28 */ 29 30int set_bit(int nr,void * addr) 31{ 32 int mask, retval; 33 unsigned char *ADDR = (unsigned char *) addr; 34 35 ADDR += nr >> 3; 36 mask = 1 << (nr & 0x07); 37 retval = (mask & *ADDR) != 0; 38 *ADDR |= mask; 39 return retval; 40} 41 42int clear_bit(int nr, void * addr) 43{ 44 int mask, retval; 45 unsigned char *ADDR = (unsigned char *) addr; 46 47 ADDR += nr >> 3; 48 mask = 1 << (nr & 0x07); 49 retval = (mask & *ADDR) != 0; 50 *ADDR &= ~mask; 51 return retval; 52} 53 54int test_bit(int nr, const void * addr) 55{ 56 int mask; 57 const unsigned char *ADDR = (const unsigned char *) addr; 58 59 ADDR += nr >> 3; 60 mask = 1 << (nr & 0x07); 61 return ((mask & *ADDR) != 0); 62} 63 64#endif /* !_EXT2_HAVE_ASM_BITOPS_ */ 65 66void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg, 67 const char *description) 68{ 69 if (description) 70 com_err(0, errcode, "#%u for %s", arg, description); 71 else 72 com_err(0, errcode, "#%u", arg); 73} 74 75