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